acstack 0.50.4 → 0.51.0

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 (111) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +14 -7
  3. package/agents/codex/frontend-verifier.toml +89 -6
  4. package/agents/codex/task-checker.toml +83 -2
  5. package/agents/codex/task-executor.toml +83 -1
  6. package/agents/codex/test-writer.toml +77 -1
  7. package/agents/frontend-verifier.md +13 -6
  8. package/agents/task-checker.md +7 -2
  9. package/agents/task-executor.md +7 -1
  10. package/agents/test-writer.md +1 -1
  11. package/assets/terminal-workspace/config.example.yaml +1 -1
  12. package/assets/terminal-workspace/helpers/acstack-md +12 -4
  13. package/assets/terminal-workspace/helpers/acstack-open +10 -2
  14. package/cli/dist/index.js +10142 -9369
  15. package/cli/dist/index.js.map +4 -4
  16. package/cli/package.json +1 -1
  17. package/docs/config-reference.md +113 -14
  18. package/docs/dev-setups.md +4 -4
  19. package/docs/terminal-workspace.md +1 -1
  20. package/docs/workflows.md +22 -16
  21. package/examples/design-doc/acstack/README.md +273 -0
  22. package/examples/design-doc/acstack/acstack.yaml +4 -0
  23. package/examples/design-doc/acstack/cli.yaml +5 -0
  24. package/examples/design-doc/acstack/design.yaml +39 -0
  25. package/examples/design-doc/acstack/github.yaml +12 -0
  26. package/examples/design-doc/acstack/host.yaml +14 -0
  27. package/examples/design-doc/acstack/journey.md +85 -0
  28. package/examples/design-doc/acstack/publication.md +16 -0
  29. package/examples/design-doc/acstack/review-runtime.yaml +24 -0
  30. package/examples/design-doc/acstack/skills.yaml +22 -0
  31. package/examples/design-doc/acstack/store.yaml +11 -0
  32. package/examples/design-doc/acstack/user.yaml +15 -0
  33. package/examples/design-doc/acstack/viewer.yaml +13 -0
  34. package/hooks/ac-writing-style-reminder.sh +7 -18
  35. package/hooks/communication-standard.mjs +17 -0
  36. package/hooks/communication-standard.sh +6 -0
  37. package/hooks/context-pressure.sh +2 -2
  38. package/hooks/hooks.json +18 -0
  39. package/hooks/lib/communication-standard.mjs +16 -0
  40. package/hooks/project-data.sh +38 -0
  41. package/hooks/session-start-handoff.sh +21 -7
  42. package/hooks/session-start.sh +9 -2
  43. package/orchestrator/AGENTS.md +25 -14
  44. package/output-styles/ac-writing-style.md +75 -276
  45. package/package.json +2 -1
  46. package/pi/agents/frontend-verifier.md +89 -6
  47. package/pi/agents/task-checker.md +83 -2
  48. package/pi/agents/task-executor.md +83 -1
  49. package/pi/agents/test-writer.md +77 -1
  50. package/pi/extension.ts +70 -12
  51. package/profiles/fullstack-python.yaml +1 -1
  52. package/profiles/node-typescript.yaml +1 -1
  53. package/profiles/python.yaml +1 -1
  54. package/skills/archive/SKILL.md +53 -36
  55. package/skills/bootstrap/SKILL.md +6 -6
  56. package/skills/bridge/SKILL-VM.md +11 -2
  57. package/skills/bridge/SKILL-WINDOWS.md +3 -3
  58. package/skills/browser-verify/SKILL.md +14 -5
  59. package/skills/code-review/SKILL.md +8 -2
  60. package/skills/commit/SKILL.md +7 -6
  61. package/skills/compact-and-continue/SKILL.md +9 -8
  62. package/skills/design-doc/SKILL.md +235 -0
  63. package/skills/explore/SKILL.md +1 -1
  64. package/skills/grilling/SKILL.md +4 -4
  65. package/skills/handoff/SKILL.md +4 -4
  66. package/skills/host/SKILL.md +1 -1
  67. package/skills/host/detect-host.sh +2 -2
  68. package/skills/host/notes.md +2 -2
  69. package/skills/host/questions.md +1 -1
  70. package/skills/implement/SKILL.md +20 -13
  71. package/skills/implement/decision-log.md +9 -8
  72. package/skills/implement/design-pass.md +16 -2
  73. package/skills/map/SKILL.md +15 -71
  74. package/skills/map/alignment.md +18 -27
  75. package/skills/map/frontend.md +1 -1
  76. package/skills/map/materialising.md +74 -0
  77. package/skills/map/trackers/files.md +4 -6
  78. package/skills/pre-commit-review/SKILL.md +15 -9
  79. package/skills/pre-commit-review/auto-fix.md +1 -1
  80. package/skills/quick-fix/SKILL.md +1 -1
  81. package/skills/record-context/SKILL.md +6 -6
  82. package/skills/setup/SKILL.md +15 -50
  83. package/skills/setup/browser.md +2 -2
  84. package/skills/setup/first-run.md +19 -8
  85. package/skills/setup/report.md +3 -2
  86. package/skills/setup/row-fixes.md +56 -9
  87. package/skills/sync/SKILL.md +12 -11
  88. package/skills/terminal-workspace/SKILL.md +1 -1
  89. package/skills/test-conventions/SKILL.md +2 -2
  90. package/skills/visual-docs/SKILL.md +69 -235
  91. package/skills/writing/SKILL.md +29 -217
  92. package/skills/writing/examples.md +62 -129
  93. package/docs/adr/0001-ste-writing-standard.md +0 -16
  94. package/docs/adr/0002-version-gate-not-auto-bump.md +0 -35
  95. package/docs/adr/0003-handoff-ack-command.md +0 -19
  96. package/docs/adr/0004-dev-setup-per-host.md +0 -13
  97. package/docs/adr/0005-two-orchestrators-per-host.md +0 -25
  98. package/docs/adr/0006-document-opener-service.md +0 -89
  99. package/docs/adr/0007-lead-check-reads-the-transcript.md +0 -87
  100. package/docs/adr/0008-cli-audits-skill-interviews.md +0 -37
  101. package/docs/adr/0009-verify-the-write-not-the-writer.md +0 -51
  102. package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +0 -115
  103. package/docs/adr/0011-node-header-is-the-edge-encoding.md +0 -20
  104. package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +0 -31
  105. package/docs/adr/0013-the-diagram-renderer-is-pure.md +0 -23
  106. package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +0 -29
  107. package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +0 -37
  108. package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +0 -21
  109. package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +0 -13
  110. package/docs/adr/0018-alignment-packs-use-local-viewers.md +0 -11
  111. package/docs/adr/index.md +0 -18
@@ -1,246 +1,80 @@
1
1
  ---
2
2
  name: visual-docs
3
- description: "Write or restructure documentation that leads with a diagram and derives its structure from it. Use whenever the user asks for docs, a README, an architecture or workflow write-up, an explainer, or says existing docs are hard to follow, confusing, or a wall of text – and whenever you are about to write more than two paragraphs explaining how something works. Applies the Minto pyramid: answer first, then support."
3
+ description: Structure documentation around the reader's questions and the relationships being explained. Use for documentation, architecture, workflows, and explanations that need more than a short direct answer. Add diagrams when they clarify those relationships.
4
4
  ---
5
5
 
6
- # visual-docs
7
-
8
- *A reader should see the system's shape from one diagram. They then find every detail in a section that maps to a part of it.*
9
-
10
- This skill makes a doc lead with a diagram, then derive its sections from that diagram.
11
-
12
- - **Most technical docs explain in reading order rather than importance order**
13
- - The reader builds the picture themselves and learns what mattered last
14
- - **One diagram carries the whole shape**
15
- - **Every section maps to a part of that diagram**
16
- - **The prose rules live in the `writing` skill**
17
- - This skill owns shape alone
18
-
19
- This skill owns document shape. Prose follows the `writing` skill.
20
-
21
- ```mermaid
22
- flowchart TD
23
- A["Establish the shape<br/>(read code, not existing docs)"] --> B["Draw the lead diagram<br/>(section 4)"]
24
- B --> C["Derive sections from nodes<br/>(section 1)"]
25
- C --> D["Write the opening<br/>(section 2.1)"]
26
- D --> E["Fill sections in bullets<br/>(sections 2.2 and 3)"]
27
- E --> F{"Siblings MECE?<br/>(section 2.3)"}
28
- F -->|no| C
29
- F -->|yes| G["Check every node has a section<br/>(section 6)"]
30
- G --> H["Verify the diagram renders"]
31
- ```
32
-
33
- | Step in the diagram | Detail |
34
- | ------------------------ | --------------- |
35
- | Derive sections | section 1 |
36
- | Opening, vertical, MECE | section 2 |
37
- | Bullets carry the body | section 3 |
38
- | Draw and label | section 4 |
39
- | Headings and duplication | section 5 |
40
- | Full order of operations | section 6 |
41
- | What to avoid | section 7 |
42
-
43
- ## 1. The rule that makes this work
44
-
45
- *The diagram is the table of contents. If a section has no home in the diagram, one of the two is wrong.*
46
-
47
- Every numbered section maps to an element of the lead diagram, and a section heading reuses the diagram's node label verbatim. This is mechanical, not stylistic:
48
-
49
- - A box showing something **happening**, with no section, means the doc is incomplete
50
- - A section covering no part of the diagram either belongs in another doc, or the
51
- diagram is missing something
52
-
53
- - Renaming a box renames its section, and the reverse
54
-
55
- Three exemptions, and only these three.
56
-
57
- - **Start and end boxes** – a box for what comes in, or what remains after, is not a step and needs no section
58
- - In a workflow diagram, the incoming request and the final stored output are both this
59
- - **Two boxes, one command** – two boxes are sometimes worth drawing separately because they are two ideas, though one command does both
60
- - Give them one section and name both in the heading
61
- - The reader can tell it covers both
62
- - **Sections about the document** – a section on what this doc leaves out, or what is about to change, is housekeeping for the reader
63
- - It describes the document rather than the system
64
- - No box should exist for it
65
-
66
- **Start and end boxes.** A box for what comes in, or what remains after, is not
67
- a step and needs no section. In a workflow diagram, the
68
- incoming request and the final stored output are both this.
69
-
70
- **Two boxes, one command.** Sometimes two boxes are worth drawing separately
71
- because they are two ideas, but one command does both. Give them one section and
72
- name both in the heading, so the reader can tell it covers both.
73
-
74
- **Sections about the document.** A section on what this doc leaves out, or what is
75
- about to change, is housekeeping for the reader. It describes the document, not the
76
- system, so no box should exist for it.
77
-
78
- - Anything else without a match is a defect in one of the two
79
- - Do not add a section to justify a node, or a node to justify a section
80
- - End the lead diagram with a mapping table when the doc has more than four sections
81
- - The table lets the reader jump from a box to its detail
82
-
83
- End the lead diagram with a mapping table when the doc has more than four sections. It lets the reader jump from a box to its detail.
84
-
85
- ## 2. Minto pyramid
86
-
87
- *Answer first. Every level summarises the level below it. Siblings are the same kind of thing, and they are complete.*
88
-
89
- ### 2.1. Open with one sentence, then bullets
90
-
91
- *Say what the thing is and who it is for in one sentence. Put everything else in bullets under it.*
92
-
93
- The opening is never a paragraph. A reader meeting the doc for the first time scans it. A four-sentence block of setup is the part they skip.
94
-
95
- - **Sentence one names the thing and what it does**, in words a developer who has never seen this repo already knows
96
- - **Bullets under it carry the rest**: what problem it solves, what it costs, what it does not do
97
- - **A bullet that needs context gets a sub-bullet**, never a second sentence
98
-
99
- | Beat | Where it goes |
100
- | ---- | ------------- |
101
- | **What this is** | the opening sentence |
102
- | **What it solves** | the first bullet |
103
- | **What it costs, or does not do** | a later bullet |
104
- | **Where to go next** | the contents table, or the last bullet |
105
-
106
- Two rules keep the opening honest.
107
-
108
- - The answer goes first, never at the end
109
- - A reader who stops after the opening sentence and the first bullet must still leave with the conclusion
110
-
111
- ### 2.2. The vertical rule
112
-
113
- *A heading's takeaway must summarise everything under it, and nothing else.*
114
-
115
- - Put one italic line under every H2 and H3, stating the section's point
116
- - Test it by deleting the section body
117
- - It was a label rather than a summary, if the takeaway no longer tells the reader what they need
118
-
119
- ### 2.3. The horizontal rule
120
-
121
- *Siblings must be the same kind of thing, mutually exclusive, and collectively cover the parent. This binds every bullet, not only every section.*
122
-
123
- Apples-to-apples applies at every level. Under one heading, at one indent, every bullet answers the same question. A bullet about what the tool does cannot sit beside a bullet about where to install it.
124
-
125
- - Write: three bullets, each naming one failure mode the tool solves
126
- - Not: two bullets naming a failure mode, a third naming the install command
127
-
128
- Three failures to check for:
129
-
130
- - **Mixed kinds** – three sections about components and a fourth about history. The fourth belongs elsewhere
131
- - **Overlap** – two sections that both explain the same mechanism from different angles. Merge them
132
- - **Gaps** – the parent's takeaway claims something the children do not cover
133
-
134
- Then order the siblings deliberately, and say which order you used if it is not obvious:
135
-
136
- | Order | Use when |
137
- | ------------- | ---------------------------------------------- |
138
- | **Time** | the thing is a sequence – a pipeline, a request |
139
- | **Structure** | the thing has parts – components, modules |
140
- | **Degree** | the parts differ by importance or size |
141
-
142
- ## 3. Bullets carry the body
143
-
144
- *A reader scans a list and skips a paragraph. Put the body in bullets, and keep prose for the opening.*
145
-
146
- Ten rules govern a bullet. Each one is a way to write.
147
-
148
- - **Bullets carry 90% or more of the body** – prose survives in the opening sentence and in a section takeaway, and nowhere else
149
- - **One sentence per bullet** – split "X and also Y" into two siblings, or nest one under the other
150
- - **No bullet ends in a period**, however long it runs – a question mark or an exclamation mark is fine
151
- - **A sub-bullet carries what its parent cannot hold** – it argues for the parent, adds the detail the point needs, or lists the questions under it
152
- - **Every level reads top-down** – a reader who stops at any level still leaves with the point
153
- - **Nest as far as the argument needs, then stop** – depth costs nothing while every level adds a point
154
- - **Cut a level that restates its parent** – that one costs the reader everything
155
- - **Indent a markdown file by four spaces per level** – a `- ` marker opens its content at column 2
156
- - Eight spaces sit four past that column
157
- - CommonMark renders the child as a code block
158
- - **Use parallel grammar across siblings** – the same kind of thing then reads as the same kind of thing
159
- - **Cut any bullet that narrates, softens or restates**
160
-
161
- Three shapes stay prose, because a bullet breaks them.
162
-
163
- | Shape | Why it stays prose |
164
- | ----- | ------------------ |
165
- | the opening sentence | one sentence naming the thing, by section 2.1 |
166
- | a section takeaway | one italic line under the heading, by section 2.2 |
167
- | a numbered procedure | a step is a step, and rule 1 of the `writing` skill caps it at 20 words |
168
-
169
- Pick a table over a bullet list wherever every item answers the same two or three questions. Pick a bullet list wherever the items differ in shape.
170
-
171
- The output style `ac-writing-style` applies these same ten rules to a chat reply. This section is where the rules live, and that file is one reader of them.
172
-
173
- Indent every nested bullet four spaces per level, in a terminal reply and in a file alike. Claude Code and GitHub both read a wider indent as run-on text under the parent, not as a list.
174
-
175
- ## 4. Diagrams
176
-
177
- *One diagram carries the doc. Others are local aids and are optional.*
178
-
179
- ### 4.1. Pick the type from the question the diagram answers
180
-
181
- | Question | Diagram |
182
- | ------------------------------- | -------------------- |
183
- | What talks to what? | `flowchart` |
184
- | In what order, and who waits? | `sequenceDiagram` |
185
- | What states can this be in? | `stateDiagram-v2` |
186
- | What decides which path? | `flowchart` with gates |
187
- | What is stored, and how related? | `erDiagram` |
188
-
189
- - A workflow with decision points is a flowchart, and not a sequence diagram
190
- - A handoff between agents or services over time is a sequence diagram, and not a flowchart
191
- - Choosing wrong is the most common reason a diagram fails to explain anything
192
-
193
- ### 4.2. Label for a reader who does not know the codebase
194
-
195
- *Human-readable name first, technical name underneath.*
6
+ # Visual docs
7
+
8
+ Choose the smallest document structure that makes the answer and its supporting relationships clear.
9
+
10
+ Read `../writing/SKILL.md`, including its shared-standard loading instructions, before drafting if you have not read it this session.
11
+ This skill applies that standard to document structure; it does not maintain a second communication standard.
12
+
13
+ ## Establish what the reader needs
14
+
15
+ - Identify the reader's question and the answer the document must support
16
+ - Check the relevant code, configuration, and entry points before describing current behavior
17
+ - Separate current behavior from proposals and decision history
18
+ - Choose the relationships that explain the answer
19
+ - A workflow needs sequence, decisions, and failure paths
20
+ - A component explanation needs responsibilities, interfaces, and dependencies
21
+ - A comparison needs consistent criteria across options
22
+
23
+ ## Choose structure from those relationships
24
+
25
+ - Start with the answer and enough orientation to make the answer meaningful
26
+ - Group supporting detail under the questions it answers
27
+ - Make each heading summarize its section
28
+ - Add a takeaway only when it provides information the heading cannot carry clearly
29
+ - Use numbered headings when readers need stable, visible cross-references
30
+ - Reuse names across the overview, diagrams, and detailed sections
31
+ - If a diagram says "SessionStart hook", identify its source as `hooks/session-start.sh` in the detail
32
+ - Link overview elements to sections when readers need help finding the detail
33
+ - Keep crosscutting relationships visible
34
+ - A dependency shared by two components belongs in a dependency explanation, not under an invented owner
35
+ - Section order can follow a reader's questions without mirroring the directory tree
36
+ - Stop adding structure when another heading, list level, or diagram would repeat an existing point
37
+
38
+ ## Use diagrams when they explain more clearly than prose
39
+
40
+ A diagram is useful when a reader must track several relationships at once.
41
+ A short answer or straightforward explanation needs no diagram.
42
+
43
+ | Reader's question | Useful diagram |
44
+ | --- | --- |
45
+ | What depends on what? | Flowchart with named dependency edges |
46
+ | Who calls whom, and in what order? | Sequence diagram |
47
+ | What states and transitions exist? | State diagram |
48
+ | What determines the next step? | Flowchart with decisions |
49
+ | What data is related? | Entity relationship diagram |
50
+
51
+ - Place an overview diagram early when it gives readers the picture needed for the detail
52
+ - Show dependencies and interactions as edges; use containment only for genuine part-whole relationships
53
+ - Label elements in plain language and connect them to technical names
54
+ - Label edges when their meaning is not obvious
55
+ - Include relevant failure paths and conditions
56
+ - Split a diagram when readers cannot follow it at a glance
57
+ - A node count can prompt review, but it does not determine whether the diagram is clear
58
+ - Carry meaning in labels, not color alone
59
+
60
+ For example, two callers can share a module without containing each other:
196
61
 
197
62
  ```mermaid
198
63
  flowchart LR
199
- A["Write failing tests<br/>(test-writer)"] --> B["Make them pass<br/>(task-executor)"]
200
- B --> C["Verify<br/>(task-checker)"]
64
+ API["API"] -->|authenticates through| Auth["Authentication module"]
65
+ Worker["Worker"] -->|authenticates through| Auth
201
66
  ```
202
67
 
203
- - The `<br/>` line carries the file, agent or command name
204
- - Someone who knows the system reads the second line, and someone who does not reads the first
205
- - A diagram labelled only with identifiers explains nothing to the second reader, who is the one that needed the diagram
206
-
207
- ### 4.3. Keep it graspable
208
-
209
- *Aim for a diagram a non-expert reads correctly on first look, without narration.*
210
-
211
- - Roughly nine nodes is the ceiling for one diagram. Past that, split it and give each part its own section
212
- - Label every edge that is not obvious. An unlabelled arrow asserts a relationship without naming it
213
- - Show the failure path when there is one. A flow with only the happy path misrepresents the system
214
- - Do not encode meaning in colour alone
215
-
216
- ## 5. Conventions
217
-
218
- *Numbered headings, and never repeat a parent doc.*
219
-
220
- - **Number every heading** – `## 1.`, `### 1.1.` – the period belongs to the number. The number lives in the heading text so a reader can find a cross-reference by eye. Drop the third level in docs under roughly 200 lines
221
- - **Do not duplicate up the tree** – a child doc adds detail and links to its parent. If a section would restate what the parent says, cut it and link
222
-
223
- ## 6. Process
224
-
225
- *Diagram before prose. Deriving structure from a finished diagram is fast; retrofitting a diagram onto finished prose does not work.*
226
-
227
- 1. **Establish the shape.** Read the code, config, and entry points. Do not start from existing docs – they are what you are replacing, and their errors propagate
228
- 2. **Draw the lead diagram first.** Getting it right forces the structure. If you cannot draw it, you do not yet understand the thing well enough to document it
229
- 3. **Derive the section list from the diagram nodes.** One section per node, headings reusing node labels
230
- 4. **Write the opening sentence.** Do this before the body, so the body has a claim to support
231
- 5. **Fill each section.** Takeaway line first, then detail
232
- 6. **Check MECE across siblings**, then verify every node has a section and every section has a node
233
- 7. **Verify the diagram renders.** Mermaid fails silently in some viewers. Check that the fenced block parses, with no unescaped quote or bracket in any label
234
-
235
- ## 7. Anti-patterns
68
+ Use the same names in the related sections.
69
+ The sections can explain interfaces and call behavior without creating one section for every diagram node.
236
70
 
237
- *Each of these looks like a normal doc and fails a reader in a specific way.*
71
+ ## Review the explanation as a whole
238
72
 
239
- | Pattern | Why it fails |
240
- | ------------------------------------ | -------------------------------------------------------- |
241
- | Conclusion at the end | the reader carries unresolved detail until the last line |
242
- | A diagram after the prose | the reader has already built a mental model, possibly wrong |
243
- | One diagram per section, none overall | no single artefact carries the shape |
244
- | Diagram nodes labelled `AuthSvc` | only legible to someone who already knows the system |
245
- | Sections mirroring the directory tree | directory layout is rarely the reader's question order |
246
- | Restating the parent doc | two sources to keep in step, and they will drift |
73
+ - Read only the opening and headings to check that the answer remains visible
74
+ - Read each parent with its children to check that the children support its claim
75
+ - Check each sibling group for mixed questions, overlap, and missing support
76
+ - Follow each name from the overview to the detailed explanation
77
+ - Check that links across components remain visible instead of becoming misleading nesting
78
+ - Remove repeated summaries and references that make readers jump away for an essential fact
79
+ - Verify Mermaid syntax and rendering when you add a diagram
80
+ - Report when rendering could not be checked
@@ -1,231 +1,43 @@
1
1
  ---
2
2
  name: writing
3
- description: One plain-language standard for every durable artifact. A durable artifact is prose that outlives the session and is read later by someone who was not in the conversation. It covers architecture decision records (ADRs), glossary entries, living specs and functional requirements, map nodes, handoff files, READMEs and other docs, and pull request bodies. Invoke before writing or editing any of them.
3
+ description: Apply ACStack's shared communication standard to durable artifacts, including specs, decisions, map nodes, handoffs, documentation, and pull request bodies. Read before writing or editing them.
4
4
  ---
5
5
 
6
6
  # Writing
7
7
 
8
- ## Who you are
8
+ Write durable artifacts so a reader outside the conversation can understand the current answer and act on it.
9
9
 
10
- *You are the best developer in the world. That is exactly why your writing has to be simple.*
10
+ ## Load the shared standard
11
11
 
12
- - **You are smarter, more graceful, and more efficient than any other developer**
13
- - Other developers envy how easily you carve through a complex problem
14
- - You see the shape of a system while they are still reading the first file
15
- - **Not everyone is as smart as you**
16
- - That is your problem to solve, never theirs
17
- - Always explain a thing so a reader without your domain expertise gets it on the first pass
18
- - A sentence the reader has to work to understand is a sentence you need to write better
19
- - **Everything you say and write flows logically and reads easily**
20
- - Each point follows from the one before it
21
- - Nothing needs a second pass to interpret
22
- - **By default, write for a reader with 150 other things to do today**
23
- - They read the artifact once, in seconds, and they never come back to it
24
- - Give them what they need in order to make a decision or take action, and nothing else
25
- - Default to the highest level possible that still enables them to decide or act
26
- - Go deep only where the depth would change what they decide or do
27
- - **Brevity is never a reason to hide something they need to decide or act**
28
- - Weigh every detail against all the others, then keep only those that truly matter
29
- - Keep anything the reader would be angry to learn about later
30
- - Nobody reading a durable artifact can ask you a follow-up question
12
+ Read `../../output-styles/ac-writing-style.md` relative to this skill directory before writing your first artifact in a session.
13
+ Read `examples.md` beside this skill for examples of applying that standard.
31
14
 
32
- > ## **IF YOU CAN'T EXPLAIN IT SIMPLY, YOU DON'T UNDERSTAND IT WELL ENOUGH.**
33
- >
34
- > **Commonly attributed to Albert Einstein.**
15
+ The marked communication block in the output style is the canonical source for both chat and durable prose.
16
+ Claude Code loads the output style and its hook extracts that block on user turns.
17
+ The pi extension injects the style and extracts the same block.
18
+ Read the file even when your host does not inject it; a reference alone does not load its instructions.
35
19
 
36
- **THIS IS THE WHOLE JOB. READ IT AGAIN.**
20
+ ## Make the artifact stand alone
37
21
 
38
- **EVERY TIME YOU REACH FOR A LONGER WORD, A CLEVERER PHRASE, OR A SENTENCE THAT NEEDS A SECOND PASS, YOU ARE TELLING THE READER YOU DO NOT UNDERSTAND THE THING YET.**
22
+ - State the current behavior, decision, or requested action before its supporting detail
23
+ - Include the context a future reader cannot recover from the conversation
24
+ - Name relevant files, commands, actors, and constraints
25
+ - Explain unfamiliar project terms before relying on them
26
+ - Keep necessary trade-offs, failure conditions, and evidence
27
+ - Put decision history in a separate section when it helps explain the current answer
28
+ - Read `../visual-docs/SKILL.md` for longer explanations or relationships that need a diagram, if you have not read it this session
29
+ - Keep the shared standard in its canonical file instead of maintaining copies here
39
30
 
40
- **THE EXPERT IS THE ONE WHO MAKES IT SIMPLE. NOT THE ONE WHO MAKES IT SOUND HARD.**
31
+ ## Review for meaning before mechanics
41
32
 
42
- **BEFORE YOU WRITE A SENTENCE, ASK: COULD A DEVELOPER TWO YEARS INTO THEIR CAREER READ THIS ONCE AND GET IT? IF NOT, YOU DO NOT UNDERSTAND IT WELL ENOUGH YET. GO BACK.**
33
+ - Read the artifact as someone unfamiliar with this repository
34
+ - Cut words only when the reader loses no necessary information
35
+ - Check that terms, identifiers, and links match the source being described
36
+ - Read `vocabulary.md` for common simpler alternatives and punctuation conventions
37
+ - Treat word suggestions in context; a technical term or quotation can need the original wording
38
+ - Run `~/.claude/acstack/bin/acstack lint-prose <paths>` when available
39
+ - The command warns and never blocks
40
+ - Its sentence, paragraph, passive-voice, and vocabulary checks are heuristics, not proof of unclear or incorrect writing
41
+ - Review each warning; preserve wording when changing it would lose meaning or accuracy
43
42
 
44
- ACStack adopts the writing rules of ASD-STE100 (Simplified Technical English), not its licensed dictionary. ASD-STE100 is an aerospace standard for controlled technical writing. The file `vocabulary.md` beside this skill replaces the dictionary, and the lint reads that same file.
45
-
46
- Every rule below is a way to write. Each rule has a `Write:` and `Not:` pair in `examples.md` beside this skill, except rules 3 and 11, which keep theirs inline. Read `examples.md` before you write your first durable artifact in a session.
47
-
48
- ## Sentences
49
-
50
- An instruction is a numbered step, a procedure line, or a handoff next action.
51
-
52
- ### 1. Cap a descriptive sentence at 25 words, and an instruction at 20 words (ASD-STE100)
53
-
54
- `acstack lint-prose` checks both caps. The 20-word cap applies to an ordered list item, written `1.` or `1)`. An unordered bullet keeps the 25-word cap.
55
-
56
- ### 2. Give each sentence one instruction (ASD-STE100)
57
-
58
- ### 3. Give each sentence one idea, and never write a compound sentence without a reason
59
-
60
- A compound sentence is two clauses joined by a comma, by `and`, `so`, `but`, `which` or `where`. Use one only when the second clause changes what the first one means. Everywhere else, split it or cut it.
61
-
62
- - Write: A map holds question nodes and work nodes. The frontier is the set ready to work now.
63
- - Not: A map holds question and work nodes, and the frontier is the set ready to work now, which the tracker derives from the blocked-by links.
64
-
65
- **Cut a trailing clause that only justifies, softens or restates the first half.** This is the most common failure in this repository. It reads as padding, and the sentence is stronger without it.
66
-
67
- - Write: Claude starts building before the requirements are clear.
68
- - Not: Claude starts building before the requirements are clear, so you get the wrong thing quickly.
69
-
70
- - Write: Claude writes the code, then writes tests that pass against that code.
71
- - Not: Claude writes the implementation and then writes tests that pass against it, which proves nothing.
72
-
73
- **When the trailing clause is the point, lead with it instead of cutting it.** Cutting loses the point. Inverting the sentence puts the answer where the reader looks first.
74
-
75
- - Write: Don't cache the token – it expires in five minutes.
76
- - Not: The token expires in five minutes, so don't cache it.
77
-
78
- - Write: Roll back the deploy – it broke the checkout page.
79
- - Not: The deploy broke the checkout page, so roll it back.
80
-
81
- Spot it by the joining word. `so`, `therefore` and `which means` all announce that the point comes second.
82
-
83
- **Never bolt a cross-reference onto a sentence with a comma.** Put it in parentheses.
84
-
85
- - Write: You get three commands (see section 1).
86
- - Not: You get three commands, and section 1 says which one to use.
87
- - Not: Install it with two commands, covered in section 2.
88
-
89
- **Keep a second clause only when it carries a fact the first clause needs.**
90
-
91
- - Write: The hook raises a `nudge_warn` below 1 to 1, because a rung of 0 would block every turn.
92
-
93
- ### 4. Break a paragraph at three sentences
94
-
95
- ### 5. Open a paragraph with its point
96
-
97
- ## Words
98
-
99
- ### 6. Use one term for one meaning across a document (ASD-STE100)
100
-
101
- ### 7. Define a term of art in plain words, before you first use it
102
-
103
- Explain every invented term before the sentence that relies on it, never after. A reader who meets `map`, `node` or `frontier` cold has already stopped reading by the time the definition arrives.
104
-
105
- The same rule orders sections. A section that uses a term has to sit after the section that defines it.
106
-
107
- ### 8. Spell out an abbreviation at first use
108
-
109
- ### 9. Cap a noun string at three words (ASD-STE100)
110
-
111
- ### 10. Keep the articles (ASD-STE100)
112
-
113
- ### 11. Use the common word, and never a metaphor where a plain word exists
114
-
115
- Five ways this fails. Each carries its own pair.
116
-
117
- **A fancier word than the job needs.** The longer word buys nothing, and it costs the reader a beat.
118
-
119
- - Write: Use the bundled CLI. Many nodes stay in fog.
120
- - Not: Utilize the bundled CLI. Numerous nodes remain in fog.
121
-
122
- - Write: You provide feedback on Claude's recommended answer instead of prompting from scratch.
123
- - Not: You confirm instead of composing.
124
-
125
- **Word order nobody uses out loud.** Say the sentence to yourself. Write the order you said.
126
-
127
- - Write: Some requests only need one question.
128
- - Not: Some requests need only one question.
129
-
130
- **A metaphor the reader has to decode.** A heading is the worst place to make them do that.
131
-
132
- - Write: `## Three commands, and which one to use`
133
- - Not: `## No path selection: the fog picks the size`
134
-
135
- **Phrasing that needs a second pass.** Pick what a reader understands the first time, every time.
136
-
137
- - Write: anything you cannot yet articulate clearly
138
- - Not: something nobody can state precisely yet
139
-
140
- **A sentence written for drama.** State the fact and stop. A sentence built for effect reads as marketing, not as documentation.
141
-
142
- - Write: ACStack throws the nodes away.
143
- - Not: The nodes themselves are scaffolding.
144
-
145
- - Write: Some requests only need one question.
146
- - Not: A single question ends there.
147
-
148
- Most of these words have no entry in `vocabulary.md`, and they should not. `composing` is right in a sentence about music. The judgment is yours, and these pairs are what it looks like.
149
-
150
- ### 12. Use the short form
151
-
152
- ## Voice
153
-
154
- ### 13. Name the actor and put it in front of the verb (ASD-STE100)
155
-
156
- ### 14. Write descriptions in the present tense and procedures in the imperative (ASD-STE100)
157
-
158
- ### 15. Make a claim once, at the strength the evidence supports
159
-
160
- ### 16. Name the source of a claim
161
-
162
- ### 17. Describe a thing by what it does
163
-
164
- ## Structure
165
-
166
- ### 18. Name the file, the number, and the actor
167
-
168
- ### 19. Recommend one option and give the reason
169
-
170
- ### 20. State what a thing is, then stop
171
-
172
- Never say what it is not. The one exception is showing the wrong version so the
173
- reader can spot it, as every `Not:` line in `examples.md` does.
174
-
175
- ### 21. List as many items as there are
176
-
177
- "Etc." is fine when you are trying to convey that your list is non-exhaustive.
178
-
179
- ### 22. Name the thing a pronoun stands for
180
-
181
- A reader arriving at a heading or a takeaway line holds no context from the line above it. Never open one with `one`, `it`, `this` or `that` where the noun is missing.
182
-
183
- ### 23. Write for a developer who has never seen this repository
184
-
185
- Picture someone a few years into their career, reading this for the first time. Every sentence has to land on that reader without a second pass.
186
-
187
- A term this project invented gets its plain meaning on the same line, every time it opens a section.
188
-
189
- ### 24. State what you checked, and when
190
-
191
- ## Headings and marks
192
-
193
- ### 25. Connect clauses with a period or a comma, and set an aside off with an en dash
194
-
195
- **Always use the Oxford comma.** A list of three or more items takes a comma before the final `and` or `or`.
196
-
197
- ### 26. Write a heading in sentence case, and end a fragment with no period
198
-
199
- A bullet never ends in a period, however long it runs. A cell follows the same rule. Section 3 of
200
- the `visual-docs` skill owns bullet shape.
201
-
202
- A `Write:` or `Not:` line in this skill is the one exception, because it quotes a sentence and
203
- keeps that sentence's own punctuation.
204
-
205
- ### 27. Give a heading content that its paragraph does not repeat
206
-
207
- ### 28. Bold a single term for emphasis
208
-
209
- ### 29. Carry the meaning in words
210
-
211
- ### 30. End with the last fact
212
-
213
- ## What this skill leaves to others
214
-
215
- This skill owns words, sentences, paragraphs, and heading style. Document shape belongs to the `visual-docs` skill. That skill owns the Minto pyramid, the opening sentence, MECE (mutually exclusive, collectively exhaustive) sections, diagram-first structure, and bullet discipline.
216
-
217
- Chat replies and commit subject lines sit outside the standard.
218
-
219
- Straight quotes are the only quotes. The two tables in `vocabulary.md` hold every replaced word and every replaced mark.
220
-
221
- ## Before you finish
222
-
223
- Check five things in what you just wrote.
224
-
225
- 1. Sentence lengths. No descriptive sentence runs past 25 words, no instruction past 20.
226
- 2. Compound sentences. Search your own text for `, and `, `, so `, `, which `, and `, because `. Justify every hit against rule 3, or split it.
227
- 3. Vocabulary. No row from `vocabulary.md` survives in the text.
228
- 4. Voice. Every sentence names its actor, descriptions sit in the present tense, procedures sit in the imperative.
229
- 5. Headings. Sentence case, no trailing period, and each one adds what its paragraph does not.
230
-
231
- Then run `~/.claude/acstack/bin/acstack lint-prose <paths>` when it is available. It warns and never blocks.
43
+ ACStack draws on ASD-STE100 (Simplified Technical English) for plain-language techniques, not its licensed dictionary or mandatory length limits.