Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2.0 KiB
2.0 KiB
Behavioral check — coupled-capitalize, end-to-end
The deterministic suite (run-deterministic.sh, T1–T7) proves memory-commit.sh
in isolation. This is the in-vivo whole-chain check: a real dev-flow shape —
code commit, then capitalize writes memory, then the include commits it — with
dangling code present, proving the memory commit is coupled AND surgical.
Scenario (run on a throwaway repo)
R="$(mktemp -d)"; cd "$R"
git init -q && git config user.email t@t.t && git config user.name t
mkdir -p .claude/memory .claude/tasks src
printf 'baseline\n' > .claude/memory/decisions.md
git add -A && git commit -qm baseline
# 1) the flow commits CODE
printf 'feature code\n' > src/feature.txt
git add -- src/feature.txt && git commit -qm "feat: the feature"
code_hash="$(git rev-parse --short HEAD)"
# 2) capitalize writes the approved entry (referencing the code hash) + journal
printf '\n## BDR-099 — example\n- Reference: commit %s\n' "$code_hash" >> .claude/memory/decisions.md
printf -- '- did the thing\n' >> .claude/tasks/TODO.md
# 3) a code file is left dangling (must NOT be embarked)
printf 'WIP do not commit\n' > src/dangling.txt
# 4) the include commits the memory surgically
mem_hash="$(bash "$HOME/.claude/lib/memory-commit.sh" commit "chore(memory): BDR-099 — example")"
Expected (assert)
- Exactly TWO commits after baseline: the code commit, then the memory commit.
- The memory commit (
$mem_hash) contains ONLY.claude/memory/decisions.mdand.claude/tasks/TODO.md— neversrc/feature.txt(already committed) orsrc/dangling.txt(WIP). src/dangling.txtis still untracked after the memory commit.$mem_hash(the memory commit) ≠$code_hash(anchored inside the entry).
If all hold, the chain is coupled (memory committed in the same breath as the flow) and surgical (no dangling code embarked). This mirrors what feat / hotfix / bugfix / commit-change do via their capitalize step, and what ship-feature / init-project do before FINISH.