@rune-kit/rune 2.10.0 → 2.11.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.
Files changed (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -6
  3. package/commands/rune.md +168 -168
  4. package/contexts/dev.md +34 -34
  5. package/contexts/research.md +43 -43
  6. package/contexts/review.md +55 -55
  7. package/extensions/ai-ml/PACK.md +88 -88
  8. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  9. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  10. package/extensions/ai-ml/skills/deep-research.md +146 -146
  11. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  12. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  13. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  14. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  15. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  16. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  17. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  18. package/extensions/analytics/PACK.md +92 -92
  19. package/extensions/analytics/skills/ab-testing.md +72 -72
  20. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  21. package/extensions/analytics/skills/data-validation.md +68 -68
  22. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  23. package/extensions/analytics/skills/sql-patterns.md +57 -57
  24. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  25. package/extensions/analytics/skills/tracking-setup.md +71 -71
  26. package/extensions/backend/PACK.md +104 -104
  27. package/extensions/backend/skills/api-patterns.md +84 -84
  28. package/extensions/backend/skills/async-pipeline.md +193 -193
  29. package/extensions/backend/skills/auth-patterns.md +97 -97
  30. package/extensions/backend/skills/background-jobs.md +133 -133
  31. package/extensions/backend/skills/caching-patterns.md +108 -108
  32. package/extensions/backend/skills/cli-generation.md +133 -133
  33. package/extensions/backend/skills/database-patterns.md +87 -87
  34. package/extensions/backend/skills/middleware-patterns.md +104 -104
  35. package/extensions/chrome-ext/PACK.md +93 -93
  36. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  37. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  38. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  39. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  40. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  41. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  42. package/extensions/content/PACK.md +96 -96
  43. package/extensions/content/skills/blog-patterns.md +88 -88
  44. package/extensions/content/skills/cms-integration.md +131 -131
  45. package/extensions/content/skills/content-scoring.md +107 -107
  46. package/extensions/content/skills/i18n.md +83 -83
  47. package/extensions/content/skills/mdx-authoring.md +137 -137
  48. package/extensions/content/skills/reference.md +1014 -1014
  49. package/extensions/content/skills/seo-patterns.md +67 -67
  50. package/extensions/content/skills/video-repurpose.md +153 -153
  51. package/extensions/devops/PACK.md +101 -101
  52. package/extensions/devops/skills/chaos-testing.md +67 -67
  53. package/extensions/devops/skills/ci-cd.md +75 -75
  54. package/extensions/devops/skills/docker.md +58 -58
  55. package/extensions/devops/skills/edge-serverless.md +163 -163
  56. package/extensions/devops/skills/infra-as-code.md +158 -158
  57. package/extensions/devops/skills/kubernetes.md +110 -110
  58. package/extensions/devops/skills/monitoring.md +57 -57
  59. package/extensions/devops/skills/server-setup.md +64 -64
  60. package/extensions/devops/skills/ssl-domain.md +42 -42
  61. package/extensions/ecommerce/PACK.md +116 -116
  62. package/extensions/ecommerce/skills/cart-system.md +79 -79
  63. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  64. package/extensions/ecommerce/skills/order-management.md +126 -126
  65. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  66. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  67. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  68. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  69. package/extensions/gamedev/PACK.md +142 -142
  70. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  71. package/extensions/gamedev/skills/audio-system.md +129 -129
  72. package/extensions/gamedev/skills/camera-system.md +87 -87
  73. package/extensions/gamedev/skills/ecs.md +98 -98
  74. package/extensions/gamedev/skills/game-loops.md +72 -72
  75. package/extensions/gamedev/skills/input-system.md +199 -199
  76. package/extensions/gamedev/skills/multiplayer.md +180 -180
  77. package/extensions/gamedev/skills/particles.md +105 -105
  78. package/extensions/gamedev/skills/physics-engine.md +89 -89
  79. package/extensions/gamedev/skills/scene-management.md +146 -146
  80. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  81. package/extensions/gamedev/skills/webgl.md +71 -71
  82. package/extensions/mobile/PACK.md +106 -106
  83. package/extensions/mobile/skills/app-store-connect.md +152 -152
  84. package/extensions/mobile/skills/app-store-prep.md +66 -66
  85. package/extensions/mobile/skills/deep-linking.md +109 -109
  86. package/extensions/mobile/skills/flutter.md +60 -60
  87. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  88. package/extensions/mobile/skills/native-bridge.md +66 -66
  89. package/extensions/mobile/skills/ota-updates.md +97 -97
  90. package/extensions/mobile/skills/push-notifications.md +111 -111
  91. package/extensions/mobile/skills/react-native.md +82 -82
  92. package/extensions/saas/PACK.md +116 -116
  93. package/extensions/saas/skills/billing-integration.md +200 -200
  94. package/extensions/saas/skills/feature-flags.md +130 -130
  95. package/extensions/saas/skills/multi-tenant.md +103 -103
  96. package/extensions/saas/skills/onboarding-flow.md +139 -139
  97. package/extensions/saas/skills/subscription-flow.md +95 -95
  98. package/extensions/saas/skills/team-management.md +144 -144
  99. package/extensions/security/PACK.md +99 -99
  100. package/extensions/security/skills/api-security.md +140 -140
  101. package/extensions/security/skills/compliance.md +68 -68
  102. package/extensions/security/skills/owasp-audit.md +64 -64
  103. package/extensions/security/skills/pentest-patterns.md +77 -77
  104. package/extensions/security/skills/secret-mgmt.md +65 -65
  105. package/extensions/security/skills/supply-chain.md +65 -65
  106. package/extensions/trading/PACK.md +80 -80
  107. package/extensions/trading/skills/chart-components.md +55 -55
  108. package/extensions/trading/skills/experiment-loop.md +125 -125
  109. package/extensions/trading/skills/fintech-patterns.md +47 -47
  110. package/extensions/trading/skills/indicator-library.md +58 -58
  111. package/extensions/trading/skills/quant-analysis.md +111 -111
  112. package/extensions/trading/skills/realtime-data.md +58 -58
  113. package/extensions/trading/skills/trade-logic.md +104 -104
  114. package/extensions/ui/PACK.md +130 -130
  115. package/extensions/ui/skills/a11y-audit.md +91 -91
  116. package/extensions/ui/skills/animation-patterns.md +127 -127
  117. package/extensions/ui/skills/component-patterns.md +100 -100
  118. package/extensions/ui/skills/design-decision.md +108 -108
  119. package/extensions/ui/skills/design-system.md +68 -68
  120. package/extensions/ui/skills/landing-patterns.md +155 -155
  121. package/extensions/ui/skills/palette-picker.md +173 -173
  122. package/extensions/ui/skills/react-health.md +90 -90
  123. package/extensions/ui/skills/type-system.md +125 -125
  124. package/extensions/ui/skills/web-vitals.md +153 -153
  125. package/extensions/zalo/PACK.md +145 -145
  126. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  127. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  128. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  129. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  130. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  131. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  132. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  133. package/hooks/auto-format/index.cjs +48 -48
  134. package/hooks/hooks.json +111 -111
  135. package/hooks/post-session-reflect/index.cjs +189 -189
  136. package/hooks/pre-compact/index.cjs +95 -95
  137. package/hooks/run-hook.cmd +1 -1
  138. package/hooks/secrets-scan/index.cjs +100 -100
  139. package/hooks/session-start/index.cjs +71 -71
  140. package/hooks/typecheck/index.cjs +65 -65
  141. package/package.json +63 -63
  142. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  143. package/references/ui-pro-max-data/charts.csv +26 -26
  144. package/references/ui-pro-max-data/colors.csv +161 -161
  145. package/references/ui-pro-max-data/styles.csv +68 -68
  146. package/references/ui-pro-max-data/typography.csv +74 -74
  147. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  148. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  149. package/skills/adversary/SKILL.md +283 -283
  150. package/skills/asset-creator/SKILL.md +157 -157
  151. package/skills/audit/SKILL.md +147 -2
  152. package/skills/autopsy/SKILL.md +335 -335
  153. package/skills/brainstorm/SKILL.md +342 -342
  154. package/skills/browser-pilot/SKILL.md +168 -168
  155. package/skills/constraint-check/SKILL.md +165 -165
  156. package/skills/context-engine/SKILL.md +404 -404
  157. package/skills/cook/SKILL.md +917 -863
  158. package/skills/db/SKILL.md +273 -273
  159. package/skills/debug/SKILL.md +465 -465
  160. package/skills/dependency-doctor/SKILL.md +265 -235
  161. package/skills/deploy/SKILL.md +274 -231
  162. package/skills/design/DESIGN-REFERENCE.md +365 -365
  163. package/skills/design/SKILL.md +589 -589
  164. package/skills/doc-processor/SKILL.md +254 -254
  165. package/skills/docs/SKILL.md +374 -374
  166. package/skills/docs-seeker/SKILL.md +177 -177
  167. package/skills/fix/SKILL.md +330 -330
  168. package/skills/git/SKILL.md +339 -339
  169. package/skills/hallucination-guard/SKILL.md +219 -219
  170. package/skills/incident/SKILL.md +254 -253
  171. package/skills/integrity-check/SKILL.md +169 -169
  172. package/skills/journal/SKILL.md +240 -240
  173. package/skills/launch/SKILL.md +344 -344
  174. package/skills/logic-guardian/SKILL.md +251 -251
  175. package/skills/marketing/SKILL.md +290 -289
  176. package/skills/mcp-builder/SKILL.md +425 -425
  177. package/skills/neural-memory/SKILL.md +362 -362
  178. package/skills/onboard/SKILL.md +404 -403
  179. package/skills/perf/SKILL.md +346 -346
  180. package/skills/plan/SKILL.md +433 -428
  181. package/skills/preflight/SKILL.md +415 -415
  182. package/skills/problem-solver/SKILL.md +380 -284
  183. package/skills/rescue/SKILL.md +474 -474
  184. package/skills/retro/SKILL.md +3 -1
  185. package/skills/review/SKILL.md +612 -588
  186. package/skills/review-intake/SKILL.md +249 -249
  187. package/skills/safeguard/SKILL.md +200 -200
  188. package/skills/sast/SKILL.md +190 -190
  189. package/skills/scaffold/SKILL.md +328 -287
  190. package/skills/scope-guard/SKILL.md +180 -180
  191. package/skills/scout/SKILL.md +263 -263
  192. package/skills/sentinel/SKILL.md +382 -381
  193. package/skills/sentinel-env/SKILL.md +254 -254
  194. package/skills/sequential-thinking/SKILL.md +234 -234
  195. package/skills/session-bridge/SKILL.md +543 -543
  196. package/skills/skill-forge/SKILL.md +581 -581
  197. package/skills/skill-router/SKILL.md +3 -0
  198. package/skills/surgeon/SKILL.md +215 -215
  199. package/skills/team/SKILL.md +556 -537
  200. package/skills/test/SKILL.md +614 -614
  201. package/skills/trend-scout/SKILL.md +145 -145
  202. package/skills/verification/SKILL.md +326 -326
  203. package/skills/video-creator/SKILL.md +201 -201
  204. package/skills/watchdog/SKILL.md +168 -168
  205. package/skills/worktree/SKILL.md +140 -140
@@ -1,330 +1,330 @@
1
- ---
2
- name: fix
3
- description: Apply code changes and fixes. Writes implementation code, applies bug fixes, and verifies changes with tests. Core action hub in the development mesh.
4
- metadata:
5
- author: runedev
6
- version: "0.9.0"
7
- layer: L2
8
- model: sonnet
9
- group: development
10
- tools: "Read, Write, Edit, Bash, Glob, Grep"
11
- emit: code.changed
12
- listen: bug.diagnosed, review.issues, preflight.blocked, security.blocked
13
- ---
14
-
15
- # fix
16
-
17
- ## Purpose
18
-
19
- Apply code changes. Fix receives a plan, debug finding, or review finding and writes the actual code. It does NOT investigate root causes — that is rune:debug's job. Fix is the action hub: locate, change, verify, report.
20
-
21
- <HARD-GATE>
22
- Never change test files to make tests pass unless the tests themselves are provably wrong (wrong expected value, wrong test setup, testing a removed API). The rule: fix the CODE, not the TESTS.
23
- If unsure whether the test is wrong or the implementation is wrong → call `rune:debug` to investigate.
24
- </HARD-GATE>
25
-
26
- ## Triggers
27
-
28
- - Called by `cook` Phase 4 IMPLEMENT — write code to pass tests
29
- - Called by `debug` when root cause found and fix is ready
30
- - Called by `review` when bugs found during review
31
- - `/rune fix <issue>` — manual fix application
32
- - Auto-trigger: after successful debug diagnosis
33
-
34
- ## Calls (outbound)
35
-
36
- - `debug` (L2): when root cause unclear before fixing — need diagnosis first
37
- - `test` (L2): verify fix with tests after applying changes
38
- - `review` (L2): self-review for complex or risky fixes
39
- - `verification` (L3): validate fix doesn't break existing functionality
40
- - `docs-seeker` (L3): check correct API usage before applying changes
41
- - `hallucination-guard` (L3): verify imports after code changes
42
- - `scout` (L2): find related code before applying changes
43
- - `neural-memory` (L3): after fix verified — capture fix pattern (cause → solution)
44
-
45
- ## Called By (inbound)
46
-
47
- - `cook` (L1): Phase 4 IMPLEMENT — apply code changes
48
- - `debug` (L2): root cause found, ready to apply fix
49
- - `review` (L2): bug found during review, needs fixing
50
- - `surgeon` (L2): apply refactoring changes
51
- - `review-intake` (L2): apply fixes identified during structured review intake
52
-
53
- ## Cross-Hub Connections
54
-
55
- - `fix` ↔ `debug` — bidirectional: debug diagnoses → fix applies, fix can't determine cause → debug investigates
56
- - `fix` → `test` — after applying fix, run tests to verify
57
- - `fix` ← `review` — review finds bug → fix applies correction
58
- - `fix` → `review` — complex fix requests self-review
59
-
60
- ## Execution
61
-
62
- ### Step 1: Understand
63
-
64
- Read and fully understand the fix request before touching any file.
65
-
66
- - Read the incoming request: debug report, plan spec, or review finding
67
- - Identify what is broken or missing and what the expected behavior should be
68
- - If the request is ambiguous or root cause is unclear → call `rune:debug` before proceeding
69
- - Note the scope: single function, single file, or multi-file change
70
-
71
- ### Step 1b: Recovery Policy Matrix
72
-
73
- Before locating code, classify the incoming error/task into a recovery category to determine the right fix strategy. This prevents wasting effort on the wrong approach.
74
-
75
- | Error Type | Recovery Action | Strategy |
76
- |------------|----------------|----------|
77
- | `INPUT_REQUIRED` — missing user input, ambiguous spec | **PROMPT_USER** | Return NEEDS_CONTEXT with specific questions. Do NOT guess. |
78
- | `INPUT_INVALID` — wrong format, type mismatch, encoding | **AUTO_FIX** | Fix at validation layer. Add schema validation (Zod/Pydantic) if missing. |
79
- | `TIMEOUT` — operation exceeded time limit | **RETRY** with adjustment | Increase timeout, add retry with exponential backoff, or chunk the operation. |
80
- | `POLICY_BLOCKED` — security gate, lint rule, contract violation | **ABORT** | Do NOT work around the policy. Report to caller with the specific rule that blocked. |
81
- | `PERMISSION_DENIED` — auth failure, file access, API scope | **PROMPT_USER** | Cannot fix permissions programmatically. Report exact permission needed. |
82
- | `DEPENDENCY_ERROR` — missing package, version conflict, broken dep | **AUTO_FIX** | Install missing dep, resolve version conflict, or suggest alternative package. |
83
- | `LOGIC_ERROR` — wrong output, incorrect calculation, bad algorithm | **INVESTIGATE** | Do NOT auto-fix. Call `rune:debug` — logic errors need root cause analysis. |
84
- | `ENVIRONMENT_ERROR` — wrong Node/Python version, missing system dep | **PROMPT_USER** | Report exact version/tool needed. Agent cannot change system environment. |
85
-
86
- **Decision flow**:
87
- 1. Read the incoming diagnosis/error
88
- 2. Classify into one of the 8 error types above
89
- 3. Apply the recovery action — this determines whether to proceed (AUTO_FIX, RETRY), ask (PROMPT_USER), stop (ABORT), or re-diagnose (INVESTIGATE)
90
- 4. Announce: "Recovery policy: {error_type} → {action}"
91
-
92
- **Why**: Without a recovery matrix, fix attempts the same strategy (read → change → test) for every error type. A POLICY_BLOCKED error doesn't need code reading — it needs the policy reported. An INPUT_REQUIRED error doesn't need debugging — it needs a question asked. Matching strategy to error type eliminates wasted cycles.
93
-
94
- ### Step 2: Locate
95
-
96
- Find the exact files and lines to change.
97
-
98
- - Use `rune:scout` to locate the relevant files, functions, and surrounding code
99
- - Use `Read` to examine the specific file:line identified in the debug report or plan
100
- - Use `Glob` to find related files: types, tests, config that may also need updating
101
- - Map all touch points before writing a single line of code
102
-
103
- ### Step 3: Change
104
-
105
- Apply the minimal set of changes needed.
106
-
107
- - Use `Edit` for targeted modifications to existing files
108
- - Use `Write` only when creating a genuinely new file is required
109
- - Follow project conventions: naming, immutability patterns, error handling style
110
- - Keep changes minimal — fix the stated problem, do not refactor unrelated code (YAGNI)
111
- - Never use `any` in TypeScript; never use bare `except:` in Python
112
- - If a new import is needed → note it for Step 5 hallucination-guard check
113
-
114
- ### Step 4: Verify
115
-
116
- Confirm the change works and nothing is broken.
117
-
118
- - Use `Bash` to run the relevant tests: the specific failing test first, then the full suite
119
- - If tests fail after the fix:
120
- - Investigate with `rune:debug` (max 3 debug loops before escalating)
121
- - Do NOT change test files to make tests pass — fix the implementation code
122
- - If project has a type-check command, run it via `Bash`
123
- - If project has a lint command, run it via `Bash`
124
-
125
- ### Step 4.5: Quality Decay Check (Self-Regulation)
126
-
127
- When fix is called repeatedly (e.g., by cook Phase 4, or iterative fix loops), track a **WTF-likelihood score** — the probability that continued fixing is making things worse.
128
-
129
- **Compute every 3 fix attempts** (or when called 5+ times in a single cook session):
130
-
131
- | Signal | Score Adjustment |
132
- |--------|-----------------|
133
- | A fix was reverted (any test that passed now fails) | +15% |
134
- | Fix touched >3 files (blast radius expanding) | +5% per extra file beyond 3 |
135
- | 15+ fixes already applied in this session | +1% per fix beyond 15 |
136
- | All remaining issues are LOW severity | +10% |
137
- | Fix touched files outside the original diagnosis scope | +20% |
138
- | Consecutive fixes without running tests between them | +10% |
139
-
140
- **Thresholds:**
141
- - **>20% WTF-likelihood**: STOP fixing. Report current state to cook/user with: "Quality decay detected — continued fixes risk introducing more bugs than they resolve. {N} fixes applied, {score}% risk. Recommend: commit current progress, re-assess remaining issues."
142
- - **Hard cap: 30 fixes per session** — regardless of score. After 30, STOP and report.
143
-
144
- **Reset conditions:** WTF-likelihood resets to 0% when:
145
- - User explicitly says "continue fixing"
146
- - A full test suite run shows zero regressions
147
- - Scope is narrowed to a single file
148
-
149
-
150
- ### Step 5: Post-Fix Hardening (Defense-in-Depth)
151
-
152
- After the fix works, make the bug **structurally impossible** — not just "fixed this time."
153
-
154
- Single validation at one point can be bypassed by different code paths, refactoring, or mocks. Add validation at EVERY layer data passes through:
155
-
156
- | Layer | Purpose | Example |
157
- |-------|---------|---------|
158
- | **Entry Point** | Reject invalid input at API boundary | Validate params not empty/exists/correct type |
159
- | **Business Logic** | Ensure data makes sense for this operation | Check preconditions specific to this function |
160
- | **Environment Guard** | Prevent dangerous ops in specific contexts | In tests: refuse writes outside tmpdir |
161
- | **Debug Instrumentation** | Capture context for forensics if bug recurs | Log stack trace + key values before risky ops |
162
-
163
- Apply this when: the bug was caused by invalid data flowing through multiple layers. Skip for trivial one-liner fixes.
164
-
165
- ### Step 5b: Preserve Debug Instrumentation
166
-
167
- If `rune:debug` left `#region agent-debug` markers in the code:
168
-
169
- 1. **During fix**: DO NOT remove these markers — they capture the investigation trail
170
- 2. **After fix verified** (tests pass, lint pass): scan for `#region agent-debug` markers
171
- 3. **Remove markers and their contents** in a final cleanup pass ONLY after full verification
172
- 4. If the fix is partial or tests still fail → KEEP all markers for the next debug cycle
173
-
174
- **Why:** Premature cleanup of debug instrumentation erases failure history. If the bug recurs after cleanup, the next debug session starts from zero. Keeping markers until verification means downstream skills can see what was already investigated.
175
-
176
- ### Step 6: Self-Review
177
-
178
- Verify correctness of the changes just made.
179
-
180
- - Call `rune:hallucination-guard` to verify all imports introduced or modified are real and correctly named
181
- - Call `rune:docs-seeker` if any external API, library method, or SDK call was added or changed
182
- - For complex or risky fixes (auth, data mutation, async logic): call `rune:review` for a full quality check
183
-
184
- ### Step 6b: Capture Fix Pattern
185
-
186
- Call `neural-memory` (Capture Mode) to save the fix pattern: what broke, why, and how it was fixed. Priority 7 for recurring bugs.
187
-
188
- ### Step 7: Report
189
-
190
- Produce a structured summary of all changes made.
191
-
192
- - List every file modified and a one-line description of what changed
193
- - Include verification results (tests, types, lint)
194
- - Note any follow-up work if the fix is partial or has known limitations
195
-
196
- ## Constraints
197
-
198
- 1. MUST NOT change test files to make tests pass — fix the CODE, not the TESTS
199
- 2. MUST have a diagnosis (from debug or clear error) before applying fixes
200
- 3. MUST run tests after each fix attempt — never batch multiple untested changes
201
- 4. MUST NOT exceed 3 fix attempts — if 3 fixes fail, re-diagnose via rune:debug (which will classify: wrong approach → brainstorm rescue, wrong design → plan redesign)
202
- 5. MUST follow project conventions found by scout — don't invent new patterns
203
- 6. MUST NOT add unplanned features while fixing — fix only what was diagnosed
204
- 7. MUST track fix attempt number — this feeds debug's 3-Fix Escalation classification
205
- 8. MUST preserve `#region agent-debug` markers until fix is fully verified — cleanup only after tests pass
206
-
207
- ## Scope Gate
208
-
209
- | Change Type | Action |
210
- |-------------|--------|
211
- | Bug fix (diagnosed cause) | Fix it |
212
- | Security fix (found during fix) | Fix it + flag to sentinel |
213
- | Blocking issue (can't complete fix without) | Fix it + document in report |
214
- | Unrelated improvement | **STOP — create separate task** |
215
- | Architectural change | **STOP — escalate to cook/plan** |
216
-
217
- If fix requires touching >3 files not in the diagnosis → re-diagnose. You're probably fixing a symptom.
218
-
219
- ## Mesh Gates
220
-
221
- | Gate | Requires | If Missing |
222
- |------|----------|------------|
223
- | Evidence Gate | Debug report OR clear error description before fixing | Run rune:debug first |
224
- | Test Gate | Tests run after each fix attempt | Run tests before claiming fix works |
225
-
226
- ## Output Format
227
-
228
- ```
229
- ## Fix Report
230
- - **Task**: [what was fixed/implemented]
231
- - **Status**: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
232
-
233
- ### Changes
234
- - `path/to/file.ts` — [description of change]
235
- - `path/to/other.ts` — [description of change]
236
-
237
- ### Verification
238
- - Lint: PASS | FAIL
239
- - Types: PASS | FAIL
240
- - Tests: PASS | FAIL ([n] passed, [m] failed)
241
-
242
- ### Concerns (if DONE_WITH_CONCERNS)
243
- - [concern]: [impact assessment] — [suggested remediation]
244
-
245
- ### Context Needed (if NEEDS_CONTEXT)
246
- - [what is unknown]: [why it blocks] — [two most likely answers]
247
-
248
- ### Blocker (if BLOCKED)
249
- - [specific blocker]: [what was attempted]
250
-
251
- ### Notes
252
- - [any caveats or follow-up needed]
253
- ```
254
-
255
- ### Status Protocol (Subagent Contract)
256
-
257
- Fix returns one of four statuses to its caller (cook, debug, review, surgeon). The caller uses this to route next actions.
258
-
259
- | Status | When | Example |
260
- |--------|------|---------|
261
- | `DONE` | Fix applied, tests pass, no issues | Clean bug fix, all green |
262
- | `DONE_WITH_CONCERNS` | Fix works but has side effects or caveats worth noting | "Tests pass but performance regressed 15% — consider optimizing in follow-up" |
263
- | `NEEDS_CONTEXT` | Cannot apply fix without clarification — ambiguous spec or missing info | "Two valid interpretations of the expected behavior — need user input" |
264
- | `BLOCKED` | Hard blocker — exhausted fix attempts, broken dependency, fundamental incompatibility | "3 fix attempts failed — triggering debug escalation" |
265
-
266
- ## Returns
267
-
268
- | Artifact | Format | Location |
269
- |----------|--------|----------|
270
- | Code changes | Source files | Per debug report / plan file paths |
271
- | Fix Report | Markdown (inline) | Emitted to calling skill (cook, debug, review, surgeon) |
272
- | Verification output | Inline (Fix Report) | Lint + types + test results |
273
-
274
- ## Chain Metadata
275
-
276
- Append to Fix Report when invoked standalone. Suppress when called as sub-skill inside an L1 orchestrator (cook, team, etc.) — the orchestrator emits a consolidated block. See `docs/references/chain-metadata.md`.
277
-
278
- ```yaml
279
- chain_metadata:
280
- skill: "rune:fix"
281
- version: "0.9.0"
282
- status: "[DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED]"
283
- domain: "[area fixed]"
284
- files_changed:
285
- - "[list of modified files]"
286
- exports:
287
- fix_applied: { files: ["[paths]"], description: "[what was fixed]" }
288
- verification: { lint: "[PASS/FAIL]", types: "[PASS/FAIL]", tests: "[PASS/FAIL]" }
289
- commit_hash: "[hash if committed]"
290
- suggested_next:
291
- - skill: "rune:test"
292
- reason: "[grounded in changes — e.g., 'Modified 3 files in auth module, edge cases need coverage']"
293
- consumes: ["fix_applied", "verification"]
294
- ```
295
-
296
- ## Sharp Edges
297
-
298
- Known failure modes for this skill. Check these before declaring done.
299
-
300
- | Failure Mode | Severity | Mitigation |
301
- |---|---|---|
302
- | Modifying test files to make tests pass | CRITICAL | HARD-GATE blocks this — fix the code, never the tests (unless test setup is provably wrong) |
303
- | Applying fix without a diagnosis | HIGH | Evidence Gate: need debug report or clear error description before touching code |
304
- | Exceeding 3 fix attempts without re-diagnosing | HIGH | Constraint 4: after 3 failures, call debug again — the hypothesis was wrong |
305
- | Introducing unrelated refactoring while fixing | MEDIUM | YAGNI: fix only what was diagnosed — unrelated changes belong in a separate task |
306
- | Not running tests after each individual change | MEDIUM | Constraint 3: never batch untested changes — run tests after each edit |
307
- | Fixing at crash site without tracing data origin | HIGH | Defense-in-depth: trace where bad data ORIGINATES, add validation at every layer it passes through |
308
- | Single-point validation (fix one spot, hope it holds) | MEDIUM | Step 5: add entry + business logic + environment + debug layers for data-flow bugs |
309
- | Removing debug instrumentation before fix is verified | MEDIUM | Step 5b: preserve `#region agent-debug` markers until all tests pass — premature cleanup erases failure history |
310
- | Runaway fix loop — 20+ fixes without checking quality decay | HIGH | Step 4.5: WTF-likelihood self-regulation. >20% risk = STOP. Hard cap 30 fixes/session. Each fix adds risk — diminishing returns after ~15 |
311
- | Each fix creates a new bug elsewhere — whack-a-mole | CRITICAL | Tight coupling signal. STOP fixing → escalate to debug with note "each fix creates new failure — suspect structural issue". Debug will route to plan for redesign |
312
- | Applying same fix strategy to every error type | MEDIUM | Step 1b Recovery Policy Matrix: classify error type FIRST — POLICY_BLOCKED needs reporting not fixing, INPUT_REQUIRED needs questions not code |
313
-
314
- ## Done When
315
-
316
- - Root cause identified (debug report or clear error received)
317
- - Minimal changes applied targeting only the diagnosed problem
318
- - Tests pass for the fixed functionality (actual output shown)
319
- - Lint and type check pass
320
- - hallucination-guard verified any new imports
321
- - Fix Report emitted with 4-state status, changed files, and verification results
322
- - If `DONE_WITH_CONCERNS`: concerns listed with impact + remediation
323
- - If `NEEDS_CONTEXT`: specific questions stated with two likely answers
324
- - If `BLOCKED`: blocker + all attempted approaches documented
325
-
326
- ## Cost Profile
327
-
328
- ~2000-5000 tokens input, ~1000-3000 tokens output. Sonnet for code writing quality. Most active skill during implementation.
329
-
330
- **Scope guardrail**: Do not refactor unrelated code or create new features beyond the diagnosed fix target unless explicitly delegated by the parent agent.
1
+ ---
2
+ name: fix
3
+ description: Apply code changes and fixes. Writes implementation code, applies bug fixes, and verifies changes with tests. Core action hub in the development mesh.
4
+ metadata:
5
+ author: runedev
6
+ version: "0.9.0"
7
+ layer: L2
8
+ model: sonnet
9
+ group: development
10
+ tools: "Read, Write, Edit, Bash, Glob, Grep"
11
+ emit: code.changed
12
+ listen: bug.diagnosed, review.issues, preflight.blocked, security.blocked
13
+ ---
14
+
15
+ # fix
16
+
17
+ ## Purpose
18
+
19
+ Apply code changes. Fix receives a plan, debug finding, or review finding and writes the actual code. It does NOT investigate root causes — that is rune:debug's job. Fix is the action hub: locate, change, verify, report.
20
+
21
+ <HARD-GATE>
22
+ Never change test files to make tests pass unless the tests themselves are provably wrong (wrong expected value, wrong test setup, testing a removed API). The rule: fix the CODE, not the TESTS.
23
+ If unsure whether the test is wrong or the implementation is wrong → call `rune:debug` to investigate.
24
+ </HARD-GATE>
25
+
26
+ ## Triggers
27
+
28
+ - Called by `cook` Phase 4 IMPLEMENT — write code to pass tests
29
+ - Called by `debug` when root cause found and fix is ready
30
+ - Called by `review` when bugs found during review
31
+ - `/rune fix <issue>` — manual fix application
32
+ - Auto-trigger: after successful debug diagnosis
33
+
34
+ ## Calls (outbound)
35
+
36
+ - `debug` (L2): when root cause unclear before fixing — need diagnosis first
37
+ - `test` (L2): verify fix with tests after applying changes
38
+ - `review` (L2): self-review for complex or risky fixes
39
+ - `verification` (L3): validate fix doesn't break existing functionality
40
+ - `docs-seeker` (L3): check correct API usage before applying changes
41
+ - `hallucination-guard` (L3): verify imports after code changes
42
+ - `scout` (L2): find related code before applying changes
43
+ - `neural-memory` (L3): after fix verified — capture fix pattern (cause → solution)
44
+
45
+ ## Called By (inbound)
46
+
47
+ - `cook` (L1): Phase 4 IMPLEMENT — apply code changes
48
+ - `debug` (L2): root cause found, ready to apply fix
49
+ - `review` (L2): bug found during review, needs fixing
50
+ - `surgeon` (L2): apply refactoring changes
51
+ - `review-intake` (L2): apply fixes identified during structured review intake
52
+
53
+ ## Cross-Hub Connections
54
+
55
+ - `fix` ↔ `debug` — bidirectional: debug diagnoses → fix applies, fix can't determine cause → debug investigates
56
+ - `fix` → `test` — after applying fix, run tests to verify
57
+ - `fix` ← `review` — review finds bug → fix applies correction
58
+ - `fix` → `review` — complex fix requests self-review
59
+
60
+ ## Execution
61
+
62
+ ### Step 1: Understand
63
+
64
+ Read and fully understand the fix request before touching any file.
65
+
66
+ - Read the incoming request: debug report, plan spec, or review finding
67
+ - Identify what is broken or missing and what the expected behavior should be
68
+ - If the request is ambiguous or root cause is unclear → call `rune:debug` before proceeding
69
+ - Note the scope: single function, single file, or multi-file change
70
+
71
+ ### Step 1b: Recovery Policy Matrix
72
+
73
+ Before locating code, classify the incoming error/task into a recovery category to determine the right fix strategy. This prevents wasting effort on the wrong approach.
74
+
75
+ | Error Type | Recovery Action | Strategy |
76
+ |------------|----------------|----------|
77
+ | `INPUT_REQUIRED` — missing user input, ambiguous spec | **PROMPT_USER** | Return NEEDS_CONTEXT with specific questions. Do NOT guess. |
78
+ | `INPUT_INVALID` — wrong format, type mismatch, encoding | **AUTO_FIX** | Fix at validation layer. Add schema validation (Zod/Pydantic) if missing. |
79
+ | `TIMEOUT` — operation exceeded time limit | **RETRY** with adjustment | Increase timeout, add retry with exponential backoff, or chunk the operation. |
80
+ | `POLICY_BLOCKED` — security gate, lint rule, contract violation | **ABORT** | Do NOT work around the policy. Report to caller with the specific rule that blocked. |
81
+ | `PERMISSION_DENIED` — auth failure, file access, API scope | **PROMPT_USER** | Cannot fix permissions programmatically. Report exact permission needed. |
82
+ | `DEPENDENCY_ERROR` — missing package, version conflict, broken dep | **AUTO_FIX** | Install missing dep, resolve version conflict, or suggest alternative package. |
83
+ | `LOGIC_ERROR` — wrong output, incorrect calculation, bad algorithm | **INVESTIGATE** | Do NOT auto-fix. Call `rune:debug` — logic errors need root cause analysis. |
84
+ | `ENVIRONMENT_ERROR` — wrong Node/Python version, missing system dep | **PROMPT_USER** | Report exact version/tool needed. Agent cannot change system environment. |
85
+
86
+ **Decision flow**:
87
+ 1. Read the incoming diagnosis/error
88
+ 2. Classify into one of the 8 error types above
89
+ 3. Apply the recovery action — this determines whether to proceed (AUTO_FIX, RETRY), ask (PROMPT_USER), stop (ABORT), or re-diagnose (INVESTIGATE)
90
+ 4. Announce: "Recovery policy: {error_type} → {action}"
91
+
92
+ **Why**: Without a recovery matrix, fix attempts the same strategy (read → change → test) for every error type. A POLICY_BLOCKED error doesn't need code reading — it needs the policy reported. An INPUT_REQUIRED error doesn't need debugging — it needs a question asked. Matching strategy to error type eliminates wasted cycles.
93
+
94
+ ### Step 2: Locate
95
+
96
+ Find the exact files and lines to change.
97
+
98
+ - Use `rune:scout` to locate the relevant files, functions, and surrounding code
99
+ - Use `Read` to examine the specific file:line identified in the debug report or plan
100
+ - Use `Glob` to find related files: types, tests, config that may also need updating
101
+ - Map all touch points before writing a single line of code
102
+
103
+ ### Step 3: Change
104
+
105
+ Apply the minimal set of changes needed.
106
+
107
+ - Use `Edit` for targeted modifications to existing files
108
+ - Use `Write` only when creating a genuinely new file is required
109
+ - Follow project conventions: naming, immutability patterns, error handling style
110
+ - Keep changes minimal — fix the stated problem, do not refactor unrelated code (YAGNI)
111
+ - Never use `any` in TypeScript; never use bare `except:` in Python
112
+ - If a new import is needed → note it for Step 5 hallucination-guard check
113
+
114
+ ### Step 4: Verify
115
+
116
+ Confirm the change works and nothing is broken.
117
+
118
+ - Use `Bash` to run the relevant tests: the specific failing test first, then the full suite
119
+ - If tests fail after the fix:
120
+ - Investigate with `rune:debug` (max 3 debug loops before escalating)
121
+ - Do NOT change test files to make tests pass — fix the implementation code
122
+ - If project has a type-check command, run it via `Bash`
123
+ - If project has a lint command, run it via `Bash`
124
+
125
+ ### Step 4.5: Quality Decay Check (Self-Regulation)
126
+
127
+ When fix is called repeatedly (e.g., by cook Phase 4, or iterative fix loops), track a **WTF-likelihood score** — the probability that continued fixing is making things worse.
128
+
129
+ **Compute every 3 fix attempts** (or when called 5+ times in a single cook session):
130
+
131
+ | Signal | Score Adjustment |
132
+ |--------|-----------------|
133
+ | A fix was reverted (any test that passed now fails) | +15% |
134
+ | Fix touched >3 files (blast radius expanding) | +5% per extra file beyond 3 |
135
+ | 15+ fixes already applied in this session | +1% per fix beyond 15 |
136
+ | All remaining issues are LOW severity | +10% |
137
+ | Fix touched files outside the original diagnosis scope | +20% |
138
+ | Consecutive fixes without running tests between them | +10% |
139
+
140
+ **Thresholds:**
141
+ - **>20% WTF-likelihood**: STOP fixing. Report current state to cook/user with: "Quality decay detected — continued fixes risk introducing more bugs than they resolve. {N} fixes applied, {score}% risk. Recommend: commit current progress, re-assess remaining issues."
142
+ - **Hard cap: 30 fixes per session** — regardless of score. After 30, STOP and report.
143
+
144
+ **Reset conditions:** WTF-likelihood resets to 0% when:
145
+ - User explicitly says "continue fixing"
146
+ - A full test suite run shows zero regressions
147
+ - Scope is narrowed to a single file
148
+
149
+
150
+ ### Step 5: Post-Fix Hardening (Defense-in-Depth)
151
+
152
+ After the fix works, make the bug **structurally impossible** — not just "fixed this time."
153
+
154
+ Single validation at one point can be bypassed by different code paths, refactoring, or mocks. Add validation at EVERY layer data passes through:
155
+
156
+ | Layer | Purpose | Example |
157
+ |-------|---------|---------|
158
+ | **Entry Point** | Reject invalid input at API boundary | Validate params not empty/exists/correct type |
159
+ | **Business Logic** | Ensure data makes sense for this operation | Check preconditions specific to this function |
160
+ | **Environment Guard** | Prevent dangerous ops in specific contexts | In tests: refuse writes outside tmpdir |
161
+ | **Debug Instrumentation** | Capture context for forensics if bug recurs | Log stack trace + key values before risky ops |
162
+
163
+ Apply this when: the bug was caused by invalid data flowing through multiple layers. Skip for trivial one-liner fixes.
164
+
165
+ ### Step 5b: Preserve Debug Instrumentation
166
+
167
+ If `rune:debug` left `#region agent-debug` markers in the code:
168
+
169
+ 1. **During fix**: DO NOT remove these markers — they capture the investigation trail
170
+ 2. **After fix verified** (tests pass, lint pass): scan for `#region agent-debug` markers
171
+ 3. **Remove markers and their contents** in a final cleanup pass ONLY after full verification
172
+ 4. If the fix is partial or tests still fail → KEEP all markers for the next debug cycle
173
+
174
+ **Why:** Premature cleanup of debug instrumentation erases failure history. If the bug recurs after cleanup, the next debug session starts from zero. Keeping markers until verification means downstream skills can see what was already investigated.
175
+
176
+ ### Step 6: Self-Review
177
+
178
+ Verify correctness of the changes just made.
179
+
180
+ - Call `rune:hallucination-guard` to verify all imports introduced or modified are real and correctly named
181
+ - Call `rune:docs-seeker` if any external API, library method, or SDK call was added or changed
182
+ - For complex or risky fixes (auth, data mutation, async logic): call `rune:review` for a full quality check
183
+
184
+ ### Step 6b: Capture Fix Pattern
185
+
186
+ Call `neural-memory` (Capture Mode) to save the fix pattern: what broke, why, and how it was fixed. Priority 7 for recurring bugs.
187
+
188
+ ### Step 7: Report
189
+
190
+ Produce a structured summary of all changes made.
191
+
192
+ - List every file modified and a one-line description of what changed
193
+ - Include verification results (tests, types, lint)
194
+ - Note any follow-up work if the fix is partial or has known limitations
195
+
196
+ ## Constraints
197
+
198
+ 1. MUST NOT change test files to make tests pass — fix the CODE, not the TESTS
199
+ 2. MUST have a diagnosis (from debug or clear error) before applying fixes
200
+ 3. MUST run tests after each fix attempt — never batch multiple untested changes
201
+ 4. MUST NOT exceed 3 fix attempts — if 3 fixes fail, re-diagnose via rune:debug (which will classify: wrong approach → brainstorm rescue, wrong design → plan redesign)
202
+ 5. MUST follow project conventions found by scout — don't invent new patterns
203
+ 6. MUST NOT add unplanned features while fixing — fix only what was diagnosed
204
+ 7. MUST track fix attempt number — this feeds debug's 3-Fix Escalation classification
205
+ 8. MUST preserve `#region agent-debug` markers until fix is fully verified — cleanup only after tests pass
206
+
207
+ ## Scope Gate
208
+
209
+ | Change Type | Action |
210
+ |-------------|--------|
211
+ | Bug fix (diagnosed cause) | Fix it |
212
+ | Security fix (found during fix) | Fix it + flag to sentinel |
213
+ | Blocking issue (can't complete fix without) | Fix it + document in report |
214
+ | Unrelated improvement | **STOP — create separate task** |
215
+ | Architectural change | **STOP — escalate to cook/plan** |
216
+
217
+ If fix requires touching >3 files not in the diagnosis → re-diagnose. You're probably fixing a symptom.
218
+
219
+ ## Mesh Gates
220
+
221
+ | Gate | Requires | If Missing |
222
+ |------|----------|------------|
223
+ | Evidence Gate | Debug report OR clear error description before fixing | Run rune:debug first |
224
+ | Test Gate | Tests run after each fix attempt | Run tests before claiming fix works |
225
+
226
+ ## Output Format
227
+
228
+ ```
229
+ ## Fix Report
230
+ - **Task**: [what was fixed/implemented]
231
+ - **Status**: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
232
+
233
+ ### Changes
234
+ - `path/to/file.ts` — [description of change]
235
+ - `path/to/other.ts` — [description of change]
236
+
237
+ ### Verification
238
+ - Lint: PASS | FAIL
239
+ - Types: PASS | FAIL
240
+ - Tests: PASS | FAIL ([n] passed, [m] failed)
241
+
242
+ ### Concerns (if DONE_WITH_CONCERNS)
243
+ - [concern]: [impact assessment] — [suggested remediation]
244
+
245
+ ### Context Needed (if NEEDS_CONTEXT)
246
+ - [what is unknown]: [why it blocks] — [two most likely answers]
247
+
248
+ ### Blocker (if BLOCKED)
249
+ - [specific blocker]: [what was attempted]
250
+
251
+ ### Notes
252
+ - [any caveats or follow-up needed]
253
+ ```
254
+
255
+ ### Status Protocol (Subagent Contract)
256
+
257
+ Fix returns one of four statuses to its caller (cook, debug, review, surgeon). The caller uses this to route next actions.
258
+
259
+ | Status | When | Example |
260
+ |--------|------|---------|
261
+ | `DONE` | Fix applied, tests pass, no issues | Clean bug fix, all green |
262
+ | `DONE_WITH_CONCERNS` | Fix works but has side effects or caveats worth noting | "Tests pass but performance regressed 15% — consider optimizing in follow-up" |
263
+ | `NEEDS_CONTEXT` | Cannot apply fix without clarification — ambiguous spec or missing info | "Two valid interpretations of the expected behavior — need user input" |
264
+ | `BLOCKED` | Hard blocker — exhausted fix attempts, broken dependency, fundamental incompatibility | "3 fix attempts failed — triggering debug escalation" |
265
+
266
+ ## Returns
267
+
268
+ | Artifact | Format | Location |
269
+ |----------|--------|----------|
270
+ | Code changes | Source files | Per debug report / plan file paths |
271
+ | Fix Report | Markdown (inline) | Emitted to calling skill (cook, debug, review, surgeon) |
272
+ | Verification output | Inline (Fix Report) | Lint + types + test results |
273
+
274
+ ## Chain Metadata
275
+
276
+ Append to Fix Report when invoked standalone. Suppress when called as sub-skill inside an L1 orchestrator (cook, team, etc.) — the orchestrator emits a consolidated block. See `docs/references/chain-metadata.md`.
277
+
278
+ ```yaml
279
+ chain_metadata:
280
+ skill: "rune:fix"
281
+ version: "0.9.0"
282
+ status: "[DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED]"
283
+ domain: "[area fixed]"
284
+ files_changed:
285
+ - "[list of modified files]"
286
+ exports:
287
+ fix_applied: { files: ["[paths]"], description: "[what was fixed]" }
288
+ verification: { lint: "[PASS/FAIL]", types: "[PASS/FAIL]", tests: "[PASS/FAIL]" }
289
+ commit_hash: "[hash if committed]"
290
+ suggested_next:
291
+ - skill: "rune:test"
292
+ reason: "[grounded in changes — e.g., 'Modified 3 files in auth module, edge cases need coverage']"
293
+ consumes: ["fix_applied", "verification"]
294
+ ```
295
+
296
+ ## Sharp Edges
297
+
298
+ Known failure modes for this skill. Check these before declaring done.
299
+
300
+ | Failure Mode | Severity | Mitigation |
301
+ |---|---|---|
302
+ | Modifying test files to make tests pass | CRITICAL | HARD-GATE blocks this — fix the code, never the tests (unless test setup is provably wrong) |
303
+ | Applying fix without a diagnosis | HIGH | Evidence Gate: need debug report or clear error description before touching code |
304
+ | Exceeding 3 fix attempts without re-diagnosing | HIGH | Constraint 4: after 3 failures, call debug again — the hypothesis was wrong |
305
+ | Introducing unrelated refactoring while fixing | MEDIUM | YAGNI: fix only what was diagnosed — unrelated changes belong in a separate task |
306
+ | Not running tests after each individual change | MEDIUM | Constraint 3: never batch untested changes — run tests after each edit |
307
+ | Fixing at crash site without tracing data origin | HIGH | Defense-in-depth: trace where bad data ORIGINATES, add validation at every layer it passes through |
308
+ | Single-point validation (fix one spot, hope it holds) | MEDIUM | Step 5: add entry + business logic + environment + debug layers for data-flow bugs |
309
+ | Removing debug instrumentation before fix is verified | MEDIUM | Step 5b: preserve `#region agent-debug` markers until all tests pass — premature cleanup erases failure history |
310
+ | Runaway fix loop — 20+ fixes without checking quality decay | HIGH | Step 4.5: WTF-likelihood self-regulation. >20% risk = STOP. Hard cap 30 fixes/session. Each fix adds risk — diminishing returns after ~15 |
311
+ | Each fix creates a new bug elsewhere — whack-a-mole | CRITICAL | Tight coupling signal. STOP fixing → escalate to debug with note "each fix creates new failure — suspect structural issue". Debug will route to plan for redesign |
312
+ | Applying same fix strategy to every error type | MEDIUM | Step 1b Recovery Policy Matrix: classify error type FIRST — POLICY_BLOCKED needs reporting not fixing, INPUT_REQUIRED needs questions not code |
313
+
314
+ ## Done When
315
+
316
+ - Root cause identified (debug report or clear error received)
317
+ - Minimal changes applied targeting only the diagnosed problem
318
+ - Tests pass for the fixed functionality (actual output shown)
319
+ - Lint and type check pass
320
+ - hallucination-guard verified any new imports
321
+ - Fix Report emitted with 4-state status, changed files, and verification results
322
+ - If `DONE_WITH_CONCERNS`: concerns listed with impact + remediation
323
+ - If `NEEDS_CONTEXT`: specific questions stated with two likely answers
324
+ - If `BLOCKED`: blocker + all attempted approaches documented
325
+
326
+ ## Cost Profile
327
+
328
+ ~2000-5000 tokens input, ~1000-3000 tokens output. Sonnet for code writing quality. Most active skill during implementation.
329
+
330
+ **Scope guardrail**: Do not refactor unrelated code or create new features beyond the diagnosed fix target unless explicitly delegated by the parent agent.