formwork-kit 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. formwork_cli/__init__.py +326 -0
  2. formwork_cli/kit/COSTS.md +111 -0
  3. formwork_cli/kit/adapters/claude-code/README.md +53 -0
  4. formwork_cli/kit/adapters/claude-code/settings.json +46 -0
  5. formwork_cli/kit/adapters/codex/README.md +43 -0
  6. formwork_cli/kit/adapters/cursor/README.md +45 -0
  7. formwork_cli/kit/adapters/gemini-cli/README.md +47 -0
  8. formwork_cli/kit/build +410 -0
  9. formwork_cli/kit/check/checks/config-shape +123 -0
  10. formwork_cli/kit/check/checks/decision-ids +159 -0
  11. formwork_cli/kit/check/checks/doc-links +133 -0
  12. formwork_cli/kit/check/checks/generated-current +74 -0
  13. formwork_cli/kit/check/checks/guard-wired +139 -0
  14. formwork_cli/kit/check/checks/kit-integrity +199 -0
  15. formwork_cli/kit/check/checks/predictions-first +127 -0
  16. formwork_cli/kit/check/checks/role-shape +172 -0
  17. formwork_cli/kit/check/checks/rule-labels +135 -0
  18. formwork_cli/kit/check/fixtures/config-shape/must-fail/documents-a-section-that-does-not-exist/.formwork.toml +5 -0
  19. formwork_cli/kit/check/fixtures/config-shape/must-fail/documents-a-section-that-does-not-exist/formwork/guide.md +13 -0
  20. formwork_cli/kit/check/fixtures/config-shape/must-fail/rules-as-a-switchboard/.formwork.toml +8 -0
  21. formwork_cli/kit/check/fixtures/config-shape/must-pass/layers-kept-apart/.formwork.toml +5 -0
  22. formwork_cli/kit/check/fixtures/decision-ids/must-fail/a-placeholder-shipped/docs/decisions/0003-still-pending.md +7 -0
  23. formwork_cli/kit/check/fixtures/decision-ids/must-fail/superseded-by-nothing/docs/decisions/0002-old.md +6 -0
  24. formwork_cli/kit/check/fixtures/decision-ids/must-fail/two-decisions-one-number/docs/decisions/0007-first.md +6 -0
  25. formwork_cli/kit/check/fixtures/decision-ids/must-fail/two-decisions-one-number/docs/decisions/0007-second.md +6 -0
  26. formwork_cli/kit/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0001-the-first.md +6 -0
  27. formwork_cli/kit/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0002-the-second.md +6 -0
  28. formwork_cli/kit/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0003-the-third.md +6 -0
  29. formwork_cli/kit/check/fixtures/decision-ids/must-pass/nothing-recorded-yet/docs/decisions/README.md +3 -0
  30. formwork_cli/kit/check/fixtures/doc-links/must-fail/never-written/index.md +7 -0
  31. formwork_cli/kit/check/fixtures/doc-links/must-fail/renamed-file/architecture-notes.md +3 -0
  32. formwork_cli/kit/check/fixtures/doc-links/must-fail/renamed-file/guide.md +8 -0
  33. formwork_cli/kit/check/fixtures/doc-links/must-pass/links-resolve/architecture-notes.md +1 -0
  34. formwork_cli/kit/check/fixtures/doc-links/must-pass/links-resolve/guide.md +5 -0
  35. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.claude/agents/sample.md +22 -0
  36. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.codex/agents/sample.toml +22 -0
  37. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.formwork.toml +1 -0
  38. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.gemini/agents/sample.md +23 -0
  39. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/formwork/build +349 -0
  40. formwork_cli/kit/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/formwork/roles/method/sample.md +18 -0
  41. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/.claude/agents/sample.md +20 -0
  42. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/.codex/agents/sample.toml +22 -0
  43. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/.formwork.toml +1 -0
  44. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/.gemini/agents/sample.md +23 -0
  45. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/formwork/build +349 -0
  46. formwork_cli/kit/check/fixtures/generated-current/must-pass/generated-and-current/formwork/roles/method/sample.md +18 -0
  47. formwork_cli/kit/check/fixtures/generated-current/must-pass/nothing-is-generated-here/README.md +3 -0
  48. formwork_cli/kit/check/fixtures/guard-wired/must-fail/declared-but-no-file/.formwork.toml +1 -0
  49. formwork_cli/kit/check/fixtures/guard-wired/must-fail/file-but-not-wired/.claude/settings.json +1 -0
  50. formwork_cli/kit/check/fixtures/guard-wired/must-fail/file-but-not-wired/.formwork.toml +1 -0
  51. formwork_cli/kit/check/fixtures/guard-wired/must-pass/declared-and-wired/.claude/settings.json +1 -0
  52. formwork_cli/kit/check/fixtures/guard-wired/must-pass/declared-and-wired/.formwork.toml +1 -0
  53. formwork_cli/kit/check/fixtures/guard-wired/must-pass/nothing-declared/README.md +1 -0
  54. formwork_cli/kit/check/fixtures/kit-integrity/must-fail/a-check-went-missing/formwork/check/checks/still-here +2 -0
  55. formwork_cli/kit/check/fixtures/kit-integrity/must-fail/a-check-went-missing/state/fingerprints.txt +2 -0
  56. formwork_cli/kit/check/fixtures/kit-integrity/must-fail/a-guard-was-altered/formwork/guard/git-boundary +3 -0
  57. formwork_cli/kit/check/fixtures/kit-integrity/must-fail/a-guard-was-altered/state/fingerprints.txt +1 -0
  58. formwork_cli/kit/check/fixtures/kit-integrity/must-pass/everything-matches/formwork/guard/git-boundary +2 -0
  59. formwork_cli/kit/check/fixtures/kit-integrity/must-pass/everything-matches/state/fingerprints.txt +1 -0
  60. formwork_cli/kit/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/architect.md +3 -0
  61. formwork_cli/kit/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/researcher.md +3 -0
  62. formwork_cli/kit/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/round.md +4 -0
  63. formwork_cli/kit/check/fixtures/predictions-first/must-pass/a-round-that-has-not-argued-yet/docs/rounds/0006-not-started/round.md +3 -0
  64. formwork_cli/kit/check/fixtures/predictions-first/must-pass/no-rounds-at-all/docs/README.md +3 -0
  65. formwork_cli/kit/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/architect.md +3 -0
  66. formwork_cli/kit/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/predictions.md +4 -0
  67. formwork_cli/kit/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/researcher.md +3 -0
  68. formwork_cli/kit/check/fixtures/role-shape/must-fail/claims-a-grant-binds-everywhere/formwork/roles/README.md +6 -0
  69. formwork_cli/kit/check/fixtures/role-shape/must-fail/claims-a-grant-binds-everywhere/formwork/roles/complete.md +18 -0
  70. formwork_cli/kit/check/fixtures/role-shape/must-fail/missing-a-section/formwork/roles/vague.md +16 -0
  71. formwork_cli/kit/check/fixtures/role-shape/must-fail/spawn-without-being-lead/formwork/roles/eager.md +18 -0
  72. formwork_cli/kit/check/fixtures/role-shape/must-fail/two-roles-one-job/formwork/roles/first.md +18 -0
  73. formwork_cli/kit/check/fixtures/role-shape/must-fail/two-roles-one-job/formwork/roles/second.md +18 -0
  74. formwork_cli/kit/check/fixtures/role-shape/must-pass/well-formed/formwork/roles/complete.md +18 -0
  75. formwork_cli/kit/check/fixtures/rule-labels/must-fail/claims-enforcement-that-does-not-exist/formwork/rules/core.md +9 -0
  76. formwork_cli/kit/check/fixtures/rule-labels/must-fail/no-catches/formwork/rules/core.md +9 -0
  77. formwork_cli/kit/check/fixtures/rule-labels/must-fail/unlabelled/formwork/rules/core.md +7 -0
  78. formwork_cli/kit/check/fixtures/rule-labels/must-pass/well-formed/formwork/rules/core.md +10 -0
  79. formwork_cli/kit/check/run +340 -0
  80. formwork_cli/kit/check/test_gate.py +222 -0
  81. formwork_cli/kit/first-run.md +204 -0
  82. formwork_cli/kit/fw +121 -0
  83. formwork_cli/kit/glossary.md +160 -0
  84. formwork_cli/kit/guard/git-boundary +627 -0
  85. formwork_cli/kit/guard/protected-files +748 -0
  86. formwork_cli/kit/guard/quality-gate +260 -0
  87. formwork_cli/kit/guard/test_boundary.py +273 -0
  88. formwork_cli/kit/guard/test_protection.py +254 -0
  89. formwork_cli/kit/guard/test_quality_gate.py +156 -0
  90. formwork_cli/kit/install +395 -0
  91. formwork_cli/kit/limits.md +141 -0
  92. formwork_cli/kit/loop.md +82 -0
  93. formwork_cli/kit/roles/HOW-TO-ADD-A-ROLE.md +105 -0
  94. formwork_cli/kit/roles/TEMPLATE.md +26 -0
  95. formwork_cli/kit/roles/method/architect.md +269 -0
  96. formwork_cli/kit/roles/method/challenger.md +243 -0
  97. formwork_cli/kit/roles/method/lead.md +280 -0
  98. formwork_cli/kit/roles/method/record-keeper.md +206 -0
  99. formwork_cli/kit/roles/method/researcher.md +246 -0
  100. formwork_cli/kit/roles/method/reviewer.md +207 -0
  101. formwork_cli/kit/roles/packs/accessibility.md +236 -0
  102. formwork_cli/kit/roles/packs/ai.md +248 -0
  103. formwork_cli/kit/roles/packs/analyst.md +233 -0
  104. formwork_cli/kit/roles/packs/backend.md +425 -0
  105. formwork_cli/kit/roles/packs/brainstormer.md +190 -0
  106. formwork_cli/kit/roles/packs/data.md +212 -0
  107. formwork_cli/kit/roles/packs/devops.md +203 -0
  108. formwork_cli/kit/roles/packs/frontend.md +224 -0
  109. formwork_cli/kit/roles/packs/integrations.md +215 -0
  110. formwork_cli/kit/roles/packs/legal.md +251 -0
  111. formwork_cli/kit/roles/packs/marketing.md +206 -0
  112. formwork_cli/kit/roles/packs/mobile.md +202 -0
  113. formwork_cli/kit/roles/packs/performance.md +192 -0
  114. formwork_cli/kit/roles/packs/product.md +217 -0
  115. formwork_cli/kit/roles/packs/security.md +267 -0
  116. formwork_cli/kit/roles/packs/sre.md +203 -0
  117. formwork_cli/kit/roles/packs/tester.md +246 -0
  118. formwork_cli/kit/roles/packs/user-researcher.md +218 -0
  119. formwork_cli/kit/roles/packs/ux.md +205 -0
  120. formwork_cli/kit/roles/packs/visual.md +199 -0
  121. formwork_cli/kit/roles/packs/writer.md +198 -0
  122. formwork_cli/kit/round.md +131 -0
  123. formwork_cli/kit/rules/core.md +195 -0
  124. formwork_cli/kit/rules/full.md +493 -0
  125. formwork_cli/kit/templates/brief.md +68 -0
  126. formwork_cli/kit/templates/decision.md +93 -0
  127. formwork_cli/kit/templates/predictions.md +54 -0
  128. formwork_cli/kit/templates/report.md +52 -0
  129. formwork_cli/kit/templates/round.md +77 -0
  130. formwork_cli/kit/test_install.py +165 -0
  131. formwork_cli/kit/troubleshooting.md +247 -0
  132. formwork_cli/kit-page/FORMWORK.md +182 -0
  133. formwork_kit-0.1.0.dist-info/METADATA +308 -0
  134. formwork_kit-0.1.0.dist-info/RECORD +137 -0
  135. formwork_kit-0.1.0.dist-info/WHEEL +4 -0
  136. formwork_kit-0.1.0.dist-info/entry_points.txt +2 -0
  137. formwork_kit-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,195 @@
1
+ # Core rules
2
+
3
+ Thirteen. These come up in almost every piece of work.
4
+
5
+ Each says what it catches. None tells you a story — the stories belong to
6
+ somebody else's project, and a class of failure is more useful than one
7
+ instance of it anyway.
8
+
9
+ None of these is blocked by a program. They are advice. What is blocked is
10
+ listed in `FORMWORK.md`.
11
+
12
+ ---
13
+
14
+ ### Do one authorised piece of work, then stop
15
+
16
+ **Advice.**
17
+
18
+ Finish the piece in front of you. Then halt, even when the following one looks
19
+ obvious, or small, or more convenient to fold in now. Halt and report.
20
+
21
+ If a brief contains two pieces of work, say so before starting.
22
+
23
+ **Catches:** work that runs past its edge. The extra part is the part nobody
24
+ asked for, and the reviewer is looking at the part they did ask for, so nobody
25
+ reads it.
26
+
27
+ ---
28
+
29
+ ### The agent never decides
30
+
31
+ **Advice.**
32
+
33
+ An agent may write down a decision you have already made, word for word. It may
34
+ not make one.
35
+
36
+ Work that turns out to need a decision halts and surfaces two things: the subject of
37
+ the decision, and which later work turns on it.
38
+
39
+ A decision is a fork where the other road produces different work later, and
40
+ editing will not get you back. Everything else is just a choice — make it and
41
+ carry on.
42
+
43
+ **Catches:** a choice made in passing that nobody reviewed, and that becomes
44
+ load-bearing before anyone notices a choice was made at all.
45
+
46
+ ---
47
+
48
+ ### Outside your job: name who owns it, stop
49
+
50
+ **Advice.**
51
+
52
+ Found a problem that is not yours? Say so, say whose it is, and stop. Do not fix
53
+ it. Do not answer it briefly first.
54
+
55
+ **Catches:** a fix made outside the scope, which is invisible in review because
56
+ the reviewer is reading the thing that was requested.
57
+
58
+ ---
59
+
60
+ ### A number comes with the command that made it
61
+
62
+ **Advice.**
63
+
64
+ Every figure arrives with the command that produced it, and with what would make
65
+ it wrong. Never type a new number over an old one — run the thing again.
66
+
67
+ **Catches:** a number nobody can reproduce. It looks exactly like a number
68
+ somebody remembered, and there is no way to tell them apart later.
69
+
70
+ ---
71
+
72
+ ### The right shape is not the right answer
73
+
74
+ **Advice.**
75
+
76
+ A field being filled in is not the field being correct. A file existing is not
77
+ the file being right.
78
+
79
+ **Catches:** a check that passes for the wrong reason. These are cheap to write,
80
+ which is why there are so many of them.
81
+
82
+ ---
83
+
84
+ ### Finding nothing tells you about your search
85
+
86
+ **Advice.**
87
+
88
+ Three things decide what a search saw: what the tool quietly skipped, the word
89
+ you typed, and where you pointed it.
90
+
91
+ Change one, leave the other two, and you have proved nothing.
92
+
93
+ Before saying something does not exist, say which of the three you changed. Then
94
+ change the others, or admit you did not.
95
+
96
+ **Catches:** "it is not there" when it is there, under a different word, in a
97
+ folder you did not look in, or in a file your tool skipped without saying so.
98
+
99
+ ---
100
+
101
+ ### Not measured means not measured
102
+
103
+ **Advice.**
104
+
105
+ If you did not measure it, write NOT ESTABLISHED. Not "roughly". Not "probably".
106
+
107
+ **Catches:** a guess that looks like a measurement a month later, when nobody
108
+ remembers which it was.
109
+
110
+ ---
111
+
112
+ ### A brief has six headings
113
+
114
+ **Advice.**
115
+
116
+ Goal. Scope. What must not happen. How we know it is done. How it gets checked.
117
+ What the report must contain.
118
+
119
+ Six, and no others. A heading you leave out is the one that gets forgotten.
120
+
121
+ For a task-sized piece of work, one line is enough. Scale the paperwork to the
122
+ work, or the work stops happening.
123
+
124
+ **Catches:** the brief that made sense to whoever wrote it and nobody else.
125
+
126
+ ---
127
+
128
+ ### A report answers the same questions every time
129
+
130
+ **Advice.**
131
+
132
+ List each altered file with a one-line reason. List every command that wrote to
133
+ disk. Give the check result, and `git status`, which shows nothing was staged.
134
+
135
+ Then the three that matter:
136
+
137
+ - work you did beyond the request, with the reason
138
+ - work in the request you left undone, with the reason
139
+ - anywhere the brief turned out to be inaccurate
140
+
141
+ **Catches:** work that followed the request exactly needs no defence. What you
142
+ are scanning for happens at the margins of an instruction, and only these three
143
+ bring it into view.
144
+
145
+ ---
146
+
147
+ ### Say the contradiction first
148
+
149
+ **Advice.**
150
+
151
+ Put anything that conflicts with what you were told first, where it cannot be
152
+ missed. Where somebody described a problem inaccurately, state that directly,
153
+ and state it early.
154
+
155
+ **Catches:** the most valuable thing an agent produces — the discovery that the
156
+ person directing it has the wrong picture — arriving on page four where nobody
157
+ reads it.
158
+
159
+ ---
160
+
161
+ ### Say you were wrong, do not fold it in
162
+
163
+ **Advice.**
164
+
165
+ When an earlier answer was wrong, say it was wrong. Do not quietly absorb the
166
+ correction into new text.
167
+
168
+ **Catches:** a reader who never learns that the earlier answer was held, and so
169
+ never learns what to distrust.
170
+
171
+ ---
172
+
173
+ ### Prefer the smaller claim that survives
174
+
175
+ **Advice.**
176
+
177
+ A confident wrong answer costs more than a slow one. Given two claims, make the
178
+ narrower one that holds up rather than the wider one that does not.
179
+
180
+ **Catches:** overclaiming, which is the hardest failure to spot from outside,
181
+ because it reads as competence.
182
+
183
+ ---
184
+
185
+ ### Your mistakes are yours to learn
186
+
187
+ **Advice.**
188
+
189
+ Keep your own list of the mistakes your project actually makes. Do not copy
190
+ anybody else's — including the ones behind these rules.
191
+
192
+ **Catches:** a borrowed list makes you watch for problems you do not have, and
193
+ worse, makes you feel safe about the problems you do have.
194
+
195
+ *This rule is why the others have no stories attached.*
@@ -0,0 +1,493 @@
1
+ # The rest of the rules
2
+
3
+ Thirty-three. Not for reading end to end. Find the one that matches the
4
+ situation you are in.
5
+
6
+ All advice. What is blocked is in `FORMWORK.md`. The thirteen you meet daily are
7
+ in `core.md`.
8
+
9
+ Some carry a **warning**. That means the rule costs something real, or stops
10
+ working outside the conditions it was learned in. The warning is part of the
11
+ rule, not a footnote.
12
+
13
+ ---
14
+
15
+ ## Working with documents
16
+
17
+ ### One document owns each kind of fact
18
+
19
+ **Advice.**
20
+
21
+ Every kind of information has exactly one home. Two documents saying the same
22
+ thing is a problem **even while both are right**, because they will not stay
23
+ right. Fix it by deleting one, not by keeping them in step.
24
+
25
+ **Catches:** two copies of a fact drifting apart, with nothing announcing it.
26
+
27
+ **Warning:** nothing checks this for you. No tool anywhere does. It is a habit
28
+ with no net under it.
29
+
30
+ ---
31
+
32
+ ### A small fixed set of documents
33
+
34
+ **Advice.**
35
+
36
+ Give each of these one home: what the project is and will not become · the plan
37
+ and its order · boundaries and who decides · what exists right now · decisions
38
+ you have accepted · how work gets done · ideas parked for later.
39
+
40
+ Seven is what this method used. A published twelve-section standard exists and
41
+ is not obviously worse. Pick one and keep it.
42
+
43
+ **Catches:** a fact with nowhere obvious to live, which ends up in three places
44
+ or none.
45
+
46
+ ---
47
+
48
+ ### Documents say what is true now
49
+
50
+ **Advice.**
51
+
52
+ A sentence explaining that something was removed or renamed is history. History
53
+ lives in version control. Documents describe the present.
54
+
55
+ **Catches:** documents that grow into a changelog, where the description of what
56
+ is actually true is outnumbered by the story of how it got there.
57
+
58
+ ---
59
+
60
+ ### Park open questions with a status, not in a graveyard
61
+
62
+ **Advice.**
63
+
64
+ Deferred questions get a status on the thing they belong to, not a separate file
65
+ that only grows.
66
+
67
+ **Catches:** a "later" document nobody opens, which quietly becomes where ideas
68
+ go to die.
69
+
70
+ ---
71
+
72
+ ## Before you start
73
+
74
+ ### Say the scope back before touching anything
75
+
76
+ **Advice.**
77
+
78
+ Before the first edit, write down what you understood: the goal, what is in
79
+ scope, what is explicitly out, which files you expect to touch, what you will
80
+ run to check it.
81
+
82
+ **Catches:** a misunderstanding, while it is still free. After the first edit it
83
+ is not.
84
+
85
+ ---
86
+
87
+ ### Checks and documents are part of the work
88
+
89
+ **Advice.**
90
+
91
+ Verification and document updates belong to the piece of work, not to a tidy-up
92
+ afterwards. If a document states something your change makes untrue, fix it now,
93
+ or write down why nothing needed changing.
94
+
95
+ **Catches:** deferred documentation, which does not get written. Same for
96
+ deferred checks.
97
+
98
+ **Warning:** every piece of work is bigger than the change that prompted it.
99
+ That is the price.
100
+
101
+ ---
102
+
103
+ ### The gate belongs to one owner
104
+
105
+ **Advice.**
106
+
107
+ Whoever owns the checks owns them, no matter which piece of work trips over a
108
+ broken one. Work that hits a broken check reports it and leaves it alone.
109
+
110
+ Working alone, the rule still holds in a different shape: **the check is never
111
+ edited by the work that it just failed.**
112
+
113
+ **Catches:** a check quietly edited until it goes green.
114
+
115
+ ---
116
+
117
+ ### Never invent a source
118
+
119
+ **Advice.**
120
+
121
+ If a claim needs backing and there is none, write that.
122
+
123
+ **Catches:** a made-up citation, which is the most expensive error available,
124
+ because it looks exactly like a real one.
125
+
126
+ ---
127
+
128
+ ### A pass says what it did not look at
129
+
130
+ **Advice.**
131
+
132
+ When a check passes, it should be clear what it did not examine. Keep that list
133
+ next to the check.
134
+
135
+ **Catches:** a green result read as total coverage, when it only ever looked at
136
+ a third of the problem.
137
+
138
+ ---
139
+
140
+ ## Rounds
141
+
142
+ A round is several agents arguing about one question. Skip this section if you
143
+ work alone with one agent.
144
+
145
+ ### The lead holds no position
146
+
147
+ **Advice.**
148
+
149
+ One role runs the round, hands out questions, and does none of the design.
150
+
151
+ The separation is structural rather than courteous. Owning a piece of the design
152
+ means scrutinising that piece less harshly than the rest, and the omission goes
153
+ unseen because the same role writes the record.
154
+
155
+ **Catches:** the one piece of a design nobody reviewed properly.
156
+
157
+ **Warning:** a whole agent producing no design. On a small question that is most
158
+ of what you spend.
159
+
160
+ ---
161
+
162
+ ### Somebody argues against, every time
163
+
164
+ **Advice.**
165
+
166
+ One role's whole job is making the case against. Not balanced, not looking for
167
+ the middle. Present in every round without exception.
168
+
169
+ It says plainly when it has no good objection. Invented objections train
170
+ everyone to ignore it.
171
+
172
+ **Catches:** a group of agents agreeing, which reads exactly like being right.
173
+
174
+ **Warning:** it pays for itself only when the round was heading somewhere wrong,
175
+ and you cannot know that in advance.
176
+
177
+ ---
178
+
179
+ ### Split by who decides, not by topic
180
+
181
+ **Advice.**
182
+
183
+ Divide questions so no two people can answer the same one. Split by who owns the
184
+ answer — what must exist, what we would measure, what it costs to keep running,
185
+ why not — rather than by subject.
186
+
187
+ **Catches:** two agents landing on one answer after being handed one question.
188
+ It wears the appearance of corroboration and is paid-for duplication.
189
+
190
+ ---
191
+
192
+ ### One prepared briefing, not everyone reading everything
193
+
194
+ **Advice.**
195
+
196
+ The lead reads widely, alone, and writes one briefing: the constraints in its
197
+ own words with file and line, what already exists, what has failed before, and
198
+ the numbered questions.
199
+
200
+ A briefing that quotes whole documents has rebuilt the problem it was meant to
201
+ remove.
202
+
203
+ **Catches:** everyone paying to read the same material.
204
+
205
+ **Warning:** the lead becomes a single point of misunderstanding. A wrong
206
+ briefing is wrong for everybody.
207
+
208
+ ---
209
+
210
+ ### Different reading for different people
211
+
212
+ **Advice.**
213
+
214
+ No two participants get the same reading list. Anyone needing something outside
215
+ theirs names the file, says which question needs it, reads it, and says so.
216
+
217
+ **Catches:** cost, and a split by ownership that is real rather than nominal.
218
+
219
+ ---
220
+
221
+ ### Read everything before answering anything
222
+
223
+ **Advice.**
224
+
225
+ The lead reads every answer in full before replying to any of them.
226
+
227
+ **Catches:** anchoring the whole round on whichever answer arrived first.
228
+
229
+ ---
230
+
231
+ ### One challenge, one reply, then closed
232
+
233
+ **Advice.**
234
+
235
+ Put the strongest objection to whoever holds the position. They concede, refute,
236
+ or adjust. Then it is over.
237
+
238
+ Before spending anything on it, try to settle the objection yourself by reading
239
+ a file.
240
+
241
+ **Catches:** two agents arguing forever, which is the easiest way to spend a
242
+ budget and produce nothing.
243
+
244
+ ---
245
+
246
+ ### Three ways a disagreement can end
247
+
248
+ **Advice.**
249
+
250
+ Settle it, but only if a document decides it — and name the file. Park it,
251
+ writing down both sides and what changes depending on which is right. Or stop
252
+ the round, if other answers depend on the outcome, and go to the human now.
253
+
254
+ A candid unresolved question counts as an achievement rather than a hole.
255
+
256
+ **Catches:** a record that reads as settled and is not.
257
+
258
+ ---
259
+
260
+ ### Everyone agreeing is a warning sign
261
+
262
+ **Advice.**
263
+
264
+ Signs the round is too comfortable: everything fits with no friction, the
265
+ objections were all easy to answer, nobody said they would have done it
266
+ differently, a proposal was accepted with nobody naming what it costs.
267
+
268
+ On seeing it, point at whatever assumption went unexamined, and require
269
+ somebody to defend that.
270
+
271
+ **Catches:** comfortable agreement, which is the normal failure, not the normal
272
+ success.
273
+
274
+ **Warning:** do not require that somebody disagree. Manufactured conflict is
275
+ worse than none, and the challenger's own rules forbid it.
276
+
277
+ ---
278
+
279
+ ### Two failures the same way means stop
280
+
281
+ **Advice.**
282
+
283
+ A failed agent is not replaced automatically. Two failures of one kind point at
284
+ the surroundings rather than the work; end the round there and report.
285
+
286
+ Better still: record whether a failure was the environment or the work, and let
287
+ that decide.
288
+
289
+ **Catches:** a whole budget spent reproducing one broken thing.
290
+
291
+ ---
292
+
293
+ ### Escalate in a fixed shape
294
+
295
+ **Advice.**
296
+
297
+ The question in one sentence. The first position, whose it is, its strongest
298
+ reason. The second position, likewise. What turns on the outcome. Whatever you were
299
+ unable to resolve, and why the written record leaves it open. Then a recommendation,
300
+ or an honest statement that you have no grounds for one.
301
+
302
+ No transcript. What is needed is the fork, not the road to it.
303
+
304
+ **Catches:** a long argument dumped on somebody who has to reconstruct the
305
+ decision from it.
306
+
307
+ ---
308
+
309
+ ### A role appears when its subject exists
310
+
311
+ **Advice.**
312
+
313
+ Do not create a role for something you are not doing. No application, no
314
+ application role. No code, no code review role.
315
+
316
+ **Catches:** a team designed for the project you imagine rather than the one in
317
+ front of you.
318
+
319
+ ---
320
+
321
+ ## Writing to a human
322
+
323
+ ### Two parts, always
324
+
325
+ **Advice.**
326
+
327
+ First: what happened, what needs you, what is next. Plain words, short
328
+ sentences, point before reason, every code name explained where it appears.
329
+
330
+ Then the substantiation: which files, which commands, their output, what you
331
+ confirmed and by what means, and anything deferred with its reason.
332
+
333
+ Same reader. Different depth.
334
+
335
+ **Catches:** a reader who has to choose between a summary that leaves out what
336
+ they need and a wall they will not read.
337
+
338
+ **Warning:** everything gets written twice. And this shape was tuned to one
339
+ particular person.
340
+
341
+ ---
342
+
343
+ ### Do not waste the human's turns
344
+
345
+ **Advice.**
346
+
347
+ Do not ask what you could read. Put three questions in one message, not three
348
+ messages. Paste the text you are referring to — "see above" has cost whole
349
+ round trips. Name who should answer and hand over the message ready to send.
350
+
351
+ **Catches:** a person spending their day carrying messages between two systems
352
+ that cannot see each other.
353
+
354
+ **Warning:** this assumes you are that person. If your setup is different, these
355
+ rules solve a problem you do not have.
356
+
357
+ ---
358
+
359
+ ### Interrupt for two things only
360
+
361
+ **Advice.**
362
+
363
+ Interrupt for what cannot be undone, and for what breaks so quietly nobody would
364
+ notice. Everything else goes in the report.
365
+
366
+ **Catches:** either being interrupted constantly, or losing something
367
+ irrecoverable because it did not seem urgent.
368
+
369
+ **Warning:** the original version of this rule assumed somebody checking every
370
+ day. If you open your project once a week, a "note" can sit there for a week.
371
+ Set the line where it suits you.
372
+
373
+ ---
374
+
375
+ ## Designing
376
+
377
+ ### Generalise on the second real case
378
+
379
+ **Advice.**
380
+
381
+ Build the general version when you have a second real use, not when you expect
382
+ one.
383
+
384
+ **Catches:** an abstraction designed against a guess, which you then maintain
385
+ forever.
386
+
387
+ ---
388
+
389
+ ### Ask what this component actually adds
390
+
391
+ **Advice.**
392
+
393
+ When something new is proposed — another service, another store, a queue, a
394
+ workflow engine — ask two questions. What does it do that nothing here already
395
+ does? And who operates it in six months?
396
+
397
+ **Catches:** the components that look like progress and are mostly maintenance.
398
+
399
+ **Warning:** this rule came from one person's experience on two projects. If
400
+ your project genuinely needs the thing, the rule knows nothing about that. It is
401
+ a question, not a veto.
402
+
403
+ ---
404
+
405
+ ### Name which of your own rules this breaks
406
+
407
+ **Advice.**
408
+
409
+ Write down what your project is not. Then ask every proposal which of those it
410
+ is drifting toward, and how far.
411
+
412
+ **Catches:** drift, where every single step is defensible and the destination is
413
+ not.
414
+
415
+ ---
416
+
417
+ ### Something stored that nothing reads
418
+
419
+ **Advice.**
420
+
421
+ Where you are storing what nothing consumes, establish its consumer and the
422
+ moment of consumption. An anticipated feature is not a consumer.
423
+
424
+ **Catches:** storage that costs you now and shapes your design as though it
425
+ mattered.
426
+
427
+ ---
428
+
429
+ ### Ask how it fails quietly
430
+
431
+ **Advice.**
432
+
433
+ Put this to every proposal: in what manner does it fail while escaping notice?
434
+
435
+ **Catches:** quiet wrongness, which accumulates, as against visible failure,
436
+ which gets fixed.
437
+
438
+ ---
439
+
440
+ ### What does this cost in six months
441
+
442
+ **Advice.**
443
+
444
+ Ask what becomes easier, what becomes harder, and what new risk appears. Ask who
445
+ will be maintaining it and what they will have forgotten.
446
+
447
+ **Catches:** maintenance burden treated as somebody else's problem, when it is
448
+ yours.
449
+
450
+ ---
451
+
452
+ ## Above the repository
453
+
454
+ ### Somebody holds the thread between sessions
455
+
456
+ **Advice.**
457
+
458
+ Separate from any working session, one long conversation decides what happens
459
+ next, writes the instruction, and judges what comes back.
460
+
461
+ **Catches:** continuity living only in your head, which means it is gone the
462
+ moment you are busy.
463
+
464
+ **Warning:** this has no file, no configuration, and nothing you can review. It
465
+ is the most load-bearing part of the arrangement and the least inspectable.
466
+
467
+ ---
468
+
469
+ ### The human carries the messages
470
+
471
+ **Advice.**
472
+
473
+ The layer above and the working session cannot see each other. A person moves
474
+ text between them.
475
+
476
+ **Catches:** work done twice, and work done against a decision that was already
477
+ made upstairs. When nothing carries the messages, the two halves drift apart and
478
+ neither knows it.
479
+
480
+ **Warning:** known not to work beyond one person. Two people would need two
481
+ relays and nothing joins them up.
482
+
483
+ ---
484
+
485
+ ### Whole reports travel up, not summaries
486
+
487
+ **Advice.**
488
+
489
+ What goes back up is the entire report, not somebody's account of it.
490
+
491
+ **Catches:** a summary dropping exactly the three lines that matter — what was
492
+ done unasked, what was skipped, and what the brief got wrong. Those are the
493
+ first things a summariser cuts.