@rune-kit/rune 2.1.1 → 2.2.1

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 (157) hide show
  1. package/README.md +40 -34
  2. package/compiler/__tests__/pack-split.test.js +145 -0
  3. package/compiler/adapters/antigravity.js +1 -1
  4. package/compiler/adapters/codex.js +77 -0
  5. package/compiler/adapters/cursor.js +1 -1
  6. package/compiler/adapters/generic.js +1 -1
  7. package/compiler/adapters/index.js +4 -0
  8. package/compiler/adapters/opencode.js +86 -0
  9. package/compiler/adapters/windsurf.js +1 -1
  10. package/compiler/bin/rune.js +10 -7
  11. package/compiler/doctor.js +42 -0
  12. package/compiler/emitter.js +64 -10
  13. package/compiler/parser.js +42 -3
  14. package/compiler/transformer.js +10 -6
  15. package/compiler/transforms/branding.js +1 -1
  16. package/compiler/transforms/compliance.js +40 -0
  17. package/extensions/ai-ml/PACK.md +38 -474
  18. package/extensions/ai-ml/skills/ai-agents.md +172 -0
  19. package/extensions/ai-ml/skills/code-sandbox.md +187 -0
  20. package/extensions/ai-ml/skills/deep-research.md +146 -0
  21. package/extensions/ai-ml/skills/embedding-search.md +66 -0
  22. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -0
  23. package/extensions/ai-ml/skills/llm-architect.md +125 -0
  24. package/extensions/ai-ml/skills/llm-integration.md +64 -0
  25. package/extensions/ai-ml/skills/prompt-patterns.md +72 -0
  26. package/extensions/ai-ml/skills/rag-patterns.md +66 -0
  27. package/extensions/ai-ml/skills/web-extraction.md +114 -0
  28. package/extensions/analytics/PACK.md +19 -484
  29. package/extensions/analytics/skills/ab-testing.md +72 -0
  30. package/extensions/analytics/skills/dashboard-patterns.md +83 -0
  31. package/extensions/analytics/skills/data-validation.md +68 -0
  32. package/extensions/analytics/skills/funnel-analysis.md +81 -0
  33. package/extensions/analytics/skills/sql-patterns.md +57 -0
  34. package/extensions/analytics/skills/statistical-analysis.md +79 -0
  35. package/extensions/analytics/skills/tracking-setup.md +71 -0
  36. package/extensions/backend/PACK.md +44 -618
  37. package/extensions/backend/skills/api-patterns.md +84 -0
  38. package/extensions/backend/skills/async-pipeline.md +193 -0
  39. package/extensions/backend/skills/auth-patterns.md +97 -0
  40. package/extensions/backend/skills/background-jobs.md +133 -0
  41. package/extensions/backend/skills/caching-patterns.md +108 -0
  42. package/extensions/backend/skills/cli-generation.md +133 -0
  43. package/extensions/backend/skills/database-patterns.md +87 -0
  44. package/extensions/backend/skills/middleware-patterns.md +104 -0
  45. package/extensions/chrome-ext/PACK.md +19 -921
  46. package/extensions/chrome-ext/skills/cws-preflight.md +143 -0
  47. package/extensions/chrome-ext/skills/cws-publish.md +104 -0
  48. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -0
  49. package/extensions/chrome-ext/skills/ext-messaging.md +139 -0
  50. package/extensions/chrome-ext/skills/ext-storage.md +133 -0
  51. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -0
  52. package/extensions/content/PACK.md +43 -335
  53. package/extensions/content/skills/blog-patterns.md +88 -0
  54. package/extensions/content/skills/cms-integration.md +131 -0
  55. package/extensions/content/skills/content-scoring.md +107 -0
  56. package/extensions/content/skills/i18n.md +83 -0
  57. package/extensions/content/skills/mdx-authoring.md +137 -0
  58. package/extensions/content/skills/reference.md +1014 -0
  59. package/extensions/content/skills/seo-patterns.md +67 -0
  60. package/extensions/content/skills/video-repurpose.md +153 -0
  61. package/extensions/devops/PACK.md +38 -457
  62. package/extensions/devops/skills/chaos-testing.md +67 -0
  63. package/extensions/devops/skills/ci-cd.md +75 -0
  64. package/extensions/devops/skills/docker.md +58 -0
  65. package/extensions/devops/skills/edge-serverless.md +163 -0
  66. package/extensions/devops/skills/infra-as-code.md +158 -0
  67. package/extensions/devops/skills/kubernetes.md +110 -0
  68. package/extensions/devops/skills/monitoring.md +57 -0
  69. package/extensions/devops/skills/server-setup.md +64 -0
  70. package/extensions/devops/skills/ssl-domain.md +42 -0
  71. package/extensions/ecommerce/PACK.md +62 -226
  72. package/extensions/ecommerce/skills/cart-system.md +79 -0
  73. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -0
  74. package/extensions/ecommerce/skills/order-management.md +126 -0
  75. package/extensions/ecommerce/skills/payment-integration.md +472 -0
  76. package/extensions/ecommerce/skills/shopify-dev.md +69 -0
  77. package/extensions/ecommerce/skills/subscription-billing.md +93 -0
  78. package/extensions/ecommerce/skills/tax-compliance.md +117 -0
  79. package/extensions/gamedev/PACK.md +66 -317
  80. package/extensions/gamedev/skills/asset-pipeline.md +74 -0
  81. package/extensions/gamedev/skills/audio-system.md +129 -0
  82. package/extensions/gamedev/skills/camera-system.md +87 -0
  83. package/extensions/gamedev/skills/ecs.md +98 -0
  84. package/extensions/gamedev/skills/game-loops.md +72 -0
  85. package/extensions/gamedev/skills/input-system.md +199 -0
  86. package/extensions/gamedev/skills/multiplayer.md +180 -0
  87. package/extensions/gamedev/skills/particles.md +105 -0
  88. package/extensions/gamedev/skills/physics-engine.md +89 -0
  89. package/extensions/gamedev/skills/scene-management.md +146 -0
  90. package/extensions/gamedev/skills/threejs-patterns.md +90 -0
  91. package/extensions/gamedev/skills/webgl.md +71 -0
  92. package/extensions/mobile/PACK.md +56 -223
  93. package/extensions/mobile/skills/app-store-connect.md +152 -0
  94. package/extensions/mobile/skills/app-store-prep.md +66 -0
  95. package/extensions/mobile/skills/deep-linking.md +109 -0
  96. package/extensions/mobile/skills/flutter.md +60 -0
  97. package/extensions/mobile/skills/ios-build-pipeline.md +142 -0
  98. package/extensions/mobile/skills/native-bridge.md +66 -0
  99. package/extensions/mobile/skills/ota-updates.md +97 -0
  100. package/extensions/mobile/skills/push-notifications.md +111 -0
  101. package/extensions/mobile/skills/react-native.md +82 -0
  102. package/extensions/saas/PACK.md +26 -720
  103. package/extensions/saas/skills/billing-integration.md +121 -0
  104. package/extensions/saas/skills/feature-flags.md +130 -0
  105. package/extensions/saas/skills/multi-tenant.md +103 -0
  106. package/extensions/saas/skills/onboarding-flow.md +139 -0
  107. package/extensions/saas/skills/subscription-flow.md +95 -0
  108. package/extensions/saas/skills/team-management.md +144 -0
  109. package/extensions/security/PACK.md +10 -448
  110. package/extensions/security/skills/api-security.md +140 -0
  111. package/extensions/security/skills/compliance.md +68 -0
  112. package/extensions/security/skills/owasp-audit.md +64 -0
  113. package/extensions/security/skills/pentest-patterns.md +77 -0
  114. package/extensions/security/skills/secret-mgmt.md +65 -0
  115. package/extensions/security/skills/supply-chain.md +65 -0
  116. package/extensions/trading/PACK.md +18 -535
  117. package/extensions/trading/skills/chart-components.md +55 -0
  118. package/extensions/trading/skills/experiment-loop.md +125 -0
  119. package/extensions/trading/skills/fintech-patterns.md +47 -0
  120. package/extensions/trading/skills/indicator-library.md +58 -0
  121. package/extensions/trading/skills/quant-analysis.md +111 -0
  122. package/extensions/trading/skills/realtime-data.md +58 -0
  123. package/extensions/trading/skills/trade-logic.md +104 -0
  124. package/extensions/ui/PACK.md +34 -853
  125. package/extensions/ui/skills/a11y-audit.md +91 -0
  126. package/extensions/ui/skills/animation-patterns.md +106 -0
  127. package/extensions/ui/skills/component-patterns.md +75 -0
  128. package/extensions/ui/skills/design-decision.md +98 -0
  129. package/extensions/ui/skills/design-system.md +68 -0
  130. package/extensions/ui/skills/landing-patterns.md +155 -0
  131. package/extensions/ui/skills/palette-picker.md +162 -0
  132. package/extensions/ui/skills/react-health.md +90 -0
  133. package/extensions/ui/skills/type-system.md +125 -0
  134. package/extensions/ui/skills/web-vitals.md +153 -0
  135. package/extensions/zalo/PACK.md +117 -0
  136. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -0
  137. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -0
  138. package/extensions/zalo/skills/zalo-oa-setup.md +236 -0
  139. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -0
  140. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -0
  141. package/extensions/zalo/skills/zalo-personal-setup.md +153 -0
  142. package/extensions/zalo/skills/zalo-rate-guard.md +219 -0
  143. package/package.json +5 -2
  144. package/skills/brainstorm/SKILL.md +63 -1
  145. package/skills/cook/SKILL.md +89 -6
  146. package/skills/debug/SKILL.md +5 -0
  147. package/skills/fix/SKILL.md +5 -0
  148. package/skills/mcp-builder/SKILL.md +48 -1
  149. package/skills/neural-memory/SKILL.md +362 -0
  150. package/skills/plan/SKILL.md +3 -0
  151. package/skills/rescue/SKILL.md +5 -0
  152. package/skills/review/SKILL.md +44 -5
  153. package/skills/review-intake/SKILL.md +17 -1
  154. package/skills/skill-router/SKILL.md +106 -8
  155. package/skills/team/SKILL.md +24 -1
  156. package/skills/test/SKILL.md +18 -0
  157. package/skills/verification/SKILL.md +40 -1
@@ -4,7 +4,7 @@ description: "Meta-enforcement layer that routes EVERY agent action through the
4
4
  user-invocable: false
5
5
  metadata:
6
6
  author: runedev
7
- version: "1.1.0"
7
+ version: "1.2.0"
8
8
  layer: L0
9
9
  model: haiku
10
10
  group: orchestrator
@@ -64,14 +64,33 @@ Before standard routing, check if adaptive routing rules exist:
64
64
  - Model hints are written by cook Phase 8 when debug-fix loops hit max retries on the same error pattern
65
65
  - Model hints do NOT override explicit user model preferences
66
66
 
67
+ ### Step 0.25 — Request Classifier (Fast-Path Filter)
68
+
69
+ Before intent classification, categorize the request into one of 5 types. This determines the **enforcement level** — how strictly routing must be followed.
70
+
71
+ | Request Type | Keywords / Signals | Enforcement | Action |
72
+ |---|---|---|---|
73
+ | `CODE_CHANGE` | "build", "implement", "add", "create", "fix", "refactor", "update code" | **FULL** | cook mandatory, no exceptions |
74
+ | `QUESTION` | "what is", "how does", "explain", "why" | **LITE** | Check if a skill has domain knowledge first; answer directly if no skill matches |
75
+ | `DEBUG_REQUEST` | "error", "bug", "not working", "broken", "crash", "fails" | **FULL** | debug skill mandatory |
76
+ | `REVIEW_REQUEST` | "review", "check", "audit", "look at this code" | **FULL** | review skill mandatory |
77
+ | `EXPLORE` | "find", "search", "where is", "show me", "list" | **LITE** | scout if codebase-related; answer directly if general |
78
+
79
+ **Enforcement levels:**
80
+ - **FULL** → MUST route through a skill. Writing code without skill invocation = protocol violation.
81
+ - **LITE** → SHOULD check if a skill applies. Can answer directly if no skill matches and the response involves no code changes.
82
+
83
+ **Escape hatch**: If request is clearly trivial (< 5 LOC change, single-line fix, user says "just do it"), classify as CODE_CHANGE but cook activates Fast Mode automatically.
84
+
67
85
  ### Step 0.5 — STOP before responding
68
86
 
69
87
  Before generating ANY response (including clarifying questions), the agent MUST:
70
88
 
71
- 1. **Classify the user's intent** using the routing table below
72
- 2. **Identify which skill(s) match** if even 1% chance a skill applies, invoke it
73
- 3. **Invoke the skill** via the Skill tool
74
- 4. **Follow the skill's instructions** the skill dictates the workflow, not the agent
89
+ 1. **Check the request type** from Step 0.25 — if FULL enforcement, routing is mandatory
90
+ 2. **Classify the user's intent** using the routing table below
91
+ 3. **Identify which skill(s) match** if even 1% chance a skill applies, invoke it
92
+ 4. **Invoke the skill** via the Skill tool
93
+ 5. **Follow the skill's instructions** — the skill dictates the workflow, not the agent
75
94
 
76
95
  ### Step 1 — Intent Classification (Progressive Disclosure)
77
96
 
@@ -133,14 +152,21 @@ These are rarely invoked directly — they're called by Tier 1/2 skills:
133
152
  | `rune:completion-gate` | cook | Validate claims |
134
153
  | `rune:sentinel-env` | cook, scaffold, onboard | Environment pre-flight |
135
154
  | `rune:research` / `rune:docs-seeker` | any | Look up docs |
136
- | `rune:session-bridge` | cook, team | Save context |
155
+ | `rune:session-bridge` | cook, team | Save context (in-session state handoff) |
156
+ | `rune:journal` | cook, team | Persistent work log within a session |
157
+ | `rune:neural-memory` | cook, team, any L1/L2 | Cross-session cognitive persistence via Neural Memory MCP — semantic complement to session-bridge and journal |
137
158
  | `rune:git` | cook, scaffold, team, launch | Semantic commits, PRs, branches |
138
159
  | `rune:doc-processor` | docs, marketing | PDF/DOCX/XLSX/PPTX generation |
139
160
  | "Done" / "ship it" / "xong" | — | `rune:verification` → commit |
161
+ | "recall", "remember", "brain", "nmem", "cross-project memory" | `rune:neural-memory` | Retrieve or persist cross-session context |
140
162
 
141
163
  #### Tier 4 — Domain Extension Packs (L4)
142
164
 
143
- When user intent matches a domain-specific pattern or user explicitly invokes an L4 trigger command, route to the L4 pack. The agent reads the pack's PACK.md and follows the matching skill's workflow.
165
+ When user intent matches a domain-specific pattern or user explicitly invokes an L4 trigger command, route to the L4 pack.
166
+
167
+ **Split pack loading** (context-efficient): First `Read` the pack's PACK.md index. If the index contains `format: split` in its frontmatter metadata, it is a split pack — the index lists skills in a table but skill content lives in separate files under `skills/`. Match user intent to the specific skill name in the table, then `Read` only that skill file (e.g., `extensions/backend/skills/api-design.md`). This loads ~100-200 lines instead of ~1000+.
168
+
169
+ **Monolith pack loading** (legacy): If no `format: split` marker, the PACK.md contains all skills inline — read it fully and extract the matching `### skill-name` section.
144
170
 
145
171
  | User Intent / Domain Signal | Route To | Pack File |
146
172
  |---|---|---|
@@ -156,13 +182,41 @@ When user intent matches a domain-specific pattern or user explicitly invokes an
156
182
  | Three.js, WebGL, game loop, physics | `@rune/gamedev` | `extensions/gamedev/PACK.md` |
157
183
  | Blog, CMS, MDX, i18n, SEO | `@rune/content` | `extensions/content/PACK.md` |
158
184
  | Analytics, A/B testing, funnels, dashboards | `@rune/analytics` | `extensions/analytics/PACK.md` |
185
+ | Chrome extension, manifest, service worker | `@rune/chrome-ext` | `extensions/chrome-ext/PACK.md` |
186
+ | PRD, roadmap, KPI, release notes, product spec | `@rune-pro/product` | `extensions/pro-product/PACK.md` |
187
+ | Sales outreach, pipeline, call prep, prospecting | `@rune-pro/sales` | `extensions/pro-sales/PACK.md` |
188
+ | Data science, SQL, dashboards, statistical analysis | `@rune-pro/data-science` | `extensions/pro-data-science/PACK.md` |
189
+ | Support tickets, KB, escalation, SLA tracking | `@rune-pro/support` | `extensions/pro-support/PACK.md` |
190
+ | Budget, expense, revenue forecast, P&L, cash flow | `@rune-pro/finance` | `extensions/pro-finance/PACK.md` |
191
+ | Contract review, NDA, compliance, GDPR, IP audit | `@rune-pro/legal` | `extensions/pro-legal/PACK.md` |
159
192
 
160
193
  **L4 routing rules:**
161
- 1. If user explicitly invokes an L4 trigger (e.g., `/rune rag-patterns`), read the PACK.md and follow the skill workflow directly
194
+ 1. If user explicitly invokes an L4 trigger (e.g., `/rune rag-patterns`), read the PACK.md index first, then load only the matching skill file (split packs) or extract the matching section (monolith packs)
162
195
  2. If the intent also involves implementation, route to `cook` (L1) first — cook will detect L4 context in Phase 1.5
163
196
  3. L4 packs supplement L1/L2 workflows — they are domain knowledge, not standalone orchestrators
164
197
  4. L4 packs can call L3 utilities (scout, verification) but CANNOT call L1 or L2 skills
165
198
  5. If the L4 pack file is not found on disk, skip silently and proceed with standard routing
199
+ 6. **NEVER load an entire split pack** — always load index first, then only the specific skill file needed
200
+
201
+ ### Step 1.5 — File Ownership Matrix (Constraint Inheritance)
202
+
203
+ When the routed skill produces file changes, the **owner skill's constraints** apply to those files — even if a different skill (e.g., cook) is the orchestrator.
204
+
205
+ | File Pattern | Owner Skill | Constraints Applied |
206
+ |---|---|---|
207
+ | `*.test.*`, `*.spec.*`, `__tests__/` | `rune:test` | Test patterns, assertions, no `test.skip`, coverage rules |
208
+ | `migrations/`, `schema.*`, `*.prisma` | `rune:db` | Migration safety, rollback script, parameterized queries |
209
+ | `Dockerfile`, `*.yml` (CI/CD), `terraform/` | `rune:deploy` | Deployment checklist, no hardcoded secrets |
210
+ | `docs/*.md`, `README.md`, `CHANGELOG.md` | `rune:docs` | Documentation patterns, no stale references |
211
+ | `SKILL.md`, `PACK.md` | `rune:skill-forge` | Skill template compliance, frontmatter validation |
212
+ | `.env*`, `*secret*`, `*credential*` | `rune:sentinel` | Security scan mandatory, never commit secrets |
213
+ | `*.css`, `*.scss`, `tailwind.config.*` | `@rune/ui` | Design system patterns (if L4 pack installed) |
214
+
215
+ **Ownership rules:**
216
+ 1. Ownership = **constraints apply**, NOT exclusive access. cook can modify test files during Phase 4 as long as test constraints are honored.
217
+ 2. If a file matches multiple patterns, ALL matching constraints apply (union, not exclusive).
218
+ 3. If no pattern matches, the routed skill's own constraints apply (default behavior).
219
+ 4. File ownership is checked DURING implementation, not at routing time — it augments, not replaces, skill routing.
166
220
 
167
221
  ### Step 2 — Compound Intent Resolution
168
222
 
@@ -209,6 +263,19 @@ Once routed:
209
263
  3. Follow the skill's workflow exactly
210
264
  4. If the skill has a checklist/phases, track via TodoWrite
211
265
 
266
+ ### Step 5 — Post-Completion Neural Memory Capture
267
+
268
+ After ANY L1 or L2 workflow completes (cook, team, launch, rescue, scaffold, plan, design, debug, fix, review, deploy, sentinel, perf, db, ba, docs, mcp-builder, etc.):
269
+
270
+ 1. Trigger `rune:neural-memory` in **Capture Mode** automatically
271
+ 2. Save 2–5 memories covering: key decisions made, bugs fixed, patterns applied, architectural choices
272
+ 3. Use rich cognitive language (causal, temporal, decisional) — NOT flat facts
273
+ 4. Tag memories with [project-name, skill-used, topic]
274
+ 5. This step is MANDATORY even if the user did not ask for it
275
+ 6. Exception: skip if the workflow produced zero technical output (e.g., only a clarifying question was asked)
276
+
277
+ **Capture Mode trigger phrase**: "Session artifact — capturing to Neural Memory."
278
+
212
279
  ## Routing Exceptions
213
280
 
214
281
  These DO NOT need skill routing:
@@ -219,9 +286,22 @@ These DO NOT need skill routing:
219
286
 
220
287
  ## Output Format
221
288
 
289
+ ### Routing Proof (Required in Every Code Response)
290
+
291
+ Every response that involves code changes MUST begin with a routing proof line:
292
+
293
+ ```
294
+ > Routed: rune:<skill> | Type: CODE_CHANGE | Confidence: HIGH
295
+ ```
296
+
297
+ This is NOT optional formatting. It is evidence that routing occurred. If this line is missing from a code response, the response violated skill-router compliance. For LITE enforcement (QUESTION, EXPLORE), the proof line is optional.
298
+
299
+ ### Full Routing Decision (when announcing route)
300
+
222
301
  ```
223
302
  ## Routing Decision
224
303
  - **Intent**: [classified user intent]
304
+ - **Type**: CODE_CHANGE | QUESTION | DEBUG_REQUEST | REVIEW_REQUEST | EXPLORE
225
305
  - **Skill**: rune:[skill-name]
226
306
  - **Confidence**: HIGH | MEDIUM | LOW
227
307
  - **Override**: [routing override applied, if any]
@@ -262,6 +342,24 @@ For multi-skill chains:
262
342
  - Success = every agent response passes through routing check
263
343
  - Failure = any code written without skill invocation
264
344
 
345
+ ## Self-Verification Trigger (MANDATORY)
346
+
347
+ <HARD-GATE>
348
+ Before EVERY response, complete this 3-point self-check:
349
+
350
+ 1. **Did I classify this request?** (Step 0.25 — what type is it?)
351
+ 2. **Did I route through a skill?** (Step 1-2 — which skill handles this?)
352
+ 3. **Am I about to write code without a skill invocation?** → **STOP. Route first.**
353
+
354
+ If the request type is `CODE_CHANGE` or `DEBUG_REQUEST` (FULL enforcement) and ANY answer is "no":
355
+ → DO NOT RESPOND. Complete routing first.
356
+
357
+ If the request type is `QUESTION` or `EXPLORE` (LITE enforcement):
358
+ → Check if a skill has relevant domain knowledge. If yes, route. If no, respond directly.
359
+
360
+ **User override**: If user explicitly says "skip routing", "just write it", "no process" → respect the override. Log: "User override: routing skipped per explicit request."
361
+ </HARD-GATE>
362
+
265
363
  ## Cost Profile
266
364
 
267
365
  ~0 tokens (routing logic is internalized from this document). Cost comes from the skills it routes to, not from skill-router itself. The routing table is loaded once and cached in context.
@@ -5,7 +5,7 @@ context: fork
5
5
  agent: general-purpose
6
6
  metadata:
7
7
  author: runedev
8
- version: "0.3.0"
8
+ version: "0.4.0"
9
9
  layer: L1
10
10
  model: opus
11
11
  group: orchestrator
@@ -250,6 +250,29 @@ Error recovery:
250
250
  → Present to user for decision before continuing
251
251
  ```
252
252
 
253
+ **3c. Evaluate subagent status per stream.**
254
+
255
+ Each cook instance MUST have returned one of four statuses. Team handles them as follows:
256
+
257
+ | Cook Status | Team Action |
258
+ |-------------|-------------|
259
+ | `DONE` | Stream cleared for merge — proceed normally |
260
+ | `DONE_WITH_CONCERNS` | Stream cleared for merge, BUT trigger **cross-workstream review**: check if the concern impacts any other stream's files or contracts before merging ALL streams. Log concern in Team Report. |
261
+ | `NEEDS_CONTEXT` | Stream paused — present the specific question to user. Resume that stream after answer. Other independent streams may continue in parallel. |
262
+ | `BLOCKED` | Stream blocked from merge. If stream has no dependents → continue with remaining streams and report partial completion. If stream has dependents → STOP all dependent streams, present to user with full blocker details. |
263
+
264
+ **Cross-workstream review (triggered by any DONE_WITH_CONCERNS)**:
265
+
266
+ ```
267
+ 1. Read the concern from the cook report
268
+ 2. Check if the concern touches shared contracts, interfaces, or shared files
269
+ → Use Grep to find the concern's affected symbols/files across all worktrees
270
+ 3. If concern is isolated to stream's own files → proceed to merge (concern logged only)
271
+ 4. If concern crosses stream boundaries → resolve before merge:
272
+ → Present to user with: affected streams, concern details, two remediation options
273
+ → Do NOT merge any stream until user decides
274
+ ```
275
+
253
276
  Mark todo[2] `completed`.
254
277
 
255
278
  ---
@@ -144,6 +144,23 @@ After GREEN phase, call `verification` to check coverage threshold (80% minimum)
144
144
  - If coverage drops below 80%: identify uncovered lines, write additional tests
145
145
  - Report coverage gaps with file:line references
146
146
 
147
+ ### Phase 6.5: Diff-Aware Mode (optional)
148
+
149
+ When invoked with `mode: "diff-aware"` or by `cook` after implementation:
150
+
151
+ 1. Run `git diff main --name-only` to get changed files
152
+ 2. For each changed file, trace its **blast radius**: what imports it? what routes does it serve? what components render it?
153
+ 3. Map changed files → affected routes/endpoints/pages
154
+ 4. Prioritize tests: files with most downstream dependents get tested first
155
+ 5. Generate targeted test commands that cover ONLY affected paths — skip unchanged modules
156
+
157
+ This mode is valuable for large codebases where running the full suite is slow. It answers: "what could this diff have broken?"
158
+
159
+ ```
160
+ Input: git diff main --name-only
161
+ Output: Prioritized test plan targeting only affected paths
162
+ ```
163
+
147
164
  ## Test Types
148
165
 
149
166
  | Type | When | Framework | Speed |
@@ -152,6 +169,7 @@ After GREEN phase, call `verification` to check coverage threshold (80% minimum)
152
169
  | Integration | API endpoints, DB operations | supertest/httpx/reqwest | Medium |
153
170
  | E2E | Critical user flows | Playwright/Cypress via browser-pilot | Slow |
154
171
  | Regression | After bug fixes | Same as unit | Fast |
172
+ | Diff-aware | After implementation, large codebases | Same as unit + integration | Fast (targeted) |
155
173
 
156
174
  ## Error Recovery
157
175
 
@@ -3,7 +3,7 @@ name: verification
3
3
  description: "Universal verification runner. Runs lint, type-check, tests, and build. Use after any code change to verify nothing is broken."
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.2.0"
6
+ version: "0.3.0"
7
7
  layer: L3
8
8
  model: haiku
9
9
  group: validation
@@ -98,6 +98,44 @@ If build fails: record first 20 lines of build output, mark as FAIL.
98
98
 
99
99
  Compile all results into the structured report. Update all TodoWrite items to completed.
100
100
 
101
+ ### Artifact Verification
102
+
103
+ > Inspired by CLI-Anything (HKUDS/CLI-Anything, 14.5k★): "Never trust exit 0."
104
+ > Many tools exit 0 even when they fail silently. Always verify ACTUAL output.
105
+
106
+ After each phase command, verify that the expected artifact or indicator is present:
107
+
108
+ **Test output** — scan stdout for the pass/fail summary line:
109
+ - Vitest/Jest: look for `X passed`, `X failed` — if neither appears, output is incomplete
110
+ - Pytest: look for `X passed` or `X failed` — exit 0 with no summary = runner crashed silently
111
+ - If only exit code available and no summary line found → mark as INCOMPLETE, not PASS
112
+
113
+ **Build output** — after `npm run build` / `cargo build` / `go build`:
114
+ - Verify the output file exists: `Glob("dist/**/*.js")` or equivalent
115
+ - Verify file size > 0 bytes: a zero-byte output = silent truncation failure
116
+ - If output directory is missing → FAIL even if command exited 0
117
+
118
+ **Lint output** — parse stdout for counts, not just exit code:
119
+ - ESLint: look for `X problems (Y errors, Z warnings)` — `0 problems` = PASS
120
+ - Ruff/Flake8: zero output lines = PASS; any file:line output = FAIL
121
+ - If linter exits 0 but output contains `error` keyword → log as suspicious, mark WARN
122
+
123
+ **Generated files** — check magic bytes for binary outputs:
124
+ - PDF: first bytes must be `%PDF` — use `Bash("head -c 4 file.pdf")`
125
+ - ZIP/XLSX/DOCX: first bytes must be `PK` (ZIP magic) — use `Bash("head -c 2 file.zip")`
126
+ - File size must exceed minimum threshold (PDF > 1KB, ZIP > 100 bytes)
127
+
128
+ **Type check** — do not trust exit code alone:
129
+ - TypeScript `tsc --noEmit`: look for `Found X errors` or absence of error lines
130
+ - `Found 0 errors` = PASS; any other count = FAIL
131
+ - Empty output from `tsc` = PASS (no errors emitted) — note explicitly
132
+
133
+ <HARD-GATE name="artifact-verification">
134
+ Verification MUST check actual command output for success indicators, not just exit codes.
135
+ Exit 0 without a confirming output artifact or success string = UNVERIFIED.
136
+ Report the specific line that confirmed success (e.g., "3 passed, 0 failed").
137
+ </HARD-GATE>
138
+
101
139
  ## Error Recovery
102
140
 
103
141
  - If project type cannot be detected: report "Unknown project type" and skip all checks
@@ -187,6 +225,7 @@ Known failure modes for this skill. Check these before declaring done.
187
225
  | Marking check as PASS when the tool isn't installed | MEDIUM | Mark as SKIP (not PASS) — PASS means the tool ran and reported clean |
188
226
  | Stopping after first failure instead of running remaining checks | MEDIUM | Run all checks; aggregate all failures so developer can fix everything at once |
189
227
  | Reporting PASS when output has warnings but zero errors | LOW | PASS is correct but note warning count — caller decides if warnings matter |
228
+ | Trusting exit code 0 without output verification | CRITICAL | Artifact Verification HARD-GATE: always confirm success indicator in stdout (pass count, "0 errors", output file exists) |
190
229
 
191
230
  ## Done When
192
231