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,294 @@
1
+ ---
2
+ name: void-typescript-strict
3
+ description: TS strict baseline. Zero any budget, branded types for domain primitives, discriminated unions over enums, exhaustive switches via never, satisfies over as. Use when editing TypeScript code.
4
+ ---
5
+
6
+ # typescript-strict — voidcorp craftsman edition
7
+
8
+ Types describe truth. The compiler runs first. `any` is banned. `as` is rejected outside narrow exceptions. Domain primitives wear branded types. Discriminated unions model state. Exhaustive switches are verified by `never`. This skill is the language baseline — every other skill composes on top of it.
9
+
10
+ **Attribution**: see `.source` in this directory.
11
+
12
+ ---
13
+
14
+ ## tsconfig baseline (mandatory)
15
+
16
+ Every consumer's `tsconfig.json` extends the void-machine strict baseline, shipped as `tsconfig.strict.json` inside the `@voidcorp/pack-monorepo` pack. The `@voidcorp/*` packs are workspace packages, not yet published to npm — the `extends` below resolves once the pack is installed in the workspace (do not assume a bare npm install resolves it):
17
+
18
+ ```json
19
+ {
20
+ "compilerOptions": {
21
+ "strict": true,
22
+ "noUncheckedIndexedAccess": true,
23
+ "exactOptionalPropertyTypes": true,
24
+ "noImplicitOverride": true,
25
+ "noFallthroughCasesInSwitch": true,
26
+ "useUnknownInCatchVariables": true,
27
+ "verbatimModuleSyntax": true
28
+ }
29
+ }
30
+ ```
31
+
32
+ If a consumer disables any flag, they record the reason through the `void-decide` skill - that is a deliberate ADR, not a casual config tweak.
33
+
34
+ ---
35
+
36
+ ## Zero `any` budget
37
+
38
+ `any` is forbidden in committed code. There is no "just this once."
39
+
40
+ When you need an escape valve, use `unknown` and narrow:
41
+
42
+ ```typescript
43
+ function parsePayload(raw: unknown): UserCommand {
44
+ return userCommandSchema.parse(raw); // Zod narrows + returns the typed value
45
+ }
46
+ ```
47
+
48
+ `unknown` forces narrowing before use. `any` silently propagates everywhere.
49
+
50
+ The companion hook `no-any-grep` blocks commits that introduce `: any` or `as any` outside whitelisted paths (`**/__fixtures__/**`, `**/__tests__/**`). See `../../hooks/no-any-grep.sh`.
51
+
52
+ ---
53
+
54
+ ## `as` cast — rejected by default
55
+
56
+ The `as` cast tells the compiler to trust you. Trust is the bug.
57
+
58
+ Allowed forms (the only ones):
59
+
60
+ - **`as const`** — pin a literal type. Always allowed.
61
+ - **`as unknown`** as a stepping stone to a deliberate narrowing chain. Use sparingly.
62
+ - **`as <Type>` after Zod schema validation** — preferred form: do not need `as` because `schema.parse()` returns the typed value. Use `parse`, not `as`.
63
+
64
+ Banned forms:
65
+
66
+ - `as <Type>` to "fix" a type error
67
+ - `as any` to escape narrowing
68
+ - Chained `as unknown as <Type>` to bypass exhaustive checks
69
+
70
+ The companion hook `no-as-cast-grep` warns (not blocks) on `as <Type>` outside the allowed set — false positives are common, the user confirms.
71
+
72
+ ---
73
+
74
+ ## Prefer `satisfies` over annotation, prefer `parse` over `as`
75
+
76
+ ```typescript
77
+ // preferred: satisfies preserves the literal type AND checks against the constraint
78
+ const config = {
79
+ retries: 3,
80
+ backoffMs: 100,
81
+ } satisfies RetryConfig;
82
+
83
+ // acceptable: annotation widens to the constraint type
84
+ const config: RetryConfig = { retries: 3, backoffMs: 100 };
85
+
86
+ // rejected: as lies if the structure is wrong
87
+ const config = { retries: 3 } as RetryConfig; // BAD — missing field, compiler silent
88
+ ```
89
+
90
+ For validated input, use the schema:
91
+
92
+ ```typescript
93
+ // preferred
94
+ const cmd = userCommandSchema.parse(req.body);
95
+
96
+ // rejected
97
+ const cmd = req.body as UserCommand; // BAD — no runtime guarantee
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Discriminated unions over enums + boolean flags
103
+
104
+ State with N values = discriminated union. Not a flag bag.
105
+
106
+ <Good>
107
+ ```typescript
108
+ type FetchState<T> =
109
+ | { kind: 'idle' }
110
+ | { kind: 'loading' }
111
+ | { kind: 'success'; data: T }
112
+ | { kind: 'error'; error: Error };
113
+ ```
114
+ </Good>
115
+
116
+ <Bad>
117
+ ```typescript
118
+ type FetchState<T> = {
119
+ status: 'idle' | 'loading' | 'success' | 'error';
120
+ data?: T;
121
+ error?: Error;
122
+ }; // BAD — every consumer must check status AND handle optional fields, invariants invisible
123
+ ```
124
+ </Bad>
125
+
126
+ The discriminated form makes invalid states unrepresentable. The compiler narrows automatically inside `if (state.kind === 'success')` blocks.
127
+
128
+ ### No `enum` keyword
129
+
130
+ TypeScript `enum` has known footguns: numeric enums are loose, declaration order matters, runtime emit unlike type aliases. Use `as const` objects + derived union type:
131
+
132
+ ```typescript
133
+ const Status = {
134
+ Pending: 'pending',
135
+ Approved: 'approved',
136
+ Rejected: 'rejected',
137
+ } as const;
138
+ type Status = (typeof Status)[keyof typeof Status];
139
+ ```
140
+
141
+ ESLint rule `@typescript-eslint/no-enum` (configured in `pack-monorepo`) blocks `enum` usage.
142
+
143
+ ---
144
+
145
+ ## Exhaustive switches via `never`
146
+
147
+ Every `switch` over a discriminated union has a `default` branch that proves exhaustiveness:
148
+
149
+ ```typescript
150
+ function render(state: FetchState<User>): JSX.Element {
151
+ switch (state.kind) {
152
+ case 'idle': return <Idle />;
153
+ case 'loading': return <Spinner />;
154
+ case 'success': return <UserCard user={state.data} />;
155
+ case 'error': return <ErrorView error={state.error} />;
156
+ default: {
157
+ const _exhaustive: never = state;
158
+ throw new Error(`Unhandled state: ${JSON.stringify(_exhaustive)}`);
159
+ }
160
+ }
161
+ }
162
+ ```
163
+
164
+ If you later add `{ kind: 'cancelled' }`, the compiler flags the switch — no production drift.
165
+
166
+ ESLint rule `@typescript-eslint/switch-exhaustiveness-check` (configured in `pack-monorepo`) enforces this.
167
+
168
+ ---
169
+
170
+ ## Branded types for domain primitives
171
+
172
+ Raw `string` for things with semantics is the #1 source of "passed the wrong ID" bugs. Brand it.
173
+
174
+ ```typescript
175
+ // in @voidcorp/core/branded
176
+ export type Brand<T, B extends string> = T & { readonly __brand: B };
177
+
178
+ // in your domain
179
+ type UserId = Brand<string, 'UserId'>;
180
+ type OrgId = Brand<string, 'OrgId'>;
181
+ type Email = Brand<string, 'Email'>;
182
+
183
+ // smart constructor
184
+ function createUserId(raw: string): UserId {
185
+ if (!raw.startsWith('usr_')) throw new ValidationError('invalid UserId');
186
+ return raw as UserId; // <-- only allowed `as`: post-validation in the constructor
187
+ }
188
+ ```
189
+
190
+ A function taking `UserId` cannot accept a raw `string`. The compiler refuses. Same shape, different identity.
191
+
192
+ Apply to:
193
+
194
+ - IDs (`UserId`, `OrgId`, `OrderId`, ...)
195
+ - Email, PhoneNumber, IsoDate, IsoDuration
196
+ - Money (`{ amount: number; currency: CurrencyCode }`, with `CurrencyCode` itself branded)
197
+ - Anything that "looks like a string but is not interchangeable"
198
+
199
+ Composes with `void-domain-driven-design` (value objects in DDD terms) and `void-functional` (smart constructors return `Result<UserId, ValidationError>`).
200
+
201
+ ---
202
+
203
+ ## Optional vs undefined — pick the right tool
204
+
205
+ With `exactOptionalPropertyTypes: true`:
206
+
207
+ - `{ name?: string }` means the property may be **absent**, but if present, it is a `string` (not `string | undefined`).
208
+ - `{ name: string | undefined }` means the property is **always present**, possibly `undefined`.
209
+
210
+ These are different. For domain models, prefer present-but-nullable (`name: string | null`) — explicit, no ambiguity between "missing" and "present-but-empty." For DTOs and external schemas, optional is fine.
211
+
212
+ Banned: spreading `{ ...maybeObj }` where `maybeObj` has `undefined` values — `exactOptionalPropertyTypes` complains. Build the object literal explicitly.
213
+
214
+ ---
215
+
216
+ ## `Result<T, E>` for error-as-value (composes with `void-functional`)
217
+
218
+ The `void-functional` skill owns the full rationale. From a types perspective:
219
+
220
+ ```typescript
221
+ type Result<T, E> =
222
+ | { ok: true; value: T }
223
+ | { ok: false; error: E };
224
+ ```
225
+
226
+ This is a discriminated union. The compiler narrows inside `if (result.ok)`. Errors are values, not exceptions for expected failure modes. Exceptions remain for truly unexpected bugs.
227
+
228
+ A function signature `parse(raw: unknown): Result<UserCommand, ValidationError>` tells the caller everything: input is untrusted, output is either a typed command or a typed error. No try/catch hidden semantics.
229
+
230
+ ---
231
+
232
+ ## Hard rules summary
233
+
234
+ - `tsconfig.json` extends `@voidcorp/pack-monorepo/tsconfig.strict.json`
235
+ - Zero `any` in committed code. Use `unknown` and narrow.
236
+ - No `as <Type>` outside the allowed set (`as const`, post-Zod, smart constructors)
237
+ - No `enum` keyword. Use `as const` objects + derived union.
238
+ - Every switch over a union has a `default: never` exhaustiveness check
239
+ - Branded types for IDs / Email / Money / IsoDate / any semantic primitive
240
+ - Prefer `satisfies` over annotation; prefer `schema.parse()` over `as`
241
+ - Respect `exactOptionalPropertyTypes` semantics
242
+
243
+ ---
244
+
245
+ ## Companion hooks
246
+
247
+ - **`tsc-noemit-precommit`** — `tsc --noEmit` must pass before commit. Composed with `pre-commit typecheck+test`.
248
+ - **`no-any-grep`** — blocks `: any` and `as any` in staged diff outside fixtures/tests whitelist.
249
+ - **`no-as-cast-grep`** — warns (not blocks) on `as <Type>` outside the allowed set.
250
+
251
+ See `../../hooks/`.
252
+
253
+ ---
254
+
255
+ ## Composition with other skills
256
+
257
+ - **With `void-functional`**: this skill provides the type machinery (discriminated unions, `Result`, branded primitives); `void-functional` decides WHEN to model with sum types vs records, when to return `Result` vs throw.
258
+ - **With `void-domain-driven-design`**: this skill enforces branded types for domain primitives; DDD decides which entities are aggregates and which are value objects.
259
+ - **With `void-hexagonal-architecture`**: ports are typed interfaces; types travel across boundaries via Zod schemas.
260
+ - **With `void-tdd`**: a RED test using a branded type forces the production code to surface a smart constructor.
261
+ - **With `void-code-review`**: review skill flags untyped IDs, `any` slips, missing `satisfies`.
262
+
263
+ ---
264
+
265
+ ## Anti-rules
266
+
267
+ - MUST NOT decide business logic. Types describe; behavior is elsewhere.
268
+ - MUST NOT decide test strategy. `void-testing` and `void-tdd` own that.
269
+ - MUST NOT decide architecture boundaries. `void-hexagonal-architecture` owns that.
270
+ - MUST NOT decide style. Biome / Prettier owns that.
271
+ - MUST NOT silently allow `any` "just this once."
272
+
273
+ ---
274
+
275
+ ## When you are stuck
276
+
277
+ | Problem | Solution |
278
+ |---|---|
279
+ | Cannot express the type | Use `unknown` + narrow. If still stuck, the design is leaking. |
280
+ | Library has wrong types | Wrap with a typed adapter at the boundary (do not patch with `as`). |
281
+ | Generic too complex | Split. Type-level computation > 3 nesting levels is a smell. |
282
+ | `exactOptionalPropertyTypes` complains on spread | Build the literal explicitly without `undefined` properties. |
283
+ | Need to bypass for a fixture | Use the `**/__fixtures__/**` whitelist + explain in fixture file header. |
284
+
285
+ ---
286
+
287
+ ## Final rule
288
+
289
+ ```
290
+ Every TypeScript file → no any, no rogue as, exhaustive switches, branded domain primitives.
291
+ Otherwise → this is not voidcorp typescript-strict.
292
+ ```
293
+
294
+ The compiler is the first reviewer. If it does not flag a category of bug, this skill exists to make sure you do.
@@ -0,0 +1,17 @@
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
+ triggers:
8
+ extensions: ["ts", "tsx"]
9
+ owner: folpe
10
+ runtimes: [claude, codex]
11
+ enforcement:
12
+ floor: ci
13
+ inline:
14
+ claude: pretooluse
15
+ codex: pretooluse
16
+ hermes: ci-only
17
+ eval_targets: [claude/anthropic/opus]
@@ -0,0 +1,12 @@
1
+ Sources for `void-ui-review` skill (see `docs/plans/skill-audits/void-ui-review.md` for the full distribution matrix):
2
+
3
+ - impeccable (standalone skill, ~/.claude/skills/impeccable/, v3.8.0) — VENDORED (DEV-389): the audit/critique/refine methodology (the AI-slop two-altitude category-reflex test, the register split brand-vs-product, the refine-mode menu polish/bolder/quieter/distill/harden/clarify/layout/typeset). Per Folpe's directive "tout dans le harnais", impeccable's prose value is internalised so the harness does not depend on an external skill. Rejected: its browser-driven command runtime (scripts/, reference/*.md command files, `live` mode, comparison board) — deferred to Vague 4.
4
+ - gstack /design-review (1953 LOC) — VENDORED: the designer's-eye QA (first-impression, squint/blur test, interaction-state coverage, emotional arc). Its live-screenshot driver + atomic-fix loop are deferred to Vague 4; its 80-item audit rubric + A-F slop scoring + slop blacklist went to forge:critique / SLOP-REGISTRY (issues).
5
+ - gstack /design-consultation (1188 LOC) — the DESIGN.md file contract is KEPT (already a harness contract, consumed by frontend-design + pack-nextjs; produced by `impeccable document`/`init` or by hand); its consultation runtime + design-vocabulary rosters went to forge:design-prompt (issues). No consultation skill needed.
6
+ - gstack /design-shotgun (1331 LOC) — the multi-variant + anti-convergence method went to forge:design-prompt (issues); its comparison board is Vague 4.
7
+ - Steve Krug "Don't Make Me Think" — the reading model (scan/satisfice/muddle) went to frontend-design; cited, not pasted.
8
+
9
+ Strategy: distill + split. Build-time craft → frontend-design (enriched, DEV-389); audit-time methodology → this new skill (the ceiling). Mirrors security-guidance/security-audit and plan/plan-review. Browser capture is composed through `void-qa`; the comparison board and .void/SLOP-REGISTRY remain outside this skill.
10
+
11
+ DEV-444 adaptation: the rubric now feeds a fresh-context Visual Craft Director with a six-dimension
12
+ 8/10 floor. Browser/current-diff evidence stays owned by qa; LLM-only certification is rejected.
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: void-ui-review
3
+ description: "Audit and polish an EXISTING UI: the AI-slop test, heuristic critique, technical audit (contrast/a11y/responsive/perf), refine modes. The audit ceiling to frontend-design's build floor."
4
+ ---
5
+
6
+ # ui-review — voidcorp craftsman edition
7
+
8
+ `void-frontend-design` is the build-time floor: the discipline applied while writing UI. This skill is the audit-time ceiling: a deliberate pass over an *existing* interface to find what makes it read as generated, score it, and drive a refine. Invoke it to critique, audit, or polish a UI that already renders.
9
+
10
+ It proposes findings and edits at the component level; it does not rewrite the brand (`DESIGN.md` owns that) and it does not re-teach the build rules (`void-frontend-design` owns those — this skill assumes them and checks against them).
11
+
12
+ **Attribution**: see `.source`. Vendored from `impeccable` (the audit/critique/refine methodology) + gstack `/design-review` (designer's-eye QA) + gstack `/design-consultation`/`/design-shotgun` (the pieces that stayed here; recon/design-prompt went to `forge`). Live browser operation is delegated to `void-qa`.
13
+
14
+ ---
15
+
16
+ ## Classify the register first
17
+
18
+ Judgment differs by register — apply the matching bar:
19
+
20
+ - **Brand** — marketing, landing, campaign, portfolio: *design IS the product*. Boldness, distinctiveness, and a memorable moment are the bar.
21
+ - **Product** — app UI, admin, dashboard, tool: *design SERVES the product*. Clarity, density, and low cognitive load are the bar.
22
+
23
+ Pick by task cue first ("landing page" vs "dashboard"), then the surface in focus, then the `register` field in `PRODUCT.md`/`DESIGN.md`.
24
+
25
+ ## The AI-slop test (the core pass)
26
+
27
+ If someone could look at this and say "AI made that" without doubt, it has failed. Run the **category-reflex check at two altitudes** — the second catches what the first misses:
28
+
29
+ - **First-order** — could someone guess the theme + palette from the *category alone*? (SaaS → blue/violet; fintech → navy/gold; AI tool → cream/sand.) If yes, it is the first training-data reflex. Rework the color strategy and the physical-scene sentence until the answer is not obvious from the domain.
30
+ - **Second-order** — could someone guess the aesthetic family from *category-plus-anti-reference*? ("AI tool that's not SaaS-cream → editorial-typographic"; "fintech that's not navy → terminal dark".) The first reflex was dodged; the second wasn't. Rework until neither answer is obvious.
31
+
32
+ Cross-register slop (the absolute bans — side-stripe, gradient text, glassmorphism, hero-metric, eyebrow-on-every-section, cream/sand body, text overflow) is owned by `void-frontend-design`; flag any that survived into the shipped UI as findings here.
33
+
34
+ ## Critique pass (designer's eye, heuristic)
35
+
36
+ - **First impression** — look for 3 seconds, then look away. What did you retain? Run the **squint test**: blur the screen — does the hierarchy still read, does the primary action still dominate? If everything is equally loud, there is no hierarchy.
37
+ - **Information architecture** — is the primary action singular and the most prominent? Is supporting context recessed, and noise cut?
38
+ - **Interaction-state coverage** — every state the user hits, described as what they *see*: loading, empty, error, success, partial. A missing state is a finding, not a detail.
39
+ - **Emotional arc** — the 5-second / 5-minute / 5-year read: does the first glance earn the second, and does it hold up on the hundredth visit?
40
+ - Score each dimension `N/10 → target`, write the fix, and re-rate. "Design-complete" when every dimension clears the bar for its register.
41
+
42
+ ## Technical audit pass
43
+
44
+ - **Contrast** — body ≥ 4.5:1, large text ≥ 3:1, placeholders held to 4.5:1 (not the muted-gray default). The commonest failure: muted gray on tinted near-white.
45
+ - **Accessibility** — keyboard path, focus order, ARIA, 44px targets (composes with `void-accessibility`).
46
+ - **Responsive** — per-viewport intent; test heading copy at every breakpoint for overflow; mobile-first dual-quality (composes with `void-frontend-design`).
47
+ - **Performance** — LCP budget, no layout-thrash animation, image sizing (composes with the perf tooling).
48
+
49
+ ## Independent post-build verdict
50
+
51
+ For a changed UI, `void-qa` supplies current-diff screenshots and behavioral proof, then
52
+ `core:visual-craft-director` reviews them in a fresh context distinct from the builder and pre-build
53
+ designer. It scores hierarchy, information architecture, interaction states, responsive intent,
54
+ distinctiveness, and accessibility; every dimension must reach 8/10. Missing browser access,
55
+ mobile/desktop or applicable-state captures, current-diff binding, or test proof blocks approval.
56
+ Model judgment alone is never visual certification.
57
+
58
+ ## Refine modes
59
+
60
+ Once findings exist, drive a focused refine rather than a vague "make it better":
61
+
62
+ - `polish` — final pre-ship quality pass · `harden` — errors, i18n, edge/empty states · `distill` — strip to essence.
63
+ - `bolder` — amplify a bland/safe design (brand register) · `quieter` — tone down an overstimulating one · `colorize` — strategic color into a flat UI.
64
+ - `clarify` — UX copy, labels, error messages · `layout` — spacing, rhythm, hierarchy · `typeset` — type hierarchy and fonts.
65
+
66
+ Each is a scoped edit driven by the critique/audit findings, not a rewrite.
67
+
68
+ ## Live browser audit — via `void-qa`
69
+
70
+ The live layer — screenshotting the running UI, driving interactions, checking states in a real browser — is not in this prose skill; the browser home for it is `void-qa` (the claude-in-chrome MCP re-point, DEV-390). When a check needs a running browser, compose `void-qa` (its visual pass invokes this skill's methodology against the live screenshots) rather than reviewing from code alone. The multi-variant comparison board remains out of scope (forge).
71
+
72
+ ## Composition & boundaries
73
+
74
+ - **With `void-frontend-design`** — the build-time floor to this audit ceiling; the bans and build specifics live there, this skill checks against them and does not restate them (no > 30% overlap).
75
+ - **With `core:visual-craft-director`** — this skill supplies the rubric; the specialist supplies the independent post-build verdict over evidence captured by `void-qa`.
76
+ - **With `void-accessibility`** — the a11y audit dimension composes with it.
77
+ - **Not `void-plan-review`'s Design lens** — that judges a *written plan* before any code exists (does the plan name the states, the responsive intent?); this judges the *shipped UI*. Different artifact, different lifecycle stage.
78
+ - **Not `void-devex-audit`** — that audits a shipped dev-facing surface (the API/CLI/SDK/docs journey: naming, errors, TTHW); this audits the visual/interaction UI. Sibling audit skills, different subject.
79
+ - **With `forge`** (voidcorp plugin) — market recon, the 12-dimension scored critique, multi-variant design prompts, and the slop-registry live there; bridged by the `docs/specs/` `source: forge` artifact contract.
80
+ - **Supersedes** the external `impeccable` skill's prose methodology (now harness-native) and gstack `/design-review`/`/design-consultation`/`/design-shotgun`.
81
+
82
+ ## Anti-rules
83
+
84
+ - MUST NOT decide brand identity — `DESIGN.md` owns palette/type/motion.
85
+ - MUST NOT restate `void-frontend-design`'s build rules — assume and check against them.
86
+ - MUST NOT drive a browser or make live requests — compose `void-qa` and review its current-diff evidence.
87
+ - MUST NOT rewrite a UI wholesale under a refine mode — a refine is a scoped, finding-driven edit.
88
+ - MUST NOT vendor the gstack/impeccable runtime (scripts, reference command files, comparison board).
89
+
90
+ ## Final rule
91
+
92
+ ```
93
+ Existing UI → classify register → AI-slop test → critique (squint + states) → technical audit → scoped refine.
94
+ Otherwise → it is not voidcorp ui-review.
95
+ ```
96
+
97
+ Anyone can generate a UI. This skill is what makes ours stop looking generated after it already shipped.
@@ -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: action
6
+ activation: on-demand
7
+ owner: folpe
8
+ runtimes: [claude, codex]
9
+ enforcement:
10
+ floor: ci
11
+ inline:
12
+ claude: active
13
+ codex: active
14
+ hermes: ci-only
15
+ eval_targets: [claude/anthropic/opus]
@@ -0,0 +1,12 @@
1
+ Sources for `void-verify` skill (see `docs/plans/skill-audits/void-verify.md` for full audit):
2
+
3
+ - superpowers/verify — primary (checklist + observation discipline).
4
+ - citypaul/.dotfiles completion checklists — TS-strict checklist items.
5
+ - Atul Gawande "The Checklist Manifesto" — principle that checklists prevent omissions even for experts.
6
+ - NASA Power of Ten (informal "if it cannot fail, document why").
7
+
8
+ - gstack /ship — VENDORED (DEV-388): the Plan-Completion Audit (item-by-item DONE/PARTIAL/NOT-DONE/CHANGED/UNVERIFIABLE, the honesty rule "handling a deliverable is not the deliverable", per-item confirmation for UNVERIFIABLE, scope-drift) + the named-excuse rationalization list. The 12-item checklist verifies the build; this verifies you built what was specified.
9
+
10
+ Strategy: distill. Slim skill. Adapted for void-machine's specific signal set (12 items, each mapped to a skill or hook).
11
+
12
+ No new hooks (composes with all existing).
@@ -0,0 +1,184 @@
1
+ ---
2
+ name: void-verify
3
+ description: Final pre-flight checklist. Twelve items observed (not assumed) — typecheck, tests, hooks, mobile+desktop, commit why, review evidence. Skipping requires reason. Use at end of every task.
4
+ ---
5
+
6
+ # verify — voidcorp craftsman edition
7
+
8
+ "Task complete" claims diverge from reality when they are based on belief, not observation. Tests "passed earlier." Lint "should be clean." The mobile view "is probably fine." This skill is the final pre-flight: a twelve-item checklist, read at the end, each item OBSERVED, skipping documented.
9
+
10
+ **Attribution**: see `.source`. Primary source: superpowers/verify + citypaul completion checklists.
11
+
12
+ ---
13
+
14
+ ## When to run
15
+
16
+ At the end of EVERY task before reporting "done." Even tasks that feel trivial. The checklist for a one-line fix is short; the discipline is the same.
17
+
18
+ If you find yourself wanting to skip the checklist "because it's a small change," that is the signal: run it anyway, the small ones are where it pays the most.
19
+
20
+ ---
21
+
22
+ ## The checklist
23
+
24
+ Read item by item. Do not run from memory. Each item is OBSERVED, not assumed.
25
+
26
+ | # | Item | Composed with |
27
+ |---|---|---|
28
+ | 1 | Typecheck passes (`tsc --noEmit`) | `void-typescript-strict` + `tsc-noemit-precommit` hook |
29
+ | 2 | Tests pass — **observed after last code change** | `void-tdd` + `void-testing` |
30
+ | 3 | Lint passes (Biome) | `pack-monorepo` config |
31
+ | 4 | Coverage acceptable (per `void-tdd` mode strict / souple / exploratory) | `void-tdd` |
32
+ | 5 | Hooks pass (pre-commit dry-run on staged set) | All hooks (`tdd-guard`, `tigerstyle-check`, `no-any-grep`, ...) |
33
+ | 6 | UI changes verified in BOTH mobile and desktop viewports | `void-frontend-design` + `void-accessibility` (mobile-first dual-quality) |
34
+ | 7 | Observability hooks present for new business logic | `void-observability` |
35
+ | 8 | Security review check for any boundary / auth / secret change | `void-security-guidance` + `void-security-audit` |
36
+ | 9 | Documentation updated if any convention changed | `void-commit-discipline` "always say why" |
37
+ | 10 | Commit message includes the why (not just what) | `void-commit-discipline` |
38
+ | 11 | Independent review ran on the final change with no demonstrated blocking defect left open; review evidence block present in PR body (strict mode). A missing citation or explanation alone never fails this item | `void-code-review` |
39
+ | 12 | Spec / plan linked if work derives from one; plan resume point updated | `void-brainstorm` + `void-plan` |
40
+
41
+ Items 6, 7, 8 only fire when the change touches their domain.
42
+
43
+ ---
44
+
45
+ ## Observed, not assumed
46
+
47
+ | Sign | What it means |
48
+ |---|---|
49
+ | "Tests should pass" | NOT observed. Run them again, then check. |
50
+ | "Linting was fine earlier" | Not observed since last change. Re-run. |
51
+ | "Mobile is probably the same" | NOT observed. Screenshot via `void-qa` (claude-in-chrome) on a phone viewport. |
52
+ | "Sentry is set up, so observability is handled" | NOT for this code path. Did you add the breadcrumb? The log? |
53
+ | "The hook ran before, why check" | Did you edit since? If yes, run again. |
54
+
55
+ "Should" and "probably" are the words this skill exists to eliminate. The named excuses (vendored from gstack `/ship`): "should work now" → run it; "I'm confident" → confidence is not evidence; "trivial change" → trivial changes break prod. If code changed since the last run, the last run is stale.
56
+
57
+ ---
58
+
59
+ ## Plan completion audit (vendored from gstack `/ship`)
60
+
61
+ The 12-item checklist verifies *the build works*. This verifies *you built what was specified*. When the work derives from a plan or ticket, classify **every actionable item** against the diff:
62
+
63
+ - `DONE` / `PARTIAL` / `NOT DONE` / `CHANGED` (deliberately deviated) / `UNVERIFIABLE` (cannot be proven from the diff — cross-repo, external state, runtime-only).
64
+ - **Honesty rule**: code that *handles* a deliverable is not the deliverable. "Added the webhook handler" ≠ "the webhook fires end-to-end."
65
+ - **Per-item confirmation for `UNVERIFIABLE`**: surface each one individually and ask — never a single blanket "all done?" over a list you cannot actually verify.
66
+ - **Scope drift**: did you build exactly what was asked? Name every piece of creep ("while I was in there…") and every missing requirement. **Creep is removed, or it carries one line in the commit saying why the change would be wrong without it.** This check was informational for its whole life and caught nothing: naming a creep and shipping it anyway satisfied it. Measured on 2026-08-31, in the session that hardened this very skill — a marker scaffold no gate had asked for, defensible, and nothing would have made anyone say so. Stop when the requirement is satisfied; the smallest sufficient change is the deliverable, not the floor.
67
+
68
+ ---
69
+
70
+ ## Skipping items
71
+
72
+ Items can be skipped, but ONLY with an explicit stated reason in the completion report.
73
+
74
+ ```markdown
75
+ - [x] Item 1: Typecheck passes (observed)
76
+ - [x] Item 2: Tests pass (observed, vitest run, 4/4 passing)
77
+ - [-] Item 6: UI viewports SKIPPED — no UI change in this diff
78
+ - [-] Item 7: Observability SKIPPED — pure refactor (no new business logic)
79
+ - [x] Item 9: Documentation N/A — no convention changed
80
+ - [x] Item 10: Commit message includes why (linked to spec)
81
+ - [x] Item 11: Review evidence block written
82
+ - [x] Item 12: Plan resume point updated (next step: 5)
83
+ ```
84
+
85
+ Silent skipping is the bug class this skill exists to prevent. Explicit skip with reason is fine; explicit skip without reason is not.
86
+
87
+ ---
88
+
89
+ ## Output format
90
+
91
+ When reporting "done," include the checklist with check / skip status and the reason for any skip. The user sees the signals.
92
+
93
+ For multi-step plans (composes with `void-plan`): update the plan's "Resume point" section with the completed step.
94
+
95
+ For PRs (composes with `void-code-review`): the checklist feeds the Review Evidence block — they are not separate work.
96
+
97
+ ---
98
+
99
+ ## Examples
100
+
101
+ ### Small fix
102
+
103
+ ```markdown
104
+ Done. Verification:
105
+
106
+ 1. ✅ Typecheck (observed)
107
+ 2. ✅ Tests pass (vitest run, 1 new test for the bug, all green)
108
+ 3. ✅ Lint passes
109
+ 4. ✅ Coverage holds (line + branch unchanged)
110
+ 5. ✅ Pre-commit hooks (tdd-guard allowed test+fix pair, others green)
111
+ 6. — N/A (no UI)
112
+ 7. — N/A (no new business logic)
113
+ 8. — N/A (no boundary change)
114
+ 9. — N/A (no convention change)
115
+ 10. ✅ Commit messages: `test: reproduce X` + `fix: <root cause>`
116
+ 11. ✅ Review evidence block written (single-blocker resolved, 0 nits)
117
+ 12. ✅ Spec linked (plan N/A — bug fix, no plan)
118
+ ```
119
+
120
+ ### Plan step
121
+
122
+ ```markdown
123
+ Step 4 of plan `2026-06-01-checkout-flow-plan.md` complete. Verification:
124
+
125
+ 1. ✅ Typecheck (observed)
126
+ 2. ✅ Tests pass (vitest run --filter checkoutCart, 6/6 passing, mutation 96%)
127
+ 3. ✅ Lint passes
128
+ 4. ✅ Coverage 100% on services/checkout (strict mode)
129
+ 5. ✅ Pre-commit hooks all pass
130
+ 6. — N/A (use-case layer, not UI)
131
+ 7. ✅ Observability: structured logs added at use-case entry/exit
132
+ 8. ✅ Security: zod validation at boundary, no secret in commit
133
+ 9. ✅ docs/DOMAIN.md updated with "checkout intent" term
134
+ 10. ✅ Commits: test:reproduce / feat:implement / refactor:extract per Two-Hat
135
+ 11. ✅ Review evidence block prepared (waiting for code-review run)
136
+ 12. ✅ Plan resume point updated to Step 5
137
+
138
+ Next: invoke `void-code-review` for the Step 4 commits.
139
+ ```
140
+
141
+ ---
142
+
143
+ ## Composition with other skills
144
+
145
+ - **Runs LAST**, after every other skill.
146
+ - **With `void-tdd`**: items 2, 4 are tdd-mode-aware.
147
+ - **With `void-testing`**: item 2 includes "pristine output."
148
+ - **With `void-typescript-strict`**: item 1.
149
+ - **With `void-code-review`**: item 11 feeds the Review Evidence block.
150
+ - **With `void-commit-discipline`**: items 9, 10.
151
+ - **With `void-plan`**: item 12 — completion updates the plan resume point.
152
+ - **With `void-frontend-design` + `void-accessibility`**: item 6.
153
+ - **With `void-observability`**: item 7.
154
+ - **With `void-security-guidance`**: item 8.
155
+
156
+ ---
157
+
158
+ ## Anti-rules
159
+
160
+ - MUST NOT define what "complete" means functionally — the task defines that.
161
+ - MUST NOT skip items silently.
162
+ - MUST NOT report completion in the middle of work (e.g., "Step 1 done, moving to Step 2" without verifying Step 1).
163
+ - MUST NOT substitute "looks fine" for observed signals.
164
+ - MUST NOT take the user out of the loop — the user sees the signals.
165
+
166
+ ---
167
+
168
+ ## Final rule
169
+
170
+ ```
171
+ Task → all 12 items observed (or skip with stated reason) → user sees the signals → THEN report "done."
172
+ Otherwise → it is not voidcorp completion.
173
+ ```
174
+
175
+ Checklists prevent omissions even for experts. The discipline pays for itself the first time it catches the test that "should have" been run.
176
+
177
+ ## Bounded review evidence
178
+
179
+ Use the review receipt from `void-implement`: exact commit and base, acceptance criteria,
180
+ independent reviewer, conclusions, proofs and blocking-defect resolutions. A mutable worktree
181
+ alone is insufficient. Reuse unaffected evidence after correction and verify the affected
182
+ behavior only; do not trigger another general panel. Native runtime identity absence or refusal
183
+ is an explicit provenance limitation, not an extra certification gate. Actual independence and
184
+ valid evidence remain required. An unresolved blocking defect prevents completion.
@@ -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: action
6
+ activation: always
7
+ owner: folpe
8
+ runtimes: [claude, codex]
9
+ enforcement:
10
+ floor: ci
11
+ inline:
12
+ claude: active
13
+ codex: active
14
+ hermes: ci-only
15
+ eval_targets: [claude/anthropic/opus]
@@ -0,0 +1,11 @@
1
+ Sources:
2
+ - WCAG 2.2: https://www.w3.org/TR/WCAG22/
3
+ - WAI-ARIA Authoring Practices Guide: https://www.w3.org/WAI/ARIA/apg/
4
+ - void-machine accessibility doctrine: packages/core/skills/accessibility/SKILL.md
5
+
6
+ Adapted:
7
+ - Kept WCAG 2.2 AA as the floor plus semantic, keyboard, focus, name, contrast, target, error, motion, and assistive evidence.
8
+ - Requires human-observable interaction evidence where static analysis cannot prove behavior.
9
+
10
+ Rejected:
11
+ - Static-tool-only certification, visual-taste review, product-flow ownership, and implementation authority.