@caddis/cli 0.4.1 → 0.4.3
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/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/skills/_registry.md +2 -0
- package/bundles/antigravity-plugin/skills/catchup/SKILL.md +57 -0
- package/bundles/antigravity-plugin/skills/safe-cleanup/SKILL.md +0 -10
- package/bundles/antigravity-plugin/skills/tech-explainer/SKILL.md +280 -0
- package/bundles/antigravity-plugin/skills/tech-explainer/assets/skeleton.md +255 -0
- package/bundles/antigravity-plugin/skills/tech-explainer/evals/evals.json +50 -0
- package/bundles/antigravity-plugin/skills/tech-explainer/references/diagrams.md +237 -0
- package/bundles/antigravity-plugin/skills/tech-explainer/references/language.md +141 -0
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/safe-cleanup/SKILL.md +0 -10
- package/bundles/codex/.codex/skills/devops/safe-cleanup/SKILL.md +0 -10
- package/bundles/codex/.codex/skills/docs/tech-explainer/SKILL.md +280 -0
- package/bundles/codex/.codex/skills/docs/tech-explainer/assets/skeleton.md +255 -0
- package/bundles/codex/.codex/skills/docs/tech-explainer/evals/evals.json +50 -0
- package/bundles/codex/.codex/skills/docs/tech-explainer/references/diagrams.md +237 -0
- package/bundles/codex/.codex/skills/docs/tech-explainer/references/language.md +141 -0
- package/bundles/manifest.json +3 -3
- package/package.json +1 -1
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
|-------|------|-------------|
|
|
50
50
|
| Code Documentation | `code-documentation/` | Writing effective code documentation - API docs, README files, inline comments, and technical guides. Use for documenting codebases, APIs, or writing developer guides. |
|
|
51
51
|
| Explainer Doc | `explainer-doc/` | Write a document that hands off work to a team who did NOT do the investigation — an external vendor, another team, a contractor — and who must be able to act on it alone. Use when the user says "write a spec for the X team", "document this for someone outside the team", "explainer doc", "implementation spec for a vendor", "hand this off to Y", or is about to write a design doc whose primary reader did not live through the debugging/design process. NOT for internal specs where the reader already has full context (use technical-writing or writing-plans instead) — this is specifically for the "stranger must follow it alone" case. |
|
|
52
|
+
| Tech Explainer | `tech-explainer/` | >- |
|
|
52
53
|
| Technical Writing | `technical-writing/` | Technical documentation best practices for READMEs, API docs, architecture docs, runbooks, and developer guides. Use when writing or reviewing documentation, creating onboarding guides, or establishing documentation standards. |
|
|
53
54
|
| Writing Plans | `writing-plans/` | Use when you have a spec or requirements for a multi-step task, before touching code |
|
|
54
55
|
|
|
@@ -69,6 +70,7 @@
|
|
|
69
70
|
| Skill | Path | When to Use |
|
|
70
71
|
|-------|------|-------------|
|
|
71
72
|
| Add Rules | `add-rules/` | Create canonical rules for ANY folder — write <folder>/AGENTS.md (from the folder template) + a <folder>/CLAUDE.md @import shim. For folders the stack-map generator doesn't cover. |
|
|
73
|
+
| Catchup | `catchup/` | Where were we? A quick list of what this session was doing and what is still open |
|
|
72
74
|
| Digress | `digress/` | Park the current workstream on the stack and switch to a new task — without losing the original |
|
|
73
75
|
| Excalidraw Db | `excalidraw-db/` | Turn a SQL artifact into an Excalidraw diagram for a design review / ARB pack / slide — higher-level, drag-the-boxes format |
|
|
74
76
|
| Feature Plan | `feature-plan/` | Create a phased, TDD-structured implementation plan that acts as the durable spine for multi-session work |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: catchup
|
|
3
|
+
description: Where were we? A quick list of what this session was doing and what is still open
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /catchup — where are we?
|
|
7
|
+
|
|
8
|
+
Answer one question: **what were we doing, and what is still open?**
|
|
9
|
+
|
|
10
|
+
Not named `/recap` on purpose — Claude Code has a built-in `/recap` that produces a one-line
|
|
11
|
+
session summary. This is the list version, and two commands whose names differ by nothing would
|
|
12
|
+
be a coin toss every time.
|
|
13
|
+
|
|
14
|
+
## Read these, in this order, and stop as soon as you can answer
|
|
15
|
+
|
|
16
|
+
1. **`.caddis/session-state.md`** — the primary source. The `Stop` hook rewrites it at the end of
|
|
17
|
+
every turn, so it is current even when the session ended abruptly and nobody ran `/handoff`.
|
|
18
|
+
It holds the last real request, the task list with statuses, and the files touched.
|
|
19
|
+
2. **`.caddis/relay.md`** — only refreshed by `/handoff`, so it may be days behind, but it carries
|
|
20
|
+
what the state file cannot: the agreed **next step** and the open blockers.
|
|
21
|
+
3. **The current turn's own context**, if this session has already done work. What you have done
|
|
22
|
+
since the last Stop is newer than both files, and neither knows about it.
|
|
23
|
+
|
|
24
|
+
Compare the timestamps rather than assuming. If `relay.md` is newer, a handoff ran and its "Next
|
|
25
|
+
step" is the authority. If `session-state.md` is newer, work happened after the last handoff and
|
|
26
|
+
the relay's next step may already be done.
|
|
27
|
+
|
|
28
|
+
**A missing file is not an error.** A repo with neither has simply not run a caddis session yet —
|
|
29
|
+
say that in one line and stop.
|
|
30
|
+
|
|
31
|
+
## What to report
|
|
32
|
+
|
|
33
|
+
Keep it short enough to read at a glance. Roughly:
|
|
34
|
+
|
|
35
|
+
- **One line on where we are** — the workstream, and whether it is mid-flight or at a clean stop.
|
|
36
|
+
- **In-progress and pending items**, as a short list. Mark anything blocked, and on what.
|
|
37
|
+
- **The next step**, if one is recorded. Say which file it came from.
|
|
38
|
+
- **Uncommitted work**, if `git status` is dirty — this is the thing most likely to be lost, and
|
|
39
|
+
the state file does not track it. Check it; do not assume clean.
|
|
40
|
+
|
|
41
|
+
Leave out anything already done unless the user asks. "What is finished" is a different question
|
|
42
|
+
from "where are we", and the completed list is usually the longest part of both files.
|
|
43
|
+
|
|
44
|
+
## Say plainly when the answer is thin
|
|
45
|
+
|
|
46
|
+
If the state file has no tasks and no last request, the honest answer is "the last session did not
|
|
47
|
+
record anything specific" — not a paragraph assembled from file names. A recap the user cannot act
|
|
48
|
+
on is worse than one sentence admitting there is nothing to recap.
|
|
49
|
+
|
|
50
|
+
## When the user wants more than a list
|
|
51
|
+
|
|
52
|
+
- To **reopen** the actual conversation rather than read about it: `claude --continue` in this
|
|
53
|
+
folder, or `claude --resume` to pick an older session. Mention this only if the recap is thin,
|
|
54
|
+
or if they ask for detail the files do not hold.
|
|
55
|
+
- To **write** a durable resume doc rather than read one: `/caddis:handoff`.
|
|
56
|
+
- To **pop a parked workstream** off the digress stack: `/caddis:resume`. That is a different
|
|
57
|
+
mechanism — it restores work deliberately set aside, not the last session's state.
|
|
@@ -174,13 +174,3 @@ This:
|
|
|
174
174
|
service-a OK declared=24 missing=0 <- every declared dep imported
|
|
175
175
|
service-b OK declared=19 missing=0
|
|
176
176
|
```
|
|
177
|
-
|
|
178
|
-
## Reference implementation
|
|
179
|
-
|
|
180
|
-
The estate this skill came from keeps working tools at `.caddis/tools/`:
|
|
181
|
-
|
|
182
|
-
- `venv-audit.py` - imports every dependency each `pyproject.toml` declares
|
|
183
|
-
- `rebuild-venv.ps1` - renames aside, rebuilds, restarts services, refuses on links or live processes
|
|
184
|
-
- `README-venv-safety.md` - the incident record
|
|
185
|
-
|
|
186
|
-
Adapt rather than copy: the rules matter more than the scripts.
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tech-explainer
|
|
3
|
+
context: fork
|
|
4
|
+
description: >-
|
|
5
|
+
Write a plain-language technical explainer for a smart reader who did NOT do the investigation — a
|
|
6
|
+
manager, an infra colleague, a stakeholder, the person whose recommendation you are answering.
|
|
7
|
+
Layered Mermaid diagrams that rank causes by SIZE OF EFFECT, a controlled-vocabulary table,
|
|
8
|
+
Simplified Technical English, published withdrawn results, and questions back to the reader. Use
|
|
9
|
+
this skill whenever the user says "explain this to X", "explainer", "write this up for someone
|
|
10
|
+
non-technical", "plain English", "simplified technical english", "STE", "explain our findings",
|
|
11
|
+
"write up the benchmark results", "answer my manager's recommendations", "why is it slow — document
|
|
12
|
+
it", "make a doc with diagrams explaining the stack", or is about to summarise an investigation, a
|
|
13
|
+
benchmark, a postmortem, an architecture, or a disagreement for a reader who will not read the raw
|
|
14
|
+
data. NOT for handing off work to be BUILT by a vendor or another team (use explainer-doc for that —
|
|
15
|
+
it produces an actionable spec); NOT for READMEs or API docs (use technical-writing). This one
|
|
16
|
+
produces UNDERSTANDING: the reader must finish able to argue with you on the merits.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# tech-explainer — make a stranger understand, and able to push back
|
|
20
|
+
|
|
21
|
+
The reader is intelligent but was not in the room. They did not watch the tests, they will not read
|
|
22
|
+
the raw report, and they have their own opinion about what you should do. If you hand them the
|
|
23
|
+
findings compressed, every conclusion looks like an assertion, and the conversation becomes
|
|
24
|
+
credentials against credentials.
|
|
25
|
+
|
|
26
|
+
**The job is not to summarise. The job is to transfer enough of the reasoning that the reader can
|
|
27
|
+
disagree with you correctly.** A reader who finishes and says "I still think it's the wrapper, and
|
|
28
|
+
here's why your 3x number is wrong" is a success. A reader who nods and remembers nothing is a
|
|
29
|
+
failure, even if they agreed.
|
|
30
|
+
|
|
31
|
+
## What this skill gives you
|
|
32
|
+
|
|
33
|
+
| File | Use it for |
|
|
34
|
+
| --------------------------- | --------------------------------------------------------------------------- |
|
|
35
|
+
| `assets/skeleton.md` | **Start here.** The fill-in document. Copy it, then delete what has nothing to say. |
|
|
36
|
+
| `references/diagrams.md` | Copy-paste Mermaid for all six patterns, plus the syntax that bites. |
|
|
37
|
+
| `references/language.md` | Full STE rules, the rewrite table, and the mechanical rewrite pass. |
|
|
38
|
+
|
|
39
|
+
## When this is NOT the right skill
|
|
40
|
+
|
|
41
|
+
- The reader must **build** something from the document → `explainer-doc`. That skill produces an
|
|
42
|
+
actionable spec (DDL, queries, acceptance criteria). This one produces understanding.
|
|
43
|
+
- The reader already lived through the investigation → `technical-writing` or a plain summary. The
|
|
44
|
+
vocabulary table and STE discipline are overhead they don't need.
|
|
45
|
+
- It's a README, API reference, or runbook → `technical-writing`.
|
|
46
|
+
|
|
47
|
+
The tell for *this* skill: **the reader will form or change an opinion**, and you need that opinion
|
|
48
|
+
to be based on the numbers rather than on trust.
|
|
49
|
+
|
|
50
|
+
## The central move — rank the layers by size of effect
|
|
51
|
+
|
|
52
|
+
This is the single technique that makes the document work, and it is what most explainers get wrong.
|
|
53
|
+
|
|
54
|
+
An architecture diagram shows **what exists**. It is the natural thing to draw and it is nearly
|
|
55
|
+
useless here, because the reader's real question is not "what is the shape of this system" — it is
|
|
56
|
+
**"what should we change?"** So draw the same stack, but label every layer with **the magnitude of
|
|
57
|
+
its effect on the outcome**:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
LAYER 1 — The model — LARGEST EFFECT — about 3x
|
|
61
|
+
LAYER 2 — The engine — MEDIUM EFFECT — tens of percent
|
|
62
|
+
LAYER 3 — The program — SMALL EFFECT — under 5%
|
|
63
|
+
LAYER 4 — The operating system — NO EFFECT
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Now the reader who came in convinced that swapping the program would fix everything can see, without
|
|
67
|
+
being contradicted, that they were aiming at the 5% layer. **The disagreement becomes arithmetic.**
|
|
68
|
+
That is worth more than any paragraph of argument, because arithmetic is something they can check
|
|
69
|
+
and you cannot fake.
|
|
70
|
+
|
|
71
|
+
Rules for this diagram:
|
|
72
|
+
|
|
73
|
+
- **Order the layers by effect size, largest first** — not by where they sit in the stack, and not by
|
|
74
|
+
the order you investigated them.
|
|
75
|
+
- **Every layer carries a number or an honest "no effect"**, plus the one-line reason. A layer with no
|
|
76
|
+
measurement is a layer you are guessing about; say "not measured" rather than inventing a rank.
|
|
77
|
+
- **Include the layer the reader is about to optimise, even if it ranks last.** Leaving it out looks
|
|
78
|
+
evasive. Ranking it last with a measured number is the whole argument.
|
|
79
|
+
- **Say how to read it.** One line under the diagram: *"If we change the program, we gain a few
|
|
80
|
+
percent. If we change the model, we gain about 3 times. Layer 1 is where the work must go."*
|
|
81
|
+
|
|
82
|
+
If your subject has no natural layers, the same move still applies: rank the candidate causes by
|
|
83
|
+
their measured contribution, and call them causes rather than layers. The stack is a convenience; the
|
|
84
|
+
ranking is the point. It transfers to any "why is it slow / expensive / wrong" question — the causes
|
|
85
|
+
of an ETL's runtime, the sources of a cloud bill, the contributors to a defect rate.
|
|
86
|
+
|
|
87
|
+
**An attribution number must carry its method.** "The N+1 query is 85% of the p99" is the sentence
|
|
88
|
+
the whole document rests on, and share-of-total figures are where this kind of analysis rots: they
|
|
89
|
+
get produced by one tool, quoted onward, and nobody remembers whether it was mean or p99, warm or
|
|
90
|
+
cold, one endpoint or all of them. Say how the share was obtained, in the same breath — *"85% of p99,
|
|
91
|
+
from 12,000 spans over 24 hours, attributed by span duration"*. If you cannot say how, rank it
|
|
92
|
+
qualitatively and mark it unmeasured rather than putting a false number on the diagram.
|
|
93
|
+
|
|
94
|
+
## Simplified Technical English — the language discipline
|
|
95
|
+
|
|
96
|
+
STE is not dumbing down. It is removing every sentence that can be read two ways, so a reader who is
|
|
97
|
+
expert in a *different* field never has to guess. Announce it in the header so the terseness reads as
|
|
98
|
+
courtesy rather than curtness:
|
|
99
|
+
|
|
100
|
+
> **Written in Simplified Technical English.** Short sentences. One idea per sentence.
|
|
101
|
+
|
|
102
|
+
Six rules cover most of it. Full rules and before/after rewrites: `references/language.md`.
|
|
103
|
+
|
|
104
|
+
1. **One idea per sentence.** Aim under 20 words. Split on "and", "but", "which", ";".
|
|
105
|
+
2. **One word, one meaning.** Fix the term in the vocabulary table (§2), then never use a synonym for
|
|
106
|
+
it. "Engine" stays "engine" — never "backend", "runtime", or "inference layer".
|
|
107
|
+
3. **Active voice, and name the actor.** "We withdrew the result", not "the result was withdrawn".
|
|
108
|
+
4. **No idiom, no metaphor, no hedging.** Not "the low-hanging fruit", not "it seems likely that".
|
|
109
|
+
If you are unsure, say the size of your uncertainty: "we measured this once, on a test prompt".
|
|
110
|
+
5. **Every number carries its unit and its basis.** "2,373 output tokens per summary, measured from
|
|
111
|
+
`gpt-4o`" — not "about 2.4k tokens".
|
|
112
|
+
6. **Never open a paragraph with a pronoun standing in for the previous paragraph.** The reader
|
|
113
|
+
skims and lands mid-document; name the subject again. ("This is the most important diagram in
|
|
114
|
+
this document" is fine — "this" points at the thing directly below it, not at prose above.)
|
|
115
|
+
|
|
116
|
+
## The shape — sections in this order
|
|
117
|
+
|
|
118
|
+
The order is load-bearing: the reader must be able to stop at any section and have gained something
|
|
119
|
+
complete. Not every document needs all fifteen. The **bold** slots are the ones that make it *this*
|
|
120
|
+
kind of document; drop the others when they have nothing to say.
|
|
121
|
+
|
|
122
|
+
| § | Slot | What it does |
|
|
123
|
+
| --- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
124
|
+
| — | **Header** | Title, `**Audience:**` by name, and the STE announcement. Naming the reader changes how the whole document reads. |
|
|
125
|
+
| 1 | **Why this document exists** | Numbered list of the questions this answers. Then route the reader's own question: *"Section 5 answers the LM Studio question."* |
|
|
126
|
+
| 2 | **Words used in this document** | Controlled vocabulary table. One meaning only. This is what lets the rest be short. |
|
|
127
|
+
| 3 | What we are building | One left-to-right flowchart of the real pipeline, plus the physical facts (hardware, OS, versions). |
|
|
128
|
+
| 4 | **The goal, in numbers** | Target / measured / gap, in a table, with the three key rows in bold. If there is no gap, say what "good" is. |
|
|
129
|
+
| 5 | The layer stack | What sits on what, and which layers are cheap to change. Answer the reader's specific question here if they asked one. |
|
|
130
|
+
| 6 | Why the work took so long | The results you **withdrew**, and what caught each one. See below — this section buys more credibility than any other. |
|
|
131
|
+
| 7 | Where the time (or cost) goes | A proportion chart with the sample count. Redirects effort before anyone argues about it. |
|
|
132
|
+
| 8 | **What limits the result** | The ranked-layer diagram. The most important diagram in the document. Say so, and say how to read it. |
|
|
133
|
+
| 9 | The recommendations we checked | One row per claim: recommendation / verdict / evidence. Then a **"Where the advice is right"** subsection. |
|
|
134
|
+
| 10 | What the constraint costs | The forced choice (a platform, a vendor, a deadline) — what it costs, and what it genuinely gives back. |
|
|
135
|
+
| 11 | **What we do next** | Ordered steps as a flowchart. Name which step matters most. Then list the measurement gaps still open. |
|
|
136
|
+
| 12 | Questions for \<reader\> | Real questions only. This converts a verdict into a conversation. |
|
|
137
|
+
| 13 | **Summary in five lines** | Five numbered sentences. Someone will read only this. Make it survivable alone. |
|
|
138
|
+
| — | **Related documents** | Table: document → what it holds. This is what lets §1–13 stay short without hiding anything. |
|
|
139
|
+
|
|
140
|
+
Rename the slots to fit the domain — a security review, a cost analysis, and a latency investigation
|
|
141
|
+
will all name §3–§10 differently. Keep the order and the intent.
|
|
142
|
+
|
|
143
|
+
### When a slot does not fit
|
|
144
|
+
|
|
145
|
+
Most explainers hit two or three of these. Substituting is right; padding the slot with invented
|
|
146
|
+
content is not, and forcing a section you have nothing for is how the document starts sounding
|
|
147
|
+
false.
|
|
148
|
+
|
|
149
|
+
| Situation | What to do |
|
|
150
|
+
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
151
|
+
| **§4 — no target exists** | Retitle it "The result, in numbers" and make the missing target the finding: *"We have no agreed p99 target. That is the first thing to fix."* A gap you cannot size is still worth naming. |
|
|
152
|
+
| **§5 duplicates §8** (few causes, one stack) | Collapse. Make §5 a table with a column §8 lacks — usually **cost to change** or **who owns it** — and let §8 carry the only stack diagram. Two near-identical diagrams teach the reader nothing twice. |
|
|
153
|
+
| **§6 — nothing was withdrawn** | Do not invent a retraction. Substitute the assumptions the argument rests on, plus what would falsify each. Same function: it shows the reader where to attack. |
|
|
154
|
+
| **§9 — no formal list of recommendations** | The reader still has a belief. Turn it into a claims-checked table: *the claim as they would state it* / verdict / evidence. "It's just copying data" is a claim; check it like one. |
|
|
155
|
+
| **No independent external number to anchor against** | Say so once and move on. A stated absence costs nothing; a fabricated comparison costs the document. |
|
|
156
|
+
| **The reader has no name** ("my manager") | Use their role in the audience line — *"Audience: the engineering manager"* — and leave a visible placeholder. Never invent a name. |
|
|
157
|
+
| **The prompt is the only source** | Say so in §1 and label every number by origin: measured / calculated / assumed. See process step 2. |
|
|
158
|
+
|
|
159
|
+
### When to stop
|
|
160
|
+
|
|
161
|
+
Section count follows the evidence, not the template. Four numbers and one conclusion is a six-section
|
|
162
|
+
document; a three-week investigation with retractions is a fifteen-section document. If a section
|
|
163
|
+
would exist only because the table lists it, cut it — a short explainer that a manager finishes beats
|
|
164
|
+
a complete one they abandon at §7.
|
|
165
|
+
|
|
166
|
+
The load-bearing minimum is: the audience line, §2, §8, §13, and the related-documents table.
|
|
167
|
+
|
|
168
|
+
## The moves that carry the document
|
|
169
|
+
|
|
170
|
+
**Lead every section with the bolded short answer.** The reader is looking for the answer to one
|
|
171
|
+
question. Give it in the first line, in bold, then spend the section earning it:
|
|
172
|
+
|
|
173
|
+
> **Short answer: we do not have LM Studio installed. But we already run the engine that is inside
|
|
174
|
+
> LM Studio.**
|
|
175
|
+
|
|
176
|
+
**Publish what you withdrew.** List the results you reported and later retracted, each with the cause
|
|
177
|
+
and how it was caught. This feels like confessing and it is actually the strongest section in the
|
|
178
|
+
document: it explains why the work took three weeks, it proves the surviving numbers were checked the
|
|
179
|
+
same way, and it inoculates you against the next person who finds an error. End with the lesson in
|
|
180
|
+
one line — *"a benchmark that gives a believable number is not therefore correct."*
|
|
181
|
+
|
|
182
|
+
**Steelman the person you are answering.** Before refuting a recommendation, write the subsection
|
|
183
|
+
where they are right, and mean it. *"The review is correct that the GPU is not fully used. We confirmed
|
|
184
|
+
this with arithmetic."* Then: *"The instinct behind the advice is right. The cause is different from
|
|
185
|
+
the cause given."* Nobody accepts a correction from someone who did not first understand them.
|
|
186
|
+
|
|
187
|
+
**Route each wrong assumption to its real cause, and it is usually not the reader.** When someone
|
|
188
|
+
recommends a fix you have already applied, the honest framing is almost never "they were wrong" — it
|
|
189
|
+
is that nobody told them. Write it that way: *"The database has been on NVMe since March. That is not
|
|
190
|
+
recorded anywhere the infra team can see, which is our gap to close, not a wrong call."* This is the
|
|
191
|
+
same instinct as the steelman, applied to facts rather than judgement, and it does real work in a
|
|
192
|
+
document that answers someone senior: it separates **the recommendation was reasonable given what
|
|
193
|
+
they knew** from **the recommendation is what we should do**, which is the only distinction that
|
|
194
|
+
lets a senior reader change position without losing anything. Look for it every time a verdict comes
|
|
195
|
+
out "already done" or "does not apply here".
|
|
196
|
+
|
|
197
|
+
**Show the arithmetic in a bare code block.** When a conclusion rests on a calculation, print it so
|
|
198
|
+
the reader can redo it in their head:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
GPU memory speed 3,900 GB per second
|
|
202
|
+
Data read per token 2.65 GB
|
|
203
|
+
Theoretical maximum 1,470 tokens per second
|
|
204
|
+
Measured 114 to 316 tokens per second (8% to 21%)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
A number the reader can re-derive is a number they own. A number they must accept is one they will
|
|
208
|
+
challenge later, at a worse time.
|
|
209
|
+
|
|
210
|
+
**Anchor against an independent external result, when one exists.** "Are we misconfigured?" is
|
|
211
|
+
answerable only by comparison. Find someone else's published number on comparable kit, put it in a
|
|
212
|
+
two-row table beside yours, and state the conclusion plainly. This turns a defensive claim into a
|
|
213
|
+
measurement. If no comparable number exists, say that in one line and move on — never assemble a
|
|
214
|
+
lookalike from a different workload to fill the slot.
|
|
215
|
+
|
|
216
|
+
**Admit the gaps you did not close.** Name what you never measured directly and what you would need
|
|
217
|
+
to do it. Two or three lines. A document with no admitted gaps reads as marketing.
|
|
218
|
+
|
|
219
|
+
**Diagrams for shape, tables for detail, prose only for judgement.** If a table says it better, delete
|
|
220
|
+
the diagram. The count is not the test — the test is that each diagram answers a question no other
|
|
221
|
+
one answers. The source explainer carries eight across thirteen sections and none is redundant; a
|
|
222
|
+
six-section explainer with four near-identical stack diagrams is over-drawn.
|
|
223
|
+
|
|
224
|
+
## Diagram vocabulary
|
|
225
|
+
|
|
226
|
+
Keep to a small, repeated set of Mermaid shapes — the document reads as one voice because the same
|
|
227
|
+
four patterns recur. Copy-paste versions with the syntax details (bold inside nodes, dotted
|
|
228
|
+
"hypothetical" arrows, line breaks, pie charts): `references/diagrams.md`.
|
|
229
|
+
|
|
230
|
+
| Pattern | Use for |
|
|
231
|
+
| ---------------------------------- | ---------------------------------------------- |
|
|
232
|
+
| `flowchart LR` | The pipeline. Input → work → output. |
|
|
233
|
+
| `flowchart TB` with `subgraph`s | The layer stack — §5, and the ranked §8. |
|
|
234
|
+
| `flowchart LR` with a decision node | A loop or a check procedure. |
|
|
235
|
+
| `pie showData` | Where the time/cost goes. Give the run or N. |
|
|
236
|
+
|
|
237
|
+
Check every diagram before shipping: paste it into `mermaid.live`, or read it against the syntax
|
|
238
|
+
table at the end of `references/diagrams.md`. A broken Mermaid block renders as raw source and costs
|
|
239
|
+
more credibility than the diagram was worth.
|
|
240
|
+
|
|
241
|
+
## Process
|
|
242
|
+
|
|
243
|
+
1. **Name the reader and their question.** Ask if it is not obvious. "Explain the benchmark" is not
|
|
244
|
+
enough — you need *who* and *what they currently believe*, because §8's ranking exists to meet a
|
|
245
|
+
specific wrong (or right) belief. If they already have full context, stop and use a plain summary.
|
|
246
|
+
2. **Read the source material yourself.** The raw report, the measurement logs, the plan, the thread
|
|
247
|
+
you are answering. Do not write an explainer from a summary — the explainer is the place where
|
|
248
|
+
soft numbers get caught, and you cannot catch them at second hand. **If no source exists and the
|
|
249
|
+
request itself is all you have**, that is workable but must be visible: say in §1 that the numbers
|
|
250
|
+
come from the requester, and tag every figure in the document `(measured)`, `(calculated)` — with
|
|
251
|
+
the arithmetic shown — or `(assumed)`. The tags cost a few words and they are what stop your
|
|
252
|
+
inference being quoted back later as someone's measurement.
|
|
253
|
+
3. **Build §8 first.** List every candidate cause, attach its measured effect size, and sort. If you
|
|
254
|
+
cannot rank them, you do not yet understand the system well enough to explain it — go measure, or
|
|
255
|
+
say explicitly which layers are unranked and why.
|
|
256
|
+
4. **Write §2, the vocabulary, second.** Every term you fix here makes the following sections shorter.
|
|
257
|
+
5. **Copy `assets/skeleton.md` and fill it top to bottom**, deleting the slots that have nothing to
|
|
258
|
+
say (see "When a slot does not fit"). Keep evidence beside each claim rather than in an appendix.
|
|
259
|
+
6. **Rewrite in STE last, as its own pass.** Split long sentences, hunt synonyms for defined terms,
|
|
260
|
+
convert passive to active, attach units to bare numbers. It is a mechanical pass; do it
|
|
261
|
+
mechanically. `references/language.md` has the rewrite table.
|
|
262
|
+
7. **Run the exit gate.**
|
|
263
|
+
|
|
264
|
+
## The exit gate
|
|
265
|
+
|
|
266
|
+
Ask all four before shipping. Each one has caught a real defect in this document type.
|
|
267
|
+
|
|
268
|
+
- **"Can the reader disagree with me on the merits?"** If every conclusion rests on "we measured it"
|
|
269
|
+
with no visible number or method, they can only agree or distrust. Neither is useful.
|
|
270
|
+
- **"Does §8 rank the layer the reader cares about?"** If their favoured fix is missing from the
|
|
271
|
+
ranked diagram, the document dodges instead of answering.
|
|
272
|
+
- **"Would the five-line summary survive alone?"** Someone will forward only that. Read it cold.
|
|
273
|
+
- **"What did I state without a basis?"** Every number needs a unit, a sample size or a measurement
|
|
274
|
+
date, and a way to reproduce it. Bare numbers are where explainers rot first — they get quoted
|
|
275
|
+
onward, and six weeks later nobody knows what they measured.
|
|
276
|
+
- **"Which section is here only because the template listed it?"** Cut it. Padding reads as padding,
|
|
277
|
+
and it spends the attention you need for §8.
|
|
278
|
+
|
|
279
|
+
If the repository has a document-frontmatter convention, apply it (`type: analysis` fits this
|
|
280
|
+
document kind). Then add the document to the doc index if one exists.
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
tech-explainer skeleton. Copy, fill, delete what has nothing to say.
|
|
3
|
+
Slots marked [KEEP] are what make this an explainer rather than a summary.
|
|
4
|
+
Rename any section to fit the domain — keep the order.
|
|
5
|
+
If the repo requires document frontmatter, add it above the title (type: analysis).
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
# \<The subject\> — a plain explainer
|
|
9
|
+
|
|
10
|
+
<!-- No name given? Use the role — "the engineering manager" — and leave this placeholder visible.
|
|
11
|
+
Never invent a name. -->
|
|
12
|
+
**Audience:** \<name or role of the reader\>, and anyone who did not do the \<testing / investigation / migration\>.
|
|
13
|
+
**Written in Simplified Technical English.** Short sentences. One idea per sentence.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Why this document exists [KEEP]
|
|
18
|
+
|
|
19
|
+
This document explains \<n\> things:
|
|
20
|
+
|
|
21
|
+
1. \<question 1\>
|
|
22
|
+
2. \<question 2\>
|
|
23
|
+
3. \<question 3\>
|
|
24
|
+
|
|
25
|
+
Section \<n\> answers the \<the reader's own question\> directly.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Words used in this document [KEEP]
|
|
30
|
+
|
|
31
|
+
Use these words with one meaning only.
|
|
32
|
+
|
|
33
|
+
| Word | Meaning |
|
|
34
|
+
| ---------- | ------------------------------------------------ |
|
|
35
|
+
| **\<term\>** | \<one meaning, in plain words, no new jargon\> |
|
|
36
|
+
|
|
37
|
+
<!-- 8-12 rows. Highest value: terms two people in the thread have used differently. -->
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 3. What we are building
|
|
42
|
+
|
|
43
|
+
\<Two or three sentences. What the system does and why it exists.\>
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart LR
|
|
47
|
+
A[("Source")] --> B["Work<br/>size"] --> C[("Result")]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
\<The physical facts: hardware, operating system, versions, scale.\>
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 4. The goal, in numbers [KEEP]
|
|
55
|
+
|
|
56
|
+
<!-- No agreed target? Retitle "The result, in numbers" and make the missing target the finding. -->
|
|
57
|
+
|
|
58
|
+
\<One sentence stating the target.\>
|
|
59
|
+
|
|
60
|
+
| Item | Value |
|
|
61
|
+
| ----------------------- | ----------- |
|
|
62
|
+
| \<basis\> | \<value\> |
|
|
63
|
+
| **\<what we need\>** | **\<n\>** |
|
|
64
|
+
| **\<what we measure\>** | **\<n\>** |
|
|
65
|
+
| **Gap** | **\<n x\>** |
|
|
66
|
+
|
|
67
|
+
<!-- If an earlier target has changed, say so and say why. -->
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 5. The layers — and \<the reader's specific question\>
|
|
72
|
+
|
|
73
|
+
**Short answer: \<the answer, in one or two sentences\>.**
|
|
74
|
+
|
|
75
|
+
\<Then earn it.\>
|
|
76
|
+
|
|
77
|
+
```mermaid
|
|
78
|
+
flowchart TB
|
|
79
|
+
subgraph l1["LAYER 1 — <name> (<what this layer is for>)"]
|
|
80
|
+
direction LR
|
|
81
|
+
A["<b>Thing</b><br/>status"]
|
|
82
|
+
end
|
|
83
|
+
subgraph l2["LAYER 2 — <name> (<what this layer is for>)"]
|
|
84
|
+
B["<b>Thing</b>"]
|
|
85
|
+
end
|
|
86
|
+
A --> B
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
\<One line: which layer is easy to change, which layer decides the outcome.\>
|
|
90
|
+
|
|
91
|
+
### \<The options compared\>
|
|
92
|
+
|
|
93
|
+
| Option | What it adds | What is inside | Do we use it? |
|
|
94
|
+
| ------ | ------------ | -------------- | ------------- |
|
|
95
|
+
| | | | |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 6. Why the work took so long — what we withdrew
|
|
100
|
+
|
|
101
|
+
<!-- Nothing withdrawn? Do NOT invent a retraction. Substitute "What this rests on": the assumptions
|
|
102
|
+
the argument depends on, each with what would falsify it. Same function — it shows the reader
|
|
103
|
+
where to attack. -->
|
|
104
|
+
|
|
105
|
+
\<n\> wrong results were found. **Every one was found by comparing a number against a second,
|
|
106
|
+
independent number.**
|
|
107
|
+
|
|
108
|
+
```mermaid
|
|
109
|
+
flowchart LR
|
|
110
|
+
A["Change one thing"] --> B["Measure it"]
|
|
111
|
+
B --> C{"Does it agree with a<br/>second, independent number?"}
|
|
112
|
+
C -->|"No"| D["The instrument is wrong.<br/>Repair the test."]
|
|
113
|
+
D --> B
|
|
114
|
+
C -->|"Yes"| E["Record the result"]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- We reported \<claim\>. **This was wrong.** \<Cause, and what caught it.\>
|
|
118
|
+
- We reported \<claim\>. **This was wrong.** \<Cause, and what caught it.\>
|
|
119
|
+
|
|
120
|
+
**Lesson:** \<one line\>.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 7. Where the \<time / cost / data\> goes
|
|
125
|
+
|
|
126
|
+
We measured \<n\> samples.
|
|
127
|
+
|
|
128
|
+
```mermaid
|
|
129
|
+
pie showData
|
|
130
|
+
title <what is being divided>
|
|
131
|
+
"<slice A>" : 0
|
|
132
|
+
"<slice B>" : 0
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
\<The consequence: what this means for where effort should go.\>
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 8. What limits the result — \<n\> layers [KEEP — the most important diagram]
|
|
140
|
+
|
|
141
|
+
This is the most important diagram in this document. The layers are in order of size of effect.
|
|
142
|
+
|
|
143
|
+
```mermaid
|
|
144
|
+
flowchart TB
|
|
145
|
+
subgraph L1["LAYER 1 — <cause> — LARGEST EFFECT — <magnitude>"]
|
|
146
|
+
M["<b>The claim.</b><br/>The comparison.<br/>The consequence."]
|
|
147
|
+
end
|
|
148
|
+
subgraph L2["LAYER 2 — <cause> — MEDIUM EFFECT — <magnitude>"]
|
|
149
|
+
E["<b>The claim.</b><br/>The evidence."]
|
|
150
|
+
end
|
|
151
|
+
subgraph L3["LAYER 3 — <cause> — SMALL EFFECT — <magnitude>"]
|
|
152
|
+
W["<b>The claim.</b><br/>The evidence."]
|
|
153
|
+
end
|
|
154
|
+
subgraph L4["LAYER 4 — <cause> — NO EFFECT"]
|
|
155
|
+
O["<b>The claim.</b><br/>The evidence."]
|
|
156
|
+
end
|
|
157
|
+
L1 --> L2 --> L3 --> L4
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Read the diagram this way.** If we change \<the small layer\>, we gain \<small\>. If we change
|
|
161
|
+
\<the big layer\>, we gain \<big\>. \<Layer n\> is where the work must go.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 9. \<n\> recommendations — what we checked
|
|
166
|
+
|
|
167
|
+
<!-- No formal list of recommendations? The reader still holds a belief. State it as they would
|
|
168
|
+
state it, then check it: claim / verdict / evidence. -->
|
|
169
|
+
|
|
170
|
+
We checked all \<n\> against our own measurements and against public evidence.
|
|
171
|
+
|
|
172
|
+
| # | Recommendation | Result | Evidence |
|
|
173
|
+
| --- | -------------- | ------ | -------- |
|
|
174
|
+
| 1 | | | |
|
|
175
|
+
|
|
176
|
+
### Where the advice is right
|
|
177
|
+
|
|
178
|
+
\<Steelman. Concede what is genuinely true, with the arithmetic.\>
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
<quantity> <value>
|
|
182
|
+
<quantity> <value>
|
|
183
|
+
Theoretical maximum <value>
|
|
184
|
+
Measured <value> (<percent>)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Why \<the alarming number\> is not as bad as it looks
|
|
188
|
+
|
|
189
|
+
| System | Result |
|
|
190
|
+
| ----------------------- | ------ |
|
|
191
|
+
| \<independent source\> | |
|
|
192
|
+
| **\<ours\>** | |
|
|
193
|
+
|
|
194
|
+
**Conclusion: \<one sentence\>.**
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 10. What \<the constraint\> costs us, and what it gives us
|
|
199
|
+
|
|
200
|
+
### The cost
|
|
201
|
+
|
|
202
|
+
| Option | Supported? | Note |
|
|
203
|
+
| ------ | ---------- | ---- |
|
|
204
|
+
| | | |
|
|
205
|
+
|
|
206
|
+
### What it does not cost us
|
|
207
|
+
|
|
208
|
+
\<The belief people hold, checked. State plainly whether the evidence supports it.\>
|
|
209
|
+
|
|
210
|
+
### What it gives us
|
|
211
|
+
|
|
212
|
+
\<The genuine benefit. Every constraint has one; naming it proves you are not just complaining.\>
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## 11. What we do next [KEEP]
|
|
217
|
+
|
|
218
|
+
```mermaid
|
|
219
|
+
flowchart TB
|
|
220
|
+
A["<b>Step 1 — <name></b><br/>What. How it is measured."] --> B
|
|
221
|
+
B["<b>Step 2 — <name></b><br/>What. What counts as passing."] --> C
|
|
222
|
+
C["<b>Step 3 — <name></b><br/>What."]
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Step \<n\> is the most important step.** \<Why, with the number.\>
|
|
226
|
+
|
|
227
|
+
We also have \<n\> measurement gaps to close:
|
|
228
|
+
|
|
229
|
+
1. \<What we never measured directly, and how long the direct check would take.\>
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 12. Questions for \<the reader\>
|
|
234
|
+
|
|
235
|
+
These would help us. \<Reader\> has more experience with \<the area\>.
|
|
236
|
+
|
|
237
|
+
1. **\<Question?\>** \<Why the answer would change what we do.\>
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 13. Summary in five lines [KEEP]
|
|
242
|
+
|
|
243
|
+
1. \<target vs measured vs gap\>
|
|
244
|
+
2. \<the main cause\>
|
|
245
|
+
3. \<the thing the reader thought was the cause, with its measured size\>
|
|
246
|
+
4. \<the constraint, and what it really costs\>
|
|
247
|
+
5. \<the next step\>
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Related documents
|
|
252
|
+
|
|
253
|
+
| Document | What it holds |
|
|
254
|
+
| -------- | ------------- |
|
|
255
|
+
| [`path`](path) | \<the detail this explainer deliberately leaves out\> |
|