commit as part of the loop, and announce it when unasked
The loop gains a seventh step. Work was being committed all session on a verbal instruction, which means it was a property of one conversation rather than of the harness: a fresh session would have left everything in the working tree and reported success. Why automatic: a commit is one `git revert` from undone, and work that only ever existed in the working tree is not recoverable — this session already lost uncommitted work to a `git checkout` while signing was broken. Why announced: the safety argument covers the loss, not the surprise, so a session that did not ask for this gets one prominent line before the first commit and the off switch, once. Ownership split so nothing is stated twice: conventions.md "Git" owns what one commit contains — now one *revertible* unit rather than one feature, which is the human's correction to the "never bundle two passes" reading — and CLAUDE.md §4 owns when a commit happens. ADR-0052 records both, including that no gate can check this: no script can see whether a sentence was said. Docs 6 files, +72/-6 lines. No code, no counters moved.
This commit is contained in:
@@ -79,8 +79,8 @@ the test: `docs/architecture.md`.
|
||||
|
||||
## 4. The loop (every request, no exceptions)
|
||||
|
||||
`Clarify → Plan → Implement → Verify → Document → Report`.
|
||||
Procedure: `.claude/skills/khosra-feature-loop/SKILL.md`. The two gates people skip:
|
||||
`Clarify → Plan → Implement → Verify → Document → Commit → Report`.
|
||||
Procedure: `.claude/skills/khosra-feature-loop/SKILL.md`. The three gates people skip:
|
||||
|
||||
**Clarify.** Only questions whose answer changes the code or the bytes on disk. Max three,
|
||||
batched, up front, each with a **bold** default so silence answers. Never about naming, formatting,
|
||||
@@ -90,6 +90,18 @@ or anything `docs/conventions.md` decides. None to ask? State assumptions in one
|
||||
ran (golden file, `curl`, test name, benchmark). Never report success from reading your own diff.
|
||||
"Should work" is not a result.
|
||||
|
||||
**Commit.** Work lands in git without being asked, every time, before you report. What one commit
|
||||
contains is `docs/conventions.md` "Git": the changes that would be reverted together, bundled
|
||||
together. Never `git push`, and never `--no-verify` without saying why in the body. Asymmetry is the
|
||||
whole reason — a commit is one `git revert` away from undone, while work that only ever existed in
|
||||
the working tree is not recoverable at all.
|
||||
|
||||
**Announce it once per session, prominently, when it was not asked for.** If the human has not
|
||||
already asked for automatic commits in *this* session, the first commit is preceded by a visible
|
||||
line of its own — not a clause inside the report — saying that this change is being committed, that
|
||||
later changes will be too, and that saying so turns it off. Silence is consent only after the notice
|
||||
exists; before it, an unannounced commit is a surprise in someone else's repository.
|
||||
|
||||
## 5. Definition of done
|
||||
|
||||
- [ ] Plan's success criteria demonstrated with real output.
|
||||
@@ -97,6 +109,7 @@ ran (golden file, `curl`, test name, benchmark). Never report success from readi
|
||||
- [ ] Diff contains nothing outside the planned files.
|
||||
- [ ] `docs/state.md` updated (inventory, counters, latent items, verified-at line).
|
||||
- [ ] ADR in `docs/decisions.md` if a load-bearing choice was made.
|
||||
- [ ] Committed — one revertible unit per commit, announced if this session did not ask for it.
|
||||
- [ ] Report states LOC delta, what is now earned, what you deliberately did not do.
|
||||
|
||||
## 6. Stop conditions — halt and ask
|
||||
|
||||
Reference in New Issue
Block a user