@nurix/etna 0.18.0 → 0.18.1

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 (100) hide show
  1. package/README.md +6 -5
  2. package/data/harness-index.json +1 -1
  3. package/data/harnesses/code/CLAUDE.md +7 -18
  4. package/data/harnesses/code/agents/brainstorm.md +3 -3
  5. package/data/harnesses/code/agents/change-review.md +13 -10
  6. package/data/harnesses/code/agents/harness-manager.md +15 -15
  7. package/data/harnesses/code/agents/maintenance.md +10 -3
  8. package/data/harnesses/code/agents/performance-review.md +5 -0
  9. package/data/harnesses/code/harness.json +1 -1
  10. package/data/harnesses/code/rules/general.md +40 -36
  11. package/data/harnesses/code/skills/boundary/SKILL.md +15 -42
  12. package/data/harnesses/code/skills/boundary/references/boundary-taxonomy.md +366 -304
  13. package/data/harnesses/code/skills/brainstorm/README.md +9 -9
  14. package/data/harnesses/code/skills/brainstorm/SKILL.md +15 -15
  15. package/data/harnesses/code/skills/brainstorm/harvest.md +2 -2
  16. package/data/harnesses/code/skills/brainstorm/templates/backlog.md +2 -2
  17. package/data/harnesses/code/skills/brainstorm/templates/build.md +6 -6
  18. package/data/harnesses/code/skills/brainstorm/templates/decisions.md +3 -3
  19. package/data/harnesses/code/skills/brainstorm/templates/doctrine.md +2 -2
  20. package/data/harnesses/code/skills/brainstorm/templates/domain-model.md +2 -2
  21. package/data/harnesses/code/skills/brainstorm/templates/glossary.md +2 -1
  22. package/data/harnesses/code/skills/brainstorm/templates/non-goals.md +3 -7
  23. package/data/harnesses/code/skills/brainstorm/templates/questions.md +6 -5
  24. package/data/harnesses/code/skills/brainstorm/templates/state.md +1 -8
  25. package/data/harnesses/code/skills/brainstorm/templates/tech.md +6 -6
  26. package/data/harnesses/code/skills/brainstorm/templates/thesis.md +2 -2
  27. package/data/harnesses/code/skills/distiller/SKILL.md +48 -177
  28. package/data/harnesses/code/skills/distiller/references/docs-mode.md +116 -343
  29. package/data/harnesses/code/skills/distiller/references/method.md +37 -109
  30. package/data/harnesses/code/skills/documentation/SKILL.md +9 -6
  31. package/data/harnesses/code/skills/documentation/references/examples.md +30 -61
  32. package/data/harnesses/code/skills/documentation/references/style-guide.md +59 -62
  33. package/data/harnesses/code/skills/documentation/references/templates.md +25 -33
  34. package/data/harnesses/code/skills/workflow-mapper/SKILL.md +32 -11
  35. package/data/harnesses/code/skills/workflow-mapper/references/patterns.md +1 -1
  36. package/data/harnesses/code-fable/CLAUDE.md +12 -23
  37. package/data/harnesses/code-fable/agents/brainstorm.md +3 -3
  38. package/data/harnesses/code-fable/agents/change-review.md +13 -10
  39. package/data/harnesses/code-fable/agents/harness-manager.md +15 -15
  40. package/data/harnesses/code-fable/agents/maintenance.md +10 -3
  41. package/data/harnesses/code-fable/agents/performance-review.md +5 -0
  42. package/data/harnesses/code-fable/harness.json +1 -1
  43. package/data/harnesses/code-fable/rules/general.md +40 -36
  44. package/data/harnesses/code-fable/skills/boundary/SKILL.md +15 -42
  45. package/data/harnesses/code-fable/skills/boundary/references/boundary-taxonomy.md +366 -304
  46. package/data/harnesses/code-fable/skills/brainstorm/README.md +9 -9
  47. package/data/harnesses/code-fable/skills/brainstorm/SKILL.md +15 -15
  48. package/data/harnesses/code-fable/skills/brainstorm/harvest.md +2 -2
  49. package/data/harnesses/code-fable/skills/brainstorm/templates/backlog.md +2 -2
  50. package/data/harnesses/code-fable/skills/brainstorm/templates/build.md +6 -6
  51. package/data/harnesses/code-fable/skills/brainstorm/templates/decisions.md +3 -3
  52. package/data/harnesses/code-fable/skills/brainstorm/templates/doctrine.md +2 -2
  53. package/data/harnesses/code-fable/skills/brainstorm/templates/domain-model.md +2 -2
  54. package/data/harnesses/code-fable/skills/brainstorm/templates/glossary.md +2 -1
  55. package/data/harnesses/code-fable/skills/brainstorm/templates/non-goals.md +3 -7
  56. package/data/harnesses/code-fable/skills/brainstorm/templates/questions.md +6 -5
  57. package/data/harnesses/code-fable/skills/brainstorm/templates/state.md +1 -8
  58. package/data/harnesses/code-fable/skills/brainstorm/templates/tech.md +6 -6
  59. package/data/harnesses/code-fable/skills/brainstorm/templates/thesis.md +2 -2
  60. package/data/harnesses/code-fable/skills/distiller/SKILL.md +48 -177
  61. package/data/harnesses/code-fable/skills/distiller/references/docs-mode.md +116 -343
  62. package/data/harnesses/code-fable/skills/distiller/references/method.md +37 -109
  63. package/data/harnesses/code-fable/skills/documentation/SKILL.md +9 -6
  64. package/data/harnesses/code-fable/skills/documentation/references/examples.md +30 -61
  65. package/data/harnesses/code-fable/skills/documentation/references/style-guide.md +59 -62
  66. package/data/harnesses/code-fable/skills/documentation/references/templates.md +25 -33
  67. package/data/harnesses/code-fable/skills/workflow-mapper/SKILL.md +32 -11
  68. package/data/harnesses/code-fable/skills/workflow-mapper/references/patterns.md +1 -1
  69. package/data/harnesses/discover/CLAUDE.md +41 -109
  70. package/data/harnesses/discover/agents/api.md +11 -28
  71. package/data/harnesses/discover/agents/codebase.md +12 -30
  72. package/data/harnesses/discover/agents/community.md +9 -21
  73. package/data/harnesses/discover/agents/deployed-client-bundle.md +16 -67
  74. package/data/harnesses/discover/agents/distribution-artifacts.md +21 -59
  75. package/data/harnesses/discover/agents/docs.md +11 -20
  76. package/data/harnesses/discover/agents/infra-backend-fingerprint.md +28 -68
  77. package/data/harnesses/discover/agents/packages.md +12 -28
  78. package/data/harnesses/discover/agents/session.md +18 -50
  79. package/data/harnesses/discover/agents/website.md +9 -19
  80. package/data/harnesses/discover/agents/wire-capture.md +22 -72
  81. package/data/harnesses/discover/harness.json +1 -1
  82. package/data/harnesses/discover/rules/discovery.md +73 -182
  83. package/data/harnesses/discover/rules/evaluation.md +90 -98
  84. package/data/harnesses/discover/rules/ingestion.md +123 -322
  85. package/data/harnesses/discover/rules/self-correction.md +67 -92
  86. package/data/harnesses/discover/rules/tradecraft.md +201 -172
  87. package/data/harnesses/hr/CLAUDE.md +21 -51
  88. package/data/harnesses/hr/harness.json +1 -1
  89. package/data/harnesses/hr/skills/interview-eval/SKILL.md +23 -11
  90. package/data/harnesses/hr/skills/interview-eval/TEMPLATE.md +49 -29
  91. package/data/harnesses/hr/skills/interview-eval/rubric.md +30 -30
  92. package/data/harnesses/kb-agi/CLAUDE.md +8 -8
  93. package/data/harnesses/kb-agi/agents/kb-agi-init.md +31 -22
  94. package/data/harnesses/kb-agi/agents/kb-catch-stale.md +1 -1
  95. package/data/harnesses/kb-agi/agents/kb-find-gaps.md +1 -1
  96. package/data/harnesses/kb-agi/agents/kb-fix-links.md +1 -1
  97. package/data/harnesses/kb-agi/agents/kb-refresh-summaries.md +2 -2
  98. package/data/harnesses/kb-agi/agents/kb-sync-metadata.md +2 -2
  99. package/data/harnesses/kb-agi/harness.json +1 -1
  100. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  # brainstorm
2
2
 
3
- A Claude Code skill that is a **thinking partner for designing software** — not a form to fill in. It runs one constant loop (distill → abstract → sync → record) over a conversation, files the thinking into a small set of substance-first pillars, and treats *coherence* as a measurable target rather than a vibe.
3
+ A Claude Code skill that is a **thinking partner for designing software** — not a form to fill in. It runs one constant loop (distill → abstract → sync → record) over a conversation, files the thinking into a small set of substance-first pillars, and treats _coherence_ as a measurable target rather than a vibe.
4
4
 
5
5
  The point of v2 is a single inversion over v1: **the conversation is the work; the artifacts serve it.** v1 had grown into elaborate bookkeeping (a tentative/committed decision state machine, background cascade locks and queues, a 10-pillar eager bootstrap, an unconditional greenfield doctrine) wrapped around thinking that never had to happen. v2 deletes that machinery and keeps the loop.
6
6
 
@@ -30,7 +30,7 @@ Two subcommands, nothing else. The skill never auto-invokes on natural language.
30
30
 
31
31
  ### The entry gate
32
32
 
33
- A session needs substance before it opens. `start` asks for a **basis**: a reference document, or a one-shot brain dump of the whole idea. If the user drip-feeds small action items (a bug fix, a single button), the skill says it's the wrong tool and **does not open** unless overridden. The basis *is* the first dump — the skill distills it into the initial thesis and questions, so the first questions come from the user's own material, never from an empty template.
33
+ A session needs substance before it opens. `start` asks for a **basis**: a reference document, or a one-shot brain dump of the whole idea. If the user drip-feeds small action items (a bug fix, a single button), the skill says it's the wrong tool and **does not open** unless overridden. The basis _is_ the first dump — the skill distills it into the initial thesis and questions, so the first questions come from the user's own material, never from an empty template.
34
34
 
35
35
  ### Intake frame
36
36
 
@@ -40,18 +40,18 @@ After distilling the basis, one `AskUserQuestion` batch sets three dials:
40
40
  - **Build mode** (greenfield / brownfield / hybrid) — lands in `build.md`; opens or closes the execution sections and sets the writing posture.
41
41
  - **Mode** — where the idea lives right now (see below).
42
42
 
43
- Then the skill proposes an **aspect map** — the thinking dimensions for *this* idea — which the user edits. The map drives the sync's coverage audit.
43
+ Then the skill proposes an **aspect map** — the thinking dimensions for _this_ idea — which the user edits. The map drives the sync's coverage audit.
44
44
 
45
45
  ### Modes (who drives)
46
46
 
47
47
  | Mode | Driver | When | Behavior |
48
- |---|---|---|---|
48
+ | --- | --- | --- | --- |
49
49
  | **dump** | user | idea is in their head | No questions mid-stream. Distill live, reflect back shape + contradictions + implications. |
50
50
  | **interview** | skill | idea is fuzzy | Question batches of 2–3, one aspect at a time, each answer distilled immediately. |
51
51
  | **probe** | skill | idea is drafted | Adversarial pass — flaws, edge cases, conflicts. Each finding becomes a question. |
52
52
  | **converge** | shared | closing | Burn down open questions into decisions or explicit parks; ends with a mandatory sync. |
53
53
 
54
- Mode switches on an explicit user word. On a strong signal the skill *offers* a switch in one line; it never seizes it.
54
+ Mode switches on an explicit user word. On a strong signal the skill _offers_ a switch in one line; it never seizes it.
55
55
 
56
56
  ---
57
57
 
@@ -61,7 +61,7 @@ Mode switches on an explicit user word. On a strong signal the skill *offers* a
61
61
  coherent ⇔ open_questions == 0 ∧ last sync ran after the last pillar write
62
62
  ```
63
63
 
64
- `questions.md` is the **single convergence currency**: flaws, gaps, contradictions, and uncovered aspects all funnel into it, whoever raised them. Convergence is one number going to zero. Zero means *"audited against the four sources and clean,"* never *"nothing came to mind"* — which is why the sync agent's audit contract is mandatory.
64
+ `questions.md` is the **single convergence currency**: flaws, gaps, contradictions, and uncovered aspects all funnel into it, whoever raised them. Convergence is one number going to zero. Zero means _"audited against the four sources and clean,"_ never _"nothing came to mind"_ — which is why the sync agent's audit contract is mandatory.
65
65
 
66
66
  ---
67
67
 
@@ -83,7 +83,7 @@ It applies **scribe-calls** (edits that don't change the design) directly and no
83
83
  Always present: `thesis.md`, `questions.md`, `decisions.md`, `build.md`. Materialized at medium+ complexity: `domain-model.md`, `tech.md`. Lazy (materialize on first real content at any complexity): `doctrine`, `glossary`, `non-goals`, `backlog`, `rejected`, `references`, `milestones`.
84
84
 
85
85
  | File | Role |
86
- |---|---|
86
+ | --- | --- |
87
87
  | `thesis.md` | Running narrative of what we're designing + the aspect map. |
88
88
  | `questions.md` | Single convergence currency — every unresolved design call. |
89
89
  | `decisions.md` | Resolved calls with **Why** + **How to apply**. Append-only, no state machine. |
@@ -92,7 +92,7 @@ Always present: `thesis.md`, `questions.md`, `decisions.md`, `build.md`. Materia
92
92
  | `tech.md` | Stack choices, seeded from harness rules; deviations recorded with whys. |
93
93
  | `doctrine` / `glossary` / `non-goals` / `backlog` / `rejected` / `references` / `milestones` | As their templates describe. |
94
94
 
95
- The complexity dial sets *defaults*, not a cage — any lazy pillar materializes the moment the conversation produces content for it.
95
+ The complexity dial sets _defaults_, not a cage — any lazy pillar materializes the moment the conversation produces content for it.
96
96
 
97
97
  ---
98
98
 
@@ -110,7 +110,7 @@ v1 applied a present-tense "greenfield" writing doctrine unconditionally — whi
110
110
 
111
111
  ## Harvest (optional)
112
112
 
113
- By default the session folder *is* the product — self-contained, resumed by the next `/brainstorm start`. When the repo is v9-harnessed (`docs/architecture/` + `docs/modules/` exist) the skill *offers* the harvest adapter at `stop`, which routes pillars into the doc tree (ADRs, module pillars, plans, the `boundary` skill). See `harvest.md`. The adapter is never assumed.
113
+ By default the session folder _is_ the product — self-contained, resumed by the next `/brainstorm start`. When the repo is v9-harnessed (`docs/architecture/` + `docs/modules/` exist) the skill _offers_ the harvest adapter at `stop`, which routes pillars into the doc tree (ADRs, module pillars, plans, the `boundary` skill). See `harvest.md`. The adapter is never assumed.
114
114
 
115
115
  ---
116
116
 
@@ -10,23 +10,23 @@ Think with the user, then file — never the reverse. The artifacts exist to ser
10
10
 
11
11
  ## The loop — every turn, every mode
12
12
 
13
- 1. **Distill.** Fold what the user just said into the pillars, in *their* framing, during the same turn.
13
+ 1. **Distill.** Fold what the user just said into the pillars, in _their_ framing, during the same turn.
14
14
  2. **Abstract.** Name the latent structure they implied but didn't state — entities and relationships ("an account has many leads" → `domain-model.md`), invariants, principles, terms. Offer at most one abstraction per exchange; it's a contribution, not a lecture.
15
15
  3. **Sync.** Keep the pillars consistent with each other and with the basis (see **The sync agent**).
16
16
  4. **Record.** Writes happen in the turn that produced the information — never accumulated for a session-end dump.
17
17
 
18
- Modes change *who drives* and *how much gets asked*. The loop never stops.
18
+ Modes change _who drives_ and _how much gets asked_. The loop never stops.
19
19
 
20
20
  ## Modes
21
21
 
22
22
  | Mode | Who drives | When | Behavior |
23
- |---|---|---|---|
23
+ | --- | --- | --- | --- |
24
24
  | **dump** | user | idea is in their head | No questions mid-stream. Distill live. After each chunk, reflect back: the shape, contradictions, implications. Distillation + reconciliation **is** active listening — never sit silent. |
25
25
  | **interview** | skill | idea is fuzzy | Question batches of 2–3 via `AskUserQuestion`, scoped to **one aspect at a time**. Distill each answer immediately. Questions derive from the basis and the pillars — never from a template inventory. |
26
26
  | **probe** | skill | idea is drafted, needs stress | Challenge it: flaws, edge cases, conflicts with `tech.md` / `doctrine.md` / the domain model. Each finding becomes a question (`Raised by: probe`) — file it and move on; don't demand resolution. |
27
27
  | **converge** | shared | closing in | Burn down open questions. `AskUserQuestion` allowed for picks. Each resolution → a decision with **Why** + **How to apply**, or an explicit park (backlog / non-goals). Ends with a mandatory fresh sync. |
28
28
 
29
- **Switching** is an explicit user word ("let me dump", "ask me questions", "poke holes", "let's converge"). On a strong signal — the user starts monologuing mid-interview, or answers every probe with "I haven't thought about it" — **offer** the switch in one line. Never seize it. Announce every shift in plain English: *"Switching to probe — I'll push on the sync-layer design. Say 'park' anytime."*
29
+ **Switching** is an explicit user word ("let me dump", "ask me questions", "poke holes", "let's converge"). On a strong signal — the user starts monologuing mid-interview, or answers every probe with "I haven't thought about it" — **offer** the switch in one line. Never seize it. Announce every shift in plain English: _"Switching to probe — I'll push on the sync-layer design. Say 'park' anytime."_
30
30
 
31
31
  ## `start`
32
32
 
@@ -40,13 +40,13 @@ A session needs substance before it opens. Ask for a **basis**: a reference docu
40
40
 
41
41
  ### 2. Read the basis, propose the frame
42
42
 
43
- Distill the basis *first* — this seeds `thesis.md` and the initial questions. Then one `AskUserQuestion` batch:
43
+ Distill the basis _first_ — this seeds `thesis.md` and the initial questions. Then one `AskUserQuestion` batch:
44
44
 
45
45
  - **Complexity** — low / medium / high. The skill proposes from the basis; the user confirms. This sets the default pillar surface (see **Pillars**) and ceremony depth.
46
46
  - **Build mode** — "Is this greenfield, or are we changing something that exists?" (greenfield / brownfield / hybrid). The answer lands in `build.md` and opens or closes its execution sections — migration strategy and gotchas are brainstorm-phase concerns; surfacing them in plan mode is too late.
47
47
  - **Mode** — "Where is this idea right now — fully in your head (dump it), half-formed (I'll interview), or drafted and needing stress (I'll probe)?"
48
48
 
49
- Then propose the **aspect map**: the thinking dimensions for *this specific idea* (e.g., for a product: users/jobs, domain model, architecture, tech, risks; for a small tool: behavior, interface, failure modes). Derive it from the basis — there is no fixed list. The user edits it; write it into `thesis.md`. The map is the coverage source for the sync audit.
49
+ Then propose the **aspect map**: the thinking dimensions for _this specific idea_ (e.g., for a product: users/jobs, domain model, architecture, tech, risks; for a small tool: behavior, interface, failure modes). Derive it from the basis — there is no fixed list. The user edits it; write it into `thesis.md`. The map is the coverage source for the sync audit.
50
50
 
51
51
  ### 3. Bootstrap
52
52
 
@@ -67,7 +67,7 @@ Initial questions come from the basis distillation **only** — contradictions i
67
67
  ## Pillars — substance first, lazy by default
68
68
 
69
69
  | Pillar | Holds | Exists |
70
- |---|---|---|
70
+ | --- | --- | --- |
71
71
  | `thesis.md` | What we're designing — running narrative, kept current + the aspect map | always |
72
72
  | `questions.md` | The **single convergence currency** — every unresolved design call, whoever raised it | always |
73
73
  | `decisions.md` | Resolved calls with **Why** + **How to apply** | always |
@@ -76,13 +76,13 @@ Initial questions come from the basis distillation **only** — contradictions i
76
76
  | `tech.md` | Stack choices, seeded from harness rules (e.g. `.claude/rules/general.md`) at bootstrap; deviations recorded with whys | medium+ |
77
77
  | `doctrine` / `glossary` / `non-goals` / `backlog` / `rejected` / `references` / `milestones` | as their templates describe | **lazy** — materialize on first real content, any complexity |
78
78
 
79
- The complexity dial sets *defaults*, not a cage: any lazy pillar materializes mid-session the moment the conversation produces content for it, and at **low** complexity the always-four may even live as sections of a single file if the user prefers.
79
+ The complexity dial sets _defaults_, not a cage: any lazy pillar materializes mid-session the moment the conversation produces content for it, and at **low** complexity the always-four may even live as sections of a single file if the user prefers.
80
80
 
81
81
  **Question entries** (`questions.md`): self-contained full prose in the user's framing, plus —
82
82
 
83
83
  - **Raised by.** user | sync | probe
84
84
  - **Closes when.** What resolution looks like — a pick, a confirmed fact, an accepted risk. Every question must be closeable.
85
- - **Options / Lean / Claude's take** — optional; *Claude's take* remains opt-in (only when the user asks for a recommendation).
85
+ - **Options / Lean / Claude's take** — optional; _Claude's take_ remains opt-in (only when the user asks for a recommendation).
86
86
 
87
87
  **Decision entries** (`decisions.md`): append-only; **Decision**, **Why**, **How to apply**, **Resolves Q-N**. There is no tentative/committed state machine. Reversing a decision = append a new decision that names what it reverses, mark the old entry "Reversed by D-M", and let the next sync handle the ripples.
88
88
 
@@ -101,7 +101,7 @@ The background reconciler that replaces ceremony with consistency. **One sync in
101
101
 
102
102
  **Output:** direct pillar edits for **scribe-calls**, new questions for **design-calls**, and a one-line report.
103
103
 
104
- **The line:** a *scribe-call* is anything whose resolution doesn't change the design — wording, annotations, obvious bookkeeping. Just do it; list it in the report (the user can veto). A *design-call* is anything whose resolution changes the idea — file it as a question (`Raised by: sync`) and move on. **Never** interrupt the conversation to ask "apply now or defer?" — file and continue.
104
+ **The line:** a _scribe-call_ is anything whose resolution doesn't change the design — wording, annotations, obvious bookkeeping. Just do it; list it in the report (the user can veto). A _design-call_ is anything whose resolution changes the idea — file it as a question (`Raised by: sync`) and move on. **Never** interrupt the conversation to ask "apply now or defer?" — file and continue.
105
105
 
106
106
  **The report is the status line.** Deliver it at the next natural turn break:
107
107
 
@@ -115,20 +115,20 @@ There is no separate dashboard, no scheduled checkpoint. This line is the only a
115
115
  coherent ⇔ open_questions == 0 ∧ last sync ran after the last pillar write
116
116
  ```
117
117
 
118
- Zero means *"audited against the four sources and clean"* — never *"nothing came to mind."* Don't declare the idea coherent on any other basis. Distance-to-coherent is always visible in the sync report; the **user** decides when to converge and when to close. The skill never says "let's decide now."
118
+ Zero means _"audited against the four sources and clean"_ — never _"nothing came to mind."_ Don't declare the idea coherent on any other basis. Distance-to-coherent is always visible in the sync report; the **user** decides when to converge and when to close. The skill never says "let's decide now."
119
119
 
120
120
  ## `stop`
121
121
 
122
122
  1. Run a final sync (wait for any in-flight sync first).
123
123
  2. **Coherent** → say so and proceed. **Questions open** → list them plainly (English first, codes in parentheses) and offer per question: resolve now (mini-converge) / park explicitly (backlog or non-goals, with reason) / leave open and stop anyway — the folder keeps full state and resumes exactly where it left off.
124
- 3. **Harvest** — see `harvest.md`. Standalone by default: the session folder *is* the product. If the repo is v9-harnessed (`docs/architecture/` + `docs/modules/` exist), offer the adapter routing; never assume it.
125
- 4. Write `STATE: closed` + one-line reason. Print: *"Run `/brainstorm start` to resume."*
124
+ 3. **Harvest** — see `harvest.md`. Standalone by default: the session folder _is_ the product. If the repo is v9-harnessed (`docs/architecture/` + `docs/modules/` exist), offer the adapter routing; never assume it.
125
+ 4. Write `STATE: closed` + one-line reason. Print: _"Run `/brainstorm start` to resume."_
126
126
 
127
127
  ## Conduct — holds for the whole session
128
128
 
129
- 1. **Speak English; codes live in files.** In conversation, name every pillar item by what it *is* in plain words. Append the code in parentheses only when traceability needs it (*"…can a user change answer depth? (tracked as Q6)"*). Never lead with a bare `Q3`/`D7`. The user is not looking at the files.
129
+ 1. **Speak English; codes live in files.** In conversation, name every pillar item by what it _is_ in plain words. Append the code in parentheses only when traceability needs it (_"…can a user change answer depth? (tracked as Q6)"_). Never lead with a bare `Q3`/`D7`. The user is not looking at the files.
130
130
  2. **No production code outside the session folder.** Illustrative load-bearing snippets are fine inside it (`samples/` or fenced in pillars). If asked for production code: offer a sketch inside the folder, or `/brainstorm stop` first.
131
- 3. **The writing posture comes from `build.md`'s mode.** Greenfield: every pillar describes the system as it *will be*, present tense, as though the chosen design was always the plan — no migration vocabulary, no phantom history (banned list in `templates/build.md`). Brownfield/hybrid: migration vocabulary is legitimate, and `build.md` is its home; other pillars still describe the *target* state.
131
+ 3. **The writing posture comes from `build.md`'s mode.** Greenfield: every pillar describes the system as it _will be_, present tense, as though the chosen design was always the plan — no migration vocabulary, no phantom history (banned list in `templates/build.md`). Brownfield/hybrid: migration vocabulary is legitimate, and `build.md` is its home; other pillars still describe the _target_ state.
132
132
  4. **`AskUserQuestion` appears in exactly three places:** the intake frame batch, interview mode, and converge picks. Everywhere else: prose.
133
133
  5. **Suggested, never seized.** Mode shifts, abstractions, probes — one offer each, accept refusal without re-litigating.
134
134
  6. **Questions are the only convergence currency.** Flaws, gaps, contradictions, uncovered aspects — everything unresolved funnels into `questions.md` or it doesn't exist. Nothing pending may live only in the conversation transcript.
@@ -7,7 +7,7 @@ Harvest is **optional and offered, never assumed**. By default the session folde
7
7
  The harvest is a structured diff between the session pillars and the live docs, routed by scope: module-local findings → `docs/modules/{m}/pillars/`, cross-module + IA/contract changes → `docs/architecture/`, backlog → `docs/history/`.
8
8
 
9
9
  | Session source | Destination |
10
- |---|---|
10
+ | --- | --- |
11
11
  | `thesis.md` narrative | `docs/history/plans/YYYY-MM-DD-{slug}.md` (Status: Draft, `documentation` skill §8 Plan template) |
12
12
  | `domain-model.md` | `docs/architecture/domain-model.md`; if it changes the IA or a cross-cutting contract, note the contract change there — the `boundary` skill will pick it up from source at the next plan check |
13
13
  | Decisions spanning 2+ modules | one ADR per cohesive theme → `docs/architecture/adr/ADR-NNN-{slug}.md`, authored to the **`documentation` skill §10 ADR template** (frontmatter `status:` is the lifecycle source of truth — no body Status line; required sections Decision/Context/Consequences); rejected alternatives → the ADR's **Options Considered** table |
@@ -16,7 +16,7 @@ The harvest is a structured diff between the session pillars and the live docs,
16
16
  | `tech.md` deviations | `docs/architecture/references.md` or the relevant ADR |
17
17
  | `non-goals.md` / `references.md` | `docs/architecture/{non-goals,references}.md` |
18
18
  | `backlog.md` | `docs/history/backlog.md` (P0–P3) |
19
- | Still-open questions | `docs/architecture/open-questions.md`, each with a *Resolution lands in* pointer |
19
+ | Still-open questions | `docs/architecture/open-questions.md`, each with a _Resolution lands in_ pointer |
20
20
  | `build.md` (brownfield/hybrid: migration strategy, gotchas, rollout) | the plan doc in `docs/history/plans/` — execution content is plan content, not architecture |
21
21
 
22
22
  Append a changelog entry at `docs/history/changelog/YYYY-MM-DD-brainstorm-harvest-{slug}.md` listing what was written where.
@@ -3,12 +3,12 @@
3
3
  This file is the **forward-looking list of deferred-but-planned items** — work the team intends to build, but not in the current scope. It complements `non-goals.md` (which holds the scope-creep guards: things we are **not** building) and `rejected.md` (which holds paths we considered and chose against). Use the right pillar:
4
4
 
5
5
  | Pillar | Semantics |
6
- |---|---|
6
+ | --- | --- |
7
7
  | `backlog.md` (this file) | "We **will** build this, just **later**." Deferred to a known future milestone. Roadmap forward. |
8
8
  | `non-goals.md` | "We deliberately are **not** building this." Scope guard. May never be built. |
9
9
  | `rejected.md` | "We considered this path and chose another." Past-tense alternative. |
10
10
 
11
- If you can't tell which file an item belongs in, ask: *"Is the plan to build this eventually?"* If yes → backlog. If no but could change → non-goals. If we already weighed it against an alternative → rejected.
11
+ If you can't tell which file an item belongs in, ask: _"Is the plan to build this eventually?"_ If yes → backlog. If no but could change → non-goals. If we already weighed it against an alternative → rejected.
12
12
 
13
13
  Backlog items carry four load-bearing fields. **Target milestone** names the future bucket (`v1.1`, `M2`, `TBD`); **Why deferred** explains the reason it isn't in the current scope (commonly: scope cut, depends on something else, waiting for user feedback, lower priority than current work); **Scope** sketches what the item actually includes — enough that a future planner can pick it up cold; **Re-evaluate when** is the trigger that promotes it from backlog to active work.
14
14
 
@@ -2,19 +2,19 @@
2
2
 
3
3
  This pillar holds **how the work gets executed** — decided during brainstorming, not deferred to plan mode. Migration constraints and execution gotchas discovered late invalidate designs; surfacing them here, while the design is still fluid, is the point.
4
4
 
5
- At `start` the skill asks: *"Is this greenfield, or are we changing something that exists?"* The answer sets **Mode** below and opens or closes the execution sections. The sync agent treats this file as a contradiction source — a decision that implies migration work with no entry here raises a question.
5
+ At `start` the skill asks: _"Is this greenfield, or are we changing something that exists?"_ The answer sets **Mode** below and opens or closes the execution sections. The sync agent treats this file as a contradiction source — a decision that implies migration work with no entry here raises a question.
6
6
 
7
7
  ## Mode
8
8
 
9
- `greenfield` *(default)* | `brownfield` | `hybrid`
9
+ `greenfield` _(default)_ | `brownfield` | `hybrid`
10
10
 
11
- - **greenfield** — nothing built yet: no production deploys, no users, no legacy code. The execution sections below are closed — mark them *Not applicable (greenfield)*. **Writing posture:** all pillars describe the system as it *will be*, in present tense, as though the chosen design was always the plan. Banned: "replaces" / "supersedes" / "previously" / "formerly" / "no longer" / "originally proposed" / `~~strikethrough~~` / "(resolved)" markers — the reader has no past, so don't reference one. Past tense lives only in `decisions.md`, `rejected.md`, `references.md`, and git history.
12
- - **brownfield** — the idea changes a system that already exists. All sections below are live, and migration vocabulary — "replaces", "currently", "migrate from" — is legitimate and load-bearing **in this file**. Other pillars still describe the *target* state in present tense; the journey from here to there lives here.
11
+ - **greenfield** — nothing built yet: no production deploys, no users, no legacy code. The execution sections below are closed — mark them _Not applicable (greenfield)_. **Writing posture:** all pillars describe the system as it _will be_, in present tense, as though the chosen design was always the plan. Banned: "replaces" / "supersedes" / "previously" / "formerly" / "no longer" / "originally proposed" / `~~strikethrough~~` / "(resolved)" markers — the reader has no past, so don't reference one. Past tense lives only in `decisions.md`, `rejected.md`, `references.md`, and git history.
12
+ - **brownfield** — the idea changes a system that already exists. All sections below are live, and migration vocabulary — "replaces", "currently", "migrate from" — is legitimate and load-bearing **in this file**. Other pillars still describe the _target_ state in present tense; the journey from here to there lives here.
13
13
  - **hybrid** — a new surface attached to a live system (a new module in a shipping product). The sections below apply to the seams only: integration points, shared state, contract changes. The new surface itself follows greenfield posture.
14
14
 
15
15
  ## Current state
16
16
 
17
- *(brownfield/hybrid)* What exists today, as relevant to the change. Link code paths or docs rather than restating them.
17
+ _(brownfield/hybrid)_ What exists today, as relevant to the change. Link code paths or docs rather than restating them.
18
18
 
19
19
  ## Target state
20
20
 
@@ -26,7 +26,7 @@ How we get from current to target: phases, order of operations, coexistence wind
26
26
 
27
27
  ## Gotchas
28
28
 
29
- Execution hazards known *now*, before plan mode — each one a bullet with why it bites:
29
+ Execution hazards known _now_, before plan mode — each one a bullet with why it bites:
30
30
 
31
31
  - [e.g. data backfill must run before the new index exists, or reads 404 during the window]
32
32
  - [e.g. auth cutover can't be phased — sessions are shared, it's all-or-nothing]
@@ -5,7 +5,7 @@ This file is the **append-only ledger of resolved decisions**, with the reasonin
5
5
  Load-bearing fields:
6
6
 
7
7
  - **Decision** — what was decided, in one or two sentences.
8
- - **Why** — the motivation: a constraint, an incident, a deadline, a stakeholder ask. Without the *why*, decisions decay into rules no one understands.
8
+ - **Why** — the motivation: a constraint, an incident, a deadline, a stakeholder ask. Without the _why_, decisions decay into rules no one understands.
9
9
  - **How to apply** — when and where this decision shapes future work. Name the files, layers, or situations where it kicks in.
10
10
 
11
11
  There is no tentative/committed state machine. A decision is a decision the moment it's written; the next sync handles its ripples. **Reversing** a decision = append a new decision that names what it reverses, add a one-line `Reversed by D-M (YYYY-MM-DD)` note to the old entry, and let the sync raise questions for anything downstream.
@@ -24,6 +24,6 @@ This ledger is one of the places where past tense is permitted (with `rejected.m
24
24
 
25
25
  **Resolves.** Q1 (deleted from `questions.md`).
26
26
 
27
- **Alternatives considered.** *(optional — reference `rejected.md` if substantial)*
27
+ **Alternatives considered.** _(optional — reference `rejected.md` if substantial)_
28
28
 
29
- **Reverses.** *(only when this decision reverses an earlier one — name it and say what changed)*
29
+ **Reverses.** _(only when this decision reverses an earlier one — name it and say what changed)_
@@ -2,13 +2,13 @@
2
2
 
3
3
  This file holds **stable principles that pre-answer future questions**. When a new question arises during a brainstorm, check here first — the doctrine may already settle it without a full debate.
4
4
 
5
- Doctrine entries should be **rare and durable**. They are not preferences ("I like Postgres") and not one-off picks ("we picked Temporal for this project"). They are statements that apply across many decisions: *"we never self-host stateful services in M0–M3 because operating burden outweighs cost savings at our scale."* A doctrine that gets revised every other week isn't doctrine — it's a preference in disguise. Demote it to `decisions.md`.
5
+ Doctrine entries should be **rare and durable**. They are not preferences ("I like Postgres") and not one-off picks ("we picked Temporal for this project"). They are statements that apply across many decisions: _"we never self-host stateful services in M0–M3 because operating burden outweighs cost savings at our scale."_ A doctrine that gets revised every other week isn't doctrine — it's a preference in disguise. Demote it to `decisions.md`.
6
6
 
7
7
  Add to doctrine only when a principle has either (a) been validated across multiple decisions in this project or others, or (b) is imposed from outside (compliance, vendor lock-in, team size) and won't change without a major shift. Doctrine pre-empts argument; if you're not confident the principle will hold for the next six months, don't write it here.
8
8
 
9
9
  Each entry carries **Principle** (the one-line statement), **Why** (the reason this is principle, not preference — often a past incident, a hard constraint, or an accepted tradeoff), and **Applies when** (the triggers, so a reader recognizes "ah, this is a doctrine question" rather than re-debating from scratch). An optional **Exceptions** field is allowed but suspicious — if a principle has many exceptions, it's mis-stated.
10
10
 
11
- Examples of real doctrine entries from past projects: *"Temporal IS the trace — no separate APM tool."* — *"No Terraform; deploys are wrangler + GitHub Actions only."* — *"Secrets only via wrangler, never in code or env files."* — *"Buy-not-build for non-core capabilities until paying-customer signal justifies otherwise."*
11
+ Examples of real doctrine entries from past projects: _"Temporal IS the trace — no separate APM tool."_ — _"No Terraform; deploys are wrangler + GitHub Actions only."_ — _"Secrets only via wrangler, never in code or env files."_ — _"Buy-not-build for non-core capabilities until paying-customer signal justifies otherwise."_
12
12
 
13
13
  ---
14
14
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This file holds the **information architecture** of the idea: entities, relationships, cardinalities, and who owns what state. This is where facts like "an account has many leads" land the moment they're said — they are neither principles (`doctrine.md`) nor terms (`glossary.md`), and they must not be lost to the transcript.
4
4
 
5
- The loop's *abstract* step feeds this file: when the user implies structure without naming it, propose the entry here.
5
+ The loop's _abstract_ step feeds this file: when the user implies structure without naming it, propose the entry here.
6
6
 
7
7
  ## Entities
8
8
 
@@ -13,7 +13,7 @@ The loop's *abstract* step feeds this file: when the user implies structure with
13
13
  ## Relationships
14
14
 
15
15
  | From | To | Cardinality | Notes |
16
- |---|---|---|---|
16
+ | --- | --- | --- | --- |
17
17
  | Account | Lead | 1 : N | [e.g. leads cannot transfer between accounts — see D3] |
18
18
 
19
19
  Cardinality changes are design changes — when one shifts, expect the sync to raise questions against routing, storage, and milestones.
@@ -5,6 +5,7 @@ This file collects **terms with project-specific meaning** — words whose defin
5
5
  The glossary exists to prevent the quietest and most expensive kind of design drift: two collaborators using the same word for different things. By the time you notice — usually mid-implementation — the cost of resolving the ambiguity is much higher than the cost of writing the entry that would have prevented it. So when you catch yourself saying "by X I mean…" for the second time, add the entry.
6
6
 
7
7
  Do **not** catalog every term. Add to the glossary only when:
8
+
8
9
  - A term has been used to mean two different things in the same session.
9
10
  - A term's meaning here diverges from the standard industry sense (e.g., `subscriber` meaning a webhook destination rather than a pub/sub consumer).
10
11
  - A short term names a specific concept that would otherwise need re-defining across docs (e.g., a node category name, an internal product term).
@@ -14,6 +15,6 @@ Entries are intentionally terse: one term, one line of meaning. Long explanation
14
15
  ---
15
16
 
16
17
  | Term | Meaning |
17
- |---|---|
18
+ | --- | --- |
18
19
  | (example: `studio`) | the canonical task queue for non-publish work — see `04-runtime.md` |
19
20
  | (example: `subscriber`) | a webhook destination registered against an event kind, distinct from a `webhook` which is the inbound side |
@@ -1,6 +1,6 @@
1
1
  # Non-goals
2
2
 
3
- This file is the **explicit list of things we are not building** in the current scope, with the reason for each. It is the mirror of the scope described in `thesis.md`: where the thesis says "this is what we're building", non-goals say "this looked plausible but is deliberately out". Distinguish it from `backlog.md` (things we *will* build, just later) — a non-goal may never be built.
3
+ This file is the **explicit list of things we are not building** in the current scope, with the reason for each. It is the mirror of the scope described in `thesis.md`: where the thesis says "this is what we're building", non-goals say "this looked plausible but is deliberately out". Distinguish it from `backlog.md` (things we _will_ build, just later) — a non-goal may never be built.
4
4
 
5
5
  Non-goals carry real weight. Every entry here is a constraint that future decisions should respect — a scope-creep guard. The reason field is load-bearing: without it, a non-goal looks like an arbitrary "no" that future-you will second-guess at the first complication. With the reason, future-you knows whether the non-goal still holds when circumstances change.
6
6
 
@@ -10,12 +10,8 @@ At milestone boundaries, scan this file. If a non-goal's re-evaluate trigger has
10
10
 
11
11
  ---
12
12
 
13
- - **No multi-region writes in M0.**
14
- *Reason:* cost > benefit until 3+ paying customers in distinct regions.
15
- *Re-evaluate when:* second paying customer signs in a non-primary region.
13
+ - **No multi-region writes in M0.** _Reason:_ cost > benefit until 3+ paying customers in distinct regions. _Re-evaluate when:_ second paying customer signs in a non-primary region.
16
14
 
17
- - **No mobile app.**
18
- *Reason:* product hypothesis is desktop-first; no validated mobile demand.
19
- *Re-evaluate when:* >20% of dashboard sessions are mobile UA.
15
+ - **No mobile app.** _Reason:_ product hypothesis is desktop-first; no validated mobile demand. _Re-evaluate when:_ >20% of dashboard sessions are mobile UA.
20
16
 
21
17
  - (add more here)
@@ -22,14 +22,15 @@ IDs are `QN`, stable while open, never reused after deletion.
22
22
 
23
23
  **Closes when.** [What resolution looks like — a pick between options, a confirmed fact, an accepted risk.]
24
24
 
25
- **Options.** *(optional — only when named by the user or entering converge)*
25
+ **Options.** _(optional — only when named by the user or entering converge)_
26
+
26
27
  - A. [one line]
27
28
  - B. [one line]
28
29
 
29
- **Lean.** *(optional — the user's lean, never the skill's)*
30
+ **Lean.** _(optional — the user's lean, never the skill's)_
30
31
 
31
- **Claude's take.** *(opt-in only — write only when the user asks for a recommendation on this question; delete if it goes stale)*
32
+ **Claude's take.** _(opt-in only — write only when the user asks for a recommendation on this question; delete if it goes stale)_
32
33
 
33
- **Resolution lands in.** *(optional)* [pillar or doc + section]
34
+ **Resolution lands in.** _(optional)_ [pillar or doc + section]
34
35
 
35
- **Blocks.** *(optional)* [milestone or other Q-numbers]
36
+ **Blocks.** _(optional)_ [milestone or other Q-numbers]
@@ -1,8 +1 @@
1
- STATE: open
2
- MODE: dump
3
- COMPLEXITY: medium
4
- SESSION STARTED: YYYY-MM-DD
5
- SESSION CLOSED:
6
- CURRENT TOPIC: (one line — updated on every topic shift)
7
- LAST SYNC: never
8
- SYNC IN FLIGHT: no
1
+ STATE: open MODE: dump COMPLEXITY: medium SESSION STARTED: YYYY-MM-DD SESSION CLOSED: CURRENT TOPIC: (one line — updated on every topic shift) LAST SYNC: never SYNC IN FLIGHT: no
@@ -2,15 +2,15 @@
2
2
 
3
3
  This file holds the **technology choices** for the idea. It is seeded at bootstrap from the harness's opinionated stack (e.g. `.claude/rules/general.md` recommended-packages table) when one exists — those rows arrive as defaults, not decisions.
4
4
 
5
- Its job afterward is to be a **lens**: when a conversation move conflicts with a row here, the sync (or the skill, in the moment) surfaces it — *"you just proposed local component stores; the stack says Redux Toolkit — deviating or steering back?"* A confirmed deviation gets recorded below with its why; an unconfirmed conflict becomes an open question.
5
+ Its job afterward is to be a **lens**: when a conversation move conflicts with a row here, the sync (or the skill, in the moment) surfaces it — _"you just proposed local component stores; the stack says Redux Toolkit — deviating or steering back?"_ A confirmed deviation gets recorded below with its why; an unconfirmed conflict becomes an open question.
6
6
 
7
7
  ## Stack
8
8
 
9
- | Layer | Choice | Source |
10
- |---|---|---|
11
- | [e.g. UI] | [react ^19] | harness default |
12
- | [e.g. state] | [@reduxjs/toolkit] | harness default |
13
- | [layer] | [choice] | decided this session — D[n] |
9
+ | Layer | Choice | Source |
10
+ | ------------ | ------------------ | --------------------------- |
11
+ | [e.g. UI] | [react ^19] | harness default |
12
+ | [e.g. state] | [@reduxjs/toolkit] | harness default |
13
+ | [layer] | [choice] | decided this session — D[n] |
14
14
 
15
15
  ## Deviations
16
16
 
@@ -1,6 +1,6 @@
1
1
  # Thesis
2
2
 
3
- This file is the **running narrative of what we are designing** — the single place a cold reader (or the next session) goes to understand the idea as it currently stands. It is rewritten freely as the idea evolves; it always describes the *current* shape, never the journey (writing posture per `build.md`'s mode).
3
+ This file is the **running narrative of what we are designing** — the single place a cold reader (or the next session) goes to understand the idea as it currently stands. It is rewritten freely as the idea evolves; it always describes the _current_ shape, never the journey (writing posture per `build.md`'s mode).
4
4
 
5
5
  Keep it prose-first. If a section outgrows this file at high complexity, it may move to a numbered deep-dive doc (`01-foo.md`) at the session root with a one-line pointer left here.
6
6
 
@@ -10,7 +10,7 @@ Keep it prose-first. If a section outgrows this file at high complexity, it may
10
10
 
11
11
  ## Aspect map
12
12
 
13
- The thinking dimensions for *this* idea — proposed by the skill from the basis, edited by the user at `start`. The sync agent audits coverage against this list: an aspect with no content anywhere becomes an open question.
13
+ The thinking dimensions for _this_ idea — proposed by the skill from the basis, edited by the user at `start`. The sync agent audits coverage against this list: an aspect with no content anywhere becomes an open question.
14
14
 
15
15
  - [ ] [aspect — e.g. users & jobs]
16
16
  - [ ] [aspect — e.g. domain model]