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,312 @@
1
+ ---
2
+ name: void-functional
3
+ description: Pure-by-default, errors as values (Result<T, E>), discriminated unions for state, immutability defaults, functional core / imperative shell. Side effects at adapters. Use for data flow or state.
4
+ ---
5
+
6
+ # functional — voidcorp craftsman edition
7
+
8
+ The domain decides in pure code. The world translates in adapters. Expected failures are values, not exceptions. Choices are types, not flags. Immutability is the default; mutation earns its place.
9
+
10
+ This is `void-hexagonal-architecture`'s boundary viewed through a different lens — Bernhardt's functional core / imperative shell. Inside the hexagon: pure. At the adapters: effects.
11
+
12
+ **Attribution**: see `.source` in this directory. Foundation: Wlaschin "Domain Modeling Made Functional," Mark Seemann "Code That Fits in Your Head," Bernhardt "Functional Core, Imperative Shell," Khorikov.
13
+
14
+ ---
15
+
16
+ ## Pure by default
17
+
18
+ A function is **pure** if (a) same input → same output, (b) no observable side effects.
19
+
20
+ Most domain logic should be pure. Side effects (DB writes, network calls, logging, time, randomness) live at adapter boundaries — outside the pure core.
21
+
22
+ ### Pure-in-effect
23
+
24
+ An async function that only `await`s injected ports is pure-in-effect: deterministic given the same ports. This is the practical equivalent of pure code in an async TS context.
25
+
26
+ ### Red Flag — side effect inside a "pure" function
27
+
28
+ ```typescript
29
+ function calculateInvoice(order: Order): Invoice {
30
+ const id = randomUUID(); // RED FLAG — impure
31
+ const at = Date.now(); // RED FLAG — impure
32
+ fetch('https://analytics/...'); // RED FLAG — side effect
33
+ return { id, at, ... };
34
+ }
35
+ ```
36
+
37
+ Fix: inject the ports.
38
+
39
+ ```typescript
40
+ function calculateInvoice(
41
+ deps: { ids: IdPort; clock: ClockPort },
42
+ order: Order,
43
+ ): Invoice {
44
+ return { id: deps.ids.newInvoiceId(), at: deps.clock.now(), ... };
45
+ }
46
+ ```
47
+
48
+ Now `calculateInvoice` is pure-in-effect: deterministic given the same `deps`.
49
+
50
+ ---
51
+
52
+ ## Functional Core / Imperative Shell (Bernhardt)
53
+
54
+ All decisions happen in pure code (the "core"). All side effects happen in the "shell" (adapters).
55
+
56
+ ```
57
+ shell (adapters) → core (pure decisions) → shell (effects)
58
+ ```
59
+
60
+ The shell:
61
+ - Reads from outside (HTTP request, DB row, queue message)
62
+ - Calls the core with the relevant input
63
+ - Writes the result back outside (HTTP response, DB write, queue publish)
64
+
65
+ The core:
66
+ - Takes typed input
67
+ - Returns typed output (often `Result<T, E>`)
68
+ - No I/O, no side effects, no time / randomness without an injected port
69
+
70
+ This boundary IS the `void-hexagonal-architecture` boundary. Same line, different framing.
71
+
72
+ ---
73
+
74
+ ## Errors as values — `Result<T, E>`
75
+
76
+ Expected failures (validation error, business rule violation, expected external failure) are values.
77
+
78
+ The standardized shape, published in `@voidcorp/core/result`:
79
+
80
+ ```typescript
81
+ type Result<T, E> =
82
+ | { ok: true; value: T }
83
+ | { ok: false; error: E };
84
+
85
+ export const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
86
+ export const err = <E>(error: E): Result<never, E> => ({ ok: false, error });
87
+
88
+ export function map<T, U, E>(r: Result<T, E>, fn: (t: T) => U): Result<U, E> {
89
+ return r.ok ? ok(fn(r.value)) : r;
90
+ }
91
+
92
+ export function flatMap<T, U, E>(
93
+ r: Result<T, E>,
94
+ fn: (t: T) => Result<U, E>,
95
+ ): Result<U, E> {
96
+ return r.ok ? fn(r.value) : r;
97
+ }
98
+ ```
99
+
100
+ ### Usage
101
+
102
+ ```typescript
103
+ async function checkout(
104
+ deps: CheckoutDeps,
105
+ input: { cartId: CartId },
106
+ ): Promise<Result<OrderConfirmation, CheckoutError>> {
107
+ const cart = await deps.orders.findCartById(input.cartId);
108
+ if (!cart.ok) return cart;
109
+
110
+ const payment = await deps.payment.charge(cart.value.total);
111
+ if (!payment.ok) return err({ kind: 'payment_failed', cause: payment.error });
112
+
113
+ return ok({ orderId: cart.value.id, confirmedAt: deps.clock.now() });
114
+ }
115
+ ```
116
+
117
+ The signature tells the caller everything: the input is what it claims, the output is either the typed success or the typed failure, no exception hidden in the implementation.
118
+
119
+ ### Exceptions for the unexpected
120
+
121
+ Exceptions remain for truly unexpected bugs (DB down, network timeout, invariant violation that should be impossible). Sentry catches them. Domain code does not litter `try/catch` for these.
122
+
123
+ ```typescript
124
+ // expected business failure → Result
125
+ function withdraw(account: Account, amount: Money): Result<Account, InsufficientFundsError>;
126
+
127
+ // unexpected technical failure → throw, let it bubble
128
+ async function chargeWithRetry(stripe: StripeClient, ...): Promise<Charge> {
129
+ // network errors, retries, etc. — exceptions are fine here
130
+ }
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Algebraic Data Types (sum types)
136
+
137
+ A choice with N variants is a discriminated union. Not a flag bag.
138
+
139
+ ```typescript
140
+ type Order =
141
+ | { kind: 'draft'; id: OrderId; items: LineItem[] }
142
+ | { kind: 'submitted'; id: OrderId; items: LineItem[]; submittedAt: IsoDate }
143
+ | { kind: 'confirmed'; id: OrderId; items: LineItem[]; confirmedAt: IsoDate; tableNumber: number }
144
+ | { kind: 'cancelled'; id: OrderId; reason: string; cancelledAt: IsoDate };
145
+
146
+ // transitions are functions on specific variants
147
+ function confirm(
148
+ o: Order & { kind: 'submitted' },
149
+ tableNumber: number,
150
+ now: IsoDate,
151
+ ): Order & { kind: 'confirmed' } {
152
+ return { kind: 'confirmed', id: o.id, items: o.items, confirmedAt: now, tableNumber };
153
+ }
154
+ ```
155
+
156
+ The compiler refuses `confirm(draftOrder, ...)`. State transitions are mechanical, exhaustive switches cover every case. Composes with `void-typescript-strict` exhaustive-switch enforcement and `void-domain-driven-design` aggregate state machines.
157
+
158
+ ---
159
+
160
+ ## Immutability defaults
161
+
162
+ ```typescript
163
+ // preferred
164
+ type User = { readonly id: UserId; readonly email: Email; readonly createdAt: IsoDate };
165
+ const users: readonly User[] = [...];
166
+
167
+ // updates produce new values
168
+ const updated = { ...user, email: newEmail };
169
+ const usersPlusOne = [...users, newUser];
170
+ ```
171
+
172
+ Mutation in place is an exception:
173
+
174
+ - Performance hot paths (large array transforms, with tests proving the win)
175
+ - Builder-style construction inside a private scope (then `return` an immutable result)
176
+
177
+ The companion `void-code-review` flags mutation in domain code without justification.
178
+
179
+ ---
180
+
181
+ ## No `null`
182
+
183
+ `null` duplicates the optionality concept and creates `null | undefined` ambiguity. Banned.
184
+
185
+ Use `T | undefined` with `exactOptionalPropertyTypes` semantics:
186
+
187
+ ```typescript
188
+ type User = { id: UserId; email: Email; nickname?: string };
189
+ // nickname property may be absent OR present (with a value), never explicitly undefined or null
190
+ ```
191
+
192
+ Or `Option<T>` (also in `@voidcorp/core`):
193
+
194
+ ```typescript
195
+ type Option<T> = { kind: 'some'; value: T } | { kind: 'none' };
196
+ ```
197
+
198
+ When to choose:
199
+
200
+ - `T | undefined` for "may not be set yet" / optional configuration / props
201
+ - `Option<T>` for domain optionality where you want to discriminate explicitly (and prevent forgetting to handle the `none` case via exhaustive switch)
202
+
203
+ The companion hook `no-null-grep` warns on `null` literals in domain code.
204
+
205
+ ---
206
+
207
+ ## Composition over inheritance
208
+
209
+ Build behavior by composing functions.
210
+
211
+ ```typescript
212
+ // composition
213
+ const sendWelcomeEmail = pipe(
214
+ buildEmailPayload,
215
+ withWelcomeTemplate,
216
+ withSignature,
217
+ send,
218
+ );
219
+ ```
220
+
221
+ A `pipe` helper is in `@voidcorp/core`:
222
+
223
+ ```typescript
224
+ export function pipe<A>(value: A): A;
225
+ export function pipe<A, B>(value: A, f1: (a: A) => B): B;
226
+ export function pipe<A, B, C>(value: A, f1: (a: A) => B, f2: (b: B) => C): C;
227
+ // ... up to ~10 stages, fully typed
228
+ ```
229
+
230
+ Class hierarchies are an exception with a documented reason (framework integration, React error boundary).
231
+
232
+ ---
233
+
234
+ ## Banned (by default)
235
+
236
+ ### Effect-TS / fp-ts as runtime dependency
237
+
238
+ Rejected as default. Available as opt-in via a future pack when a project needs structured concurrency, layered effects, or rich combinators.
239
+
240
+ ### Haskell-style point-free / monad transformers / `traverse` / `applicative`
241
+
242
+ Reject as default vocabulary. Use plain TS function parameters and the minimal `Result` / `Option` / `pipe` helpers. Consumers reaching for richer combinators adopt fp-ts or Effect-TS as a pack.
243
+
244
+ ### `null`
245
+
246
+ Banned in domain code.
247
+
248
+ ### Throwing for expected domain failures
249
+
250
+ Use `Result<T, E>`. Throw only for the unexpected.
251
+
252
+ ### Currying as default
253
+
254
+ Curry when partial application is actually used at multiple call sites. Otherwise plain multi-arg.
255
+
256
+ ### Side effects inside "pure" functions
257
+
258
+ Inject ports.
259
+
260
+ ---
261
+
262
+ ## Companion hooks
263
+
264
+ - **`no-null-grep`** (pre-commit) — warn on `null` literal in domain code (`config.paths.business`). Tag `// allow-null: <reason>` to suppress.
265
+
266
+ (Most functional rules surface via `void-typescript-strict` enforcement and `void-code-review` flags.)
267
+
268
+ ---
269
+
270
+ ## Composition with other skills
271
+
272
+ - **`void-typescript-strict`**: provides the type machinery (discriminated unions, exhaustive switches, branded types, `satisfies`). This skill says when to use them.
273
+ - **`void-hexagonal-architecture`**: the boundary is the same. Functional core = pure domain inside hex. Imperative shell = adapters at the edge.
274
+ - **`void-domain-driven-design`**: value objects as branded types + smart constructors returning `Result`. Aggregates as discriminated unions for stateful workflows. Always-valid domain.
275
+ - **`void-tdd`**: pure functions are trivially testable. RED writes a property-style or example-based test; GREEN implements pure.
276
+ - **`void-testing`**: pure functions need no mocks. Sociable tests by default.
277
+ - **`void-refactor`**: common moves — Replace Loop with Pipeline, Replace Conditional with Polymorphism (via discriminated-union dispatch), Replace Throw with Result, Extract Pure Function.
278
+ - **`void-security-guidance`**: pure validation at trust boundaries returning `Result<Validated, ValidationError>`.
279
+
280
+ ---
281
+
282
+ ## Anti-rules
283
+
284
+ - MUST NOT impose Effect-TS / fp-ts / monad transformers / point-free style as defaults.
285
+ - MUST NOT decide where the functional / imperative split sits — that is `void-hexagonal-architecture`'s call.
286
+ - MUST NOT decide what an aggregate is — that is `void-domain-driven-design`'s call.
287
+ - MUST NOT decide test ergonomics — that is `void-testing`'s call.
288
+ - MUST NOT silently allow side effects in supposedly-pure functions.
289
+
290
+ ---
291
+
292
+ ## When you are stuck
293
+
294
+ | Problem | Solution |
295
+ |---|---|
296
+ | Should I throw or return Result? | Expected failure (validation, business rule) = Result. Unexpected (DB down) = throw, Sentry catches. |
297
+ | Need time / randomness in pure code | Inject a ClockPort / RandomPort. Configure with a fake in tests. |
298
+ | Discriminated union with 10 variants | Either: smaller domain (the cases are unrelated, separate types), or genuinely a 10-state machine — keep it, but document. |
299
+ | Pipeline becomes 12 stages | Probably mixing concerns. Split into two pipelines, name the intermediate type. |
300
+ | Need point-free for clarity | Try named partial application first. Adopt Effect-TS / fp-ts pack only if multiple use-cases benefit. |
301
+ | Cannot avoid mutation | Confine it to a private scope. Return immutable result. Add a test proving the perf win if performance-driven. |
302
+
303
+ ---
304
+
305
+ ## Final rule
306
+
307
+ ```
308
+ Pure by default. Errors as values. Choices as types. Effects at the boundary.
309
+ Otherwise → it is not voidcorp functional.
310
+ ```
311
+
312
+ The discipline is small. The payoff is exhaustively testable domain code and a typesystem that reflects what is actually true.
@@ -0,0 +1,15 @@
1
+ # Harness metadata for this skill. Not part of the Agent Skills
2
+ # specification, and never copied into a consumer project: the SKILL.md
3
+ # beside it stays portable and validates against the official six fields.
4
+ # Read by this repository's graph, and by the installer for `runtimes`.
5
+ kind: standard
6
+ activation: always
7
+ owner: folpe
8
+ runtimes: [claude, codex]
9
+ enforcement:
10
+ floor: ci
11
+ inline:
12
+ claude: pretooluse
13
+ codex: pretooluse
14
+ hermes: ci-only
15
+ eval_targets: [claude/anthropic/opus]
@@ -0,0 +1,15 @@
1
+ Sources for `void-graph` (see `docs/plans/skill-audits/void-graph.md` for the full audit).
2
+
3
+ Original to void-machine. It wraps this repository's own CLI, so there is no upstream skill to
4
+ distil: the subject did not exist anywhere else.
5
+
6
+ Provenance rather than inspiration: it was a slash command under `packages/core/commands/`,
7
+ shipped there on 2026-06-04 because the plugin carried no in-session ergonomics at the time and a
8
+ skill was not invocable from the keyboard. Claude Code has since merged commands into skills, and
9
+ neither Codex nor Kimi ever had the command format, so the command was Claude-only for a reason
10
+ that had expired. Converted on 2026-08-19, keeping its name and its `allowed-tools`, gaining
11
+ `disable-model-invocation: true` — the gesture is typed by a human, never guessed by the model.
12
+
13
+ Rejected while converting: letting the model invoke it on its own. A health check, an audit or a
14
+ graph report that fires unprompted arrives when nobody asked and nobody acts on it, and it spends
15
+ a screen doing so.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: void-graph
3
+ description: Read the installed harness as a graph and report what is dead, underused or expensive. No argument opens the local live studio; audit, cost and behavior print a terminal report.
4
+ allowed-tools: Bash(void-machine:*) Bash(npx:*)
5
+ ---
6
+
7
+ # void-graph
8
+
9
+ The harness is a graph: skills, agents, hooks, and the edges between them. This reads that graph
10
+ against what actually ran here.
11
+
12
+ **Attribution**: see `.source`.
13
+
14
+ ---
15
+
16
+ ## When it fires
17
+
18
+ Only when a human asks. It answers a question about the harness itself, not about the work in
19
+ progress, and it costs a terminal for as long as someone reads it.
20
+
21
+ ---
22
+
23
+ ## Run it
24
+
25
+ Everything goes through the CLI, which every install has:
26
+
27
+ ```
28
+ void-machine graph audit # dead, dead-hook, underused, low-yield components
29
+ void-machine graph cost # token weight per component
30
+ void-machine graph behavior # what actually fired, against what was declared
31
+ void-machine graph live # local studio, served on localhost, offline
32
+ ```
33
+
34
+ `npx voidmachine graph <sub>` when the binary is not on PATH.
35
+
36
+ For `live`, run it in the background so the session is not blocked, read the
37
+ `serving on http://localhost:<port>` line, and give the human that URL.
38
+
39
+ Everything is local. No npm, no network, no account. The analyzer reads the installed model and
40
+ correlates it with this project's own events under `.void/machine/runs/*/events.jsonl`.
41
+
42
+ > Do not reach for a path inside a plugin directory. The bundled analyzer used to be invoked
43
+ > through the plugin-root variable, which a runtime substitutes for plugin assets only: on a local
44
+ > install it stayed literal and pointed at nothing. The CLI is the one entry point that resolves
45
+ > on every channel and every runtime.
46
+
47
+ ---
48
+
49
+ ## Read it
50
+
51
+ Say what the report flags, and say what the reading can support:
52
+
53
+ - **dead / dead-hook** — declared and never observed. Which is a statement about the observation
54
+ window, not about the component's worth. Give the window.
55
+ - **underused / low-yield** — observed rarely, or observed often for little effect.
56
+ - **expensive** — carries token weight out of proportion to what it returns.
57
+
58
+ Every finding is **advisory**. It is a candidate for trimming or tuning, never an instruction,
59
+ and nothing is applied from here.
60
+
61
+ If the report says the data is insufficient, that is the answer: the activation meter needs
62
+ enough sessions before absence means anything. `--min-sessions 1 --min-events 1` previews on a
63
+ single session and should be labelled as a preview when you show it.
64
+
65
+ ---
66
+
67
+ ## Red flags
68
+
69
+ | Rationalization | Reality |
70
+ |---|---|
71
+ | "It is dead, remove it" | It was not observed in this window. Removal is a human decision, taken with the reason it exists. |
72
+ | "Insufficient data, the command failed" | It reported an absence of evidence, which is a real answer and often the useful one. |
73
+ | "I'll run the bundled .mjs directly, it is faster" | That path only exists under a plugin install. The CLI resolves everywhere. |
74
+
75
+ ---
76
+
77
+ ## Composition
78
+
79
+ Adjacent: `void-audit` proposes what to do about staleness; this shows the shape it sits in.
80
+ Downstream: an accepted trim is filed through `void-learn`.
@@ -0,0 +1,14 @@
1
+ # Harness metadata for this skill. Not part of the Agent Skills
2
+ # specification, and never copied into a consumer project: the SKILL.md
3
+ # beside it stays portable and validates against the official six fields.
4
+ # Read by this repository's graph, and by the installer for `runtimes`.
5
+ kind: action
6
+ owner: folpe
7
+ runtimes: [claude, codex]
8
+ enforcement:
9
+ floor: ci
10
+ inline:
11
+ claude: active
12
+ codex: active
13
+ hermes: ci-only
14
+ eval_targets: [claude/anthropic/opus]
@@ -0,0 +1,12 @@
1
+ Sources for `void-hexagonal-architecture` skill (see `docs/plans/skill-audits/void-hexagonal-architecture.md` for full audit):
2
+
3
+ - Alistair Cockburn "Hexagonal Architecture" 2005 — https://alistair.cockburn.us/hexagonal-architecture/ — original ports + adapters definition
4
+ - Bruno Boucard & Thomas Pierrain workshops/talks — testing strategy at the boundary
5
+ - Herberto Graca "Explicit Architecture" — https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/ — layered hex with use-cases
6
+ - Gary Bernhardt "Functional Core, Imperative Shell" — DCDC 2012 talk — mental model twin of hex
7
+ - Vladimir Khorikov "Enterprise Craftsmanship" — functional / architecture framing
8
+ - citypaul/.dotfiles hex notes — cross-package import enforcement via tsconfig paths
9
+
10
+ Strategy: distill. Reject DI containers, CQRS, mediator, event sourcing as defaults (per docs/PHILOSOPHY.md Wing Chun). Function-parameter injection only.
11
+
12
+ Companion hook: boundary-direction-check (greps domain → infrastructure imports).