@gobing-ai/spur 0.3.40 → 0.3.42

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 (185) hide show
  1. package/.claude-plugin/marketplace.json +15 -0
  2. package/README.md +15 -1
  3. package/config/templates/AGENTS.md +5 -3
  4. package/config/workflows/task-pipeline.yaml +103 -12
  5. package/package.json +15 -12
  6. package/plugins/README.md +655 -0
  7. package/plugins/sp/README.md +621 -0
  8. package/plugins/sp/agents/expert-spur.md +109 -0
  9. package/plugins/sp/agents/super-coder.md +126 -0
  10. package/plugins/sp/agents/super-planner.md +283 -0
  11. package/plugins/sp/agents/super-reviewer.md +154 -0
  12. package/plugins/sp/commands/dev-arch.md +30 -0
  13. package/plugins/sp/commands/dev-brainstorm.md +40 -0
  14. package/plugins/sp/commands/dev-changelog.md +28 -0
  15. package/plugins/sp/commands/dev-daily.md +29 -0
  16. package/plugins/sp/commands/dev-debug.md +29 -0
  17. package/plugins/sp/commands/dev-dogfood.md +33 -0
  18. package/plugins/sp/commands/dev-featurechange.md +130 -0
  19. package/plugins/sp/commands/dev-find-conflict.md +51 -0
  20. package/plugins/sp/commands/dev-find-issue.md +76 -0
  21. package/plugins/sp/commands/dev-find-next.md +60 -0
  22. package/plugins/sp/commands/dev-fixall.md +33 -0
  23. package/plugins/sp/commands/dev-gitmsg.md +28 -0
  24. package/plugins/sp/commands/dev-gtd.md +97 -0
  25. package/plugins/sp/commands/dev-handover.md +26 -0
  26. package/plugins/sp/commands/dev-idea.md +50 -0
  27. package/plugins/sp/commands/dev-next.md +31 -0
  28. package/plugins/sp/commands/dev-parallel.md +30 -0
  29. package/plugins/sp/commands/dev-plan.md +46 -0
  30. package/plugins/sp/commands/dev-refine.md +48 -0
  31. package/plugins/sp/commands/dev-refineall.md +65 -0
  32. package/plugins/sp/commands/dev-refresh.md +32 -0
  33. package/plugins/sp/commands/dev-reverse.md +32 -0
  34. package/plugins/sp/commands/dev-review.md +31 -0
  35. package/plugins/sp/commands/dev-run.md +63 -0
  36. package/plugins/sp/commands/dev-runall.md +80 -0
  37. package/plugins/sp/commands/dev-simplify.md +39 -0
  38. package/plugins/sp/commands/dev-unit.md +29 -0
  39. package/plugins/sp/commands/dev-verify.md +48 -0
  40. package/plugins/sp/commands/dev-verifyall.md +72 -0
  41. package/plugins/sp/commands/dev-wrap.md +30 -0
  42. package/plugins/sp/commands/dev-wrapall.md +33 -0
  43. package/plugins/sp/commands/rule-add.md +18 -0
  44. package/plugins/sp/commands/rule-refine.md +18 -0
  45. package/plugins/sp/commands/rule-scan.md +18 -0
  46. package/plugins/sp/commands/spur-init.md +22 -0
  47. package/plugins/sp/commands/workflow-add.md +18 -0
  48. package/plugins/sp/commands/workflow-refine.md +18 -0
  49. package/plugins/sp/hooks/agent-hint.ts +60 -0
  50. package/plugins/sp/hooks/careful-guard.ts +147 -0
  51. package/plugins/sp/hooks/context-post-tool.ts +325 -0
  52. package/plugins/sp/hooks/context-session-start.ts +182 -0
  53. package/plugins/sp/hooks/context-session-stop.ts +95 -0
  54. package/plugins/sp/hooks/hooks.json +51 -0
  55. package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
  56. package/plugins/sp/hooks/task-write-guard.ts +84 -0
  57. package/plugins/sp/plugin.json +8 -0
  58. package/plugins/sp/scripts/batch-preflight.ts +204 -0
  59. package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
  60. package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
  61. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
  62. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
  63. package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
  64. package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
  65. package/plugins/sp/scripts/task-size-precheck.ts +202 -0
  66. package/plugins/sp/scripts/validate-commands.ts +651 -0
  67. package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
  68. package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
  69. package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
  70. package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
  71. package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
  72. package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
  73. package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
  74. package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
  75. package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
  76. package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
  77. package/plugins/sp/skills/code-implementation/SKILL.md +176 -0
  78. package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
  79. package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
  80. package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
  81. package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
  82. package/plugins/sp/skills/code-review/SKILL.md +112 -0
  83. package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
  84. package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
  85. package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
  86. package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
  87. package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
  88. package/plugins/sp/skills/code-testing/SKILL.md +108 -0
  89. package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
  90. package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
  91. package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
  92. package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
  93. package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
  94. package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
  95. package/plugins/sp/skills/code-verification/SKILL.md +535 -0
  96. package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
  97. package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
  98. package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
  99. package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
  100. package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
  101. package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
  102. package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
  103. package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
  104. package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
  105. package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
  106. package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
  107. package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
  108. package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
  109. package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
  110. package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
  111. package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
  112. package/plugins/sp/skills/functional-review/SKILL.md +364 -0
  113. package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
  114. package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
  115. package/plugins/sp/skills/issue-finding/SKILL.md +424 -0
  116. package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
  117. package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
  118. package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
  119. package/plugins/sp/skills/issue-finding/references/session-formats.md +121 -0
  120. package/plugins/sp/skills/next-feature/SKILL.md +125 -0
  121. package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
  122. package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
  123. package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
  124. package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
  125. package/plugins/sp/skills/next-router/SKILL.md +181 -0
  126. package/plugins/sp/skills/next-router/references/messages.md +90 -0
  127. package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
  128. package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
  129. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +100 -0
  130. package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
  131. package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
  132. package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
  133. package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
  134. package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
  135. package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
  136. package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
  137. package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
  138. package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
  139. package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
  140. package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
  141. package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
  142. package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
  143. package/plugins/sp/skills/spur-cli/references/features.md +234 -0
  144. package/plugins/sp/skills/spur-cli/references/init.md +119 -0
  145. package/plugins/sp/skills/spur-cli/references/message.md +98 -0
  146. package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
  147. package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
  148. package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
  149. package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
  150. package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
  151. package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
  152. package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
  153. package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
  154. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
  155. package/plugins/sp/skills/spur-cli/references/tasks.md +278 -0
  156. package/plugins/sp/skills/spur-cli/references/team.md +133 -0
  157. package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
  158. package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
  159. package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
  160. package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
  161. package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
  162. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
  163. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +664 -0
  164. package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
  165. package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
  166. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
  167. package/plugins/sp/skills/spur-dev/references/execution-batch.md +727 -0
  168. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +350 -0
  169. package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
  170. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
  171. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
  172. package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
  173. package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
  174. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +88 -0
  175. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
  176. package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
  177. package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
  178. package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
  179. package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
  180. package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
  181. package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
  182. package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
  183. package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
  184. package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
  185. package/spur.js +6093 -5180
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: product-planning
3
+ description: Product-management judgment for the sp planning path: intake, prioritization, strategy profiles, PRD-shaped output, and handoff rules without adding a PM command surface.
4
+ see_also:
5
+ - spur-dev
6
+ - planning-workflow
7
+ - decomposition
8
+ - spur-cli
9
+ - doc-evolve
10
+ ---
11
+
12
+ # Product Planning Guidance
13
+
14
+ This reference captures product-management judgment for the Spur planning path without adding old
15
+ feature-tree, PRD command, or PM-agent surfaces. `sp:spur-dev` remains the planning orchestrator.
16
+ Product planning is a lens applied during intake, feature authoring, prioritization, decomposition,
17
+ and doc handoff; deterministic writes still go through `spur feature`, `spur task`,
18
+ `spur workflow`, and `sp:doc-evolve`.
19
+
20
+ ## Routing Rule
21
+
22
+ Use this reference when the request is PM-shaped:
23
+
24
+ - prioritizing a backlog or roadmap,
25
+ - turning a vague idea into a feature with measurable outcomes,
26
+ - deciding whether to create a feature, task, or doc update,
27
+ - choosing a decomposition strategy (`simplify`, `mvp`, `standard`, `mature`),
28
+ - producing PRD-shaped thinking without creating a PRD command family.
29
+
30
+ Do not create a standalone `sp:product-management` skill, `sp:super-pm` agent, or `/sp:prd-*`
31
+ command for this workflow unless a later task proves a stable, distinct routing value.
32
+
33
+ ## Intake Questions
34
+
35
+ Ask only for missing information. A senior, specific request can proceed directly to feature
36
+ creation.
37
+
38
+ | Dimension | Question |
39
+ | --- | --- |
40
+ | Outcome | What user or business result changes if this ships? |
41
+ | User | Which persona, workflow, or operator role benefits first? |
42
+ | Scope | What is explicitly in and out for this iteration? |
43
+ | Success | Which observable metric, behavior, or acceptance signal proves it worked? |
44
+ | Constraints | What timeline, risk, compliance, migration, or compatibility limits shape the plan? |
45
+ | Opportunity cost | What current or planned work should lose priority if this wins? |
46
+
47
+ Expertise calibration:
48
+
49
+ - **Sparse idea:** ask foundational outcome/scope/success questions.
50
+ - **Problem + rough scope:** ask boundary, metric, and dependency questions.
51
+ - **Problem + personas + metrics:** ask tradeoff and opportunity-cost questions; do not over-elicit.
52
+
53
+ ## Elicitation Question Taxonomy
54
+
55
+ Four dimensions frame every elicitation. Ask only what is missing — a senior, specific request may
56
+ answer all four in its first sentence and proceed directly to feature creation. This taxonomy
57
+ deepens the intake table above with the question *form* and the expertise-adaptive depth rule.
58
+
59
+ | Dimension | Core question | What "answered" looks like |
60
+ | --- | --- | --- |
61
+ | Purpose | What user or business result changes if this ships? | A named outcome the operator will observe. |
62
+ | Scope | What is explicitly in and out for this iteration? | A boundary testable against proposed tasks. |
63
+ | Constraints | What timeline, risk, compliance, migration, or compatibility limits shape the plan? | A list of non-negotiables the plan must respect. |
64
+ | Success criteria | Which observable metric, behavior, or acceptance signal proves it worked? | A signal encodable as an acceptance scenario. |
65
+
66
+ ### Expertise-adaptive questioning
67
+
68
+ Calibrate depth to the input. Over-elicit and you waste the operator's time; under-elicit and you
69
+ ship ambiguity into the corpus.
70
+
71
+ | Input shape | Ask |
72
+ | --- | --- |
73
+ | Sparse idea (one sentence, no scope) | Purpose + Scope + Success — foundational framing only. |
74
+ | Problem + rough scope | Constraints + Success — boundary and metric. |
75
+ | Problem + personas + metrics | Opportunity cost + Constraints — tradeoff surface only. Do not re-elicit what is already stated. |
76
+ | Senior, fully-specified request | Nothing. Proceed to `spur feature create`. |
77
+
78
+ ### Question form
79
+
80
+ One question at a time, always with a recommended default. Never ask "what are your constraints?"
81
+ open-ended; offer "I see X and Y as the likely constraints — am I missing one?" The recommendation
82
+ trains the elicitation; the operator's override trains future elicitation.
83
+
84
+ ## Prioritization
85
+
86
+ Use prioritization to decide ordering, not to replace operator judgment.
87
+
88
+ ### RICE
89
+
90
+ Use RICE when comparing multiple candidates with enough estimates to rank them.
91
+
92
+ ```
93
+ score = (reach * impact * confidence) / effort
94
+ ```
95
+
96
+ | Field | Guidance |
97
+ | --- | --- |
98
+ | Reach | A count over a defined period, e.g. users/quarter or runs/month. |
99
+ | Impact | `3` massive, `2` high, `1` medium, `0.5` low, `0.25` minimal. |
100
+ | Confidence | `1.0` high, `0.8` medium, `0.5` low. Penalize guesses. |
101
+ | Effort | Person-months or equivalent relative effort; keep the unit consistent. |
102
+
103
+ Flag outliers: if one score is more than 10x the median, review the inputs before using the rank.
104
+
105
+ ### MoSCoW
106
+
107
+ Use MoSCoW when shaping a release boundary.
108
+
109
+ | Bucket | Meaning |
110
+ | --- | --- |
111
+ | Must | Release fails without it; critical path or blocking dependency. |
112
+ | Should | Important and high-value, but can slip one release. |
113
+ | Could | Useful if capacity remains. |
114
+ | Won't | Explicitly out of scope for this release; document for future. |
115
+
116
+ The Must set should be sufficient to satisfy the release goal. If it is not, the release goal or the
117
+ bucket assignment is wrong.
118
+
119
+ ## Strategy Profiles
120
+
121
+ Strategy profiles tune planning ceremony and decomposition scope. They are judgment aids, not new
122
+ CLI flags unless a command explicitly supports them.
123
+
124
+ | Profile | Use when | Scope | Tests/docs expectation |
125
+ | --- | --- | --- | --- |
126
+ | `simplify` | Low-risk request, operator wants speed, or a tiny workflow change. | Minimum useful deliverable; skip non-blocking edge cases. | Smoke/manual evidence and concise task prose. |
127
+ | `mvp` | Need to validate demand or unblock learning quickly. | Core happy path; defer nice-to-haves. | Basic automated happy-path checks where cheap. |
128
+ | `standard` | Normal validated work. | Balanced core + known edge cases. | Unit/integration coverage and normal docs. |
129
+ | `mature` | Production-critical, regulated, security-sensitive, or high-reliability work. | Complete path including migration, failure modes, observability, and rollback. | Unit + integration + e2e/perf/security evidence as relevant. |
130
+
131
+ Auto-selection heuristics:
132
+
133
+ - Sparse request + explicit speed/minimal ceremony -> `simplify`.
134
+ - Uncertain demand or missing success metric -> `mvp`.
135
+ - Clear problem, scope, and acceptance signals -> `standard`.
136
+ - Compliance, money movement, data loss, auth, migration, or reliability keywords -> `mature`.
137
+
138
+ ## Decomposition Decision Rules
139
+
140
+ Each strategy profile implies a decomposition shape. Use these rules when the `sp:spec-decomposition`
141
+ competency produces the task batch — the profile constrains granularity, edge-case coverage, and
142
+ the acceptable task count.
143
+
144
+ | Profile | Granularity | Edge cases | Target task count | Template variant |
145
+ | --- | --- | --- | --- | --- |
146
+ | `simplify` | One task if possible; split only when a single change spans two unrelated files. | Skip non-blocking. | 1-2 | `feature-impl` or `issue` |
147
+ | `mvp` | Core happy path as one task; split only when a separate concern blocks the happy path. | Defer to a follow-up task noted in `## Background`. | 1-3 | `feature-impl` |
148
+ | `standard` | One task per cohesive unit of work (a feature slice, a module, a cross-cutting change). | Include known edge cases in the same task or a sibling task. | 3-8 | `feature-impl` (mix with `review`/`meta` as needed) |
149
+ | `mature` | One task per failure mode, migration step, rollback path, and observability surface — in addition to the core. | All failure modes, migration, rollback, and observability are first-class tasks, not afterthoughts. | 6-15 | `feature-impl` + `review` + `meta` mix |
150
+
151
+ ### Decision order
152
+
153
+ 1. Pick the profile (auto-select heuristics above, or operator override).
154
+ 2. Apply the granularity rule to each cohesive unit.
155
+ 3. Apply the edge-case rule to decide what stays in-task vs. splits out.
156
+ 4. Sanity-check the target count — if you are 2x over, the profile is wrong or the scope is two features.
157
+
158
+ ### When to split a feature
159
+
160
+ If decomposition produces more than ~12 tasks under `mature` or ~8 under `standard`, the feature is
161
+ probably two features. Split along the natural seam (subsystem, release boundary, team ownership)
162
+ and create a second `spur feature create`. A single feature with 20 tasks is a decomposition smell,
163
+ not a plan.
164
+
165
+ ## Feature, Task, Or Doc
166
+
167
+ Choose the smallest durable artifact that preserves traceability.
168
+
169
+ | Need | Artifact |
170
+ | --- | --- |
171
+ | New user-facing capability, roadmap item, or acceptance criteria surface | `spur feature create` |
172
+ | Concrete implementation work with a bounded code change | `spur task create` or `spur task batch-create` |
173
+ | Existing canonical docs drift or a PRD-style decision record | `sp:doc-evolve` |
174
+ | Repeatable, stable multi-step PM process | `spur workflow` YAML, only after the steps stabilize |
175
+
176
+ Default to one feature and one task until the decomposition rubric proves a split. A PRD-shaped
177
+ document is useful for stakeholder alignment, scope negotiation, or cross-team handoff; it is not a
178
+ reason to add `/sp:prd-doc`.
179
+
180
+ ## PRD-Shaped Output
181
+
182
+ When the operator asks for a PRD, product brief, or requirements doc, produce the needed shape in the
183
+ current planning artifact or route to `sp:doc-evolve` for canonical docs. Use the template size that
184
+ matches the decision:
185
+
186
+ | Shape | Sections | Use when |
187
+ | --- | --- | --- |
188
+ | Brief | Problem, users, success, scope, next decision | Exploration or a one-week spike. |
189
+ | One-page PRD | Problem, solution, scope, success metrics | Simple feature, one team, two to four weeks. |
190
+ | Standard PRD | Problem, goals, users, scope in/out, AC, metrics, risks, rollout, open questions | Complex feature, multiple stakeholders, or six-plus weeks. |
191
+
192
+ Always include an Out of Scope section when the output is PRD-shaped. That is the part that prevents
193
+ scope creep.
194
+
195
+ ## Handoff Rules
196
+
197
+ - Feature writes: use `spur feature create`, `spur feature update`, and direct feature-body edits
198
+ followed by `spur feature check`.
199
+ - Task writes: use `spur task create`, `spur task batch-create`, or
200
+ `spur task update --section --from-file`.
201
+ - Documentation synchronization: invoke `sp:doc-evolve` and follow the constitution.
202
+ - Repeatable orchestration: author `spur workflow` YAML only when the process has become mechanical
203
+ enough to validate and rerun.
204
+
205
+ Rejected surfaces for now: `sp:super-pm`, `/sp:prd-run`, `/sp:prd-doc`, `/sp:prd-adjust`,
206
+ `/sp:prd-init`, and a standalone `sp:product-management` skill.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: section-batching
3
+ description: Stage pipeline task sections together, apply them through Spur, and validate once per coherent batch.
4
+ see_also:
5
+ - spur-dev
6
+ - spur-cli
7
+ ---
8
+
9
+ # Section batching protocol
10
+
11
+ Use this protocol when an in-session operation must author multiple pipeline sections. A workflow
12
+ `record` step should still prefer `spur task record` for verdict-derived `Testing` and `Review`.
13
+
14
+ 1. Read `spur-cli/references/tasks/l3-guard-cheatsheet.md`.
15
+ 2. Run `spur task sections <wbs> list --json` to learn which sections the current matrix permits.
16
+ 3. Stage complete, body-only `Solution`, `Testing`, and `Review` files before the first task check.
17
+ 4. Run `spur task check <wbs> --json` once, then apply every permitted staged section with
18
+ `spur task update <wbs> --section <name> --from-file <path>`.
19
+ 5. Run `spur task check <wbs> --json` once after the coherent write batch.
20
+ 6. If the post-write check fails, group all findings by section, repair all affected staged bodies, re-apply them, and
21
+ check once more.
22
+
23
+ Budget: no more than two section writes per section and two task checks per task unless a new
24
+ external failure changes the evidence. Do not use a write→check loop for each section.
@@ -0,0 +1,155 @@
1
+ ---
2
+ name: sys-architecture
3
+ description: "The architecture competency — decide and record system design before code: module boundaries, data flow, build-vs-extend, transport/storage/auth tradeoffs, ADR routing. Triggers: \"what's the right approach\", \"design this\", \"architecture\", \"should this be an ADR\", \"module boundary\", \"build vs extend\"."
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: spur
7
+ version: "1.0"
8
+ platforms: "claude-code,codex,openclaw,opencode,antigravity"
9
+ interactions:
10
+ - technique
11
+ competency: architecture
12
+ operations:
13
+ - survey
14
+ openclaw:
15
+ emoji: "📐"
16
+ ---
17
+
18
+ # sys-architecture — the architecture competency
19
+
20
+ Decide and record the *shape* of a change before it is implemented: where boundaries go, how data
21
+ flows, what to build vs. extend, and which cross-cutting choices warrant a recorded decision. This is
22
+ a deep competency the spine (`sp:spur-dev`) consults when a task's design is unsettled —
23
+ it owns *deciding the shape*, distinct from `sp:code-implementation` which *builds the decided shape*.
24
+
25
+ The split mirrors the project's own doc map: this skill produces **decisions with one-line reasons**
26
+ (which belong in `docs/00_ADR.md`) and **mechanism/rationale** (which belongs in
27
+ `docs/03_ARCHITECTURE.md`); it does not write feature code.
28
+
29
+ ## When to use
30
+
31
+ - **Choose an approach** — two or three viable designs exist; pick one with an explicit tradeoff.
32
+ - **Place a boundary** — decide which module/seam/package owns a responsibility.
33
+ - **Build vs. extend** — decide whether to add to an existing seam or introduce a new one.
34
+ - **ADR judgment** — decide whether a choice is cross-cutting enough to need a recorded ADR entry,
35
+ and draft it.
36
+ - **Pre-implementation design** — fill a task's `## Design` section with the decided shape so
37
+ `sp:code-implementation` can execute it.
38
+
39
+ Do **not** use this skill for:
40
+
41
+ - **Writing the code** — that is `sp:code-implementation`.
42
+ - **Coverage / testing** — that is `sp:code-testing`.
43
+ - **Review of already-written code** — that is `sp:code-verification`.
44
+ - **Driving the lifecycle / decomposition** — that is the spine, `sp:spur-dev`.
45
+
46
+ ## Behavior
47
+
48
+ This skill behaves as a **technique**: given a problem and the codebase, it surfaces 2–3 candidate
49
+ designs, weighs them on the dimensions that matter (coupling, blast radius, scalability, cost,
50
+ reversibility), recommends one with a one-line reason, and routes the result:
51
+
52
+ - A **cross-cutting decision** (new app/package, transport swap, auth boundary, storage swap, a new
53
+ shared convention) → a dated **ADR** entry in `docs/00_ADR.md`, with mechanism detail in
54
+ `docs/03_ARCHITECTURE.md`.
55
+ - A **task-local design** → the task's `## Design` section (written via `spur task update`).
56
+
57
+ Full procedure: **[references/decision-method.md](references/decision-method.md)** — candidate
58
+ generation, the tradeoff dimensions, the deep-module vocabulary (module/interface/depth/seam/adapter/
59
+ leverage/locality, the deletion test, design-it-twice), and the ADR-or-not gate.
60
+
61
+ ## The ADR-or-not gate
62
+
63
+ Record an ADR when the choice is **cross-cutting and hard to reverse**: it changes a module boundary,
64
+ introduces or swaps a dependency/transport/store, alters an auth surface, or sets a convention other
65
+ code must follow. A task-local, easily-reversed choice stays in the task's `## Design`. When in
66
+ doubt, prefer recording — a cheap ADR entry beats an undocumented divergence (the project conflict
67
+ rule forbids diverging from an unrecorded decision).
68
+
69
+ ## Survey operation — architecture upkeep
70
+
71
+ A standing **upkeep audit**, distinct from the per-decision design flow above: scan the whole
72
+ codebase (or a named module tree) for **shallow modules and deepening opportunities**, and surface
73
+ them as candidates for the planning half. This is a *generator*, not a fixer — it never refactors;
74
+ it produces a ranked candidate report an operator can turn into a task.
75
+
76
+ **Not `/sp:dev-review`.** `/sp:dev-review` is a per-task DIFF review (a WBS, forward, findings written
77
+ to the task's `## Review`, backed by `sp:code-verification`). The survey has no WBS and no diff — it
78
+ audits the standing codebase and feeds the planning half. Folding it into `dev-review` would overload
79
+ that verb and pollute `code-verification` with a codebase scanner; it earns its own operation here.
80
+
81
+ **Method (reuse, do not restate).** The survey applies the deep-module vocabulary already defined in
82
+ [references/decision-method.md](references/decision-method.md) — module / interface / depth / seam /
83
+ adapter / leverage / locality, and the **deletion test** — to flag shallow modules, pass-through
84
+ wrappers, and leaky seams. The full procedure and the MARKDOWN candidate-report template live in
85
+ [references/upkeep-survey.md](references/upkeep-survey.md).
86
+
87
+ **Output: a MARKDOWN candidate report, never HTML.** Each candidate names the files, the problem
88
+ (which depth/seam smell), the proposed deepening, a before/after in prose, and a recommendation
89
+ strength — as markdown an operator can read and paste, never a rendered HTML report.
90
+
91
+ **Route: candidate → grilling-to-design.** The operator picks a candidate; it enters the existing
92
+ grilling-to-design flow (the planning half — `/sp:dev-idea` / `/sp:dev-plan`) as a generated idea,
93
+ where it is stress-tested and shaped into a task. The survey stops at surfacing candidates; it never
94
+ auto-refactors — upkeep framing, not a refactor bot.
95
+
96
+ ## Arguments
97
+
98
+ When invoked via `/sp:dev-arch`, the command forwards `survey $ARGUMENTS` to this skill:
99
+
100
+ | Argument | Description | Default |
101
+ |----------|-------------|---------|
102
+ | `[<module-path>]` | Module path to scope the architecture survey. | omitted (whole repo) |
103
+ | `--scope <all\|path>` | Limit the survey to a path or expand to the whole repo. | all |
104
+ | `--json` | Emit structured JSON instead of the MARKDOWN candidate report. | off |
105
+
106
+ `--agent <inline|auto|name>` is consumed by the `dev-arch` wrapper (execution-surface selection) and is not forwarded as a survey argument.
107
+
108
+ ## Common Rationalizations
109
+
110
+ | Rationalization | Reality |
111
+ |---|---|
112
+ | "One option is obviously right — no need to compare." | Evaluating a single option is rationalization, not a decision. Weigh at least two; the second reveals the first's cost. |
113
+ | "Add a layer now for future flexibility." | A layer with one implementation is a shallow module that adds indirection, not depth. Add the seam when a second case is real. |
114
+ | "We'll refactor the shortcut later." | "Later" rarely comes; the shortcut becomes load-bearing. Decide the boundary now, or record the debt explicitly. |
115
+ | "This decision is small — skip the ADR." | Cross-cutting choices (a new package, a transport swap, an auth boundary) are exactly what the ADR captures. Small-looking seams calcify. |
116
+ | "More abstraction is more robust." | Depth is interface-simplicity over capability, not layer count. The deletion test: if removing the module simplifies the system, it was shallow. |
117
+
118
+ ## Red Flags
119
+
120
+ - A design presented with exactly one option and no alternative considered.
121
+ - A new module/layer whose interface is as complex as what it wraps (a pass-through).
122
+ - A cross-cutting decision made with no ADR entry and no recorded reason.
123
+ - Abstraction justified only by hypothetical future requirements.
124
+ - A boundary that fails the deletion test — the system is simpler without it.
125
+
126
+ ## Gotchas
127
+
128
+ 1. **Decide, then hand off.** This skill ends at a recorded decision + a filled `## Design`; the
129
+ spine dispatches `sp:code-implementation` to build it. Do not write feature code here.
130
+ 2. **One-line reason is mandatory.** A decision without its reason is not a decision — `docs/00_ADR.md`
131
+ exists precisely to carry the *why*.
132
+ 3. **Prefer extending a seam over adding one.** A new boundary is justified only when it removes real
133
+ complexity or gives a second concrete caller/adapter.
134
+ 4. **Route to the owning doc.** Decision + reason → `00`; mechanism/rationale in depth → `03`;
135
+ command/config/schema shapes → `04`. Do not restate a fact across docs.
136
+
137
+ ## See also
138
+
139
+ - **`sp:spur-dev`** — the spine that consults this competency when a task's design is unsettled.
140
+ - **`sp:code-implementation`** — builds the shape this skill decides.
141
+ - **`docs/00_ADR.md` / `docs/03_ARCHITECTURE.md`** — the homes for the decisions and rationale this
142
+ skill produces.
143
+
144
+ ## Platform Notes
145
+
146
+ ### Claude Code
147
+
148
+ Invoke directly via `Skill(skill="sp:sys-architecture", args="<question>")`, or as the design step of
149
+ planning. Use the `spur` CLI via the Bash tool to write a task's `## Design`; edit `docs/00_ADR.md`
150
+ directly for ADR entries.
151
+
152
+ ### Codex / OpenClaw / OpenCode / Antigravity
153
+
154
+ Invoke this skill directly for design judgment; write decisions to the owning docs and task sections.
155
+ The skill is the SSOT for the method; the result lives in the docs it routes to.
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: decision-method
3
+ description: "The architecture decision method for sp:sys-architecture — candidate generation, the tradeoff dimensions, the deep-vs-shallow-module test, and the ADR-or-not gate. Produces a recorded decision with a one-line reason, routed to the owning doc."
4
+ see_also:
5
+ - sys-architecture
6
+ ---
7
+
8
+ # Architecture Decision Method
9
+
10
+ The procedure `sp:sys-architecture` runs to turn a design question into a recorded decision. The
11
+ output is always **a chosen option + a one-line reason**, routed to its owning doc.
12
+
13
+ ## 1. Frame the decision
14
+
15
+ State, in one sentence, what is being decided. If you cannot state it in one sentence, the decision
16
+ is actually several — split them and decide in dependency order. Read the codebase first: many
17
+ "decisions" are already constrained by an existing pattern, dependency, or convention. If the answer
18
+ is in the code, state it and stop — do not manufacture options for a settled question.
19
+
20
+ ## 2. Generate 2–3 candidates
21
+
22
+ Never evaluate a single option (that is rationalization, not a decision) and rarely more than three
23
+ (analysis paralysis). For each candidate, name what it commits to and what it defers. Bias toward
24
+ options that *extend an existing seam* over options that *introduce a new one*.
25
+
26
+ ## 3. Weigh on the dimensions that matter
27
+
28
+ Score the candidates on the axes relevant to this decision — not all apply every time:
29
+
30
+ | Dimension | The question |
31
+ |-----------|--------------|
32
+ | **Coupling** | What does this bind together that was independent? Can the two sides still evolve apart? |
33
+ | **Blast radius** | If this is wrong, how much has to change to undo it? |
34
+ | **Reversibility** | Is this a one-way door (hard to reverse) or a two-way door (cheap to revisit)? |
35
+ | **Scalability** | Does it hold at the next order of magnitude of load/size/teams, or is there a known cliff? |
36
+ | **Cost** | Build/run/maintain cost — including the cost of a new dependency or runtime. |
37
+ | **Conformance** | Does it match the codebase's existing conventions, or fork them? |
38
+
39
+ A one-way door with a large blast radius deserves more deliberation and almost always an ADR; a
40
+ two-way door can be decided fast and revisited.
41
+
42
+ ## 4. Apply the deep-module vocabulary
43
+
44
+ Prefer a design whose modules are **deep**: a narrow interface hiding substantial capability, reused
45
+ by callers that do not need to know its internals. Be suspicious of **shallow** modules — thin
46
+ wrappers with a wide interface, or boundaries drawn along *temporal phases* ("a step-1 module and a
47
+ step-2 module") rather than *capabilities*. A boundary that two callers almost always cross together
48
+ is the wrong boundary; relocate or remove it.
49
+
50
+ Use these seven terms precisely — each has near-synonyms this method deliberately avoids, because a
51
+ vaguer word lets an under-designed boundary pass without scrutiny:
52
+
53
+ | Term | Meaning | Avoid |
54
+ |------|---------|-------|
55
+ | **Module** | A unit of functionality with one owner and one reason to change. | "piece", "part", "chunk" |
56
+ | **Interface** | The surface callers depend on — signatures, types, contracts. Not the implementation. | "API" (too transport-coded), "surface area" |
57
+ | **Depth** | Capability hidden ÷ interface size. A deep module does a lot behind a little. | "complexity" (depth is the *ratio*, not raw complexity) |
58
+ | **Seam** | A place the design can vary without the caller knowing — the proven joint an adapter sits on. | "layer", "boundary" (see Rejected framings) |
59
+ | **Adapter** | A concrete implementation behind a seam. One adapter alone does not prove the seam is real. | "wrapper", "shim" |
60
+ | **Leverage** | What a module buys its callers — the work it removes from every call site. | "value", "benefit" |
61
+ | **Locality** | How much of a change stays inside one module vs. spilling across many. | "cohesion" (locality is about *change*, not static grouping) |
62
+
63
+ **The deletion test:** for any proposed module or seam, ask "if I deleted this and inlined its one
64
+ caller, would anything get harder?" If no caller would notice, the boundary is not pulling its
65
+ weight — either it hides no real complexity, or it has exactly one caller and no second use in
66
+ sight. Deletion-test failures are the most common shallow-module smell.
67
+
68
+ **One adapter = hypothetical seam, two = real.** A seam justified by "we might swap this later" is
69
+ speculative until a second adapter actually exists. Building a seam for a hypothetical second
70
+ implementation is premature abstraction (R2); building it when the second implementation is already
71
+ needed is a real seam. When in doubt, inline the single adapter and extract the seam when the second
72
+ caller arrives — extraction is cheap, premature generality is not.
73
+
74
+ **The interface is the test surface.** A deep module's tests exercise the interface, not the
75
+ internals — if a test needs to reach past the interface to assert something, either the interface
76
+ is missing a capability it should expose, or the test is coupling to implementation detail that
77
+ will make refactors expensive. This is also the fastest depth check available: an interface you
78
+ can test completely from outside is doing its job.
79
+
80
+ ### Rejected framings
81
+
82
+ These near-synonym terms are deliberately **not** used in this method, to keep the vocabulary above
83
+ unambiguous:
84
+
85
+ | Term | Why rejected |
86
+ |------|--------------|
87
+ | **Component** | Overloaded across UI frameworks and infra tooling — does not distinguish depth from size. |
88
+ | **Service** | Implies a network/process boundary; conflates *module* (a code-level unit) with *deployment* (an infra-level unit). A module is not always a service and a service is not always one module. |
89
+ | **Boundary** | Too generic — used for module edges, security perimeters, and transaction scopes alike. This method uses **seam** for the specific "place the design can vary" meaning. |
90
+
91
+ ### Design-it-twice (for a genuinely unsettled interface)
92
+
93
+ When the interface shape itself is the open question — not just which of two known options to
94
+ pick, but what the right shape even is — fan out 2–3 radically different interface designs in
95
+ parallel via `sp:parallel-execution` (independent subagents, one design each, same problem
96
+ statement) rather than iterating on one design serially. Compare the results on **depth**,
97
+ **locality**, and **seam placement** — the three axes above that a single linear design pass tends
98
+ to anchor on its first idea instead of exploring. Use this only when the interface is the crux of
99
+ the decision; for a settled interface with a build-vs-extend question, steps 1–3 above are enough.
100
+
101
+ ## 5. Recommend one, with the one-line reason
102
+
103
+ Pick the candidate that best fits the weighed dimensions and state the single sentence that justifies
104
+ it over the runner-up. The reason is the deliverable — a decision without its reason cannot be
105
+ maintained or revisited honestly.
106
+
107
+ ## 6. The ADR-or-not gate
108
+
109
+ Record a dated **ADR** entry in `docs/00_ADR.md` when the decision is **cross-cutting and hard to
110
+ reverse** — any of:
111
+
112
+ - introduces, swaps, or removes a dependency, transport, runtime, or data store;
113
+ - changes a module/package boundary or an auth surface;
114
+ - sets a convention other code must follow;
115
+ - supersedes or diverges from a prior recorded decision.
116
+
117
+ Otherwise the decision is **task-local**: write it to the task's `## Design` section via
118
+ `spur task update <wbs> --section Design --from-file <tmp>`. When uncertain, prefer recording — a
119
+ cheap ADR entry beats an undocumented divergence, and the project conflict rule forbids diverging
120
+ from a decision that was never recorded.
121
+
122
+ ## 7. Route to the owning doc (do not restate)
123
+
124
+ | Output | Home |
125
+ |--------|------|
126
+ | The decision + its one-line reason | `docs/00_ADR.md` (cross-cutting) or the task's `## Design` (task-local) |
127
+ | Mechanism, data flow, invariants, rationale in depth | `docs/03_ARCHITECTURE.md` |
128
+ | Concrete command / flag / config / schema shapes | `docs/04_DESIGN.md` |
129
+
130
+ A fact lives in exactly one doc; the others link to it. If you find yourself writing *how it's built*
131
+ or *why* inside `00`, it belongs in `03` — move it and link.
132
+
133
+ ## Handoff
134
+
135
+ The decision is complete when: one option is chosen with a one-line reason, it is recorded in its
136
+ owning doc (ADR or task `## Design`), and `sp:code-implementation` can build it without re-deciding
137
+ anything. Hand off to the spine (`sp:spur-dev`) to dispatch implementation.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: upkeep-survey
3
+ description: "The architecture-upkeep survey procedure for sp:sys-architecture — scan a codebase (or module tree) for shallow modules and deepening opportunities using the deep-module vocabulary, and emit a MARKDOWN candidate report that feeds the planning half. Surfaces candidates; never auto-refactors."
4
+ see_also:
5
+ - sys-architecture
6
+ ---
7
+
8
+ # Architecture-Upkeep Survey
9
+
10
+ A whole-codebase (or named-module-tree) audit that surfaces **deepening opportunities** — places where
11
+ a shallow module, a pass-through wrapper, or a leaky seam could be made deeper, simpler at the
12
+ interface, or better-located. It is the standing-upkeep counterpart to the per-decision design method
13
+ in [decision-method.md](decision-method.md): same vocabulary, different trigger. It **generates
14
+ candidates for the planning half**; it never edits code.
15
+
16
+ ## Scope
17
+
18
+ - **Whole codebase** (default) or a **named module tree** (`apps/cli`, `packages/domain`, …).
19
+ - Prefer a bounded tree per run — a survey that flags fifty things helps no one. Rank hard, present few.
20
+
21
+ ## Method — reuse the deep-module vocabulary
22
+
23
+ Apply the vocabulary and tests defined in [decision-method.md](decision-method.md) §4 (do not restate
24
+ them here): **module / interface / depth / seam / adapter / leverage / locality**, and the **deletion
25
+ test**. Scan for the smells that vocabulary names:
26
+
27
+ | Smell | What to look for |
28
+ |---|---|
29
+ | **Shallow module** | Interface nearly as large as the implementation it hides — little capability per unit of interface. |
30
+ | **Pass-through wrapper** | A module whose methods just forward to another with no added value — fails the deletion test. |
31
+ | **Leaky seam** | A boundary that exposes its internals; callers reach past the interface into implementation. |
32
+ | **Misplaced locality** | Logic that lives far from the data/state it operates on, forcing round-trips. |
33
+ | **Repeated adapter** | The same glue written at many call sites instead of behind one seam. |
34
+
35
+ For each candidate, run the **deletion test**: "if I deleted this module and inlined it, does the
36
+ system get simpler?" A yes is the strongest signal it is shallow.
37
+
38
+ ## Output — a MARKDOWN candidate report (never HTML)
39
+
40
+ Emit markdown the operator can read and paste. One block per candidate, ranked strongest-first:
41
+
42
+ ```markdown
43
+ ## Architecture-upkeep candidates — <scope> (<date>)
44
+
45
+ ### C1 — <short title> [strength: strong | moderate | speculative]
46
+ - **Files:** `path/a.ts`, `path/b.ts`
47
+ - **Problem:** <which smell; the deletion-test result in one line>
48
+ - **Proposed deepening:** <the restructuring — the deeper module / merged seam / relocated logic>
49
+ - **Before → after (prose):** <today's shape> → <the proposed shape>, and why the interface shrinks
50
+ - **Recommendation:** <do it now / schedule / leave — with the one-line reason>
51
+
52
+ ### C2 — …
53
+ ```
54
+
55
+ - **Markdown only.** Never emit an HTML report; the corpus and the operator read markdown.
56
+ - **Strength label is mandatory** so the operator can triage; a survey with no ranking is noise.
57
+ - **Before/after in prose**, not a diff — the survey proposes shape, it does not write the change.
58
+
59
+ ## Route — candidate → grilling-to-design
60
+
61
+ The survey ends at the report. The operator picks a candidate and routes it into the **planning half**
62
+ as a generated idea:
63
+
64
+ - `/sp:dev-idea` — turn the candidate into a feature + task batch (when it is a larger restructuring).
65
+ - `/sp:dev-plan` — plan it directly (when it is a single, well-scoped deepening).
66
+
67
+ The chosen candidate is then **grilled** through the normal design flow (2–3 approaches, tradeoffs,
68
+ approval gate) before any code is written. The survey never auto-refactors — it only surfaces the
69
+ candidate and hands it to planning.
70
+
71
+ ## Upkeep framing (the one rule)
72
+
73
+ Surface candidates; **never** auto-refactor. The value is the ranked shortlist of where the
74
+ architecture could deepen, presented for a human decision — not an autonomous rewrite. A survey that
75
+ changes code has overstepped its role.