Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
fc1caa2
chore: update review-adr workflow to renamed ADR-0004 filename
lzrscg Apr 20, 2026
b39853d
chore: cleanup
lzrscg Apr 20, 2026
ea04d37
docs(adr-0004): tighten cleanup safety summary, spawn-failure cleanup…
lzrscg Apr 20, 2026
b2a6e28
chore: upgrade workflow
lzrscg Apr 20, 2026
8abb277
docs(adr-0004): add project-root cwd and LOOPX_WORKFLOW_DIR
lzrscg Apr 20, 2026
3052856
docs(adr-0004): fix leak wording, absolute invocation path, §5.1 reta…
lzrscg Apr 20, 2026
1fa8c45
docs(adr-0004): weaken JS/TS import.meta.url symlink equality, clarif…
lzrscg Apr 20, 2026
4712ae0
docs(adr-0004): resolve relative RunOptions.cwd, broaden symlink cave…
lzrscg Apr 20, 2026
90b63a5
docs(adr-0004): fix env rationale, snapshot inherited env, broaden sy…
lzrscg Apr 20, 2026
c65af43
Merge remote-tracking branch 'origin/main' into adr-0004
lzrscg Apr 20, 2026
6e01a6f
docs(adr-0004): clarify cwd spelling, PWD handling, partial tmpdir cl…
lzrscg Apr 20, 2026
e554053
docs(adr-0004): resolve env/cleanup contradictions from review feedback
lzrscg Apr 21, 2026
4d48609
docs(adr-0004): address remaining blockers from ADR-0001 review
lzrscg Apr 21, 2026
098a7d0
docs(adr-0004): address symlink, cleanup taxonomy, and error-path gap…
lzrscg Apr 21, 2026
37d696a
docs(adr-0004): soften env name-validation claims and clarify cleanup…
lzrscg Apr 21, 2026
1b871c7
docs(adr-0004): address review blockers on warning tokens, options or…
lzrscg Apr 21, 2026
c4c3575
docs(adr-0004): address remaining review blockers on abort precedence…
lzrscg Apr 21, 2026
d49f075
docs(adr-0004): tighten pre-first-next carve-out, abort-after-final-y…
lzrscg Apr 21, 2026
46f4b19
docs(adr-0004): weaken Bash PWD claims, align version-check wording w…
lzrscg Apr 21, 2026
26202bc
docs(adr-0004): fix abort-precedence contradiction, cleanup-token sco…
lzrscg Apr 21, 2026
c7ebb2c
docs(adr-0004): add scope-of-contract note, programmatic precedence s…
lzrscg Apr 21, 2026
9095130
docs(adr-0004): address review feedback on timing, signal-wins scope,…
lzrscg Apr 21, 2026
2574533
docs(adr-0004): fix token-escape contradiction, split runPromise env-…
lzrscg Apr 21, 2026
e795826
docs(adr-0004): address review blockers — signal/parser race, token s…
lzrscg Apr 21, 2026
8ecace1
docs(adr-0004): address pre-acceptance review feedback
lzrscg Apr 21, 2026
f348bcc
docs(adr-0004): tighten to minimal-but-thorough — drop over-specifica…
lzrscg Apr 22, 2026
00c315e
docs(adr-0004): address pre-acceptance review — cancellation scope, r…
lzrscg Apr 22, 2026
73df049
chore: update loopx workflows
lzrscg Apr 22, 2026
11fca31
docs(adr-0004): add §6 auto-install workflow npm dependencies during …
lzrscg Apr 22, 2026
3a82fe3
chore: update workflows
lzrscg Apr 22, 2026
f01e19d
docs(adr-0004): add .gitignore safeguard to §6 auto-install
lzrscg Apr 22, 2026
ea61692
chore: update loopx workflows
lzrscg Apr 22, 2026
51fa585
docs(adr-0004): tighten pre-acceptance review — .gitignore failure, §…
lzrscg Apr 22, 2026
d5fde44
chore: update loopx workflows
lzrscg Apr 22, 2026
51b5878
docs(adr-0004): update SPEC.md for script execution context, CLI gram…
lzrscg Apr 22, 2026
9cadd30
docs(adr-0004): apply post-acceptance feedback to SPEC.md
lzrscg Apr 22, 2026
43fb44f
docs(adr-0004): apply post-acceptance feedback to SPEC.md
lzrscg Apr 22, 2026
b0f85ae
docs(adr-0004): apply post-acceptance feedback to SPEC.md
lzrscg Apr 23, 2026
6de7d96
docs(adr-0004): apply post-acceptance feedback to SPEC.md
lzrscg Apr 23, 2026
0b487fc
docs(adr-0004): apply post-acceptance feedback to SPEC.md
lzrscg Apr 23, 2026
4fd258b
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 23, 2026
3a40018
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 23, 2026
44a8c87
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
b3bb78b
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
21a68d6
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
5c9e916
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
b2c91d4
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
91c3f01
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
5aa8d34
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
fb1e189
chore: update loopx workflows
lzrscg Apr 24, 2026
148dea5
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
adcf77a
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
2366ec9
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
0a2fe73
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
08ae8f4
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
ca2605e
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
026906c
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
9dfd837
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 24, 2026
b51bc42
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
9c3a7a8
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
c03bde3
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
7c3f943
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
ee8b7d9
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
2e3aa22
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
27dc59b
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
0228007
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
4746405
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
a45c054
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
3b1c75d
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
f6b4a33
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
7998086
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
9a7ed5e
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
da50ae0
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 25, 2026
478a91b
chore(review-test-spec): scope review and SPEC-PROBLEMS to active ADR
lzrscg Apr 26, 2026
af6413d
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
1e09688
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
31490c8
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
8fdcd8a
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
f3a88c3
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
ea11031
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
2cf2ce9
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
9ecda6d
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
fefcc0f
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
5b7d1a0
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
1aa9400
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 26, 2026
94c5217
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
c8a75b6
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
59f5be8
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
dd0c3b8
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
2991314
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
d626614
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
ee9f765
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
1ef0c3a
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
bf979bb
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
bb34de1
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
e138181
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
8605f99
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
5543868
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
aec8fff
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
5409b21
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
f09458c
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
32845ea
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
7fa7d1a
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
0b2c831
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
13f8f3e
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
a27d308
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
2cc63b4
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
01ac77c
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
65d49e1
docs(adr-0004): apply post-acceptance feedback to TEST-SPEC.md
lzrscg Apr 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions .loopx/apply-adr/apply-feedback.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ ROOT="$LOOPX_PROJECT_ROOT"
SHARED_DIR="$ROOT/.loopx/shared"
FEEDBACK_FILE="$SHARED_DIR/.feedback.tmp"
CLAUDE_OUTPUT_FILE="$SHARED_DIR/.claude-output.tmp"
SESSION_FILE="$SHARED_DIR/.session.tmp"

if [[ ! -f "$FEEDBACK_FILE" ]]; then
echo "Error: No feedback file found at $FEEDBACK_FILE" >&2
Expand All @@ -13,21 +14,19 @@ fi

FEEDBACK=$(cat "$FEEDBACK_FILE")

ADR_0002=$(cat "$ROOT/adr/0002-run-subcommand.md")
SPEC=$(cat "$ROOT/SPEC.md")
RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"
ADR_REL="adr/$(basename "$ADR_FILE")"

PROMPT="ADR-0002 has been accepted and I am now updating SPEC.md to incorporate its changes (per the ADR process in ADR-0001). I received the following feedback on the current state of SPEC.md. Apply this feedback by updating SPEC.md only. ADR-0002 is the authoritative reference for what should change — do not modify it. If there is any ambiguity about my intentions, ask me clarifying questions. Think critically about this feedback and push back if warranted. After you finish, commit and push.

adr/0002-run-subcommand.md (accepted — read-only reference):
$ADR_0002

Current SPEC.md:
$SPEC
PROMPT="ADR-$ADR_NUM ($ADR_REL) has been accepted and I am now updating SPEC.md to incorporate its changes (per the ADR process in adr/0001-adr-process.md). I received the following feedback on the current state of SPEC.md. Apply this feedback by updating SPEC.md only. ADR-$ADR_NUM is the authoritative reference for what should change — do not modify it. SPEC.md should describe the current specification only — no migration notes, breaking changes, or references to prior versions. If there is any ambiguity about my intentions, ask me clarifying questions. When you ask questions, ask only one at a time and wait for my answer before asking the next — do not batch multiple questions together. I have not read the feedback, I only pasted it in, so phrase each question to stand on its own: include the relevant context or quote from the feedback so I can answer without having to go read it. Think critically about this feedback and push back if warranted. After you finish, commit and push.

Feedback:
$FEEDBACK"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions -p 2>/dev/null)
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
echo "$SESSION_ID" > "$SESSION_FILE"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions --session-id "$SESSION_ID" -p 2>/dev/null)

rm -f "$FEEDBACK_FILE"
echo "$CLAUDE_OUTPUT" > "$CLAUDE_OUTPUT_FILE"
Expand Down
16 changes: 7 additions & 9 deletions .loopx/apply-adr/index.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
ADR_0001="$ROOT/adr/0001-adr-process.md"
ADR_0002="$ROOT/adr/0002-run-subcommand.md"
SPEC="$ROOT/SPEC.md"
SHARED_DIR="$ROOT/.loopx/shared"
PROMPT_FILE="$SHARED_DIR/.prompt.tmp"
Expand All @@ -19,23 +18,22 @@ if [[ ! -f "$ADR_0001" ]]; then
exit 1
fi

if [[ ! -f "$ADR_0002" ]]; then
echo "Error: adr/0002-run-subcommand.md not found" >&2
exit 1
fi

if [[ ! -f "$SPEC" ]]; then
echo "Error: SPEC.md not found" >&2
exit 1
fi

RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"
ADR_REL="adr/$(basename "$ADR_FILE")"

echo "$LOOPX_WORKFLOW" > "$CALLER_FILE"

cat <<PROMPT > "$PROMPT_FILE"
ADR 0002 has been accepted. The next step in the process is to update SPEC.md to incorporate the changes described in ADR 0002. Review the current SPEC.md against ADR 0002 and let me know if the SPEC updates look correct and complete, or if anything else in the SPEC needs to be changed.
ADR $ADR_NUM has been accepted. The next step in the process is to update SPEC.md to incorporate the changes described in ADR $ADR_NUM. Review the current SPEC.md against ADR $ADR_NUM and let me know if the SPEC updates look correct and complete, or if anything else in the SPEC needs to be changed.

adr/0002-run-subcommand.md (accepted — do not modify):
$(cat "$ADR_0002")
$ADR_REL (accepted — do not modify):
$(cat "$ADR_FILE")

SPEC.md (target of updates):
$(cat "$SPEC")
Expand Down
3 changes: 2 additions & 1 deletion .loopx/ralph/check-ready.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ echo "=== Readiness verdict: ${VERDICT} ===" >&2

if echo "$VERDICT" | grep -qw "READY"; then
ITER=$(cat "$ITER_FILE" 2>/dev/null || echo "?")
JOB="$(basename "$ROOT") / ralph"

curl -s -X POST "${TELEGRAM_API}/sendMessage" \
-d chat_id="$TELEGRAM_CHAT_ID" \
--data-urlencode "text=Ralph loop: production ready after iteration ${ITER}. Halting." > /dev/null
--data-urlencode "text=[${JOB}] production ready after iteration ${ITER}. Halting." > /dev/null

rm -f "$ITER_FILE"
echo "=== Production ready — halting loop ===" >&2
Expand Down
4 changes: 3 additions & 1 deletion .loopx/ralph/index.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ else
fi
echo "$ITER" > "$ITER_FILE"

JOB="$(basename "$ROOT") / ralph"

curl -s -X POST "${TELEGRAM_API}/sendMessage" \
-d chat_id="$TELEGRAM_CHAT_ID" \
--data-urlencode "text=Ralph loop: starting iteration ${ITER}" > /dev/null
--data-urlencode "text=[${JOB}] starting iteration ${ITER}" > /dev/null

echo "=== Ralph iteration ${ITER} ===" >&2

Expand Down
12 changes: 10 additions & 2 deletions .loopx/review-adr/apply-feedback.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ ROOT="$LOOPX_PROJECT_ROOT"
SHARED_DIR="$ROOT/.loopx/shared"
FEEDBACK_FILE="$SHARED_DIR/.feedback.tmp"
CLAUDE_OUTPUT_FILE="$SHARED_DIR/.claude-output.tmp"
SESSION_FILE="$SHARED_DIR/.session.tmp"

if [[ ! -f "$FEEDBACK_FILE" ]]; then
echo "Error: No feedback file found at $FEEDBACK_FILE" >&2
Expand All @@ -13,12 +14,19 @@ fi

FEEDBACK=$(cat "$FEEDBACK_FILE")

PROMPT="I received the following feedback about ADR-0004 (run-scoped tmpdir and script args proposal) and its relationship to SPEC.md as defined by the the process laid out in ADR-0001. Incorporate this feedback to improve ADR-0004. If there is any ambiguity about my intentions, ask me clarifying questions. Think critically about this feedback and push back if warranted. Do not update any file other than ADR-0004 and do not mark it as accepted. After you finish, commit and push.
RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"
ADR_REL="adr/$(basename "$ADR_FILE")"

PROMPT="I received the following feedback about ADR-$ADR_NUM ($ADR_REL) and its relationship to SPEC.md as defined by the process laid out in ADR-0001. Incorporate this feedback to improve ADR-$ADR_NUM. Use your judgement on the best implementation details to achieve the product goals; if there is any ambiguity about my intentions, ask me clarifying questions from a product perspective rather than an implementation perspective. When you ask questions, ask only one at a time and wait for my answer before asking the next — do not batch multiple questions together. I have not read the feedback, I only pasted it in, so phrase each question to stand on its own: include the relevant context or quote from the feedback so I can answer without having to go read it. Think critically about this feedback and push back if warranted. Don't include migration details for existing users. Only include what is necessary to thoroughly update SPEC.md — keep additional information (such as testing considerations) to a minimum, because the primary purpose of this ADR is to be used to update SPEC.md. Do not update any file other than ADR-$ADR_NUM and do not mark it as accepted. After you finish, commit and push.

Feedback:
$FEEDBACK"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions -p 2>/dev/null)
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
echo "$SESSION_ID" > "$SESSION_FILE"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions --session-id "$SESSION_ID" -p 2>/dev/null)

rm -f "$FEEDBACK_FILE"
echo "$CLAUDE_OUTPUT" > "$CLAUDE_OUTPUT_FILE"
Expand Down
20 changes: 10 additions & 10 deletions .loopx/review-adr/index.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
ADR_0001="$ROOT/adr/0001-adr-process.md"
ADR_0004="$ROOT/adr/0004-tmpdir-and-args.md"
SPEC="$ROOT/SPEC.md"
SHARED_DIR="$ROOT/.loopx/shared"
PROMPT_FILE="$SHARED_DIR/.prompt.tmp"
Expand All @@ -19,26 +18,27 @@ if [[ ! -f "$ADR_0001" ]]; then
exit 1
fi

if [[ ! -f "$ADR_0004" ]]; then
echo "Error: adr/0004-tmpdir-and-args.md not found" >&2
exit 1
fi

if [[ ! -f "$SPEC" ]]; then
echo "Error: SPEC.md not found" >&2
exit 1
fi

RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"
ADR_REL="adr/$(basename "$ADR_FILE")"

echo "$LOOPX_WORKFLOW" > "$CALLER_FILE"

cat <<PROMPT > "$PROMPT_FILE"
Review ADR 0001, ADR 0004, and SPEC.md holistically and let me know if I can mark ADR 0004 as accepted or if I need to improve it further. Ask me clarifying questions if you have any doubts about my intentions for ADR 0004.

adr/0001-adr-process.md:
$(cat "$ADR_0001")

adr/0004-tmpdir-and-args.md:
$(cat "$ADR_0004")
---

Review ADR $ADR_NUM and SPEC.md against the process described in adr/0001-adr-process.md above. Let me know if I can mark ADR $ADR_NUM as accepted or if I need to improve it further. Ask me clarifying questions if you have any doubts about my intentions for ADR $ADR_NUM.

$ADR_REL:
$(cat "$ADR_FILE")

SPEC.md:
$(cat "$SPEC")
Expand Down
32 changes: 32 additions & 0 deletions .loopx/review-spec/apply-feedback.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash
set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
SHARED_DIR="$ROOT/.loopx/shared"
FEEDBACK_FILE="$SHARED_DIR/.feedback.tmp"
CLAUDE_OUTPUT_FILE="$SHARED_DIR/.claude-output.tmp"
SESSION_FILE="$SHARED_DIR/.session.tmp"

if [[ ! -f "$FEEDBACK_FILE" ]]; then
echo "Error: No feedback file found at $FEEDBACK_FILE" >&2
exit 1
fi

FEEDBACK=$(cat "$FEEDBACK_FILE")

PROMPT="I got this feedback from a review of @SPEC.md please incorporate this feedback. Use your judgement to make implementation decisions as long as they are aligned with my product vision. If there is any ambiguity about my intentions, ask me clarifying questions from a product perspective rather than an implementation perspective. When you ask questions, ask only one at a time and wait for my answer before asking the next — do not batch multiple questions together. I have not read the feedback, I only pasted it in, so phrase each question to stand on its own: include the relevant context or quote from the feedback so I can answer without having to go read it. Think critically and push back if needed. Only modify SPEC.md and after you are done, commit and push:

$FEEDBACK"

SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
echo "$SESSION_ID" > "$SESSION_FILE"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions --session-id "$SESSION_ID" -p 2>/dev/null)

rm -f "$FEEDBACK_FILE"
echo "$CLAUDE_OUTPUT" > "$CLAUDE_OUTPUT_FILE"

echo "" >&2
echo "=== Claude finished applying feedback ===" >&2

$LOOPX_BIN output --goto "shared:check-question"
29 changes: 29 additions & 0 deletions .loopx/review-spec/index.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash
set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
SPEC="$ROOT/SPEC.md"
SHARED_DIR="$ROOT/.loopx/shared"
PROMPT_FILE="$SHARED_DIR/.prompt.tmp"
CALLER_FILE="$SHARED_DIR/.caller.tmp"

if [[ ! -d "$SHARED_DIR" ]]; then
echo "Error: shared workflow not found at $SHARED_DIR — install it with: loopx install -w shared modularcloud/sdg-workflows" >&2
exit 1
fi

if [[ ! -f "$SPEC" ]]; then
echo "Error: SPEC.md not found at $SPEC — review-spec requires SPEC.md to exist at the project root" >&2
exit 1
fi

echo "$LOOPX_WORKFLOW" > "$CALLER_FILE"

cat <<PROMPT > "$PROMPT_FILE"
Review my specification and let me know if this is implementation-ready or if you have feedback. To refine your feedback, feel free to ask questions.

SPEC.md:
$(cat "$SPEC")
PROMPT

$LOOPX_BIN output --goto "shared:dispatch"
38 changes: 38 additions & 0 deletions .loopx/review-test-spec/apply-feedback.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
SHARED_DIR="$ROOT/.loopx/shared"
FEEDBACK_FILE="$SHARED_DIR/.feedback.tmp"
CLAUDE_OUTPUT_FILE="$SHARED_DIR/.claude-output.tmp"
SESSION_FILE="$SHARED_DIR/.session.tmp"

if [[ ! -f "$FEEDBACK_FILE" ]]; then
echo "Error: No feedback file found at $FEEDBACK_FILE" >&2
exit 1
fi

RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"

FEEDBACK=$(cat "$FEEDBACK_FILE")

PROMPT="I received the following feedback on TEST-SPEC.md with respect to SPEC.md. Apply this feedback by updating TEST-SPEC.md. SPEC.md is the authoritative source for what TEST-SPEC.md should cover.

This review and any feedback you apply is scoped to ADR-$ADR_NUM. You are allowed to modify SPEC.md only when the feedback proposes a specific SPEC change that resolves a SPEC-PROBLEMS.md entry scoped to ADR-$ADR_NUM, and you MUST verify any proposed SPEC.md edits with me before applying them — show me the exact diff and wait for explicit approval. Do **not** apply SPEC.md changes that are unrelated to ADR-$ADR_NUM, even if the feedback proposes them — push back and explain that those changes are out of scope for this cycle. If you find a problem in the spec (an ambiguity, gap, or under-specified clause that prevents TEST-SPEC.md from covering the behavior cleanly) and that problem is scoped to ADR-$ADR_NUM, add it to SPEC-PROBLEMS.md so we can work to resolve it in a follow-up cycle; do not record problems unrelated to ADR-$ADR_NUM. If there are no remaining problems in the spec scoped to ADR-$ADR_NUM, delete SPEC-PROBLEMS.md. If there is any ambiguity about my intentions, ask me clarifying questions. When you ask questions, ask only one at a time and wait for my answer before asking the next — do not batch multiple questions together. I have not read the feedback, I only pasted it in, so phrase each question to stand on its own: include the relevant context or quote from the feedback so I can answer without having to go read it. Think critically about this feedback and push back if warranted. After you finish, commit and push.

Feedback:
$FEEDBACK"

SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
echo "$SESSION_ID" > "$SESSION_FILE"

CLAUDE_OUTPUT=$(echo "$PROMPT" | claude --dangerously-skip-permissions --session-id "$SESSION_ID" -p 2>/dev/null)

rm -f "$FEEDBACK_FILE"
echo "$CLAUDE_OUTPUT" > "$CLAUDE_OUTPUT_FILE"

echo "" >&2
echo "=== Claude finished applying feedback ===" >&2

$LOOPX_BIN output --goto "shared:check-question"
54 changes: 54 additions & 0 deletions .loopx/review-test-spec/index.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/bin/bash
set -euo pipefail

ROOT="$LOOPX_PROJECT_ROOT"
SPEC="$ROOT/SPEC.md"
TEST_SPEC="$ROOT/TEST-SPEC.md"
SPEC_PROBLEMS="$ROOT/SPEC-PROBLEMS.md"
SHARED_DIR="$ROOT/.loopx/shared"
PROMPT_FILE="$SHARED_DIR/.prompt.tmp"
CALLER_FILE="$SHARED_DIR/.caller.tmp"

if [[ ! -d "$SHARED_DIR" ]]; then
echo "Error: shared workflow not found at $SHARED_DIR — install it with: loopx install -w shared modularcloud/sdg-workflows" >&2
exit 1
fi

if [[ ! -f "$SPEC" ]]; then
echo "Error: SPEC.md not found at $SPEC — review-test-spec requires SPEC.md to exist at the project root" >&2
exit 1
fi

if [[ ! -f "$TEST_SPEC" ]]; then
echo "Error: TEST-SPEC.md not found at $TEST_SPEC — review-test-spec requires TEST-SPEC.md to exist at the project root" >&2
exit 1
fi

RESOLVED=$("$SHARED_DIR/resolve-adr.sh")
IFS=$'\t' read -r ADR_NUM ADR_FILE <<< "$RESOLVED"
ADR_REL="adr/$(basename "$ADR_FILE")"

echo "$LOOPX_WORKFLOW" > "$CALLER_FILE"

if [[ -f "$SPEC_PROBLEMS" ]]; then
SPEC_PROBLEMS_BLOCK="$(printf 'SPEC-PROBLEMS.md (open SPEC ambiguities scoped to ADR-%s — please also work to resolve any problems listed here):\n%s\n\n' "$ADR_NUM" "$(cat "$SPEC_PROBLEMS")")"
else
SPEC_PROBLEMS_BLOCK="SPEC-PROBLEMS.md is absent — there are no currently tracked open SPEC ambiguities scoped to ADR-${ADR_NUM}."$'\n\n'
fi

cat <<PROMPT > "$PROMPT_FILE"
Review TEST-SPEC.md against SPEC.md and let me know whether TEST-SPEC.md covers the behavior described in SPEC.md correctly and completely, or what needs to be added, changed, or removed.

This review is scoped to ADR-$ADR_NUM. SPEC.md changes are permitted **only** when they directly resolve a SPEC-PROBLEMS.md entry that is itself scoped to ADR-$ADR_NUM. Do **not** propose SPEC.md edits unrelated to ADR-$ADR_NUM, even if you notice gaps, ambiguities, or improvements in other sections of SPEC.md — those are out of scope for this cycle. Also work to resolve any problems in SPEC-PROBLEMS.md (if present) — call out which entries appear addressable in this cycle and which still require a SPEC change. If SPEC-PROBLEMS.md exists, you may propose specific SPEC.md edits that would resolve the listed ambiguities, but only when those edits are scoped to ADR-$ADR_NUM. If you find a SPEC ambiguity, gap, or under-specified clause that prevents TEST-SPEC.md from covering ADR-$ADR_NUM behavior cleanly, recommend adding it to SPEC-PROBLEMS.md; do not record problems unrelated to ADR-$ADR_NUM.

$ADR_REL (scope of this review — SPEC and SPEC-PROBLEMS changes must be related to this ADR):
$(cat "$ADR_FILE")

SPEC.md (authoritative reference; SPEC.md edits are permitted only to resolve SPEC-PROBLEMS.md entries scoped to ADR-$ADR_NUM):
$(cat "$SPEC")

${SPEC_PROBLEMS_BLOCK}TEST-SPEC.md (target of updates):
$(cat "$TEST_SPEC")
PROMPT

$LOOPX_BIN output --goto "shared:dispatch"
21 changes: 19 additions & 2 deletions .loopx/shared/apply-answer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,33 @@ set -euo pipefail
ROOT="$LOOPX_PROJECT_ROOT"
CLAUDE_OUTPUT_FILE="$ROOT/.loopx/$LOOPX_WORKFLOW/.claude-output.tmp"
ANSWER_FILE="$ROOT/.loopx/$LOOPX_WORKFLOW/.answer.tmp"
SESSION_FILE="$ROOT/.loopx/$LOOPX_WORKFLOW/.session.tmp"
CALLER_FILE="$ROOT/.loopx/$LOOPX_WORKFLOW/.caller.tmp"

if [[ ! -f "$ANSWER_FILE" ]]; then
echo "Error: No answer file found at $ANSWER_FILE" >&2
exit 1
fi

if [[ ! -f "$SESSION_FILE" ]]; then
echo "Error: No session file found at $SESSION_FILE — apply-feedback must run first" >&2
exit 1
fi

if [[ ! -f "$CALLER_FILE" ]]; then
echo "Error: No caller file found at $CALLER_FILE" >&2
exit 1
fi

ANSWER=$(cat "$ANSWER_FILE")
SESSION_ID=$(cat "$SESSION_FILE")
CALLER=$(cat "$CALLER_FILE")
CALLER_DIR="$ROOT/.loopx/$CALLER"

# Continue the existing conversation started by apply-feedback
CLAUDE_OUTPUT=$(echo "$ANSWER" | claude --dangerously-skip-permissions -c -p 2>/dev/null)
# Resume the session started by the caller's apply-feedback. Claude Code
# stores session files per-cwd, so we must cd into the caller's workflow
# directory before --resume can locate the session.
CLAUDE_OUTPUT=$(cd "$CALLER_DIR" && echo "$ANSWER" | claude --dangerously-skip-permissions --resume "$SESSION_ID" -p 2>/dev/null)

echo "$CLAUDE_OUTPUT" > "$CLAUDE_OUTPUT_FILE"
rm -f "$ANSWER_FILE"
Expand Down
Loading
Loading