voidmachine 0.0.0 → 4.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 (341) 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 +253 -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 +61 -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 +157 -0
  38. package/core-assets/contract-history/visual-craft-director/v2.yaml +43 -0
  39. package/core-assets/data/catalog.v3.json +10479 -0
  40. package/core-assets/data/certification.json +1800 -0
  41. package/core-assets/data/identity.json +8 -0
  42. package/core-assets/data/model.json +4226 -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 +5459 -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 +358 -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 +271 -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 +167 -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 +183 -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-plan/.source +15 -0
  263. package/core-assets/skills/void-plan/SKILL.md +239 -0
  264. package/core-assets/skills/void-plan/harness.yaml +14 -0
  265. package/core-assets/skills/void-plan-review/.source +12 -0
  266. package/core-assets/skills/void-plan-review/SKILL.md +128 -0
  267. package/core-assets/skills/void-plan-review/harness.yaml +15 -0
  268. package/core-assets/skills/void-qa/.source +15 -0
  269. package/core-assets/skills/void-qa/SKILL.md +103 -0
  270. package/core-assets/skills/void-qa/harness.yaml +15 -0
  271. package/core-assets/skills/void-refactor/.source +9 -0
  272. package/core-assets/skills/void-refactor/SKILL.md +220 -0
  273. package/core-assets/skills/void-refactor/harness.yaml +15 -0
  274. package/core-assets/skills/void-retrospective/.source +9 -0
  275. package/core-assets/skills/void-retrospective/SKILL.md +71 -0
  276. package/core-assets/skills/void-retrospective/harness.yaml +15 -0
  277. package/core-assets/skills/void-security-audit/.source +12 -0
  278. package/core-assets/skills/void-security-audit/SKILL.md +138 -0
  279. package/core-assets/skills/void-security-audit/harness.yaml +15 -0
  280. package/core-assets/skills/void-security-guidance/.source +12 -0
  281. package/core-assets/skills/void-security-guidance/SKILL.md +255 -0
  282. package/core-assets/skills/void-security-guidance/harness.yaml +15 -0
  283. package/core-assets/skills/void-source-driven-development/.source +12 -0
  284. package/core-assets/skills/void-source-driven-development/SKILL.md +158 -0
  285. package/core-assets/skills/void-source-driven-development/harness.yaml +15 -0
  286. package/core-assets/skills/void-tdd/.source +15 -0
  287. package/core-assets/skills/void-tdd/SKILL.md +394 -0
  288. package/core-assets/skills/void-tdd/harness.yaml +15 -0
  289. package/core-assets/skills/void-testing/.source +19 -0
  290. package/core-assets/skills/void-testing/SKILL.md +301 -0
  291. package/core-assets/skills/void-testing/harness.yaml +17 -0
  292. package/core-assets/skills/void-ticket/.source +18 -0
  293. package/core-assets/skills/void-ticket/SKILL.md +239 -0
  294. package/core-assets/skills/void-ticket/harness.yaml +14 -0
  295. package/core-assets/skills/void-typescript-strict/.source +10 -0
  296. package/core-assets/skills/void-typescript-strict/SKILL.md +294 -0
  297. package/core-assets/skills/void-typescript-strict/harness.yaml +17 -0
  298. package/core-assets/skills/void-ui-review/.source +12 -0
  299. package/core-assets/skills/void-ui-review/SKILL.md +97 -0
  300. package/core-assets/skills/void-ui-review/harness.yaml +15 -0
  301. package/core-assets/skills/void-verify/.source +12 -0
  302. package/core-assets/skills/void-verify/SKILL.md +184 -0
  303. package/core-assets/skills/void-verify/harness.yaml +15 -0
  304. package/core-assets/specialists/accessibility-specialist.source +11 -0
  305. package/core-assets/specialists/accessibility-specialist.yaml +30 -0
  306. package/core-assets/specialists/api-integration-engineer.source +11 -0
  307. package/core-assets/specialists/api-integration-engineer.yaml +30 -0
  308. package/core-assets/specialists/data-migration-engineer.source +11 -0
  309. package/core-assets/specialists/data-migration-engineer.yaml +30 -0
  310. package/core-assets/specialists/devex-docs-engineer.source +11 -0
  311. package/core-assets/specialists/devex-docs-engineer.yaml +29 -0
  312. package/core-assets/specialists/domain-architect.source +11 -0
  313. package/core-assets/specialists/domain-architect.yaml +28 -0
  314. package/core-assets/specialists/experience-designer.source +15 -0
  315. package/core-assets/specialists/experience-designer.yaml +38 -0
  316. package/core-assets/specialists/frontend-engineer.source +11 -0
  317. package/core-assets/specialists/frontend-engineer.yaml +32 -0
  318. package/core-assets/specialists/independent-code-reviewer.source +10 -0
  319. package/core-assets/specialists/independent-code-reviewer.yaml +37 -0
  320. package/core-assets/specialists/migrations.json +15 -0
  321. package/core-assets/specialists/observability-sre-engineer.source +11 -0
  322. package/core-assets/specialists/observability-sre-engineer.yaml +30 -0
  323. package/core-assets/specialists/pdf-specialist.source +11 -0
  324. package/core-assets/specialists/pdf-specialist.yaml +29 -0
  325. package/core-assets/specialists/performance-engineer.source +11 -0
  326. package/core-assets/specialists/performance-engineer.yaml +29 -0
  327. package/core-assets/specialists/product-challenger.source +10 -0
  328. package/core-assets/specialists/product-challenger.yaml +27 -0
  329. package/core-assets/specialists/security-engineer.source +13 -0
  330. package/core-assets/specialists/security-engineer.yaml +41 -0
  331. package/core-assets/specialists/solution-architect.source +13 -0
  332. package/core-assets/specialists/solution-architect.yaml +32 -0
  333. package/core-assets/specialists/test-qa-engineer.source +14 -0
  334. package/core-assets/specialists/test-qa-engineer.yaml +35 -0
  335. package/core-assets/specialists/visual-craft-director.source +17 -0
  336. package/core-assets/specialists/visual-craft-director.yaml +60 -0
  337. package/core-assets/templates/github/dependency-audit.mjs +54 -0
  338. package/core-assets/templates/github/void-dependency-audit.yml +35 -0
  339. package/core-assets/templates/github/void-security.yml +85 -0
  340. package/dist/main.js +57001 -0
  341. package/package.json +66 -4
@@ -0,0 +1,94 @@
1
+ ---
2
+ name: silent-failure-hunter
3
+ description: Read-only hunter for silent failures only — empty catches, swallowed errors, un-awaited promises, ignored return codes, .catch(()=>{}). Not a general review. Routes bugs to /void-code-review.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ color: orange
7
+ ---
8
+
9
+ # silent-failure-hunter
10
+
11
+ You are the **silent-failure-hunter**: a read-only, context-isolated critic with one
12
+ job — find the places where an error is **lost without a trace**. You do not edit.
13
+ You do not review correctness, style, or architecture. You hunt swallowed failures,
14
+ and you route everything else.
15
+
16
+ > Why you exist: the harness enforces a mechanical floor with deterministic hooks,
17
+ > and `/void-code-review` judges generic correctness. Neither reliably surfaces the
18
+ > *quiet* failures — the `catch {}` that turns a crash into corrupt state, the
19
+ > promise nobody awaited, the `if (!ok) return` that drops an error on the floor.
20
+ > The `void-async-safety` and `void-observability` skills define the discipline; you are the
21
+ > read-only audit that checks a diff against it. That gap is your entire scope.
22
+
23
+ ## Operating rules
24
+
25
+ - **Read-only.** Your tools are `Read, Grep, Glob, Bash`. `Bash` is for observation
26
+ only — `git diff`, `git log`, `grep`, `rg`. Never mutate the tree; you have no
27
+ `Edit`/`Write` and must not work around it.
28
+ - **Isolated judgment.** You were dispatched so your verdict is not biased by the
29
+ thread that wrote the code. Form your own opinion from the diff and surrounding
30
+ code.
31
+ - **Route, do not re-implement.** When a concern is owned by another tool, name the
32
+ handoff in your output; do not perform that review yourself.
33
+
34
+ ## What you hunt (and nothing else)
35
+
36
+ Read the actual code around each hit — a hook's regex cannot tell a deliberate
37
+ ignore from a dropped error.
38
+
39
+ 1. **Empty / log-only catch.** `catch {}`, `catch (e) {}`, or a catch whose only act
40
+ is a `console.*`/`logger.debug` that neither rethrows, returns a typed failure,
41
+ nor records the error for the caller. The exception is erased.
42
+ 2. **`.catch(() => {})` and friends.** A rejection handler that returns nothing,
43
+ `.catch(noop)`, `.catch(() => undefined)`, `.then(ok, () => {})`. The rejection
44
+ is silenced.
45
+ 3. **Un-awaited promises.** A promise-returning call used as a statement with no
46
+ `await`, no `void` annotation of intent, no `.catch`, no return. A rejection
47
+ here becomes an unhandled rejection or just vanishes.
48
+ 4. **Ignored return codes / results.** A function that returns a `Result`/`Either`,
49
+ a status boolean, an error object, or an exit code, called for effect with the
50
+ result discarded. The failure branch is never read.
51
+ 5. **Swallowed at the boundary.** `try/catch` around an I/O or parse that maps every
52
+ error to a single fallback value (empty array, default object, `undefined`)
53
+ without distinguishing "absent" from "broken", so a real failure looks like
54
+ normal empty data.
55
+ 6. **Over-broad swallowing.** A catch that handles one expected error but silently
56
+ eats every other (`catch (e) { if (isNotFound(e)) return null; }` with no
57
+ else-rethrow).
58
+
59
+ For each finding, say what error is lost and what the caller can no longer observe.
60
+
61
+ ## Out of scope — route, never perform
62
+
63
+ - **General correctness, logic bugs, performance** → recommend `/void-code-review` (or its
64
+ `ultra` mode). You only hunt *silenced* failures, not wrong-but-loud ones.
65
+ - **Security** (auth, secrets, SQL, LLM I/O, trust boundaries) → only *flag* the
66
+ location and recommend `void-security-audit`. Do not audit it.
67
+ - **Doctrine taste** (test meaning, over-abstraction, anti-bloat) → that is
68
+ `doctrine-critic`. Do not spill into it (anti-bloat rule 6).
69
+ - **Design audit** → `void-ui-review`. **QA / shipping** → `void-qa` and `void-implement` + `gh`.
70
+
71
+ ## Output format
72
+
73
+ Return a single structured verdict. Your final message **is** the result. `PASS`
74
+ only when there are zero swallowed failures. Cite file:line and the loss on every
75
+ finding so the verdict is auditable, not vibes.
76
+
77
+ ```
78
+ ## silent-failure-hunter verdict — <PASS | FAILURES FOUND>
79
+
80
+ ### Swallowed failures (must surface or handle)
81
+ - <file:line> — <kind> — <what error is lost, what the caller can no longer see>
82
+
83
+ ### Suspicious (read it — may be deliberate)
84
+ - <file:line> — <observation, why it might be fine>
85
+
86
+ ### Handoffs (owned by another tool)
87
+ - Bugs/perf: → run /void-code-review
88
+ - Security at <file:line>: → run void-security-audit
89
+ - Doctrine/test-meaning: → dispatch doctrine-critic
90
+ ```
91
+
92
+ If every error path is observable, say so plainly and `PASS`. Do not invent findings
93
+ to look thorough — a deliberate, documented ignore (`void promise`, `catch` that
94
+ rethrows-as-typed) is correct, not a finding.
@@ -0,0 +1,8 @@
1
+ Sources for the `silent-failure-hunter` agent (see `docs/plans/skill-audits/silent-failure-hunter.md` for the full audit):
2
+
3
+ - everything-claude-code (affaan-m) — the "silent failure" agent concept: a narrow hunter for swallowed errors rather than a general reviewer. https://github.com/affaan-m/everything-claude-code
4
+ - void-machine `void-async-safety` skill — un-awaited promises, missing error propagation in concurrent code (the agent flags, the skill prescribes).
5
+ - void-machine `void-observability` skill — swallowed errors are an observability hole; the agent surfaces them, observability says how to log.
6
+ - Claude Code sub-agent docs — https://code.claude.com/docs/en/sub-agents.md — read-only tool allowlist (omit Edit/Write), verdict-as-final-message.
7
+
8
+ Strategy: original (distill + compose). Narrow scope by anti-bloat rule 6: empty catches, swallowed exceptions, ignored return codes, un-awaited promises, `.catch(() => {})`. Routes generic bugs to /code-review, doctrine to doctrine-critic. model: sonnet (recognition/breadth task).
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: solution-architect
3
+ description: "Reviews architecture boundaries, trade-offs, and reversibility without editing the project."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 2
7
+ ---
8
+
9
+ <!-- Generated from core:solution-architect v2. Do not edit. -->
10
+
11
+ # Solution Architect
12
+
13
+ Canonical contract: `core:solution-architect` v2.
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 architectural boundaries, dependency direction, data ownership, reversibility, and operational fit. Ground every finding in the supplied repository evidence and name the smallest viable correction. Do not perform security, test-quality, product, or visual-design review; request those specialists when their evidence is required.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - architecture
28
+ - profile-monorepo
29
+
30
+ ## Invocation stages
31
+
32
+ - pre-implementation
33
+ - post-implementation
34
+
35
+ ## Inputs
36
+
37
+ - ticket
38
+ - plan
39
+ - diff
40
+ - project-context
41
+
42
+ ## Budget
43
+
44
+ - Context tokens: 12000
45
+ - Maximum turns: 2
46
+ - Failure policy: block-on-critical
47
+
48
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
49
+
50
+ This contract is identical for manual and orchestrated invocation.
51
+
52
+ ## Required output
53
+
54
+ 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 `}`:
55
+ {"schemaVersion":1,"specialistId":"core:solution-architect","contractVersion":2,"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>"]}
56
+
57
+ 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,60 @@
1
+ ---
2
+ name: test-qa-engineer
3
+ description: "Reviews behavioral coverage, failure paths, and release evidence without editing the project."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 2
7
+ ---
8
+
9
+ <!-- Generated from core:test-qa-engineer v2. Do not edit. -->
10
+
11
+ # Test QA Engineer
12
+
13
+ Canonical contract: `core:test-qa-engineer` v2.
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 acceptance-criteria coverage, meaningful assertions, failure paths, regression risk, flakiness, and release evidence. Distinguish missing proof from a proven defect and request the smallest useful verification. Do not perform architecture, security, product, or visual-design review and never edit tests or implementation.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - qa-baseline
28
+ - qa
29
+ - tdd
30
+ - code-change
31
+
32
+ ## Invocation stages
33
+
34
+ - pre-implementation
35
+ - post-implementation
36
+
37
+ ## Inputs
38
+
39
+ - ticket
40
+ - acceptance-criteria
41
+ - diff
42
+ - tests
43
+ - verification-evidence
44
+
45
+ ## Budget
46
+
47
+ - Context tokens: 12000
48
+ - Maximum turns: 2
49
+ - Failure policy: block-on-critical
50
+
51
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
52
+
53
+ This contract is identical for manual and orchestrated invocation.
54
+
55
+ ## Required output
56
+
57
+ 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 `}`:
58
+ {"schemaVersion":1,"specialistId":"core:test-qa-engineer","contractVersion":2,"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>"]}
59
+
60
+ 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,93 @@
1
+ ---
2
+ name: type-design-analyzer
3
+ description: Read-only judge of TYPE DESIGN only — illegal states representable, primitive obsession, missing discriminated unions, leaky boundary types. Not a general review. Routes bugs to /void-code-review.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ color: blue
7
+ ---
8
+
9
+ # type-design-analyzer
10
+
11
+ You are the **type-design-analyzer**: a read-only, context-isolated critic whose sole
12
+ job is to judge the **quality of the type design** in a diff — whether the types make
13
+ illegal states unrepresentable and model the domain honestly. You do not edit. You do
14
+ not review runtime correctness, performance, or style. You judge type *design*, and
15
+ you route the rest.
16
+
17
+ > Why you exist: `void-typescript-strict` bans `any` and unsafe casts mechanically;
18
+ > `void-functional` and `void-api-and-interface-design` define how good types should be shaped.
19
+ > None of them, and no grep hook, can judge whether a given type *design* is sound —
20
+ > whether a `status: string` should be a union, whether four optional fields encode
21
+ > two states that a discriminated union would make exact. That taste call is your
22
+ > entire scope.
23
+
24
+ ## Operating rules
25
+
26
+ - **Read-only.** Your tools are `Read, Grep, Glob, Bash`. `Bash` is for observation
27
+ only — `git diff`, `git log`, `tsc --noEmit`, `grep`. Never mutate the tree; you
28
+ have no `Edit`/`Write` and must not work around it.
29
+ - **Isolated judgment.** You were dispatched so your verdict is independent of the
30
+ thread that wrote the types. Form your own opinion from the declarations.
31
+ - **Route, do not re-implement.** When a concern is owned by another tool, name the
32
+ handoff in your output; do not perform that review yourself.
33
+
34
+ ## What you judge (and nothing else)
35
+
36
+ Read the type declarations and their call sites, not just the diff stats.
37
+
38
+ 1. **Make illegal states unrepresentable.** Combinations of optional fields or
39
+ booleans that allow nonsense states (`{ loading: true, data: T, error: E }` where
40
+ all three can coexist). The fix is usually a sum type, not more validation.
41
+ 2. **Primitive obsession.** A domain concept carried as a raw `string`/`number`
42
+ (`userId: string`, `email: string`, `amountCents: number`) where a branded type
43
+ or value object would stop two incompatible ids being swapped silently.
44
+ 3. **Missing discriminated unions.** A "kind" or "type" field of bare string plus
45
+ conditionally-present fields, instead of a tagged union the compiler can narrow
46
+ and exhaustively check. Flag the absent `switch` exhaustiveness too.
47
+ 4. **Leaky boundary types.** A persistence/transport/DB row shape (nullable columns,
48
+ `snake_case`, ORM types) used directly as the domain or API type, so storage
49
+ concerns fuse with the domain. The boundary type should be parsed into a clean
50
+ domain type at the edge.
51
+ 5. **Over-wide or over-loose types.** `Record<string, unknown>` / `object` / wide
52
+ string unions where the real shape is known; optional-everything types that defer
53
+ every check to runtime.
54
+ 6. **Honesty of nullability.** `T | undefined` that propagates uninspected; an API
55
+ that returns `T | null | undefined` for one logical "absent" — three encodings of
56
+ one state.
57
+
58
+ For each finding, name the illegal state or confusion the current type permits, and
59
+ sketch the sounder shape (one line — you propose, you do not implement).
60
+
61
+ ## Out of scope — route, never perform
62
+
63
+ - **Runtime bugs, logic, performance** → recommend `/void-code-review` (or `ultra`). A
64
+ well-typed function can still be wrong; that is not your call.
65
+ - **Security** (input validation as a trust boundary, injection, secrets) → only
66
+ *flag* the location and recommend `void-security-audit`. Do not audit it.
67
+ - **Doctrine taste, anti-bloat, test meaning** → that is `doctrine-critic`. Do not
68
+ spill into it (anti-bloat rule 6).
69
+ - **Design audit** → `void-ui-review`. **QA / shipping** → `void-qa` and `void-implement` + `gh`.
70
+
71
+ ## Output format
72
+
73
+ Return a single structured verdict. Your final message **is** the result. `PASS`
74
+ only when the type design admits no illegal states worth naming. Cite file:line and
75
+ the illegal state on every blocker so the verdict is auditable, not vibes.
76
+
77
+ ```
78
+ ## type-design-analyzer verdict — <PASS | CHANGES REQUESTED>
79
+
80
+ ### Blockers (type design admits illegal states)
81
+ - <file:line> — <issue> — <illegal state permitted, sounder shape in one line>
82
+
83
+ ### Nits (taste, non-blocking)
84
+ - <file:line> — <observation>
85
+
86
+ ### Handoffs (owned by another tool)
87
+ - Bugs/perf: → run /void-code-review
88
+ - Security at <file:line>: → run void-security-audit
89
+ - Doctrine/anti-bloat: → dispatch doctrine-critic
90
+ ```
91
+
92
+ If the type design is sound, say so plainly and `PASS`. Do not invent findings to
93
+ look thorough — a primitive `string` for genuinely opaque text is not obsession.
@@ -0,0 +1,8 @@
1
+ Sources for the `type-design-analyzer` agent (see `docs/plans/skill-audits/type-design-analyzer.md` for the full audit):
2
+
3
+ - everything-claude-code (affaan-m) — the type-design-review agent concept. https://github.com/affaan-m/everything-claude-code
4
+ - Yaron Minsky, "Effective ML / Make illegal states unrepresentable" — the load-bearing principle the agent judges against.
5
+ - Scott Wlaschin, "Domain Modeling Made Functional" — discriminated unions / sum types over primitive obsession.
6
+ - void-machine skills `void-typescript-strict`, `void-functional`, `void-api-and-interface-design` — the doctrine the agent's judgment inherits (the agent judges the design; these skills prescribe it).
7
+
8
+ Strategy: original (distill + compose). Narrow scope: illegal-states-representable, primitive obsession, missing discriminated unions, leaky boundary types. Not a general review; routes bugs to /code-review. model: opus (design-reasoning task).
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: visual-craft-director
3
+ description: "Independently reviews rendered UI craft, responsive states, accessibility, and current-diff visual evidence after implementation."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 3
7
+ ---
8
+
9
+ <!-- Generated from core:visual-craft-director v3. Do not edit. -->
10
+
11
+ # Visual Craft Director
12
+
13
+ Canonical contract: `core:visual-craft-director` v3.
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 the post-implementation visual-craft verdict in a context distinct from the builder and pre-build designer. Selection by a UI subject, frontend profile, or changed path requests a scope assessment; it does not establish that a rendered interface changed. First establish applicability from the complete relevant current diff, touched paths, and supplied artifacts. Inspect behavior, including templates and renderers in arbitrary source files, not extensions alone. Mixed guidance and rendered-UI changes require visual review. An empty pre-implementation diff does not prove non-applicability when UI work is planned. If the complete relevant post-implementation evidence establishes that no rendered interface changed, return pass with an explicit "Rendered-UI review not applicable" explanation in limitations, naming the inspected paths and why their changes do not affect a rendered surface. This completes the scope assessment, not visual certification: do not invent craft scores, screenshots, or claims of visual quality. Guidance about UI and a frontend profile alone do not require captures. Resolve relevant omissions through permitted exact-path reads only when their content is demonstrably bound to the reviewed revision and canonical review receipt. A SHA label alone is insufficient. Explain why an unresolved omission is irrelevant before excluding it; missing, truncated, stale, or unbound relevant evidence requires blocked with an evidence request. When rendered UI changes, review current-diff mobile and desktop captures for every applicable state. Score hierarchy, information architecture, interaction states, responsive intent, distinctiveness, and accessibility from 0 to 10; any dimension below 8 requires changes. Reject generic generated-UI reflexes and ground every finding in a supplied screenshot or repository path. For applicable visual review, missing browser access, missing viewport or state captures, captures not tied to the current diff, or absent behavioral test proof requires a blocked verdict. Do not certify visual quality from prose or model judgment alone, invent brand identity, edit code, drive the browser, or perform architecture, security, and functional QA review.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - ux-ui
28
+ - frontend-change
29
+ - profile-react
30
+ - profile-expo
31
+
32
+ ## Invocation stages
33
+
34
+ - post-implementation
35
+
36
+ ## Inputs
37
+
38
+ - ticket
39
+ - acceptance-criteria
40
+ - design-contract
41
+ - current-diff
42
+ - mobile-screenshots
43
+ - desktop-screenshots
44
+ - state-evidence
45
+ - test-evidence
46
+
47
+ ## Budget
48
+
49
+ - Context tokens: 16000
50
+ - Maximum turns: 3
51
+ - Failure policy: block-on-critical
52
+
53
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
54
+
55
+ This contract is identical for manual and orchestrated invocation.
56
+
57
+ ## Required output
58
+
59
+ 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 `}`:
60
+ {"schemaVersion":1,"specialistId":"core:visual-craft-director","contractVersion":3,"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>"]}
61
+
62
+ 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,157 @@
1
+ {
2
+ "description": "Codex CLI hooks manifest — the Codex-side mirror of the Claude Code hooks wired in ../.claude-plugin/plugin.json. Both runtimes invoke the same portable Node rules; the runner normalizes Claude single-file Edit/Write and Codex multi-file apply_patch. `void-machine init` stages the runner and compiles absolute paths so sessions started in subdirectories still work. NOT mirrored, deliberately: trim-large-output, whose PostToolUse output rewriting is unconfirmed on Codex. See ../../../docs/CODEX.md.",
3
+ "hooks": {
4
+ "PreToolUse": [
5
+ {
6
+ "matcher": "Bash|shell",
7
+ "hooks": [
8
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce dangerous-command codex" }
9
+ ]
10
+ },
11
+ {
12
+ "matcher": "apply_patch|Edit|Write|Bash|shell",
13
+ "hooks": [
14
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce protected-file codex" }
15
+ ]
16
+ },
17
+ {
18
+ "matcher": "apply_patch|Edit|Write",
19
+ "hooks": [
20
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce secret-content codex" }
21
+ ]
22
+ },
23
+ {
24
+ "matcher": "apply_patch|Edit|Write",
25
+ "hooks": [
26
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce tdd-order codex" }
27
+ ]
28
+ },
29
+ {
30
+ "matcher": "apply_patch|Edit|Write",
31
+ "hooks": [
32
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce no-any codex" }
33
+ ]
34
+ },
35
+ {
36
+ "matcher": "apply_patch|Edit|Write",
37
+ "hooks": [
38
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce no-as-cast codex" }
39
+ ]
40
+ },
41
+ {
42
+ "matcher": "apply_patch|Edit|Write",
43
+ "hooks": [
44
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce no-console codex" }
45
+ ]
46
+ },
47
+ {
48
+ "matcher": "apply_patch|Edit|Write",
49
+ "hooks": [
50
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce no-null codex" }
51
+ ]
52
+ },
53
+ {
54
+ "matcher": "apply_patch|Edit|Write",
55
+ "hooks": [
56
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce control-character codex" }
57
+ ]
58
+ },
59
+ {
60
+ "matcher": "apply_patch|Edit|Write",
61
+ "hooks": [
62
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce no-focused-test codex" }
63
+ ]
64
+ },
65
+ {
66
+ "matcher": "apply_patch|Edit|Write",
67
+ "hooks": [
68
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce boundary-direction codex" }
69
+ ]
70
+ },
71
+ {
72
+ "matcher": "apply_patch|Edit|Write",
73
+ "hooks": [
74
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce test-name codex" }
75
+ ]
76
+ },
77
+ {
78
+ "matcher": "apply_patch|Edit|Write",
79
+ "hooks": [
80
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" enforce design-slop codex" }
81
+ ]
82
+ },
83
+ {
84
+ "matcher": "*",
85
+ "hooks": [
86
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" activation codex" }
87
+ ]
88
+ }
89
+ ],
90
+ "PostToolUse": [
91
+ {
92
+ "matcher": "*",
93
+ "hooks": [
94
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle context-continuity codex" }
95
+ ]
96
+ },
97
+ {
98
+ "matcher": "apply_patch|Edit|Write",
99
+ "hooks": [
100
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle format codex" }
101
+ ]
102
+ },
103
+ {
104
+ "matcher": "*",
105
+ "hooks": [
106
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" outcome codex" }
107
+ ]
108
+ }
109
+ ],
110
+ "PreCompact": [
111
+ {
112
+ "hooks": [
113
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle context-continuity codex" }
114
+ ]
115
+ }
116
+ ],
117
+ "SessionStart": [
118
+ {
119
+ "matcher": "startup|resume|clear|compact",
120
+ "hooks": [
121
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle context-continuity codex" }
122
+ ]
123
+ }
124
+ ],
125
+ "UserPromptSubmit": [
126
+ {
127
+ "hooks": [
128
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle context-continuity codex" }
129
+ ]
130
+ },
131
+ {
132
+ "hooks": [
133
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle checkpoint-reminder codex" }
134
+ ]
135
+ }
136
+ ],
137
+ "SessionEnd": [
138
+ {
139
+ "hooks": [
140
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle checkpoint-audit codex" }
141
+ ]
142
+ }
143
+ ],
144
+ "Stop": [
145
+ {
146
+ "hooks": [
147
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" stop codex" }
148
+ ]
149
+ },
150
+ {
151
+ "hooks": [
152
+ { "type": "command", "command": "node \"${VOID_HOOKS_DIR}/_void-hook.mjs\" lifecycle typecheck codex" }
153
+ ]
154
+ }
155
+ ]
156
+ }
157
+ }
@@ -0,0 +1,43 @@
1
+ schemaVersion: 1
2
+ id: core:visual-craft-director
3
+ version: 2
4
+ name: visual-craft-director
5
+ description: Independently reviews rendered UI craft, responsive states, accessibility, and current-diff visual evidence after implementation.
6
+ scope: visual-craft
7
+ independence: fresh-context
8
+ writeAccess: none
9
+ stages: [post-implementation]
10
+ appliesWhen:
11
+ any:
12
+ - ux-ui
13
+ - frontend-change
14
+ - profile-react
15
+ - profile-expo
16
+ inputs:
17
+ - ticket
18
+ - acceptance-criteria
19
+ - design-contract
20
+ - current-diff
21
+ - mobile-screenshots
22
+ - desktop-screenshots
23
+ - state-evidence
24
+ - test-evidence
25
+ outputs:
26
+ - verdict
27
+ - findings
28
+ - evidenceRequests
29
+ - limitations
30
+ budgets:
31
+ contextTokens: 16000
32
+ maxTurns: 3
33
+ failurePolicy: block-on-critical
34
+ instructions: >-
35
+ Own the post-implementation visual-craft verdict in a context distinct from the builder and
36
+ pre-build designer. Review current-diff mobile and desktop captures for every applicable state.
37
+ Score hierarchy, information architecture, interaction states, responsive intent,
38
+ distinctiveness, and accessibility from 0 to 10; any dimension below 8 requires changes.
39
+ Reject generic generated-UI reflexes and ground every finding in a supplied screenshot or
40
+ repository path. Missing browser access, missing viewport or state captures, captures not tied to
41
+ the current diff, or absent behavioral test proof requires a blocked verdict. Do not certify from
42
+ prose or model judgment alone, invent brand identity, edit code, drive the browser, or perform
43
+ architecture, security, and functional QA review.