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,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-brainstorm
|
|
3
|
+
description: "Engage on a raw idea, or the moment an exchange settles a behaviour, boundary or trade-off: pressure-test, one question at a time, 2-3 approaches, spec written and approved before any code."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# brainstorm — voidcorp craftsman edition
|
|
7
|
+
|
|
8
|
+
Start by understanding the project context. Then ask questions one at a time to refine the idea. Once you understand what is being built, present the design in sections, get approval, write the spec to `docs/specs/`, and transition to `void-plan`. **No implementation skill, no code, no scaffolding until the spec is written and approved.**
|
|
9
|
+
|
|
10
|
+
**Attribution**: see `.source`. Primary source: superpowers/brainstorm; the upstream idea-pressure-test mode is the distilled `gstack:/office-hours` diagnostic, vendored for void-machine.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Step 0 — Notice that the exchange has become design
|
|
15
|
+
|
|
16
|
+
This skill was only ever reached when someone asked for it, which is the half of
|
|
17
|
+
the problem nobody was solving. Design does not usually announce itself: it
|
|
18
|
+
arrives in the middle of a conversation about something else, and by the time
|
|
19
|
+
anyone would think to invoke a skill the decisions have already been made and
|
|
20
|
+
lost. Three of the structural decisions in this repository on 2026-08-17 were
|
|
21
|
+
taken that way, written up afterwards from memory rather than from the exchange.
|
|
22
|
+
|
|
23
|
+
Engage the moment the conversation starts fixing any of these, without being
|
|
24
|
+
asked:
|
|
25
|
+
|
|
26
|
+
- **A behaviour is being settled.** What the system does in a case nobody had
|
|
27
|
+
described yet, and the answer will outlive the conversation.
|
|
28
|
+
- **A boundary is being drawn.** What owns what, what may depend on what, where
|
|
29
|
+
a responsibility stops.
|
|
30
|
+
- **A trade-off is being taken.** Two credible options are compared and one is
|
|
31
|
+
chosen, especially when the losing one has real merit.
|
|
32
|
+
- **A name is being fixed** for a concept the codebase will carry, or a
|
|
33
|
+
convention is being set that future work must follow.
|
|
34
|
+
- **The same design question comes back a third time** in one session. Returning
|
|
35
|
+
to it means it was never actually settled.
|
|
36
|
+
|
|
37
|
+
Say what you noticed, in one sentence, and start the process at Step 1. Do not
|
|
38
|
+
ask for permission to think, and do not stop the work in flight: an exchange can
|
|
39
|
+
carry on while its design is being written down.
|
|
40
|
+
|
|
41
|
+
**Do NOT engage for**: a bug with one correct answer, a mechanical refactor, a
|
|
42
|
+
naming choice local to one function, or a preference with no consequence beyond
|
|
43
|
+
the file being edited. The bar is whether someone six months out would need to
|
|
44
|
+
know *why*. If they would not, this is not design, and invoking here would teach
|
|
45
|
+
everyone to skip Step 0 when it matters.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## HARD GATE
|
|
50
|
+
|
|
51
|
+
Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until:
|
|
52
|
+
|
|
53
|
+
1. The spec is written to `docs/specs/YYYY-MM-DD-<topic>.md`
|
|
54
|
+
2. The spec has passed self-review
|
|
55
|
+
3. The user has explicitly approved the written spec
|
|
56
|
+
|
|
57
|
+
**This applies to EVERY project, regardless of perceived simplicity.**
|
|
58
|
+
|
|
59
|
+
The anti-pattern is "this is too simple to need a design." Every project goes through this process. Simple projects' specs are short (a few sentences for truly trivial ones), but they MUST be written and approved.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Ingesting a forge spec
|
|
64
|
+
|
|
65
|
+
If `docs/specs/` holds a spec with `source: forge` in its frontmatter (the forge→harness artifact contract), the up-front thinking is already done. **Verify and fill the gaps — do not re-ask what the spec already answers.** The 18 recon variables cover persona, pain, positioning, competition, pricing, and the visual identity; the winning design and critique verdict are attached. Read them, confirm they still hold, and ask only about what is missing (a partial spec — recon without critique, or a field absent in an older `forge_version` — is ingested for what it has, with the holes listed as the only open questions). Then go straight to writing/approving the spec. Do not restart the interview from scratch.
|
|
66
|
+
|
|
67
|
+
## Pressure-testing a raw idea (upstream mode)
|
|
68
|
+
|
|
69
|
+
Runs ONLY when the input is a raw *product idea* ("I want to build X"), not an already-scoped feature or a `source: forge` spec (that thinking is done). Before designing the right solution, make sure it is the right *problem*. This is the distilled `gstack:/office-hours` diagnostic, vendored here. Ambition is pushed for every subject in Step 4b, not here. Once premises hold, resume the normal design process (Step 1 onward) in the collaborative voice; this adversarial posture is scoped to this mode only.
|
|
70
|
+
|
|
71
|
+
**Posture: diagnose, don't cheerlead.** Take a position on every answer and say what evidence would change your mind. No "interesting approach", no "that could work", no "you might consider" — say why it works or why it doesn't, and challenge the strongest version of the idea, never a strawman. The first answer is the polished one; push once, then again — the real answer comes on the second or third push. **Pre-empt the easy outs before they're used**: a waitlist signup is not "upset", interest is free, "people would love it" costs nothing. End every turn with one concrete assignment — a thing to go do or find out — not a question left dangling; and when the honest answer is "I haven't watched a real person struggle with this", name *that* as the finding, it is the most valuable output of the session.
|
|
72
|
+
|
|
73
|
+
**The six forcing questions.** Ask one at a time; push until the answer is specific, evidence-based, and a little uncomfortable. Route by stage — you rarely need all six: pre-product → Q1,Q2,Q3 · has users → Q2,Q4,Q5 · paying → Q4,Q5,Q6 · pure infra → Q2,Q4.
|
|
74
|
+
|
|
75
|
+
1. **Demand reality.** Strongest evidence someone would be genuinely upset if this vanished tomorrow — not "interested", not a waitlist signup. Push for a paying / expanding / workflow-dependent behavior. Red flag: "people say it's interesting", "500 signups".
|
|
76
|
+
2. **Status quo.** What are users doing to solve this today, even badly, and what does that workaround cost them? Red flag: "nothing exists" — usually the pain isn't sharp enough.
|
|
77
|
+
3. **Desperate specificity.** Name the actual human who needs this most — title, what gets them promoted or fired. Red flag: category answers ("healthcare enterprises"); you can't email a category.
|
|
78
|
+
4. **Narrowest wedge.** Smallest version someone would pay for *this week*, before the platform exists. Red flag: "we need the full platform first" — attachment to architecture over value.
|
|
79
|
+
5. **Observation & surprise.** Have you watched someone use it without helping — what did they do that surprised you? Red flag: surveys and demo calls (surveys lie, demos are theater).
|
|
80
|
+
6. **Future-fit.** If the world looks meaningfully different in 3 years, does this become more essential or less? Red flag: "the market grows 20%/yr" — every competitor cites the same tailwind.
|
|
81
|
+
|
|
82
|
+
**Escape hatch.** If the user says "just do it": ask the 2 most critical remaining questions for their stage, then move on. If they push back a second time, respect it and proceed. Only a fully-formed plan with real evidence (named users, revenue) earns a full skip — and even then, still confirm the premises and generate alternatives.
|
|
83
|
+
|
|
84
|
+
## Process
|
|
85
|
+
|
|
86
|
+
### Step 1 — Explore project context
|
|
87
|
+
|
|
88
|
+
Check the current state: existing files, `docs/`, recent commits, related specs in `docs/specs/`. If a similar spec exists, reference it. A `source: forge` spec is the strongest such reference (see "Ingesting a forge spec" above).
|
|
89
|
+
|
|
90
|
+
### Step 2 — Scope check (multi-subsystem decomposition)
|
|
91
|
+
|
|
92
|
+
If the request describes multiple independent subsystems ("build a platform with chat, file storage, billing, analytics"), flag this immediately. Help the user decompose into sub-projects:
|
|
93
|
+
|
|
94
|
+
- What are the independent pieces?
|
|
95
|
+
- How do they relate?
|
|
96
|
+
- What order should they be built?
|
|
97
|
+
|
|
98
|
+
Each sub-project gets its own spec → plan → implementation cycle. Brainstorm the first sub-project through the normal flow.
|
|
99
|
+
|
|
100
|
+
### Step 3 — Visual companion offer (optional, opt-in)
|
|
101
|
+
|
|
102
|
+
If upcoming questions will involve visual content (mockups, layouts, diagrams), offer the browser-based companion ONCE for consent. The offer is its OWN message — do not combine with clarifying questions.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
"Some of what we are working on might be easier to explain if I can show it
|
|
106
|
+
to you in a web browser. I can put together mockups, diagrams, comparisons.
|
|
107
|
+
This feature is new and can be token-intensive. Want to try it? (Requires
|
|
108
|
+
opening a local URL.)"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Wait for the user's response. If they decline, proceed in text-only.
|
|
112
|
+
|
|
113
|
+
### Step 4 — Ask clarifying questions
|
|
114
|
+
|
|
115
|
+
- One question at a time. Never batch.
|
|
116
|
+
- Multi-choice preferred when applicable (2–4 distinct mutually-exclusive options with brief descriptions and a recommended option labeled).
|
|
117
|
+
- Open-ended fine when no obvious options exist.
|
|
118
|
+
- Focus on: purpose, constraints, success criteria.
|
|
119
|
+
|
|
120
|
+
**Precision & grounding** (vendored from gstack `/spec`) — ambiguity is a bug; find it:
|
|
121
|
+
|
|
122
|
+
- **Read the code before asking.** Do not ask what you can read. Grep/read at least one real piece of evidence and cite `path:line` in the question. "Don't ask what you can read" beats an interview that ignores the repo.
|
|
123
|
+
- **Quantify.** "Several files" is not an answer — find the exact count. "Improves performance" is not a goal — state the metric and target.
|
|
124
|
+
- **Five "why" questions must be answered without hand-waving** before design: **who** is affected, the **verified current** behavior, the **desired** behavior, **why now**, and the **observable/measurable** done-signal.
|
|
125
|
+
- **Think in failure modes** as a first-class axis: empty / null / enormous / duplicated / wrong-role / called-twice.
|
|
126
|
+
|
|
127
|
+
### Step 4b — Push the ambition (the 10x move)
|
|
128
|
+
|
|
129
|
+
Runs on **every brainstorm, whatever the subject** — a product idea, a guard, a contract, a migration. Demand pressure-testing above belongs to a raw product idea, because a merge gate has no market to interrogate; ambition is not scoped that way, since timidity is not a property of product ideas. This pass lived inside the product-idea mode and therefore never fired on a technical subject, which is most of what gets designed here.
|
|
130
|
+
|
|
131
|
+
Before settling, deliberately drop the self-imposed constraints: what does this look like at 10x — no resource limit, no "we can't because"? What is the *coolest* version the user has not considered? Carry that into Step 5: always include one "ideal / most ambitious" path and one "creative-lateral" reframing, not just the safe increment. YAGNI still prunes the *final* scope — but prune down from an ambitious set; do not start timid.
|
|
132
|
+
|
|
133
|
+
### Step 5 — Propose 2–3 approaches
|
|
134
|
+
|
|
135
|
+
Present alternatives conversationally with trade-offs. Lead with the recommendation and the reason. Let the user redirect.
|
|
136
|
+
|
|
137
|
+
### Step 6 — Present the design
|
|
138
|
+
|
|
139
|
+
Once the intent is clear, present the design in sections:
|
|
140
|
+
|
|
141
|
+
- Architecture
|
|
142
|
+
- Components
|
|
143
|
+
- Data flow
|
|
144
|
+
- Error handling
|
|
145
|
+
- Testing approach
|
|
146
|
+
- Rollout / phases (if non-trivial)
|
|
147
|
+
- TDD mode per implementation phase (strict / souple / exploratory — composes with `void-tdd` skill)
|
|
148
|
+
|
|
149
|
+
Get approval AFTER each section before moving on. Scale each section to its complexity: a few sentences for simple projects, 200–300 words for nuanced ones.
|
|
150
|
+
|
|
151
|
+
### Step 7 — Write the spec
|
|
152
|
+
|
|
153
|
+
Write to `docs/specs/YYYY-MM-DD-<topic>.md` and commit. Frontmatter:
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
---
|
|
157
|
+
title: <topic>
|
|
158
|
+
date: YYYY-MM-DD
|
|
159
|
+
status: in-design # → approved
|
|
160
|
+
author: <user> + Claude/Codex
|
|
161
|
+
ticket: <tracker id, once `void-ticket` has created it; leave empty until then>
|
|
162
|
+
related: [...]
|
|
163
|
+
---
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`void-ticket` is half of a link that must exist in both directions. The spec is where
|
|
167
|
+
the reasoning lives and it belongs to the project, so it survives the tracker;
|
|
168
|
+
the ticket is execution state and is mutable by nature. Someone reading the
|
|
169
|
+
ticket has to be able to reach the reasoning, and someone reading the spec has
|
|
170
|
+
to be able to see whether it was ever executed. `void-ticket` fills this
|
|
171
|
+
field when it creates the ticket and puts the reverse link in the ticket body.
|
|
172
|
+
|
|
173
|
+
### Step 8 — Spec self-review pass
|
|
174
|
+
|
|
175
|
+
Read the spec with fresh eyes:
|
|
176
|
+
|
|
177
|
+
1. **Placeholder scan** — any "TBD", "TODO", incomplete sections, vague requirements? Fix.
|
|
178
|
+
2. **Internal consistency** — do sections contradict each other? Does the architecture match the feature descriptions?
|
|
179
|
+
3. **Scope check** — is this focused enough for a single implementation plan, or does it need decomposition?
|
|
180
|
+
4. **Ambiguity check** — could any requirement be interpreted two different ways? If so, pick one and make it explicit.
|
|
181
|
+
|
|
182
|
+
Fix issues inline. No need to re-review — just fix and move on.
|
|
183
|
+
|
|
184
|
+
### Step 9 — User reviews the written spec
|
|
185
|
+
|
|
186
|
+
Ask the user to review the spec file before proceeding:
|
|
187
|
+
|
|
188
|
+
> "Spec written and committed to `docs/specs/<file>.md`. Please review and let me know if you want changes before we start the implementation plan."
|
|
189
|
+
|
|
190
|
+
Wait for the user's response. If they request changes, make them and re-run self-review. Only proceed once the user approves.
|
|
191
|
+
|
|
192
|
+
### Step 10 — Transition to `void-plan`
|
|
193
|
+
|
|
194
|
+
The ONLY post-brainstorming transition. Invoke plan. Do not invoke any other skill (frontend-design, mcp-builder, etc.).
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Design principles
|
|
199
|
+
|
|
200
|
+
### Design for isolation and clarity
|
|
201
|
+
|
|
202
|
+
- Break the system into smaller units, each with one clear purpose.
|
|
203
|
+
- Communicate through well-defined interfaces.
|
|
204
|
+
- Each unit can be understood and tested independently.
|
|
205
|
+
- For each unit, answer: what does it do, how do you use it, what does it depend on?
|
|
206
|
+
|
|
207
|
+
Smaller, well-bounded units are easier to work with — easier for the agent to hold in context, more reliable edits.
|
|
208
|
+
|
|
209
|
+
### Existing codebases
|
|
210
|
+
|
|
211
|
+
- Explore current structure before proposing changes.
|
|
212
|
+
- Follow existing patterns.
|
|
213
|
+
- Improve adjacent code only where it serves the current goal (no unrelated refactor).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Red Flags — thoughts that mean STOP
|
|
218
|
+
|
|
219
|
+
| Thought | Reality |
|
|
220
|
+
|---|---|
|
|
221
|
+
| "This is too simple to need a design" | The gate applies to every project. Write the short version. |
|
|
222
|
+
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
|
|
223
|
+
| "Let me explore the codebase first" | Sure, but the design discipline still applies. |
|
|
224
|
+
| "I can check git/files quickly" | Files lack conversation context. Stay in the process. |
|
|
225
|
+
| "Let me gather information first" | Process telling you HOW to gather information. |
|
|
226
|
+
| "This doesn't need a formal skill" | If a skill exists, use it. |
|
|
227
|
+
| "I'll just do this one thing first" | Check BEFORE doing anything. |
|
|
228
|
+
| "This feels productive" | Undisciplined action wastes time. |
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Key principles
|
|
233
|
+
|
|
234
|
+
- **One question at a time.** Never overwhelm with multiple.
|
|
235
|
+
- **Multi-choice preferred.** Easier to answer than open-ended.
|
|
236
|
+
- **YAGNI ruthlessly.** Remove unnecessary features from all designs.
|
|
237
|
+
- **Explore alternatives.** Always propose 2–3 approaches before settling.
|
|
238
|
+
- **Incremental validation.** Present design, get approval before moving on.
|
|
239
|
+
- **Be flexible.** Go back and clarify when something doesn't make sense.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Composition with other skills
|
|
244
|
+
|
|
245
|
+
- **Raw product idea** ("I have an idea..."): pressure-test it first via the upstream mode above (the vendored `/office-hours` diagnostic), then design. Broader product *roadmap / strategy* routes to `void-plan-review` (CEO lens — challenges a written plan's premise and ambition).
|
|
246
|
+
- **Downstream — `void-plan`**: the ONLY post-brainstorming transition.
|
|
247
|
+
- **With `void-tdd`**: the spec declares the TDD mode for each major implementation step. Plans then uses this.
|
|
248
|
+
- **With `void-hexagonal-architecture` + `void-domain-driven-design`**: these skills inform the design's structure (bounded contexts, ports, aggregates). Brainstorming consumes their vocabulary; does not duplicate their decisions.
|
|
249
|
+
- **With `void-code-review`**: a PR that introduces features without a linked spec gets flagged.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Anti-rules
|
|
254
|
+
|
|
255
|
+
- MUST NOT skip the hard gate.
|
|
256
|
+
- MUST NOT batch multiple questions in one message.
|
|
257
|
+
- MUST NOT decide implementation details (those go to plans).
|
|
258
|
+
- MUST NOT decide product roadmap / strategy (routes to `void-plan-review` CEO lens). It DOES pressure-test a raw idea's demand (the upstream mode) and push ambition on any subject (Step 4b) — both in scope, not delegated.
|
|
259
|
+
- MUST NOT skip the spec-write step "because the conversation is clear."
|
|
260
|
+
- MUST NOT transition to any skill other than `void-plan` post-approval.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Final rule
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
Idea → questions → 2–3 approaches → design in sections → spec written → self-review → user approves → plan.
|
|
268
|
+
Otherwise → it is not voidcorp brainstorm.
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
The hard gate exists because LLM agents write very fast code for very wrong problems. The discipline pays for itself in the first project that does not have to be rewritten.
|
|
@@ -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,39 @@
|
|
|
1
|
+
Sources for `void-checkpoint` (see `docs/plans/skill-audits/void-checkpoint.md` for the full audit).
|
|
2
|
+
|
|
3
|
+
Original to void-machine. Written from the failure it is meant to prevent, observed repeatedly
|
|
4
|
+
in this repository: a session ends, the next one re-derives the state from the diff and the
|
|
5
|
+
tracker, and re-attempts something the previous session had already ruled out.
|
|
6
|
+
|
|
7
|
+
Inspirations, none vendored:
|
|
8
|
+
|
|
9
|
+
- gstack `/context-save` and `/context-restore` (https://github.com/garrytan/gstack) — the idea
|
|
10
|
+
that a session boundary deserves a deliberate artefact rather than an ad-hoc note. Rejected
|
|
11
|
+
from it: the save/restore pair as a symmetric mechanism. Restoring is not a skill's job here;
|
|
12
|
+
the next session reads the tracker and the memory, which are authoritative and would be
|
|
13
|
+
duplicated by a restore file. Only the closing half survives.
|
|
14
|
+
|
|
15
|
+
- The programme contract at `.void/program.md` — "the declared progress provider owns mutable
|
|
16
|
+
execution state; the programme never stores a hand-maintained next unit". That rule generalises
|
|
17
|
+
into Step 0's routing table, which is the load-bearing part of the skill.
|
|
18
|
+
|
|
19
|
+
- `void-learn`'s routing-first structure — the first step is deciding *where a fact
|
|
20
|
+
belongs*, not writing it. Same shape, different destinations. Also inherits its rejection of a
|
|
21
|
+
Stop-event hook: a stop payload cannot distinguish an interruption from a closed unit of work,
|
|
22
|
+
and a handoff written on a false positive is authoritative and wrong.
|
|
23
|
+
|
|
24
|
+
- The proof-freshness rule is lifted from this repository's own autopilot reconciliation
|
|
25
|
+
(`proof-invalidation.ts`, DEV-464): a verification is a claim about a specific tree, and
|
|
26
|
+
reusing it after a rebase asserts something about a tree that no longer exists. The same
|
|
27
|
+
reasoning applies to a sentence in a handoff.
|
|
28
|
+
|
|
29
|
+
- PrimeIntellect `prime-agent` compaction format inspired the cumulative read-files and
|
|
30
|
+
modified-files observations. Only that bounded mechanical structure is adapted; its semantic
|
|
31
|
+
summary is rejected because it lacks this skill's dead ends and labelled assumptions.
|
|
32
|
+
|
|
33
|
+
Strategy: original, distilled from observed failures. What it deliberately does NOT do:
|
|
34
|
+
|
|
35
|
+
- summarise the session — the diff, the commit messages and the tracker already carry what
|
|
36
|
+
happened; a narrative duplicates them and rots faster;
|
|
37
|
+
- restore context on the next session — that is a read of authoritative sources, not a replay;
|
|
38
|
+
- write semantic residue automatically — closing is a judgement about a unit of work. The
|
|
39
|
+
`PreCompact` hook owns only a delimited block of observed mechanical facts.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: void-checkpoint
|
|
3
|
+
description: Write .void/machine/checkpoint.md before a clear, an interruption, or the end of a day, so the next session resumes without re-deriving anything. Keeps only what no other artefact holds.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# checkpoint
|
|
7
|
+
|
|
8
|
+
A session ends. The next one starts with an empty context and your name on the branch.
|
|
9
|
+
|
|
10
|
+
Everything you currently hold — why that approach was abandoned, which result is proven and
|
|
11
|
+
which is assumed, what you would have done next — evaporates in about a second. Reconstructing
|
|
12
|
+
it costs the next session an hour, and it usually reconstructs it wrong, because the cheapest
|
|
13
|
+
thing to recover is what you did and the most expensive is what you ruled out.
|
|
14
|
+
|
|
15
|
+
This skill spends five minutes to buy that hour back.
|
|
16
|
+
|
|
17
|
+
**Attribution**: see `.source`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## When it fires
|
|
22
|
+
|
|
23
|
+
This is a **graceful shutdown**: the moment you deliberately stop, chosen by a human, not
|
|
24
|
+
guessed by a runtime. Three of them, and they are the ones that actually lose work:
|
|
25
|
+
|
|
26
|
+
- **Before a `clear`.** The context is about to be discarded on purpose. Whatever was only in
|
|
27
|
+
it dies here unless it is written down first.
|
|
28
|
+
- **Before an interruption.** You are stopping mid-unit, and the reason you stopped is itself
|
|
29
|
+
part of what the next session needs.
|
|
30
|
+
- **At the end of a day.** The gap is long enough that you will return as a stranger to your
|
|
31
|
+
own work.
|
|
32
|
+
|
|
33
|
+
Two more, less common and just as valid: the context window is close to its limit and the work
|
|
34
|
+
continues afterwards, or the work is about to pass to another agent, machine, or person.
|
|
35
|
+
|
|
36
|
+
Do NOT fire when the work is genuinely finished and nothing is open: there is nothing to
|
|
37
|
+
resume, and a checkpoint written for a closed unit becomes a stale note nobody deletes.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 0 — Route, before you write a word
|
|
42
|
+
|
|
43
|
+
The failure mode of every checkpoint is that it becomes a second copy of state that already lives
|
|
44
|
+
somewhere authoritative. Two copies of a fact means one of them is wrong within a day, and the
|
|
45
|
+
reader cannot tell which.
|
|
46
|
+
|
|
47
|
+
So the first move is triage. For every fact you are tempted to write down:
|
|
48
|
+
|
|
49
|
+
| The fact is… | It belongs in | Never in the checkpoint |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Execution state — status, assignee, blockers, links | the declared **progress source** | a hand-maintained current or next unit |
|
|
52
|
+
| Global programme context, phase, plan and spec | **`.void/program.md`** | a session observation |
|
|
53
|
+
| What the code now does | the **diff and its commit messages** | a prose summary of the change |
|
|
54
|
+
| A durable rule, preference, or convention | **doctrine** (via `void-learn`) | a paragraph the next session must re-read forever |
|
|
55
|
+
| A design decision with a credible alternative | an **ADR** | a bullet that loses its reasoning |
|
|
56
|
+
|
|
57
|
+
What survives that filter is the checkpoint's actual subject: **the things no artefact holds** —
|
|
58
|
+
the dead ends, the unproven assumptions, the freshness of your evidence, and the exact next
|
|
59
|
+
move. That list is short. A checkpoint that is long has failed the triage.
|
|
60
|
+
|
|
61
|
+
If routing sends something to a shared owner, propose that write and get the required human
|
|
62
|
+
approval before applying it. When the owner is available, write it there **first**, then reference
|
|
63
|
+
it. A checkpoint that promises "I'll file this later" is where facts go to die.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Step 1 — Write what nothing else holds
|
|
68
|
+
|
|
69
|
+
An argument passed with the invocation is what the human specifically wants carried
|
|
70
|
+
over. Cover it, but never let it stand in for the routing above: what they name is one
|
|
71
|
+
item of the residue, not the whole of it.
|
|
72
|
+
|
|
73
|
+
In this order, because it is the order the next session needs it.
|
|
74
|
+
|
|
75
|
+
**1. Where you are.** Branch, worktree, and whether anything is uncommitted. One line. If the
|
|
76
|
+
working tree is dirty, say exactly which files and why they were left that way
|
|
77
|
+
— an unexplained dirty tree reads as an interrupted edit and gets discarded.
|
|
78
|
+
|
|
79
|
+
**2. What is proven, and against what.** Not "tests pass". Which command, on which commit. A
|
|
80
|
+
proof is a claim about a specific tree; after a rebase or a dependency change it is a claim
|
|
81
|
+
about a tree that no longer exists. Say `pnpm verify green on a1b2c3d`, not `everything green`.
|
|
82
|
+
If you did not run it, say you did not run it.
|
|
83
|
+
|
|
84
|
+
**3. What you tried that did not work.** The most valuable and most often omitted section. For
|
|
85
|
+
each dead end: what you attempted, what actually happened, and why you stopped. Without it the
|
|
86
|
+
next session repeats it — confidently, because it looks like the obvious first idea. This is
|
|
87
|
+
the section to write even when it is unflattering.
|
|
88
|
+
|
|
89
|
+
**4. What you assumed.** Label every unverified belief as unverified. "The adapter probably
|
|
90
|
+
caches" and "the adapter caches, confirmed in `cache.ts:88`" are different claims, and a
|
|
91
|
+
checkpoint that flattens them costs half a day. If an assumption is load-bearing, say what would
|
|
92
|
+
falsify it.
|
|
93
|
+
|
|
94
|
+
**5. What is open.** Blockers, decisions waiting on a human, questions with no answer yet. Each
|
|
95
|
+
one with who or what unblocks it.
|
|
96
|
+
|
|
97
|
+
**6. The next action.** Exactly one, exact enough to execute: a command to run, a file and line
|
|
98
|
+
to open, a specific question to ask. "Continue the ticket" is not a next action. "Run
|
|
99
|
+
`pnpm vitest run x.test.ts`; it fails on the third case because the fixture has no `id`" is.
|
|
100
|
+
This is the first physical move for the next session, never a duplicated current or next unit and
|
|
101
|
+
never a priority decision.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 2 — The freshness rule
|
|
106
|
+
|
|
107
|
+
Anything time-relative rots the moment you write it. Convert as you go:
|
|
108
|
+
|
|
109
|
+
- "yesterday", "last week", "recently" → the absolute date.
|
|
110
|
+
- "the latest version" → the version.
|
|
111
|
+
- "the new file" → the path.
|
|
112
|
+
- "he said" / "as discussed" → who, and what they said.
|
|
113
|
+
- "it" and "that" with no antecedent in the same sentence → name the thing.
|
|
114
|
+
|
|
115
|
+
The reader is a stranger with your permissions and none of your context. Write for them.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 3 — Test it before you close
|
|
120
|
+
|
|
121
|
+
Read what you wrote as if you had never seen this work. Then:
|
|
122
|
+
|
|
123
|
+
1. **Can a stranger take the next action without asking a question?** If not, the next action is
|
|
124
|
+
not specific enough.
|
|
125
|
+
2. **Does any line duplicate the progress source, program, diff, or doctrine?** Delete it and link instead.
|
|
126
|
+
3. **Is every claim either proven-with-evidence or labelled as an assumption?**
|
|
127
|
+
4. **Would someone reading only this repeat one of your dead ends?** If yes, the dead end is
|
|
128
|
+
missing or too vague.
|
|
129
|
+
5. **Does it contain a secret, a token, a full prompt, or private source?** Then it does not
|
|
130
|
+
get written anywhere shared. Redact and reference.
|
|
131
|
+
|
|
132
|
+
A checkpoint that fails any of these is not shorter than one that passes — it is longer, and wrong.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Where it is written
|
|
137
|
+
|
|
138
|
+
Write the session residue to **`.void/machine/checkpoint.md`**. This is the canonical local
|
|
139
|
+
checkpoint consumed by `ResumeBundle`; REPLACE it each time rather than appending. It answers one
|
|
140
|
+
question: *what was happening just before the stop*. It lives under `machine/` and is NOT
|
|
141
|
+
committed because it describes one machine at one moment.
|
|
142
|
+
|
|
143
|
+
The checkpoint has no network dependency. If the declared progress source or provider is
|
|
144
|
+
unavailable, record that unresolved gap when it matters and still write
|
|
145
|
+
`.void/machine/checkpoint.md`. Do not turn an unavailable provider into a reason to lose the
|
|
146
|
+
session residue.
|
|
147
|
+
|
|
148
|
+
`.void/program.md` remains the versioned global view: programme identity, plan, spec and optional
|
|
149
|
+
progress locator. The program and checkpoint never store a current or next unit. Mutable progress
|
|
150
|
+
stays with the declared provider; the checkpoint's exact next action is only a local physical
|
|
151
|
+
resume move.
|
|
152
|
+
|
|
153
|
+
One destination per fact. If you cannot decide, the fact probably failed Step 0.
|
|
154
|
+
|
|
155
|
+
### The checkpoint's shape
|
|
156
|
+
|
|
157
|
+
`##` sections, any subset, read leniently. Frontmatter carries `date`, `branch` and `head`; branch
|
|
158
|
+
and HEAD bind the evidence to the tree it describes, and `resume` reports when either moved.
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
---
|
|
162
|
+
date: 2026-08-17
|
|
163
|
+
branch: folpe/dev-621-resume
|
|
164
|
+
head: a1b2c3d
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Objective What this session was for. One line.
|
|
168
|
+
## Position Where that sits in the arc - what is done, what remains.
|
|
169
|
+
## State What is proven, and against which commit.
|
|
170
|
+
## Next action Exactly one, exact enough to execute.
|
|
171
|
+
## Open loops - one per line
|
|
172
|
+
## Dead ends - what was tried, what happened, why you stopped
|
|
173
|
+
## Assumptions - each labelled unverified
|
|
174
|
+
## Working set - the paths that were in hand
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Position is the section people skip and then miss: returning after days, *how far along is this*
|
|
178
|
+
is a different question from *what was I doing*, and nothing else in the repo answers it.
|
|
179
|
+
|
|
180
|
+
Write it with `void-machine resume` in mind — that command reads this file, and reading your own
|
|
181
|
+
checkpoint back is the cheapest test of whether it was worth writing.
|
|
182
|
+
|
|
183
|
+
Before every semantic rewrite, read the current file and preserve the single delimited mechanical
|
|
184
|
+
block from `<!-- void-machine:context-continuity:begin -->` through its matching end marker
|
|
185
|
+
byte-for-byte. A checkpoint written before the product was renamed carries the same block under
|
|
186
|
+
its former name: preserve it just the same, since the hook rewrites it in place on its next write.
|
|
187
|
+
Require exactly one mechanical block; refuse the rewrite when more than one block exists or either
|
|
188
|
+
marker is ambiguous.
|
|
189
|
+
The lifecycle hook owns that block; this skill owns every semantic section around it.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## HITL
|
|
194
|
+
|
|
195
|
+
This skill proposes shared writes; the human decides. The local checkpoint is the requested
|
|
196
|
+
shutdown artefact. Do not move provider state as a side effect of closing a session — a session
|
|
197
|
+
ending is not a unit completing. Never write a checkpoint that claims work is done when it is
|
|
198
|
+
merely stopped.
|
|
199
|
+
|
|
200
|
+
**The hook boundary.** `UserPromptSubmit` detects explicit close intent and can remind the model to
|
|
201
|
+
invoke this skill before the closing response. `SessionEnd` can only audit checkpoint presence,
|
|
202
|
+
freshness, branch and HEAD after the model is gone. Both stay advisory. `PreCompact` may preserve
|
|
203
|
+
only the delimited mechanical block before known context loss. Hooks never invent or change dead
|
|
204
|
+
ends, assumptions or a next action. A command such as `/clear` can still bypass the prompt hook;
|
|
205
|
+
invoke this skill first.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Red flags
|
|
210
|
+
|
|
211
|
+
| Rationalization | Reality |
|
|
212
|
+
|---|---|
|
|
213
|
+
| "I'll remember this tomorrow" | You will remember what you did. You will not remember what you ruled out, which is the expensive half. |
|
|
214
|
+
| "The diff explains it" | The diff explains the change. It never explains the three approaches that came first. |
|
|
215
|
+
| "I'll write the checkpoint when I actually need it" | You need it precisely when you can no longer write it. |
|
|
216
|
+
| "Let me summarize the whole session" | A narrative of what happened is not a plan for what is next. Route, then write the residue. |
|
|
217
|
+
| "Everything is green" | Green against which commit, from which command? A stale proof is worse than no proof, because it is trusted. |
|
|
218
|
+
| "The progress source says it all" | Then keep the checkpoint to the local residue, but verify that the provider really carries mutable status and blockers rather than assuming it does. |
|
|
219
|
+
| "I'll note the dead end if it comes up again" | It comes up again in the next session, as a fresh idea, and costs the same hour twice. |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Composition
|
|
224
|
+
|
|
225
|
+
Upstream: whatever produced the work. Adjacent: `void-learn` takes durable rules out of the
|
|
226
|
+
session; `void-decide` takes structural choices. Downstream: `ResumeBundle` composes the programme,
|
|
227
|
+
this checkpoint and Git into the context read by the CLI and both runtimes.
|
|
@@ -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,15 @@
|
|
|
1
|
+
Sources for `void-claude-md` skill (see `docs/plans/skill-audits/void-claude-md.md` for full audit):
|
|
2
|
+
|
|
3
|
+
- HumanLayer — "Writing a good CLAUDE.md" — the load-bearing insight: Claude Code wraps CLAUDE.md in a system-reminder framed "may or may not be relevant," the system prompt already carries ~50 instructions, and every added line competes for finite attention. Hence: keep it minimal and universal, never put code-style rules in it (send a linter, not an LLM), reference file:line instead of inlining rotting snippets, defer detail to docs (progressive disclosure), and prune by asking "would removing this cause an error?". https://www.humanlayer.dev/blog/writing-a-good-claude-md
|
|
4
|
+
|
|
5
|
+
- HumanLayer — "Advanced Context Engineering" — context is the scarce resource; an always-on prompt spends from the same budget as every task. Push certainties to hooks (deterministic, fires 100% of the time) rather than instructions (probabilistic), use narrowly-scoped conditional guidance, and keep the file runnable. https://www.humanlayer.dev/blog/advanced-context-engineering
|
|
6
|
+
|
|
7
|
+
- Anthropic Claude Code best practices — CLAUDE.md is appended to the system prompt as context the model weighs, not a hard contract; keep it concise, use it for run/build/test commands and repo conventions, and prefer settings.json for deterministic config (permissions, tool attribution). https://www.anthropic.com/engineering/claude-code-best-practices
|
|
8
|
+
|
|
9
|
+
- Field reports / issues on CLAUDE.md being ignored — observed failure mode where a long CLAUDE.md's rules are dropped silently; the cure is fewer, sharper, runnable lines plus mechanical enforcement (hooks/linters/settings) rather than more prose. (community reports / GitHub issues, no single canonical URL)
|
|
10
|
+
|
|
11
|
+
Strategy: distill. The HumanLayer articles supply the principles; this skill rewrites them as enforceable harness doctrine for the CLAUDE.md files the harness PRODUCES in consumer projects, adds an "Auditing an existing CLAUDE.md" pruning checklist, and the harness-standard Rationalizations + Verification sections. No verbatim vendoring.
|
|
12
|
+
|
|
13
|
+
Composition: context (context is the constraint), source-driven-development (deferred docs ground config in version-matched sources), harness-evolution (the harness generates consumer CLAUDE.md files this skill governs), capture-rule (where a stated project rule lands — hook / settings / lean CLAUDE.md line / deferred doc).
|
|
14
|
+
|
|
15
|
+
Companion hooks: none in v1. A future informational lint (e.g. claude-md-length / snippet-detector) is an open question in the audit note, not a v1 deliverable.
|