acstack 0.50.4 → 0.52.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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +14 -7
- package/agents/codex/frontend-verifier.toml +89 -6
- package/agents/codex/task-checker.toml +83 -2
- package/agents/codex/task-executor.toml +83 -1
- package/agents/codex/test-writer.toml +77 -1
- package/agents/frontend-verifier.md +13 -6
- package/agents/task-checker.md +7 -2
- package/agents/task-executor.md +7 -1
- package/agents/test-writer.md +1 -1
- package/assets/terminal-workspace/config.example.yaml +1 -1
- package/assets/terminal-workspace/helpers/acstack-md +12 -4
- package/assets/terminal-workspace/helpers/acstack-open +10 -2
- package/cli/dist/index.js +7187 -6402
- package/cli/dist/index.js.map +4 -4
- package/cli/package.json +1 -1
- package/docs/config-reference.md +113 -14
- package/docs/dev-setups.md +4 -4
- package/docs/terminal-workspace.md +1 -1
- package/docs/workflows.md +22 -16
- package/examples/design-doc/acstack/README.md +273 -0
- package/examples/design-doc/acstack/acstack.yaml +4 -0
- package/examples/design-doc/acstack/cli.yaml +5 -0
- package/examples/design-doc/acstack/design.yaml +39 -0
- package/examples/design-doc/acstack/github.yaml +12 -0
- package/examples/design-doc/acstack/host.yaml +14 -0
- package/examples/design-doc/acstack/journey.md +85 -0
- package/examples/design-doc/acstack/publication.md +16 -0
- package/examples/design-doc/acstack/review-runtime.yaml +24 -0
- package/examples/design-doc/acstack/skills.yaml +22 -0
- package/examples/design-doc/acstack/store.yaml +11 -0
- package/examples/design-doc/acstack/user.yaml +15 -0
- package/examples/design-doc/acstack/viewer.yaml +13 -0
- package/hooks/ac-writing-style-reminder.sh +7 -18
- package/hooks/communication-standard.mjs +17 -0
- package/hooks/communication-standard.sh +6 -0
- package/hooks/context-pressure.sh +2 -2
- package/hooks/hooks.json +18 -0
- package/hooks/lib/communication-standard.mjs +16 -0
- package/hooks/project-data.sh +38 -0
- package/hooks/session-start-handoff.sh +21 -7
- package/hooks/session-start.sh +9 -2
- package/orchestrator/AGENTS.md +25 -14
- package/output-styles/ac-writing-style.md +75 -276
- package/package.json +2 -1
- package/pi/agents/frontend-verifier.md +89 -6
- package/pi/agents/task-checker.md +83 -2
- package/pi/agents/task-executor.md +83 -1
- package/pi/agents/test-writer.md +77 -1
- package/pi/extension.ts +70 -12
- package/profiles/fullstack-python.yaml +1 -1
- package/profiles/node-typescript.yaml +1 -1
- package/profiles/python.yaml +1 -1
- package/skills/archive/SKILL.md +53 -36
- package/skills/bootstrap/SKILL.md +6 -6
- package/skills/bridge/SKILL-VM.md +11 -2
- package/skills/bridge/SKILL-WINDOWS.md +3 -3
- package/skills/browser-verify/SKILL.md +14 -5
- package/skills/code-review/SKILL.md +8 -2
- package/skills/commit/SKILL.md +7 -6
- package/skills/compact-and-continue/SKILL.md +9 -8
- package/skills/design-doc/SKILL.md +238 -0
- package/skills/explore/SKILL.md +1 -1
- package/skills/grilling/SKILL.md +4 -4
- package/skills/handoff/SKILL.md +4 -4
- package/skills/host/SKILL.md +1 -1
- package/skills/host/detect-host.sh +2 -2
- package/skills/host/notes.md +2 -2
- package/skills/host/questions.md +1 -1
- package/skills/implement/SKILL.md +20 -13
- package/skills/implement/decision-log.md +9 -8
- package/skills/implement/design-pass.md +16 -2
- package/skills/map/SKILL.md +15 -71
- package/skills/map/alignment.md +18 -27
- package/skills/map/frontend.md +1 -1
- package/skills/map/materialising.md +74 -0
- package/skills/map/trackers/files.md +4 -6
- package/skills/pre-commit-review/SKILL.md +15 -9
- package/skills/pre-commit-review/auto-fix.md +1 -1
- package/skills/quick-fix/SKILL.md +1 -1
- package/skills/record-context/SKILL.md +6 -6
- package/skills/setup/SKILL.md +15 -50
- package/skills/setup/browser.md +2 -2
- package/skills/setup/first-run.md +19 -8
- package/skills/setup/report.md +3 -2
- package/skills/setup/row-fixes.md +56 -9
- package/skills/sync/SKILL.md +12 -11
- package/skills/terminal-workspace/SKILL.md +1 -1
- package/skills/test-conventions/SKILL.md +2 -2
- package/skills/visual-docs/SKILL.md +69 -235
- package/skills/writing/SKILL.md +29 -217
- package/skills/writing/examples.md +62 -129
- package/docs/adr/0001-ste-writing-standard.md +0 -16
- package/docs/adr/0002-version-gate-not-auto-bump.md +0 -35
- package/docs/adr/0003-handoff-ack-command.md +0 -19
- package/docs/adr/0004-dev-setup-per-host.md +0 -13
- package/docs/adr/0005-two-orchestrators-per-host.md +0 -25
- package/docs/adr/0006-document-opener-service.md +0 -89
- package/docs/adr/0007-lead-check-reads-the-transcript.md +0 -87
- package/docs/adr/0008-cli-audits-skill-interviews.md +0 -37
- package/docs/adr/0009-verify-the-write-not-the-writer.md +0 -51
- package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +0 -115
- package/docs/adr/0011-node-header-is-the-edge-encoding.md +0 -20
- package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +0 -31
- package/docs/adr/0013-the-diagram-renderer-is-pure.md +0 -23
- package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +0 -29
- package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +0 -37
- package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +0 -21
- package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +0 -13
- package/docs/adr/0018-alignment-packs-use-local-viewers.md +0 -11
- package/docs/adr/index.md +0 -18
|
@@ -1,246 +1,80 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: visual-docs
|
|
3
|
-
description:
|
|
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
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
200
|
-
|
|
64
|
+
API["API"] -->|authenticates through| Auth["Authentication module"]
|
|
65
|
+
Worker["Worker"] -->|authenticates through| Auth
|
|
201
66
|
```
|
|
202
67
|
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
71
|
+
## Review the explanation as a whole
|
|
238
72
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
package/skills/writing/SKILL.md
CHANGED
|
@@ -1,231 +1,43 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: writing
|
|
3
|
-
description:
|
|
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
|
-
|
|
8
|
+
Write durable artifacts so a reader outside the conversation can understand the current answer and act on it.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## Load the shared standard
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
20
|
+
## Make the artifact stand alone
|
|
37
21
|
|
|
38
|
-
|
|
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
|
-
|
|
31
|
+
## Review for meaning before mechanics
|
|
41
32
|
|
|
42
|
-
|
|
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
|
|
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.
|