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,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-tdd
|
|
3
|
+
description: TDD in three modes (strict/souple/exploratory) chosen by path. Iron Law in strict (no prod code without a failing test), mutation gate if tooled, anti-rustine. Use for any feature, bugfix, refactor.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tdd — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
Curated aggregate of the best TDD practices for the TypeScript/web stack 2026. Ported from the DECLIK `void-tdd` skill (377 LOC, already top-5%), adapted to be stack-agnostic via `.void/config.json`.
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source` in this directory. Primary sources: DECLIK port (which itself distills superpowers/test-driven-development + citypaul/tdd + nizos/tdd-guard). This skill **does not reinvent**; it composes at the right level for void-machine consumers.
|
|
11
|
+
|
|
12
|
+
The companion hook `tdd-guard` (see `../../hooks/tdd-guard.sh`) materializes the structural floor at the Edit/Write level: a sibling test file or an explicitly declared E2E test file MUST exist before governed production code is edited. It does not run the suite, so the failing-first (RED) step stays the engineer's discipline.
|
|
13
|
+
|
|
14
|
+
For E2E coverage, put `// tdd-cover: e2e tests/e2e/route.spec.ts` on the production
|
|
15
|
+
file's first line. The literal project-relative path must name an existing regular
|
|
16
|
+
`.test`/`.spec` JS/TS file inside the physical project root. One valid declaration
|
|
17
|
+
satisfies the structural floor; malformed, misplaced or conflicting declarations
|
|
18
|
+
refuse. It does not prove the route is covered or the suite passed. Keep real
|
|
19
|
+
test evidence, and never use exploratory mode to mean "tested elsewhere".
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Modes
|
|
24
|
+
|
|
25
|
+
Three postures, chosen by context. If unsure of the mode, ask explicitly before coding.
|
|
26
|
+
|
|
27
|
+
| Mode | When | Posture |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| **strict** | New behavior on production code, hotfix on paying surface, refactor that changes observable behavior, DB integration that affects business invariants | Iron Law (zero line of production code without a failing test that requested it) + mutation testing when the project has a mutation runner + 100% coverage + commit/PR evidence trail |
|
|
30
|
+
| **souple** | Integration glue tested at a higher level (E2E + handler covers the chain), framework wiring, config | RED-GREEN-REFACTOR without mutation gate, ≥ 80% coverage on business code, no commit-by-phase ritual |
|
|
31
|
+
| **exploratory** | Documented spike, throwaway POC, scripts marked as such, draft work | No TDD obligation. The file MUST declare throwaway status + deletion date in a header comment. If the code survives the spike, it transitions to strict before merging to prod. |
|
|
32
|
+
|
|
33
|
+
### Auto-detection heuristic
|
|
34
|
+
|
|
35
|
+
If no explicit `Mode:` marker is in the task or a file header comment, apply:
|
|
36
|
+
|
|
37
|
+
- Path matches `<config.paths.business>` and not in `<config.paths.spikes>` nor in `docs/` → **strict**
|
|
38
|
+
- Path matches `<config.paths.spikes>`, draft folder, or scaffolds → **exploratory**
|
|
39
|
+
- Path matches `<config.paths.serverActions>` (boundary HTTP / Server Action) AND the pure logic is in `services/` with strict tests → **souple** on the handler, **strict** on the service
|
|
40
|
+
- Otherwise → **souple** + ask confirmation if in doubt
|
|
41
|
+
|
|
42
|
+
Paths come from `voidcorp.config.json`. Defaults are documented in `packages/core/claude/skills/void-tdd/defaults.md`.
|
|
43
|
+
|
|
44
|
+
### Override
|
|
45
|
+
|
|
46
|
+
The user can impose a mode via:
|
|
47
|
+
|
|
48
|
+
- Prompt marker: "implement X in strict mode" / "spike in exploratory mode"
|
|
49
|
+
- File header comment: `// tdd-mode: strict`
|
|
50
|
+
- Repo-wide: `.void/config.json` → `{ "modes": { "tdd": "strict" } }`
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Iron Law (strict only)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
ZERO LINE OF PRODUCTION CODE WITHOUT A FAILING TEST THAT REQUESTED IT.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**No exception without explicit permission.** Keep the spirit AND the letter — violating one violates both.
|
|
61
|
+
|
|
62
|
+
### If you wrote code before the test (strict)
|
|
63
|
+
|
|
64
|
+
- You **delete** it. Delete means delete.
|
|
65
|
+
- Do not keep anything "as reference"
|
|
66
|
+
- Do not "adapt" existing code while writing the tests
|
|
67
|
+
- Do not look at the deleted code while re-implementing
|
|
68
|
+
- Implement fresh from the tests
|
|
69
|
+
|
|
70
|
+
Sunk-cost fallacy: the time is already lost. Keeping unverified code is technical debt, not an asset.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Cycle
|
|
75
|
+
|
|
76
|
+
### Strict mode
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
RED → Verify RED → GREEN → Verify GREEN → [MUTATE → KILL MUTANTS] → REFACTOR
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The bracketed steps run only when the project has a mutation runner (see MUTATE below).
|
|
83
|
+
|
|
84
|
+
### Souple mode
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
RED → GREEN → REFACTOR (if it has value)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Exploratory mode
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Code → [does the demo prove the idea?] → either transition to strict before merge, or delete.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### RED — write the failing test
|
|
97
|
+
|
|
98
|
+
One thing tested, a name that states the behavior, real code — assert on the observable
|
|
99
|
+
outcome, never on a mock's call count (that tests the mock, not the behavior). Mocks live
|
|
100
|
+
only at infrastructure boundaries. The full technique (how to express the test, factories,
|
|
101
|
+
mocking policy) is the `void-testing` skill's job; TDD owns only *when* and *that* it fails first.
|
|
102
|
+
|
|
103
|
+
Before finalizing the test, scan the mutator rules (boundaries, boolean combinations, equality, arithmetic identities, array/string ops, optional chaining, side effects). This scan needs no tooling and no runner: it is how you write a test that a mutant could not survive, whether or not the project can actually run one.
|
|
104
|
+
|
|
105
|
+
### Verify RED — watch it fail
|
|
106
|
+
|
|
107
|
+
**Strict: mandatory. Never skip.**
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
<config.commands.testUnit> path/to/file.test.ts
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Confirm:
|
|
114
|
+
|
|
115
|
+
- Test fails (not a syntax error)
|
|
116
|
+
- The failure message matches what you expect
|
|
117
|
+
- Fails because the feature is missing, not because of a typo
|
|
118
|
+
|
|
119
|
+
### GREEN — minimal code
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
async function retryOperation<T>(fn: () => Promise<T>): Promise<T> {
|
|
123
|
+
for (let i = 0; i < 3; i++) {
|
|
124
|
+
try { return await fn(); }
|
|
125
|
+
catch (e) { if (i === 2) throw e; }
|
|
126
|
+
}
|
|
127
|
+
throw new Error('unreachable');
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**No more.** No speculative configuration options. No refactor during GREEN.
|
|
132
|
+
|
|
133
|
+
### Verify GREEN
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
<config.commands.testUnit> path/to/file.test.ts
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Confirm:
|
|
140
|
+
|
|
141
|
+
- Test passes
|
|
142
|
+
- Other tests still pass
|
|
143
|
+
- Pristine output (no warnings, no errors)
|
|
144
|
+
|
|
145
|
+
### MUTATE (strict, only when a mutation runner is present)
|
|
146
|
+
|
|
147
|
+
The harness ships no mutation runner and installs none. `init` detects Stryker in the project's
|
|
148
|
+
dependencies and writes `commands.mutation` into `.void/config.json` only on that signal, so the
|
|
149
|
+
presence of that key *is* the capability check.
|
|
150
|
+
|
|
151
|
+
- Key present → run `<config.commands.mutation> --mutate <path>`, produce a killed/survived/score
|
|
152
|
+
report, and treat the gate as mandatory in strict.
|
|
153
|
+
- Key absent → the gate does not apply. Never invent a `stryker` command and never block the cycle
|
|
154
|
+
on it; the mutator scan at RED carries the intent instead. Adopting a runner is a project
|
|
155
|
+
decision, not something this skill performs.
|
|
156
|
+
|
|
157
|
+
### KILL MUTANTS (strict, when MUTATE ran)
|
|
158
|
+
|
|
159
|
+
For each survivor:
|
|
160
|
+
|
|
161
|
+
- If the case value is clear → add a test
|
|
162
|
+
- If ambiguous (business judgment) → ask the user via AskUserQuestion before patching
|
|
163
|
+
|
|
164
|
+
All tests must pass after fix.
|
|
165
|
+
|
|
166
|
+
### REFACTOR
|
|
167
|
+
|
|
168
|
+
After GREEN (and after MUTATE/KILL in strict), assess the improvements.
|
|
169
|
+
|
|
170
|
+
| Priority | Action | Examples |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| Critical | Now | Knowledge duplication, > 3 nesting levels, critical surviving mutations |
|
|
173
|
+
| High | This session | Magic numbers, unclear names, functions > 30 lines |
|
|
174
|
+
| Nice | Later | Minor renames, single-use helpers |
|
|
175
|
+
| Skip | Do not touch | Already clean code |
|
|
176
|
+
|
|
177
|
+
Tests must stay green at every step.
|
|
178
|
+
|
|
179
|
+
Load the `void-refactor` skill for the detailed methodology (RED-GREEN-REFACTOR strict commit boundaries).
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Stack glue
|
|
184
|
+
|
|
185
|
+
### Commands (read from `voidcorp.config.json`)
|
|
186
|
+
|
|
187
|
+
- Unit: `<config.commands.testUnit>` (e.g. `bunx vitest run`, `pnpm vitest`, `npm test`)
|
|
188
|
+
- E2E: `<config.commands.testE2e>` (e.g. `bunx playwright test`)
|
|
189
|
+
- Mutation: `<config.commands.mutation>` (e.g. `bunx stryker run`) — absent when no mutation runner is detected
|
|
190
|
+
- Watch: `<config.commands.testWatch>` (e.g. `bunx vitest --watch`)
|
|
191
|
+
|
|
192
|
+
### Conventions
|
|
193
|
+
|
|
194
|
+
- Test files: `Name.test.ts` co-located with the source file
|
|
195
|
+
- Real-I/O integration tests: `Name.integration.test.ts`
|
|
196
|
+
- E2E Playwright: `<config.paths.e2e>` (e.g. `apps/*/tests/e2e/*.spec.ts`)
|
|
197
|
+
|
|
198
|
+
See the `void-testing` skill for the full technique catalog (factories over `beforeEach`, fixture externalization, behavior-first naming, snapshot policy).
|
|
199
|
+
|
|
200
|
+
### Schema contracts at trust boundaries
|
|
201
|
+
|
|
202
|
+
If you touch a schema in `<config.paths.contracts>` (Zod schemas at trust boundaries):
|
|
203
|
+
|
|
204
|
+
1. RED: add a `parse()` case that should fail (invalid data) or succeed (valid data)
|
|
205
|
+
2. GREEN: modify the schema
|
|
206
|
+
3. Verify: every downstream call site that consumes this type must compile AND pass its tests
|
|
207
|
+
|
|
208
|
+
The contract is the **single source of truth**, never redefined in tests.
|
|
209
|
+
|
|
210
|
+
### Frontend behavior (strict)
|
|
211
|
+
|
|
212
|
+
For a UI change, RED lives at the smallest observable surface: component, hook, store, accessibility
|
|
213
|
+
contract, or rendered state. Cover every applicable loading/empty/error/success/partial state named
|
|
214
|
+
by the pre-build experience brief. An interactive control needs a role-first keyboard regression
|
|
215
|
+
test before any E2E proof; E2E may confirm the journey but cannot be the first place a keyboard bug
|
|
216
|
+
is caught. Record passing test evidence against the current diff hash so a later UI edit invalidates
|
|
217
|
+
the proof instead of inheriting green.
|
|
218
|
+
|
|
219
|
+
### Anti-pattern detected too often
|
|
220
|
+
|
|
221
|
+
Mocking the DB or Server Actions to make a test pass: it breaks at the next refactor without
|
|
222
|
+
protecting anything. Prefer integration tests (pglite / dev DB branch) or invoking the action
|
|
223
|
+
directly. Full anti-mock-business rationale: the `void-testing` skill.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Coverage (strict)
|
|
228
|
+
|
|
229
|
+
100% by default on the business layer (services + domain). Verification before PR approval:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
<config.commands.testUnit> --coverage
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Target reading:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
All files | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
239
|
+
----------|---------|----------|---------|---------|---
|
|
240
|
+
All files | 100 | 100 | 100 | 100 |
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Exception
|
|
244
|
+
|
|
245
|
+
If 100% is impossible (e.g. a Sentry wrapper whose init branch is not testable without an HTTP cassette):
|
|
246
|
+
|
|
247
|
+
1. Document in the package README: why + where the missing coverage is compensated (integration/E2E)
|
|
248
|
+
2. Explicit Folpe approval
|
|
249
|
+
3. List in repo CLAUDE.md under "Test coverage exceptions"
|
|
250
|
+
|
|
251
|
+
Burden of proof on the requester. 100% remains the default.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## TDD Evidence (strict)
|
|
256
|
+
|
|
257
|
+
The commit history must show the RED → GREEN → [MUTATE → KILL] → REFACTOR progression.
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
abc123 test: add failing test for retryOperation backoff
|
|
261
|
+
def456 feat: implement retryOperation exponential backoff
|
|
262
|
+
ghi789 test: strengthen boundary tests post-mutation (kills 3 survivors)
|
|
263
|
+
jkl012 refactor: extract backoff helper for clarity
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Documented exceptions
|
|
267
|
+
|
|
268
|
+
If evidence is not linear (multi-session, grouped refactor, context resume), document in the PR:
|
|
269
|
+
|
|
270
|
+
```markdown
|
|
271
|
+
## TDD Evidence
|
|
272
|
+
|
|
273
|
+
RED phase: commit c925187
|
|
274
|
+
GREEN phase: commits 5e0055b, 9a246d0
|
|
275
|
+
MUTATE + KILL: commit 7b8c9d0
|
|
276
|
+
REFACTOR: commit 11dbd1a
|
|
277
|
+
|
|
278
|
+
Test Evidence:
|
|
279
|
+
- 4/4 tests passing (vitest run, 7.7s)
|
|
280
|
+
- Mutation score: 94% (3/52 documented survivors)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Exception on the evidence presentation, **never on the process**.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Anti-rustine integrated
|
|
288
|
+
|
|
289
|
+
If you are tempted to:
|
|
290
|
+
|
|
291
|
+
- Skip TDD "just this once"
|
|
292
|
+
- Mock everything to "make the test pass"
|
|
293
|
+
- Cast `as any` to avoid real modeling
|
|
294
|
+
- Add a test after the fact that passes immediately
|
|
295
|
+
|
|
296
|
+
→ Stop signal. Redesign the approach. Source: project-level "no rustine" rule.
|
|
297
|
+
|
|
298
|
+
A test that is hard to write = a design that is hard to use. The test is the API oracle.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Red Flags (strict)
|
|
303
|
+
|
|
304
|
+
Source: superpowers/test-driven-development. Keep the full list — this is the anti-drift psychology.
|
|
305
|
+
|
|
306
|
+
- Code written before the test
|
|
307
|
+
- Test written after the implementation
|
|
308
|
+
- Test that passes immediately
|
|
309
|
+
- Cannot explain why the test failed
|
|
310
|
+
- Tests added "later"
|
|
311
|
+
- Rationalization "just this once"
|
|
312
|
+
- "I already tested it manually"
|
|
313
|
+
- "Tests after reach the same goal"
|
|
314
|
+
- "It is the spirit, not the ritual"
|
|
315
|
+
- "Keep as reference" / "adapt the existing code"
|
|
316
|
+
- "I already spent X hours, deleting is a waste"
|
|
317
|
+
- "TDD is dogmatic, I am pragmatic"
|
|
318
|
+
- "This case is different because..."
|
|
319
|
+
|
|
320
|
+
→ **All these phrases mean: delete, start over in strict.**
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Common Rationalizations
|
|
325
|
+
|
|
326
|
+
| Excuse | Reality |
|
|
327
|
+
|---|---|
|
|
328
|
+
| "Too simple to test" | Simple code breaks. The test takes 30 seconds. |
|
|
329
|
+
| "I test afterward" | Tests that pass immediately prove nothing. |
|
|
330
|
+
| "Tests after reach the same goal" | After-tests answer "what does this code do." Before-tests answer "what should this code do." |
|
|
331
|
+
| "I tested it manually" | Manual ≠ systematic. No trace, not re-executable. |
|
|
332
|
+
| "X hours of work to delete = waste" | Sunk-cost fallacy. Keeping unverified code is debt. |
|
|
333
|
+
| "Keep as reference, write tests first" | You will adapt it. That is testing-after. Delete = delete. |
|
|
334
|
+
| "Need to explore first" | OK. Throw away the exploration, restart in strict. |
|
|
335
|
+
| "Hard to test = design not clear" | Listen to the test. Hard to test = hard to use. |
|
|
336
|
+
| "TDD will slow me down" | TDD is faster than debugging in prod. Pragmatic = test-first. |
|
|
337
|
+
| "Manual is faster" | Manual does not prove edge cases. You will re-test on every change. |
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Verification checklist
|
|
342
|
+
|
|
343
|
+
Before marking the work complete:
|
|
344
|
+
|
|
345
|
+
- [ ] TDD mode identified at start (strict / souple / exploratory)
|
|
346
|
+
- [ ] Every line of production code has a test that requested it (strict)
|
|
347
|
+
- [ ] Watched every test fail before impl (strict)
|
|
348
|
+
- [ ] Every test fails for the right reason (feature missing, not typo)
|
|
349
|
+
- [ ] Minimal code to pass each test
|
|
350
|
+
- [ ] All tests pass
|
|
351
|
+
- [ ] Pristine output (no warnings, no errors)
|
|
352
|
+
- [ ] Tests use real code (mocks only where unavoidable)
|
|
353
|
+
- [ ] Edge cases and errors covered
|
|
354
|
+
- [ ] Mutation testing run + survivors handled (strict, when `commands.mutation` exists)
|
|
355
|
+
- [ ] Coverage verified 100% or exception documented (strict)
|
|
356
|
+
- [ ] Commit history shows TDD evidence or documented exception (strict)
|
|
357
|
+
- [ ] Refactor evaluated and applied where it has value (all Critical/High priorities addressed)
|
|
358
|
+
|
|
359
|
+
Cannot check every box in strict? You skipped TDD. Restart.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## When you are stuck
|
|
364
|
+
|
|
365
|
+
| Problem | Solution |
|
|
366
|
+
|---|---|
|
|
367
|
+
| Do not know how to test | Write the desired signature. Write the assertion first. Ask the user. |
|
|
368
|
+
| Test too complex | Design too complex. Simplify the API. |
|
|
369
|
+
| Must mock everything | Code too coupled. Use parameter injection (see `void-hexagonal-architecture` skill). |
|
|
370
|
+
| Huge test setup | Extract helpers. Still complex? Rethink the design. |
|
|
371
|
+
| Mode not obvious | Ask the user. Default to souple > strict when in doubt. |
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Debugging integration
|
|
376
|
+
|
|
377
|
+
Bug found? **Write a failing test that reproduces it before any fix.** Follow the TDD cycle of the applicable mode. The test proves the fix and prevents the regression.
|
|
378
|
+
|
|
379
|
+
Never fix a bug without a reproducing test.
|
|
380
|
+
|
|
381
|
+
See the `void-debug` skill for the upstream root-cause discipline.
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Final rule
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
Production code → a test exists and failed first (strict)
|
|
389
|
+
→ a test exists (souple)
|
|
390
|
+
→ the code is marked as throwaway (exploratory)
|
|
391
|
+
Otherwise → this is not voidcorp tdd.
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
No exception without explicit permission from the human partner.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Harness metadata for this skill. Not part of the Agent Skills
|
|
2
|
+
# specification, and never copied into a consumer project: the SKILL.md
|
|
3
|
+
# beside it stays portable and validates against the official six fields.
|
|
4
|
+
# Read by this repository's graph, and by the installer for `runtimes`.
|
|
5
|
+
kind: standard
|
|
6
|
+
activation: always
|
|
7
|
+
owner: folpe
|
|
8
|
+
runtimes: [claude, codex]
|
|
9
|
+
enforcement:
|
|
10
|
+
floor: ci
|
|
11
|
+
inline:
|
|
12
|
+
claude: pretooluse
|
|
13
|
+
codex: pretooluse
|
|
14
|
+
hermes: ci-only
|
|
15
|
+
eval_targets: [claude/anthropic/opus]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Sources for `void-testing` skill (see `docs/plans/skill-audits/void-testing.md` for full audit):
|
|
2
|
+
|
|
3
|
+
- Kent C. Dodds "Common Testing Mistakes" + Testing Library philosophy — https://kentcdodds.com/blog/common-mistakes-with-react-testing-library
|
|
4
|
+
- James Shore "Testing Without Mocks" (Art of Agile Development 2nd ed.) — https://www.jamesshore.com/v2/books/aoad2/testing_without_mocks — sociable tests, nullable infrastructure
|
|
5
|
+
- Martin Fowler "Mocks Aren't Stubs" — https://martinfowler.com/articles/mocksArentStubs.html — terminology baseline (dummy / stub / spy / mock / fake)
|
|
6
|
+
- citypaul/.dotfiles testing notes — pyramid ratios, fixture externalization
|
|
7
|
+
- superpowers test patterns — verify-test-fails-for-right-reason, pristine output
|
|
8
|
+
- Vitest docs — https://vitest.dev — tactical specifics in pack-monorepo
|
|
9
|
+
- Playwright docs — https://playwright.dev — tactical specifics in pack-nextjs-pwa
|
|
10
|
+
- Next.js CLI — https://nextjs.org/docs/app/api-reference/cli/next — build and serve the deployment-equivalent artifact
|
|
11
|
+
- Playwright fixtures, parallelism and auth — https://playwright.dev/docs/test-fixtures, https://playwright.dev/docs/test-parallel, https://playwright.dev/docs/auth — isolated worker state and authentication setup
|
|
12
|
+
- Better Auth rate limits — https://better-auth.com/docs/concepts/rate-limit — preserve production defaults and prove client-facing denial
|
|
13
|
+
- MSW (Mock Service Worker) — https://mswjs.io — HTTP boundary mocking
|
|
14
|
+
- pglite — https://pglite.dev — in-memory Postgres for fast integration tests
|
|
15
|
+
|
|
16
|
+
Strategy: distill. Author from sources; framework specifics live in packs. Hooks: no-only-no-skip, test-name-lint, no-business-mock, no-snapshot-default.
|
|
17
|
+
|
|
18
|
+
DEV-444 adaptation: Testing Library's role-first principle is extended to keyboard input and explicit
|
|
19
|
+
applicable-state coverage without moving TDD cycle ownership into this skill.
|