@rune-kit/rune 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -6
  3. package/commands/rune.md +168 -168
  4. package/contexts/dev.md +34 -34
  5. package/contexts/research.md +43 -43
  6. package/contexts/review.md +55 -55
  7. package/extensions/ai-ml/PACK.md +88 -88
  8. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  9. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  10. package/extensions/ai-ml/skills/deep-research.md +146 -146
  11. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  12. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  13. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  14. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  15. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  16. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  17. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  18. package/extensions/analytics/PACK.md +92 -92
  19. package/extensions/analytics/skills/ab-testing.md +72 -72
  20. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  21. package/extensions/analytics/skills/data-validation.md +68 -68
  22. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  23. package/extensions/analytics/skills/sql-patterns.md +57 -57
  24. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  25. package/extensions/analytics/skills/tracking-setup.md +71 -71
  26. package/extensions/backend/PACK.md +104 -104
  27. package/extensions/backend/skills/api-patterns.md +84 -84
  28. package/extensions/backend/skills/async-pipeline.md +193 -193
  29. package/extensions/backend/skills/auth-patterns.md +97 -97
  30. package/extensions/backend/skills/background-jobs.md +133 -133
  31. package/extensions/backend/skills/caching-patterns.md +108 -108
  32. package/extensions/backend/skills/cli-generation.md +133 -133
  33. package/extensions/backend/skills/database-patterns.md +87 -87
  34. package/extensions/backend/skills/middleware-patterns.md +104 -104
  35. package/extensions/chrome-ext/PACK.md +93 -93
  36. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  37. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  38. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  39. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  40. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  41. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  42. package/extensions/content/PACK.md +96 -96
  43. package/extensions/content/skills/blog-patterns.md +88 -88
  44. package/extensions/content/skills/cms-integration.md +131 -131
  45. package/extensions/content/skills/content-scoring.md +107 -107
  46. package/extensions/content/skills/i18n.md +83 -83
  47. package/extensions/content/skills/mdx-authoring.md +137 -137
  48. package/extensions/content/skills/reference.md +1014 -1014
  49. package/extensions/content/skills/seo-patterns.md +67 -67
  50. package/extensions/content/skills/video-repurpose.md +153 -153
  51. package/extensions/devops/PACK.md +101 -101
  52. package/extensions/devops/skills/chaos-testing.md +67 -67
  53. package/extensions/devops/skills/ci-cd.md +75 -75
  54. package/extensions/devops/skills/docker.md +58 -58
  55. package/extensions/devops/skills/edge-serverless.md +163 -163
  56. package/extensions/devops/skills/infra-as-code.md +158 -158
  57. package/extensions/devops/skills/kubernetes.md +110 -110
  58. package/extensions/devops/skills/monitoring.md +57 -57
  59. package/extensions/devops/skills/server-setup.md +64 -64
  60. package/extensions/devops/skills/ssl-domain.md +42 -42
  61. package/extensions/ecommerce/PACK.md +116 -116
  62. package/extensions/ecommerce/skills/cart-system.md +79 -79
  63. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  64. package/extensions/ecommerce/skills/order-management.md +126 -126
  65. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  66. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  67. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  68. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  69. package/extensions/gamedev/PACK.md +142 -142
  70. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  71. package/extensions/gamedev/skills/audio-system.md +129 -129
  72. package/extensions/gamedev/skills/camera-system.md +87 -87
  73. package/extensions/gamedev/skills/ecs.md +98 -98
  74. package/extensions/gamedev/skills/game-loops.md +72 -72
  75. package/extensions/gamedev/skills/input-system.md +199 -199
  76. package/extensions/gamedev/skills/multiplayer.md +180 -180
  77. package/extensions/gamedev/skills/particles.md +105 -105
  78. package/extensions/gamedev/skills/physics-engine.md +89 -89
  79. package/extensions/gamedev/skills/scene-management.md +146 -146
  80. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  81. package/extensions/gamedev/skills/webgl.md +71 -71
  82. package/extensions/mobile/PACK.md +106 -106
  83. package/extensions/mobile/skills/app-store-connect.md +152 -152
  84. package/extensions/mobile/skills/app-store-prep.md +66 -66
  85. package/extensions/mobile/skills/deep-linking.md +109 -109
  86. package/extensions/mobile/skills/flutter.md +60 -60
  87. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  88. package/extensions/mobile/skills/native-bridge.md +66 -66
  89. package/extensions/mobile/skills/ota-updates.md +97 -97
  90. package/extensions/mobile/skills/push-notifications.md +111 -111
  91. package/extensions/mobile/skills/react-native.md +82 -82
  92. package/extensions/saas/PACK.md +116 -116
  93. package/extensions/saas/skills/billing-integration.md +200 -200
  94. package/extensions/saas/skills/feature-flags.md +130 -130
  95. package/extensions/saas/skills/multi-tenant.md +103 -103
  96. package/extensions/saas/skills/onboarding-flow.md +139 -139
  97. package/extensions/saas/skills/subscription-flow.md +95 -95
  98. package/extensions/saas/skills/team-management.md +144 -144
  99. package/extensions/security/PACK.md +99 -99
  100. package/extensions/security/skills/api-security.md +140 -140
  101. package/extensions/security/skills/compliance.md +68 -68
  102. package/extensions/security/skills/owasp-audit.md +64 -64
  103. package/extensions/security/skills/pentest-patterns.md +77 -77
  104. package/extensions/security/skills/secret-mgmt.md +65 -65
  105. package/extensions/security/skills/supply-chain.md +65 -65
  106. package/extensions/trading/PACK.md +80 -80
  107. package/extensions/trading/skills/chart-components.md +55 -55
  108. package/extensions/trading/skills/experiment-loop.md +125 -125
  109. package/extensions/trading/skills/fintech-patterns.md +47 -47
  110. package/extensions/trading/skills/indicator-library.md +58 -58
  111. package/extensions/trading/skills/quant-analysis.md +111 -111
  112. package/extensions/trading/skills/realtime-data.md +58 -58
  113. package/extensions/trading/skills/trade-logic.md +104 -104
  114. package/extensions/ui/PACK.md +130 -130
  115. package/extensions/ui/skills/a11y-audit.md +91 -91
  116. package/extensions/ui/skills/animation-patterns.md +127 -127
  117. package/extensions/ui/skills/component-patterns.md +100 -100
  118. package/extensions/ui/skills/design-decision.md +108 -108
  119. package/extensions/ui/skills/design-system.md +68 -68
  120. package/extensions/ui/skills/landing-patterns.md +155 -155
  121. package/extensions/ui/skills/palette-picker.md +173 -173
  122. package/extensions/ui/skills/react-health.md +90 -90
  123. package/extensions/ui/skills/type-system.md +125 -125
  124. package/extensions/ui/skills/web-vitals.md +153 -153
  125. package/extensions/zalo/PACK.md +145 -145
  126. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  127. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  128. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  129. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  130. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  131. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  132. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  133. package/hooks/auto-format/index.cjs +48 -48
  134. package/hooks/hooks.json +111 -111
  135. package/hooks/post-session-reflect/index.cjs +189 -189
  136. package/hooks/pre-compact/index.cjs +95 -95
  137. package/hooks/run-hook.cmd +1 -1
  138. package/hooks/secrets-scan/index.cjs +100 -100
  139. package/hooks/session-start/index.cjs +71 -71
  140. package/hooks/typecheck/index.cjs +65 -65
  141. package/package.json +63 -63
  142. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  143. package/references/ui-pro-max-data/charts.csv +26 -26
  144. package/references/ui-pro-max-data/colors.csv +161 -161
  145. package/references/ui-pro-max-data/styles.csv +68 -68
  146. package/references/ui-pro-max-data/typography.csv +74 -74
  147. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  148. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  149. package/skills/adversary/SKILL.md +283 -283
  150. package/skills/asset-creator/SKILL.md +157 -157
  151. package/skills/audit/SKILL.md +147 -2
  152. package/skills/autopsy/SKILL.md +335 -335
  153. package/skills/brainstorm/SKILL.md +342 -342
  154. package/skills/browser-pilot/SKILL.md +168 -168
  155. package/skills/constraint-check/SKILL.md +165 -165
  156. package/skills/context-engine/SKILL.md +404 -404
  157. package/skills/cook/SKILL.md +917 -863
  158. package/skills/db/SKILL.md +273 -273
  159. package/skills/debug/SKILL.md +465 -465
  160. package/skills/dependency-doctor/SKILL.md +265 -235
  161. package/skills/deploy/SKILL.md +274 -231
  162. package/skills/design/DESIGN-REFERENCE.md +365 -365
  163. package/skills/design/SKILL.md +589 -589
  164. package/skills/doc-processor/SKILL.md +254 -254
  165. package/skills/docs/SKILL.md +374 -374
  166. package/skills/docs-seeker/SKILL.md +177 -177
  167. package/skills/fix/SKILL.md +330 -330
  168. package/skills/git/SKILL.md +339 -339
  169. package/skills/hallucination-guard/SKILL.md +219 -219
  170. package/skills/incident/SKILL.md +254 -253
  171. package/skills/integrity-check/SKILL.md +169 -169
  172. package/skills/journal/SKILL.md +240 -240
  173. package/skills/launch/SKILL.md +344 -344
  174. package/skills/logic-guardian/SKILL.md +251 -251
  175. package/skills/marketing/SKILL.md +290 -289
  176. package/skills/mcp-builder/SKILL.md +425 -425
  177. package/skills/neural-memory/SKILL.md +362 -362
  178. package/skills/onboard/SKILL.md +404 -403
  179. package/skills/perf/SKILL.md +346 -346
  180. package/skills/plan/SKILL.md +433 -428
  181. package/skills/preflight/SKILL.md +415 -415
  182. package/skills/problem-solver/SKILL.md +380 -284
  183. package/skills/rescue/SKILL.md +474 -474
  184. package/skills/retro/SKILL.md +3 -1
  185. package/skills/review/SKILL.md +612 -588
  186. package/skills/review-intake/SKILL.md +249 -249
  187. package/skills/safeguard/SKILL.md +200 -200
  188. package/skills/sast/SKILL.md +190 -190
  189. package/skills/scaffold/SKILL.md +328 -287
  190. package/skills/scope-guard/SKILL.md +180 -180
  191. package/skills/scout/SKILL.md +263 -263
  192. package/skills/sentinel/SKILL.md +382 -381
  193. package/skills/sentinel-env/SKILL.md +254 -254
  194. package/skills/sequential-thinking/SKILL.md +234 -234
  195. package/skills/session-bridge/SKILL.md +543 -543
  196. package/skills/skill-forge/SKILL.md +581 -581
  197. package/skills/skill-router/SKILL.md +3 -0
  198. package/skills/surgeon/SKILL.md +215 -215
  199. package/skills/team/SKILL.md +556 -537
  200. package/skills/test/SKILL.md +614 -614
  201. package/skills/trend-scout/SKILL.md +145 -145
  202. package/skills/verification/SKILL.md +326 -326
  203. package/skills/video-creator/SKILL.md +201 -201
  204. package/skills/watchdog/SKILL.md +168 -168
  205. package/skills/worktree/SKILL.md +140 -140
@@ -1,326 +1,326 @@
1
- ---
2
- name: verification
3
- description: "Universal verification runner. Runs lint, type-check, tests, and build. Use after any code change to verify nothing is broken."
4
- metadata:
5
- author: runedev
6
- version: "0.5.0"
7
- layer: L3
8
- model: haiku
9
- group: validation
10
- tools: "Read, Bash, Glob, Grep"
11
- listen: code.changed
12
- emit: verification.complete
13
- ---
14
-
15
- # verification
16
-
17
- Runs all automated checks to verify code health. Stateless — runs checks and reports results.
18
-
19
- ## Instructions
20
-
21
- ### Phase 1: Detect Project Type
22
-
23
- Use `Glob` to find project config files:
24
-
25
- 1. Check for `package.json` → Node.js/TypeScript project
26
- 2. Check for `pyproject.toml` or `setup.py` → Python project
27
- 3. Check for `Cargo.toml` → Rust project
28
- 4. Check for `go.mod` → Go project
29
- 5. Check for `pom.xml` or `build.gradle` → Java project
30
-
31
- Use `Read` on the detected config file to find scripts or tool config (e.g., `package.json` scripts block for custom lint/test commands).
32
-
33
- ```
34
- TodoWrite: [
35
- { content: "Detect project type", status: "in_progress" },
36
- { content: "Run lint check", status: "pending" },
37
- { content: "Run type check", status: "pending" },
38
- { content: "Run test suite", status: "pending" },
39
- { content: "Run build", status: "pending" },
40
- { content: "Generate verification report", status: "pending" }
41
- ]
42
- ```
43
-
44
- ### Phase 2: Run Lint
45
-
46
- Use `Bash` to run the appropriate linter. If `package.json` has a `lint` script, prefer that:
47
-
48
- - **Node.js (npm lint script)**: `npm run lint`
49
- - **Node.js (no script)**: `npx eslint . --max-warnings 0`
50
- - **Python**: `ruff check .` (fallback: `flake8 .`)
51
- - **Rust**: `cargo clippy -- -D warnings`
52
- - **Go**: `golangci-lint run` (fallback: `go vet ./...`)
53
-
54
- If lint fails: record the failure output, mark lint as FAIL, continue to next step. Do NOT stop.
55
-
56
- **Verification gate**: Command exits without crashing (even if it reports lint errors — those are FAIL, not errors).
57
-
58
- ### Phase 3: Run Type Check
59
-
60
- Use `Bash`:
61
-
62
- - **TypeScript**: `npx tsc --noEmit`
63
- - **Python**: `mypy .` (fallback: `pyright .`)
64
- - **Rust**: `cargo check`
65
- - **Go**: `go vet ./...`
66
-
67
- If type check fails: record error count and first 10 error lines, mark as FAIL, continue.
68
-
69
- ### Phase 4: Run Tests
70
-
71
- Use `Bash` to run the test suite. Prefer the project script if available:
72
-
73
- - **Node.js (npm test script)**: `npm test`
74
- - **Vitest**: `npx vitest run`
75
- - **Jest**: `npx jest --passWithNoTests`
76
- - **Python**: `pytest -v` (fallback: `python -m unittest discover`)
77
- - **Rust**: `cargo test`
78
- - **Go**: `go test ./...`
79
-
80
- Record: total tests, passed count, failed count, coverage percentage if output includes it.
81
-
82
- If tests fail: record which tests failed (first 20), mark as FAIL, continue to build.
83
-
84
- ### Phase 5: Run Build
85
-
86
- Use `Bash`:
87
-
88
- - **Node.js**: check `package.json` for `build` script → `npm run build` (fallback: `npx tsc`)
89
- - **Python**: check `pyproject.toml` for `[build-system]` section:
90
- - If build backend found (setuptools, poetry-core, hatchling, flit-core): `python -m build --no-isolation 2>&1 | head -20` to verify packaging
91
- - If `setup.py` exists (legacy): `python setup.py check --strict`
92
- - Then always: `pip install -e . --dry-run` to catch broken entry points, missing `__init__.py`, or import path issues
93
- - If no `pyproject.toml` and no `setup.py` (scripts-only project): SKIP
94
- - **Rust**: `cargo build`
95
- - **Go**: `go build ./...`
96
-
97
- If build fails: record first 20 lines of build output, mark as FAIL.
98
-
99
- ### Phase 6: Generate Report
100
-
101
- Compile all results into the structured report. Update all TodoWrite items to completed.
102
-
103
- ### 3-Level Artifact Verification
104
-
105
- Every file created or modified during implementation must pass ALL 3 levels:
106
-
107
- **Level 1 — EXISTS**: File is on disk, non-empty.
108
- ```
109
- Glob("path/to/expected/file") → found
110
- ```
111
-
112
- **Level 2 — SUBSTANTIVE**: Contains real logic, NOT a stub. Scan for these stub patterns:
113
-
114
- | Pattern | Language | Meaning |
115
- |---|---|---|
116
- | Component returns only `<div>Placeholder</div>` or `<div>TODO</div>` | React/Vue | Stub component |
117
- | Route returns `{ message: "Not implemented" }` or `res.status(501)` | API | Stub endpoint |
118
- | Function body is only `return null` / `return {}` / `return []` / `pass` | Any | Stub function |
119
- | Class with all methods throwing `NotImplementedError` | Python/Java | Stub class |
120
- | `useEffect` with empty body / `async function` with no `await` | React/JS | Hollow implementation |
121
- | File has only type/interface exports but no implementation | TypeScript | Stub types-only file |
122
- | `// TODO` or `# TODO` as the only content in a function | Any | Placeholder |
123
-
124
- If ANY stub pattern detected → mark file as STUB, Level 2 FAIL.
125
-
126
- **Level 3 — WIRED**: Actually imported/called/used by the rest of the system.
127
-
128
- | File Type | Wiring Check |
129
- |---|---|
130
- | Component | `Grep("<ComponentName")` in parent files → ≥1 consumer |
131
- | API route | `Grep("fetch\\|axios\\|api.*endpoint")` for this path → ≥1 caller |
132
- | Hook | `Grep("useHookName(")` → ≥1 consumer |
133
- | Utility function | `Grep("import.*from.*this-file")` → ≥1 importer |
134
- | DB model/schema | `Grep("ModelName\\|table_name")` in query files → ≥1 reference |
135
- | CSS/style module | `Grep("import.*from.*this-style")` → ≥1 importer |
136
-
137
- If file has 0 consumers → mark as UNWIRED, Level 3 FAIL.
138
-
139
- **Exception**: Entry-point files (main.ts, index.ts, App.tsx, routes config) are exempt from Level 3 — they ARE the top-level consumers.
140
-
141
- <HARD-GATE name="3-level-verification">
142
- ALL new files must pass Level 1 + Level 2 + Level 3.
143
- EXISTS but STUB = "Existence Theater" — agent created files but didn't implement them.
144
- EXISTS and SUBSTANTIVE but UNWIRED = dead code — created but never connected.
145
- Report which level failed for each file in the Verification Report.
146
- </HARD-GATE>
147
-
148
- ### Artifact Output Verification
149
-
150
- > Inspired by CLI-Anything (HKUDS/CLI-Anything, 14.5k★): "Never trust exit 0."
151
- > Many tools exit 0 even when they fail silently. Always verify ACTUAL output.
152
-
153
- After each phase command, verify that the expected artifact or indicator is present:
154
-
155
- **Test output** — scan stdout for the pass/fail summary line:
156
- - Vitest/Jest: look for `X passed`, `X failed` — if neither appears, output is incomplete
157
- - Pytest: look for `X passed` or `X failed` — exit 0 with no summary = runner crashed silently
158
- - If only exit code available and no summary line found → mark as INCOMPLETE, not PASS
159
-
160
- **Build output** — after `npm run build` / `cargo build` / `go build`:
161
- - Verify the output file exists: `Glob("dist/**/*.js")` or equivalent
162
- - Verify file size > 0 bytes: a zero-byte output = silent truncation failure
163
- - If output directory is missing → FAIL even if command exited 0
164
-
165
- **Lint output** — parse stdout for counts, not just exit code:
166
- - ESLint: look for `X problems (Y errors, Z warnings)` — `0 problems` = PASS
167
- - Ruff/Flake8: zero output lines = PASS; any file:line output = FAIL
168
- - If linter exits 0 but output contains `error` keyword → log as suspicious, mark WARN
169
-
170
- **Generated files** — check magic bytes for binary outputs:
171
- - PDF: first bytes must be `%PDF` — use `Bash("head -c 4 file.pdf")`
172
- - ZIP/XLSX/DOCX: first bytes must be `PK` (ZIP magic) — use `Bash("head -c 2 file.zip")`
173
- - File size must exceed minimum threshold (PDF > 1KB, ZIP > 100 bytes)
174
-
175
- **Type check** — do not trust exit code alone:
176
- - TypeScript `tsc --noEmit`: look for `Found X errors` or absence of error lines
177
- - `Found 0 errors` = PASS; any other count = FAIL
178
- - Empty output from `tsc` = PASS (no errors emitted) — note explicitly
179
-
180
- <HARD-GATE name="artifact-verification">
181
- Verification MUST check actual command output for success indicators, not just exit codes.
182
- Exit 0 without a confirming output artifact or success string = UNVERIFIED.
183
- Report the specific line that confirmed success (e.g., "3 passed, 0 failed").
184
- </HARD-GATE>
185
-
186
- ## Error Recovery
187
-
188
- - If project type cannot be detected: report "Unknown project type" and skip all checks
189
- - If a command is not found (e.g., `ruff` not installed): note "tool not installed", mark check as SKIP
190
- - If a command hangs for more than 60 seconds: kill it, mark check as TIMEOUT, continue
191
-
192
- ## Calls (outbound)
193
-
194
- None — pure runner using Bash for all checks. Does not invoke other skills.
195
-
196
- ## Called By (inbound)
197
-
198
- - `cook` (L1): Phase 6 VERIFY — final check before commit
199
- - `fix` (L2): validate fix doesn't break existing functionality
200
- - `test` (L2): validate test coverage meets threshold
201
- - `deploy` (L2): post-deploy health checks
202
- - `sentinel` (L2): run security audit tools (npm audit, etc.)
203
- - `safeguard` (L2): verify safety net is solid before refactoring
204
- - `db` (L2): run migration in test environment
205
- - `perf` (L2): run benchmark scripts if configured
206
- - `skill-forge` (L2): verify newly created skill passes lint/type/build checks
207
-
208
- ## Output Format
209
-
210
- ```
211
- VERIFICATION REPORT
212
- ===================
213
- Lint: [PASS/FAIL/SKIP] ([details])
214
- Types: [PASS/FAIL/SKIP] ([X errors])
215
- Tests: [PASS/FAIL/SKIP] ([passed]/[total], [coverage]%)
216
- Build: [PASS/FAIL/SKIP]
217
-
218
- ### 3-Level File Verification
219
- | File | L1 Exists | L2 Substantive | L3 Wired | Verdict |
220
- |------|-----------|----------------|----------|---------|
221
- | src/auth/login.ts | ✓ | ✓ | ✓ (imported by routes.ts) | PASS |
222
- | src/auth/reset.ts | ✓ | STUB (returns null) | — | FAIL L2 |
223
- | src/utils/format.ts | ✓ | ✓ | UNWIRED (0 importers) | FAIL L3 |
224
-
225
- Overall: [PASS/FAIL]
226
-
227
- ### Failures (if any)
228
- - Lint: [error details with file:line]
229
- - Types: [first 5 type errors]
230
- - Tests: [first 5 failing test names]
231
- - Build: [first 5 build errors]
232
- - Stubs: [files that failed Level 2 with stub pattern detected]
233
- - Unwired: [files that failed Level 3 with 0 consumers]
234
- ```
235
-
236
- ## Output Completion Enforcement
237
-
238
- > From taste-skill (Leonxlnx/taste-skill, 3.4k★): Truncated code is worse than no code — it passes reviews but breaks at runtime.
239
-
240
- When verifying code files (Level 2 SUBSTANTIVE check), also scan for **truncation patterns** — signs that the agent generated partial output and stopped:
241
-
242
- | Banned Pattern | Language | What It Means |
243
- |---|---|---|
244
- | `// ...` or `/* ... */` as a statement | JS/TS | Agent truncated remaining code |
245
- | `# ...` as a statement (not comment) | Python | Agent truncated |
246
- | `// rest of code` / `// remaining implementation` | Any | Explicit truncation admission |
247
- | `// TODO: implement` as sole function body | Any | Placeholder, not implementation |
248
- | `{ /* same as above */ }` | JS/TS | Copy-paste truncation |
249
- | `...` (bare ellipsis, not spread operator) | JS/TS/Python | Truncation marker |
250
- | `[PAUSED]` / `[CONTINUED]` in source | Any | Agent session marker leaked into code |
251
-
252
- **Action on detection:**
253
- - Mark file as TRUNCATED (distinct from STUB) in Verification Report
254
- - TRUNCATED files are Level 2 FAIL — they CANNOT pass verification
255
- - Report the specific line number and pattern detected
256
- - If agent claims "done" with truncated files → REJECTED by Evidence-Before-Claims gate
257
-
258
- **Continuation protocol** — if the agent hit output limits mid-file:
259
- - Agent MUST log: `[PAUSED — X of Y functions complete]` in its response (NOT in the code file)
260
- - Agent MUST resume and complete the file in the next turn
261
- - Verification re-runs after completion to clear the TRUNCATED flag
262
-
263
- ## Evidence-Before-Claims Gate
264
-
265
- <HARD-GATE>
266
- An agent MUST NOT claim "done", "fixed", "passing", or "verified" without showing the actual command output that proves it.
267
- "I ran the tests and they pass" WITHOUT stdout/stderr = UNVERIFIED CLAIM = REJECTED.
268
- The verification report IS the evidence. No report = no verification happened.
269
- </HARD-GATE>
270
-
271
- ### Claim Validation Protocol
272
-
273
- When any skill calls verification and then reports results upstream:
274
-
275
- 1. **Output capture is mandatory** — every Bash command's stdout/stderr must appear in the report
276
- 2. **Pass requires proof** — PASS means "tool ran AND output shows zero errors" (not "tool ran without crashing")
277
- 3. **Silence is not success** — if a command produces no output, note it explicitly ("0 errors, 0 warnings")
278
- 4. **Partial runs are labeled** — if only 2 of 4 checks ran, Overall = INCOMPLETE (not PASS)
279
-
280
- ### Red Flags — Agent is Lying
281
-
282
- | Claim | Without | Verdict |
283
- |---|---|---|
284
- | "All tests pass" | Test runner stdout showing pass count | REJECTED — re-run and show output |
285
- | "No lint errors" | Linter stdout | REJECTED — re-run and show output |
286
- | "Build succeeds" | Build command stdout | REJECTED — re-run and show output |
287
- | "I verified it" | Verification Report | REJECTED — run verification skill properly |
288
- | "Fixed and working" | Before/after test output | REJECTED — show the diff in results |
289
-
290
- ## Constraints
291
-
292
- 1. MUST run ALL four checks: lint, type-check, tests, build — not just tests
293
- 2. MUST show actual command output — never claim "all passed" without evidence
294
- 3. MUST report specific failures with file:line references
295
- 4. MUST NOT skip checks because "changes are small"
296
- 5. MUST include stdout/stderr capture in every check result — empty output noted explicitly
297
- 6. MUST mark Overall as INCOMPLETE if any check was skipped without valid reason (tool not installed = valid, "changes are small" = invalid)
298
-
299
- ## Sharp Edges
300
-
301
- Known failure modes for this skill. Check these before declaring done.
302
-
303
- | Failure Mode | Severity | Mitigation |
304
- |---|---|---|
305
- | Claiming "all passed" without showing actual command output | CRITICAL | Evidence-Before-Claims HARD-GATE blocks this — stdout/stderr is mandatory |
306
- | Agent says "verified" without producing Verification Report | CRITICAL | No report = no verification. Re-run the skill properly. |
307
- | Skipping build because "changes are small" | HIGH | Constraint 4: all four checks mandatory — size of changes doesn't matter |
308
- | Marking check as PASS when the tool isn't installed | MEDIUM | Mark as SKIP (not PASS) — PASS means the tool ran and reported clean |
309
- | Stopping after first failure instead of running remaining checks | MEDIUM | Run all checks; aggregate all failures so developer can fix everything at once |
310
- | Reporting PASS when output has warnings but zero errors | LOW | PASS is correct but note warning count — caller decides if warnings matter |
311
- | 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) |
312
- | Existence Theater — file exists but is a stub | HIGH | 3-Level check: Level 2 scans for stub patterns (`<div>Placeholder</div>`, `return null`, `NotImplementedError`) |
313
- | Dead code — file created but never imported/used | MEDIUM | 3-Level check: Level 3 greps for consumers. 0 importers = UNWIRED |
314
- | Truncated code — agent hit output limit mid-file | HIGH | Output Completion Enforcement: scan for `// ...`, `// rest of code`, bare ellipsis patterns. TRUNCATED = Level 2 FAIL |
315
-
316
- ## Done When
317
-
318
- - Project type detected from config files
319
- - lint, type-check, tests, and build all executed (or SKIP with reason if tool missing)
320
- - Each check shows actual command output
321
- - Failures include specific file:line references (not just counts)
322
- - Verification Report emitted with Overall PASS/FAIL verdict
323
-
324
- ## Cost Profile
325
-
326
- ~$0.01-0.03 per run. Haiku + Bash commands. Fast and cheap.
1
+ ---
2
+ name: verification
3
+ description: "Universal verification runner. Runs lint, type-check, tests, and build. Use after any code change to verify nothing is broken."
4
+ metadata:
5
+ author: runedev
6
+ version: "0.5.0"
7
+ layer: L3
8
+ model: haiku
9
+ group: validation
10
+ tools: "Read, Bash, Glob, Grep"
11
+ listen: code.changed
12
+ emit: verification.complete
13
+ ---
14
+
15
+ # verification
16
+
17
+ Runs all automated checks to verify code health. Stateless — runs checks and reports results.
18
+
19
+ ## Instructions
20
+
21
+ ### Phase 1: Detect Project Type
22
+
23
+ Use `Glob` to find project config files:
24
+
25
+ 1. Check for `package.json` → Node.js/TypeScript project
26
+ 2. Check for `pyproject.toml` or `setup.py` → Python project
27
+ 3. Check for `Cargo.toml` → Rust project
28
+ 4. Check for `go.mod` → Go project
29
+ 5. Check for `pom.xml` or `build.gradle` → Java project
30
+
31
+ Use `Read` on the detected config file to find scripts or tool config (e.g., `package.json` scripts block for custom lint/test commands).
32
+
33
+ ```
34
+ TodoWrite: [
35
+ { content: "Detect project type", status: "in_progress" },
36
+ { content: "Run lint check", status: "pending" },
37
+ { content: "Run type check", status: "pending" },
38
+ { content: "Run test suite", status: "pending" },
39
+ { content: "Run build", status: "pending" },
40
+ { content: "Generate verification report", status: "pending" }
41
+ ]
42
+ ```
43
+
44
+ ### Phase 2: Run Lint
45
+
46
+ Use `Bash` to run the appropriate linter. If `package.json` has a `lint` script, prefer that:
47
+
48
+ - **Node.js (npm lint script)**: `npm run lint`
49
+ - **Node.js (no script)**: `npx eslint . --max-warnings 0`
50
+ - **Python**: `ruff check .` (fallback: `flake8 .`)
51
+ - **Rust**: `cargo clippy -- -D warnings`
52
+ - **Go**: `golangci-lint run` (fallback: `go vet ./...`)
53
+
54
+ If lint fails: record the failure output, mark lint as FAIL, continue to next step. Do NOT stop.
55
+
56
+ **Verification gate**: Command exits without crashing (even if it reports lint errors — those are FAIL, not errors).
57
+
58
+ ### Phase 3: Run Type Check
59
+
60
+ Use `Bash`:
61
+
62
+ - **TypeScript**: `npx tsc --noEmit`
63
+ - **Python**: `mypy .` (fallback: `pyright .`)
64
+ - **Rust**: `cargo check`
65
+ - **Go**: `go vet ./...`
66
+
67
+ If type check fails: record error count and first 10 error lines, mark as FAIL, continue.
68
+
69
+ ### Phase 4: Run Tests
70
+
71
+ Use `Bash` to run the test suite. Prefer the project script if available:
72
+
73
+ - **Node.js (npm test script)**: `npm test`
74
+ - **Vitest**: `npx vitest run`
75
+ - **Jest**: `npx jest --passWithNoTests`
76
+ - **Python**: `pytest -v` (fallback: `python -m unittest discover`)
77
+ - **Rust**: `cargo test`
78
+ - **Go**: `go test ./...`
79
+
80
+ Record: total tests, passed count, failed count, coverage percentage if output includes it.
81
+
82
+ If tests fail: record which tests failed (first 20), mark as FAIL, continue to build.
83
+
84
+ ### Phase 5: Run Build
85
+
86
+ Use `Bash`:
87
+
88
+ - **Node.js**: check `package.json` for `build` script → `npm run build` (fallback: `npx tsc`)
89
+ - **Python**: check `pyproject.toml` for `[build-system]` section:
90
+ - If build backend found (setuptools, poetry-core, hatchling, flit-core): `python -m build --no-isolation 2>&1 | head -20` to verify packaging
91
+ - If `setup.py` exists (legacy): `python setup.py check --strict`
92
+ - Then always: `pip install -e . --dry-run` to catch broken entry points, missing `__init__.py`, or import path issues
93
+ - If no `pyproject.toml` and no `setup.py` (scripts-only project): SKIP
94
+ - **Rust**: `cargo build`
95
+ - **Go**: `go build ./...`
96
+
97
+ If build fails: record first 20 lines of build output, mark as FAIL.
98
+
99
+ ### Phase 6: Generate Report
100
+
101
+ Compile all results into the structured report. Update all TodoWrite items to completed.
102
+
103
+ ### 3-Level Artifact Verification
104
+
105
+ Every file created or modified during implementation must pass ALL 3 levels:
106
+
107
+ **Level 1 — EXISTS**: File is on disk, non-empty.
108
+ ```
109
+ Glob("path/to/expected/file") → found
110
+ ```
111
+
112
+ **Level 2 — SUBSTANTIVE**: Contains real logic, NOT a stub. Scan for these stub patterns:
113
+
114
+ | Pattern | Language | Meaning |
115
+ |---|---|---|
116
+ | Component returns only `<div>Placeholder</div>` or `<div>TODO</div>` | React/Vue | Stub component |
117
+ | Route returns `{ message: "Not implemented" }` or `res.status(501)` | API | Stub endpoint |
118
+ | Function body is only `return null` / `return {}` / `return []` / `pass` | Any | Stub function |
119
+ | Class with all methods throwing `NotImplementedError` | Python/Java | Stub class |
120
+ | `useEffect` with empty body / `async function` with no `await` | React/JS | Hollow implementation |
121
+ | File has only type/interface exports but no implementation | TypeScript | Stub types-only file |
122
+ | `// TODO` or `# TODO` as the only content in a function | Any | Placeholder |
123
+
124
+ If ANY stub pattern detected → mark file as STUB, Level 2 FAIL.
125
+
126
+ **Level 3 — WIRED**: Actually imported/called/used by the rest of the system.
127
+
128
+ | File Type | Wiring Check |
129
+ |---|---|
130
+ | Component | `Grep("<ComponentName")` in parent files → ≥1 consumer |
131
+ | API route | `Grep("fetch\\|axios\\|api.*endpoint")` for this path → ≥1 caller |
132
+ | Hook | `Grep("useHookName(")` → ≥1 consumer |
133
+ | Utility function | `Grep("import.*from.*this-file")` → ≥1 importer |
134
+ | DB model/schema | `Grep("ModelName\\|table_name")` in query files → ≥1 reference |
135
+ | CSS/style module | `Grep("import.*from.*this-style")` → ≥1 importer |
136
+
137
+ If file has 0 consumers → mark as UNWIRED, Level 3 FAIL.
138
+
139
+ **Exception**: Entry-point files (main.ts, index.ts, App.tsx, routes config) are exempt from Level 3 — they ARE the top-level consumers.
140
+
141
+ <HARD-GATE name="3-level-verification">
142
+ ALL new files must pass Level 1 + Level 2 + Level 3.
143
+ EXISTS but STUB = "Existence Theater" — agent created files but didn't implement them.
144
+ EXISTS and SUBSTANTIVE but UNWIRED = dead code — created but never connected.
145
+ Report which level failed for each file in the Verification Report.
146
+ </HARD-GATE>
147
+
148
+ ### Artifact Output Verification
149
+
150
+ > Inspired by CLI-Anything (HKUDS/CLI-Anything, 14.5k★): "Never trust exit 0."
151
+ > Many tools exit 0 even when they fail silently. Always verify ACTUAL output.
152
+
153
+ After each phase command, verify that the expected artifact or indicator is present:
154
+
155
+ **Test output** — scan stdout for the pass/fail summary line:
156
+ - Vitest/Jest: look for `X passed`, `X failed` — if neither appears, output is incomplete
157
+ - Pytest: look for `X passed` or `X failed` — exit 0 with no summary = runner crashed silently
158
+ - If only exit code available and no summary line found → mark as INCOMPLETE, not PASS
159
+
160
+ **Build output** — after `npm run build` / `cargo build` / `go build`:
161
+ - Verify the output file exists: `Glob("dist/**/*.js")` or equivalent
162
+ - Verify file size > 0 bytes: a zero-byte output = silent truncation failure
163
+ - If output directory is missing → FAIL even if command exited 0
164
+
165
+ **Lint output** — parse stdout for counts, not just exit code:
166
+ - ESLint: look for `X problems (Y errors, Z warnings)` — `0 problems` = PASS
167
+ - Ruff/Flake8: zero output lines = PASS; any file:line output = FAIL
168
+ - If linter exits 0 but output contains `error` keyword → log as suspicious, mark WARN
169
+
170
+ **Generated files** — check magic bytes for binary outputs:
171
+ - PDF: first bytes must be `%PDF` — use `Bash("head -c 4 file.pdf")`
172
+ - ZIP/XLSX/DOCX: first bytes must be `PK` (ZIP magic) — use `Bash("head -c 2 file.zip")`
173
+ - File size must exceed minimum threshold (PDF > 1KB, ZIP > 100 bytes)
174
+
175
+ **Type check** — do not trust exit code alone:
176
+ - TypeScript `tsc --noEmit`: look for `Found X errors` or absence of error lines
177
+ - `Found 0 errors` = PASS; any other count = FAIL
178
+ - Empty output from `tsc` = PASS (no errors emitted) — note explicitly
179
+
180
+ <HARD-GATE name="artifact-verification">
181
+ Verification MUST check actual command output for success indicators, not just exit codes.
182
+ Exit 0 without a confirming output artifact or success string = UNVERIFIED.
183
+ Report the specific line that confirmed success (e.g., "3 passed, 0 failed").
184
+ </HARD-GATE>
185
+
186
+ ## Error Recovery
187
+
188
+ - If project type cannot be detected: report "Unknown project type" and skip all checks
189
+ - If a command is not found (e.g., `ruff` not installed): note "tool not installed", mark check as SKIP
190
+ - If a command hangs for more than 60 seconds: kill it, mark check as TIMEOUT, continue
191
+
192
+ ## Calls (outbound)
193
+
194
+ None — pure runner using Bash for all checks. Does not invoke other skills.
195
+
196
+ ## Called By (inbound)
197
+
198
+ - `cook` (L1): Phase 6 VERIFY — final check before commit
199
+ - `fix` (L2): validate fix doesn't break existing functionality
200
+ - `test` (L2): validate test coverage meets threshold
201
+ - `deploy` (L2): post-deploy health checks
202
+ - `sentinel` (L2): run security audit tools (npm audit, etc.)
203
+ - `safeguard` (L2): verify safety net is solid before refactoring
204
+ - `db` (L2): run migration in test environment
205
+ - `perf` (L2): run benchmark scripts if configured
206
+ - `skill-forge` (L2): verify newly created skill passes lint/type/build checks
207
+
208
+ ## Output Format
209
+
210
+ ```
211
+ VERIFICATION REPORT
212
+ ===================
213
+ Lint: [PASS/FAIL/SKIP] ([details])
214
+ Types: [PASS/FAIL/SKIP] ([X errors])
215
+ Tests: [PASS/FAIL/SKIP] ([passed]/[total], [coverage]%)
216
+ Build: [PASS/FAIL/SKIP]
217
+
218
+ ### 3-Level File Verification
219
+ | File | L1 Exists | L2 Substantive | L3 Wired | Verdict |
220
+ |------|-----------|----------------|----------|---------|
221
+ | src/auth/login.ts | ✓ | ✓ | ✓ (imported by routes.ts) | PASS |
222
+ | src/auth/reset.ts | ✓ | STUB (returns null) | — | FAIL L2 |
223
+ | src/utils/format.ts | ✓ | ✓ | UNWIRED (0 importers) | FAIL L3 |
224
+
225
+ Overall: [PASS/FAIL]
226
+
227
+ ### Failures (if any)
228
+ - Lint: [error details with file:line]
229
+ - Types: [first 5 type errors]
230
+ - Tests: [first 5 failing test names]
231
+ - Build: [first 5 build errors]
232
+ - Stubs: [files that failed Level 2 with stub pattern detected]
233
+ - Unwired: [files that failed Level 3 with 0 consumers]
234
+ ```
235
+
236
+ ## Output Completion Enforcement
237
+
238
+ > From taste-skill (Leonxlnx/taste-skill, 3.4k★): Truncated code is worse than no code — it passes reviews but breaks at runtime.
239
+
240
+ When verifying code files (Level 2 SUBSTANTIVE check), also scan for **truncation patterns** — signs that the agent generated partial output and stopped:
241
+
242
+ | Banned Pattern | Language | What It Means |
243
+ |---|---|---|
244
+ | `// ...` or `/* ... */` as a statement | JS/TS | Agent truncated remaining code |
245
+ | `# ...` as a statement (not comment) | Python | Agent truncated |
246
+ | `// rest of code` / `// remaining implementation` | Any | Explicit truncation admission |
247
+ | `// TODO: implement` as sole function body | Any | Placeholder, not implementation |
248
+ | `{ /* same as above */ }` | JS/TS | Copy-paste truncation |
249
+ | `...` (bare ellipsis, not spread operator) | JS/TS/Python | Truncation marker |
250
+ | `[PAUSED]` / `[CONTINUED]` in source | Any | Agent session marker leaked into code |
251
+
252
+ **Action on detection:**
253
+ - Mark file as TRUNCATED (distinct from STUB) in Verification Report
254
+ - TRUNCATED files are Level 2 FAIL — they CANNOT pass verification
255
+ - Report the specific line number and pattern detected
256
+ - If agent claims "done" with truncated files → REJECTED by Evidence-Before-Claims gate
257
+
258
+ **Continuation protocol** — if the agent hit output limits mid-file:
259
+ - Agent MUST log: `[PAUSED — X of Y functions complete]` in its response (NOT in the code file)
260
+ - Agent MUST resume and complete the file in the next turn
261
+ - Verification re-runs after completion to clear the TRUNCATED flag
262
+
263
+ ## Evidence-Before-Claims Gate
264
+
265
+ <HARD-GATE>
266
+ An agent MUST NOT claim "done", "fixed", "passing", or "verified" without showing the actual command output that proves it.
267
+ "I ran the tests and they pass" WITHOUT stdout/stderr = UNVERIFIED CLAIM = REJECTED.
268
+ The verification report IS the evidence. No report = no verification happened.
269
+ </HARD-GATE>
270
+
271
+ ### Claim Validation Protocol
272
+
273
+ When any skill calls verification and then reports results upstream:
274
+
275
+ 1. **Output capture is mandatory** — every Bash command's stdout/stderr must appear in the report
276
+ 2. **Pass requires proof** — PASS means "tool ran AND output shows zero errors" (not "tool ran without crashing")
277
+ 3. **Silence is not success** — if a command produces no output, note it explicitly ("0 errors, 0 warnings")
278
+ 4. **Partial runs are labeled** — if only 2 of 4 checks ran, Overall = INCOMPLETE (not PASS)
279
+
280
+ ### Red Flags — Agent is Lying
281
+
282
+ | Claim | Without | Verdict |
283
+ |---|---|---|
284
+ | "All tests pass" | Test runner stdout showing pass count | REJECTED — re-run and show output |
285
+ | "No lint errors" | Linter stdout | REJECTED — re-run and show output |
286
+ | "Build succeeds" | Build command stdout | REJECTED — re-run and show output |
287
+ | "I verified it" | Verification Report | REJECTED — run verification skill properly |
288
+ | "Fixed and working" | Before/after test output | REJECTED — show the diff in results |
289
+
290
+ ## Constraints
291
+
292
+ 1. MUST run ALL four checks: lint, type-check, tests, build — not just tests
293
+ 2. MUST show actual command output — never claim "all passed" without evidence
294
+ 3. MUST report specific failures with file:line references
295
+ 4. MUST NOT skip checks because "changes are small"
296
+ 5. MUST include stdout/stderr capture in every check result — empty output noted explicitly
297
+ 6. MUST mark Overall as INCOMPLETE if any check was skipped without valid reason (tool not installed = valid, "changes are small" = invalid)
298
+
299
+ ## Sharp Edges
300
+
301
+ Known failure modes for this skill. Check these before declaring done.
302
+
303
+ | Failure Mode | Severity | Mitigation |
304
+ |---|---|---|
305
+ | Claiming "all passed" without showing actual command output | CRITICAL | Evidence-Before-Claims HARD-GATE blocks this — stdout/stderr is mandatory |
306
+ | Agent says "verified" without producing Verification Report | CRITICAL | No report = no verification. Re-run the skill properly. |
307
+ | Skipping build because "changes are small" | HIGH | Constraint 4: all four checks mandatory — size of changes doesn't matter |
308
+ | Marking check as PASS when the tool isn't installed | MEDIUM | Mark as SKIP (not PASS) — PASS means the tool ran and reported clean |
309
+ | Stopping after first failure instead of running remaining checks | MEDIUM | Run all checks; aggregate all failures so developer can fix everything at once |
310
+ | Reporting PASS when output has warnings but zero errors | LOW | PASS is correct but note warning count — caller decides if warnings matter |
311
+ | 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) |
312
+ | Existence Theater — file exists but is a stub | HIGH | 3-Level check: Level 2 scans for stub patterns (`<div>Placeholder</div>`, `return null`, `NotImplementedError`) |
313
+ | Dead code — file created but never imported/used | MEDIUM | 3-Level check: Level 3 greps for consumers. 0 importers = UNWIRED |
314
+ | Truncated code — agent hit output limit mid-file | HIGH | Output Completion Enforcement: scan for `// ...`, `// rest of code`, bare ellipsis patterns. TRUNCATED = Level 2 FAIL |
315
+
316
+ ## Done When
317
+
318
+ - Project type detected from config files
319
+ - lint, type-check, tests, and build all executed (or SKIP with reason if tool missing)
320
+ - Each check shows actual command output
321
+ - Failures include specific file:line references (not just counts)
322
+ - Verification Report emitted with Overall PASS/FAIL verdict
323
+
324
+ ## Cost Profile
325
+
326
+ ~$0.01-0.03 per run. Haiku + Bash commands. Fast and cheap.