@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.
- package/package.json +1 -1
- package/payload/platform/config/brand.json +3 -1
- package/payload/platform/plugins/admin/PLUGIN.md +3 -0
- package/payload/platform/plugins/admin/skills/investigate/SKILL.md +286 -0
- package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +361 -0
- package/payload/platform/plugins/admin/skills/task/SKILL.md +283 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +2 -1
- package/payload/platform/plugins/docs/references/internals.md +0 -2
- package/payload/platform/plugins/docs/references/investigate-and-task-skills.md +9 -0
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/server/public/assets/AdminShell-DPk5UgEJ.js +1 -0
- package/payload/server/public/assets/{Checkbox-DTxJvyG7.js → Checkbox-Bh3kwzxP.js} +1 -1
- package/payload/server/public/assets/{admin-tKgLki8m.js → admin-BWzKAudL.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CrQJbK3h.js → architectureDiagram-Q4EWVU46-Boys2mT1.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BLCbhL8K.js → blockDiagram-DXYQGD6D-CvHqp46r.js} +1 -1
- package/payload/server/public/assets/{brand-lZz3OVIE.css → brand-VQtREmts.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-X34EilDe.js → c4Diagram-AHTNJAMY-DiNQ95F6.js} +1 -1
- package/payload/server/public/assets/channel-BgwH_qhE.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-CeRuGBQ2.js → chunk-336JU56O-9nS9-05M.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-CUZOrcMu.js → chunk-426QAEUC-B2__9lRY.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-CdrIHRcy.js → chunk-4TB4RGXK-R5F8rS0Z.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CenIbTIp.js → chunk-5FUZZQ4R-B8HhJce-.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-DGfzIUel.js → chunk-5PVQY5BW-Bjb08lbL.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-DSft5oIH.js → chunk-EDXVE4YY-he0qCF3s.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-Dn8FFfaI.js → chunk-ENJZ2VHE-BTArFW5l.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-JrwcKV7r.js → chunk-ICPOFSXX-CoyIL4q_.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-C0X2fcAm.js → chunk-OYMX7WX6-DjLEhNFe.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-DPdLe-f5.js → chunk-U2HBQHQK-tac2uvW1.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-Bw8pKkFu.js → chunk-X2U36JSP-DIWD9i88.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-DcAJR-EA.js → chunk-YZCP3GAM-Ac7ogADz.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DU374ZbR.js → chunk-ZZ45TVLE-QgqDaY9-.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CwdV1-c8.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CS_jtevB.js +1 -0
- package/payload/server/public/assets/clone-BTishuSs.js +1 -0
- package/payload/server/public/assets/{dagre-DisbqNSB.js → dagre-D6qN4nkK.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-D_n7R7V9.js → dagre-KV5264BT-C6TRKOg0.js} +1 -1
- package/payload/server/public/assets/data-CaZbNF-j.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-CJID_5OR.js → diagram-5BDNPKRD-BVk_J8Pt.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-ByepjvdE.js → diagram-G4DWMVQ6-BdV1IgwS.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DTkAHPHE.js → diagram-MMDJMWI5-OsvBkN6u.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CnVRa9NJ.js → diagram-TYMM5635-BQmKPyrb.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-CRAGu7nV.js → erDiagram-SMLLAGMA-ChEx5_3C.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BJusdlRz.js → flowDiagram-DWJPFMVM-B7sf6AG3.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BFMOBBnF.js → ganttDiagram-T4ZO3ILL-DbpSraax.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CGWEzh7u.js → gitGraphDiagram-UUTBAWPF-BnxDElDh.js} +1 -1
- package/payload/server/public/assets/{graph-D-iQdRDk.js → graph-CBP5yppq.js} +2 -2
- package/payload/server/public/assets/{graph-labels-u2_3Eyfh.js → graph-labels-BsZNScfa.js} +1 -1
- package/payload/server/public/assets/{graphlib-DNUvypOi.js → graphlib-Dux06enE.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-CBDrnRTc.js → infoDiagram-42DDH7IO-BLWb6oKx.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-C7NwSQo_.js → ishikawaDiagram-UXIWVN3A-AFiRuE6G.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DSaP7A3F.js → journeyDiagram-VCZTEJTY-CxHBRGGu.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DmixHCD4.js → kanban-definition-6JOO6SKY-CGugF0N8.js} +1 -1
- package/payload/server/public/assets/{line-CGGoTheL.js → line-COFloj-X.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-BudFADW7.js → mermaid-parser.core-CxXuCDQf.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-BBbdJxXY.js → mermaid.core-BRBNvNup.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CUiD9km1.js → mindmap-definition-QFDTVHPH-DarW5Wwq.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BlAWpMr8.js → pieDiagram-DEJITSTG-CTokFAkN.js} +1 -1
- package/payload/server/public/assets/{public-CjeEF2vf.js → public-Bq-eOUu9.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CXmIwc4W.js → quadrantDiagram-34T5L4WZ-BNawkg3I.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-D_7_OeMC.js → requirementDiagram-MS252O5E-CWnO56oR.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BKm_PqzT.js → sankeyDiagram-XADWPNL6-D9c-EZfV.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CBSR0Zst.js → sequenceDiagram-FGHM5R23-In5lxCT5.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CHNpT69M.js → stateDiagram-FHFEXIEX-CYb5js-u.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-z-TVJfRt.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CxZoew5-.js → timeline-definition-GMOUNBTQ-Cje-BY9v.js} +1 -1
- package/payload/server/public/assets/{useSelectionMode-CwxXQzEI.js → useSelectionMode-B_2EQ2CC.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-CKJdFDcG.js → vennDiagram-DHZGUBPP-BqeuoPr1.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-C-XBcm-g.js → wardleyDiagram-NUSXRM2D-DE7xAnoq.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Crb-ZtaP.js → xychartDiagram-5P7HB3ND-JE4x8YEZ.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +221 -296
- package/payload/server/public/assets/AdminShell-DtABh34v.js +0 -1
- package/payload/server/public/assets/channel-ChZECiuj.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BpMBCYn6.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BU3HoIr1.js +0 -1
- package/payload/server/public/assets/clone-C3j5j6ku.js +0 -1
- package/payload/server/public/assets/data-DwY26t_T.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Kc8XO6yH.js +0 -1
- /package/payload/server/public/assets/{brand-CpGp9OyK.js → brand-CzeO4m4J.js} +0 -0
package/package.json
CHANGED
|
@@ -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
|