@rubytech/create-maxy-code 0.1.196 → 0.1.198

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 (83) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/config/brand.json +3 -1
  3. package/payload/platform/plugins/admin/PLUGIN.md +3 -0
  4. package/payload/platform/plugins/admin/skills/investigate/SKILL.md +286 -0
  5. package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +361 -0
  6. package/payload/platform/plugins/admin/skills/task/SKILL.md +283 -0
  7. package/payload/platform/plugins/docs/references/admin-ui.md +2 -1
  8. package/payload/platform/plugins/docs/references/internals.md +0 -2
  9. package/payload/platform/plugins/docs/references/investigate-and-task-skills.md +9 -0
  10. package/payload/platform/plugins/docs/references/platform.md +1 -1
  11. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
  12. package/payload/server/public/assets/AdminShell-DPk5UgEJ.js +1 -0
  13. package/payload/server/public/assets/{Checkbox-DTxJvyG7.js → Checkbox-Bh3kwzxP.js} +1 -1
  14. package/payload/server/public/assets/{admin-tKgLki8m.js → admin-BWzKAudL.js} +1 -1
  15. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CrQJbK3h.js → architectureDiagram-Q4EWVU46-Boys2mT1.js} +1 -1
  16. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BLCbhL8K.js → blockDiagram-DXYQGD6D-CvHqp46r.js} +1 -1
  17. package/payload/server/public/assets/{brand-lZz3OVIE.css → brand-VQtREmts.css} +1 -1
  18. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-X34EilDe.js → c4Diagram-AHTNJAMY-DiNQ95F6.js} +1 -1
  19. package/payload/server/public/assets/channel-BgwH_qhE.js +1 -0
  20. package/payload/server/public/assets/{chunk-336JU56O-CeRuGBQ2.js → chunk-336JU56O-9nS9-05M.js} +2 -2
  21. package/payload/server/public/assets/{chunk-426QAEUC-CUZOrcMu.js → chunk-426QAEUC-B2__9lRY.js} +1 -1
  22. package/payload/server/public/assets/{chunk-4TB4RGXK-CdrIHRcy.js → chunk-4TB4RGXK-R5F8rS0Z.js} +1 -1
  23. package/payload/server/public/assets/{chunk-5FUZZQ4R-CenIbTIp.js → chunk-5FUZZQ4R-B8HhJce-.js} +1 -1
  24. package/payload/server/public/assets/{chunk-5PVQY5BW-DGfzIUel.js → chunk-5PVQY5BW-Bjb08lbL.js} +1 -1
  25. package/payload/server/public/assets/{chunk-EDXVE4YY-DSft5oIH.js → chunk-EDXVE4YY-he0qCF3s.js} +1 -1
  26. package/payload/server/public/assets/{chunk-ENJZ2VHE-Dn8FFfaI.js → chunk-ENJZ2VHE-BTArFW5l.js} +1 -1
  27. package/payload/server/public/assets/{chunk-ICPOFSXX-JrwcKV7r.js → chunk-ICPOFSXX-CoyIL4q_.js} +1 -1
  28. package/payload/server/public/assets/{chunk-OYMX7WX6-C0X2fcAm.js → chunk-OYMX7WX6-DjLEhNFe.js} +1 -1
  29. package/payload/server/public/assets/{chunk-U2HBQHQK-DPdLe-f5.js → chunk-U2HBQHQK-tac2uvW1.js} +1 -1
  30. package/payload/server/public/assets/{chunk-X2U36JSP-Bw8pKkFu.js → chunk-X2U36JSP-DIWD9i88.js} +1 -1
  31. package/payload/server/public/assets/{chunk-YZCP3GAM-DcAJR-EA.js → chunk-YZCP3GAM-Ac7ogADz.js} +1 -1
  32. package/payload/server/public/assets/{chunk-ZZ45TVLE-DU374ZbR.js → chunk-ZZ45TVLE-QgqDaY9-.js} +1 -1
  33. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CwdV1-c8.js +1 -0
  34. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CS_jtevB.js +1 -0
  35. package/payload/server/public/assets/clone-BTishuSs.js +1 -0
  36. package/payload/server/public/assets/{dagre-DisbqNSB.js → dagre-D6qN4nkK.js} +1 -1
  37. package/payload/server/public/assets/{dagre-KV5264BT-D_n7R7V9.js → dagre-KV5264BT-C6TRKOg0.js} +1 -1
  38. package/payload/server/public/assets/data-CaZbNF-j.js +1 -0
  39. package/payload/server/public/assets/{diagram-5BDNPKRD-CJID_5OR.js → diagram-5BDNPKRD-BVk_J8Pt.js} +1 -1
  40. package/payload/server/public/assets/{diagram-G4DWMVQ6-ByepjvdE.js → diagram-G4DWMVQ6-BdV1IgwS.js} +1 -1
  41. package/payload/server/public/assets/{diagram-MMDJMWI5-DTkAHPHE.js → diagram-MMDJMWI5-OsvBkN6u.js} +1 -1
  42. package/payload/server/public/assets/{diagram-TYMM5635-CnVRa9NJ.js → diagram-TYMM5635-BQmKPyrb.js} +1 -1
  43. package/payload/server/public/assets/{erDiagram-SMLLAGMA-CRAGu7nV.js → erDiagram-SMLLAGMA-ChEx5_3C.js} +1 -1
  44. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BJusdlRz.js → flowDiagram-DWJPFMVM-B7sf6AG3.js} +1 -1
  45. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BFMOBBnF.js → ganttDiagram-T4ZO3ILL-DbpSraax.js} +1 -1
  46. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CGWEzh7u.js → gitGraphDiagram-UUTBAWPF-BnxDElDh.js} +1 -1
  47. package/payload/server/public/assets/{graph-D-iQdRDk.js → graph-CBP5yppq.js} +2 -2
  48. package/payload/server/public/assets/{graph-labels-u2_3Eyfh.js → graph-labels-BsZNScfa.js} +1 -1
  49. package/payload/server/public/assets/{graphlib-DNUvypOi.js → graphlib-Dux06enE.js} +1 -1
  50. package/payload/server/public/assets/{infoDiagram-42DDH7IO-CBDrnRTc.js → infoDiagram-42DDH7IO-BLWb6oKx.js} +1 -1
  51. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-C7NwSQo_.js → ishikawaDiagram-UXIWVN3A-AFiRuE6G.js} +1 -1
  52. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DSaP7A3F.js → journeyDiagram-VCZTEJTY-CxHBRGGu.js} +1 -1
  53. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DmixHCD4.js → kanban-definition-6JOO6SKY-CGugF0N8.js} +1 -1
  54. package/payload/server/public/assets/{line-CGGoTheL.js → line-COFloj-X.js} +1 -1
  55. package/payload/server/public/assets/{mermaid-parser.core-BudFADW7.js → mermaid-parser.core-CxXuCDQf.js} +1 -1
  56. package/payload/server/public/assets/{mermaid.core-BBbdJxXY.js → mermaid.core-BRBNvNup.js} +3 -3
  57. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CUiD9km1.js → mindmap-definition-QFDTVHPH-DarW5Wwq.js} +1 -1
  58. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BlAWpMr8.js → pieDiagram-DEJITSTG-CTokFAkN.js} +1 -1
  59. package/payload/server/public/assets/{public-CjeEF2vf.js → public-Bq-eOUu9.js} +3 -3
  60. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CXmIwc4W.js → quadrantDiagram-34T5L4WZ-BNawkg3I.js} +1 -1
  61. package/payload/server/public/assets/{requirementDiagram-MS252O5E-D_7_OeMC.js → requirementDiagram-MS252O5E-CWnO56oR.js} +1 -1
  62. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BKm_PqzT.js → sankeyDiagram-XADWPNL6-D9c-EZfV.js} +1 -1
  63. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CBSR0Zst.js → sequenceDiagram-FGHM5R23-In5lxCT5.js} +1 -1
  64. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CHNpT69M.js → stateDiagram-FHFEXIEX-CYb5js-u.js} +1 -1
  65. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-z-TVJfRt.js +1 -0
  66. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CxZoew5-.js → timeline-definition-GMOUNBTQ-Cje-BY9v.js} +1 -1
  67. package/payload/server/public/assets/{useSelectionMode-CwxXQzEI.js → useSelectionMode-B_2EQ2CC.js} +1 -1
  68. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-CKJdFDcG.js → vennDiagram-DHZGUBPP-BqeuoPr1.js} +1 -1
  69. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-C-XBcm-g.js → wardleyDiagram-NUSXRM2D-DE7xAnoq.js} +1 -1
  70. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Crb-ZtaP.js → xychartDiagram-5P7HB3ND-JE4x8YEZ.js} +1 -1
  71. package/payload/server/public/data.html +5 -5
  72. package/payload/server/public/graph.html +6 -6
  73. package/payload/server/public/index.html +6 -6
  74. package/payload/server/public/public.html +5 -5
  75. package/payload/server/server.js +221 -296
  76. package/payload/server/public/assets/AdminShell-DtABh34v.js +0 -1
  77. package/payload/server/public/assets/channel-ChZECiuj.js +0 -1
  78. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BpMBCYn6.js +0 -1
  79. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BU3HoIr1.js +0 -1
  80. package/payload/server/public/assets/clone-C3j5j6ku.js +0 -1
  81. package/payload/server/public/assets/data-DwY26t_T.js +0 -1
  82. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Kc8XO6yH.js +0 -1
  83. /package/payload/server/public/assets/{brand-CpGp9OyK.js → brand-CzeO4m4J.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.196",
3
+ "version": "0.1.198",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -57,7 +57,9 @@
57
57
  "externalPlugins": [
58
58
  { "name": "telegram", "marketplace": "claude-plugins-official", "configureSecret": "TELEGRAM_BOT_TOKEN", "channelPlugin": true },
59
59
  { "name": "discord", "marketplace": "claude-plugins-official", "configureSecret": "DISCORD_BOT_TOKEN", "channelPlugin": true },
60
- { "name": "imessage", "marketplace": "claude-plugins-official", "channelPlugin": true }
60
+ { "name": "imessage", "marketplace": "claude-plugins-official", "channelPlugin": true },
61
+ { "name": "superpowers", "marketplace": "claude-plugins-official" },
62
+ { "name": "code-review", "marketplace": "claude-plugins-official" }
61
63
  ],
62
64
 
63
65
  "consent": {
@@ -130,6 +130,9 @@ Tools are available via the `admin` MCP server.
130
130
  | Session reset / continue / resume | User asks to clear the session, start fresh, continue the last session, or pick up where they left off | `skills/session-management/SKILL.md` |
131
131
  | Show or download a file | User asks to view, attach, or download a file or document, or the current turn produces a document the owner needs to review | `skills/file-presentation/SKILL.md` |
132
132
  | Upgrade Maxy | User asks to upgrade, update, install the latest version, or accepts an upgrade offer | `skills/upgrade/SKILL.md` |
133
+ | Run a structured sprint without `gstack` | User asks to run a sprint, execute a `.tasks/NNN-*.md`, or invokes "superpowers sprint" / "sprint without gstack" | `skills/superpowers-sprint/SKILL.md` |
134
+ | Investigate a bug or unexpected behaviour | User asks to debug, fix a bug, find the root cause, or investigate an error | `skills/investigate/SKILL.md` |
135
+ | Capture work as a task before implementing | User asks to "task it", create a task, or describes work that should be a task file before a sprint | `skills/task/SKILL.md` |
133
136
 
134
137
  ## Hooks
135
138
 
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: investigate
3
+ description: |
4
+ Systematic debugging with root cause investigation. Iron Laws: no fix
5
+ without root cause, no diagnosis without evidence, investigation
6
+ produces a task — not a fix. Use when asked to "debug this", "fix this
7
+ bug", "why is this broken", "investigate this error", or "root cause".
8
+ allowed-tools:
9
+ - Bash
10
+ - Read
11
+ - Edit
12
+ - Grep
13
+ - Glob
14
+ - AskUserQuestion
15
+ - WebSearch
16
+ ---
17
+
18
+ # Systematic Debugging
19
+
20
+ ## Iron Laws
21
+
22
+ **NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.**
23
+ Fixing symptoms creates whack-a-mole debugging. Every fix that doesn't
24
+ address root cause makes the next bug harder to find.
25
+
26
+ **NO DIAGNOSIS WITHOUT EVIDENCE. NO GUESSING.**
27
+ 100% of the diagnosis must be grounded in observable evidence — log
28
+ output, error messages, stack traces, reproduction results, or code-path
29
+ tracing. Inconclusive evidence is not a mystery; it is an **observability
30
+ failure**. Fix the observability gap first, reproduce with proper
31
+ instrumentation, then resume.
32
+
33
+ **INVESTIGATION PRODUCES A TASK, NOT A FIX.**
34
+ The default output is a task entry describing the root cause, the fix,
35
+ its verification strategy, and its observability requirements. Do not
36
+ implement fixes directly unless the user explicitly asks.
37
+
38
+ `Edit` is in `allowed-tools` only for the temporary instrumentation in
39
+ Phase 3 step 1. Investigation does not write source files; the
40
+ deliverable is a task entry, written through the resolved task surface.
41
+
42
+ ---
43
+
44
+ ## Task surface (where tasks live in this environment)
45
+
46
+ Before searching prior work or writing the deliverable, resolve where
47
+ tasks live in the current install. Check in this order; use the first
48
+ one that exists:
49
+
50
+ 1. **Graph tasks (deployed maxy).** If the `work-*` MCP tools are
51
+ available (`work-list`, `work-get` for prior-work search; `work-create`
52
+ to write the deliverable — they persist `:Task` nodes in Neo4j), tasks
53
+ live in the graph. Use those tools. (The plugin is `work`, not `tasks` —
54
+ renamed to avoid colliding with Claude Code's built-in `Task*` family.)
55
+ 2. **Local `.tasks/` directory.** If the repo has a `.tasks/` directory
56
+ (optionally with `archive/`, `in-progress/`, `parked/`, `backlog/`
57
+ subdirs and a `LANES.md`), tasks live on disk as
58
+ `.tasks/NNN-<slug>.md`.
59
+ 3. **Neither.** State this explicitly: "No task surface detected — this
60
+ install has no `work-*` graph tools and no `.tasks/` directory. The
61
+ deliverable will be a written report only."
62
+
63
+ Throughout this skill, "search prior tasks", "cite prior work", and
64
+ "write a task" mean: use the resolved surface. Do not invent a new
65
+ location.
66
+
67
+ ---
68
+
69
+ ## Evidence First
70
+
71
+ When the user provides a specific artifact — a session key, log
72
+ reference, error excerpt, or pointer to a particular event — that
73
+ artifact is the primary evidence. Retrieve it before prior-task
74
+ searches, code reading, or hypothesis formation.
75
+
76
+ Use the canonical log-retrieval tool for the surface in question (e.g.
77
+ `logs-read` for Pi sessions on deployed maxy). If a retrieval hook
78
+ injects an exact command, execute it as given; do not improvise.
79
+
80
+ If no specific artifact was provided, proceed directly to Phase 1.
81
+
82
+ ---
83
+
84
+ ## Phase 1: Root Cause Investigation
85
+
86
+ 1. **Check prior work.** Search the task surface (graph or `.tasks/`)
87
+ for tasks related to the affected area — by component, filename, or
88
+ symptom keywords. Read any matches. Prior tasks carry root cause
89
+ analyses, evidence, scope boundaries, and observability findings.
90
+
91
+ What to look for:
92
+ - Same root cause already identified — fix may be in progress or
93
+ parked. Do not re-investigate.
94
+ - Related symptoms in the same area — recurring bugs are an
95
+ architectural smell, not coincidence.
96
+ - Prior observability findings — earlier gaps may still be open,
97
+ which explains sparse evidence now.
98
+ - Scope boundaries from related tasks — what was deferred may be
99
+ exactly what's failing.
100
+
101
+ Cite prior work:
102
+ ```
103
+ PRIOR WORK: <task id> — <title>
104
+ RELEVANCE: [same root cause | same area | related symptom]
105
+ STATUS: [open | archived | parked — and whether findings still apply]
106
+ ```
107
+
108
+ If no prior work is found, note it explicitly — that itself is
109
+ context.
110
+
111
+ 2. **Collect symptoms.** Read error messages, stack traces, reproduction
112
+ steps. If context is missing, ask ONE question at a time via
113
+ AskUserQuestion.
114
+
115
+ 3. **Read the code.** Trace the code path from symptom back to potential
116
+ causes. Grep for references, Read to understand logic.
117
+
118
+ 4. **Check recent changes.**
119
+ ```bash
120
+ git log --oneline -20 -- <affected-files>
121
+ ```
122
+ A regression means the root cause is in the diff.
123
+
124
+ 5. **Reproduce.** Can you trigger the bug deterministically? If not,
125
+ gather more evidence before proceeding.
126
+
127
+ 6. **Assess observability.** Can the logs, error messages, and metrics
128
+ answer "what happened and why?" If not, this is the first problem to
129
+ solve. Flag the gap:
130
+ ```
131
+ OBSERVABILITY GAP: [what evidence is missing and why it matters]
132
+ INSTRUMENTATION NEEDED: [what would make the cause visible]
133
+ ```
134
+ If the gap is significant, **stop the investigation** and write a
135
+ task for the observability fix. Resume after instrumentation is
136
+ deployed and the issue is reproduced with proper evidence.
137
+
138
+ Output: **"Root cause hypothesis: ..."** — a specific, testable claim
139
+ supported by cited evidence, plus the narrowest module the fix would
140
+ touch (informational; investigation does not edit source).
141
+
142
+ ---
143
+
144
+ ## Phase 2: Pattern Analysis
145
+
146
+ | Pattern | Signature | Where to look |
147
+ |---------|-----------|---------------|
148
+ | Race condition | Intermittent, timing-dependent | Concurrent access to shared state |
149
+ | Nil/null propagation | NoMethodError, TypeError | Missing guards on optional values |
150
+ | State corruption | Inconsistent data, partial updates | Transactions, callbacks, hooks |
151
+ | Integration failure | Timeout, unexpected response | External API calls, service boundaries |
152
+ | Configuration drift | Works locally, fails in staging/prod | Env vars, feature flags, DB state |
153
+ | Stale cache | Shows old data, fixes on cache clear | Redis, CDN, browser cache |
154
+
155
+ Also check:
156
+ - Prior tasks (graph or `.tasks/archive/`) in the same area — recurring
157
+ bugs in the same files are an architectural smell.
158
+ - `git log` for prior fixes in the same area.
159
+
160
+ **External pattern search.** If no known pattern matches, WebSearch
161
+ for "{framework} {generic error type}" or "{library} {component} known
162
+ issues". **Sanitize first** — strip hostnames, IPs, file paths, SQL,
163
+ customer data. Search the error category, not the raw message. If
164
+ WebSearch is unavailable, skip and proceed.
165
+
166
+ ---
167
+
168
+ ## Phase 3: Hypothesis Testing
169
+
170
+ 1. **Confirm the hypothesis.** Add a temporary log/assertion/debug
171
+ output at the suspected root cause (this is the one Edit
172
+ investigation makes; remove it before delivering findings). Run the
173
+ reproduction. Does the evidence match?
174
+
175
+ 2. **If the hypothesis is wrong.** Sanitize and search the generic
176
+ error (or skip if WebSearch unavailable), then return to Phase 1.
177
+ Gather more evidence. Do not guess.
178
+
179
+ 3. **3-strike rule.** If 3 hypotheses fail, **STOP**. Three failed
180
+ hypotheses almost always means insufficient observability —
181
+ guessing, not investigating. Use AskUserQuestion:
182
+ ```
183
+ 3 hypotheses tested, none confirmed by evidence. This is most likely
184
+ an observability failure.
185
+
186
+ OBSERVABILITY GAP: [what evidence is missing]
187
+
188
+ A) Fix observability first — add instrumentation, reproduce, then
189
+ resume investigation (RECOMMENDED)
190
+ B) Continue investigating — new hypothesis with supporting
191
+ evidence: [describe the evidence, not just the guess]
192
+ C) Escalate for human review — needs domain knowledge I don't have
193
+ ```
194
+ Option A is almost always correct. B requires citing specific
195
+ evidence, not speculation.
196
+
197
+ **Red flags** — slow down if you see:
198
+ - "Quick fix for now" — there is no "for now."
199
+ - Proposing a fix before tracing data flow — guessing.
200
+ - Each fix reveals a new problem elsewhere — wrong layer.
201
+ - "I think it's probably X" — you have an observability gap.
202
+ - Jumping to implementation without asking — investigation produces
203
+ findings, not fixes.
204
+ - "The logs don't show anything useful" — that IS the finding.
205
+
206
+ ---
207
+
208
+ ## Phase 4: Deliver Findings
209
+
210
+ Once root cause is confirmed with evidence, the **default output is a
211
+ task entry on the resolved surface** — not a code fix.
212
+
213
+ ```
214
+ ROOT CAUSE CONFIRMED: [one-line summary with evidence citation]
215
+ Evidence: [log output, reproduction result, code trace]
216
+
217
+ A) Create a task on the resolved surface (graph: work-create;
218
+ .tasks/: write .tasks/<N>-<slug>.md) with root cause, fix scope,
219
+ verification strategy, and observability requirements (RECOMMENDED)
220
+ B) Fix it now — implement the fix in this session
221
+ (only if the user explicitly asked for a fix)
222
+ C) Just the report — document findings, no task, no fix
223
+ ```
224
+
225
+ A is the default. B requires explicit user approval. If no task surface
226
+ exists, A degenerates into C.
227
+
228
+ ### If the user chooses B
229
+
230
+ Investigation is over; this is surgery. Scope discipline is the sprint
231
+ skill's problem from here.
232
+
233
+ 1. Fix the root cause, not the symptom — smallest change that
234
+ eliminates the actual problem.
235
+ 2. Minimal diff — fewest files, fewest lines.
236
+ 3. Regression test that **fails without** the fix and **passes with**
237
+ it.
238
+ 4. Run the full test suite. Paste the output. No regressions.
239
+ 5. If the fix touches >5 files, AskUserQuestion on blast radius:
240
+ ```
241
+ Fix touches N files — large blast radius for a bug fix.
242
+ A) Proceed — root cause genuinely spans these files
243
+ B) Split — fix critical path now, defer the rest
244
+ C) Rethink — maybe a more targeted approach exists
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Phase 5: Verification & Report
250
+
251
+ Reproduce the original bug scenario and confirm it's fixed. Run the
252
+ test suite. Output:
253
+
254
+ ```
255
+ DEBUG REPORT
256
+ ════════════════════════════════════════
257
+ Symptom: [what the user observed]
258
+ Root cause: [what was actually wrong — cite the evidence]
259
+ Evidence: [specific log lines, reproduction output, traces]
260
+ Observability: [sufficient? if not, what gap was found / added]
261
+ Deliverable: [task created on <surface> | fix applied | report only]
262
+ Fix (if applied): [what changed, with file:line refs]
263
+ Regression test: [file:line of new test, or N/A]
264
+ Related: [prior tasks, prior bugs, architectural notes]
265
+ Status: DONE | DONE_WITH_CONCERNS | BLOCKED
266
+ ════════════════════════════════════════
267
+ ```
268
+
269
+ ---
270
+
271
+ ## Important Rules
272
+
273
+ - **Inconclusive evidence = observability failure.** Fix the gap first.
274
+ - **Default deliverable is a task, not a fix.** Only implement if the
275
+ user explicitly said "fix it now."
276
+ - **3+ failed hypotheses → STOP.** Almost certainly observability.
277
+ - **Never apply a fix you cannot verify.**
278
+ - **Never say "this should fix it."** Verify and prove it.
279
+ - **Fix touches >5 files → AskUserQuestion** on blast radius.
280
+ - **Completion status:**
281
+ - DONE — root cause confirmed with evidence; task created (or fix
282
+ applied if requested)
283
+ - DONE_WITH_CONCERNS — root cause identified, evidence partial;
284
+ observability gap flagged for follow-up
285
+ - BLOCKED — root cause unclear due to insufficient observability;
286
+ instrumentation task created