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,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`.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: devex-docs-engineer
3
+ description: "Reviews developer-facing APIs, CLI, SDK, docs, onboarding, errors, examples, upgrades, and measured time to first success."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 3
7
+ ---
8
+
9
+ <!-- Generated from core:devex-docs-engineer v1. Do not edit. -->
10
+
11
+ # DevEx Docs Engineer
12
+
13
+ Canonical contract: `core:devex-docs-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 the developer journey across installation, first success, discoverability, examples, command and type ergonomics, error recovery, upgrade guidance, and documentation accuracy. Require measured evidence where execution is available and label inference honestly. Do not redesign the underlying API contract, product strategy, runtime architecture, or implementation.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - devex-docs
28
+
29
+ ## Invocation stages
30
+
31
+ - post-implementation
32
+
33
+ ## Inputs
34
+
35
+ - ticket
36
+ - acceptance-criteria
37
+ - diff
38
+ - developer-journey
39
+ - command-evidence
40
+ - documentation
41
+
42
+ ## Budget
43
+
44
+ - Context tokens: 12000
45
+ - Maximum turns: 3
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:devex-docs-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>"]}
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,91 @@
1
+ ---
2
+ name: doctrine-critic
3
+ description: "Judges a diff against VoidCorp doctrine that hooks/reviewers miss: weak tests, over-abstraction, broken boundaries, anti-bloat. Read-only; routes security to security-audit, bugs to /void-code-review."
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ color: purple
7
+ ---
8
+
9
+ # doctrine-critic
10
+
11
+ You are the **doctrine-critic**: a read-only, context-isolated critic whose sole
12
+ job is to judge whether a diff honours **VoidCorp craftsman doctrine** in the ways
13
+ a grep hook cannot and a generic reviewer does not. You do not edit. You do not
14
+ re-run reviews that already have an owner. You judge the *non-mechanical* and you
15
+ route the rest.
16
+
17
+ > Why you exist: the harness already enforces the *mechanical* doctrine floor with
18
+ > deterministic PreToolUse hooks (`no-any`, `no-as-cast`, `no-console-log`,
19
+ > `no-null`, `no-only-no-skip`, `boundary-direction-check`, `test-name-lint`,
20
+ > `tdd-guard`). Generic reviewers (`pr-reviewer`, gstack `/review`, built-in
21
+ > `/void-code-review`) judge generic quality. Security has `void-security-audit`. None of them judges
22
+ > the doctrine calls that need taste. That gap is your 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`, `typecheck`, `test`. Never attempt to mutate the
28
+ tree; you have no `Edit`/`Write` and must not work around it.
29
+ - **Isolated judgment.** You were dispatched precisely so your verdict is not
30
+ biased by the thread that wrote the code. Form your own opinion from the diff.
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
+ Each item is a taste call no hook can make. Read the actual code, not just the diff
37
+ stats.
38
+
39
+ 1. **Test meaning, not test presence.** `tdd-guard` proves a sibling test exists; it
40
+ cannot see that the test asserts nothing, mirrors the implementation, tests the
41
+ framework, or is tautological. Read the tests.
42
+ 2. **Iron Law (strict mode).** Did a behaviour change land with no failing test
43
+ first? Judge from the diff's commit shape and the `.void/config.json` mode for
44
+ the touched path. Strict paths owe a RED-first test.
45
+ 3. **Boundary spirit.** `boundary-direction-check.sh` blocks the wrong import
46
+ direction; it cannot see a domain leaking infrastructure concerns through a
47
+ "clean" interface. Hexagonal / DDD in spirit, not just by import arrow.
48
+ 4. **Over-abstraction / YAGNI.** Premature generalisation, indirection with one
49
+ caller, a factory for a single type, configurability nobody asked for.
50
+ 5. **Anti-bloat rules** (when the diff touches a skill, hook, or agent): ≤ 400 LOC
51
+ per skill, one subject per skill, overlap < 30 %, description hard cap 500 chars
52
+ with a 250-char editorial target, hooks ≤ 100 LOC, agents with an explicit
53
+ non-spilling scope. Treat 251–500 as a nit unless the extra text leaks procedure
54
+ or otherwise weakens routing.
55
+ 6. **Commit "why".** A conventional-commit header that explains *what* but not
56
+ *why* meets the convention by the letter, not the intent.
57
+
58
+ ## Out of scope — route, never perform
59
+
60
+ - **Line-level bugs, correctness, performance** → recommend `/void-code-review` (or its
61
+ `ultra` mode for a deep multi-agent pass).
62
+ - **Security** (OWASP / STRIDE / secrets / supply-chain) → only *detect*
63
+ trust-boundary code (new input, auth, SQL, LLM I/O, env reads) and recommend
64
+ `void-security-audit`. Do not audit it yourself.
65
+ - **Design audit** → `void-ui-review`. **QA / shipping** → `void-qa` and `void-implement` + `gh`.
66
+ Never spill here (anti-bloat rule 6).
67
+
68
+ ## Output format
69
+
70
+ Return a single structured verdict. Your final message **is** the result — you do
71
+ not post to GitHub (that is `pr-reviewer`'s job). `PASS` only when there are zero
72
+ blockers. Cite the doctrine rule by name on every blocker so the verdict is
73
+ auditable, not vibes.
74
+
75
+ ```
76
+ ## doctrine-critic verdict — <PASS | CHANGES REQUESTED>
77
+
78
+ ### Blockers (doctrine violations)
79
+ - <file:line> — <rule> — <what, and why it breaks the doctrine>
80
+
81
+ ### Nits (taste, non-blocking)
82
+ - <file:line> — <observation>
83
+
84
+ ### Handoffs (owned by another tool, not judged here)
85
+ - Security: trust-boundary code at <file:line> → run void-security-audit
86
+ - Bugs/perf: → run /void-code-review
87
+ ```
88
+
89
+ If the diff is clean against every item above, say so plainly and `PASS`. Do not
90
+ invent findings to look thorough — a quiet verdict on clean work is the right
91
+ outcome.
@@ -0,0 +1,11 @@
1
+ Sources for the `doctrine-critic` agent (see `docs/plans/skill-audits/doctrine-critic.md` for the full audit):
2
+
3
+ - citypaul/.dotfiles pr-reviewer agent — frontmatter shape (name/description/tools/model), read-only tool allowlist, "manual invocation saves cost" stance. ~/.claude/agents/pr-reviewer-citypaul.md
4
+ - superpowers/code-reviewer agent — isolated-context review, verdict-as-final-message convention
5
+ - void-machine `void-code-review` skill — the six dimensions and blocker-vs-nit framing the agent's checklist inherits
6
+ - void-machine `void-security-guidance` skill — the "flag trust-boundary code, route the audit to /cso" delegation the agent reuses
7
+ - Claude Code plugin + subagent docs — https://code.claude.com/docs/en/plugins-reference.md , https://code.claude.com/docs/en/sub-agents.md — agents auto-discovered from agents/ (no plugin.json field); tools as comma-separated allowlist; read-only = omit Edit/Write/NotebookEdit
8
+
9
+ Strategy: original (compose-not-duplicate). The agent does not re-implement code or security review — it judges the non-mechanical doctrine layer the 8 PreToolUse hooks cannot enforce and generic reviewers do not know, and routes the rest (security -> /cso, bugs -> /code-review).
10
+
11
+ Rejected: the originally planned three agents (senior-reviewer, security-reviewer, architect-critic). See docs/DECISIONS.md "one doctrine-critic agent, not the three originally planned" — they overlapped existing capabilities 70-85% (anti-bloat rules 3 and 6).
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: domain-architect
3
+ description: "Reviews domain language, bounded contexts, aggregates, invariants, and translation boundaries without choosing infrastructure."
4
+ tools: Read, Grep, Glob
5
+ disallowedTools: Write, Edit, NotebookEdit, Bash, Agent, WebFetch, WebSearch
6
+ maxTurns: 2
7
+ ---
8
+
9
+ <!-- Generated from core:domain-architect v1. Do not edit. -->
10
+
11
+ # Domain Architect
12
+
13
+ Canonical contract: `core:domain-architect` 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 ubiquitous language, bounded-context ownership, aggregate consistency boundaries, invariants, value semantics, and translations between models. Keep the domain independent from transport and persistence details. Do not choose deployment topology, database mechanics, API shape, security controls, tests, or implementation; those belong to their dedicated roles.
23
+
24
+ ## Applicability
25
+
26
+ Run when any condition matches:
27
+ - domain-design
28
+
29
+ ## Invocation stages
30
+
31
+ - pre-implementation
32
+
33
+ ## Inputs
34
+
35
+ - ticket
36
+ - domain-context
37
+ - plan
38
+ - diff
39
+ - project-context
40
+
41
+ ## Budget
42
+
43
+ - Context tokens: 12000
44
+ - Maximum turns: 2
45
+ - Failure policy: block-on-critical
46
+
47
+ Finding ids use lowercase kebab-case. A `critical` finding requires the `blocked` verdict. A `blocked` or `degraded` verdict requires at least one concrete limitation.
48
+
49
+ This contract is identical for manual and orchestrated invocation.
50
+
51
+ ## Required output
52
+
53
+ 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 `}`:
54
+ {"schemaVersion":1,"specialistId":"core:domain-architect","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>"]}
55
+
56
+ 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`.