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