Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R3/S3.
F203 A written one-task-one-commit rule did not stop commits that ship several tasks, though counted from the ledgers they are a small share
| Field | Value |
|---|---|
| Status | active |
| Topic | Commits and concurrent sessions |
| Grade | R3/S3 |
| Cases | winwright, roadkeep, freewilly |
| Contrary | polyweave |
| Harness facts | none |
Claim
Every project states one task per commit and forbids batching in prose, yet in three of the four projects whose ledgers can be counted some commits ship two or more tasks at once, from under 1 percent of ship commits in roadkeep to about 4 percent in winwright, where they cluster in one week; polyweave has none in 110, and the two projects that call the rule their most violated did not count it.
Mechanism
The rule is an instruction in a skill or an every-turn file, and nothing refuses a commit that ships two tasks. A request to work through a block invites the agent to finish several tasks and commit once, which is why each project's rule singles out the multi-task request and prescribes a loop that commits at the end of every iteration. Because roadkeep writes one ledger line per shipped task, the history can be read back for commits that added more than one.
Observations
The counts below are this study's, made at each pin by reading git log <pin> -p -- docs/CHANGELOG.md and counting, per commit, the added lines that open a shipped entry (- ✅ or, for a partial ship, -- ✅). A commit that adds two or more is a commit that recorded two or more ships.
- winwright. The rule was in the skill from the adoption commit, "It is a request to run tasks one at a time, committing after each." [winwright@fd4162f:.claude/skills/roadmap-docs/SKILL.md#L40]
(read at that commit, not the pin), and at the pin it reads "is not permission to batch" [winwright@861b82e:.claude/skills/roadmap-docs/SKILL.md#L39-L40]. Of 486 commits that add a ship entry, 465 add one, 18 add two and 3 add three or more. Of those 21, 19 name two or more task ids in the subject, and 18 of the 19 fall between 2026-08-26 and 2026-09-02, for example "feat(WW57-WW63): make a case a data file the engine runs, not a script the author repeats" [winwright@a91a6a4] and "fix(WW216,WW217,WW219,WW220): keep a limit where its value is read and a claim to what was observed" [winwright@03e119b].
- roadkeep. The rule: "One task → one commit, the instant it is validated." [roadkeep@91754240:.claude/skills/roadkeep-dev/SKILL.md#L61-L62]
Of 1,177 commits that add a ship entry, 1,169 add one, 6 add two and 2 add three or more. Three of the eight name several ids in the subject, as in "feat: read a nested task line, ignore a fenced example, and delete a section in one edit (RK49, RK53, RK54)" [roadkeep@9cb44199] and "feat: RK1398-RK1400 - a documentation area, built by a workflow and never committed" [roadkeep@4c1caa58].
- freewilly. The skill calls it "the single most violated rule" [freewilly@c1c2eaf:.claude/skills/freewilly-roadmap-docs/SKILL.md#L10-L11]
and says a multi-task request "is NOT permission to" [freewilly@c1c2eaf:.claude/skills/freewilly-roadmap-docs/SKILL.md#L20] batch. Of 281 commits that add a ship entry, 278 add one, 2 add two and 1 adds six. Two name two ids: "fix(engine): DD267 and DD269 keep a start from racing the engine unpack" [freewilly@7bef7a5] and "feat(ui): DD38 a window drawn from a fixture, and DD66 the row that could not draw" [freewilly@d465734].
- polyweave. The rule is "staged by path, never pushed" [polyweave@6d1c136:CLAUDE.md#L62-L63],
one commit per task. Each of the 110 commits that add a ship entry adds exactly one.
- Shio. The index calls it "the most violated rule in the project." [shio@821f18d74:agents.md#L247]
and requires a loop for "a batch of ≥2 tasks" [shio@821f18d74:agents.md#L250]. Shio's ledger does not use shipped-entry lines of this form, so the count above cannot be made there, and no Shio source counts violations.
Independence
Three independent origins: batching commits are each project's own failures (rule 1), made in separate histories. The rule and its loop remedy are one origin, copied across the projects with near-identical wording, and are not counted. The count uses the same instrument in all four projects, so a bias in it (below) applies to all of them alike.
Counter-evidence
polyweave is contrary: no ship commit in its history records two ships. Its history is three days long and drains a backlog written before any code, which may explain the difference; no source says so. Against the prose, the counts are low: freewilly's "single most violated rule" shows in 3 of 281 ship commits. The count is a lower bound of batching, since it misses a commit that carries a second task's code under one ship line (as in F201) and a batch that was never shipped. It can also overcount: a commit adding several entries may be a ledger migration rather than a batch, which is why the subjects are reported separately.
Grade
R3: batching commits in three projects, each its own failure. S3: the shares are counted at each pin with a repeatable command, git log <pin> -p -- docs/CHANGELOG.md, counting per commit the added lines that begin - ✅ or -- ✅, and what it counts is the finding's own effect: commits that record two or more ships. The subjects naming several ids are listed beside the counts because a multi-entry commit can also be a ledger migration. Not S4: nothing refuses a batching commit. Contrary observation: polyweave.