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,287 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-async-safety
|
|
3
|
+
description: Idempotency by design. At-least-once with consumer dedup. Signature verify, replay window, idempotency keys, outbox, bounded retries, DLQ. Use for async/webhook/job/cron code.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# async-safety — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
The network is unreliable. Webhooks redeliver. Jobs restart mid-run. Crons stack when one runs slow. Without idempotency by design, every re-delivery becomes a corruption risk. This skill codifies the patterns so handlers are safe by construction.
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source`. Foundation: Stripe webhook patterns + Outbox pattern (Microservices.io) + Pat Helland "Life Beyond Distributed Transactions" + Bryan Cantrill on distributed failure modes.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## At-least-once is the default
|
|
15
|
+
|
|
16
|
+
Assume every message can be delivered N times. The consumer handles dedup.
|
|
17
|
+
|
|
18
|
+
Exactly-once delivery requires two-phase commits across systems — extreme effort, rarely worth it. At-least-once + consumer dedup covers > 99% of real cases at a fraction of the cost.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Webhook safety — the canonical pattern
|
|
23
|
+
|
|
24
|
+
Every webhook handler does FOUR things, IN THIS ORDER:
|
|
25
|
+
|
|
26
|
+
1. **Verify signature** (HMAC + timestamp window)
|
|
27
|
+
2. **Check idempotency key** (claim atomically; if already processed, return success without re-processing)
|
|
28
|
+
3. **Handle the event** (business logic)
|
|
29
|
+
4. **Mark idempotency key as completed** (or release on failure for retry)
|
|
30
|
+
|
|
31
|
+
The `pack-nextjs` provides a `withWebhookSafety()` wrapper:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { withWebhookSafety } from '@repo/async';
|
|
35
|
+
|
|
36
|
+
export const POST = withWebhookSafety({
|
|
37
|
+
verify: (req) => verifyStripeSignature(req, env.STRIPE_WEBHOOK_SECRET),
|
|
38
|
+
dedupKey: (event) => event.id, // Stripe event ID
|
|
39
|
+
replayWindowMs: 5 * 60 * 1000, // 5 minutes
|
|
40
|
+
store: stripeIdempotencyStore, // injected
|
|
41
|
+
handler: async (event) => handleStripeEvent(deps, event),
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The wrapper enforces the order. Business handler stays pure.
|
|
46
|
+
|
|
47
|
+
### Replay window enforcement
|
|
48
|
+
|
|
49
|
+
Reject events older than the configured window (default 5 minutes). Stripe and most webhook sources include a timestamp; the wrapper checks it. Composes with `void-security-guidance` (replay attack protection).
|
|
50
|
+
|
|
51
|
+
### Banned
|
|
52
|
+
|
|
53
|
+
- State mutation BEFORE signature verification.
|
|
54
|
+
- Hand-rolled signature check (use the wrapper / the provider's official lib).
|
|
55
|
+
- In-memory `Set` for dedup (lost on process restart).
|
|
56
|
+
- No replay window (forever-replayable).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Idempotency keys — port + store
|
|
61
|
+
|
|
62
|
+
`IdempotencyStore` is a port (composes with `void-hexagonal-architecture`):
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
interface IdempotencyStore {
|
|
66
|
+
tryClaim(key: string, ttl: Duration): Promise<Result<'claimed' | 'already-processed', StoreError>>;
|
|
67
|
+
markCompleted(key: string): Promise<Result<void, StoreError>>;
|
|
68
|
+
release(key: string): Promise<Result<void, StoreError>>;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Adapters (provided by packs):
|
|
73
|
+
|
|
74
|
+
- **Redis adapter** — high volume, low latency
|
|
75
|
+
- **Postgres adapter** — default for low-volume webhooks (uses `INSERT ... ON CONFLICT DO NOTHING` for atomic claim)
|
|
76
|
+
- **In-memory adapter** — tests only (composes with `void-testing` nullable infrastructure)
|
|
77
|
+
|
|
78
|
+
The store is the consumer dedup substrate. Process restart does not lose claims.
|
|
79
|
+
|
|
80
|
+
### Default TTL: 7 days
|
|
81
|
+
|
|
82
|
+
Long enough for most provider retry windows. Override per handler.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Outbox pattern — for "DB write + external notification"
|
|
87
|
+
|
|
88
|
+
When a business operation must (a) update the DB AND (b) notify an external system, doing them in sequence creates an inconsistency window:
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// banned (without outbox)
|
|
92
|
+
await db.transaction(async (tx) => {
|
|
93
|
+
await tx.insert(orders).values(order);
|
|
94
|
+
});
|
|
95
|
+
await stripe.refunds.create({ charge: order.chargeId });
|
|
96
|
+
// if Stripe call fails, DB has the refund record but Stripe doesn't
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### With outbox
|
|
100
|
+
|
|
101
|
+
The DB write AND the "event to publish" sit in the SAME transaction:
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
await db.transaction(async (tx) => {
|
|
105
|
+
await tx.insert(orders).values(order);
|
|
106
|
+
await tx.insert(domain_events).values({
|
|
107
|
+
aggregate_id: order.id,
|
|
108
|
+
event_type: 'OrderRefunded',
|
|
109
|
+
payload: { chargeId: order.chargeId, amount: order.amount },
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// later: a background dispatcher reads domain_events and publishes
|
|
114
|
+
// (composes with the outbox dispatcher in pack-monorepo / pack-nextjs)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If the transaction commits, the event is durable. If it fails, neither happened. The dispatcher retries the publish until success.
|
|
118
|
+
|
|
119
|
+
The `domain_events` table schema lives in `pack-monorepo` (composes with `void-migrations`).
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Fail-soft outbound HTTP — for a third party you don't control
|
|
124
|
+
|
|
125
|
+
The outbox is for a write that **must** eventually happen. The mirror case is a **read** on the request path that you can survive without: an FX rate, a recommendation, an enrichment lookup. A synchronous call to a vendor you don't control must never be allowed to hang or fail the whole request when that vendor is slow or down.
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// banned: no timeout, no fallback — a flaky vendor takes down your request
|
|
129
|
+
const rates = await fetch('https://fx.example/rates').then((r) => r.json());
|
|
130
|
+
|
|
131
|
+
// fail-soft: bounded time + graceful degrade
|
|
132
|
+
async function getRates(cache: RatesCache): Promise<Rates> {
|
|
133
|
+
try {
|
|
134
|
+
const res = await fetch('https://fx.example/rates', { signal: AbortSignal.timeout(2000) });
|
|
135
|
+
if (!res.ok) throw new Error(`fx ${res.status}`);
|
|
136
|
+
const rates = parseRates(await res.json());
|
|
137
|
+
await cache.set(rates); // refresh the fallback for next time
|
|
138
|
+
return rates;
|
|
139
|
+
} catch (err) {
|
|
140
|
+
logger.warn('fx rates degraded, serving last-known', { err }); // observable, not silent
|
|
141
|
+
return cache.getLastKnown() ?? DEFAULT_RATES; // degrade, do not fail the request
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Three rules:
|
|
147
|
+
|
|
148
|
+
1. **Always bound the time** — `AbortSignal.timeout(ms)`. An unbounded `fetch` inherits the vendor's worst day.
|
|
149
|
+
2. **Retry only idempotent reads, with a cap** — a bounded retry (2-3, with backoff) for a GET; never auto-retry a non-idempotent POST (that is the outbox's job, with a dedup key).
|
|
150
|
+
3. **Decide critical vs degradable up front.** Critical (payment authorize) → surface the failure to the caller, do not fake success. Degradable (rates, recommendations) → fall back to a cached/default value and log the degradation. The failure mode is a deliberate choice, never an unhandled throw.
|
|
151
|
+
|
|
152
|
+
This composes with `void-observability` (the degradation is a structured warn, never swallowed) and `void-functional` (the outcome is a value — `Rates` or the fallback — not an exception that escapes the boundary).
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Job safety — the canonical pattern
|
|
157
|
+
|
|
158
|
+
Same shape as webhooks, with explicit state machine (composes with `void-functional` discriminated unions):
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
type JobState =
|
|
162
|
+
| { kind: 'queued'; id: JobId; payload: unknown; queuedAt: IsoDate }
|
|
163
|
+
| { kind: 'in-flight'; id: JobId; startedAt: IsoDate; attempt: number }
|
|
164
|
+
| { kind: 'completed'; id: JobId; completedAt: IsoDate; result: unknown }
|
|
165
|
+
| { kind: 'failed'; id: JobId; failedAt: IsoDate; attempt: number; lastError: string }
|
|
166
|
+
| { kind: 'dead-lettered'; id: JobId; finalError: string; attempts: number };
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Transitions are explicit. No "did it succeed? unclear" state.
|
|
170
|
+
|
|
171
|
+
The target shape is a `withJobSafety()` wrapper. **Not yet shipped** — `pack-nextjs`
|
|
172
|
+
ships `withWebhookSafety` today; `withJobSafety` / `withCronSafety` are the planned
|
|
173
|
+
Phase E form (see the pack README). Until they land, apply this shape by hand; do
|
|
174
|
+
not import a wrapper that does not exist yet.
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
export const refundOrderJob = withJobSafety({
|
|
178
|
+
dedupKey: (input) => `refund:${input.orderId}`,
|
|
179
|
+
maxAttempts: 5,
|
|
180
|
+
backoff: 'exponential-with-jitter',
|
|
181
|
+
store: jobIdempotencyStore,
|
|
182
|
+
handler: async (input) => refundOrder(deps, input),
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Retries — exponential backoff + jitter
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
attempt 1: 1s + jitter(0–1s)
|
|
192
|
+
attempt 2: 2s + jitter(0–2s)
|
|
193
|
+
attempt 3: 4s + jitter(0–4s)
|
|
194
|
+
attempt 4: 8s + jitter(0–8s)
|
|
195
|
+
attempt 5: 16s + jitter(0–16s)
|
|
196
|
+
DLQ
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Jitter prevents thundering herd (multiple jobs failing simultaneously and retrying in sync).
|
|
200
|
+
|
|
201
|
+
### Max attempts default: 3–5
|
|
202
|
+
|
|
203
|
+
After exhaustion, dead-letter and alert. Beyond that, the failure is structural; a human must look.
|
|
204
|
+
|
|
205
|
+
### Banned
|
|
206
|
+
|
|
207
|
+
- Unbounded retries
|
|
208
|
+
- Custom retry loops in business code (use the queue library's semantics)
|
|
209
|
+
- Catching exceptions and silently retrying
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Cron safety — overlap protection
|
|
214
|
+
|
|
215
|
+
Same status as `withJobSafety` above: `withCronSafety` is the planned Phase E shape,
|
|
216
|
+
not yet shipped by `pack-nextjs`. Apply it by hand until it lands.
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
export const dailyReportCron = withCronSafety({
|
|
220
|
+
name: 'daily-report',
|
|
221
|
+
overlapStrategy: 'skip-if-running', // or 'queue-up'
|
|
222
|
+
handler: async () => generateDailyReport(deps),
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
The wrapper acquires a Postgres advisory lock keyed by cron name. If the previous run is still in flight, skip with a structured log entry. Composes with `void-observability`.
|
|
227
|
+
|
|
228
|
+
### Banned
|
|
229
|
+
|
|
230
|
+
- Cron jobs that take longer than the cron interval without overlap protection — they will stack and crash the workers.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Composition with other skills
|
|
235
|
+
|
|
236
|
+
- **With `void-observability`**: trace propagates across job / webhook / queue boundaries via the message envelope. Job lifecycle events (queued / in-flight / completed / failed / dead-lettered) are structured logs.
|
|
237
|
+
- **With `void-security-guidance`**: signature verification + replay window + signed message envelopes.
|
|
238
|
+
- **With `void-migrations`**: `domain_events` outbox table schema goes through the migrations discipline.
|
|
239
|
+
- **With `void-tdd`**: idempotency is testable. Test: same event delivered twice → same final state. Test: signature missing → reject.
|
|
240
|
+
- **With `void-hexagonal-architecture`**: webhook handler at adapter boundary, business logic in use-case. `IdempotencyStore` as port.
|
|
241
|
+
- **With `void-functional`**: job state as discriminated union. `Result<JobOutcome, JobError>` everywhere.
|
|
242
|
+
- **With `void-code-review`**: flags missing signature verification, missing idempotency check, save-then-publish without outbox, custom retry loops in business code.
|
|
243
|
+
- **With `void-commit-discipline`**: webhook handler commits' "why" mentions the provider + the idempotency strategy.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Companion hooks
|
|
248
|
+
|
|
249
|
+
None directly in core. The discipline is encoded in `pack-monorepo` / `pack-nextjs` wrappers (`withWebhookSafety`, `withJobSafety`, `withCronSafety`) and surfaced via `void-code-review` flags.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Anti-rules
|
|
254
|
+
|
|
255
|
+
- MUST NOT decide queue technology (pack concern — BullMQ vs Inngest vs Trigger.dev vs Vercel Cron).
|
|
256
|
+
- MUST NOT decide alerting thresholds (ops concern).
|
|
257
|
+
- MUST NOT silently allow non-idempotent handlers.
|
|
258
|
+
- MUST NOT skip signature verification.
|
|
259
|
+
- MUST NOT use in-memory dedup that loses state on restart.
|
|
260
|
+
- MUST NOT permit unbounded retries.
|
|
261
|
+
- MUST NOT skip the outbox pattern when DB + external are both modified.
|
|
262
|
+
- MUST NOT call an outbound third party on the request path without a timeout and a decided failure mode (surface if critical, degrade if not).
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## When you are stuck
|
|
267
|
+
|
|
268
|
+
| Problem | Solution |
|
|
269
|
+
|---|---|
|
|
270
|
+
| Same Stripe event processed twice | Idempotency key not stored, or check happens after mutation. Order: verify → dedup → handle. |
|
|
271
|
+
| Webhook handler slow → timeout → retry → duplicate work | Make handler fast: enqueue a job and return 200 immediately. The job handles idempotency. |
|
|
272
|
+
| A vendor API call sometimes hangs and stalls the whole request | Bound it with `AbortSignal.timeout`; decide critical (surface) vs degradable (cached/default fallback + a warn log). See "Fail-soft outbound HTTP". |
|
|
273
|
+
| Job lost after worker crash | Queue lib should re-deliver. Verify your queue is durable (BullMQ default is durable). |
|
|
274
|
+
| Cron stacking | `withCronSafety()` with skip-if-running. |
|
|
275
|
+
| External call fails after DB commit | Outbox pattern. Both in one transaction. |
|
|
276
|
+
| Need exactly-once | You probably don't. At-least-once + dedup covers the case. If truly required, consult the queue library's two-phase commit story. |
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Final rule
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
Every async boundary → verify, dedup, handle, mark. Outbox for DB+notify. Bounded retries with backoff+jitter. DLQ on exhaustion.
|
|
284
|
+
Otherwise → it is not voidcorp async-safety.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
The network does not care about your assumptions. Code as if every message arrives N times.
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
triggers:
|
|
7
|
+
globs: ["**/webhooks/**", "**/jobs/**", "**/queues/**", "**/workers/**", "**/cron/**", "**/*.worker.ts"]
|
|
8
|
+
owner: folpe
|
|
9
|
+
runtimes: [claude, codex]
|
|
10
|
+
enforcement:
|
|
11
|
+
floor: ci
|
|
12
|
+
inline:
|
|
13
|
+
claude: active
|
|
14
|
+
codex: active
|
|
15
|
+
hermes: ci-only
|
|
16
|
+
eval_targets: [claude/anthropic/opus]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Sources for `void-audit` (see `docs/plans/skill-audits/void-audit.md` for the full audit).
|
|
2
|
+
|
|
3
|
+
Original to void-machine. It wraps this repository's own CLI, so there is no upstream skill to
|
|
4
|
+
distil: the subject did not exist anywhere else.
|
|
5
|
+
|
|
6
|
+
Provenance rather than inspiration: it was a slash command under `packages/core/commands/`,
|
|
7
|
+
shipped there on 2026-06-04 because the plugin carried no in-session ergonomics at the time and a
|
|
8
|
+
skill was not invocable from the keyboard. Claude Code has since merged commands into skills, and
|
|
9
|
+
neither Codex nor Kimi ever had the command format, so the command was Claude-only for a reason
|
|
10
|
+
that had expired. Converted on 2026-08-19, keeping its name and its `allowed-tools`, gaining
|
|
11
|
+
`disable-model-invocation: true` — the gesture is typed by a human, never guessed by the model.
|
|
12
|
+
|
|
13
|
+
Rejected while converting: letting the model invoke it on its own. A health check, an audit or a
|
|
14
|
+
graph report that fires unprompted arrives when nobody asked and nobody acts on it, and it spends
|
|
15
|
+
a screen doing so.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-audit
|
|
3
|
+
description: Run the outbound audit over local mission events and surface skills that never fire, upstream deprecations and matrix conflicts, as proposals a human disposes of.
|
|
4
|
+
allowed-tools: Bash(void-machine:*) Bash(npx:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# void-audit
|
|
8
|
+
|
|
9
|
+
The harness accumulates. This asks which parts of it are still earning their place.
|
|
10
|
+
|
|
11
|
+
**Attribution**: see `.source`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## When it fires
|
|
16
|
+
|
|
17
|
+
Only when a human asks. A harness that audits itself unprompted starts proposing deletions in
|
|
18
|
+
the middle of someone's work, which is the surest way to have every proposal ignored.
|
|
19
|
+
|
|
20
|
+
The moment worth running it is periodic and deliberate: alongside `void-retrospective`, or before a
|
|
21
|
+
release, when there is appetite to actually remove something.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Run it
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
void-machine audit
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or `npx voidmachine audit` when the CLI is not on PATH.
|
|
32
|
+
|
|
33
|
+
It reads local mission events from `.void/machine/runs/<mission-id>/events.jsonl`, written by the
|
|
34
|
+
activation meter, plus read-only legacy usage logs. Everything is local; nothing is sent
|
|
35
|
+
anywhere.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Read it
|
|
40
|
+
|
|
41
|
+
The report joins skills, agents, hooks, their graph relations, human-session activations, outcomes,
|
|
42
|
+
and static cost. It proposes one of five actions: repair telemetry, repair failures, wire an orphan,
|
|
43
|
+
tune/fuse low-yield overlap, or review retirement. Three things to say about it, in this order:
|
|
44
|
+
|
|
45
|
+
1. **What the data can support.** A skill absent from the events is a skill that did not fire in
|
|
46
|
+
the observed window. It is not a skill nobody needs, and the difference is the whole
|
|
47
|
+
interpretation. Say the window and the event count.
|
|
48
|
+
2. **What is worth proposing.** A wiring fix, trigger tuning, fusion, rewrite, or retirement review.
|
|
49
|
+
One line each, with what it would cost to be wrong. Ordinary tuning needs the behavior window;
|
|
50
|
+
retirement needs at least twenty human sessions.
|
|
51
|
+
3. **What the data cannot support yet.** Insufficient events is a finding, not a failure: it
|
|
52
|
+
means the harness has not been used enough in this project for the question to have an
|
|
53
|
+
answer.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## What it must not do
|
|
58
|
+
|
|
59
|
+
**Nothing is applied.** Every output is a proposal; a human turns it into a pull request or
|
|
60
|
+
declines it. Auto-applying a deprecation from usage data would delete the skill that fires twice
|
|
61
|
+
a year and matters both times.
|
|
62
|
+
|
|
63
|
+
**No inference from silence.** A component absent from the events is absent from the events.
|
|
64
|
+
Self-host and smoke missions never count as human adoption evidence. A whole component family with
|
|
65
|
+
broken telemetry is repaired before any member is judged.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Red flags
|
|
70
|
+
|
|
71
|
+
| Rationalization | Reality |
|
|
72
|
+
|---|---|
|
|
73
|
+
| "Nothing invoked it, remove it" | Removal is a human decision with its own reasoning. Propose it; say what breaks if the reading is wrong. |
|
|
74
|
+
| "Insufficient data, so the audit failed" | It succeeded and reported an absence of evidence. That is the honest answer. |
|
|
75
|
+
| "I'll open the PR while I'm here" | The proposal is the deliverable. The PR is a separate, deliberate act. |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Composition
|
|
80
|
+
|
|
81
|
+
Upstream: the activation meter writes the events this reads. Adjacent: `void-retrospective` looks at a
|
|
82
|
+
window of engineering signals, this looks at the harness itself. Downstream: an accepted proposal
|
|
83
|
+
is filed through `void-learn`, which owns the HITL capture.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Harness metadata for this skill. Not part of the Agent Skills
|
|
2
|
+
# specification, and never copied into a consumer project: the SKILL.md
|
|
3
|
+
# beside it stays portable and validates against the official six fields.
|
|
4
|
+
# Read by this repository's graph, and by the installer for `runtimes`.
|
|
5
|
+
kind: action
|
|
6
|
+
owner: folpe
|
|
7
|
+
runtimes: [claude, codex]
|
|
8
|
+
enforcement:
|
|
9
|
+
floor: ci
|
|
10
|
+
inline:
|
|
11
|
+
claude: active
|
|
12
|
+
codex: active
|
|
13
|
+
hermes: ci-only
|
|
14
|
+
eval_targets: [claude/anthropic/opus]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Sources for `void-autopilot` (see `docs/plans/skill-audits/void-autopilot.md` for the audit):
|
|
2
|
+
|
|
3
|
+
- void-machine `backlog-autopilot`, then the cluster engine that replaced it (this repo) — the
|
|
4
|
+
attended parallel burst, its worktree isolation and its footprint collisions. The continuous
|
|
5
|
+
loop keeps the isolation and the collisions, and drops the integration pull request, its
|
|
6
|
+
reconciliation and its grant.
|
|
7
|
+
- TypeSafe, "Introducing System One models and Jev"
|
|
8
|
+
(https://typesafe.ai/blog/introducing-system-one-models-and-jev) — the cursor between code and
|
|
9
|
+
model: the model renders narrow typed judgments, the code applies the policy. Adapted: each
|
|
10
|
+
judgment is admitted by a Zod schema in the CLI, and a refused answer is never read charitably.
|
|
11
|
+
- GitHub merge queue and auto-merge
|
|
12
|
+
(https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue)
|
|
13
|
+
— the combined commit is rebuilt and retested before every merge, which replaces the
|
|
14
|
+
reconciliation this repo wrote itself. Checks in the queue answer `merge_group`, and a commit
|
|
15
|
+
status triggers no workflow, hence the reviewer's re-run of `independent-review`.
|
|
16
|
+
- git worktrees (native) — per-ticket isolation so parallel edits cannot corrupt one working
|
|
17
|
+
tree. Real filesystem isolation for the working tree, the index and `HEAD`, and nothing else:
|
|
18
|
+
the shared refs and config are fingerprinted around each unit.
|
|
19
|
+
- Codex subagents (native) — workers when no cockpit surface is available. Subagents share
|
|
20
|
+
filesystem access, so the isolation comes from the pre-created worktrees and explicit workdirs,
|
|
21
|
+
never from an assumed sandbox.
|