voidmachine 0.0.0 → 5.0.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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -4
  3. package/bin/void-harness.mjs +12 -0
  4. package/bin/void-machine.mjs +12 -0
  5. package/core-assets/.claude-plugin/plugin.json +285 -0
  6. package/core-assets/.gitkeep +0 -0
  7. package/core-assets/PHILOSOPHY.md +218 -0
  8. package/core-assets/PROJECT-DOCTRINE.template.md +14 -0
  9. package/core-assets/adapters/security/manifest.yaml +96 -0
  10. package/core-assets/agents/.gitkeep +0 -0
  11. package/core-assets/agents/accessibility-specialist.md +59 -0
  12. package/core-assets/agents/api-integration-engineer.md +59 -0
  13. package/core-assets/agents/code-explorer.md +94 -0
  14. package/core-assets/agents/code-explorer.source +7 -0
  15. package/core-assets/agents/data-migration-engineer.md +59 -0
  16. package/core-assets/agents/devex-docs-engineer.md +57 -0
  17. package/core-assets/agents/doctrine-critic.md +91 -0
  18. package/core-assets/agents/doctrine-critic.source +11 -0
  19. package/core-assets/agents/domain-architect.md +56 -0
  20. package/core-assets/agents/experience-designer.md +59 -0
  21. package/core-assets/agents/frontend-engineer.md +60 -0
  22. package/core-assets/agents/independent-code-reviewer.md +62 -0
  23. package/core-assets/agents/migration-planner.md +97 -0
  24. package/core-assets/agents/migration-planner.source +7 -0
  25. package/core-assets/agents/observability-sre-engineer.md +59 -0
  26. package/core-assets/agents/pdf-specialist.md +58 -0
  27. package/core-assets/agents/performance-engineer.md +58 -0
  28. package/core-assets/agents/product-challenger.md +55 -0
  29. package/core-assets/agents/security-engineer.md +66 -0
  30. package/core-assets/agents/silent-failure-hunter.md +94 -0
  31. package/core-assets/agents/silent-failure-hunter.source +8 -0
  32. package/core-assets/agents/solution-architect.md +57 -0
  33. package/core-assets/agents/test-qa-engineer.md +60 -0
  34. package/core-assets/agents/type-design-analyzer.md +93 -0
  35. package/core-assets/agents/type-design-analyzer.source +8 -0
  36. package/core-assets/agents/visual-craft-director.md +62 -0
  37. package/core-assets/codex/hooks.json +172 -0
  38. package/core-assets/contract-history/visual-craft-director/v2.yaml +43 -0
  39. package/core-assets/data/catalog.v3.json +10527 -0
  40. package/core-assets/data/certification.json +1826 -0
  41. package/core-assets/data/identity.json +8 -0
  42. package/core-assets/data/model.json +4256 -0
  43. package/core-assets/enforce/ci-enforce.sh +183 -0
  44. package/core-assets/hooks/_checks.sh +145 -0
  45. package/core-assets/hooks/_hooklib.sh +163 -0
  46. package/core-assets/hooks/_syntax-worker.cjs +503 -0
  47. package/core-assets/hooks/_void-hook.mjs +15448 -0
  48. package/core-assets/hooks/activation-meter.sh +13 -0
  49. package/core-assets/hooks/anti-ai-slop-grep.sh +38 -0
  50. package/core-assets/hooks/auto-format.sh +9 -0
  51. package/core-assets/hooks/axe-precommit.sh +35 -0
  52. package/core-assets/hooks/block-dangerous-bash.sh +10 -0
  53. package/core-assets/hooks/block-protected-push.sh +81 -0
  54. package/core-assets/hooks/boundary-direction-check.sh +10 -0
  55. package/core-assets/hooks/control-character-grep.sh +10 -0
  56. package/core-assets/hooks/fowler-refactors.txt +71 -0
  57. package/core-assets/hooks/large-cl-grep.sh +9 -0
  58. package/core-assets/hooks/llm-cost-precommit.sh +55 -0
  59. package/core-assets/hooks/migration-lint.sh +58 -0
  60. package/core-assets/hooks/migration-pr-template.sh +55 -0
  61. package/core-assets/hooks/no-ai-design-slop.sh +10 -0
  62. package/core-assets/hooks/no-any-grep.sh +10 -0
  63. package/core-assets/hooks/no-as-cast-grep.sh +10 -0
  64. package/core-assets/hooks/no-console-log-grep.sh +10 -0
  65. package/core-assets/hooks/no-null-grep.sh +10 -0
  66. package/core-assets/hooks/no-only-no-skip.sh +10 -0
  67. package/core-assets/hooks/outcome-meter.sh +13 -0
  68. package/core-assets/hooks/pre-PR-review-evidence.sh +47 -0
  69. package/core-assets/hooks/protect-sensitive-files.sh +10 -0
  70. package/core-assets/hooks/refactor-named-grep.sh +49 -0
  71. package/core-assets/hooks/secret-in-content.sh +10 -0
  72. package/core-assets/hooks/sessionstart-context.sh +9 -0
  73. package/core-assets/hooks/stop-typecheck.sh +9 -0
  74. package/core-assets/hooks/tdd-guard.md +90 -0
  75. package/core-assets/hooks/tdd-guard.sh +10 -0
  76. package/core-assets/hooks/test-name-lint.sh +10 -0
  77. package/core-assets/hooks/tidying-commit-prefix.sh +37 -0
  78. package/core-assets/hooks/trim-large-output.sh +9 -0
  79. package/core-assets/hooks/tsc-noemit-precommit.sh +22 -0
  80. package/core-assets/hooks/ubiquitous-language-lint.sh +58 -0
  81. package/core-assets/hooks/viewport-screenshot-gate.sh +48 -0
  82. package/core-assets/modules/.gitkeep +0 -0
  83. package/core-assets/packs/pack-mobile/skills/void-eas-build-profile/.source +7 -0
  84. package/core-assets/packs/pack-mobile/skills/void-eas-build-profile/SKILL.md +164 -0
  85. package/core-assets/packs/pack-mobile/skills/void-eas-build-profile/harness.yaml +14 -0
  86. package/core-assets/packs/pack-mobile/skills/void-expo-config-plugins/.source +7 -0
  87. package/core-assets/packs/pack-mobile/skills/void-expo-config-plugins/SKILL.md +178 -0
  88. package/core-assets/packs/pack-mobile/skills/void-expo-config-plugins/harness.yaml +14 -0
  89. package/core-assets/packs/pack-mobile/skills/void-expo-router-pattern/.source +8 -0
  90. package/core-assets/packs/pack-mobile/skills/void-expo-router-pattern/SKILL.md +209 -0
  91. package/core-assets/packs/pack-mobile/skills/void-expo-router-pattern/harness.yaml +14 -0
  92. package/core-assets/packs/pack-mobile/skills/void-ota-update-strategy/.source +7 -0
  93. package/core-assets/packs/pack-mobile/skills/void-ota-update-strategy/SKILL.md +194 -0
  94. package/core-assets/packs/pack-mobile/skills/void-ota-update-strategy/harness.yaml +14 -0
  95. package/core-assets/packs/pack-monorepo/skills/void-dependency-direction/.source +5 -0
  96. package/core-assets/packs/pack-monorepo/skills/void-dependency-direction/SKILL.md +160 -0
  97. package/core-assets/packs/pack-monorepo/skills/void-dependency-direction/harness.yaml +14 -0
  98. package/core-assets/packs/pack-monorepo/skills/void-package-extraction/.source +5 -0
  99. package/core-assets/packs/pack-monorepo/skills/void-package-extraction/SKILL.md +70 -0
  100. package/core-assets/packs/pack-monorepo/skills/void-package-extraction/harness.yaml +14 -0
  101. package/core-assets/packs/pack-monorepo/skills/void-service-package/.source +5 -0
  102. package/core-assets/packs/pack-monorepo/skills/void-service-package/SKILL.md +122 -0
  103. package/core-assets/packs/pack-monorepo/skills/void-service-package/harness.yaml +14 -0
  104. package/core-assets/packs/pack-monorepo/skills/void-turbo-pipeline-tuning/.source +7 -0
  105. package/core-assets/packs/pack-monorepo/skills/void-turbo-pipeline-tuning/SKILL.md +116 -0
  106. package/core-assets/packs/pack-monorepo/skills/void-turbo-pipeline-tuning/harness.yaml +14 -0
  107. package/core-assets/packs/pack-nextjs/skills/void-cache-component-pattern/.source +5 -0
  108. package/core-assets/packs/pack-nextjs/skills/void-cache-component-pattern/SKILL.md +162 -0
  109. package/core-assets/packs/pack-nextjs/skills/void-cache-component-pattern/harness.yaml +14 -0
  110. package/core-assets/packs/pack-nextjs/skills/void-instrumentation-setup/.source +5 -0
  111. package/core-assets/packs/pack-nextjs/skills/void-instrumentation-setup/SKILL.md +161 -0
  112. package/core-assets/packs/pack-nextjs/skills/void-instrumentation-setup/harness.yaml +14 -0
  113. package/core-assets/packs/pack-nextjs/skills/void-loading-error-boundaries/.source +5 -0
  114. package/core-assets/packs/pack-nextjs/skills/void-loading-error-boundaries/SKILL.md +176 -0
  115. package/core-assets/packs/pack-nextjs/skills/void-loading-error-boundaries/harness.yaml +14 -0
  116. package/core-assets/packs/pack-nextjs/skills/void-parallel-routes-slots/.source +5 -0
  117. package/core-assets/packs/pack-nextjs/skills/void-parallel-routes-slots/SKILL.md +129 -0
  118. package/core-assets/packs/pack-nextjs/skills/void-parallel-routes-slots/harness.yaml +14 -0
  119. package/core-assets/packs/pack-nextjs/skills/void-route-group-decision/.source +5 -0
  120. package/core-assets/packs/pack-nextjs/skills/void-route-group-decision/SKILL.md +107 -0
  121. package/core-assets/packs/pack-nextjs/skills/void-route-group-decision/harness.yaml +14 -0
  122. package/core-assets/packs/pack-pwa/skills/void-install-prompt-ux/.source +5 -0
  123. package/core-assets/packs/pack-pwa/skills/void-install-prompt-ux/SKILL.md +153 -0
  124. package/core-assets/packs/pack-pwa/skills/void-install-prompt-ux/harness.yaml +14 -0
  125. package/core-assets/packs/pack-pwa/skills/void-manifest-checklist/.source +5 -0
  126. package/core-assets/packs/pack-pwa/skills/void-manifest-checklist/SKILL.md +204 -0
  127. package/core-assets/packs/pack-pwa/skills/void-manifest-checklist/harness.yaml +14 -0
  128. package/core-assets/packs/pack-pwa/skills/void-offline-first-mutation/.source +8 -0
  129. package/core-assets/packs/pack-pwa/skills/void-offline-first-mutation/SKILL.md +266 -0
  130. package/core-assets/packs/pack-pwa/skills/void-offline-first-mutation/harness.yaml +14 -0
  131. package/core-assets/packs/pack-pwa/skills/void-service-worker-strategy/.source +5 -0
  132. package/core-assets/packs/pack-pwa/skills/void-service-worker-strategy/SKILL.md +178 -0
  133. package/core-assets/packs/pack-pwa/skills/void-service-worker-strategy/harness.yaml +14 -0
  134. package/core-assets/packs/pack-react/skills/void-accessibility-check/.source +8 -0
  135. package/core-assets/packs/pack-react/skills/void-accessibility-check/SKILL.md +136 -0
  136. package/core-assets/packs/pack-react/skills/void-accessibility-check/harness.yaml +14 -0
  137. package/core-assets/packs/pack-react/skills/void-client-vs-server-component/.source +5 -0
  138. package/core-assets/packs/pack-react/skills/void-client-vs-server-component/SKILL.md +116 -0
  139. package/core-assets/packs/pack-react/skills/void-client-vs-server-component/harness.yaml +14 -0
  140. package/core-assets/packs/pack-react/skills/void-form-pattern/.source +7 -0
  141. package/core-assets/packs/pack-react/skills/void-form-pattern/SKILL.md +157 -0
  142. package/core-assets/packs/pack-react/skills/void-form-pattern/harness.yaml +14 -0
  143. package/core-assets/packs/pack-react/skills/void-state-architecture/.source +5 -0
  144. package/core-assets/packs/pack-react/skills/void-state-architecture/SKILL.md +160 -0
  145. package/core-assets/packs/pack-react/skills/void-state-architecture/harness.yaml +14 -0
  146. package/core-assets/packs/pack-server/skills/void-background-job-pattern/.source +6 -0
  147. package/core-assets/packs/pack-server/skills/void-background-job-pattern/SKILL.md +214 -0
  148. package/core-assets/packs/pack-server/skills/void-background-job-pattern/harness.yaml +14 -0
  149. package/core-assets/packs/pack-server/skills/void-drizzle-migration-safe/.source +6 -0
  150. package/core-assets/packs/pack-server/skills/void-drizzle-migration-safe/SKILL.md +168 -0
  151. package/core-assets/packs/pack-server/skills/void-drizzle-migration-safe/harness.yaml +14 -0
  152. package/core-assets/packs/pack-server/skills/void-env-validation/.source +6 -0
  153. package/core-assets/packs/pack-server/skills/void-env-validation/SKILL.md +131 -0
  154. package/core-assets/packs/pack-server/skills/void-env-validation/harness.yaml +14 -0
  155. package/core-assets/packs/pack-server/skills/void-rate-limit-strategy/.source +6 -0
  156. package/core-assets/packs/pack-server/skills/void-rate-limit-strategy/SKILL.md +149 -0
  157. package/core-assets/packs/pack-server/skills/void-rate-limit-strategy/harness.yaml +14 -0
  158. package/core-assets/packs/pack-server/skills/void-server-action/.source +7 -0
  159. package/core-assets/packs/pack-server/skills/void-server-action/SKILL.md +181 -0
  160. package/core-assets/packs/pack-server/skills/void-server-action/harness.yaml +14 -0
  161. package/core-assets/packs/pack-server/skills/void-testing-server-modules/.source +7 -0
  162. package/core-assets/packs/pack-server/skills/void-testing-server-modules/SKILL.md +73 -0
  163. package/core-assets/packs/pack-server/skills/void-testing-server-modules/harness.yaml +14 -0
  164. package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/.source +7 -0
  165. package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/SKILL.md +205 -0
  166. package/core-assets/packs/pack-server/skills/void-webhook-handler-pattern/harness.yaml +14 -0
  167. package/core-assets/policies/core.yaml +95 -0
  168. package/core-assets/policies/ui.yaml +23 -0
  169. package/core-assets/profiles/base.yaml +29 -0
  170. package/core-assets/profiles/expo-config.yaml +36 -0
  171. package/core-assets/profiles/expo.yaml +35 -0
  172. package/core-assets/profiles/monorepo.yaml +33 -0
  173. package/core-assets/profiles/nextjs-config.yaml +31 -0
  174. package/core-assets/profiles/nextjs.yaml +31 -0
  175. package/core-assets/profiles/node-server.yaml +31 -0
  176. package/core-assets/profiles/pwa.yaml +33 -0
  177. package/core-assets/profiles/react.yaml +39 -0
  178. package/core-assets/profiles/sql.yaml +39 -0
  179. package/core-assets/profiles/typescript.yaml +39 -0
  180. package/core-assets/skills/.gitkeep +0 -0
  181. package/core-assets/skills/void-accessibility/.source +15 -0
  182. package/core-assets/skills/void-accessibility/SKILL.md +275 -0
  183. package/core-assets/skills/void-accessibility/harness.yaml +17 -0
  184. package/core-assets/skills/void-api-and-interface-design/.source +13 -0
  185. package/core-assets/skills/void-api-and-interface-design/SKILL.md +231 -0
  186. package/core-assets/skills/void-api-and-interface-design/harness.yaml +16 -0
  187. package/core-assets/skills/void-async-safety/.source +13 -0
  188. package/core-assets/skills/void-async-safety/SKILL.md +287 -0
  189. package/core-assets/skills/void-async-safety/harness.yaml +16 -0
  190. package/core-assets/skills/void-audit/.source +15 -0
  191. package/core-assets/skills/void-audit/SKILL.md +83 -0
  192. package/core-assets/skills/void-audit/harness.yaml +14 -0
  193. package/core-assets/skills/void-autopilot/.source +21 -0
  194. package/core-assets/skills/void-autopilot/SKILL.md +394 -0
  195. package/core-assets/skills/void-autopilot/harness.yaml +14 -0
  196. package/core-assets/skills/void-brainstorm/.source +14 -0
  197. package/core-assets/skills/void-brainstorm/SKILL.md +278 -0
  198. package/core-assets/skills/void-brainstorm/harness.yaml +14 -0
  199. package/core-assets/skills/void-checkpoint/.source +39 -0
  200. package/core-assets/skills/void-checkpoint/SKILL.md +227 -0
  201. package/core-assets/skills/void-checkpoint/harness.yaml +14 -0
  202. package/core-assets/skills/void-claude-md/.source +15 -0
  203. package/core-assets/skills/void-claude-md/SKILL.md +180 -0
  204. package/core-assets/skills/void-claude-md/harness.yaml +14 -0
  205. package/core-assets/skills/void-code-review/.source +14 -0
  206. package/core-assets/skills/void-code-review/SKILL.md +232 -0
  207. package/core-assets/skills/void-code-review/harness.yaml +15 -0
  208. package/core-assets/skills/void-commit-discipline/.source +9 -0
  209. package/core-assets/skills/void-commit-discipline/SKILL.md +211 -0
  210. package/core-assets/skills/void-commit-discipline/harness.yaml +15 -0
  211. package/core-assets/skills/void-context/.source +15 -0
  212. package/core-assets/skills/void-context/SKILL.md +166 -0
  213. package/core-assets/skills/void-context/harness.yaml +14 -0
  214. package/core-assets/skills/void-debug/.source +11 -0
  215. package/core-assets/skills/void-debug/SKILL.md +211 -0
  216. package/core-assets/skills/void-debug/harness.yaml +14 -0
  217. package/core-assets/skills/void-decide/.source +9 -0
  218. package/core-assets/skills/void-decide/SKILL.md +147 -0
  219. package/core-assets/skills/void-decide/harness.yaml +14 -0
  220. package/core-assets/skills/void-devex-audit/.source +8 -0
  221. package/core-assets/skills/void-devex-audit/SKILL.md +113 -0
  222. package/core-assets/skills/void-devex-audit/harness.yaml +15 -0
  223. package/core-assets/skills/void-doctor/.source +15 -0
  224. package/core-assets/skills/void-doctor/SKILL.md +83 -0
  225. package/core-assets/skills/void-doctor/harness.yaml +14 -0
  226. package/core-assets/skills/void-domain-driven-design/.source +13 -0
  227. package/core-assets/skills/void-domain-driven-design/SKILL.md +292 -0
  228. package/core-assets/skills/void-domain-driven-design/harness.yaml +15 -0
  229. package/core-assets/skills/void-frontend-design/.source +19 -0
  230. package/core-assets/skills/void-frontend-design/SKILL.md +274 -0
  231. package/core-assets/skills/void-frontend-design/harness.yaml +17 -0
  232. package/core-assets/skills/void-functional/.source +14 -0
  233. package/core-assets/skills/void-functional/SKILL.md +312 -0
  234. package/core-assets/skills/void-functional/harness.yaml +15 -0
  235. package/core-assets/skills/void-graph/.source +15 -0
  236. package/core-assets/skills/void-graph/SKILL.md +80 -0
  237. package/core-assets/skills/void-graph/harness.yaml +14 -0
  238. package/core-assets/skills/void-hexagonal-architecture/.source +12 -0
  239. package/core-assets/skills/void-hexagonal-architecture/SKILL.md +276 -0
  240. package/core-assets/skills/void-hexagonal-architecture/harness.yaml +15 -0
  241. package/core-assets/skills/void-implement/.source +39 -0
  242. package/core-assets/skills/void-implement/SKILL.md +192 -0
  243. package/core-assets/skills/void-implement/harness.yaml +14 -0
  244. package/core-assets/skills/void-learn/.source +13 -0
  245. package/core-assets/skills/void-learn/SKILL.md +226 -0
  246. package/core-assets/skills/void-learn/harness.yaml +14 -0
  247. package/core-assets/skills/void-llm-cost-discipline/.source +13 -0
  248. package/core-assets/skills/void-llm-cost-discipline/SKILL.md +299 -0
  249. package/core-assets/skills/void-llm-cost-discipline/harness.yaml +15 -0
  250. package/core-assets/skills/void-make-pdf/.source +9 -0
  251. package/core-assets/skills/void-make-pdf/SKILL.md +52 -0
  252. package/core-assets/skills/void-make-pdf/harness.yaml +15 -0
  253. package/core-assets/skills/void-merge/.source +8 -0
  254. package/core-assets/skills/void-merge/SKILL.md +111 -0
  255. package/core-assets/skills/void-merge/harness.yaml +14 -0
  256. package/core-assets/skills/void-migrations/.source +13 -0
  257. package/core-assets/skills/void-migrations/SKILL.md +264 -0
  258. package/core-assets/skills/void-migrations/harness.yaml +17 -0
  259. package/core-assets/skills/void-observability/.source +12 -0
  260. package/core-assets/skills/void-observability/SKILL.md +245 -0
  261. package/core-assets/skills/void-observability/harness.yaml +15 -0
  262. package/core-assets/skills/void-orchestrate/.source +16 -0
  263. package/core-assets/skills/void-orchestrate/SKILL.md +311 -0
  264. package/core-assets/skills/void-orchestrate/harness.yaml +10 -0
  265. package/core-assets/skills/void-plan/.source +15 -0
  266. package/core-assets/skills/void-plan/SKILL.md +246 -0
  267. package/core-assets/skills/void-plan/harness.yaml +14 -0
  268. package/core-assets/skills/void-plan-review/.source +12 -0
  269. package/core-assets/skills/void-plan-review/SKILL.md +128 -0
  270. package/core-assets/skills/void-plan-review/harness.yaml +15 -0
  271. package/core-assets/skills/void-qa/.source +15 -0
  272. package/core-assets/skills/void-qa/SKILL.md +103 -0
  273. package/core-assets/skills/void-qa/harness.yaml +15 -0
  274. package/core-assets/skills/void-refactor/.source +9 -0
  275. package/core-assets/skills/void-refactor/SKILL.md +220 -0
  276. package/core-assets/skills/void-refactor/harness.yaml +15 -0
  277. package/core-assets/skills/void-retrospective/.source +9 -0
  278. package/core-assets/skills/void-retrospective/SKILL.md +71 -0
  279. package/core-assets/skills/void-retrospective/harness.yaml +15 -0
  280. package/core-assets/skills/void-security-audit/.source +12 -0
  281. package/core-assets/skills/void-security-audit/SKILL.md +138 -0
  282. package/core-assets/skills/void-security-audit/harness.yaml +15 -0
  283. package/core-assets/skills/void-security-guidance/.source +13 -0
  284. package/core-assets/skills/void-security-guidance/SKILL.md +294 -0
  285. package/core-assets/skills/void-security-guidance/harness.yaml +15 -0
  286. package/core-assets/skills/void-source-driven-development/.source +12 -0
  287. package/core-assets/skills/void-source-driven-development/SKILL.md +158 -0
  288. package/core-assets/skills/void-source-driven-development/harness.yaml +15 -0
  289. package/core-assets/skills/void-tdd/.source +15 -0
  290. package/core-assets/skills/void-tdd/SKILL.md +394 -0
  291. package/core-assets/skills/void-tdd/harness.yaml +15 -0
  292. package/core-assets/skills/void-testing/.source +19 -0
  293. package/core-assets/skills/void-testing/SKILL.md +301 -0
  294. package/core-assets/skills/void-testing/harness.yaml +17 -0
  295. package/core-assets/skills/void-ticket/.source +18 -0
  296. package/core-assets/skills/void-ticket/SKILL.md +238 -0
  297. package/core-assets/skills/void-ticket/harness.yaml +14 -0
  298. package/core-assets/skills/void-typescript-strict/.source +10 -0
  299. package/core-assets/skills/void-typescript-strict/SKILL.md +294 -0
  300. package/core-assets/skills/void-typescript-strict/harness.yaml +17 -0
  301. package/core-assets/skills/void-ui-review/.source +12 -0
  302. package/core-assets/skills/void-ui-review/SKILL.md +97 -0
  303. package/core-assets/skills/void-ui-review/harness.yaml +15 -0
  304. package/core-assets/skills/void-verify/.source +12 -0
  305. package/core-assets/skills/void-verify/SKILL.md +184 -0
  306. package/core-assets/skills/void-verify/harness.yaml +15 -0
  307. package/core-assets/specialists/accessibility-specialist.source +11 -0
  308. package/core-assets/specialists/accessibility-specialist.yaml +30 -0
  309. package/core-assets/specialists/api-integration-engineer.source +11 -0
  310. package/core-assets/specialists/api-integration-engineer.yaml +30 -0
  311. package/core-assets/specialists/data-migration-engineer.source +11 -0
  312. package/core-assets/specialists/data-migration-engineer.yaml +30 -0
  313. package/core-assets/specialists/devex-docs-engineer.source +11 -0
  314. package/core-assets/specialists/devex-docs-engineer.yaml +29 -0
  315. package/core-assets/specialists/domain-architect.source +11 -0
  316. package/core-assets/specialists/domain-architect.yaml +28 -0
  317. package/core-assets/specialists/experience-designer.source +15 -0
  318. package/core-assets/specialists/experience-designer.yaml +38 -0
  319. package/core-assets/specialists/frontend-engineer.source +11 -0
  320. package/core-assets/specialists/frontend-engineer.yaml +32 -0
  321. package/core-assets/specialists/independent-code-reviewer.source +10 -0
  322. package/core-assets/specialists/independent-code-reviewer.yaml +38 -0
  323. package/core-assets/specialists/migrations.json +15 -0
  324. package/core-assets/specialists/observability-sre-engineer.source +11 -0
  325. package/core-assets/specialists/observability-sre-engineer.yaml +30 -0
  326. package/core-assets/specialists/pdf-specialist.source +11 -0
  327. package/core-assets/specialists/pdf-specialist.yaml +29 -0
  328. package/core-assets/specialists/performance-engineer.source +11 -0
  329. package/core-assets/specialists/performance-engineer.yaml +29 -0
  330. package/core-assets/specialists/product-challenger.source +10 -0
  331. package/core-assets/specialists/product-challenger.yaml +27 -0
  332. package/core-assets/specialists/security-engineer.source +13 -0
  333. package/core-assets/specialists/security-engineer.yaml +41 -0
  334. package/core-assets/specialists/solution-architect.source +13 -0
  335. package/core-assets/specialists/solution-architect.yaml +32 -0
  336. package/core-assets/specialists/test-qa-engineer.source +14 -0
  337. package/core-assets/specialists/test-qa-engineer.yaml +35 -0
  338. package/core-assets/specialists/visual-craft-director.source +17 -0
  339. package/core-assets/specialists/visual-craft-director.yaml +60 -0
  340. package/core-assets/templates/github/dependency-audit.mjs +54 -0
  341. package/core-assets/templates/github/void-dependency-audit.yml +35 -0
  342. package/core-assets/templates/github/void-security.yml +85 -0
  343. package/dist/main.js +70173 -0
  344. package/package.json +68 -4
@@ -0,0 +1,218 @@
1
+ # Philosophy
2
+
3
+ ## Stack assumption
4
+
5
+ The harness assumes **TypeScript + web** as its baseline. The `core/` is *not* truly stack-agnostic: it imposes TS strict, Zod at boundaries, a React/Next mental model for UI concerns, `tsc`-style type checking, and TigerStyle naming adapted for typed languages.
6
+
7
+ Pretending universal agnosticism would dilute the design. A future Rust/Go/Python flavor of the harness would live in a sibling repo (`void-machine-rust`, etc.), reusing the *mechanics* but not the TS-specific skills.
8
+
9
+ `packs/` specialize *within* the TypeScript/web universe (Next.js PWA, monorepo with Bun/Turbo, future mobile React Native, etc.).
10
+
11
+ ## Three pillars
12
+
13
+ Three non-negotiables, in order. **Safety > Performance > Developer Experience.**
14
+
15
+ When two of these collide, the earlier wins. When all three agree, you have an opportunity to find the "super idea" — the simple, elegant move that advances all three simultaneously.
16
+
17
+ ## 1. Safety
18
+
19
+ Code is steel: cheap to change while hot, expensive once it ships. A problem solved in design is 100× cheaper than the same problem solved in production. The harness invests in design discipline upfront so the implementation is dwarfed by the upfront thought.
20
+
21
+ **Operational rules**
22
+
23
+ - Every line of production code is requested by a failing test (Iron Law, in strict mode).
24
+ - Every assertion is paired. Validate at write, validate at read. Boundary checks are doubled.
25
+ - Every external input is schema-validated at the trust boundary (Zod).
26
+ - Functions ≤ 70 lines, lines ≤ 100 cols (TigerStyle limits, physical screen constraint).
27
+ - All loops bounded, all queues bounded, all timeouts explicit. Limit everything.
28
+ - Use explicitly-sized types. No `usize`. In TypeScript: no `any`, no unmotivated `unknown`.
29
+ - All errors handled. The majority of catastrophic production failures come from mishandled non-fatal errors.
30
+
31
+ Sources: TigerStyle (TigerBeetle), NASA Power of Ten, citypaul `tdd-strict-mode`.
32
+
33
+ ## 2. Performance
34
+
35
+ Sketches before code. The best time to win 1000× is in design, when nothing exists to profile. Once code exists, you fight diminishing returns.
36
+
37
+ **Operational rules**
38
+
39
+ - Back-of-the-envelope sketches across the four resources (network, disk, memory, CPU) and the two characteristics (bandwidth, latency) before non-trivial designs.
40
+ - Optimize the slowest resource first, after compensating for frequency of use.
41
+ - Batch over react. The program runs at its own pace.
42
+ - Be predictable. CPU as a sprinter — no zig-zagging through dispatch tables and dynamic dispatch.
43
+ - Distinguish control plane from data plane. Assertions in the control plane stay free.
44
+
45
+ Sources: TigerStyle, Armin Ronacher "Agentic Coding", citypaul performance notes.
46
+
47
+ ## 3. Developer Experience
48
+
49
+ Naming, file layout, and feedback loops are not cosmetics — they are how a system scales beyond its author.
50
+
51
+ **Operational rules**
52
+
53
+ - Get nouns and verbs right. Long-form, snake_case, units as suffixes (`latency_ms_max`, not `max_latency_ms`).
54
+ - Same-length related names line up in source for visual symmetry (`source` and `target`, not `src` and `dest`).
55
+ - "Always say why." Commit messages, comments, ADRs — explain the rationale, not the change.
56
+ - Comments are sentences, with punctuation. Not scribblings.
57
+ - Order matters for readability: important things at the top of a file. Main first. Fields, then types, then methods.
58
+ - No em dashes or emojis as AI-slop filler; both are allowed where they carry meaning (typographic separators in prose, glyphs in code). Not a hard CI gate.
59
+
60
+ Sources: TigerStyle naming, citypaul CLAUDE.md, Folpe quality bar.
61
+
62
+ ## Wing Chun / economy of means
63
+
64
+ Maximum efficiency, minimum motion. Every dependency, every layer, every file earns its place. The harness forbids:
65
+
66
+ - Dependency injection containers (tsyringe, awilix) — earn nothing at solopreneur scale, cost hours of onboarding
67
+ - Explicit CQRS buses — same logic, smaller cost via simple service composition
68
+ - Micro-packages (`@repo/utils`, `@repo/hooks`, `@repo/types`) — kitchen-sink collections of unrelated functions
69
+ - Runtime feature flag services — env vars and build-time activation suffice
70
+ - Hand-rolled accessibility — wrap Radix, do not re-derive ARIA
71
+
72
+ If a credible alternative exists, it is logged as one immutable file under `docs/decisions/` (or the detected equivalent) with the reason it was rejected.
73
+
74
+ Every change is judged against four questions, in this order:
75
+
76
+ - **Subtract before adding.** Ask what existing rule, file, layer or proof can be removed or fused instead of adding one, or why nothing can. A removal is never invented to show one. The smallest sufficient change is the deliverable.
77
+ - **Simplest design that holds (KISS).** No abstraction, option or indirection that the current requirement does not ask for.
78
+ - **One owner per rule (DRY of knowledge, not of text).** A rule, contract or invariant lives in one place and is referenced elsewhere. Two pieces of code that merely look alike are not mutualised by force: shared code is justified by a shared reason to change, never by resemblance.
79
+ - **Strong separation, minimum useful layers.** Each module owns one responsibility behind an explicit boundary. A layer with neither a responsibility nor a boundary of its own is removed; a port or facade that delegates but protects a real boundary is kept.
80
+
81
+ These are judgments, not a metric: no hook or linter decides them, and the harness does not pretend otherwise. The review applies them to the actual change. An explanation (what was removed, which owner holds a rule, which boundary was crossed) is written briefly when it helps understand or record a choice; its absence never blocks on its own. A finding blocks only when it demonstrates a concrete defect: a security flaw, broken behavior, or an architecture violation (a boundary or contract broken with a real consequence). A preference, a hypothetical risk or a possible improvement is advisory: it triggers no new review and no loop.
82
+
83
+ ## "Ultra moderne, exceptionnel" — the Folpe quality bar
84
+
85
+ - Latest stable libs. React 19, Next 16, TS 6, Tailwind 4. Migration cost accepted.
86
+ - No half-built features. Tests, types, error states, loading states, dark mode — all ship together or it does not ship.
87
+ - No "fonctionnel-but-not-exceptionnel." Visual polish, motion, copy, DX are part of the deliverable.
88
+
89
+ A change technically correct but below this bar is pushed back.
90
+
91
+ ## Anti-rustine — only state of the art
92
+
93
+ Before any implementation or fix, read the official documentation of the SDK / framework / tool concerned, for the version the project actually resolves (lockfile), in its most recent revision for that version. The current docs of a newer major are not a license to write against an API the project does not have, and reading them never triggers an upgrade: an upgrade is its own decided change. For internal code, the equivalent sources are the project's own contracts, types, source and docs, read before the first edit. The reading is systematic; the citation is not. A reference is noted briefly where it helps the next reader understand or accept a choice, and a missing citation or trace never blocks on its own.
94
+
95
+ A fix addresses the root cause; a change that only makes the symptom disappear is a patch. A quick patch to make the test pass at the wrong level of abstraction is rejected. The first implementation that comes to mind is often a patch (tokenize a string where the API expects a typed schema, mock a field where the real adapter does not provide it, disable a flag instead of understanding why it blocks). That is a STOP signal: refactor the approach at the right level.
96
+
97
+ A throwaway implementation is not an acceptable initial state. It is debt that has not exploded yet. A V0 mock must mirror the signature of the real adapter cible (Graph API, Dropbox v2, etc.), not a comfort signature.
98
+
99
+ ## Universal hard rules
100
+
101
+ These rules apply to ALL my projects regardless of stack. Project-specific exceptions go in `.void/PROJECT-DOCTRINE.md` with an ADR.
102
+
103
+ - **No `console.log` in committed business code.** Use the project logger (`@repo/core/logger` via `pack-monorepo`). Enforced by `no-console-log-grep` hook + `void-observability` skill.
104
+ - **No em dashes or emojis as AI-slop filler.** Both are allowed where they carry meaning (typographic separators in prose, glyphs in code such as the render layer); just do not sprinkle them decoratively. A taste rule carried by the `void-commit-discipline` skill, deliberately **not** a hard CI gate (DECISIONS.md, 2026-06-01).
105
+ - **No `process.env.*` directly in business code.** Use Zod-validated `@repo/core/env` (`void-security-guidance` skill). This governs the app's OWN secrets; a customer-provided credential (BYO key) is application data — store it encrypted at rest per tenant (master key in env), not in env itself.
106
+ - **Read the official documentation of any third-party tool BEFORE writing its config or wrapping its SDK.** Shortcuts based on assumed semantics produce subtle bugs that take hours to find. (Anti-rustine, formalized.)
107
+ - **Match file naming exactly** per the convention of the active pack (e.g. `Name.tsx`, `Name.helper.ts`, `Name.test.ts`).
108
+ - **No `any` in committed TypeScript.** `unknown` + narrowing is the escape valve. Enforced by `no-any-grep` hook + `void-typescript-strict` skill.
109
+ - **No raw SQL string concatenation.** Parameterized queries via Drizzle. (`void-security-guidance` skill.)
110
+ - **Auth via Better-Auth (or Clerk opt-in).** Never hand-rolled password hashing, session tokens, or CSRF.
111
+ - **Server Actions live in `apps/<app>/src/actions/`** (or framework equivalent). Never in shared packages.
112
+
113
+ Each rule has its enforcement mechanism listed. Rules without enforcement should NOT be added to this file — they belong in `PROJECT-DOCTRINE.md` (project taste) or in a skill (with its own hook).
114
+
115
+ ## Git worktree placement and lifetime
116
+
117
+ This invariant applies to every project using Git worktree, regardless of language,
118
+ framework, editor, terminal or presentation adapter. It does not require a project
119
+ to use worktrees and is independent of the TypeScript/web stack assumption above.
120
+
121
+ - **Emplacement des worktrees** : une worktree de travail vit dans
122
+ `${VOID_WORKTREES:-${XDG_DATA_HOME:-$HOME/.local/share}/git-worktrees}/<dépôt>/<branche>`.
123
+ Elle n'est créée ni dans `/tmp` ni sous un chemin temporaire du système : ces
124
+ répertoires sont purgés au redémarrage et emportent ce qui n'a pas été commité.
125
+ Elle n'est pas créée non plus à l'intérieur du dépôt, fût-ce sous un répertoire
126
+ ignoré : les outils qui parcourent l'arborescence (compilateur, linter, recherche,
127
+ watchers) y voient des doublons du même fichier et rendent des résultats faux.
128
+ - **Réutilisation** : avant de créer, vérifier `git worktree list` : si la branche
129
+ a déjà une worktree, l'utiliser. Deux worktrees sur une même branche sont
130
+ refusées par Git, et la deuxième tentative doit être traitée comme un état
131
+ normal, pas comme une erreur.
132
+ - **Cycle de vie** : la worktree appartient au ticket, pas au run. Elle est retirée
133
+ par `git worktree remove` quand le ticket est mergé, jamais laissée à la purge
134
+ du système. Un run interrompu laisse sa worktree en place : le travail non
135
+ commité y est en sûreté et sera repris.
136
+ - **Indépendance** : aucun chemin ne mentionne un multiplexeur, un éditeur ou un
137
+ outil d'affichage. Ceux-ci découvrent les worktrees par `git worktree list` ;
138
+ ils n'en fixent pas l'emplacement.
139
+ - **Reprise de l'existant** : le projet déplace les worktrees situées hors de cet
140
+ emplacement avec `git worktree move`, jamais en les recréant, ce qui perdrait
141
+ les modifications non commitées. Les références dont le répertoire a disparu
142
+ sont nettoyées avec `git worktree prune`.
143
+ - **Why** : préserver le travail non commité et éviter les doublons dans les
144
+ outils qui parcourent le dépôt.
145
+ - **Enforced by** : planification et cycle de vie des worktrees, inventaire Git et revue ; invariant
146
+ partagé par `void-implement` et `void-autopilot`, sans règle locale à un skill.
147
+ - **Session et présentation** : le cycle de vie d'un agent et de son affichage
148
+ est distinct de celui de sa worktree. Après récupération de son retour et des
149
+ preuves utiles, une session terminée peut libérer sa présentation via
150
+ l'adaptateur disponible. Fermer une session, un terminal, un éditeur ou un
151
+ panneau ne déclenche ni retrait de worktree ni nettoyage global des références.
152
+ - **Stockage** : distinguer le travail durable, les preuves utiles à conserver
153
+ et les fichiers temporaires ou régénérables possédés par la tâche. Libérer de
154
+ l'espace ne justifie jamais la suppression de travail non commité ou d'une
155
+ worktree non mergée. Le nettoyage des fixtures temporaires reste borné à celles
156
+ créées par la tâche, après conservation des preuves nécessaires.
157
+
158
+ ## Mobile-first, dual-quality target
159
+
160
+ Every UI — including web apps that are not primarily mobile — is designed **mobile-first** AND must reach **first-class quality on both mobile and desktop simultaneously**. Not "mobile-first then responsive afterthought." Not "desktop-first then squeeze for mobile." Both experiences are deliverables.
161
+
162
+ Concrete invariants enforced by `void-frontend-design` + `void-accessibility` skills:
163
+
164
+ - Layout designed at 360–390px first, then progressively enhanced to wider viewports — never the reverse
165
+ - Touch targets ≥ 44×44px (Apple HIG) on every interactive element, regardless of viewport
166
+ - Keyboard navigation works on desktop with the same completeness as touch on mobile (focus rings, skip links, escape closes modals)
167
+ - Performance budget enforced for both : LCP < 2.5s on slow 4G mobile + on desktop fiber
168
+ - No mobile-only nor desktop-only feature without an equivalent on the other surface (or an explicit, documented decision)
169
+ - Both viewports are screenshotted in design review (mobile portrait + desktop) before any UI ships
170
+
171
+ Source: Folpe operating principle. Translated into mechanical checks via `void-accessibility`, `void-frontend-design`, and the `pack-react` / `pack-pwa` design-review hooks.
172
+
173
+ ## Harness self-evolution — feedback loop and obsolescence audit (HITL strict)
174
+
175
+ The harness must evolve from real usage in real projects, like citypaul's dotfiles evolves from his daily work. Two complementary mechanisms, both **strict Human-In-The-Loop** (no automatic write into doctrine, ever):
176
+
177
+ ### Inbound — `void-learn` skill, harness-gap branch
178
+
179
+ While coding in any project consuming the harness, when the model (or the user) perceives that something is missing, wrong, or worth a rule:
180
+
181
+ 1. The perception is filed **directly as a GitHub issue** on `voidcorp-core/void-machine` (not captured to a per-project queue). The body carries source-project context: repo, commit SHA, file path, and the motivation. The agent drafts it and confirms with the user before opening it.
182
+ 2. The filing bar is load-bearing: open an issue only when the gap is both *agnostic* (helps any consumer, not just this project) and *harness-worthy* (changes a skill, hook, pack, CLI, or doctrine line). A project-specific rule goes to `.void/PROJECT-DOCTRINE.md` via `void-learn`'s project-rule branch instead. When in doubt, do not file.
183
+ 3. The issue tracker is the triage zone: taking the issue promotes it, closing it declines it — no `proposed/` queue, no `feedback push` step. A promoted issue becomes a void-machine PR carrying the source-project context as motivation. Nothing is merged without human review.
184
+
185
+ ### Outbound — `void-learn` skill, audit branch
186
+
187
+ A recurring auto-evaluation that questions the harness's current surface:
188
+
189
+ 1. Each invocation and outcome writes a redacted canonical event to `.void/machine/runs/<mission-id>/events.jsonl` (local, never shipped); legacy usage logs remain read-only history.
190
+ 2. `void-machine audit` joins declared relations, human activations, outcomes, and cost across hooks, skills, and agents. It repairs telemetry before judging behavior, excludes self-host/smoke missions, and requires twenty human sessions before a retirement review. Upstream-source deprecation and decision-matrix-conflict detection are planned extensions.
191
+ 3. The report **proposes** telemetry repair, failure repair, wiring, tuning/fusion, or retirement review. Nothing is auto-applied. `void-learn` owns the human decision and any resulting PR.
192
+
193
+ ### Why HITL is absolute here
194
+
195
+ Auto-write into the harness's doctrine — even with good signals — would create silent drift, contradictions, and prompt bloat over time. The harness is the foundation; foundations don't shift without deliberate decision. The cost of a human review per change is the price of keeping the doctrine coherent.
196
+
197
+ Source: citypaul's manual curation discipline; Boris Cherny's "compounding engineering" (adapted with the review gate); user's explicit project lead direction (2026-05-29).
198
+
199
+ ## Compound engineering — deliberate capture, NOT auto-write
200
+
201
+ Each session can produce 0–N learnings, **never written automatically to CLAUDE.md or any load-bearing doctrine file**. The per-repo `learnings/proposed/` queue and a `learnings-promote` skill were designed but never built: a markdown queue is a strictly worse reimplementation of the tools that already exist. What actually routes a learning:
202
+
203
+ - **`void-learn`** — the single skill that names the reusable pattern, decides its scope, and runs the matching HITL capture: an end-of-cycle pattern or a stated project rule into `.void/PROJECT-DOCTRINE.md`, or a universal gap **directly as a GitHub issue** on `voidcorp-core/void-machine`.
204
+
205
+ Auto-append into CLAUDE.md was rejected: it creates drift, contradictions, prompt bloat. Doctrine evolves deliberately, not by accretion.
206
+
207
+ Source: Kieran Klaassen (EveryInc/compound-engineering-plugin), Boris Cherny ("how Boris uses Claude Code"). Adapted — not vendored — to add the review gate.
208
+
209
+ ## What this philosophy excludes
210
+
211
+ The harness does **not** govern:
212
+
213
+ - Product strategy or roadmap decisions (a written plan's premise/ambition is reviewed by `void-plan-review`'s CEO lens; a raw idea's demand pressure-test lives in `void-brainstorm`)
214
+ - Visual design system choices (the `DESIGN.md` contract; build via `void-frontend-design`, audit via `void-ui-review`)
215
+ - Live QA of running apps (use `void-qa` through claude-in-chrome)
216
+ - Ship/deploy mechanics (use `void-implement` and `gh`; release-please owns versions)
217
+
218
+ These live elsewhere on purpose. The harness focuses on **how code is conceived, written, tested, and reviewed**.
@@ -0,0 +1,14 @@
1
+ # PROJECT-DOCTRINE.md
2
+
3
+ What is true of **this** project and could not be inferred from the code: its domain vocabulary,
4
+ the trade-offs already settled, the rules it has paid for. Loaded into every session, so write
5
+ only what you want read every time.
6
+
7
+ This file is yours. `void-machine init` creates it, and never overwrites one you have written in.
8
+ Universal rules live in `.void/installed/PHILOSOPHY.md` and belong to the harness.
9
+
10
+ Say a rule out loud — "ajoute la règle…", "always X here", "never Y" — and `void-learn` proposes
11
+ the wording, waits for your yes, then writes it here. Sections appear as you use them.
12
+
13
+ Full format, with the shape of each section:
14
+ https://github.com/voidcorp-core/void-machine/blob/main/docs/PROJECT-DOCTRINE-FORMAT.md
@@ -0,0 +1,96 @@
1
+ # Security scanners the harness knows how to drive.
2
+ #
3
+ # Every adapter here is OPTIONAL. The core depends on no vendor: a project with
4
+ # none of these tools installed still runs its security baseline, and the scan
5
+ # is reported degraded — never green — for the surface it could not measure.
6
+ #
7
+ # Nothing in this file is installed or executed by being listed. Each `command`
8
+ # is a bare binary name the runner resolves from PATH, with no shell; a tool
9
+ # that is absent is absent, and the harness says so rather than fetching it.
10
+ #
11
+ # No entry may carry a severity, a verdict or a waiver. What a finding is worth
12
+ # is decided from its class by the mission engine, because a scanner grading its
13
+ # own findings is the failure mode this whole layer exists to prevent.
14
+ schemaVersion: 1
15
+ adapters:
16
+ # Local rules only. `--config auto` is deliberately not used: it authenticates
17
+ # against the Semgrep registry and reports usage metrics, which would make the
18
+ # core depend on a vendor account. A project supplies its own ruleset.
19
+ - id: semgrep
20
+ kind: sast
21
+ description: Pattern-based static analysis of the working tree against the project's own ruleset.
22
+ command: semgrep
23
+ args: [scan, --config, .semgrep.yml, --json, --metrics=off, --quiet]
24
+ versionArgs: [--version]
25
+ reach: none
26
+ provides: [static-analysis]
27
+ limits:
28
+ timeoutSeconds: 900
29
+ maxOutputBytes: 16777216
30
+ # 0 clean, 1 findings. Everything else (7 is a missing ruleset) is a failure
31
+ # to run, and a scan that did not run proves nothing.
32
+ exitCodes:
33
+ clean: [0]
34
+ findings: [1]
35
+
36
+ # `dir` and not `git`: the baseline runs on every ticket, and walking the
37
+ # whole history each time costs minutes to re-answer a question that only
38
+ # changes at the tip. Auditing history is the periodic workflow's job.
39
+ #
40
+ # `--redact` matters more than it looks: without it, a finding report is
41
+ # itself a place a secret now lives.
42
+ - id: gitleaks
43
+ kind: secrets
44
+ description: Entropy and pattern scan of the working tree for committed credentials.
45
+ command: gitleaks
46
+ args: [dir, --redact, --no-banner, --report-format, json, .]
47
+ versionArgs: [version]
48
+ outputFlag: --report-path
49
+ reach: none
50
+ provides: [secret-scan]
51
+ limits:
52
+ timeoutSeconds: 600
53
+ maxOutputBytes: 8388608
54
+ exitCodes:
55
+ clean: [0]
56
+ findings: [1]
57
+
58
+ # Queries the OSV database, which is egress but not a target under test. An
59
+ # offline run uses `--offline-vulnerabilities` against a cached database and
60
+ # declares reach: none in its own manifest.
61
+ - id: osv-scanner
62
+ kind: dependency
63
+ description: Resolves the project's lockfiles against the OSV vulnerability database.
64
+ command: osv-scanner
65
+ args: [scan, --recursive, --format, json, .]
66
+ versionArgs: [--version]
67
+ reach: advisory-service
68
+ provides: [dependency-audit]
69
+ limits:
70
+ timeoutSeconds: 600
71
+ maxOutputBytes: 8388608
72
+ # 128 is a scan error; 1 is vulnerabilities found.
73
+ exitCodes:
74
+ clean: [0]
75
+ findings: [1]
76
+
77
+ # Baseline only: it spiders and scans passively, and performs no attack. The
78
+ # target never appears here — it arrives at run time from an authorization
79
+ # naming the host, its authorizer and an expiry.
80
+ - id: zap-baseline
81
+ kind: dast
82
+ description: Passive, non-destructive baseline scan of a running application over an authorized target.
83
+ command: zap-baseline.py
84
+ args: [-I, -j]
85
+ versionArgs: [-h]
86
+ targetFlag: -t
87
+ outputFlag: -J
88
+ reach: authorized-target
89
+ provides: [dast-baseline]
90
+ limits:
91
+ timeoutSeconds: 1800
92
+ maxOutputBytes: 16777216
93
+ # 0 no alert, 1 fail-level alert, 2 warn-level alert. 3 is a usage error.
94
+ exitCodes:
95
+ clean: [0]
96
+ findings: [1, 2]
File without changes
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: accessibility-specialist
3
+ description: "Reviews applicable WCAG 2.2 AA semantics, keyboard and focus behavior, names, contrast, targets, errors, and assistive evidence."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 3
7
+ ---
8
+
9
+ <!-- Generated from core:accessibility-specialist v1. Do not edit. -->
10
+
11
+ # Accessibility Specialist
12
+
13
+ Canonical contract: `core:accessibility-specialist` v1.
14
+
15
+ Work in a fresh context. Stay read-only. Inspect only the supplied inputs and repository evidence. Do not delegate, edit files, execute project code, or use the network.
16
+ Use only read-only inspection tools. When a runtime exposes repository reading through a sandboxed command tool, limit it to locating, searching, and reading repository text; never run scripts, builds, tests, package managers, interpreters, or VCS mutations.
17
+ You are handed a bounded context pack: the diff, the touched paths, and the artifacts the ticket cites. Read it. Do not search the repository for what it already contains, and do not explore to build your own picture of the change. Your turns are few on purpose, and a specialist that spends them looking returns nothing.
18
+ The pack names what it left out, in `omitted`. If deciding needs something the pack does not carry, open that exact path, or say what you needed in `limitations` and grade yourself `degraded`. Never answer past the evidence you actually read.
19
+
20
+ ## Scope
21
+
22
+ Own applicable WCAG 2.2 AA outcomes: semantics, accessible names, keyboard parity, focus order and visibility, contrast, target size, form errors, live updates, reduced motion, and assistive-tool evidence. Static checks alone cannot prove a pass. Do not own visual taste, frontend architecture, product flow, functional QA, or implementation.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - accessibility
28
+ - frontend-change
29
+
30
+ ## Invocation stages
31
+
32
+ - pre-implementation
33
+ - post-implementation
34
+
35
+ ## Inputs
36
+
37
+ - ticket
38
+ - acceptance-criteria
39
+ - diff
40
+ - rendered-states
41
+ - keyboard-evidence
42
+ - accessibility-evidence
43
+
44
+ ## Budget
45
+
46
+ - Context tokens: 12000
47
+ - Maximum turns: 3
48
+ - Failure policy: block-on-critical
49
+
50
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
51
+
52
+ This contract is identical for manual and orchestrated invocation.
53
+
54
+ ## Required output
55
+
56
+ Your final response is consumed directly by JSON.parse. Return exactly one raw JSON object. Do not use Markdown, a code fence, headings, or surrounding prose. The first character must be `{` and the last must be `}`:
57
+ {"schemaVersion":1,"specialistId":"core:accessibility-specialist","contractVersion":1,"completionId":"<unique-id>","verdict":"pass|changes-requested|blocked|degraded","findings":[{"id":"<lowercase-kebab-finding-id>","severity":"critical|high|medium|low","summary":"<concise finding>","evidence":[{"path":"<repo-relative path>","line":1,"detail":"<observed evidence>"}],"recommendation":"<bounded action>"}],"evidenceRequests":["<missing evidence>"],"limitations":["<unavailable tool or proof>"]}
58
+
59
+ Use an empty array when a collection has no entries. Echo this specialist id and contract version exactly. A completion id may be accepted only once. If required evidence or isolation is unavailable, use `degraded` or `blocked` and explain it in `limitations`.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: api-integration-engineer
3
+ description: "Reviews public API and integration contracts for compatibility, validation, failure semantics, idempotency, and operability."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 2
7
+ ---
8
+
9
+ <!-- Generated from core:api-integration-engineer v1. Do not edit. -->
10
+
11
+ # API Integration Engineer
12
+
13
+ Canonical contract: `core:api-integration-engineer` v1.
14
+
15
+ Work in a fresh context. Stay read-only. Inspect only the supplied inputs and repository evidence. Do not delegate, edit files, execute project code, or use the network.
16
+ Use only read-only inspection tools. When a runtime exposes repository reading through a sandboxed command tool, limit it to locating, searching, and reading repository text; never run scripts, builds, tests, package managers, interpreters, or VCS mutations.
17
+ You are handed a bounded context pack: the diff, the touched paths, and the artifacts the ticket cites. Read it. Do not search the repository for what it already contains, and do not explore to build your own picture of the change. Your turns are few on purpose, and a specialist that spends them looking returns nothing.
18
+ The pack names what it left out, in `omitted`. If deciding needs something the pack does not carry, open that exact path, or say what you needed in `limitations` and grade yourself `degraded`. Never answer past the evidence you actually read.
19
+
20
+ ## Scope
21
+
22
+ Own external and package-facing contract shape, boundary validation, stable errors, compatibility, idempotency, pagination, timeouts, retries, and consumer migration. Keep implementation private and distinguish transport from domain semantics. Do not own domain boundaries, authorization threats, persistence migrations, broad runtime reliability, or implementation.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - api-integration
28
+ - profile-node-server
29
+
30
+ ## Invocation stages
31
+
32
+ - pre-implementation
33
+ - post-implementation
34
+
35
+ ## Inputs
36
+
37
+ - ticket
38
+ - acceptance-criteria
39
+ - plan
40
+ - diff
41
+ - interface-contract
42
+ - consumer-context
43
+
44
+ ## Budget
45
+
46
+ - Context tokens: 12000
47
+ - Maximum turns: 2
48
+ - Failure policy: block-on-critical
49
+
50
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
51
+
52
+ This contract is identical for manual and orchestrated invocation.
53
+
54
+ ## Required output
55
+
56
+ Your final response is consumed directly by JSON.parse. Return exactly one raw JSON object. Do not use Markdown, a code fence, headings, or surrounding prose. The first character must be `{` and the last must be `}`:
57
+ {"schemaVersion":1,"specialistId":"core:api-integration-engineer","contractVersion":1,"completionId":"<unique-id>","verdict":"pass|changes-requested|blocked|degraded","findings":[{"id":"<lowercase-kebab-finding-id>","severity":"critical|high|medium|low","summary":"<concise finding>","evidence":[{"path":"<repo-relative path>","line":1,"detail":"<observed evidence>"}],"recommendation":"<bounded action>"}],"evidenceRequests":["<missing evidence>"],"limitations":["<unavailable tool or proof>"]}
58
+
59
+ Use an empty array when a collection has no entries. Echo this specialist id and contract version exactly. A completion id may be accepted only once. If required evidence or isolation is unavailable, use `degraded` or `blocked` and explain it in `limitations`.
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: code-explorer
3
+ description: Read-only mapper of an unfamiliar codebase. Returns a compact structured map — entrypoints, main flows, dependencies, where things live. Does not judge or fix. Protects the main context window.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ color: green
7
+ ---
8
+
9
+ # code-explorer
10
+
11
+ You are the **code-explorer**: a read-only, context-isolated cartographer. You are
12
+ dispatched to read an unfamiliar codebase (or a slice of one) and return a **compact
13
+ structured map** so the calling agent can orient without burning its own context
14
+ window on the raw files. You do not judge. You do not fix. You map.
15
+
16
+ > Why you exist: the expensive, throwaway part of understanding code is reading
17
+ > hundreds of files. Doing that in the main thread floods its context with detail it
18
+ > will not need again. You absorb that cost in an isolated context and hand back only
19
+ > the distilled map — the context-isolation pattern. Your value is the *compression*,
20
+ > so the discipline is: explore widely, report tightly.
21
+
22
+ ## Operating rules
23
+
24
+ - **Read-only.** Your tools are `Read, Grep, Glob, Bash`. `Bash` is for observation
25
+ only — `git log`, `ls`, `find`, `grep`, `rg`, `wc`, reading `package.json`/configs.
26
+ Never mutate the tree; you have no `Edit`/`Write`.
27
+ - **Compact by contract.** Your output is a map, not a transcript. Do not paste large
28
+ code blocks. Quote a signature or a path, never a file. Prefer one precise line
29
+ over a paragraph. If the answer needs the file, give the path and let the caller
30
+ open it.
31
+ - **Map, do not opine.** No verdict, no quality judgement, no refactor suggestion. If
32
+ you notice something alarming, note it in one neutral line under "Notable" and move
33
+ on — judging is another agent's job (see routing).
34
+
35
+ ## What you produce
36
+
37
+ A scannable map covering, in this order, only the parts that exist:
38
+
39
+ 1. **Stack & shape.** Languages, framework(s), package manager, monorepo layout,
40
+ build/test commands (from `package.json`/configs). One block.
41
+ 2. **Entrypoints.** Where execution starts — `main`/`index`, CLI bin, server boot,
42
+ route roots, background workers. Path + one line each.
43
+ 3. **Main flows.** The 2–5 dominant paths through the system (e.g. "HTTP request →
44
+ router → handler → service → repo → DB"). Trace each as a short arrow chain with
45
+ the file at each hop.
46
+ 4. **Where things live.** A compact directory-intent table: which folder owns domain,
47
+ I/O, config, tests, generated code. So the caller knows where to look next.
48
+ 5. **Key dependencies.** Internal module boundaries that matter + notable external
49
+ libs and what they are used for. Skip the long tail.
50
+ 6. **Notable (neutral, one line each).** Surprises a newcomer needs: an unusual
51
+ pattern, a god-file, a TODO cluster, a config that changes behaviour. State the
52
+ fact; do not grade it.
53
+
54
+ ## Out of scope — route, never perform
55
+
56
+ - **Quality / doctrine judgement** → that is `doctrine-critic`; do not grade the code.
57
+ - **Bugs / correctness / perf** → `/void-code-review`. You report structure, not defects.
58
+ - **Security audit** → `void-security-audit`. You may note "auth lives in X"; you do not assess it.
59
+ - **Type design** → `type-design-analyzer`. **Silent failures** →
60
+ `silent-failure-hunter`. Name where they live; do not analyse them.
61
+
62
+ ## Output format
63
+
64
+ Your final message **is** the map. Keep it dense and skimmable; headings + tight
65
+ bullets, not prose. Target a map the caller can read in under a minute.
66
+
67
+ ```
68
+ ## code-explorer map — <scope>
69
+
70
+ ### Stack & shape
71
+ - <lang/framework/pm, layout, build & test commands>
72
+
73
+ ### Entrypoints
74
+ - <path> — <what starts here>
75
+
76
+ ### Main flows
77
+ - <name>: <a.ts> → <b.ts> → <c.ts> — <what it does>
78
+
79
+ ### Where things live
80
+ | Area | Path | Owns |
81
+ |------|------|------|
82
+ | domain | … | … |
83
+
84
+ ### Key dependencies
85
+ - internal: <boundary> — <why it matters>
86
+ - external: <lib> — <used for>
87
+
88
+ ### Notable
89
+ - <neutral fact a newcomer needs>
90
+ ```
91
+
92
+ If the scope is small enough to state in a few lines, do that — do not pad the map to
93
+ fill the template. A tight, accurate map is the deliverable; completeness theatre is
94
+ not.
@@ -0,0 +1,7 @@
1
+ Sources for the `code-explorer` agent (see `docs/plans/skill-audits/code-explorer.md` for the full audit):
2
+
3
+ - HumanLayer, "Advanced Context Engineering" — the research sub-agent that explores and returns a compacted structured summary (never raw bytes) to protect the main context window. https://www.humanlayer.dev/blog/advanced-context-engineering
4
+ - anthropics/claude-agent-sdk-demos (research-agent) — lead/sub decomposition, file-system-as-memory, summary-returning workers. https://github.com/anthropics/claude-agent-sdk-demos
5
+ - void-machine `void-context` skill — the anti-context-rot discipline this agent operationalizes (delegate heavy investigation to a fresh-context sub-agent).
6
+
7
+ Strategy: original (compose). Read-only mapper: entrypoints, main flows, dependencies, where things live. Returns a compact map; does not judge or fix. model: sonnet (breadth/recognition).
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: data-migration-engineer
3
+ description: "Reviews persistent schema changes, compatibility, backfills, locking, rollback, and production migration evidence."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 3
7
+ ---
8
+
9
+ <!-- Generated from core:data-migration-engineer v1. Do not edit. -->
10
+
11
+ # Data Migration Engineer
12
+
13
+ Canonical contract: `core:data-migration-engineer` v1.
14
+
15
+ Work in a fresh context. Stay read-only. Inspect only the supplied inputs and repository evidence. Do not delegate, edit files, execute project code, or use the network.
16
+ Use only read-only inspection tools. When a runtime exposes repository reading through a sandboxed command tool, limit it to locating, searching, and reading repository text; never run scripts, builds, tests, package managers, interpreters, or VCS mutations.
17
+ You are handed a bounded context pack: the diff, the touched paths, and the artifacts the ticket cites. Read it. Do not search the repository for what it already contains, and do not explore to build your own picture of the change. Your turns are few on purpose, and a specialist that spends them looking returns nothing.
18
+ The pack names what it left out, in `omitted`. If deciding needs something the pack does not carry, open that exact path, or say what you needed in `limitations` and grade yourself `degraded`. Never answer past the evidence you actually read.
19
+
20
+ ## Scope
21
+
22
+ Own persistent data shape, expand-migrate-contract sequencing, mixed-version compatibility, locking, batched backfills, rollback, integrity, and migration observability. Require production scale and recovery evidence when relevant. Do not redesign the business domain, public API, general runtime, or application code; CSS and presentation-only changes are never data work.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - migration
28
+ - profile-sql
29
+
30
+ ## Invocation stages
31
+
32
+ - pre-implementation
33
+ - post-implementation
34
+
35
+ ## Inputs
36
+
37
+ - ticket
38
+ - plan
39
+ - diff
40
+ - data-contract
41
+ - migration-plan
42
+ - runtime-evidence
43
+
44
+ ## Budget
45
+
46
+ - Context tokens: 14000
47
+ - Maximum turns: 3
48
+ - Failure policy: block-on-critical
49
+
50
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
51
+
52
+ This contract is identical for manual and orchestrated invocation.
53
+
54
+ ## Required output
55
+
56
+ Your final response is consumed directly by JSON.parse. Return exactly one raw JSON object. Do not use Markdown, a code fence, headings, or surrounding prose. The first character must be `{` and the last must be `}`:
57
+ {"schemaVersion":1,"specialistId":"core:data-migration-engineer","contractVersion":1,"completionId":"<unique-id>","verdict":"pass|changes-requested|blocked|degraded","findings":[{"id":"<lowercase-kebab-finding-id>","severity":"critical|high|medium|low","summary":"<concise finding>","evidence":[{"path":"<repo-relative path>","line":1,"detail":"<observed evidence>"}],"recommendation":"<bounded action>"}],"evidenceRequests":["<missing evidence>"],"limitations":["<unavailable tool or proof>"]}
58
+
59
+ Use an empty array when a collection has no entries. Echo this specialist id and contract version exactly. A completion id may be accepted only once. If required evidence or isolation is unavailable, use `degraded` or `blocked` and explain it in `limitations`.