@haposoft/cafekit 0.16.6 → 0.18.0
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/README.md +14 -22
- package/bin/__tests__/codex-hooks-ownership.test.js +2 -2
- package/bin/__tests__/codex-hooks.test.js +0 -36
- package/bin/__tests__/codex-native.test.js +46 -88
- package/bin/__tests__/develop-contract.test.js +26 -57
- package/bin/__tests__/docs-sync-on-demand.test.js +93 -0
- package/bin/__tests__/grok-envelope.test.js +0 -56
- package/bin/__tests__/hook-payload.test.js +4 -6
- package/bin/__tests__/legacy-authority-decoupled.test.js +159 -0
- package/bin/__tests__/legacy-hooks-retired.test.js +221 -0
- package/bin/__tests__/omp-bridge.test.js +20 -17
- package/bin/__tests__/omp-hooks.test.js +0 -19
- package/bin/__tests__/optional-skill-inventory.test.js +112 -4
- package/bin/__tests__/orca-session.test.js +0 -2
- package/bin/__tests__/package-inventory.test.js +100 -541
- package/bin/__tests__/runtime-dir.test.js +0 -3
- package/bin/__tests__/runtime-schema.test.js +3 -2
- package/bin/__tests__/skill-routing-source.test.js +27 -15
- package/bin/__tests__/spec-narrowing.test.js +0 -27
- package/bin/__tests__/specs-v2-execution-closeout.test.js +4 -69
- package/bin/__tests__/ui-ux-skill.test.js +101 -0
- package/bin/__tests__/usage-hook-retired.test.js +114 -0
- package/bin/__tests__/validator-grounding.test.js +9 -28
- package/bin/phases/codex-runtime.js +24 -0
- package/bin/phases/omp-runtime.js +22 -0
- package/package.json +1 -1
- package/src/claude/CLAUDE.md +3 -10
- package/src/claude/agents/brainstormer.md +7 -3
- package/src/claude/agents/code-auditor.md +35 -50
- package/src/claude/agents/debugger.md +5 -79
- package/src/claude/agents/deployer.md +3 -5
- package/src/claude/agents/docs-keeper.md +2 -7
- package/src/claude/agents/implementer.md +6 -9
- package/src/claude/agents/inspector.md +2 -3
- package/src/claude/agents/project-manager.md +7 -15
- package/src/claude/agents/researcher.md +9 -3
- package/src/claude/agents/spec-maker.md +11 -11
- package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -1
- package/src/claude/hooks/__tests__/spec-gate.test.js +112 -3
- package/src/claude/hooks/__tests__/spec-state-touched.test.js +134 -0
- package/src/claude/hooks/__tests__/state.test.js +68 -0
- package/src/claude/hooks/__tests__/statusline.test.js +140 -11
- package/src/claude/hooks/agent.cjs +2 -1
- package/src/claude/hooks/lib/context.cjs +0 -89
- package/src/claude/hooks/lib/hook-payload.cjs +2 -2
- package/src/claude/hooks/rules.cjs +2 -1
- package/src/claude/hooks/session.cjs +0 -1
- package/src/claude/hooks/spec-gate.cjs +18 -28
- package/src/claude/hooks/spec-state.cjs +95 -1
- package/src/claude/hooks/state.cjs +21 -2
- package/src/claude/migration-manifest.json +30 -15
- package/src/claude/rules/ai-dev-rules.md +1 -1
- package/src/claude/rules/hook-protocols.md +8 -15
- package/src/claude/rules/manage-docs.md +9 -23
- package/src/claude/rules/orchestrator.md +3 -4
- package/src/claude/rules/review-audit-self-decision.md +3 -3
- package/src/claude/rules/skill-domain-routing.md +1 -3
- package/src/claude/rules/skill-workflow-routing.md +4 -5
- package/src/claude/rules/state-sync.md +3 -12
- package/src/claude/rules/workflow.md +10 -18
- package/src/claude/runtime.schema.json +5 -3
- package/src/claude/scripts/generate-skill-catalog.cjs +7 -6
- package/src/claude/scripts/provenance.cjs +23 -5
- package/src/claude/scripts/spec-receipt.cjs +52 -6
- package/src/claude/scripts/spec-resolver.cjs +1 -2
- package/src/claude/scripts/validate-spec-output.cjs +5 -32
- package/src/claude/scripts/workflow-policy.cjs +22 -10
- package/src/claude/settings/settings.json +1 -32
- package/src/claude/skills/{question → ask}/SKILL.md +9 -75
- package/src/claude/skills/brainstorm/SKILL.md +43 -131
- package/src/claude/skills/code-review/SKILL.md +48 -17
- package/src/claude/skills/code-review/references/spec-compliance-review.md +2 -3
- package/src/claude/skills/code-review/references/verification-gate.md +22 -27
- package/src/claude/skills/debug/SKILL.md +29 -149
- package/src/claude/skills/develop/SKILL.md +27 -36
- package/src/claude/skills/develop/references/parallel-waves.md +0 -8
- package/src/claude/skills/develop/references/quality-gate.md +15 -13
- package/src/claude/skills/docs/SKILL.md +2 -2
- package/src/claude/skills/docs/references/update-workflow.md +1 -1
- package/src/claude/skills/fix/SKILL.md +153 -0
- package/src/claude/skills/{hotfix → fix}/references/diagnosis-protocol.md +2 -2
- package/src/claude/skills/{hotfix → fix}/references/parallel-patterns.md +2 -2
- package/src/claude/skills/{hotfix → fix}/references/prevention-gate.md +3 -3
- package/src/claude/skills/{hotfix → fix}/references/review-cycle.md +1 -1
- package/src/claude/skills/git/SKILL.md +48 -9
- package/src/claude/skills/git/references/commit-protocols.md +35 -16
- package/src/claude/skills/git/references/worktree-blueprint.md +42 -6
- package/src/claude/skills/orca/SKILL.md +9 -8
- package/src/claude/skills/research/SKILL.md +2 -0
- package/src/claude/skills/scout/SKILL.md +61 -0
- package/src/claude/skills/{inspect → scout}/references/internal-inspection.md +26 -10
- package/src/claude/skills/specs/SKILL.md +22 -29
- package/src/claude/skills/specs/references/review.md +8 -6
- package/src/claude/skills/specs/references/templates.md +38 -44
- package/src/claude/skills/sync/SKILL.md +8 -15
- package/src/claude/skills/sync/references/rebind-and-audit.md +59 -0
- package/src/claude/skills/sync/references/sync-protocols.md +4 -13
- package/src/claude/skills/test/SKILL.md +22 -3
- package/src/claude/skills/test/references/execution-strategy.md +83 -0
- package/src/claude/skills/test/references/failure-triage.md +1 -1
- package/src/claude/skills/ui-ux/LICENSE +21 -0
- package/src/claude/skills/ui-ux/SKILL.md +497 -0
- package/src/claude/skills/ui-ux/references/brand-tokens.md +90 -0
- package/src/claude/skills/ui-ux/references/budgets.md +113 -0
- package/src/claude/skills/ui-ux/references/checklist.md +271 -0
- package/src/claude/skills/ui-ux/references/components/accordion.md +246 -0
- package/src/claude/skills/ui-ux/references/components/avatar.md +153 -0
- package/src/claude/skills/ui-ux/references/components/banner.md +43 -0
- package/src/claude/skills/ui-ux/references/components/breadcrumb.md +201 -0
- package/src/claude/skills/ui-ux/references/components/button.md +142 -0
- package/src/claude/skills/ui-ux/references/components/card.md +113 -0
- package/src/claude/skills/ui-ux/references/components/charts.md +376 -0
- package/src/claude/skills/ui-ux/references/components/chat.md +132 -0
- package/src/claude/skills/ui-ux/references/components/choice-controls.md +369 -0
- package/src/claude/skills/ui-ux/references/components/comment-thread.md +17 -0
- package/src/claude/skills/ui-ux/references/components/description-list.md +116 -0
- package/src/claude/skills/ui-ux/references/components/empty-state.md +98 -0
- package/src/claude/skills/ui-ux/references/components/file-upload.md +107 -0
- package/src/claude/skills/ui-ux/references/components/inline-edit.md +128 -0
- package/src/claude/skills/ui-ux/references/components/input.md +161 -0
- package/src/claude/skills/ui-ux/references/components/list-row.md +56 -0
- package/src/claude/skills/ui-ux/references/components/loading.md +198 -0
- package/src/claude/skills/ui-ux/references/components/logo.md +147 -0
- package/src/claude/skills/ui-ux/references/components/otp-input.md +43 -0
- package/src/claude/skills/ui-ux/references/components/quantity-input.md +100 -0
- package/src/claude/skills/ui-ux/references/components/range-slider.md +16 -0
- package/src/claude/skills/ui-ux/references/components/small-controls.md +340 -0
- package/src/claude/skills/ui-ux/references/components/sortable-header.md +86 -0
- package/src/claude/skills/ui-ux/references/components/tag-input.md +14 -0
- package/src/claude/skills/ui-ux/references/components/timeline.md +38 -0
- package/src/claude/skills/ui-ux/references/components/tree.md +30 -0
- package/src/claude/skills/ui-ux/references/design-process.md +650 -0
- package/src/claude/skills/ui-ux/references/layouts/app-kanban.html +303 -0
- package/src/claude/skills/ui-ux/references/layouts/app.md +1369 -0
- package/src/claude/skills/ui-ux/references/layouts/form.md +430 -0
- package/src/claude/skills/ui-ux/references/layouts/overlay.md +552 -0
- package/src/claude/skills/ui-ux/references/layouts/pricing.md +204 -0
- package/src/claude/skills/ui-ux/references/locked-rules.md +35 -0
- package/src/claude/skills/ui-ux/references/principles.md +408 -0
- package/src/claude/skills/ui-ux/references/refactor.md +245 -0
- package/src/claude/skills/ui-ux/references/responsive.md +195 -0
- package/src/claude/skills/ui-ux/references/review.md +528 -0
- package/src/claude/skills/ui-ux/references/rules-color.md +623 -0
- package/src/claude/skills/ui-ux/references/rules-form.md +235 -0
- package/src/claude/skills/ui-ux/references/rules-state.md +680 -0
- package/src/claude/skills/ui-ux/references/rules-type.md +369 -0
- package/src/claude/skills/ui-ux/references/styles.md +311 -0
- package/src/claude/skills/ui-ux/references/system.md +219 -0
- package/src/claude/skills/ui-ux/references/tailwind-v4-traps.md +237 -0
- package/src/claude/skills/ui-ux/references/tokens.css +362 -0
- package/src/claude/skills/ui-ux/scripts/lint-skill.mjs +216 -0
- package/src/claude/skills/ui-ux/scripts/package.json +9 -0
- package/src/claude/skills/ui-ux/scripts/probe.mjs +4447 -0
- package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
- package/src/claude/status.cjs +149 -144
- package/src/codex/AGENTS.md +8 -13
- package/src/codex/hooks/agent.cjs +2 -1
- package/src/codex/hooks/lib/spec-receipt.cjs +5 -0
- package/src/codex/hooks/lib/spec-utils.cjs +0 -7
- package/src/codex/hooks/rules.cjs +2 -1
- package/src/codex/hooks/session.cjs +0 -2
- package/src/codex/hooks/spec-gate.cjs +8 -18
- package/src/codex/hooks.json +0 -20
- package/src/codex/rules/state-sync.md +3 -12
- package/src/common/AGENTS.md +2 -2
- package/src/omp/extensions/cafekit-bridge.mjs +6 -6
- package/src/claude/hooks/__tests__/completion-authority.test.js +0 -990
- package/src/claude/hooks/__tests__/semantic-review-authority.test.js +0 -259
- package/src/claude/hooks/completion-authority-check.cjs +0 -56
- package/src/claude/hooks/completion-authority-state.cjs +0 -527
- package/src/claude/hooks/completion-authority.cjs +0 -163
- package/src/claude/hooks/semantic-review-authority.cjs +0 -154
- package/src/claude/hooks/task-scaffold-guard.cjs +0 -114
- package/src/claude/hooks/usage.cjs +0 -197
- package/src/claude/skills/delegate/SKILL.md +0 -124
- package/src/claude/skills/delegate/references/codex-delegation.md +0 -71
- package/src/claude/skills/delegate/references/grok-delegation.md +0 -84
- package/src/claude/skills/hotfix/SKILL.md +0 -289
- package/src/claude/skills/inspect/SKILL.md +0 -142
- package/src/claude/skills/loop/SKILL.md +0 -114
- package/src/claude/skills/loop/references/bounded-loop-protocol.md +0 -104
- package/src/claude/skills/loop/references/metric-and-guard-contract.md +0 -76
- package/src/claude/skills/route/SKILL.md +0 -94
- package/src/claude/skills/route/references/agent-timing.md +0 -46
- package/src/claude/skills/route/references/chaining-patterns.md +0 -53
- package/src/claude/skills/route/references/task-taxonomy.md +0 -48
- package/src/codex/hooks/completion-authority-check.cjs +0 -67
- package/src/codex/hooks/completion-authority-state.cjs +0 -527
- package/src/codex/hooks/completion-authority.cjs +0 -109
- package/src/codex/hooks/semantic-review-authority.cjs +0 -130
- package/src/codex/hooks/task-scaffold-guard.cjs +0 -63
- /package/src/claude/skills/{question → ask}/templates/question.md +0 -0
- /package/src/claude/skills/{hotfix → fix}/references/escalation-tactics.md +0 -0
- /package/src/claude/skills/{hotfix → fix}/references/workflow-specialized.md +0 -0
|
@@ -16,164 +16,61 @@ Debugging is diagnosis, not repair. Find the source of the failure before changi
|
|
|
16
16
|
|
|
17
17
|
## Arguments
|
|
18
18
|
|
|
19
|
-
- `--quick` -
|
|
20
|
-
- `--ci` -
|
|
21
|
-
- `--frontend` -
|
|
22
|
-
- `--perf` -
|
|
19
|
+
- `--quick` - obvious local syntax, lint, type, or single-test failure
|
|
20
|
+
- `--ci` - CI/CD logs, runner environment, dependency versions, pipeline setup
|
|
21
|
+
- `--frontend` - browser console, screenshot, accessibility tree, network, responsive checks
|
|
22
|
+
- `--perf` - baseline measurements, bottleneck layer, profiling, before/after targets
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Flags are optional hints. Without one, choose the depth yourself from the evidence below.
|
|
25
25
|
|
|
26
26
|
## Proportional depth
|
|
27
27
|
|
|
28
|
-
- **Quick/local:** one deterministic syntax, lint, type, or isolated-test failure.
|
|
28
|
+
- **Quick/local:** one deterministic syntax, lint, type, or isolated-test failure.
|
|
29
|
+
- **Standard:** a reproducible failure inside one component or service that fits neither other depth.
|
|
29
30
|
- **Incident/deep:** production impact, multiple components, intermittent behavior, data/security risk, environment drift, concurrency, or two refuted hypotheses. Add a cross-source timeline, explicit elimination path, trigger/root-cause/contributing-factor separation, and recurrence-prevention gaps.
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
Quick/local and Standard reports write the root-cause contract, the confirmed hypothesis, the verification plan, and the fix direction; when the root cause is unknown, they list every hypothesis tested instead. Only Incident/deep reports add `Evidence Timeline`, the other hypotheses tested, `### Elimination Path`, and `### Recurrence-Prevention Handoff`. A shorter report omits those sections; it does not write them as skipped.
|
|
33
|
+
|
|
34
|
+
Depth changes evidence breadth and report length, never the standards below, the diagnostic-only gate, or the root-cause standard. Do not make a routine local failure perform incident ceremony merely because more tools are available.
|
|
32
35
|
|
|
33
36
|
<DIAGNOSTIC-ONLY-GATE>
|
|
34
37
|
`cf:debug` is read-only for product code.
|
|
35
38
|
Do NOT edit product code, apply fixes, create migrations, or add regression tests as implementation.
|
|
36
39
|
Do NOT change config, dependency versions, generated assets, or test snapshots to make the failure disappear.
|
|
40
|
+
Do NOT run heavy or costly reads — table scans, bulk exports, load or stress runs — against shared staging or production without the user's explicit permission; prefer local or fixture data.
|
|
37
41
|
Temporary instrumentation is allowed only when it is the minimal way to observe hidden state; record the file/line, capture the proof, remove it before finishing, and report `Temporary instrumentation: removed`.
|
|
38
42
|
</DIAGNOSTIC-ONLY-GATE>
|
|
39
43
|
|
|
40
44
|
<HARD-GATE-SCOUT-FIRST>
|
|
41
45
|
Before hypotheses, inspect the actual codebase context.
|
|
42
|
-
You must identify
|
|
43
|
-
- project type, language, framework, runtime, and test runner
|
|
44
|
-
- affected files/modules and exact symptom location
|
|
45
|
-
- direct callers, dependents, and data/config boundaries
|
|
46
|
-
- related tests and reproduction commands
|
|
47
|
-
- recent commits touching affected paths
|
|
48
|
-
- adjacent known-good implementation patterns
|
|
49
|
-
|
|
46
|
+
You must identify the project type, language, framework, runtime, and test runner; the affected files/modules and exact symptom location; direct callers, dependents, and data/config boundaries; related tests and reproduction commands; recent commits touching affected paths; and adjacent known-good implementation patterns.
|
|
50
47
|
After scout, provide a 3-6 bullet codebase-context summary before evidence capture.
|
|
51
48
|
Do not ask generic questions before this step unless the issue cannot be located from the prompt or repository.
|
|
52
49
|
</HARD-GATE-SCOUT-FIRST>
|
|
53
50
|
|
|
54
51
|
<ROOT-CAUSE-GATE>
|
|
55
52
|
Do NOT recommend a fix until the root-cause contract is complete.
|
|
56
|
-
Do NOT stop at the first plausible explanation. Test hypotheses against evidence.
|
|
53
|
+
Do NOT stop at the first plausible explanation unless evidence directly confirms it. Test hypotheses against evidence.
|
|
57
54
|
If 2+ hypotheses are refuted, change strategy before continuing.
|
|
58
55
|
If evidence is insufficient, report `Root cause: unknown`, `Missing Evidence`, and `Next Diagnostic Action`; do not hand off to `cf:fix` as ready.
|
|
56
|
+
Report confidence `high` only when the cause was reproduced or observed at runtime — the failing command run, a log or probe read. From static reading alone, report at most `medium`.
|
|
59
57
|
Answer each item in one concrete sentence.
|
|
60
58
|
If any answer contains 'probably', 'I think', 'something with', or 'maybe' — it is not an answer; gather evidence instead.
|
|
61
59
|
</ROOT-CAUSE-GATE>
|
|
62
60
|
|
|
63
|
-
If the user asks to fix while still inside `cf:debug`, finish the debug report first. Then hand off only the completed root-cause contract to `cf:fix`.
|
|
64
|
-
|
|
65
|
-
## Process Flow
|
|
66
|
-
|
|
67
|
-
```mermaid
|
|
68
|
-
flowchart TD
|
|
69
|
-
A[Issue Input] --> B[Step 1: Scout via cf:scout]
|
|
70
|
-
B --> C[Step 2: Capture Evidence]
|
|
71
|
-
C --> D[Step 3: Pattern Analysis]
|
|
72
|
-
D --> E[Step 4: Hypothesis Tests]
|
|
73
|
-
E --> F[Step 5: Root Cause Trace]
|
|
74
|
-
F --> G[Step 6: Verification + Prevention Handoff]
|
|
75
|
-
G --> H[Diagnostic Report]
|
|
76
|
-
H --> I{Fix requested?}
|
|
77
|
-
I -->|Yes| J[Hand off to cf:fix]
|
|
78
|
-
I -->|No| K[Stop after diagnosis]
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**This diagram is the authoritative workflow.** `cf:debug` stops at diagnosis unless the user explicitly asks to fix.
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Step 1: Scout
|
|
86
|
-
|
|
87
|
-
Understand the affected code before forming hypotheses.
|
|
88
|
-
|
|
89
|
-
**Action:** Activate `cf:scout` for the relevant scope.
|
|
90
|
-
If `cf:scout` is unavailable, use direct read-only reconnaissance (`rg`, file reads, test discovery, and `git log`) and state that fallback.
|
|
91
|
-
|
|
92
|
-
**Checklist:**
|
|
93
|
-
- [ ] Project type, language, framework, runtime, and test runner identified
|
|
94
|
-
- [ ] Affected files and modules identified
|
|
95
|
-
- [ ] Direct dependencies and call paths mapped
|
|
96
|
-
- [ ] Inputs/outputs, data boundaries, and config/env boundaries mapped
|
|
97
|
-
- [ ] Related tests located
|
|
98
|
-
- [ ] Recent changes checked: `git log --oneline -10 -- <affected-files>`
|
|
99
|
-
- [ ] Existing working examples or adjacent patterns identified
|
|
100
|
-
|
|
101
|
-
**Output:** `✓ Step 1: Scouted - [N] files, [M] deps, [K] tests` plus a 3-6 bullet context summary.
|
|
102
|
-
|
|
103
|
-
---
|
|
61
|
+
`cf:debug` stops at diagnosis unless the user explicitly asks to fix. If the user asks to fix while still inside `cf:debug`, finish the debug report first. Then hand off only the completed root-cause contract to `cf:fix`.
|
|
104
62
|
|
|
105
|
-
##
|
|
63
|
+
## Standards
|
|
106
64
|
|
|
107
|
-
|
|
65
|
+
**Scout.** Invoke the `scout` skill (`cf:scout`) for the affected scope and fold its findings into the codebase-context summary the scout-first gate requires, including `git log --oneline -10 -- <affected-files>`. If `cf:scout` is not installed, use direct read-only reconnaissance (`rg`, file reads, test discovery, and `git log`) and say so.
|
|
108
66
|
|
|
109
|
-
**Capture
|
|
110
|
-
- Exact command, URL, user flow, or trigger
|
|
111
|
-
- Exact error message, stack trace, failing assertion, or visual symptom
|
|
112
|
-
- Expected vs actual behavior
|
|
113
|
-
- Relevant logs with timestamps
|
|
114
|
-
- Environment facts: runtime, dependency versions, OS, browser, CI runner, config
|
|
115
|
-
- Whether the issue reproduces consistently or intermittently
|
|
116
|
-
|
|
117
|
-
For Incident/deep work, build an `Evidence Timeline` from timestamped facts across relevant sources. Normalize timezones, preserve request/trace/run IDs, and distinguish observed ordering from inferred causation. Quick/local work records `Timeline: skipped - local deterministic failure`.
|
|
118
|
-
|
|
119
|
-
For frontend issues, use `.claude/references/debugger/frontend-verification.md`.
|
|
120
|
-
For CI/log issues, use `.claude/references/debugger/log-ci-analysis.md`.
|
|
121
|
-
For performance issues, use `.claude/references/debugger/performance-diagnostics.md`.
|
|
122
|
-
|
|
123
|
-
**Output:** `✓ Step 2: Evidence captured - baseline command/symptom recorded`
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Step 3: Pattern Analysis
|
|
128
|
-
|
|
129
|
-
Before proposing a cause, compare against known-good patterns.
|
|
130
|
-
|
|
131
|
-
**Check:**
|
|
132
|
-
- Similar implementation that works
|
|
133
|
-
- Similar tests that pass
|
|
134
|
-
- Recent code that changed the same contract
|
|
135
|
-
- Config/env differences between passing and failing contexts
|
|
136
|
-
- Dependency/API contract changes
|
|
137
|
-
|
|
138
|
-
**Output:** `✓ Step 3: Patterns compared - [working reference] vs [failing path]`
|
|
139
|
-
|
|
140
|
-
---
|
|
67
|
+
**Evidence baseline.** Capture what can later prove whether the issue changed: the exact command, URL, user flow, or trigger; the exact error, stack trace, failing assertion, or visual symptom; expected vs actual behavior; relevant logs with timestamps; environment facts (runtime, dependency versions, OS, browser, CI runner, config); and whether it reproduces consistently or intermittently. For Incident/deep work, build an `Evidence Timeline` from timestamped facts across relevant sources. Normalize timezones, preserve request/trace/run IDs, and distinguish observed ordering from inferred causation. When no source carries timestamps, the timeline says so in one line and names the sources checked. For frontend issues, use `.claude/references/debugger/frontend-verification.md`; for CI/log issues, `.claude/references/debugger/log-ci-analysis.md`; for performance issues, `.claude/references/debugger/performance-diagnostics.md`.
|
|
141
68
|
|
|
142
|
-
|
|
69
|
+
**Known-good comparison.** Before proposing a cause, compare against known-good patterns: a similar implementation that works, similar tests that pass, recent code that changed the same contract, config/env differences between passing and failing contexts, and dependency/API contract changes.
|
|
143
70
|
|
|
144
|
-
|
|
71
|
+
**Hypotheses.** When evidence does not directly confirm the first explanation, create 2-3 competing hypotheses. Test one variable at a time, each stated as `Hypothesis:`, `Confirm if:` (evidence that proves it), `Refute if:` (evidence that disproves it), `Quick test:` (command/search/log/query), and `Result: confirmed | refuted | inconclusive`. Never batch unrelated changes as a test. Prefer read-only evidence: logs, grep, stack traces, DB queries, browser traces. For flaky async tests, use `.claude/references/debugger/condition-based-waiting.md`. If 2+ hypotheses are refuted, use inversion: ask what evidence would make the current explanation impossible. Preserve an elimination path: for every confirmed, refuted, or inconclusive hypothesis, cite the observation and explain why it changes the candidate set. Quick/local and Standard reports fold it into the confirmed hypothesis's evidence; only Incident/deep reports write it under `### Elimination Path`.
|
|
145
72
|
|
|
146
|
-
|
|
147
|
-
Hypothesis: [statement]
|
|
148
|
-
Confirm if: [evidence that proves it]
|
|
149
|
-
Refute if: [evidence that disproves it]
|
|
150
|
-
Quick test: [command/search/log/query]
|
|
151
|
-
Result: confirmed | refuted | inconclusive
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Rules:
|
|
155
|
-
- Never batch unrelated changes as a test.
|
|
156
|
-
- Prefer read-only evidence: logs, grep, stack traces, DB queries, browser traces.
|
|
157
|
-
- For flaky async tests, use `.claude/references/debugger/condition-based-waiting.md`.
|
|
158
|
-
- If 2+ hypotheses are refuted, use inversion: ask what evidence would make the current explanation impossible.
|
|
159
|
-
- Preserve an elimination path: for every confirmed, refuted, or inconclusive hypothesis, cite the observation and explain why it changes the candidate set.
|
|
160
|
-
|
|
161
|
-
**Output:** `✓ Step 4: Hypotheses tested - [confirmed/refuted counts]`
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Step 5: Root Cause Trace
|
|
166
|
-
|
|
167
|
-
Trace backward from symptom to origin.
|
|
168
|
-
|
|
169
|
-
```text
|
|
170
|
-
Symptom
|
|
171
|
-
<- immediate cause
|
|
172
|
-
<- contributing factor
|
|
173
|
-
<- ROOT CAUSE
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
**Exact root-cause contract:**
|
|
73
|
+
**Root cause.** Trace backward from the symptom through the immediate cause and contributing factors to the root cause, and complete the exact root-cause contract:
|
|
177
74
|
- Symptom: exact observable failure
|
|
178
75
|
- Reproduction: command/user flow/log trigger
|
|
179
76
|
- Expected vs actual behavior
|
|
@@ -186,35 +83,18 @@ Symptom
|
|
|
186
83
|
|
|
187
84
|
Do not collapse correlation into causation. The root cause must explain the mechanism from trigger to symptom and identify the earliest owned invariant whose correction would prevent recurrence. Read `.claude/references/debugger/root-cause-tracing.md` for deep call/data flow or test-pollution cases.
|
|
188
85
|
|
|
189
|
-
**
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## Step 6: Blast Radius + Verification And Prevention Plan
|
|
194
|
-
|
|
195
|
-
Prepare the handoff to `cf:fix` or the user.
|
|
196
|
-
|
|
197
|
-
**Verification plan must include:**
|
|
198
|
-
- Original failing command or reproduction path
|
|
199
|
-
- Targeted regression test or scenario
|
|
200
|
-
- Affected-module tests
|
|
201
|
-
- Typecheck/lint/build commands when relevant
|
|
202
|
-
- UI screenshot/console/network checks when relevant
|
|
203
|
-
- Side-effect sweep from `.claude/references/debugger/side-effect-gate.md`
|
|
204
|
-
|
|
205
|
-
For Incident/deep work, add recurrence-prevention candidates: missing invariant or validation layer, observability/alerting gap, and one regression scenario. These are evidence-backed handoff directions only; `cf:debug` does not implement them.
|
|
206
|
-
|
|
207
|
-
**Output:** `✓ Step 6: Verification planned - [commands/scenarios]`
|
|
208
|
-
|
|
209
|
-
---
|
|
86
|
+
**Verification and prevention plan.** Prepare the handoff to `cf:fix` or the user. Verification plan must include: the original failing command or reproduction path; a targeted regression test or scenario; affected-module tests; typecheck/lint/build commands when relevant; UI screenshot/console/network checks when relevant; and the side-effect sweep from `.claude/references/debugger/side-effect-gate.md`. For Incident/deep work, add recurrence-prevention candidates: missing invariant or validation layer, observability/alerting gap, and one regression scenario. These are evidence-backed handoff directions only; `cf:debug` does not implement them.
|
|
210
87
|
|
|
211
88
|
## Diagnostic Report Format
|
|
212
89
|
|
|
90
|
+
Open the final answer with `## Debug Report` in this shape, keeping only the sections its depth requires under Proportional depth. Write `Temporary Instrumentation` only when instrumentation was added, and `Missing Evidence` and `Next Diagnostic Action` only when the root cause is unknown.
|
|
91
|
+
|
|
213
92
|
```markdown
|
|
214
93
|
## Debug Report
|
|
215
94
|
|
|
216
95
|
**Issue:** [one-line summary]
|
|
217
96
|
**Mode:** quick | standard | ci | frontend | perf
|
|
97
|
+
**Depth:** quick/local | standard | incident/deep
|
|
218
98
|
**Root cause confidence:** high | medium | low | unknown
|
|
219
99
|
|
|
220
100
|
### Root Cause Contract
|
|
@@ -229,12 +109,12 @@ For Incident/deep work, add recurrence-prevention candidates: missing invariant
|
|
|
229
109
|
- Evidence chain:
|
|
230
110
|
- Blast radius:
|
|
231
111
|
|
|
232
|
-
### Evidence Timeline
|
|
233
|
-
- skipped: [reason] | [timestamp/source/id/event]
|
|
234
|
-
|
|
235
112
|
### Hypotheses Tested
|
|
236
113
|
1. [confirmed/refuted/inconclusive] [hypothesis] - [evidence]
|
|
237
114
|
|
|
115
|
+
### Evidence Timeline
|
|
116
|
+
- [timestamp/source/id/event]
|
|
117
|
+
|
|
238
118
|
### Elimination Path
|
|
239
119
|
- [candidate removed or retained] - [decisive observation]
|
|
240
120
|
|
|
@@ -249,7 +129,7 @@ For Incident/deep work, add recurrence-prevention candidates: missing invariant
|
|
|
249
129
|
- Regression scenario:
|
|
250
130
|
|
|
251
131
|
### Temporary Instrumentation
|
|
252
|
-
-
|
|
132
|
+
- removed: [file:line, purpose, proof captured]
|
|
253
133
|
|
|
254
134
|
### Recommended Fix Direction
|
|
255
135
|
[Smallest root-cause fix, or "insufficient evidence"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cf:develop
|
|
3
|
-
description: "Implement an explicitly requested process-first feature or task, run its real verification, and close it with one evidence owner.
|
|
3
|
+
description: "Implement an explicitly requested process-first feature or task, run its real verification, and close it with one evidence owner."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
when_to_use: "Use to implement a ready feature packet, one named task, or a clear low-risk change."
|
|
6
6
|
category: utilities
|
|
@@ -42,7 +42,7 @@ The pair exits `2` before a task edit, receipt, worktree, subagent, or commit. D
|
|
|
42
42
|
## Resolve the work packet
|
|
43
43
|
|
|
44
44
|
1. Resolve one `specs/<feature>/plan.md` plus flat `task-NN-*.md`; an explicit task path wins.
|
|
45
|
-
2. Read
|
|
45
|
+
2. Read GATE-SCOPE scope, exclusions, acceptance mapping, ownership, and task order.
|
|
46
46
|
3. A task is unblocked only when every named dependency is `done` with a valid current inline Receipt.
|
|
47
47
|
4. Without a packet, work directly only when the change is clear, isolated, reversible, and low-risk.
|
|
48
48
|
|
|
@@ -50,16 +50,16 @@ Ambiguity, overlapping ownership, a dependency cycle, or a missing Verification
|
|
|
50
50
|
|
|
51
51
|
### Accepted process-first fast path
|
|
52
52
|
|
|
53
|
-
When line two is `Specs-Contract: process-first-ready-v1`, reuse the accepted
|
|
53
|
+
When line two is `Specs-Contract: process-first-ready-v1`, reuse the accepted GATE-SCOPE/GATE-REVIEW.
|
|
54
54
|
Perform only a narrow freshness scout for target revision, scope drift, ownership
|
|
55
|
-
conflict, and dependency/state changes. Reopen
|
|
56
|
-
do not research, replan, or add a routine user gate before a real blocker or
|
|
55
|
+
conflict, and dependency/state changes. Reopen GATE-SCOPE only for evidenced scope drift;
|
|
56
|
+
do not research, replan, or add a routine user gate before a real blocker or GATE-DONE.
|
|
57
57
|
This is a source instruction contract, not a parser/runtime or live-model guarantee;
|
|
58
58
|
live-model adherence is `[UNVERIFIED]` without a host invocation.
|
|
59
59
|
|
|
60
60
|
Load the plan index into working context once. Later byte rereads are narrow drift
|
|
61
61
|
checks; load only the active task's referenced coverage-profile rows, Outcome,
|
|
62
|
-
Scope, Ownership, Acceptance, Dependencies, Verification Plan, owned code, and consumers.
|
|
62
|
+
Scope, Ownership, Steps, Acceptance, Dependencies, Verification Plan, Failure Protocol, owned code, and consumers.
|
|
63
63
|
|
|
64
64
|
## Current-byte selection
|
|
65
65
|
|
|
@@ -78,7 +78,7 @@ before any Status or Receipt write.
|
|
|
78
78
|
| Status is missing, duplicate, or unknown | Stop as malformed state. | Stop as malformed state. |
|
|
79
79
|
|
|
80
80
|
Feature mode repeats this selection only after the current task closes. Specific-task
|
|
81
|
-
mode never touches a sibling and returns after its successful sync without chaining or
|
|
81
|
+
mode never touches a sibling and returns after its successful sync without chaining or GATE-DONE.
|
|
82
82
|
|
|
83
83
|
## Modes
|
|
84
84
|
|
|
@@ -95,25 +95,20 @@ isolated worktrees, a bounded wave, and one controller writer; otherwise work se
|
|
|
95
95
|
|
|
96
96
|
### Flash (`--flash`)
|
|
97
97
|
|
|
98
|
-
Flash is an explicit speed trade-off, never completion:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
- stop this invocation without chaining.
|
|
106
|
-
|
|
107
|
-
Only a later explicit non-Flash invocation may recover the task. It treats Flash
|
|
108
|
-
output as ephemeral, inspects current bytes and the owned diff, and obtains fresh
|
|
109
|
-
canonical proof through the trusted sync-finalize path. Never weaken, delete, or
|
|
110
|
-
rewrite tests to make Flash look complete.
|
|
98
|
+
Load `references/quality-gate.md`. Flash is an explicit speed trade-off, never completion: run a
|
|
99
|
+
cheap preflight, skip dedicated tests, keep `Status: in_progress` with `FLASH_UNVERIFIED` and the
|
|
100
|
+
blocker `awaiting /cf:test <feature>`, do not unblock dependents or report PASS, and
|
|
101
|
+
stop this invocation without chaining.
|
|
102
|
+
Only a later explicit non-Flash invocation may recover the task.
|
|
103
|
+
It treats Flash output as ephemeral, inspects current bytes and the owned diff, and obtains fresh
|
|
104
|
+
canonical proof through the trusted sync-finalize path. Never weaken, delete, or rewrite tests to make Flash look complete.
|
|
111
105
|
|
|
112
106
|
## Task cycle
|
|
113
107
|
|
|
114
108
|
### 1. Scout
|
|
115
109
|
|
|
116
110
|
Trace entrypoints, callers, dependents, registration, errors, and owned files.
|
|
111
|
+
Read the test or probe that will judge this task before implementing against it.
|
|
117
112
|
Compilation does not prove an unmounted UI, unregistered route, uncalled service,
|
|
118
113
|
or missing consumer.
|
|
119
114
|
|
|
@@ -124,8 +119,11 @@ mutation. Resume only unmet work, then run fresh verification.
|
|
|
124
119
|
|
|
125
120
|
### 2. Implement
|
|
126
121
|
|
|
122
|
+
Unless under `--flash` or the command costs money or writes artifacts, run the task's exact Verification Plan command once before changing anything and expect it to fail; this pre-change run is not a repair round.
|
|
123
|
+
Passing before any change, outside a resumed task, means the plan cannot judge the work and is a blocker; so is a failure naming something other than the unmet Acceptance, which is a blocker to raise, not a defect to work around while implementing. A failure from the command itself — a wrong path, a missing tool or module, the environment — is BLOCKED, not FAIL, even when the runner reports `not ok` and even when the Acceptance or a test file shows the right command: set the task's single `Status:` to `blocked` with a `Blocker:` line naming the command and its error, write no Receipt, revert any edit made in this run, and report; you may suggest a corrected command for the plan, but never run it as proof.
|
|
124
|
+
|
|
127
125
|
Honor Scope, Ownership, Acceptance, and Dependencies. Do not silently replace named contracts;
|
|
128
|
-
scope expansion requires evidence and a return to
|
|
126
|
+
scope expansion requires evidence and a return to GATE-SCOPE, not implementation convenience.
|
|
129
127
|
Load `references/subagent-patterns.md` when dispatch helps; only the controller writes Status or Receipt.
|
|
130
128
|
|
|
131
129
|
### 3. Verify, review, and close
|
|
@@ -134,12 +132,14 @@ The test owner executes each exact Verification Plan and records real output. Th
|
|
|
134
132
|
review owner evaluates correctness, security, scope, and reachability without
|
|
135
133
|
manufacturing proof. Use `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`; only literal PASS can close.
|
|
136
134
|
|
|
137
|
-
Load `references/quality-gate.md`. Remediate an observed failure, then rerun only
|
|
138
|
-
affected proof/review. Do not blind-retry a blocked environment.
|
|
139
|
-
repair
|
|
135
|
+
Load `references/quality-gate.md`. Remediate an observed failure (a blocked Command is not a failure to remediate), then rerun only
|
|
136
|
+
affected proof/review. Do not blind-retry a blocked environment. One repair round is one
|
|
137
|
+
observed failure plus its repair and rerun, from proof or from review alike. After three
|
|
138
|
+
failed repair rounds, stop and ask the user.
|
|
140
139
|
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
**The Receipt is written last, after proof and review have both passed**; writing it earlier
|
|
141
|
+
and reopening the task is a defect, not a shortcut. After a real pass, the controller writes the task's final inline `## Receipt` with
|
|
142
|
+
`Verification: PASS`, exact `Command`, `Exit: 0`, `Base:` and `Head:` copied from the `Base` and `Head` fields of `node .claude/scripts/provenance.cjs --project-root . --specs-root specs --spec-file <task file> --feature-name <feature> --session <any label> --json` run after the last change outside the specs root (never typed or computed by hand),
|
|
143
143
|
non-empty current output, and required negative/reachability/artifact proof; then it
|
|
144
144
|
sets `Status: done` and only implemented checkboxes. Missing, stale, contradictory,
|
|
145
145
|
zero-test, placeholder, marker-only, skipped, or remembered proof is unfinished.
|
|
@@ -148,7 +148,7 @@ zero-test, placeholder, marker-only, skipped, or remembered proof is unfinished.
|
|
|
148
148
|
|
|
149
149
|
Reread the task after sync and recompute the queue from current bytes. Specific-task
|
|
150
150
|
mode has already returned. Full-feature mode continues one task at a time, then runs
|
|
151
|
-
the named feature-level integration and reachability checks. Before
|
|
151
|
+
the named feature-level integration and reachability checks. Before GATE-DONE, apply the
|
|
152
152
|
quality-gate final-Head fixed point; show current evidence and limitations, and let
|
|
153
153
|
the user decide completion.
|
|
154
154
|
|
|
@@ -167,12 +167,3 @@ stable Base/Head binding, resolved blocking review findings, and no scope substi
|
|
|
167
167
|
- `references/parallel-waves.md` — opt-in isolated worktree waves.
|
|
168
168
|
- `references/subagent-patterns.md` — task-local briefs and controller-only handoff.
|
|
169
169
|
- `references/implementation-notes-template.html` — only with `--notes`.
|
|
170
|
-
|
|
171
|
-
## Legacy workflow compatibility
|
|
172
|
-
|
|
173
|
-
If the selected feature contains `spec.json`, use its persisted `workflow_policy`,
|
|
174
|
-
`task_registry`, nested task paths, typed boundaries, separate task receipts, and
|
|
175
|
-
feature closeout receipt exactly as legacy adapters require. Preserve `planning_depth`,
|
|
176
|
-
`assurance_level`, derived lane, and read-only `execution_tier`; do not project these
|
|
177
|
-
fields into a new v3 packet. Keep JSON and Markdown status synchronized, and use the
|
|
178
|
-
existing completion-authority path for final closeout.
|
|
@@ -70,11 +70,3 @@ After the final wave, run feature integration and reachability proof. The contro
|
|
|
70
70
|
then writes inline Receipts and Status one task at a time. Worker reports and range
|
|
71
71
|
metadata are inputs, not completion authority; incomplete workers cannot be hidden
|
|
72
72
|
by successful siblings.
|
|
73
|
-
|
|
74
|
-
## Legacy workflow compatibility
|
|
75
|
-
|
|
76
|
-
For an existing `spec.json` feature, readiness and dependencies come from the
|
|
77
|
-
persisted `task_registry` and typed `coordination.boundaries`. Workers still do
|
|
78
|
-
not edit that state. The controller writes the legacy separate task receipt,
|
|
79
|
-
synchronizes registry plus nested task Markdown, and creates the required final
|
|
80
|
-
feature receipt only after integrated proof.
|
|
@@ -26,7 +26,10 @@ Before completion, verify:
|
|
|
26
26
|
4. negative/failure behavior named by Acceptance;
|
|
27
27
|
5. artifact bytes and SHA-256 when the task declares an artifact;
|
|
28
28
|
6. an inline `## Receipt` with `Verification: PASS`, exact `Command`, `Exit: 0`,
|
|
29
|
-
runtime-bound Base/Head, and non-empty fenced command output;
|
|
29
|
+
runtime-bound Base/Head, and non-empty fenced command output; take Base and Head
|
|
30
|
+
from the `Base` and `Head` fields printed by
|
|
31
|
+
`node .claude/scripts/provenance.cjs --project-root . --specs-root specs --spec-file <task file> --feature-name <feature> --session <any label> --json`,
|
|
32
|
+
run after the last change outside the specs root, and never type, abbreviate, or compute them by hand;
|
|
30
33
|
7. correctness/security/scope review at the required depth.
|
|
31
34
|
|
|
32
35
|
`PRECHECK_FAIL` outranks no-tests. Missing, pending, placeholder, contradictory,
|
|
@@ -74,19 +77,25 @@ manufacture a green result.
|
|
|
74
77
|
|
|
75
78
|
## Final-Head fixed point
|
|
76
79
|
|
|
77
|
-
Before
|
|
80
|
+
Before GATE-DONE, repeat within the same three-round repair cap:
|
|
78
81
|
|
|
79
82
|
1. Capture runtime Head and list every `done` task whose Receipt is stale or
|
|
80
83
|
bound to a different Head.
|
|
81
84
|
2. Run each stale task's exact proof freshly and let only the controller replace
|
|
82
|
-
its inline Receipt.
|
|
85
|
+
its inline Receipt. A Receipt that declares artifacts with `sha256` may instead be
|
|
86
|
+
rebound to the current Head once every declared hash is recomputed and matches, and only
|
|
87
|
+
when no file the proof reads changed between its recorded Head and the current one and
|
|
88
|
+
every claim in the Receipt is derived from those artifacts; matching bytes prove the
|
|
89
|
+
artifacts did not move, not that the proof would still produce them. Otherwise, and for a
|
|
90
|
+
Receipt with no artifact, re-run; only the controller rebinds.
|
|
91
|
+
If proof changes any non-Specs byte, stop as BLOCKED;
|
|
83
92
|
remediation must settle those bytes before proof can bind them.
|
|
84
93
|
3. Capture runtime Head again and rescan all `done` Receipts.
|
|
85
94
|
|
|
86
95
|
Stop only when consecutive Head captures are identical and every `done` Receipt
|
|
87
96
|
names that current Head. A single pass, remembered result, copied Receipt, or
|
|
88
97
|
proof promoted from another level is not a fixed point. If Head keeps moving or
|
|
89
|
-
the repair cap is reached, report the blocker instead of opening
|
|
98
|
+
the repair cap is reached, report the blocker instead of opening GATE-DONE.
|
|
90
99
|
|
|
91
100
|
## Flash gate
|
|
92
101
|
|
|
@@ -106,16 +115,9 @@ report production readiness. Only a later explicit non-Flash invocation may
|
|
|
106
115
|
recover it: discard Flash output as canonical evidence, inspect current bytes
|
|
107
116
|
and the owned diff, and run fresh proof under the same sync-finalize contract.
|
|
108
117
|
|
|
109
|
-
## Docs impact and
|
|
118
|
+
## Docs impact and GATE-DONE
|
|
110
119
|
|
|
111
120
|
After proof and review, classify docs impact as `none`, `minor`, or `major`.
|
|
112
121
|
Update only affected existing docs when impact is not none. Show the user the
|
|
113
|
-
current command evidence and limitations at
|
|
122
|
+
current command evidence and limitations at GATE-DONE; do not infer approval from a
|
|
114
123
|
receipt.
|
|
115
|
-
|
|
116
|
-
## Legacy workflow compatibility
|
|
117
|
-
|
|
118
|
-
Existing kernel packets keep their separate `receipts/<task-basename>.md`, task
|
|
119
|
-
identity/path metadata, final `feature-receipt.md`, persisted independent-audit
|
|
120
|
-
obligations, and completion-authority checks. The same proof/review ownership
|
|
121
|
-
applies. Do not copy that storage shape into a flat process-first task.
|
|
@@ -125,7 +125,7 @@ Create the standard project docs set from the current source code.
|
|
|
125
125
|
Use when:
|
|
126
126
|
- the repository has code but no useful docs
|
|
127
127
|
- the user asks to create project docs
|
|
128
|
-
-
|
|
128
|
+
- `echo '{}' | node .claude/hooks/docs-sync.cjs` reports missing documentation
|
|
129
129
|
|
|
130
130
|
Load:
|
|
131
131
|
- `references/standard-docs-workflow.md`
|
|
@@ -138,7 +138,7 @@ Refresh existing docs after code changes.
|
|
|
138
138
|
Use when:
|
|
139
139
|
- docs exist and source code changed
|
|
140
140
|
- the user asks to update or refresh docs
|
|
141
|
-
- docs-sync reports stale docs
|
|
141
|
+
- `echo '{}' | node .claude/hooks/docs-sync.cjs` reports stale docs
|
|
142
142
|
|
|
143
143
|
Load:
|
|
144
144
|
- `references/standard-docs-workflow.md`
|
|
@@ -24,7 +24,7 @@ Refresh existing living docs after code or project-state changes without rewriti
|
|
|
24
24
|
4. Identify update focus:
|
|
25
25
|
- user-named module or doc
|
|
26
26
|
- recent source diff
|
|
27
|
-
- docs-sync stale hash signal
|
|
27
|
+
- docs-sync stale hash signal (run `echo '{}' | node .claude/hooks/docs-sync.cjs` from the project root)
|
|
28
28
|
- a full docs refresh only when user asks for it
|
|
29
29
|
|
|
30
30
|
### Phase 1: Source Change Scout
|