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,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-commit-discipline
|
|
3
|
+
description: Conventional Commits + mandatory "why" in body + scope + breaking-change marking. ASCII-only (no em dash, no emoji). Co-author trailer for AI pair. The git log is documentation. Use at every commit.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# commit-discipline — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
The git log is the project's living narrative. "fix stuff" / "wip" / "asdf" destroy that narrative. Conventional Commits give shape; the mandatory "why" in the body gives substance. This skill enforces both.
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source`. Foundation: Conventional Commits spec + Folpe "always say why" + citypaul commit guidance.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Format
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
<type>(<scope>): <subject>
|
|
18
|
+
<blank line>
|
|
19
|
+
<body explaining WHY — the rationale, the constraint, the spec link>
|
|
20
|
+
<blank line>
|
|
21
|
+
<footers — BREAKING CHANGE, Co-Authored-By, Closes #N>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Types (allowed list)
|
|
25
|
+
|
|
26
|
+
| Type | When |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `feat` | New observable behavior (new feature, new endpoint, new component visible to users / consumers) |
|
|
29
|
+
| `fix` | Bug fix. Composes with `void-debug` (the why = the root cause) |
|
|
30
|
+
| `void-refactor` | Structural change without behavior change. Composes with `void-refactor` (named Fowler move) |
|
|
31
|
+
| `test` | Add / modify tests without changing production code. Includes `test: reproduce <bug>` from `void-debug` |
|
|
32
|
+
| `docs` | Documentation only |
|
|
33
|
+
| `chore` | Repo maintenance (config, scripts, tooling) without user-visible effect |
|
|
34
|
+
| `build` | Build system / dependencies |
|
|
35
|
+
| `ci` | CI configuration / workflows |
|
|
36
|
+
| `perf` | Performance improvement with measurement |
|
|
37
|
+
| `style` | Formatting only (Biome auto-fix, etc.) |
|
|
38
|
+
|
|
39
|
+
No invented types (`improve:`, `tweak:`, `cleanup:`). Reach for one of the above or split the commit.
|
|
40
|
+
|
|
41
|
+
### Subject rules
|
|
42
|
+
|
|
43
|
+
- Imperative mood: "add", "fix", "refactor" — NOT "added", "adds", "adding"
|
|
44
|
+
- Lowercase
|
|
45
|
+
- No period at the end
|
|
46
|
+
- ≤ 72 characters
|
|
47
|
+
- Specific: "fix race in webhook handler" > "fix bug"
|
|
48
|
+
|
|
49
|
+
### Body rules
|
|
50
|
+
|
|
51
|
+
- Always present for `feat`, `fix`, `void-refactor`, `perf` commits. Optional for trivial `chore` / `style`.
|
|
52
|
+
- Wrapped at ≤ 72 columns
|
|
53
|
+
- Explains the WHY: rationale, constraint, spec link, root cause
|
|
54
|
+
- Multi-line bullets fine
|
|
55
|
+
- ASCII only — no em dash, no emoji (the harness invariant)
|
|
56
|
+
|
|
57
|
+
### Footers
|
|
58
|
+
|
|
59
|
+
- `BREAKING CHANGE: <description>` for breaking changes (forces a major version bump under SemVer)
|
|
60
|
+
- `Closes #<issue>` / `Refs #<issue>` for issue references
|
|
61
|
+
- `Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>` for AI pair commits
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
|
|
67
|
+
### feat with spec link
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
feat(checkout): add discount code application to cart
|
|
71
|
+
|
|
72
|
+
Why: spec docs/specs/2026-05-29-discount-codes.md approved 2026-05-30.
|
|
73
|
+
The cart accepts a `discountCode` field; valid codes apply percentage
|
|
74
|
+
or fixed-amount discounts at checkout time. Composes with the existing
|
|
75
|
+
Money value object for precision.
|
|
76
|
+
|
|
77
|
+
Closes #142
|
|
78
|
+
|
|
79
|
+
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### fix with root cause
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
fix(orders): handle null customer email in receipt generation
|
|
86
|
+
|
|
87
|
+
Why: a small fraction of legacy orders have a null customer email
|
|
88
|
+
(pre-validation rollout, see migration 0042). The receipt generator
|
|
89
|
+
threw on null, surfaced as 500s on /api/orders/{id}/receipt.
|
|
90
|
+
|
|
91
|
+
Root cause: the receipt builder assumed Email is always present.
|
|
92
|
+
Fix: receipt builder falls back to "unknown@example.invalid" with
|
|
93
|
+
a structured log entry tagged orphan_email_receipt for auditing.
|
|
94
|
+
Prevention: a backfill migration is queued (see plan
|
|
95
|
+
plans/2026-06-02-email-backfill-plan.md) to set valid emails on
|
|
96
|
+
legacy rows.
|
|
97
|
+
|
|
98
|
+
Closes #248
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### refactor (named Fowler)
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
refactor(checkout): extract calculateDiscount helper
|
|
105
|
+
|
|
106
|
+
Why: the inline calculation in CheckoutService grew to ~40 lines
|
|
107
|
+
with three branches. Extracted to a pure helper to enable unit
|
|
108
|
+
tests at the calculation level (composes with the new discount
|
|
109
|
+
strategy tests in PR #142).
|
|
110
|
+
|
|
111
|
+
Named refactor: Extract Function (Fowler 2018).
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### BREAKING CHANGE
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
feat(api)!: rename /orders/:id/items endpoint to /orders/:id/line-items
|
|
118
|
+
|
|
119
|
+
Why: ubiquitous-language alignment. The team uses "line item"
|
|
120
|
+
consistently in the domain (per docs/DOMAIN.md). The API path
|
|
121
|
+
matched. BREAKING CHANGE for any external consumer.
|
|
122
|
+
|
|
123
|
+
BREAKING CHANGE: the path /orders/:id/items no longer exists.
|
|
124
|
+
Consumers MUST migrate to /orders/:id/line-items. The legacy
|
|
125
|
+
path will return 410 Gone for 30 days, then be removed.
|
|
126
|
+
|
|
127
|
+
Closes #157
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Banned
|
|
133
|
+
|
|
134
|
+
### Vacuous subjects
|
|
135
|
+
|
|
136
|
+
- "wip", "asdf", "stuff", "fix bug", "update", "tweak", "cleanup"
|
|
137
|
+
|
|
138
|
+
The author cannot tell, the reviewer cannot tell, future maintainers cannot tell. Reject at commit time.
|
|
139
|
+
|
|
140
|
+
### Mixed-intent commits
|
|
141
|
+
|
|
142
|
+
- `feat: add discount + fix unrelated bug` — split.
|
|
143
|
+
- `refactor: extract helper and add validation` — split (composes with `void-refactor` Two-Hat).
|
|
144
|
+
- `fix: bug A and bug B` — split.
|
|
145
|
+
|
|
146
|
+
The companion hook `tidying-commit-prefix` (already shipped) flags `refactor:` with behavior-change keywords in body.
|
|
147
|
+
|
|
148
|
+
### Em dash, emoji, non-ASCII
|
|
149
|
+
|
|
150
|
+
The harness invariant: English ASCII commit messages. Hyphens (`-`) for ranges, hyphens for parenthetical, not em dash. The companion hook `no-emdash-no-emoji-in-commit-msg` blocks.
|
|
151
|
+
|
|
152
|
+
### Missing "why" for substantive commits
|
|
153
|
+
|
|
154
|
+
`feat:` / `fix:` / `refactor:` / `perf:` without a body explaining why = rejected. The commit message is documentation.
|
|
155
|
+
|
|
156
|
+
### AI authorship without trailer
|
|
157
|
+
|
|
158
|
+
Commits produced in pair with an AI agent include `Co-Authored-By`. Authorship transparency.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Bug fix commit pairs (composes with void-debug)
|
|
163
|
+
|
|
164
|
+
A bug fix is TWO commits:
|
|
165
|
+
|
|
166
|
+
1. `test: reproduce <bug summary>` — the failing test that demonstrates the bug
|
|
167
|
+
2. `fix: <root cause description>` — the implementation that resolves it
|
|
168
|
+
|
|
169
|
+
Combined into one commit = rejected. The pair makes the regression-prevention explicit in `git log`.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Companion hooks
|
|
174
|
+
|
|
175
|
+
- `commitlint-precommit` (commit-msg, in `pack-monorepo`) — already in void-starter. Enforces conventional commits.
|
|
176
|
+
- `tidying-commit-prefix` (commit-msg, already shipped in core/hooks) — warns on mixed-intent `refactor:` commits.
|
|
177
|
+
- `refactor-named-grep` (commit-msg, already shipped) — warns on `refactor:` without a Fowler name.
|
|
178
|
+
- `no-emdash-no-emoji-in-commit-msg` (commit-msg, in `pack-monorepo`) — blocks em dash and emoji.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Composition with other skills
|
|
183
|
+
|
|
184
|
+
- **Runs AFTER `void-verify`** — the completion handoff produces the "what done"; this skill frames it for git.
|
|
185
|
+
- **With `void-debug`** — bug fix commit pairs (`test:` then `fix:`).
|
|
186
|
+
- **With `void-refactor`** — Two-Hat principle, named Fowler refactors in subjects.
|
|
187
|
+
- **With `void-brainstorm` + `void-plan`** — substantive commits link to their spec / plan in the body.
|
|
188
|
+
- **With `void-code-review`** — review comments respect the commit boundaries (do not request mixing intent).
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Anti-rules
|
|
193
|
+
|
|
194
|
+
- MUST NOT decide whether the change itself is correct (that is the upstream skills' job).
|
|
195
|
+
- MUST NOT permit vacuous subjects.
|
|
196
|
+
- MUST NOT permit em dash / emoji / non-ASCII.
|
|
197
|
+
- MUST NOT permit `feat:` / `fix:` / `refactor:` without a body why.
|
|
198
|
+
- MUST NOT combine bug-fix `test:` and `fix:` commits.
|
|
199
|
+
- MUST NOT silently allow invented commit types.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Final rule
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
Every commit → conventional format + imperative subject ≤ 72 + body explains WHY + ASCII + AI co-author trailer.
|
|
207
|
+
Substantive (feat/fix/refactor/perf) → body mandatory.
|
|
208
|
+
Otherwise → it is not voidcorp commit-discipline.
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The git log is the project's narrative. Write it as if a future debugger will thank you — because one will.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Harness metadata for this skill. Not part of the Agent Skills
|
|
2
|
+
# specification, and never copied into a consumer project: the SKILL.md
|
|
3
|
+
# beside it stays portable and validates against the official six fields.
|
|
4
|
+
# Read by this repository's graph, and by the installer for `runtimes`.
|
|
5
|
+
kind: standard
|
|
6
|
+
activation: always
|
|
7
|
+
owner: folpe
|
|
8
|
+
runtimes: [claude, codex]
|
|
9
|
+
enforcement:
|
|
10
|
+
floor: ci
|
|
11
|
+
inline:
|
|
12
|
+
claude: pretooluse
|
|
13
|
+
codex: pretooluse
|
|
14
|
+
hermes: ci-only
|
|
15
|
+
eval_targets: [claude/anthropic/opus]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Sources for `void-context` skill (see `docs/plans/skill-audits/void-context.md` for full audit):
|
|
2
|
+
|
|
3
|
+
- Anthropic / Claude Code best practices — context management guidance: use /clear between unrelated tasks; /compact <focus> to condense long sessions; delegate investigation to subagents to protect the main window. https://www.anthropic.com/engineering/claude-code-best-practices
|
|
4
|
+
- Anthropic engineering — "Effective context engineering for AI agents" (context as a finite, attention-competing budget; subagents return distilled conclusions, not raw material). https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
|
|
5
|
+
- Boris Cherny / Cat Wu (Claude Code creators) interviews — "context is the fundamental constraint" of an agent; subagents exist to protect the main context window from heavy exploration. (Latent Space / podcast appearances on Claude Code.)
|
|
6
|
+
- "get-shit-done" / Ralph-style autonomous loops — anti-context-rot principle: decompose long tasks and persist state with its authoritative owner so work survives a context reset rather than living in conversation history.
|
|
7
|
+
- superpowers/dispatching-parallel-agents + superpowers/subagent-driven-development — composed (vendored targets) for fan-out investigation and subagent-run plan steps.
|
|
8
|
+
- PrimeIntellect `prime-agent` compaction format — adapted only for cumulative bounded read and
|
|
9
|
+
modified file observations; its semantic summary format is not copied.
|
|
10
|
+
|
|
11
|
+
Strategy: distill. Distill the load-bearing context principles from Claude Code official best-practices and the creators' framing, plus the anti-context-rot / on-disk-state principle from autonomous-loop practice. Rewritten for void-machine; absorbs the "context-engineering / anti-context-rot" concept. Composes with debug (investigate without drowning context), plan (on-disk state), and subagent delegation.
|
|
12
|
+
|
|
13
|
+
Companion mechanism: the shared `context-continuity` lifecycle handler observes bounded usage and
|
|
14
|
+
working-set facts, preserves them at `PreCompact`, and can emit one configured threshold nudge.
|
|
15
|
+
It does not invoke `/clear`, `/compact`, or a semantic checkpoint.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-context
|
|
3
|
+
description: Context is the agent's core constraint. Use when a task spans many files, a session mixes subjects, corrections loop, or replies forget earlier constraints. Clear, compact, delegate to subagents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# context — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
The context window is not infinite scratch space; it is the single fundamental constraint on an agent's reasoning. Everything in it competes for attention, and a polluted window degrades quality silently — the model does not announce that it forgot your earlier constraint, it simply drops it. This skill teaches you to treat context as a managed budget: clear it between unrelated tasks, compact it when long, delegate heavy reading to fresh-context subagents, and keep durable state on the filesystem so it survives any reset.
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Why context is the constraint
|
|
15
|
+
|
|
16
|
+
A long session accumulates dead weight: abandoned approaches, stale file dumps, three superseded versions of the same plan, two failed fix attempts. The model attends to all of it. The symptom is never an error — it is a slow rot: the agent re-asks a settled question, contradicts a decision made earlier, or "fixes" something already correct. By the time you notice, the window has been degraded for many turns.
|
|
17
|
+
|
|
18
|
+
So the discipline is proactive, not reactive. You manage the budget before it overflows, the same way you would not wait for an OOM to think about memory.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## The four moves
|
|
23
|
+
|
|
24
|
+
### 1. `/clear` between unrelated tasks
|
|
25
|
+
|
|
26
|
+
When you finish one task and start a logically separate one, run `/clear`. Carrying the first task's context into the second is the "kitchen-sink session" anti-pattern: nothing in the residue helps the new task, and all of it competes for attention. If work remains open, invoke `void-checkpoint` first: `/clear` has no pre-event, and the harness cannot preserve semantic residue after it is gone.
|
|
27
|
+
|
|
28
|
+
Rule of thumb: if the next task would not cite anything from the current conversation, clear first.
|
|
29
|
+
|
|
30
|
+
### 2. The two-correction reset
|
|
31
|
+
|
|
32
|
+
If two attempts to correct the agent both fail, **stop stacking a third correction**. Each failed correction adds confused context (the wrong attempt, your patch, the next wrong attempt) that makes the third try worse, not better.
|
|
33
|
+
|
|
34
|
+
Instead:
|
|
35
|
+
|
|
36
|
+
1. `/clear`.
|
|
37
|
+
2. Re-prompt from scratch with a single reformulated statement that folds in what the failures taught you ("X must handle the empty case, and must not touch the cache layer").
|
|
38
|
+
|
|
39
|
+
A clean window with a sharp prompt beats a dirty window with three patches. Correcting over and over is the most common way a session quietly rots.
|
|
40
|
+
|
|
41
|
+
### 3. `/compact <focus>` for long-but-coherent work
|
|
42
|
+
|
|
43
|
+
When a task is genuinely long and coherent (not mixed subjects, just big), do not clear — you would lose the thread. Run `/compact <focus>` to summarize the history down to what matters, naming the focus so the compaction keeps the relevant fil rather than a generic digest.
|
|
44
|
+
|
|
45
|
+
Use `/clear` when subjects changed; use `/compact` when the subject is the same but the history is heavy. The `PreCompact` hook preserves the bounded mechanical block before compaction; it does not invent dead ends, assumptions, or the next action.
|
|
46
|
+
|
|
47
|
+
### 4. Delegate heavy investigation to fresh-context subagents
|
|
48
|
+
|
|
49
|
+
Exploration is the biggest context sink: reading twenty files to answer one question dumps twenty files into the window, of which you needed two sentences. Push that work into a subagent with its own fresh context. The subagent reads broadly and returns only its conclusion; your main window receives the answer, not the raw material.
|
|
50
|
+
|
|
51
|
+
This is the cure for "infinite exploration," where the agent keeps reading more files in a widening search and the window fills with material it will never cite. Dispatch a subagent, state the question, accept the conclusion.
|
|
52
|
+
|
|
53
|
+
Vendored targets: `superpowers:dispatching-parallel-agents` (fan out several investigations at once) and `superpowers:subagent-driven-development` (run independent plan steps in subagents). Until vendored, use those directly.
|
|
54
|
+
|
|
55
|
+
A subagent must return a **compacted structured summary** — findings, the answer, the relevant file:line pointers — never the raw bytes it read. Raw output dumped back into the main window defeats the delegation.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Frequent intentional compaction
|
|
60
|
+
|
|
61
|
+
Treat context usage like a gauge you keep in a healthy band, not a tank you fill to the brim. Aim to keep effective usage around **40–60%**; a window run to the limit reasons worse long before it errors.
|
|
62
|
+
|
|
63
|
+
- When `.void/config.json` declares a reliable `context.windowTokens`, the lifecycle hook can emit one `void-checkpoint` nudge per cycle at the configured 40–60% threshold (50% by default). Without that denominator it reports no percentage and emits no threshold nudge.
|
|
64
|
+
- After each verified phase, route durable programme and provider state to their owners, invoke `void-checkpoint` for session residue, then trim the chat. The disk is the durable record; the window is working memory.
|
|
65
|
+
- Compaction is a deliberate move you schedule, not an emergency you react to. Do it at clean boundaries (phase done, gate passed), where the summary is easy to write and nothing in flight is lost.
|
|
66
|
+
|
|
67
|
+
The hook never invokes `/clear` or `/compact`, and never writes a semantic checkpoint. Its nudge is advisory; the runtime and the agent still own those actions.
|
|
68
|
+
|
|
69
|
+
## Leverage hierarchy
|
|
70
|
+
|
|
71
|
+
Errors compound asymmetrically by stage. A bad research conclusion cascades into thousands of wrong lines; a bad plan into hundreds; a bad line of code stays mostly local and isolated.
|
|
72
|
+
|
|
73
|
+
So concentrate human review and verification **upstream**: research > plan > code. The cheapest place to catch a mistake is the research summary, the next-cheapest is the plan, and the most expensive is after it is coded. Spend scrutiny where leverage is highest, not evenly.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Anti-context-rot: state lives on the filesystem
|
|
78
|
+
|
|
79
|
+
A long task must not keep its state only in the conversation, because the conversation is the thing you will reset. Durable state goes on disk:
|
|
80
|
+
|
|
81
|
+
- The versioned programme descriptor and its linked plan/spec, when a programme exists.
|
|
82
|
+
- Mutable execution state in the declared progress provider, never duplicated locally.
|
|
83
|
+
- `.void/machine/checkpoint.md` for session residue and the bounded mechanical working set.
|
|
84
|
+
- Durable decisions in ADRs and reusable rules in doctrine, through their owning skills.
|
|
85
|
+
|
|
86
|
+
The test: **if you `/clear` right now, can the next session pick up the task from disk alone?** If not, the state is trapped in the window and one reset will lose it. Write it down first.
|
|
87
|
+
|
|
88
|
+
Decompose long tasks into sub-tasks with their own gates (composes with `void-plan`). Each sub-task is small enough to run in a clean-ish window; the plan file stitches them across resets.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Signs you must act
|
|
93
|
+
|
|
94
|
+
| Signal | What it means | Move |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| Reply forgets a constraint you set earlier | Window degraded; constraint scrolled out of effective attention | `/compact <focus>` or `/clear` + re-prompt |
|
|
97
|
+
| Two corrections in a row failed | Correction stacking; context now confused | two-correction reset (`/clear` + reformulate) |
|
|
98
|
+
| Subjects are mixing (the agent references the previous task) | Kitchen-sink session | `/clear` |
|
|
99
|
+
| Responses slowing / wandering, search widening | Infinite exploration, window bloated with file dumps | delegate to a fresh-context subagent |
|
|
100
|
+
| You are about to read many files to answer one question | Exploration sink | delegate to a subagent, take the conclusion |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Operating procedure
|
|
105
|
+
|
|
106
|
+
1. **Before a new task**: is it related to the current one? No → checkpoint any open residue, then `/clear`. Yes → continue.
|
|
107
|
+
2. **Before heavy reading**: will this dump many files for a small answer? Yes → dispatch a subagent.
|
|
108
|
+
3. **During a long coherent task**: window feeling heavy but subject unchanged → `/compact <focus>`.
|
|
109
|
+
4. **On a stuck correction loop**: hit two failed corrections → `/clear`, reformulate the prompt with the lessons folded in.
|
|
110
|
+
5. **Throughout a long task**: persist plan + notes to disk so any reset is survivable.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Rationalizations
|
|
115
|
+
|
|
116
|
+
| Rationalization | Reality |
|
|
117
|
+
|---|---|
|
|
118
|
+
| "Keeping everything in context is safer — I might need it." | The model attends to all of it; the irrelevant 90% degrades the relevant 10%. Keeping everything is the harm, not the safety. |
|
|
119
|
+
| "One more correction will fix it." | After two failures, the third inherits a confused window. A clean re-prompt wins. |
|
|
120
|
+
| "Clearing loses my work." | It loses semantic residue that was only in chat. Route state and invoke `void-checkpoint` first; then `/clear` has a durable recovery point. |
|
|
121
|
+
| "Reading the files myself is faster than dispatching a subagent." | Faster this turn, slower every turn after — those files now sit in your window forever. The subagent returns the conclusion, not the bytes. |
|
|
122
|
+
| "The session is fine, no errors." | Context rot produces no errors. It produces dropped constraints and repeated questions. Silence is not health. |
|
|
123
|
+
| "Compacting might drop something important." | Name the focus. `/compact <focus>` keeps the named thread; an unmanaged window drops things at random instead. |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Composition with other skills
|
|
128
|
+
|
|
129
|
+
- **`void-debug`**: investigate without drowning the window — gather evidence in a subagent, bring back the timeline and root cause, not every log line read.
|
|
130
|
+
- **`void-plan`**: owns the approved execution structure; mutable progress remains with its declared provider.
|
|
131
|
+
- **`void-checkpoint`**: owns semantic session residue; the lifecycle hook owns only the delimited mechanical block it must preserve.
|
|
132
|
+
- **`superpowers:dispatching-parallel-agents`** (vendored target): fan out independent investigations to protect the main window.
|
|
133
|
+
- **`superpowers:subagent-driven-development`** (vendored target): run independent plan steps in fresh-context subagents.
|
|
134
|
+
|
|
135
|
+
This skill absorbs the "context-engineering / anti-context-rot" concept; other skills do the work, this one keeps the window clean enough for them to do it well.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Anti-rules
|
|
140
|
+
|
|
141
|
+
- MUST NOT run a single giant session across many unrelated tasks — `/clear` between them.
|
|
142
|
+
- MUST NOT stack a third correction after two failed ones — reset and reformulate.
|
|
143
|
+
- MUST NOT keep task state only in the conversation — persist plan and notes to disk.
|
|
144
|
+
- MUST NOT do heavy multi-file exploration in the main window when a subagent can return the conclusion.
|
|
145
|
+
- MUST NOT treat "no error" as "context is healthy" — rot is silent.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Verification
|
|
150
|
+
|
|
151
|
+
- [ ] Unrelated tasks are separated by a `/clear` (no kitchen-sink session).
|
|
152
|
+
- [ ] No correction stacked beyond two attempts without a reset + reformulation.
|
|
153
|
+
- [ ] Long coherent work was `/compact <focus>`-ed rather than left to bloat.
|
|
154
|
+
- [ ] Heavy investigation was delegated to a fresh-context subagent that returned only its conclusion.
|
|
155
|
+
- [ ] Programme, provider state, checkpoint residue, decisions, and doctrine are routed to their single authoritative owners before a reset.
|
|
156
|
+
- [ ] Open semantic residue is checkpointed before `/clear`; no hook capability is assumed beyond mechanical preservation and an advisory nudge.
|
|
157
|
+
- [ ] Acting on degradation signals before they compound, not after errors appear.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Final rule
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
Context is the budget. Clear between subjects, reset after two failed corrections,
|
|
165
|
+
compact long threads, delegate exploration to fresh-context subagents, keep state on disk.
|
|
166
|
+
Otherwise → the window rots silently and quality drops with no warning.
|
|
167
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Harness metadata for this skill. Not part of the Agent Skills
|
|
2
|
+
# specification, and never copied into a consumer project: the SKILL.md
|
|
3
|
+
# beside it stays portable and validates against the official six fields.
|
|
4
|
+
# Read by this repository's graph, and by the installer for `runtimes`.
|
|
5
|
+
kind: standard
|
|
6
|
+
owner: folpe
|
|
7
|
+
runtimes: [claude, codex]
|
|
8
|
+
enforcement:
|
|
9
|
+
floor: ci
|
|
10
|
+
inline:
|
|
11
|
+
claude: active
|
|
12
|
+
codex: active
|
|
13
|
+
hermes: ci-only
|
|
14
|
+
eval_targets: [claude/anthropic/opus]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Sources for `void-debug` skill (see `docs/plans/skill-audits/void-debug.md` for full audit):
|
|
2
|
+
|
|
3
|
+
- gstack /investigate — VENDORED (DEV-388): the four-phase mechanism + Iron Law were already this skill's core (superpowers lineage, ~85-90% overlap); DEV-388 folded the remaining diagnostic aids (pattern-lookup table, 3-strike rule, blast-radius gate, instrument-to-confirm, recurring-bug-smell, red-flags). Everything else was deliberately NOT re-vendored (already present).
|
|
4
|
+
- superpowers/debug — composed, similar discipline, cross-reference for anti-drift psychology.
|
|
5
|
+
- "5 Whys" (Toyota / Taiichi Ohno) — questioning loop for the analyze phase.
|
|
6
|
+
- Brian Kernighan "The Practice of Programming" debugging chapter — mental model: rubber duck, narrow search space.
|
|
7
|
+
- Julia Evans "Debugging" zine + blog — https://jvns.ca — tactical tips for system debugging.
|
|
8
|
+
|
|
9
|
+
Strategy: distill (gstack /investigate now fully vendored, DEV-388, not composed). void-machine composition added (TDD failing test before fix, root-cause section in PR body, observability-first when visibility is gap, refactor composition for structural roots).
|
|
10
|
+
|
|
11
|
+
No new companion hooks (composed with existing tdd-guard + code-review).
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-debug
|
|
3
|
+
description: "Four phases (investigate, analyze, hypothesize, implement). Iron Law: no fix without a failing test reproducing the bug AND a root cause. Bug fix commit pairs. Use on bug or test failure."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# debug — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
A bug fix without a root cause is a band-aid. The bug recurs in three months under a different name, and the next debugger inherits the band-aid. `void-debug` enforces four phases (investigate → analyze → hypothesize → implement), with a failing test that reproduces the bug landing BEFORE the fix.
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source`. The gstack `/investigate` methodology is vendored here (DEV-388); the four-phase discipline is `superpowers:debug`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Iron Law
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
No fix without:
|
|
18
|
+
(a) a root cause identified, AND
|
|
19
|
+
(b) a failing test that reproduces the bug.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
"It works now" is not a root cause. Suspect cosmic-ray fixes.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Four phases
|
|
27
|
+
|
|
28
|
+
### Phase 1 — Investigate (gather evidence)
|
|
29
|
+
|
|
30
|
+
Collect what you can OBSERVE before reasoning. The goal is signal, not theory.
|
|
31
|
+
|
|
32
|
+
- Reproduce the bug at least once locally (or capture the prod conditions if not).
|
|
33
|
+
- Gather: stack trace, recent commits, related logs, recent infra changes, recent migrations.
|
|
34
|
+
- Note: when did it start? What changed?
|
|
35
|
+
- If reproduction requires data you do not have, **invoke `void-observability` first** — add the visibility, then come back.
|
|
36
|
+
|
|
37
|
+
Deliverable: a one-paragraph timeline + reproducible steps (or a recorded "last working commit").
|
|
38
|
+
|
|
39
|
+
### Phase 2 — Analyze (find the pattern)
|
|
40
|
+
|
|
41
|
+
Find the smallest example that reproduces. Narrow the search space:
|
|
42
|
+
|
|
43
|
+
- **Time**: binary-search the commit history. Last working SHA? First failing SHA?
|
|
44
|
+
- **Code**: which module? Which file? Which function?
|
|
45
|
+
- **Input**: which value class? Boundary case? Empty? Negative?
|
|
46
|
+
- **Environment**: which user? Which region? Which browser? Which timezone?
|
|
47
|
+
|
|
48
|
+
Apply **5 Whys** (Toyota): for non-obvious bugs, ask "why does this happen" 3–5 times until you stop hitting symptoms.
|
|
49
|
+
|
|
50
|
+
Deliverable: narrowed reproduction + 5-Whys chain (in the PR body later).
|
|
51
|
+
|
|
52
|
+
### Phase 3 — Hypothesize (testable theory)
|
|
53
|
+
|
|
54
|
+
State the root cause as a theory you can test:
|
|
55
|
+
|
|
56
|
+
> "The validation runs before authentication. An unauthenticated user can trigger expensive DB lookups by sending an invalid payload."
|
|
57
|
+
|
|
58
|
+
A good hypothesis:
|
|
59
|
+
|
|
60
|
+
- Explains the observation (necessary condition).
|
|
61
|
+
- Predicts the behavior change after fix (sufficient condition).
|
|
62
|
+
- Is testable — you can write a failing test for it.
|
|
63
|
+
|
|
64
|
+
If the hypothesis does not predict a falsifiable behavior change, it is a guess. Keep analyzing.
|
|
65
|
+
|
|
66
|
+
### Phase 4 — Implement (fix + verify)
|
|
67
|
+
|
|
68
|
+
In this order:
|
|
69
|
+
|
|
70
|
+
1. **Write the reproducing test** (in `strict` mode per `void-tdd`). It must fail on `main`.
|
|
71
|
+
2. **Commit**: `test: reproduce <bug summary>`.
|
|
72
|
+
3. **Implement the fix**. The test now passes; other tests still pass.
|
|
73
|
+
4. **Commit**: `fix: <root cause description>`. Composes with `void-commit-discipline` (the "why" is the root cause).
|
|
74
|
+
5. **Verify pristine output** — no warnings, no leaked logs.
|
|
75
|
+
6. **Root-cause section in PR body** — see template below.
|
|
76
|
+
|
|
77
|
+
### Banned
|
|
78
|
+
|
|
79
|
+
- Combining the reproducing test and the fix in one commit. Bug fix commit pairs are non-negotiable.
|
|
80
|
+
- Adding the test "later" after the fix.
|
|
81
|
+
- Marking the bug closed without an explanation that survives scrutiny.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Root-cause section in PR body
|
|
86
|
+
|
|
87
|
+
Every bug-fix PR includes:
|
|
88
|
+
|
|
89
|
+
```markdown
|
|
90
|
+
## Root cause
|
|
91
|
+
|
|
92
|
+
**Symptom**: <one sentence — what the user saw>
|
|
93
|
+
|
|
94
|
+
**Narrowing**:
|
|
95
|
+
- Last working commit: <sha or "unknown — first observed in prod">
|
|
96
|
+
- Smallest reproduction: <steps or test>
|
|
97
|
+
- Affected paths: <files / endpoints / users>
|
|
98
|
+
|
|
99
|
+
**5 Whys**:
|
|
100
|
+
1. Why does the API return 500? → unhandled exception in checkoutCart
|
|
101
|
+
2. Why is the exception unhandled? → repository returns null instead of Result
|
|
102
|
+
3. Why does the repository return null? → migration added column but seed lacks it
|
|
103
|
+
4. Why does the migration not include the seed? → seed file path not tracked by migration runner
|
|
104
|
+
5. Why is the seed file path not tracked? → introduced in PR #142, never run in CI
|
|
105
|
+
→ Root cause: PR #142 introduces seed-coupled migrations without CI coverage
|
|
106
|
+
|
|
107
|
+
**Fix**: <one sentence>
|
|
108
|
+
|
|
109
|
+
**Prevention**: <how this class of bug is now caught — usually a new test, a new hook,
|
|
110
|
+
or an ADR>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
This section persists. `git blame` archaeology rewards the next debugger.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## When the root cause is "we cannot see what happened"
|
|
118
|
+
|
|
119
|
+
If Phase 1 cannot reproduce because production lacks visibility:
|
|
120
|
+
|
|
121
|
+
1. **STOP debugging the symptom.**
|
|
122
|
+
2. **Invoke `void-observability`** — add structured logs, trace IDs, breadcrumbs, error boundaries at the suspect surface.
|
|
123
|
+
3. **Deploy the observability fix** (with `void-commit-discipline` "why: investigating prod issue X").
|
|
124
|
+
4. **Wait for the next occurrence** — now with signal.
|
|
125
|
+
5. **Resume debug Phase 1** with real data.
|
|
126
|
+
|
|
127
|
+
Guessing in the dark produces "fixes" that may move the bug rather than solve it.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## When the root cause is structural
|
|
132
|
+
|
|
133
|
+
If Phase 3 hypothesis is "the architecture allows this state to exist":
|
|
134
|
+
|
|
135
|
+
- The fix is a refactor (composes with `void-refactor` and `void-hexagonal-architecture` / `void-domain-driven-design`).
|
|
136
|
+
- Invoke the `doctrine-critic` agent to judge the structural root before the refactor.
|
|
137
|
+
- Compose with `void-brainstorm` + `void-plan` if the refactor is large enough to need a spec.
|
|
138
|
+
- Two-Hat principle: the structural fix (refactor) and the bug close commit separately — though they live in the same PR with explicit ordering.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Flaky tests are bugs too
|
|
143
|
+
|
|
144
|
+
A "flake" is a non-deterministic test. It is a bug — not a CI inconvenience to retry around.
|
|
145
|
+
|
|
146
|
+
Run `void-debug` on the flake:
|
|
147
|
+
|
|
148
|
+
- Phase 1: gather flake conditions (which CI run, which time of day, which order).
|
|
149
|
+
- Phase 2: narrow — timing assumption? Shared state? Network? Randomness without a seed?
|
|
150
|
+
- Phase 3: hypothesis (e.g., "test depends on global Date — fix by injecting a clock port").
|
|
151
|
+
- Phase 4: failing test that DEMONSTRATES the flake, then the fix.
|
|
152
|
+
|
|
153
|
+
Retry-until-green is rejected.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Diagnostic aids (vendored from gstack `/investigate`)
|
|
158
|
+
|
|
159
|
+
**Pattern lookup** — before theorizing, match the symptom against a common class:
|
|
160
|
+
|
|
161
|
+
| Pattern | Signature | Where to look |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| Race condition | intermittent, timing/load-dependent, "works when I step through" | shared mutable state, missing `await`, unordered async |
|
|
164
|
+
| Nil propagation | NPE / undefined far from its origin | an optional assumed present at a boundary |
|
|
165
|
+
| State corruption | wrong value, no error | a write path skipping validation, or a stale cache |
|
|
166
|
+
| Integration failure | works in isolation, fails wired up | contract mismatch at the adapter, env / config drift |
|
|
167
|
+
| Config drift | works locally, fails in one env | env-specific value, unpinned dependency |
|
|
168
|
+
|
|
169
|
+
**Instrument to confirm, before editing.** Add a temporary log/assertion at the suspected cause and match it against the reproduction *before* writing any fix. A hypothesis you have not observed is still a guess.
|
|
170
|
+
|
|
171
|
+
**3-strike rule.** Three failed hypotheses → stop treating it as a simple bug. It is likely architectural: instrument-and-wait, or escalate to a structural review (see "When the root cause is structural").
|
|
172
|
+
|
|
173
|
+
**Blast-radius gate.** If the fix touches > 5 files, stop and ask: proceed / split / rethink. A wide fix for a narrow bug is usually the wrong layer.
|
|
174
|
+
|
|
175
|
+
**Recurring bug = architectural smell.** `git log` the affected files for prior fixes. The same file fixed three times is not coincidence — the root is structural, not the latest symptom.
|
|
176
|
+
|
|
177
|
+
**Red flags** (each means you are guessing): "a quick fix for now" (there is no for-now); proposing a fix before tracing the data flow; each fix revealing a new problem (wrong layer).
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Composition with other skills
|
|
182
|
+
|
|
183
|
+
- **Upstream — `void-observability`**: if visibility is the gap, fix it first.
|
|
184
|
+
- **With `void-tdd`**: the reproducing test is written in strict mode. The fix follows the cycle.
|
|
185
|
+
- **With `void-code-review`**: PR body includes the root-cause section. The reviewer verifies the test reproduces the bug before the fix.
|
|
186
|
+
- **With `void-refactor`**: structural fixes compose with void-refactor's Two-Hat principle.
|
|
187
|
+
- **With `doctrine-critic` agent**: for structural roots affecting multiple bugs of the same kind.
|
|
188
|
+
- **With `void-commit-discipline`**: `fix:` commits include the "why" (root cause).
|
|
189
|
+
- **`gstack:/investigate` is fully vendored here** (DEV-388): its diagnostic aids (pattern lookup, 3-strike, blast-radius, instrument-to-confirm) are the section above; the phase skeleton + Iron Law + regression-test rule were already this skill's core (deliberately not re-vendored).
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Anti-rules
|
|
194
|
+
|
|
195
|
+
- MUST NOT close a bug without a root cause the developer can explain.
|
|
196
|
+
- MUST NOT allow "I will add the test later" — the test exists alongside or before the fix.
|
|
197
|
+
- MUST NOT permit retry-until-green for flakes.
|
|
198
|
+
- MUST NOT silently widen the scope of the fix PR (Two-Hat).
|
|
199
|
+
- MUST NOT skip observability when the root cause is visibility.
|
|
200
|
+
- MUST NOT defer to `void-migrations` for non-migration bugs.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Final rule
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
Bug → investigate → analyze → hypothesize → reproduce in test → fix → verify → PR with root cause.
|
|
208
|
+
Otherwise → it is not voidcorp debug.
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The discipline pays off the second time the bug would have recurred — and it does, often.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Harness metadata for this skill. Not part of the Agent Skills
|
|
2
|
+
# specification, and never copied into a consumer project: the SKILL.md
|
|
3
|
+
# beside it stays portable and validates against the official six fields.
|
|
4
|
+
# Read by this repository's graph, and by the installer for `runtimes`.
|
|
5
|
+
kind: action
|
|
6
|
+
owner: folpe
|
|
7
|
+
runtimes: [claude, codex]
|
|
8
|
+
enforcement:
|
|
9
|
+
floor: ci
|
|
10
|
+
inline:
|
|
11
|
+
claude: active
|
|
12
|
+
codex: active
|
|
13
|
+
hermes: ci-only
|
|
14
|
+
eval_targets: [claude/anthropic/opus]
|