@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,474 +1,474 @@
1
- ---
2
- name: rescue
3
- description: "Legacy refactoring orchestrator. Use when user says 'refactor', 'modernize', 'clean up this mess', 'rescue', or when dealing with old/messy/legacy code. Multi-session workflow — autopsy, safety net, incremental surgery, progress tracking."
4
- context: fork
5
- agent: general-purpose
6
- metadata:
7
- author: runedev
8
- version: "0.4.0"
9
- layer: L1
10
- model: sonnet
11
- group: orchestrator
12
- tools: "Read, Write, Edit, Bash, Glob, Grep"
13
- ---
14
-
15
- # rescue
16
-
17
- ## Purpose
18
-
19
- Legacy refactoring orchestrator for safely modernizing messy codebases. Rescue runs a multi-session workflow: assess damage (autopsy), build safety nets (safeguard), perform incremental surgery (surgeon), and track progress (journal). Designed to handle the chaos of real-world legacy code without breaking everything.
20
-
21
- <HARD-GATE>
22
- - Surgery MUST NOT begin until safety net is committed and tagged.
23
- - ONE module per session. NEVER refactor two coupled modules simultaneously.
24
- - Full test suite must pass before rescue is declared complete.
25
- </HARD-GATE>
26
-
27
- ## Triggers
28
-
29
- - `/rune rescue` — manual invocation on legacy project
30
- - Auto-trigger: when autopsy health score < 40/100
31
-
32
- ## Calls (outbound)
33
-
34
- - `autopsy` (L2): Phase 0 RECON — full codebase health assessment
35
- - `safeguard` (L2): Phase 1 SAFETY NET — characterization tests and protective measures
36
- - `surgeon` (L2): Phase 2-N SURGERY — incremental refactoring (1 module per session)
37
- - `retro` (L2): post-rescue retrospective — capture lessons learned
38
- - `journal` (L3): state tracking across rescue sessions
39
- - `plan` (L2): create refactoring plan based on autopsy findings
40
- - `review` (L2): verify each surgery phase
41
- - `session-bridge` (L3): save rescue state between sessions
42
- - `onboard` (L2): generate context for unfamiliar legacy project
43
- - `dependency-doctor` (L3): audit dependencies in legacy project
44
- - `context-pack` (L3): create structured handoff briefings before spawning subagents
45
- - `neural-memory` | Phase start + phase end | Recall past refactoring patterns, capture new ones
46
-
47
- ## Called By (inbound)
48
-
49
- - User: `/rune rescue` direct invocation
50
- - `team` (L1): when team delegates rescue work
51
-
52
- ---
53
-
54
- ## Execution
55
-
56
- ### Step 0 — Initialize TodoWrite
57
-
58
- Rescue is multi-session. On first invocation, build full todo list. On resume, read RESCUE-STATE.md and restore todo list to current phase.
59
-
60
- ```
61
- TodoWrite([
62
- { content: "RECON: Run autopsy, onboard, and save initial state", status: "pending", activeForm: "Assessing codebase health" },
63
- { content: "SAFETY NET: Add characterization tests and rollback points", status: "pending", activeForm: "Building safety net" },
64
- { content: "SURGERY [Module N]: Refactor one module with surgeon", status: "pending", activeForm: "Performing surgery on module N" },
65
- { content: "CLEANUP: Remove @legacy and @bridge markers", status: "pending", activeForm: "Cleaning up markers" },
66
- { content: "VERIFY: Run full test suite and compare health scores", status: "pending", activeForm: "Verifying rescue outcome" }
67
- ])
68
- ```
69
-
70
- Note: SURGERY todos are added dynamically — one per module identified in Phase 0. Each module gets its own todo entry.
71
-
72
- ---
73
-
74
- ### Phase 0 — RECON
75
-
76
- Mark todo[0] `in_progress`.
77
-
78
- Call `neural-memory` (Recall Mode) for past refactoring patterns in similar codebases.
79
-
80
- **0a. Full health assessment.**
81
-
82
- ```
83
- REQUIRED SUB-SKILL: rune:autopsy
84
- → Invoke `autopsy` with scope: "full".
85
- → autopsy returns:
86
- - health_score: number (0-100)
87
- - modules: list of { name, path, loc, cyclomatic_complexity, test_coverage, health }
88
- - issues: list of { severity, file, description }
89
- - recommended_patterns: map of module → refactoring pattern
90
- ```
91
-
92
- **0b. Generate project context if missing.**
93
-
94
- ```
95
- Check: does CLAUDE.md exist in project root?
96
- If NO:
97
- REQUIRED SUB-SKILL: rune:onboard
98
- → Invoke `onboard` to generate CLAUDE.md with project conventions.
99
- ```
100
-
101
- **0c. Audit dependencies.**
102
-
103
- ```
104
- REQUIRED SUB-SKILL: rune:dependency-doctor
105
- → Invoke `dependency-doctor` to identify: outdated packages, security vulnerabilities, unused deps.
106
- → Capture: dependency report (used in surgeon prompts).
107
- ```
108
-
109
- **0d. Save initial state.**
110
-
111
- ```
112
- REQUIRED SUB-SKILL: rune:journal
113
- → Invoke `journal` to write RESCUE-STATE.md with:
114
- - health_score_baseline: [autopsy score]
115
- - modules_to_rescue: [ordered list from autopsy, worst-first]
116
- - current_phase: "RECON complete"
117
- - sessions_used: 1
118
- - dependency_report: [summary]
119
-
120
- REQUIRED SUB-SKILL: rune:session-bridge
121
- → Invoke `session-bridge` to snapshot state for cross-session resume.
122
-
123
- Bash: git tag rune-rescue-baseline
124
- ```
125
-
126
- **0e. Build module surgery queue.**
127
-
128
- ```
129
- From autopsy.modules, filter: health < 60
130
- Sort: ascending health score (worst first)
131
- Add one TodoWrite entry per module:
132
- { content: "SURGERY [module.name]: [recommended_pattern]", status: "pending", ... }
133
- ```
134
-
135
- Mark todo[0] `completed`.
136
-
137
- ---
138
-
139
- ### Phase 1 — SAFETY NET
140
-
141
- Mark todo[1] `in_progress`. This phase runs once before any surgery.
142
-
143
- **1a. Characterization tests.**
144
-
145
- ```
146
- REQUIRED SUB-SKILL: rune:safeguard
147
- → Invoke `safeguard` with action: "characterize".
148
- → safeguard writes tests that capture CURRENT behavior (even buggy behavior).
149
- → These tests are the rollback oracle — if they break, surgery went wrong.
150
- → Capture: test file paths, test count.
151
- ```
152
-
153
- **1b. Add boundary markers.**
154
-
155
- ```
156
- REQUIRED SUB-SKILL: rune:safeguard
157
- → Invoke `safeguard` with action: "mark".
158
- → safeguard adds inline markers to legacy code:
159
- @legacy — old implementation to be replaced
160
- @new-v2 — new implementation being introduced
161
- @bridge — compatibility shim between old and new
162
- ```
163
-
164
- **1c. Config freeze + rollback point.**
165
-
166
- ```
167
- REQUIRED SUB-SKILL: rune:safeguard
168
- → Invoke `safeguard` with action: "freeze".
169
- → safeguard commits current state as checkpoint.
170
-
171
- Bash: git add -A && git commit -m "chore: rescue safety net — characterization tests + markers"
172
- Bash: git tag rune-rescue-safety-net
173
- ```
174
-
175
- Mark todo[1] `completed`.
176
-
177
- ---
178
-
179
- ### Phase 2-N — SURGERY (one module per session)
180
-
181
- For each module in the surgery queue (one per session):
182
-
183
- Mark the corresponding SURGERY todo `in_progress`.
184
-
185
- **Sa. Pre-surgery check.**
186
-
187
- ```
188
- Verify:
189
- [ ] Safety net tests pass (run characterization tests)
190
- [ ] Module is not coupled to another in-progress module
191
- [ ] Blast radius ≤ 5 files
192
-
193
- Blast radius check:
194
- Bash: grep -r "import.*[module-name]\|require.*[module-name]" --include="*.ts" --include="*.js" -l
195
- Count files. If > 5:
196
- → STOP surgery on this module
197
- → Report: "Blast radius [N] files exceeds limit of 5 — use Strangler Fig pattern to reduce scope first"
198
- → Pick a smaller sub-module to start with
199
- ```
200
-
201
- **Sb. Execute surgery.**
202
-
203
- ```
204
- REQUIRED SUB-SKILL: rune:surgeon
205
- → Invoke `surgeon` with:
206
- - module: [module name and path]
207
- - pattern: [recommended_pattern from autopsy]
208
- - blast_radius_files: [list from pre-surgery check]
209
- - dependency_report: [from Phase 0]
210
- - characterization_tests: [paths from Phase 1]
211
-
212
- Supported patterns:
213
- Strangler Fig — for modules > 500 LOC: route traffic to new impl gradually
214
- Branch by Abstraction — for replacing implementations: introduce interface first
215
- Expand-Migrate-Contract — for safe transitions: expand API, migrate callers, contract old API
216
- Extract & Simplify — for cyclomatic complexity > 10: extract pure functions
217
-
218
- surgeon returns: modified files list, refactoring summary, test results.
219
- ```
220
-
221
- **Sc. Review surgery output.**
222
-
223
- ```
224
- REQUIRED SUB-SKILL: rune:review
225
- → Invoke `review` with: modified files, surgeon summary.
226
- → review checks: code quality, pattern adherence, no regressions introduced.
227
- → Capture: review verdict (pass | fail | warnings).
228
-
229
- If review verdict == fail:
230
- → STOP, do not commit
231
- → Report review findings to user
232
- → Revert surgeon changes: Bash: git checkout [modified-files]
233
- ```
234
-
235
- **Sd. Run characterization tests.**
236
-
237
- ```
238
- Bash: [project test command, e.g. npm test or pytest]
239
- If tests fail:
240
- → STOP immediately
241
- → Report: "Characterization tests broken by surgery on [module] — reverting"
242
- → Bash: git checkout [modified-files]
243
- → Do NOT mark todo complete
244
- → Update RESCUE-STATE.md with failure note
245
- ```
246
-
247
- **Se. Commit and save state.**
248
-
249
- ```
250
- Bash: git add [modified-files]
251
- Bash: git commit -m "refactor([module]): [pattern] — [brief description]"
252
-
253
- REQUIRED SUB-SKILL: rune:journal
254
- → Update RESCUE-STATE.md:
255
- - module [name]: status=complete, health_before=[X], health_after=[Y]
256
- - sessions_used: [increment]
257
-
258
- REQUIRED SUB-SKILL: rune:session-bridge
259
- → Save updated state for next session resume.
260
- ```
261
-
262
- **Context check — before continuing to next module:**
263
-
264
- ```
265
- If approaching context limit (50+ tool calls or user signals fatigue):
266
- → STOP after current module commit
267
- → Report: "Session limit reached. Rescue state saved. Resume with /rune rescue to continue."
268
- → Do NOT start next module in same session
269
- ```
270
-
271
- Mark SURGERY todo `completed`.
272
-
273
- Repeat for each module in queue across subsequent sessions.
274
-
275
- ---
276
-
277
- ### Phase N+1 — CLEANUP
278
-
279
- Mark CLEANUP todo `in_progress`.
280
-
281
- Run only after ALL surgery todos are `completed`.
282
-
283
- **Remove boundary markers.**
284
-
285
- ```
286
- Grep: find all @legacy, @bridge markers in codebase
287
- Bash: grep -rn "@legacy\|@bridge" --include="*.ts" --include="*.js" -l
288
-
289
- For each file with markers:
290
- → Remove @legacy blocks (old implementation replaced)
291
- → Remove @bridge shims (migration complete)
292
- → Keep @new-v2 comments only if they add documentation value; otherwise remove
293
- Edit each file to strip markers.
294
- ```
295
-
296
- **Verify markers removed.**
297
-
298
- ```
299
- Bash: grep -rn "@legacy\|@bridge" --include="*.ts" --include="*.js"
300
- Expected: no output. If any remain → fix before continuing.
301
- ```
302
-
303
- ```
304
- Bash: git add -A && git commit -m "chore: rescue cleanup — remove @legacy and @bridge markers"
305
- ```
306
-
307
- Mark CLEANUP todo `completed`.
308
-
309
- ---
310
-
311
- ### Phase N+2 — VERIFY
312
-
313
- Mark VERIFY todo `in_progress`.
314
-
315
- ```
316
- Bash: [full test command]
317
- Capture: passed, failed, coverage %.
318
-
319
- If tests fail:
320
- → Do NOT mark rescue complete
321
- → Identify which module introduced failure
322
- → Report: "Final verify failed: [failing test list]"
323
- ```
324
-
325
- ```
326
- REQUIRED SUB-SKILL: rune:autopsy
327
- → Invoke `autopsy` again with scope: "full".
328
- → Capture: health_score_final.
329
- ```
330
-
331
- **Compare health scores.**
332
-
333
- ```
334
- health_score_baseline: [from Phase 0 RESCUE-STATE.md]
335
- health_score_final: [from this autopsy]
336
- improvement: [final - baseline]
337
-
338
- Report:
339
- Rescue complete.
340
- Health: [baseline] → [final] (+[improvement] points)
341
- Modules refactored: [count]
342
- Sessions used: [count]
343
- ```
344
-
345
- ```
346
- REQUIRED SUB-SKILL: rune:journal
347
- → Final RESCUE-STATE.md update: status=complete, health_final=[score].
348
-
349
- Bash: git tag rune-rescue-complete
350
- ```
351
-
352
- Call `neural-memory` (Capture Mode) to save refactoring patterns and decisions from this rescue.
353
-
354
- Mark VERIFY todo `completed`.
355
-
356
- ---
357
-
358
- ## Status Command
359
-
360
- `/rune rescue status` — reads RESCUE-STATE.md via `journal` and presents:
361
-
362
- ```
363
- ## Rescue Dashboard
364
- - **Health Score**: [before] → [current] (target: [goal])
365
- - **Modules**: [completed]/[total]
366
- - **Current Phase**: [phase]
367
- - **Sessions Used**: [count]
368
-
369
- ### Module Status
370
- | Module | Status | Health | Pattern |
371
- |--------|--------|--------|---------|
372
- | auth | done | 72→91 | Strangler Fig |
373
- | payments | in-progress | 34→?? | Extract & Simplify |
374
- | legacy-api | pending | 28 | TBD |
375
- ```
376
-
377
- ---
378
-
379
- ## Safety Rules
380
-
381
- ```
382
- NEVER refactor 2 coupled modules in same session
383
- ALWAYS run characterization tests after each surgery
384
- Max blast radius: 5 files per session
385
- If context low → STOP, save state via journal + session-bridge, commit partial
386
- Rollback point: git tag rune-rescue-baseline (set in Phase 0)
387
- ```
388
-
389
- ## Constraints
390
-
391
- 1. MUST run autopsy diagnostic BEFORE planning any refactoring — understand before changing
392
- 2. MUST create safety net (characterization tests via safeguard) BEFORE any code surgery
393
- 3. MUST NOT refactor two coupled modules simultaneously — one module per session
394
- 4. MUST run full test suite after EVERY individual edit — never accumulate failing tests
395
- 5. MUST tag a safe rollback point before starting surgery
396
- 6. MUST NOT exceed blast radius of 5 files per surgical session
397
-
398
- ## Mesh Gates
399
-
400
- | Gate | Requires | If Missing |
401
- |------|----------|------------|
402
- | Autopsy Gate | autopsy report with health score before planning | Run rune:autopsy first |
403
- | Safety Gate | safeguard characterization tests passing before surgery | Run rune:safeguard first |
404
- | Surgery Gate | Each edit verified individually (tests pass) | Revert last edit, fix, re-verify |
405
-
406
- ## Output Format
407
-
408
- ```
409
- ## Rescue Report: [Module Name]
410
- - **Status**: complete | partial | blocked
411
- - **Modules Refactored**: [count]
412
- - **Tests Before**: [count] ([pass rate]%)
413
- - **Tests After**: [count] ([pass rate]%)
414
- - **Health Score**: [before] → [after]
415
- - **Rollback Tag**: [git tag name]
416
- ```
417
-
418
- ## Returns
419
-
420
- | Artifact | Format | Location |
421
- |----------|--------|----------|
422
- | Rescue state | Markdown | `RESCUE-STATE.md` (updated each session) |
423
- | Characterization tests | Source files | Written by `rune:safeguard` per module |
424
- | Refactored modules | Source files | Modified in-place, committed per surgery session |
425
- | Health score comparison | Inline (Rescue Report) | Baseline vs final autopsy scores |
426
- | Rescue Report | Markdown (inline) | Emitted at session end (per module and final) |
427
-
428
- ## Document Ownership
429
-
430
- | Scope | Access | Files |
431
- |-------|--------|-------|
432
- | **Owns** (read + write) | `RESCUE-STATE.md`, `.rune/rescue-*.md`, git tags (`rune-rescue-*`), refactored source files (one module per session) |
433
- | **Reads** (never writes) | `CLAUDE.md`, autopsy reports, safeguard test files, `.rune/contract.md` |
434
- | **Never modifies** | Test files written by `safeguard` (characterization tests are the safety net — rescue reads them, never edits), `compiler/**`, `SKILL.md` files |
435
-
436
- Rescue delegates to `surgeon` for actual code changes and `safeguard` for test creation. Rescue owns the orchestration state, not the artifacts.
437
-
438
- ## Anti-Patterns
439
-
440
- Common legacy refactoring failures. These turn "rescue" into "make it worse."
441
-
442
- | Anti-Pattern | Why It Fails | Correct Approach |
443
- |---|---|---|
444
- | **Big bang refactor** — rewriting everything at once | No rollback path. One bug = entire refactor is broken | One module per session. Commit + verify after each module |
445
- | **Surgery without safety net** — refactoring before characterization tests exist | No way to verify behavior is preserved. "It compiles" ≠ "it works" | HARD-GATE: safeguard tests must pass BEFORE any surgery begins |
446
- | **Coupled module surgery** — refactoring two interdependent modules simultaneously | Changes in module A break module B mid-surgery. Neither is stable | One module per session. Stabilize A completely before touching B |
447
- | **Ignoring the autopsy** — starting refactoring without understanding current health | Fixes symptoms not causes. Wastes effort on low-impact modules | Phase 0 autopsy is mandatory. Surgery queue ordered by impact, not convenience |
448
- | **Prototype patterns in production** — replacing legacy code with quick-and-dirty rewrites | Creates new legacy. The "rescue" becomes the next rescue target | Apply proven refactoring patterns from autopsy recommendations. Clean code, not fast code |
449
- | **No rollback point** — surgery without a tagged baseline | If surgery goes wrong, no safe state to return to | `git tag rune-rescue-baseline` before ANY code changes |
450
-
451
- ## Sharp Edges
452
-
453
- Known failure modes for this skill. Check these before declaring done.
454
-
455
- | Failure Mode | Severity | Mitigation |
456
- |---|---|---|
457
- | Starting surgery before safety net committed and tagged | CRITICAL | HARD-GATE: `rune-rescue-safety-net` git tag must exist before Phase 2 |
458
- | Refactoring two coupled modules in the same session | HIGH | HARD-GATE: one module per session — split coupled modules into sequential sessions |
459
- | Blast radius > 5 files before surgery halted | HIGH | Count importers before each surgery — stop if > 5 and split scope |
460
- | Not saving state between sessions (rescue spans many sessions) | MEDIUM | journal + session-bridge mandatory after each session — RESCUE-STATE.md must be current |
461
- | Continuing surgery after characterization tests fail on current code | MEDIUM | Tests must PASS on unmodified code first — fix the test if current behavior is captured wrongly |
462
-
463
- ## Done When
464
-
465
- - autopsy complete with quantified health score and surgery queue
466
- - safeguard characterization tests passing on current code (HARD-GATE)
467
- - All modules in surgery queue processed (one per session)
468
- - @legacy and @bridge markers removed from codebase (CLEANUP phase)
469
- - Final autopsy run — health_score_final > health_score_baseline
470
- - Rescue Report emitted with before/after health comparison and session count
471
-
472
- ## Cost Profile
473
-
474
- ~$0.10-0.30 per session. Sonnet for surgery, opus for autopsy. Multi-session workflow.
1
+ ---
2
+ name: rescue
3
+ description: "Legacy refactoring orchestrator. Use when user says 'refactor', 'modernize', 'clean up this mess', 'rescue', or when dealing with old/messy/legacy code. Multi-session workflow — autopsy, safety net, incremental surgery, progress tracking."
4
+ context: fork
5
+ agent: general-purpose
6
+ metadata:
7
+ author: runedev
8
+ version: "0.4.0"
9
+ layer: L1
10
+ model: sonnet
11
+ group: orchestrator
12
+ tools: "Read, Write, Edit, Bash, Glob, Grep"
13
+ ---
14
+
15
+ # rescue
16
+
17
+ ## Purpose
18
+
19
+ Legacy refactoring orchestrator for safely modernizing messy codebases. Rescue runs a multi-session workflow: assess damage (autopsy), build safety nets (safeguard), perform incremental surgery (surgeon), and track progress (journal). Designed to handle the chaos of real-world legacy code without breaking everything.
20
+
21
+ <HARD-GATE>
22
+ - Surgery MUST NOT begin until safety net is committed and tagged.
23
+ - ONE module per session. NEVER refactor two coupled modules simultaneously.
24
+ - Full test suite must pass before rescue is declared complete.
25
+ </HARD-GATE>
26
+
27
+ ## Triggers
28
+
29
+ - `/rune rescue` — manual invocation on legacy project
30
+ - Auto-trigger: when autopsy health score < 40/100
31
+
32
+ ## Calls (outbound)
33
+
34
+ - `autopsy` (L2): Phase 0 RECON — full codebase health assessment
35
+ - `safeguard` (L2): Phase 1 SAFETY NET — characterization tests and protective measures
36
+ - `surgeon` (L2): Phase 2-N SURGERY — incremental refactoring (1 module per session)
37
+ - `retro` (L2): post-rescue retrospective — capture lessons learned
38
+ - `journal` (L3): state tracking across rescue sessions
39
+ - `plan` (L2): create refactoring plan based on autopsy findings
40
+ - `review` (L2): verify each surgery phase
41
+ - `session-bridge` (L3): save rescue state between sessions
42
+ - `onboard` (L2): generate context for unfamiliar legacy project
43
+ - `dependency-doctor` (L3): audit dependencies in legacy project
44
+ - `context-pack` (L3): create structured handoff briefings before spawning subagents
45
+ - `neural-memory` | Phase start + phase end | Recall past refactoring patterns, capture new ones
46
+
47
+ ## Called By (inbound)
48
+
49
+ - User: `/rune rescue` direct invocation
50
+ - `team` (L1): when team delegates rescue work
51
+
52
+ ---
53
+
54
+ ## Execution
55
+
56
+ ### Step 0 — Initialize TodoWrite
57
+
58
+ Rescue is multi-session. On first invocation, build full todo list. On resume, read RESCUE-STATE.md and restore todo list to current phase.
59
+
60
+ ```
61
+ TodoWrite([
62
+ { content: "RECON: Run autopsy, onboard, and save initial state", status: "pending", activeForm: "Assessing codebase health" },
63
+ { content: "SAFETY NET: Add characterization tests and rollback points", status: "pending", activeForm: "Building safety net" },
64
+ { content: "SURGERY [Module N]: Refactor one module with surgeon", status: "pending", activeForm: "Performing surgery on module N" },
65
+ { content: "CLEANUP: Remove @legacy and @bridge markers", status: "pending", activeForm: "Cleaning up markers" },
66
+ { content: "VERIFY: Run full test suite and compare health scores", status: "pending", activeForm: "Verifying rescue outcome" }
67
+ ])
68
+ ```
69
+
70
+ Note: SURGERY todos are added dynamically — one per module identified in Phase 0. Each module gets its own todo entry.
71
+
72
+ ---
73
+
74
+ ### Phase 0 — RECON
75
+
76
+ Mark todo[0] `in_progress`.
77
+
78
+ Call `neural-memory` (Recall Mode) for past refactoring patterns in similar codebases.
79
+
80
+ **0a. Full health assessment.**
81
+
82
+ ```
83
+ REQUIRED SUB-SKILL: rune:autopsy
84
+ → Invoke `autopsy` with scope: "full".
85
+ → autopsy returns:
86
+ - health_score: number (0-100)
87
+ - modules: list of { name, path, loc, cyclomatic_complexity, test_coverage, health }
88
+ - issues: list of { severity, file, description }
89
+ - recommended_patterns: map of module → refactoring pattern
90
+ ```
91
+
92
+ **0b. Generate project context if missing.**
93
+
94
+ ```
95
+ Check: does CLAUDE.md exist in project root?
96
+ If NO:
97
+ REQUIRED SUB-SKILL: rune:onboard
98
+ → Invoke `onboard` to generate CLAUDE.md with project conventions.
99
+ ```
100
+
101
+ **0c. Audit dependencies.**
102
+
103
+ ```
104
+ REQUIRED SUB-SKILL: rune:dependency-doctor
105
+ → Invoke `dependency-doctor` to identify: outdated packages, security vulnerabilities, unused deps.
106
+ → Capture: dependency report (used in surgeon prompts).
107
+ ```
108
+
109
+ **0d. Save initial state.**
110
+
111
+ ```
112
+ REQUIRED SUB-SKILL: rune:journal
113
+ → Invoke `journal` to write RESCUE-STATE.md with:
114
+ - health_score_baseline: [autopsy score]
115
+ - modules_to_rescue: [ordered list from autopsy, worst-first]
116
+ - current_phase: "RECON complete"
117
+ - sessions_used: 1
118
+ - dependency_report: [summary]
119
+
120
+ REQUIRED SUB-SKILL: rune:session-bridge
121
+ → Invoke `session-bridge` to snapshot state for cross-session resume.
122
+
123
+ Bash: git tag rune-rescue-baseline
124
+ ```
125
+
126
+ **0e. Build module surgery queue.**
127
+
128
+ ```
129
+ From autopsy.modules, filter: health < 60
130
+ Sort: ascending health score (worst first)
131
+ Add one TodoWrite entry per module:
132
+ { content: "SURGERY [module.name]: [recommended_pattern]", status: "pending", ... }
133
+ ```
134
+
135
+ Mark todo[0] `completed`.
136
+
137
+ ---
138
+
139
+ ### Phase 1 — SAFETY NET
140
+
141
+ Mark todo[1] `in_progress`. This phase runs once before any surgery.
142
+
143
+ **1a. Characterization tests.**
144
+
145
+ ```
146
+ REQUIRED SUB-SKILL: rune:safeguard
147
+ → Invoke `safeguard` with action: "characterize".
148
+ → safeguard writes tests that capture CURRENT behavior (even buggy behavior).
149
+ → These tests are the rollback oracle — if they break, surgery went wrong.
150
+ → Capture: test file paths, test count.
151
+ ```
152
+
153
+ **1b. Add boundary markers.**
154
+
155
+ ```
156
+ REQUIRED SUB-SKILL: rune:safeguard
157
+ → Invoke `safeguard` with action: "mark".
158
+ → safeguard adds inline markers to legacy code:
159
+ @legacy — old implementation to be replaced
160
+ @new-v2 — new implementation being introduced
161
+ @bridge — compatibility shim between old and new
162
+ ```
163
+
164
+ **1c. Config freeze + rollback point.**
165
+
166
+ ```
167
+ REQUIRED SUB-SKILL: rune:safeguard
168
+ → Invoke `safeguard` with action: "freeze".
169
+ → safeguard commits current state as checkpoint.
170
+
171
+ Bash: git add -A && git commit -m "chore: rescue safety net — characterization tests + markers"
172
+ Bash: git tag rune-rescue-safety-net
173
+ ```
174
+
175
+ Mark todo[1] `completed`.
176
+
177
+ ---
178
+
179
+ ### Phase 2-N — SURGERY (one module per session)
180
+
181
+ For each module in the surgery queue (one per session):
182
+
183
+ Mark the corresponding SURGERY todo `in_progress`.
184
+
185
+ **Sa. Pre-surgery check.**
186
+
187
+ ```
188
+ Verify:
189
+ [ ] Safety net tests pass (run characterization tests)
190
+ [ ] Module is not coupled to another in-progress module
191
+ [ ] Blast radius ≤ 5 files
192
+
193
+ Blast radius check:
194
+ Bash: grep -r "import.*[module-name]\|require.*[module-name]" --include="*.ts" --include="*.js" -l
195
+ Count files. If > 5:
196
+ → STOP surgery on this module
197
+ → Report: "Blast radius [N] files exceeds limit of 5 — use Strangler Fig pattern to reduce scope first"
198
+ → Pick a smaller sub-module to start with
199
+ ```
200
+
201
+ **Sb. Execute surgery.**
202
+
203
+ ```
204
+ REQUIRED SUB-SKILL: rune:surgeon
205
+ → Invoke `surgeon` with:
206
+ - module: [module name and path]
207
+ - pattern: [recommended_pattern from autopsy]
208
+ - blast_radius_files: [list from pre-surgery check]
209
+ - dependency_report: [from Phase 0]
210
+ - characterization_tests: [paths from Phase 1]
211
+
212
+ Supported patterns:
213
+ Strangler Fig — for modules > 500 LOC: route traffic to new impl gradually
214
+ Branch by Abstraction — for replacing implementations: introduce interface first
215
+ Expand-Migrate-Contract — for safe transitions: expand API, migrate callers, contract old API
216
+ Extract & Simplify — for cyclomatic complexity > 10: extract pure functions
217
+
218
+ surgeon returns: modified files list, refactoring summary, test results.
219
+ ```
220
+
221
+ **Sc. Review surgery output.**
222
+
223
+ ```
224
+ REQUIRED SUB-SKILL: rune:review
225
+ → Invoke `review` with: modified files, surgeon summary.
226
+ → review checks: code quality, pattern adherence, no regressions introduced.
227
+ → Capture: review verdict (pass | fail | warnings).
228
+
229
+ If review verdict == fail:
230
+ → STOP, do not commit
231
+ → Report review findings to user
232
+ → Revert surgeon changes: Bash: git checkout [modified-files]
233
+ ```
234
+
235
+ **Sd. Run characterization tests.**
236
+
237
+ ```
238
+ Bash: [project test command, e.g. npm test or pytest]
239
+ If tests fail:
240
+ → STOP immediately
241
+ → Report: "Characterization tests broken by surgery on [module] — reverting"
242
+ → Bash: git checkout [modified-files]
243
+ → Do NOT mark todo complete
244
+ → Update RESCUE-STATE.md with failure note
245
+ ```
246
+
247
+ **Se. Commit and save state.**
248
+
249
+ ```
250
+ Bash: git add [modified-files]
251
+ Bash: git commit -m "refactor([module]): [pattern] — [brief description]"
252
+
253
+ REQUIRED SUB-SKILL: rune:journal
254
+ → Update RESCUE-STATE.md:
255
+ - module [name]: status=complete, health_before=[X], health_after=[Y]
256
+ - sessions_used: [increment]
257
+
258
+ REQUIRED SUB-SKILL: rune:session-bridge
259
+ → Save updated state for next session resume.
260
+ ```
261
+
262
+ **Context check — before continuing to next module:**
263
+
264
+ ```
265
+ If approaching context limit (50+ tool calls or user signals fatigue):
266
+ → STOP after current module commit
267
+ → Report: "Session limit reached. Rescue state saved. Resume with /rune rescue to continue."
268
+ → Do NOT start next module in same session
269
+ ```
270
+
271
+ Mark SURGERY todo `completed`.
272
+
273
+ Repeat for each module in queue across subsequent sessions.
274
+
275
+ ---
276
+
277
+ ### Phase N+1 — CLEANUP
278
+
279
+ Mark CLEANUP todo `in_progress`.
280
+
281
+ Run only after ALL surgery todos are `completed`.
282
+
283
+ **Remove boundary markers.**
284
+
285
+ ```
286
+ Grep: find all @legacy, @bridge markers in codebase
287
+ Bash: grep -rn "@legacy\|@bridge" --include="*.ts" --include="*.js" -l
288
+
289
+ For each file with markers:
290
+ → Remove @legacy blocks (old implementation replaced)
291
+ → Remove @bridge shims (migration complete)
292
+ → Keep @new-v2 comments only if they add documentation value; otherwise remove
293
+ Edit each file to strip markers.
294
+ ```
295
+
296
+ **Verify markers removed.**
297
+
298
+ ```
299
+ Bash: grep -rn "@legacy\|@bridge" --include="*.ts" --include="*.js"
300
+ Expected: no output. If any remain → fix before continuing.
301
+ ```
302
+
303
+ ```
304
+ Bash: git add -A && git commit -m "chore: rescue cleanup — remove @legacy and @bridge markers"
305
+ ```
306
+
307
+ Mark CLEANUP todo `completed`.
308
+
309
+ ---
310
+
311
+ ### Phase N+2 — VERIFY
312
+
313
+ Mark VERIFY todo `in_progress`.
314
+
315
+ ```
316
+ Bash: [full test command]
317
+ Capture: passed, failed, coverage %.
318
+
319
+ If tests fail:
320
+ → Do NOT mark rescue complete
321
+ → Identify which module introduced failure
322
+ → Report: "Final verify failed: [failing test list]"
323
+ ```
324
+
325
+ ```
326
+ REQUIRED SUB-SKILL: rune:autopsy
327
+ → Invoke `autopsy` again with scope: "full".
328
+ → Capture: health_score_final.
329
+ ```
330
+
331
+ **Compare health scores.**
332
+
333
+ ```
334
+ health_score_baseline: [from Phase 0 RESCUE-STATE.md]
335
+ health_score_final: [from this autopsy]
336
+ improvement: [final - baseline]
337
+
338
+ Report:
339
+ Rescue complete.
340
+ Health: [baseline] → [final] (+[improvement] points)
341
+ Modules refactored: [count]
342
+ Sessions used: [count]
343
+ ```
344
+
345
+ ```
346
+ REQUIRED SUB-SKILL: rune:journal
347
+ → Final RESCUE-STATE.md update: status=complete, health_final=[score].
348
+
349
+ Bash: git tag rune-rescue-complete
350
+ ```
351
+
352
+ Call `neural-memory` (Capture Mode) to save refactoring patterns and decisions from this rescue.
353
+
354
+ Mark VERIFY todo `completed`.
355
+
356
+ ---
357
+
358
+ ## Status Command
359
+
360
+ `/rune rescue status` — reads RESCUE-STATE.md via `journal` and presents:
361
+
362
+ ```
363
+ ## Rescue Dashboard
364
+ - **Health Score**: [before] → [current] (target: [goal])
365
+ - **Modules**: [completed]/[total]
366
+ - **Current Phase**: [phase]
367
+ - **Sessions Used**: [count]
368
+
369
+ ### Module Status
370
+ | Module | Status | Health | Pattern |
371
+ |--------|--------|--------|---------|
372
+ | auth | done | 72→91 | Strangler Fig |
373
+ | payments | in-progress | 34→?? | Extract & Simplify |
374
+ | legacy-api | pending | 28 | TBD |
375
+ ```
376
+
377
+ ---
378
+
379
+ ## Safety Rules
380
+
381
+ ```
382
+ NEVER refactor 2 coupled modules in same session
383
+ ALWAYS run characterization tests after each surgery
384
+ Max blast radius: 5 files per session
385
+ If context low → STOP, save state via journal + session-bridge, commit partial
386
+ Rollback point: git tag rune-rescue-baseline (set in Phase 0)
387
+ ```
388
+
389
+ ## Constraints
390
+
391
+ 1. MUST run autopsy diagnostic BEFORE planning any refactoring — understand before changing
392
+ 2. MUST create safety net (characterization tests via safeguard) BEFORE any code surgery
393
+ 3. MUST NOT refactor two coupled modules simultaneously — one module per session
394
+ 4. MUST run full test suite after EVERY individual edit — never accumulate failing tests
395
+ 5. MUST tag a safe rollback point before starting surgery
396
+ 6. MUST NOT exceed blast radius of 5 files per surgical session
397
+
398
+ ## Mesh Gates
399
+
400
+ | Gate | Requires | If Missing |
401
+ |------|----------|------------|
402
+ | Autopsy Gate | autopsy report with health score before planning | Run rune:autopsy first |
403
+ | Safety Gate | safeguard characterization tests passing before surgery | Run rune:safeguard first |
404
+ | Surgery Gate | Each edit verified individually (tests pass) | Revert last edit, fix, re-verify |
405
+
406
+ ## Output Format
407
+
408
+ ```
409
+ ## Rescue Report: [Module Name]
410
+ - **Status**: complete | partial | blocked
411
+ - **Modules Refactored**: [count]
412
+ - **Tests Before**: [count] ([pass rate]%)
413
+ - **Tests After**: [count] ([pass rate]%)
414
+ - **Health Score**: [before] → [after]
415
+ - **Rollback Tag**: [git tag name]
416
+ ```
417
+
418
+ ## Returns
419
+
420
+ | Artifact | Format | Location |
421
+ |----------|--------|----------|
422
+ | Rescue state | Markdown | `RESCUE-STATE.md` (updated each session) |
423
+ | Characterization tests | Source files | Written by `rune:safeguard` per module |
424
+ | Refactored modules | Source files | Modified in-place, committed per surgery session |
425
+ | Health score comparison | Inline (Rescue Report) | Baseline vs final autopsy scores |
426
+ | Rescue Report | Markdown (inline) | Emitted at session end (per module and final) |
427
+
428
+ ## Document Ownership
429
+
430
+ | Scope | Access | Files |
431
+ |-------|--------|-------|
432
+ | **Owns** (read + write) | `RESCUE-STATE.md`, `.rune/rescue-*.md`, git tags (`rune-rescue-*`), refactored source files (one module per session) |
433
+ | **Reads** (never writes) | `CLAUDE.md`, autopsy reports, safeguard test files, `.rune/contract.md` |
434
+ | **Never modifies** | Test files written by `safeguard` (characterization tests are the safety net — rescue reads them, never edits), `compiler/**`, `SKILL.md` files |
435
+
436
+ Rescue delegates to `surgeon` for actual code changes and `safeguard` for test creation. Rescue owns the orchestration state, not the artifacts.
437
+
438
+ ## Anti-Patterns
439
+
440
+ Common legacy refactoring failures. These turn "rescue" into "make it worse."
441
+
442
+ | Anti-Pattern | Why It Fails | Correct Approach |
443
+ |---|---|---|
444
+ | **Big bang refactor** — rewriting everything at once | No rollback path. One bug = entire refactor is broken | One module per session. Commit + verify after each module |
445
+ | **Surgery without safety net** — refactoring before characterization tests exist | No way to verify behavior is preserved. "It compiles" ≠ "it works" | HARD-GATE: safeguard tests must pass BEFORE any surgery begins |
446
+ | **Coupled module surgery** — refactoring two interdependent modules simultaneously | Changes in module A break module B mid-surgery. Neither is stable | One module per session. Stabilize A completely before touching B |
447
+ | **Ignoring the autopsy** — starting refactoring without understanding current health | Fixes symptoms not causes. Wastes effort on low-impact modules | Phase 0 autopsy is mandatory. Surgery queue ordered by impact, not convenience |
448
+ | **Prototype patterns in production** — replacing legacy code with quick-and-dirty rewrites | Creates new legacy. The "rescue" becomes the next rescue target | Apply proven refactoring patterns from autopsy recommendations. Clean code, not fast code |
449
+ | **No rollback point** — surgery without a tagged baseline | If surgery goes wrong, no safe state to return to | `git tag rune-rescue-baseline` before ANY code changes |
450
+
451
+ ## Sharp Edges
452
+
453
+ Known failure modes for this skill. Check these before declaring done.
454
+
455
+ | Failure Mode | Severity | Mitigation |
456
+ |---|---|---|
457
+ | Starting surgery before safety net committed and tagged | CRITICAL | HARD-GATE: `rune-rescue-safety-net` git tag must exist before Phase 2 |
458
+ | Refactoring two coupled modules in the same session | HIGH | HARD-GATE: one module per session — split coupled modules into sequential sessions |
459
+ | Blast radius > 5 files before surgery halted | HIGH | Count importers before each surgery — stop if > 5 and split scope |
460
+ | Not saving state between sessions (rescue spans many sessions) | MEDIUM | journal + session-bridge mandatory after each session — RESCUE-STATE.md must be current |
461
+ | Continuing surgery after characterization tests fail on current code | MEDIUM | Tests must PASS on unmodified code first — fix the test if current behavior is captured wrongly |
462
+
463
+ ## Done When
464
+
465
+ - autopsy complete with quantified health score and surgery queue
466
+ - safeguard characterization tests passing on current code (HARD-GATE)
467
+ - All modules in surgery queue processed (one per session)
468
+ - @legacy and @bridge markers removed from codebase (CLEANUP phase)
469
+ - Final autopsy run — health_score_final > health_score_baseline
470
+ - Rescue Report emitted with before/after health comparison and session count
471
+
472
+ ## Cost Profile
473
+
474
+ ~$0.10-0.30 per session. Sonnet for surgery, opus for autopsy. Multi-session workflow.