51da9fab53
Two project-wide rules are now explicit across every skill: 1. Only the Boss commits. No skill agent (implementer, brainstormer, planner, debugger, fieldtester, docwriter, architect, bencher) runs `git commit`. Agents write their artefacts to the working tree as unstaged changes; the Boss inspects, decides commit shape, and commits. 2. main HEAD is sacrosanct. No actor runs `git reset` or `git revert` on main. Bad work stays in the working tree where it is still discardable via `git checkout -- <paths>`. Implement loses the `iter/<iter_id>` branch mechanic entirely; Phase 0 of the orchestrator-agent now does a clean-tree check and refuses to start on a dirty tree. Per-task agent commits are removed everywhere; reviewers operate against `git diff HEAD` instead of `pre_task_sha..head_sha`. Motivation: 2026-05-11 iter 23.4 stranded prep2/prep3 commits on an iter-branch that never integrated to main, then a corrected spec falsely claimed those commits had shipped. Branch-per-iter + manual-Boss-merge + iter-stacking made the strand structurally possible. See docs/journals/2026-05-11-iter-disc.1.md for the full per-task notes and motivation.
191 lines
8.5 KiB
Markdown
191 lines
8.5 KiB
Markdown
# iter disc.1 — boss-only commits and main-as-quarantine
|
|
|
|
**Date:** 2026-05-11
|
|
**Started from:** 841d65d
|
|
**Status:** DONE
|
|
**Tasks completed:** 10 of 10 (Boss-direct implementation; no orchestrator dispatch)
|
|
|
|
## Summary
|
|
|
|
Skill-system-wide discipline update. Two project-wide rules are now
|
|
explicit:
|
|
|
|
1. **Only the Boss commits.** No skill agent — implementer,
|
|
brainstormer, planner, debugger, fieldtester, docwriter,
|
|
architect, bencher — performs `git commit`. Agents write all
|
|
their artefacts into the working tree as unstaged changes; the
|
|
Boss inspects, decides commit shape (typically one cohesive iter
|
|
commit, occasionally a few logical commits), and commits.
|
|
2. **main HEAD is sacrosanct.** No actor — Boss or agent — runs
|
|
`git reset` or `git revert` on main. Bad work stays in the
|
|
working tree where it is still discardable via
|
|
`git checkout -- <paths>`; main moves forward only via Boss
|
|
commits.
|
|
|
|
The two rules together force a working-tree-as-quarantine
|
|
discipline: nothing half-baked enters main, because nothing can
|
|
be taken back off main. The implement skill loses its
|
|
`iter/<iter_id>` branch-per-iter mechanic entirely; per-task agent
|
|
commits are also gone — Phase 4 of the orchestrator-agent now
|
|
writes the per-iter journal and the stats file into the working
|
|
tree (Write tool) but does not commit them.
|
|
|
|
## Per-task notes
|
|
|
|
- disc.1.1: `skills/implement/SKILL.md` — Iron Law rewritten
|
|
("IMPLEMENTER NEVER COMMITS" replaces "ONE BRANCH PER ITER";
|
|
"MAIN HEAD IS SACROSANCT" added). Step 3 "Boss merge step"
|
|
renamed and rewritten as "Boss inspect + commit step" (no
|
|
fast-forward; Boss reads `git status` / `git diff`, decides
|
|
commit shape, commits). Step 4 (BLOCKED) rewritten: Working-Tree
|
|
inspect, Repair re-dispatch or Discard via
|
|
`git checkout -- .`, no branch deletion. Description, Overview,
|
|
Rationalisations, Red Flags updated.
|
|
- disc.1.2: `skills/implement/agents/ailang-implement-orchestrator.md`
|
|
rewritten — Phase 0 is now a clean-tree check
|
|
(`git status --porcelain` must be empty), records
|
|
`start_sha` informationally (not as reset target), refuses to
|
|
proceed on a dirty tree. All `git commit` invocations removed.
|
|
Phase 4 (journal) and Phase 5 (stats) write to the working tree
|
|
via the Write tool, no commit. End-report Branch-field replaced
|
|
by `Working tree: dirty (N files)` and `(uncommitted)` markers
|
|
on file paths.
|
|
- disc.1.3: `skills/implement/agents/ailang-implementer.md`,
|
|
`ailang-tester.md` — commit steps in The Process removed.
|
|
Red-Flag "commit on red tests" replaced by the broader "never
|
|
commits, ever". Self-review now operates on `git diff HEAD`
|
|
with `git checkout -- <path>` for undo.
|
|
- disc.1.4: `skills/implement/agents/ailang-spec-reviewer.md`,
|
|
`ailang-quality-reviewer.md` — Carrier fields `pre_task_sha` /
|
|
`head_sha` replaced by `diff_command` (default `git diff HEAD`).
|
|
The full working-tree diff accumulates across tasks; reviewers
|
|
focus on the current task's footprint via the task block's file
|
|
list (or an optional `task_footprint_hint`).
|
|
- disc.1.5: `skills/brainstorm/SKILL.md` — Step 8 spec-commit
|
|
block removed; brainstorm writes the spec, user reviews, Boss
|
|
commits. The Step-7.5 retire-on-BLOCK procedure was rewritten
|
|
too: it now deletes the working-tree spec file (Bash `rm`, not
|
|
`git rm`, since the file was never committed) and appends a
|
|
roadmap entry; Boss commits the roadmap edit.
|
|
- disc.1.6: `skills/planner/SKILL.md` — Step 6 plan-commit
|
|
block removed; planner writes the plan, hand-off carries the
|
|
filepath, Boss commits. Plan-template tasks lose their
|
|
per-task "Step 5: Commit" — tasks are now 4 steps (write-failing-
|
|
test, verify-fail, write-impl, verify-pass) and leave work in
|
|
the working tree for the iter-level Boss commit. The "Bundle
|
|
Tasks 3 and 4" rationalisation reframed: tasks are units of
|
|
review, not units of commit.
|
|
- disc.1.7: `skills/debug/SKILL.md`, `skills/debug/agents/ailang-debugger.md`
|
|
— debugger writes the RED test to the working tree (uncommitted)
|
|
and hands off. The Boss chooses between two flows for
|
|
implement-mini: commit the RED separately for an audit-trail
|
|
before dispatching mini-mode (clean-tree mini gets the RED via
|
|
HEAD diff), or commit RED+GREEN together at the end (Boss
|
|
decides before dispatching).
|
|
- disc.1.8: `skills/fieldtest/SKILL.md`,
|
|
`skills/fieldtest/agents/ailang-fieldtester.md` — Phase 5
|
|
commit block removed; fieldtester writes `.ailx` files,
|
|
`.ail.json` files, and the spec to the working tree; Boss
|
|
commits with the suggested subject
|
|
`fieldtest: <milestone> — <N> examples, <K> findings`.
|
|
- disc.1.9: `skills/docwriter/agents/ailang-docwriter.md` —
|
|
Iron Law extended with "YOU NEVER COMMIT"; Red-Flag added.
|
|
`skills/audit/SKILL.md` — Step 4 reframed to name the Boss as
|
|
the actor who commits tidy fixes / ratify baselines / clean
|
|
closes. Other audit-agent files (architect, bencher) had no
|
|
commit invocations and are unchanged in this dispatch.
|
|
- disc.1.10: `skills/README.md` — Conventions section gained
|
|
two new bullets ("Only the Boss commits", "main HEAD is
|
|
sacrosanct"). Skill-table Output column updated for implement,
|
|
docwriter, fieldtest, debug to say "uncommitted in the working
|
|
tree". `CLAUDE.md` Direction-freedom subsection rewritten
|
|
(recovery is no longer about reverting commits; it is about
|
|
discarding bad working-tree state). New
|
|
"Commit discipline and main-branch sanctity" subsection added,
|
|
stating both rules in CLAUDE.md form.
|
|
|
|
## Concerns
|
|
|
|
(empty)
|
|
|
|
## Known debt
|
|
|
|
- Three historical files describe the obsolete branch-per-iter
|
|
discipline: `docs/specs/2026-05-11-implement-orchestrator-agent.md`,
|
|
`docs/journals/2026-05-11-iter-pr.1.md`,
|
|
`docs/plans/2026-05-11-orchestrator-refactor.md`. They are
|
|
zeitliche records and are left intact; this journal entry is the
|
|
forward-pointer that supersedes them. A future tidy iter could
|
|
add "Superseded by" banners, but the journal-archive convention is
|
|
append-only history.
|
|
- The implement orchestrator's Phase 0 refuses to run on a dirty
|
|
tree. The first real dispatch under the new discipline may
|
|
surface friction around this (e.g. Boss prepared scratch files
|
|
before dispatch). Capture in that iter's journal.
|
|
|
|
## Blocked detail
|
|
|
|
(none — DONE)
|
|
|
|
## Files touched
|
|
|
|
- `CLAUDE.md`
|
|
- `skills/README.md`
|
|
- `skills/audit/SKILL.md`
|
|
- `skills/brainstorm/SKILL.md`
|
|
- `skills/debug/SKILL.md`
|
|
- `skills/debug/agents/ailang-debugger.md`
|
|
- `skills/docwriter/agents/ailang-docwriter.md`
|
|
- `skills/fieldtest/SKILL.md`
|
|
- `skills/fieldtest/agents/ailang-fieldtester.md`
|
|
- `skills/implement/SKILL.md`
|
|
- `skills/implement/agents/ailang-implement-orchestrator.md`
|
|
- `skills/implement/agents/ailang-implementer.md`
|
|
- `skills/implement/agents/ailang-quality-reviewer.md`
|
|
- `skills/implement/agents/ailang-spec-reviewer.md`
|
|
- `skills/implement/agents/ailang-tester.md`
|
|
- `skills/planner/SKILL.md`
|
|
- `docs/journals/2026-05-11-iter-disc.1.md` (this file)
|
|
- `docs/journals/INDEX.md`
|
|
|
|
## Motivation
|
|
|
|
On 2026-05-11 iter 23.4 (eq/ord prelude — Free-Fns) BLOCKED three
|
|
times. A retrospective brainstorm produced a corrected spec; the
|
|
implement-orchestrator was dispatched on the revised plan and
|
|
immediately BLOCKED at Phase 0 with a branch-state mismatch: an
|
|
existing `iter/23.4` branch carried prep2 + prep3 commits that
|
|
the spec falsely claimed lived on main. They had never been
|
|
fast-forwarded; they were stranded on the iter-branch when the
|
|
iter was abandoned. The grounding-check agent had passed the
|
|
spec because it verified main-behaviour-via-green-tests, not
|
|
git-reachability of named commit SHAs.
|
|
|
|
The user identified the structural root cause: branch-per-iter
|
|
plus manual Boss-merge plus iter-stacking allows work to strand
|
|
on a branch that nobody integrates. The discipline correction is
|
|
this iter:
|
|
|
|
- Drop the branch mechanic in implement entirely.
|
|
- Centralise commit authority on the Boss across every skill.
|
|
- Make main forward-only by policy: no reset, no revert, by
|
|
anyone.
|
|
|
|
Per-task agent commits were eh too many (user phrasing: "es wird
|
|
eh viel zu viel commitet") — the new policy eliminates them as
|
|
a side-effect.
|
|
|
|
## Forward pointer
|
|
|
|
Step 5 of the 2026-05-11 recovery plan: re-attempt the eq/ord
|
|
prelude mono-pass unification (iter 23.4 in the corrected spec
|
|
`docs/specs/2026-05-11-23-eq-ord-prelude.md`), now under the
|
|
discipline this iter installs. A fresh plan is written first;
|
|
the implement-orchestrator is dispatched against it; the Boss
|
|
inspects + commits at the end. No branches, no agent commits.
|
|
|
|
## Stats
|
|
|
|
None — this iter was Boss-direct implementation (no orchestrator
|
|
dispatch; no stats file written).
|