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