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:
+11
-3
@@ -12,7 +12,7 @@ engine — anything in it may be pulled into context on demand. `ideas/` and `re
|
||||
## How you use it
|
||||
|
||||
You ask for a feature. The skill fires by itself and runs
|
||||
`Clarify → Plan → Implement → Verify → Document → Report`.
|
||||
`Clarify → Plan → Implement → Verify → Document → Commit → Report`.
|
||||
|
||||
This runs for casual requests too — the skill fires on "the default-language files do not need the
|
||||
`.en` part" exactly as it does on "add tag pages", with a one-line plan instead of a full one. A short
|
||||
@@ -26,7 +26,7 @@ need to run there rather than pretending to have done it.
|
||||
3. **Agent:** a short plan — goal, primitive, success criteria, files, ±LOC, deps, earn-it check,
|
||||
and what it is deliberately *not* doing.
|
||||
4. **You:** "go", or edit the plan. "Just do it" skips the gate on small changes.
|
||||
5. **Agent:** implements, runs `./scripts/verify.sh`, shows real output, updates docs, reports.
|
||||
5. **Agent:** implements, runs `./scripts/verify.sh`, shows real output, updates docs, commits, reports.
|
||||
|
||||
Occasional maintenance, by you:
|
||||
|
||||
@@ -70,6 +70,14 @@ change detection. Treat a *second* raise as evidence that something belongs in `
|
||||
two ceilings exist so that "core stops growing, ext rises" is observable, and that stops being true the moment
|
||||
leaves are allowed into core.
|
||||
|
||||
**The agent commits by itself, and tells you the first time.** Work is committed as part of the loop
|
||||
rather than on request (ADR-0052) — one commit per revertible unit, never a `push`. In a session where
|
||||
you have not asked for that, the first commit is preceded by a line saying so and naming the off
|
||||
switch ("stop committing"), because a commit appearing in your repository unannounced is a surprise
|
||||
even when it is harmless. The asymmetry is the argument: a commit you did not want is one `git revert`
|
||||
away, and work that existed only in the working tree when something went wrong is gone. If you want
|
||||
the tree left dirty, say so and the loop stops at Document.
|
||||
|
||||
**What is staged has to build, not just the working tree.** Every other gate looks at your files; this one
|
||||
looks at the commit you are about to make, by building a throwaway checkout of the index. It exists because
|
||||
staging a subset — a changed signature without its caller — produced a commit that did not compile while
|
||||
@@ -90,7 +98,7 @@ In order, cheapest first:
|
||||
`docs/state.md` has fallen behind the code.
|
||||
2. `docs/state.md` — what exists, the earn-it counters, the latent list, the commit it was last verified
|
||||
against. This is the only doc that describes the present.
|
||||
3. `git log --oneline` — one feature per commit, each body saying *why* (`conventions.md`). This is the
|
||||
3. `git log --oneline` — one revertible unit per commit, each body saying *why* (`conventions.md`). This is the
|
||||
real map of how the code got here.
|
||||
4. `/refresh-docs` — reconciles every doc against the actual code and reports drift, which is exactly the
|
||||
question you have after a year.
|
||||
|
||||
Reference in New Issue
Block a user