bigpowers 2.86.5 → 2.86.7
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/.agents/skills/commit-message/SKILL.md +1 -1
- package/.agents/skills/evolve-skill/SKILL.md +1 -1
- package/.agents/skills/guard-git/SKILL.md +8 -8
- package/.agents/skills/kickoff-branch/SKILL.md +1 -1
- package/.agents/skills/migrate-spec/SKILL.md +52 -6
- package/.agents/skills/plan-work/SKILL.md +17 -5
- package/.agents/skills/publish-package/SKILL.md +15 -5
- package/.agents/skills/release-branch/SKILL.md +12 -8
- package/.agents/skills/seed-conventions/SKILL.md +20 -10
- package/.agents/skills/smoke-test/SKILL.md +9 -5
- package/.agents/skills/validate-contracts/SKILL.md +15 -6
- package/.agents/skills/wire-ci/SKILL.md +12 -5
- package/.agents/skills/write-document/SKILL.md +31 -5
- package/.cline/skills/align-grid/SKILL.md +110 -0
- package/.cline/skills/assess-impact/SKILL.md +91 -0
- package/.cline/skills/audit-code/SKILL.md +184 -0
- package/.cline/skills/audit-plan/SKILL.md +89 -0
- package/.cline/skills/build-epic/SKILL.md +105 -0
- package/.cline/skills/change-request/SKILL.md +121 -0
- package/.cline/skills/commit-message/SKILL.md +140 -0
- package/.cline/skills/compose-workflow/SKILL.md +82 -0
- package/.cline/skills/context7-mcp/SKILL.md +55 -0
- package/.cline/skills/craft-skill/SKILL.md +196 -0
- package/.cline/skills/deepen-architecture/SKILL.md +260 -0
- package/.cline/skills/define-language/SKILL.md +80 -0
- package/.cline/skills/define-success/SKILL.md +12 -0
- package/.cline/skills/delegate-task/SKILL.md +91 -0
- package/.cline/skills/deploy/SKILL.md +198 -0
- package/.cline/skills/design-interface/SKILL.md +97 -0
- package/.cline/skills/develop-tdd/SKILL.md +416 -0
- package/.cline/skills/diagnose-root/SKILL.md +24 -0
- package/.cline/skills/diagnose-stall/SKILL.md +54 -0
- package/.cline/skills/dispatch-agents/SKILL.md +118 -0
- package/.cline/skills/edit-document/SKILL.md +23 -0
- package/.cline/skills/elaborate-spec/SKILL.md +101 -0
- package/.cline/skills/enforce-first/SKILL.md +45 -0
- package/.cline/skills/evolve-skill/SKILL.md +55 -0
- package/.cline/skills/execute-plan/SKILL.md +61 -0
- package/.cline/skills/extract-design/SKILL.md +132 -0
- package/.cline/skills/find-way/SKILL.md +191 -0
- package/.cline/skills/fix-bug/SKILL.md +67 -0
- package/.cline/skills/gate-trace/SKILL.md +92 -0
- package/.cline/skills/generate-allure-report/SKILL.md +285 -0
- package/.cline/skills/grill-me/SKILL.md +108 -0
- package/.cline/skills/grill-with-docs/SKILL.md +53 -0
- package/.cline/skills/guard-git/SKILL.md +231 -0
- package/.cline/skills/harden-vps/SKILL.md +291 -0
- package/.cline/skills/hook-commits/SKILL.md +94 -0
- package/.cline/skills/inspect-quality/SKILL.md +106 -0
- package/.cline/skills/investigate-bug/SKILL.md +127 -0
- package/.cline/skills/kickoff-branch/SKILL.md +143 -0
- package/.cline/skills/maintain-wiki/SKILL.md +64 -0
- package/.cline/skills/map-codebase/SKILL.md +71 -0
- package/.cline/skills/migrate-spec/SKILL.md +908 -0
- package/.cline/skills/model-domain/SKILL.md +232 -0
- package/.cline/skills/orchestrate-project/SKILL.md +174 -0
- package/.cline/skills/organize-workspace/SKILL.md +164 -0
- package/.cline/skills/plan-refactor/SKILL.md +87 -0
- package/.cline/skills/plan-release/SKILL.md +145 -0
- package/.cline/skills/plan-tests/SKILL.md +75 -0
- package/.cline/skills/plan-work/SKILL.md +272 -0
- package/.cline/skills/publish-package/SKILL.md +338 -0
- package/.cline/skills/quick-fix/SKILL.md +114 -0
- package/.cline/skills/release-branch/SKILL.md +302 -0
- package/.cline/skills/request-review/SKILL.md +113 -0
- package/.cline/skills/research-first/SKILL.md +87 -0
- package/.cline/skills/reset-baseline/SKILL.md +21 -0
- package/.cline/skills/respond-review/SKILL.md +71 -0
- package/.cline/skills/run-benchmark/SKILL.md +85 -0
- package/.cline/skills/run-evals/SKILL.md +80 -0
- package/.cline/skills/run-planning/SKILL.md +101 -0
- package/.cline/skills/scope-work/SKILL.md +63 -0
- package/.cline/skills/search-skills/SKILL.md +73 -0
- package/.cline/skills/security-review/SKILL.md +384 -0
- package/.cline/skills/seed-conventions/SKILL.md +312 -0
- package/.cline/skills/session-state/SKILL.md +146 -0
- package/.cline/skills/setup-environment/SKILL.md +39 -0
- package/.cline/skills/simulate-agents/SKILL.md +26 -0
- package/.cline/skills/slice-tasks/SKILL.md +68 -0
- package/.cline/skills/smoke-test/SKILL.md +261 -0
- package/.cline/skills/spike-prototype/SKILL.md +95 -0
- package/.cline/skills/stocktake-skills/SKILL.md +74 -0
- package/.cline/skills/survey-context/SKILL.md +135 -0
- package/.cline/skills/terse-mode/SKILL.md +42 -0
- package/.cline/skills/trace-requirement/SKILL.md +69 -0
- package/.cline/skills/using-bigpowers/SKILL.md +111 -0
- package/.cline/skills/validate-contracts/SKILL.md +286 -0
- package/.cline/skills/validate-fix/SKILL.md +147 -0
- package/.cline/skills/verify-work/SKILL.md +191 -0
- package/.cline/skills/visual-dashboard/SKILL.md +50 -0
- package/.cline/skills/wire-ci/SKILL.md +381 -0
- package/.cline/skills/wire-observability/SKILL.md +97 -0
- package/.cline/skills/write-document/SKILL.md +281 -0
- package/.codebuddy/skills/commit-message/SKILL.md +1 -1
- package/.codebuddy/skills/evolve-skill/SKILL.md +1 -1
- package/.codebuddy/skills/guard-git/SKILL.md +8 -8
- package/.codebuddy/skills/kickoff-branch/SKILL.md +1 -1
- package/.codebuddy/skills/migrate-spec/SKILL.md +52 -6
- package/.codebuddy/skills/plan-work/SKILL.md +17 -5
- package/.codebuddy/skills/publish-package/SKILL.md +15 -5
- package/.codebuddy/skills/release-branch/SKILL.md +12 -8
- package/.codebuddy/skills/seed-conventions/SKILL.md +20 -10
- package/.codebuddy/skills/smoke-test/SKILL.md +9 -5
- package/.codebuddy/skills/validate-contracts/SKILL.md +15 -6
- package/.codebuddy/skills/wire-ci/SKILL.md +12 -5
- package/.codebuddy/skills/write-document/SKILL.md +31 -5
- package/.codex/skills/commit-message/SKILL.md +1 -1
- package/.codex/skills/evolve-skill/SKILL.md +1 -1
- package/.codex/skills/guard-git/SKILL.md +8 -8
- package/.codex/skills/kickoff-branch/SKILL.md +1 -1
- package/.codex/skills/migrate-spec/SKILL.md +52 -6
- package/.codex/skills/plan-work/SKILL.md +17 -5
- package/.codex/skills/publish-package/SKILL.md +15 -5
- package/.codex/skills/release-branch/SKILL.md +12 -8
- package/.codex/skills/seed-conventions/SKILL.md +20 -10
- package/.codex/skills/smoke-test/SKILL.md +9 -5
- package/.codex/skills/validate-contracts/SKILL.md +15 -6
- package/.codex/skills/wire-ci/SKILL.md +12 -5
- package/.codex/skills/write-document/SKILL.md +31 -5
- package/.copilot/skills/align-grid/SKILL.md +110 -0
- package/.copilot/skills/assess-impact/SKILL.md +91 -0
- package/.copilot/skills/audit-code/SKILL.md +184 -0
- package/.copilot/skills/audit-plan/SKILL.md +89 -0
- package/.copilot/skills/build-epic/SKILL.md +105 -0
- package/.copilot/skills/change-request/SKILL.md +121 -0
- package/.copilot/skills/commit-message/SKILL.md +140 -0
- package/.copilot/skills/compose-workflow/SKILL.md +82 -0
- package/.copilot/skills/context7-mcp/SKILL.md +55 -0
- package/.copilot/skills/craft-skill/SKILL.md +196 -0
- package/.copilot/skills/deepen-architecture/SKILL.md +260 -0
- package/.copilot/skills/define-language/SKILL.md +80 -0
- package/.copilot/skills/define-success/SKILL.md +12 -0
- package/.copilot/skills/delegate-task/SKILL.md +91 -0
- package/.copilot/skills/deploy/SKILL.md +198 -0
- package/.copilot/skills/design-interface/SKILL.md +97 -0
- package/.copilot/skills/develop-tdd/SKILL.md +416 -0
- package/.copilot/skills/diagnose-root/SKILL.md +24 -0
- package/.copilot/skills/diagnose-stall/SKILL.md +54 -0
- package/.copilot/skills/dispatch-agents/SKILL.md +118 -0
- package/.copilot/skills/edit-document/SKILL.md +23 -0
- package/.copilot/skills/elaborate-spec/SKILL.md +101 -0
- package/.copilot/skills/enforce-first/SKILL.md +45 -0
- package/.copilot/skills/evolve-skill/SKILL.md +55 -0
- package/.copilot/skills/execute-plan/SKILL.md +61 -0
- package/.copilot/skills/extract-design/SKILL.md +132 -0
- package/.copilot/skills/find-way/SKILL.md +191 -0
- package/.copilot/skills/fix-bug/SKILL.md +67 -0
- package/.copilot/skills/gate-trace/SKILL.md +92 -0
- package/.copilot/skills/generate-allure-report/SKILL.md +285 -0
- package/.copilot/skills/grill-me/SKILL.md +108 -0
- package/.copilot/skills/grill-with-docs/SKILL.md +53 -0
- package/.copilot/skills/guard-git/SKILL.md +231 -0
- package/.copilot/skills/harden-vps/SKILL.md +291 -0
- package/.copilot/skills/hook-commits/SKILL.md +94 -0
- package/.copilot/skills/inspect-quality/SKILL.md +106 -0
- package/.copilot/skills/investigate-bug/SKILL.md +127 -0
- package/.copilot/skills/kickoff-branch/SKILL.md +143 -0
- package/.copilot/skills/maintain-wiki/SKILL.md +64 -0
- package/.copilot/skills/map-codebase/SKILL.md +71 -0
- package/.copilot/skills/migrate-spec/SKILL.md +908 -0
- package/.copilot/skills/model-domain/SKILL.md +232 -0
- package/.copilot/skills/orchestrate-project/SKILL.md +174 -0
- package/.copilot/skills/organize-workspace/SKILL.md +164 -0
- package/.copilot/skills/plan-refactor/SKILL.md +87 -0
- package/.copilot/skills/plan-release/SKILL.md +145 -0
- package/.copilot/skills/plan-tests/SKILL.md +75 -0
- package/.copilot/skills/plan-work/SKILL.md +272 -0
- package/.copilot/skills/publish-package/SKILL.md +338 -0
- package/.copilot/skills/quick-fix/SKILL.md +114 -0
- package/.copilot/skills/release-branch/SKILL.md +302 -0
- package/.copilot/skills/request-review/SKILL.md +113 -0
- package/.copilot/skills/research-first/SKILL.md +87 -0
- package/.copilot/skills/reset-baseline/SKILL.md +21 -0
- package/.copilot/skills/respond-review/SKILL.md +71 -0
- package/.copilot/skills/run-benchmark/SKILL.md +85 -0
- package/.copilot/skills/run-evals/SKILL.md +80 -0
- package/.copilot/skills/run-planning/SKILL.md +101 -0
- package/.copilot/skills/scope-work/SKILL.md +63 -0
- package/.copilot/skills/search-skills/SKILL.md +73 -0
- package/.copilot/skills/security-review/SKILL.md +384 -0
- package/.copilot/skills/seed-conventions/SKILL.md +312 -0
- package/.copilot/skills/session-state/SKILL.md +146 -0
- package/.copilot/skills/setup-environment/SKILL.md +39 -0
- package/.copilot/skills/simulate-agents/SKILL.md +26 -0
- package/.copilot/skills/slice-tasks/SKILL.md +68 -0
- package/.copilot/skills/smoke-test/SKILL.md +261 -0
- package/.copilot/skills/spike-prototype/SKILL.md +95 -0
- package/.copilot/skills/stocktake-skills/SKILL.md +74 -0
- package/.copilot/skills/survey-context/SKILL.md +135 -0
- package/.copilot/skills/terse-mode/SKILL.md +42 -0
- package/.copilot/skills/trace-requirement/SKILL.md +69 -0
- package/.copilot/skills/using-bigpowers/SKILL.md +111 -0
- package/.copilot/skills/validate-contracts/SKILL.md +286 -0
- package/.copilot/skills/validate-fix/SKILL.md +147 -0
- package/.copilot/skills/verify-work/SKILL.md +191 -0
- package/.copilot/skills/visual-dashboard/SKILL.md +50 -0
- package/.copilot/skills/wire-ci/SKILL.md +381 -0
- package/.copilot/skills/wire-observability/SKILL.md +97 -0
- package/.copilot/skills/write-document/SKILL.md +281 -0
- package/.hermes/skills/commit-message/SKILL.md +1 -1
- package/.hermes/skills/evolve-skill/SKILL.md +1 -1
- package/.hermes/skills/guard-git/SKILL.md +8 -8
- package/.hermes/skills/kickoff-branch/SKILL.md +1 -1
- package/.hermes/skills/migrate-spec/SKILL.md +52 -6
- package/.hermes/skills/plan-work/SKILL.md +17 -5
- package/.hermes/skills/publish-package/SKILL.md +15 -5
- package/.hermes/skills/release-branch/SKILL.md +12 -8
- package/.hermes/skills/seed-conventions/SKILL.md +20 -10
- package/.hermes/skills/smoke-test/SKILL.md +9 -5
- package/.hermes/skills/validate-contracts/SKILL.md +15 -6
- package/.hermes/skills/wire-ci/SKILL.md +12 -5
- package/.hermes/skills/write-document/SKILL.md +31 -5
- package/.kilocode/rules/commit-message.md +1 -1
- package/.kilocode/rules/evolve-skill.md +1 -1
- package/.kilocode/rules/guard-git.md +8 -8
- package/.kilocode/rules/kickoff-branch.md +1 -1
- package/.kilocode/rules/migrate-spec.md +52 -6
- package/.kilocode/rules/plan-work.md +17 -5
- package/.kilocode/rules/publish-package.md +15 -5
- package/.kilocode/rules/release-branch.md +12 -8
- package/.kilocode/rules/seed-conventions.md +20 -10
- package/.kilocode/rules/smoke-test.md +9 -5
- package/.kilocode/rules/validate-contracts.md +15 -6
- package/.kilocode/rules/wire-ci.md +12 -5
- package/.kilocode/rules/write-document.md +31 -5
- package/.mimocode/skills/commit-message/SKILL.md +1 -1
- package/.mimocode/skills/evolve-skill/SKILL.md +1 -1
- package/.mimocode/skills/guard-git/SKILL.md +8 -8
- package/.mimocode/skills/kickoff-branch/SKILL.md +1 -1
- package/.mimocode/skills/migrate-spec/SKILL.md +52 -6
- package/.mimocode/skills/plan-work/SKILL.md +17 -5
- package/.mimocode/skills/publish-package/SKILL.md +15 -5
- package/.mimocode/skills/release-branch/SKILL.md +12 -8
- package/.mimocode/skills/seed-conventions/SKILL.md +20 -10
- package/.mimocode/skills/smoke-test/SKILL.md +9 -5
- package/.mimocode/skills/validate-contracts/SKILL.md +15 -6
- package/.mimocode/skills/wire-ci/SKILL.md +12 -5
- package/.mimocode/skills/write-document/SKILL.md +31 -5
- package/.opencode/skills/align-grid/SKILL.md +110 -0
- package/.opencode/skills/assess-impact/SKILL.md +91 -0
- package/.opencode/skills/audit-code/SKILL.md +184 -0
- package/.opencode/skills/audit-plan/SKILL.md +89 -0
- package/.opencode/skills/build-epic/SKILL.md +105 -0
- package/.opencode/skills/change-request/SKILL.md +121 -0
- package/.opencode/skills/commit-message/SKILL.md +140 -0
- package/.opencode/skills/compose-workflow/SKILL.md +82 -0
- package/.opencode/skills/context7-mcp/SKILL.md +55 -0
- package/.opencode/skills/craft-skill/SKILL.md +196 -0
- package/.opencode/skills/deepen-architecture/SKILL.md +260 -0
- package/.opencode/skills/define-language/SKILL.md +80 -0
- package/.opencode/skills/define-success/SKILL.md +12 -0
- package/.opencode/skills/delegate-task/SKILL.md +91 -0
- package/.opencode/skills/deploy/SKILL.md +198 -0
- package/.opencode/skills/design-interface/SKILL.md +97 -0
- package/.opencode/skills/develop-tdd/SKILL.md +416 -0
- package/.opencode/skills/diagnose-root/SKILL.md +24 -0
- package/.opencode/skills/diagnose-stall/SKILL.md +54 -0
- package/.opencode/skills/dispatch-agents/SKILL.md +118 -0
- package/.opencode/skills/edit-document/SKILL.md +23 -0
- package/.opencode/skills/elaborate-spec/SKILL.md +101 -0
- package/.opencode/skills/enforce-first/SKILL.md +45 -0
- package/.opencode/skills/evolve-skill/SKILL.md +55 -0
- package/.opencode/skills/execute-plan/SKILL.md +61 -0
- package/.opencode/skills/extract-design/SKILL.md +132 -0
- package/.opencode/skills/find-way/SKILL.md +191 -0
- package/.opencode/skills/fix-bug/SKILL.md +67 -0
- package/.opencode/skills/gate-trace/SKILL.md +92 -0
- package/.opencode/skills/generate-allure-report/SKILL.md +285 -0
- package/.opencode/skills/grill-me/SKILL.md +108 -0
- package/.opencode/skills/grill-with-docs/SKILL.md +53 -0
- package/.opencode/skills/guard-git/SKILL.md +231 -0
- package/.opencode/skills/harden-vps/SKILL.md +291 -0
- package/.opencode/skills/hook-commits/SKILL.md +94 -0
- package/.opencode/skills/inspect-quality/SKILL.md +106 -0
- package/.opencode/skills/investigate-bug/SKILL.md +127 -0
- package/.opencode/skills/kickoff-branch/SKILL.md +143 -0
- package/.opencode/skills/maintain-wiki/SKILL.md +64 -0
- package/.opencode/skills/map-codebase/SKILL.md +71 -0
- package/.opencode/skills/migrate-spec/SKILL.md +908 -0
- package/.opencode/skills/model-domain/SKILL.md +232 -0
- package/.opencode/skills/orchestrate-project/SKILL.md +174 -0
- package/.opencode/skills/organize-workspace/SKILL.md +164 -0
- package/.opencode/skills/plan-refactor/SKILL.md +87 -0
- package/.opencode/skills/plan-release/SKILL.md +145 -0
- package/.opencode/skills/plan-tests/SKILL.md +75 -0
- package/.opencode/skills/plan-work/SKILL.md +272 -0
- package/.opencode/skills/publish-package/SKILL.md +338 -0
- package/.opencode/skills/quick-fix/SKILL.md +114 -0
- package/.opencode/skills/release-branch/SKILL.md +302 -0
- package/.opencode/skills/request-review/SKILL.md +113 -0
- package/.opencode/skills/research-first/SKILL.md +87 -0
- package/.opencode/skills/reset-baseline/SKILL.md +21 -0
- package/.opencode/skills/respond-review/SKILL.md +71 -0
- package/.opencode/skills/run-benchmark/SKILL.md +85 -0
- package/.opencode/skills/run-evals/SKILL.md +80 -0
- package/.opencode/skills/run-planning/SKILL.md +101 -0
- package/.opencode/skills/scope-work/SKILL.md +63 -0
- package/.opencode/skills/search-skills/SKILL.md +73 -0
- package/.opencode/skills/security-review/SKILL.md +384 -0
- package/.opencode/skills/seed-conventions/SKILL.md +312 -0
- package/.opencode/skills/session-state/SKILL.md +146 -0
- package/.opencode/skills/setup-environment/SKILL.md +39 -0
- package/.opencode/skills/simulate-agents/SKILL.md +26 -0
- package/.opencode/skills/slice-tasks/SKILL.md +68 -0
- package/.opencode/skills/smoke-test/SKILL.md +261 -0
- package/.opencode/skills/spike-prototype/SKILL.md +95 -0
- package/.opencode/skills/stocktake-skills/SKILL.md +74 -0
- package/.opencode/skills/survey-context/SKILL.md +135 -0
- package/.opencode/skills/terse-mode/SKILL.md +42 -0
- package/.opencode/skills/trace-requirement/SKILL.md +69 -0
- package/.opencode/skills/using-bigpowers/SKILL.md +111 -0
- package/.opencode/skills/validate-contracts/SKILL.md +286 -0
- package/.opencode/skills/validate-fix/SKILL.md +147 -0
- package/.opencode/skills/verify-work/SKILL.md +191 -0
- package/.opencode/skills/visual-dashboard/SKILL.md +50 -0
- package/.opencode/skills/wire-ci/SKILL.md +381 -0
- package/.opencode/skills/wire-observability/SKILL.md +97 -0
- package/.opencode/skills/write-document/SKILL.md +281 -0
- package/.pi/package.json +1 -1
- package/.pi/prompts/commit-message.md +1 -1
- package/.pi/prompts/evolve-skill.md +1 -1
- package/.pi/prompts/guard-git.md +8 -8
- package/.pi/prompts/kickoff-branch.md +1 -1
- package/.pi/prompts/migrate-spec.md +52 -6
- package/.pi/prompts/plan-work.md +17 -5
- package/.pi/prompts/publish-package.md +15 -5
- package/.pi/prompts/release-branch.md +12 -8
- package/.pi/prompts/seed-conventions.md +20 -10
- package/.pi/prompts/smoke-test.md +9 -5
- package/.pi/prompts/validate-contracts.md +15 -6
- package/.pi/prompts/wire-ci.md +12 -5
- package/.pi/prompts/write-document.md +31 -5
- package/.pi/skills/commit-message/SKILL.md +1 -1
- package/.pi/skills/evolve-skill/SKILL.md +1 -1
- package/.pi/skills/guard-git/SKILL.md +8 -8
- package/.pi/skills/kickoff-branch/SKILL.md +1 -1
- package/.pi/skills/migrate-spec/SKILL.md +52 -6
- package/.pi/skills/plan-work/SKILL.md +17 -5
- package/.pi/skills/publish-package/SKILL.md +15 -5
- package/.pi/skills/release-branch/SKILL.md +12 -8
- package/.pi/skills/seed-conventions/SKILL.md +20 -10
- package/.pi/skills/smoke-test/SKILL.md +9 -5
- package/.pi/skills/validate-contracts/SKILL.md +15 -6
- package/.pi/skills/wire-ci/SKILL.md +12 -5
- package/.pi/skills/write-document/SKILL.md +31 -5
- package/.qwen/skills/align-grid/SKILL.md +110 -0
- package/.qwen/skills/assess-impact/SKILL.md +91 -0
- package/.qwen/skills/audit-code/SKILL.md +184 -0
- package/.qwen/skills/audit-plan/SKILL.md +89 -0
- package/.qwen/skills/build-epic/SKILL.md +105 -0
- package/.qwen/skills/change-request/SKILL.md +121 -0
- package/.qwen/skills/commit-message/SKILL.md +140 -0
- package/.qwen/skills/compose-workflow/SKILL.md +82 -0
- package/.qwen/skills/context7-mcp/SKILL.md +55 -0
- package/.qwen/skills/craft-skill/SKILL.md +196 -0
- package/.qwen/skills/deepen-architecture/SKILL.md +260 -0
- package/.qwen/skills/define-language/SKILL.md +80 -0
- package/.qwen/skills/define-success/SKILL.md +12 -0
- package/.qwen/skills/delegate-task/SKILL.md +91 -0
- package/.qwen/skills/deploy/SKILL.md +198 -0
- package/.qwen/skills/design-interface/SKILL.md +97 -0
- package/.qwen/skills/develop-tdd/SKILL.md +416 -0
- package/.qwen/skills/diagnose-root/SKILL.md +24 -0
- package/.qwen/skills/diagnose-stall/SKILL.md +54 -0
- package/.qwen/skills/dispatch-agents/SKILL.md +118 -0
- package/.qwen/skills/edit-document/SKILL.md +23 -0
- package/.qwen/skills/elaborate-spec/SKILL.md +101 -0
- package/.qwen/skills/enforce-first/SKILL.md +45 -0
- package/.qwen/skills/evolve-skill/SKILL.md +55 -0
- package/.qwen/skills/execute-plan/SKILL.md +61 -0
- package/.qwen/skills/extract-design/SKILL.md +132 -0
- package/.qwen/skills/find-way/SKILL.md +191 -0
- package/.qwen/skills/fix-bug/SKILL.md +67 -0
- package/.qwen/skills/gate-trace/SKILL.md +92 -0
- package/.qwen/skills/generate-allure-report/SKILL.md +285 -0
- package/.qwen/skills/grill-me/SKILL.md +108 -0
- package/.qwen/skills/grill-with-docs/SKILL.md +53 -0
- package/.qwen/skills/guard-git/SKILL.md +231 -0
- package/.qwen/skills/harden-vps/SKILL.md +291 -0
- package/.qwen/skills/hook-commits/SKILL.md +94 -0
- package/.qwen/skills/inspect-quality/SKILL.md +106 -0
- package/.qwen/skills/investigate-bug/SKILL.md +127 -0
- package/.qwen/skills/kickoff-branch/SKILL.md +143 -0
- package/.qwen/skills/maintain-wiki/SKILL.md +64 -0
- package/.qwen/skills/map-codebase/SKILL.md +71 -0
- package/.qwen/skills/migrate-spec/SKILL.md +908 -0
- package/.qwen/skills/model-domain/SKILL.md +232 -0
- package/.qwen/skills/orchestrate-project/SKILL.md +174 -0
- package/.qwen/skills/organize-workspace/SKILL.md +164 -0
- package/.qwen/skills/plan-refactor/SKILL.md +87 -0
- package/.qwen/skills/plan-release/SKILL.md +145 -0
- package/.qwen/skills/plan-tests/SKILL.md +75 -0
- package/.qwen/skills/plan-work/SKILL.md +272 -0
- package/.qwen/skills/publish-package/SKILL.md +338 -0
- package/.qwen/skills/quick-fix/SKILL.md +114 -0
- package/.qwen/skills/release-branch/SKILL.md +302 -0
- package/.qwen/skills/request-review/SKILL.md +113 -0
- package/.qwen/skills/research-first/SKILL.md +87 -0
- package/.qwen/skills/reset-baseline/SKILL.md +21 -0
- package/.qwen/skills/respond-review/SKILL.md +71 -0
- package/.qwen/skills/run-benchmark/SKILL.md +85 -0
- package/.qwen/skills/run-evals/SKILL.md +80 -0
- package/.qwen/skills/run-planning/SKILL.md +101 -0
- package/.qwen/skills/scope-work/SKILL.md +63 -0
- package/.qwen/skills/search-skills/SKILL.md +73 -0
- package/.qwen/skills/security-review/SKILL.md +384 -0
- package/.qwen/skills/seed-conventions/SKILL.md +312 -0
- package/.qwen/skills/session-state/SKILL.md +146 -0
- package/.qwen/skills/setup-environment/SKILL.md +39 -0
- package/.qwen/skills/simulate-agents/SKILL.md +26 -0
- package/.qwen/skills/slice-tasks/SKILL.md +68 -0
- package/.qwen/skills/smoke-test/SKILL.md +261 -0
- package/.qwen/skills/spike-prototype/SKILL.md +95 -0
- package/.qwen/skills/stocktake-skills/SKILL.md +74 -0
- package/.qwen/skills/survey-context/SKILL.md +135 -0
- package/.qwen/skills/terse-mode/SKILL.md +42 -0
- package/.qwen/skills/trace-requirement/SKILL.md +69 -0
- package/.qwen/skills/using-bigpowers/SKILL.md +111 -0
- package/.qwen/skills/validate-contracts/SKILL.md +286 -0
- package/.qwen/skills/validate-fix/SKILL.md +147 -0
- package/.qwen/skills/verify-work/SKILL.md +191 -0
- package/.qwen/skills/visual-dashboard/SKILL.md +50 -0
- package/.qwen/skills/wire-ci/SKILL.md +381 -0
- package/.qwen/skills/wire-observability/SKILL.md +97 -0
- package/.qwen/skills/write-document/SKILL.md +281 -0
- package/.trae/skills/commit-message/SKILL.md +1 -1
- package/.trae/skills/evolve-skill/SKILL.md +1 -1
- package/.trae/skills/guard-git/SKILL.md +8 -8
- package/.trae/skills/kickoff-branch/SKILL.md +1 -1
- package/.trae/skills/migrate-spec/SKILL.md +52 -6
- package/.trae/skills/plan-work/SKILL.md +17 -5
- package/.trae/skills/publish-package/SKILL.md +15 -5
- package/.trae/skills/release-branch/SKILL.md +12 -8
- package/.trae/skills/seed-conventions/SKILL.md +20 -10
- package/.trae/skills/smoke-test/SKILL.md +9 -5
- package/.trae/skills/validate-contracts/SKILL.md +15 -6
- package/.trae/skills/wire-ci/SKILL.md +12 -5
- package/.trae/skills/write-document/SKILL.md +31 -5
- package/.windsurf/rules/commit-message.md +1 -1
- package/.windsurf/rules/evolve-skill.md +1 -1
- package/.windsurf/rules/guard-git.md +8 -8
- package/.windsurf/rules/kickoff-branch.md +1 -1
- package/.windsurf/rules/migrate-spec.md +52 -6
- package/.windsurf/rules/plan-work.md +17 -5
- package/.windsurf/rules/publish-package.md +15 -5
- package/.windsurf/rules/release-branch.md +12 -8
- package/.windsurf/rules/seed-conventions.md +20 -10
- package/.windsurf/rules/smoke-test.md +9 -5
- package/.windsurf/rules/validate-contracts.md +15 -6
- package/.windsurf/rules/wire-ci.md +12 -5
- package/.windsurf/rules/write-document.md +31 -5
- package/.zcode/skills/commit-message/SKILL.md +1 -1
- package/.zcode/skills/evolve-skill/SKILL.md +1 -1
- package/.zcode/skills/guard-git/SKILL.md +8 -8
- package/.zcode/skills/kickoff-branch/SKILL.md +1 -1
- package/.zcode/skills/migrate-spec/SKILL.md +52 -6
- package/.zcode/skills/plan-work/SKILL.md +17 -5
- package/.zcode/skills/publish-package/SKILL.md +15 -5
- package/.zcode/skills/release-branch/SKILL.md +12 -8
- package/.zcode/skills/seed-conventions/SKILL.md +20 -10
- package/.zcode/skills/smoke-test/SKILL.md +9 -5
- package/.zcode/skills/validate-contracts/SKILL.md +15 -6
- package/.zcode/skills/wire-ci/SKILL.md +12 -5
- package/.zcode/skills/write-document/SKILL.md +31 -5
- package/CHANGELOG.md +14 -0
- package/CONVENTIONS.md +2 -0
- package/package.json +1 -1
- package/scripts/adapters/agy.sh +3 -0
- package/scripts/adapters/continue.sh +3 -0
- package/scripts/adapters/cursor.sh +3 -0
- package/scripts/adapters/gemini.sh +5 -24
- package/scripts/adapters/mimo.sh +3 -0
- package/scripts/adapters/omp.sh +3 -0
- package/scripts/adapters/pi.sh +6 -3
- package/scripts/adapters/zcode.sh +3 -0
- package/scripts/adapters/zed.sh +3 -0
- package/scripts/generate-context-bundle.sh +6 -0
- package/scripts/generate-reference-nav.sh +89 -0
- package/scripts/generate-viz-graph.sh +4 -0
- package/scripts/generate-workflow-diagrams.sh +102 -0
- package/scripts/golden-g13-script-orphans.sh +167 -0
- package/scripts/golden-g14-adapter-dispatch.sh +113 -0
- package/scripts/golden-g15-compliance-runner-selftest.sh +126 -0
- package/scripts/golden-g16-spec-version-gap.sh +72 -0
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/adapter-guard.sh +30 -0
- package/scripts/lib/audit-compliance-report.sh +32 -7
- package/scripts/lib/audit-compliance-runner.sh +14 -1
- package/scripts/lib/golden-suite-gates.sh +43 -3
- package/scripts/lib/install-targets-b.sh +0 -8
- package/scripts/lib/sync-render.sh +0 -43
- package/scripts/lib/test-assertions.sh +4 -0
- package/scripts/snapshot-catalog-baseline.sh +4 -0
- package/scripts/targets.yaml +35 -13
- package/scripts/test-adapter-render.sh +114 -0
- package/scripts/test-adapters.sh +10 -3
- package/scripts/test-completeness-critic-scope.sh +18 -19
- package/scripts/test-generate-epics-wiki-zero-stories.sh +12 -13
- package/scripts/test-golden-g11-worktree-venv.sh +16 -18
- package/scripts/test-install-distribute-only.sh +27 -26
- package/scripts/test-install-hub.sh +141 -0
- package/scripts/test-setup-no-pyyaml.sh +16 -17
- package/scripts/test-target-contracts.sh +15 -13
- package/scripts/test-tombstone-mechanism.sh +31 -33
- package/skills/commit-message/REFERENCE.md +1 -1
- package/skills/evolve-skill/REFERENCE.md +1 -1
- package/skills/guard-git/REFERENCE.md +8 -8
- package/skills/kickoff-branch/SKILL.md +1 -1
- package/skills/migrate-spec/REFERENCE.md +52 -6
- package/skills/plan-work/REFERENCE.md +17 -5
- package/skills/publish-package/REFERENCE.md +15 -5
- package/skills/release-branch/REFERENCE.md +12 -8
- package/skills/seed-conventions/REFERENCE.md +20 -10
- package/skills/smoke-test/REFERENCE.md +9 -5
- package/skills/validate-contracts/REFERENCE.md +15 -6
- package/skills/wire-ci/REFERENCE.md +12 -5
- package/skills/write-document/REFERENCE.md +31 -5
- package/skills-lock.json +1 -1
- package/scripts/add-model-frontmatter.sh +0 -32
- package/scripts/install-cursor-skills-local.sh +0 -15
- package/scripts/install-cursor-skills.sh +0 -24
- package/scripts/project-survey.sh +0 -63
- package/scripts/test-agy-hub.sh +0 -60
- package/scripts/test-cline-adapter.sh +0 -55
- package/scripts/test-cline-hub.sh +0 -48
- package/scripts/test-codebuddy-adapter.sh +0 -63
- package/scripts/test-codebuddy-hub.sh +0 -49
- package/scripts/test-codex-adapter.sh +0 -63
- package/scripts/test-codex-hub.sh +0 -49
- package/scripts/test-copilot-adapter.sh +0 -47
- package/scripts/test-copilot-hub.sh +0 -43
- package/scripts/test-gemini-adapter.sh +0 -70
- package/scripts/test-gemini-hub.sh +0 -56
- package/scripts/test-hermes-adapter.sh +0 -85
- package/scripts/test-hermes-hub.sh +0 -52
- package/scripts/test-kilocode-adapter.sh +0 -55
- package/scripts/test-kilocode-hub.sh +0 -48
- package/scripts/test-mimo-hub.sh +0 -52
- package/scripts/test-opencode-adapter.sh +0 -47
- package/scripts/test-opencode-hub.sh +0 -43
- package/scripts/test-qwen-adapter.sh +0 -63
- package/scripts/test-qwen-hub.sh +0 -49
- package/scripts/test-trae-adapter.sh +0 -63
- package/scripts/test-trae-hub.sh +0 -49
- package/scripts/test-windsurf-adapter.sh +0 -63
- package/scripts/test-windsurf-hub.sh +0 -49
- package/scripts/test-zcode-hub.sh +0 -52
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# golden-g13-script-orphans.sh — every scripts/*.sh must be wired into a gate,
|
|
4
|
+
# invoked by another script/skill/doc/workflow, or explicitly tagged as a
|
|
5
|
+
# manual utility.
|
|
6
|
+
#
|
|
7
|
+
# Originally scoped to scripts/test-*.sh only (33 of 35 test scripts were
|
|
8
|
+
# reachable from nothing). Broadened after a catalog-wide review found 9 more
|
|
9
|
+
# orphans among non-test scripts, one of which (sync-version-mirrors.sh) was a
|
|
10
|
+
# false positive of the SCANNER, not the script: it is called from
|
|
11
|
+
# .releaserc.json's semantic-release prepareCmd, a reference location the
|
|
12
|
+
# original scan never searched. The file is also renamed from
|
|
13
|
+
# golden-g13-test-orphans.sh to match what it now checks — a check whose name
|
|
14
|
+
# doesn't match its mechanism is the exact defect class G25 fixes elsewhere in
|
|
15
|
+
# this series.
|
|
16
|
+
#
|
|
17
|
+
# Usage: bash scripts/golden-g13-script-orphans.sh [--self-test]
|
|
18
|
+
# Exit 0: every script is referenced, or explicitly tagged bp-manual-utility
|
|
19
|
+
# Exit 1: at least one orphan (or, under --self-test, the gate failed to
|
|
20
|
+
# notice a deliberately unlisted, untagged script)
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
24
|
+
resolve_repo_root
|
|
25
|
+
cd "$REPO_ROOT"
|
|
26
|
+
|
|
27
|
+
RED='\033[0;31m'
|
|
28
|
+
GREEN='\033[0;32m'
|
|
29
|
+
NC='\033[0m'
|
|
30
|
+
|
|
31
|
+
GATES_FILE="scripts/lib/golden-suite-gates.sh"
|
|
32
|
+
|
|
33
|
+
# Reference locations a script can legitimately be called from. Archived
|
|
34
|
+
# epics are frozen history (per BUG-2026-07-26: an archived reference is not a
|
|
35
|
+
# live caller), so they're excluded even though they match the glob.
|
|
36
|
+
REF_GLOBS=(
|
|
37
|
+
"scripts/**/*.sh"
|
|
38
|
+
"skills/**/SKILL.md"
|
|
39
|
+
"skills/**/REFERENCE.md"
|
|
40
|
+
"CLAUDE.md"
|
|
41
|
+
"CONVENTIONS.md"
|
|
42
|
+
"docs/**/*.md"
|
|
43
|
+
"bin/**/*.js"
|
|
44
|
+
"package.json"
|
|
45
|
+
".releaserc.json"
|
|
46
|
+
".github/workflows/*.yml"
|
|
47
|
+
"specs/epics/**/*.yaml"
|
|
48
|
+
"specs/epics/**/*.md"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
is_manual_utility() { # $1 = script path
|
|
52
|
+
head -10 "$1" 2>/dev/null | grep -q '^# bp-manual-utility:'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
is_referenced() { # $1 = script basename, $2... = candidate file globs already expanded
|
|
56
|
+
local name="$1"; shift
|
|
57
|
+
local f
|
|
58
|
+
for f in "$@"; do
|
|
59
|
+
[[ "$f" == *"/$name" || "$(basename "$f")" == "$name" ]] && continue # self
|
|
60
|
+
grep -q "$name" "$f" 2>/dev/null && return 0
|
|
61
|
+
done
|
|
62
|
+
return 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
collect_ref_files() {
|
|
66
|
+
shopt -s globstar nullglob
|
|
67
|
+
local pattern expanded=()
|
|
68
|
+
for pattern in "${REF_GLOBS[@]}"; do
|
|
69
|
+
for f in $pattern; do
|
|
70
|
+
[[ "$f" == specs/epics/archive/* ]] && continue
|
|
71
|
+
expanded+=("$f")
|
|
72
|
+
done
|
|
73
|
+
done
|
|
74
|
+
shopt -u globstar nullglob
|
|
75
|
+
printf '%s\n' "${expanded[@]}"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
find_orphans() { # $1 = scripts root dir, $2 = extra untagged basename to inject (self-test only)
|
|
79
|
+
local root="$1" extra="${2:-}"
|
|
80
|
+
local orphans="" f b
|
|
81
|
+
mapfile -t ref_files < <(collect_ref_files)
|
|
82
|
+
for f in "$root"/*.sh; do
|
|
83
|
+
[[ -e "$f" ]] || continue
|
|
84
|
+
b="$(basename "$f")"
|
|
85
|
+
is_manual_utility "$f" && continue
|
|
86
|
+
is_referenced "$b" "${ref_files[@]}" || orphans+=" $b"$'\n'
|
|
87
|
+
done
|
|
88
|
+
if [[ -n "$extra" ]]; then
|
|
89
|
+
is_referenced "$extra" "${ref_files[@]}" || orphans+=" $extra"$'\n'
|
|
90
|
+
fi
|
|
91
|
+
printf '%s' "$orphans"
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if [[ "${1:-}" == "--self-test" ]]; then
|
|
95
|
+
echo "=== G-13 self-test: prove the gate can fail, and that its exemptions work ==="
|
|
96
|
+
TMP=$(mktemp -d)
|
|
97
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
98
|
+
|
|
99
|
+
# (a) An unlisted, untagged script must still be reported. Built by
|
|
100
|
+
# concatenation, not a literal string: this script's own source lives under
|
|
101
|
+
# scripts/, which REF_GLOBS also scans, so a literal fixture name written
|
|
102
|
+
# here would make the checker match its own self-test line.
|
|
103
|
+
fake_name="fixture-not-wired-$$.sh"
|
|
104
|
+
ok=1
|
|
105
|
+
if [[ -z "$(find_orphans "scripts" "$fake_name")" ]]; then
|
|
106
|
+
echo -e "${RED}FAIL${NC} (a) unlisted script was not reported — vacuous gate"
|
|
107
|
+
ok=0
|
|
108
|
+
else
|
|
109
|
+
echo -e "${GREEN}PASS${NC} (a) unlisted, untagged script is reported"
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# (b) A bp-manual-utility-tagged, unwired script must be excluded.
|
|
113
|
+
cat > "$TMP/tagged-orphan.sh" <<'EOF'
|
|
114
|
+
#!/usr/bin/env bash
|
|
115
|
+
# bp-manual-utility: fixture for G-13 self-test — deliberately unreferenced
|
|
116
|
+
echo "never called by anything"
|
|
117
|
+
EOF
|
|
118
|
+
if [[ -n "$(find_orphans "$TMP")" ]]; then
|
|
119
|
+
echo -e "${RED}FAIL${NC} (b) bp-manual-utility-tagged script was still flagged"
|
|
120
|
+
ok=0
|
|
121
|
+
else
|
|
122
|
+
echo -e "${GREEN}PASS${NC} (b) bp-manual-utility-tagged script is excluded"
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# (c) A script referenced only from .releaserc.json-shaped content must be
|
|
126
|
+
# excluded — regression guard for the exact scope gap fixed here
|
|
127
|
+
# (sync-version-mirrors.sh, called only from .releaserc.json's prepareCmd).
|
|
128
|
+
mkdir -p "$TMP/scope-fixture"
|
|
129
|
+
cat > "$TMP/scope-fixture/releaserc-lookalike.json" <<'EOF'
|
|
130
|
+
{"prepareCmd": "bash scripts/only-in-releaserc.sh 1.0.0"}
|
|
131
|
+
EOF
|
|
132
|
+
cat > "$TMP/scope-fixture/only-in-releaserc.sh" <<'EOF'
|
|
133
|
+
#!/usr/bin/env bash
|
|
134
|
+
echo "referenced only from a releaserc-shaped file"
|
|
135
|
+
EOF
|
|
136
|
+
refs=("$TMP/scope-fixture/releaserc-lookalike.json")
|
|
137
|
+
if is_referenced "only-in-releaserc.sh" "${refs[@]}"; then
|
|
138
|
+
echo -e "${GREEN}PASS${NC} (c) a releaserc-shaped reference is detected by is_referenced"
|
|
139
|
+
else
|
|
140
|
+
echo -e "${RED}FAIL${NC} (c) is_referenced did not find the releaserc-shaped reference"
|
|
141
|
+
ok=0
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
if [[ "$ok" -eq 1 ]]; then
|
|
145
|
+
echo "G-13 self-test: PASS"
|
|
146
|
+
exit 0
|
|
147
|
+
fi
|
|
148
|
+
echo "G-13 self-test: FAIL"
|
|
149
|
+
exit 1
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
echo "=== G-13: script orphan check ==="
|
|
153
|
+
ORPHANS="$(find_orphans "scripts")"
|
|
154
|
+
TOTAL=$(ls scripts/*.sh 2>/dev/null | wc -l | tr -d ' ')
|
|
155
|
+
|
|
156
|
+
if [[ -z "$ORPHANS" ]]; then
|
|
157
|
+
echo " ok : all $TOTAL script(s) in scripts/ are referenced or tagged bp-manual-utility"
|
|
158
|
+
echo -e "${GREEN}PASS${NC}"
|
|
159
|
+
echo "G-13: PASS"
|
|
160
|
+
exit 0
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
echo " orphaned scripts (present but reachable from no gate, doc, or workflow):"
|
|
164
|
+
printf '%s' "$ORPHANS"
|
|
165
|
+
echo -e "${RED}FAIL${NC} wire them into a gate, reference them from a skill/doc, tag them '# bp-manual-utility: <reason>', or delete them"
|
|
166
|
+
echo "G-13: FAIL"
|
|
167
|
+
exit 1
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# golden-g14-adapter-dispatch.sh — an adapter that can render must be dispatched.
|
|
4
|
+
#
|
|
5
|
+
# scripts/lib/srp-engine.py builds its dispatch list from targets.yaml entries
|
|
6
|
+
# carrying a skill.adapter. An adapter that defines render_skill() but is
|
|
7
|
+
# declared `skill: null` therefore never runs during sync, while its install
|
|
8
|
+
# function still reads a rendered directory that is never produced — the target
|
|
9
|
+
# reports success and installs nothing
|
|
10
|
+
# (BUG-2026-07-26-null-skill-adapters-install-nothing).
|
|
11
|
+
#
|
|
12
|
+
# Context-only bridges (aider, goose, ...) are exempt by construction: they
|
|
13
|
+
# define no render_skill, so there is nothing to dispatch.
|
|
14
|
+
#
|
|
15
|
+
# Usage: bash scripts/golden-g14-adapter-dispatch.sh [--self-test]
|
|
16
|
+
# Exit 0: every rendering adapter is dispatched
|
|
17
|
+
# Exit 1: at least one rendering adapter is undispatched (or, under
|
|
18
|
+
# --self-test, the gate failed to notice an injected one)
|
|
19
|
+
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/python-env.sh"
|
|
22
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
23
|
+
resolve_repo_root
|
|
24
|
+
cd "$REPO_ROOT"
|
|
25
|
+
|
|
26
|
+
RED='\033[0;31m'
|
|
27
|
+
GREEN='\033[0;32m'
|
|
28
|
+
NC='\033[0m'
|
|
29
|
+
|
|
30
|
+
check() { # $1 = targets.yaml path
|
|
31
|
+
$PYTHON - "$1" <<'PY'
|
|
32
|
+
import sys, os, re
|
|
33
|
+
import yaml
|
|
34
|
+
|
|
35
|
+
targets_path = sys.argv[1]
|
|
36
|
+
data = yaml.safe_load(open(targets_path, encoding="utf-8")) or {}
|
|
37
|
+
|
|
38
|
+
dispatched = set()
|
|
39
|
+
for t in data.get("targets") or []:
|
|
40
|
+
skill = t.get("skill")
|
|
41
|
+
if isinstance(skill, dict) and skill.get("adapter"):
|
|
42
|
+
dispatched.add(skill["adapter"])
|
|
43
|
+
|
|
44
|
+
problems = []
|
|
45
|
+
adapter_dir = os.path.join("scripts", "adapters")
|
|
46
|
+
for fn in sorted(os.listdir(adapter_dir)):
|
|
47
|
+
if not fn.endswith(".sh"):
|
|
48
|
+
continue
|
|
49
|
+
aid = fn[:-3]
|
|
50
|
+
src = open(os.path.join(adapter_dir, fn), encoding="utf-8").read()
|
|
51
|
+
if not re.search(r"^render_skill\(\)", src, re.M):
|
|
52
|
+
continue # context-only bridge — nothing to dispatch
|
|
53
|
+
if aid not in dispatched:
|
|
54
|
+
problems.append(
|
|
55
|
+
f"{aid}: defines render_skill() but targets.yaml does not dispatch it "
|
|
56
|
+
f"(skill.adapter missing or null) — sync renders nothing for it"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if problems:
|
|
60
|
+
for p in problems:
|
|
61
|
+
print(f" UNDISPATCHED {p}")
|
|
62
|
+
print(f"\n{len(problems)} rendering adapter(s) never run during sync")
|
|
63
|
+
sys.exit(1)
|
|
64
|
+
|
|
65
|
+
print(f" ok : all rendering adapters are dispatched ({len(dispatched)} in registry)")
|
|
66
|
+
sys.exit(0)
|
|
67
|
+
PY
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if [[ "${1:-}" == "--self-test" ]]; then
|
|
71
|
+
echo "=== G-14 self-test: prove the gate can fail ==="
|
|
72
|
+
TMP=$(mktemp -d)
|
|
73
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
74
|
+
$PYTHON - "$TMP/targets.yaml" <<'PY'
|
|
75
|
+
import sys, yaml
|
|
76
|
+
d = yaml.safe_load(open("scripts/targets.yaml", encoding="utf-8"))
|
|
77
|
+
# Null out the first dispatched adapter — the gate must notice.
|
|
78
|
+
for t in d.get("targets") or []:
|
|
79
|
+
s = t.get("skill")
|
|
80
|
+
if isinstance(s, dict) and s.get("adapter"):
|
|
81
|
+
print(f"injected: {t['id']} skill -> null")
|
|
82
|
+
t["skill"] = None
|
|
83
|
+
break
|
|
84
|
+
yaml.dump(d, open(sys.argv[1], "w", encoding="utf-8"), default_flow_style=False, sort_keys=False)
|
|
85
|
+
PY
|
|
86
|
+
set +e
|
|
87
|
+
check "$TMP/targets.yaml" >/dev/null 2>&1
|
|
88
|
+
rc=$?
|
|
89
|
+
set -e
|
|
90
|
+
if [[ $rc -ne 0 ]]; then
|
|
91
|
+
echo -e "${GREEN}PASS${NC} G-14 detected an injected undispatched adapter"
|
|
92
|
+
echo "G-14 self-test: PASS"
|
|
93
|
+
exit 0
|
|
94
|
+
fi
|
|
95
|
+
echo -e "${RED}FAIL${NC} G-14 passed on an injected null adapter — vacuous gate"
|
|
96
|
+
echo "G-14 self-test: FAIL"
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
echo "=== G-14: adapter dispatch coverage ==="
|
|
101
|
+
set +e
|
|
102
|
+
out=$(check "scripts/targets.yaml" 2>&1)
|
|
103
|
+
rc=$?
|
|
104
|
+
set -e
|
|
105
|
+
echo "$out"
|
|
106
|
+
if [[ $rc -eq 0 ]]; then
|
|
107
|
+
echo -e "${GREEN}PASS${NC}"
|
|
108
|
+
echo "G-14: PASS"
|
|
109
|
+
exit 0
|
|
110
|
+
fi
|
|
111
|
+
echo -e "${RED}FAIL${NC} see BUG-2026-07-26-null-skill-adapters-install-nothing"
|
|
112
|
+
echo "G-14: FAIL"
|
|
113
|
+
exit 1
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e45s02
|
|
3
|
+
# golden-g15-compliance-runner-selftest.sh — audit-compliance-runner.sh must
|
|
4
|
+
# correctly execute a Background step, a step on a file's last line with no
|
|
5
|
+
# trailing newline, and must still report a genuinely failing step as FAIL
|
|
6
|
+
# rather than silently dropping it.
|
|
7
|
+
#
|
|
8
|
+
# audit-compliance-runner.sh had two bugs that dropped steps entirely rather
|
|
9
|
+
# than failing them: no Background: handling at all (akita.feature's
|
|
10
|
+
# Background Given was silently skipped), and `done < "$FEATURE_FILE"` losing
|
|
11
|
+
# a final line with no trailing newline (karpathy.feature's last step never
|
|
12
|
+
# appeared in [STEP] output). Both are fixed; this gate is the regression
|
|
13
|
+
# guard so a future change to the runner can't reintroduce either silently —
|
|
14
|
+
# and, just as important, can't "fix" step-dropping by making every line
|
|
15
|
+
# execute unconditionally, which would hide a genuinely failing step as a
|
|
16
|
+
# false PASS.
|
|
17
|
+
#
|
|
18
|
+
# Usage: bash scripts/golden-g15-compliance-runner-selftest.sh [--self-test]
|
|
19
|
+
# Exit 0: Background executes, the no-newline last step executes, and a
|
|
20
|
+
# failing step is reported FAIL (or, under --self-test, a loose
|
|
21
|
+
# Given line outside any Background/Scenario is correctly NOT
|
|
22
|
+
# executed)
|
|
23
|
+
# Exit 1: any of the above does not hold
|
|
24
|
+
|
|
25
|
+
set -euo pipefail
|
|
26
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
27
|
+
resolve_repo_root
|
|
28
|
+
cd "$REPO_ROOT"
|
|
29
|
+
|
|
30
|
+
RED='\033[0;31m'
|
|
31
|
+
GREEN='\033[0;32m'
|
|
32
|
+
NC='\033[0m'
|
|
33
|
+
|
|
34
|
+
# Builds a fixture project at $1 with the step scripts a fixture .feature
|
|
35
|
+
# needs, then runs audit_run_file against $2 (a path relative to $1) and
|
|
36
|
+
# echoes the captured [STEP]/Result output.
|
|
37
|
+
run_fixture() { # $1 = fixture root, $2 = feature file path relative to root
|
|
38
|
+
local root="$1" feature="$2"
|
|
39
|
+
(
|
|
40
|
+
cd "$root"
|
|
41
|
+
# shellcheck source=lib/audit-compliance-runner.sh
|
|
42
|
+
source "$REPO_ROOT/scripts/lib/audit-compliance-runner.sh"
|
|
43
|
+
DRY_RUN=false SCENARIO_FILTER="" JUDGE="binary"
|
|
44
|
+
TOTAL_GLOBAL_PASS=0 TOTAL_GLOBAL_FAIL=0 TOTAL_GLOBAL_WAIVED=0 TOTAL_GLOBAL_EXPIRED=0
|
|
45
|
+
audit_run_file "$feature" 2>&1
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
build_step() { # $1 = fixture root, $2 = sanitized step filename (no .sh), $3 = exit code
|
|
50
|
+
cat > "$1/specs/verifications/steps/$2.sh" <<EOF
|
|
51
|
+
#!/usr/bin/env bash
|
|
52
|
+
exit $3
|
|
53
|
+
EOF
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if [[ "${1:-}" == "--self-test" ]]; then
|
|
57
|
+
echo "=== G-15 self-test: a loose Given outside Background/Scenario must not execute ==="
|
|
58
|
+
TMP=$(mktemp -d)
|
|
59
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
60
|
+
mkdir -p "$TMP/specs/verifications/steps" "$TMP/specs/verifications/reports"
|
|
61
|
+
|
|
62
|
+
build_step "$TMP" "given-a-loose-step-outside-any-block" 0
|
|
63
|
+
# No "Background:" keyword and no "Scenario:" before this line — structurally
|
|
64
|
+
# mimics what the pre-fix runner treated every top-level Given/Then/And as
|
|
65
|
+
# (no scenario context tracked at all), which is the over-broad failure mode
|
|
66
|
+
# a bad fix could reintroduce: executing steps regardless of context.
|
|
67
|
+
printf 'Feature: G-15 self-test fixture\nGiven a loose step outside any block\n' \
|
|
68
|
+
> "$TMP/specs/features_fixture.feature"
|
|
69
|
+
|
|
70
|
+
OUTPUT=$(run_fixture "$TMP" "specs/features_fixture.feature")
|
|
71
|
+
if grep -q '\[STEP\] Given a loose step outside any block' <<<"$OUTPUT"; then
|
|
72
|
+
echo -e "${RED}FAIL${NC} a loose Given outside any Background/Scenario executed — the runner no longer tracks scenario context"
|
|
73
|
+
echo "G-15 self-test: FAIL"
|
|
74
|
+
exit 1
|
|
75
|
+
fi
|
|
76
|
+
echo -e "${GREEN}PASS${NC} the loose Given correctly did not execute"
|
|
77
|
+
echo "G-15 self-test: PASS"
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
echo "=== G-15: compliance runner Background/EOF/failure handling ==="
|
|
82
|
+
TMP=$(mktemp -d)
|
|
83
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
84
|
+
mkdir -p "$TMP/specs/verifications/steps" "$TMP/specs/verifications/reports"
|
|
85
|
+
|
|
86
|
+
build_step "$TMP" "given-a-background-step" 0
|
|
87
|
+
build_step "$TMP" "then-a-normal-step" 0
|
|
88
|
+
build_step "$TMP" "and-a-step-that-should-fail" 1
|
|
89
|
+
build_step "$TMP" "and-a-step-with-no-trailing-newline" 0
|
|
90
|
+
|
|
91
|
+
# Written without a trailing newline after the last line — printf, not a
|
|
92
|
+
# heredoc, so the file ends exactly where karpathy.feature's bug lived.
|
|
93
|
+
printf 'Feature: G-15 fixture\n Background:\n Given a background step\n\n Scenario: Fixture\n Then a normal step\n And a step that should fail\n And a step with no trailing newline' \
|
|
94
|
+
> "$TMP/specs/features_fixture.feature"
|
|
95
|
+
|
|
96
|
+
OUTPUT=$(run_fixture "$TMP" "specs/features_fixture.feature")
|
|
97
|
+
|
|
98
|
+
FAILS=0
|
|
99
|
+
|
|
100
|
+
if grep -q '\[STEP\] Given a background step' <<<"$OUTPUT"; then
|
|
101
|
+
echo -e "${GREEN}PASS${NC} Background step executed"
|
|
102
|
+
else
|
|
103
|
+
echo -e "${RED}FAIL${NC} Background step did not execute"
|
|
104
|
+
FAILS=$((FAILS + 1))
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
if grep -q '\[STEP\] And a step with no trailing newline' <<<"$OUTPUT"; then
|
|
108
|
+
echo -e "${GREEN}PASS${NC} the no-trailing-newline last step executed"
|
|
109
|
+
else
|
|
110
|
+
echo -e "${RED}FAIL${NC} the no-trailing-newline last step did not execute"
|
|
111
|
+
FAILS=$((FAILS + 1))
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
if grep -A2 '\[STEP\] And a step that should fail' <<<"$OUTPUT" | grep -q 'Result: FAIL'; then
|
|
115
|
+
echo -e "${GREEN}PASS${NC} the genuinely failing step is reported FAIL, not silently dropped"
|
|
116
|
+
else
|
|
117
|
+
echo -e "${RED}FAIL${NC} the genuinely failing step was not reported FAIL"
|
|
118
|
+
FAILS=$((FAILS + 1))
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
if [[ "$FAILS" -eq 0 ]]; then
|
|
122
|
+
echo "G-15: PASS"
|
|
123
|
+
exit 0
|
|
124
|
+
fi
|
|
125
|
+
echo "G-15: FAIL ($FAILS assertion(s) failed)"
|
|
126
|
+
exit 1
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e44s02
|
|
3
|
+
# golden-g16-spec-version-gap.sh — bigpowers' own repo must never show a spec
|
|
4
|
+
# version gap against itself.
|
|
5
|
+
#
|
|
6
|
+
# check-spec-version-gap.sh is a fully-formed SoT-drift detector for consuming
|
|
7
|
+
# projects (installed package.json version vs the spec-format version stamped
|
|
8
|
+
# or fingerprinted in their specs/), the same class of check as G-12, but it
|
|
9
|
+
# had no gate of its own and was reachable from nothing (G-13). Running it
|
|
10
|
+
# against this repo's own specs/ is the natural self-test the tool already
|
|
11
|
+
# supports via --project: bigpowers' own package.json version and its own
|
|
12
|
+
# specs/state.yaml bigpowers_version stamp must always agree.
|
|
13
|
+
#
|
|
14
|
+
# Usage: bash scripts/golden-g16-spec-version-gap.sh [--self-test]
|
|
15
|
+
# Exit 0: no gap (or, under --self-test, a deliberately injected gap was
|
|
16
|
+
# correctly detected)
|
|
17
|
+
# Exit 1: a real gap exists, or --self-test failed to detect an injected one
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
21
|
+
resolve_repo_root
|
|
22
|
+
cd "$REPO_ROOT"
|
|
23
|
+
|
|
24
|
+
RED='\033[0;31m'
|
|
25
|
+
GREEN='\033[0;32m'
|
|
26
|
+
NC='\033[0m'
|
|
27
|
+
|
|
28
|
+
if [[ "${1:-}" == "--self-test" ]]; then
|
|
29
|
+
echo "=== G-16 self-test: prove the gap detector can fail ==="
|
|
30
|
+
TMP=$(mktemp -d)
|
|
31
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
32
|
+
mkdir -p "$TMP/specs"
|
|
33
|
+
cp package.json "$TMP/package.json"
|
|
34
|
+
# A stamped version far behind package.json's must be reported as a gap.
|
|
35
|
+
# set +e around the call: under set -e, `out=$(cmd)` itself aborts the
|
|
36
|
+
# script when cmd exits non-zero — exactly the outcome under test here — so
|
|
37
|
+
# rc=$? would never be reached.
|
|
38
|
+
printf 'bigpowers_version: 0.0.1\nactive_flow: null\n' > "$TMP/specs/state.yaml"
|
|
39
|
+
set +e
|
|
40
|
+
out=$(bash scripts/check-spec-version-gap.sh --project "$TMP" --skip-block --json 2>&1)
|
|
41
|
+
rc=$?
|
|
42
|
+
set -e
|
|
43
|
+
# check-spec-version-gap.sh's stamp path emits json.dumps-formatted JSON
|
|
44
|
+
# ("gap": true, with a space); its fingerprint path emits hand-concatenated
|
|
45
|
+
# JSON ("gap":true, no space) — tolerate both rather than assuming one.
|
|
46
|
+
if [[ $rc -eq 1 ]] && grep -qE '"gap":[[:space:]]*true' <<<"$out"; then
|
|
47
|
+
echo -e "${GREEN}PASS${NC} injected version gap detected (exit $rc): $out"
|
|
48
|
+
echo "G-16 self-test: PASS"
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
echo -e "${RED}FAIL${NC} injected gap was not detected (exit $rc): $out"
|
|
52
|
+
echo "G-16 self-test: FAIL"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo "=== G-16: spec version gap (self-check) ==="
|
|
57
|
+
# Same set -e hazard as the self-test above: a real gap exits non-zero, and
|
|
58
|
+
# without set +e this assignment would abort before the FAIL branch prints.
|
|
59
|
+
set +e
|
|
60
|
+
OUT=$(bash scripts/check-spec-version-gap.sh --project . --skip-block --json 2>&1)
|
|
61
|
+
RC=$?
|
|
62
|
+
set -e
|
|
63
|
+
echo " $OUT"
|
|
64
|
+
|
|
65
|
+
if [[ $RC -eq 0 ]]; then
|
|
66
|
+
echo -e "${GREEN}PASS${NC} no spec version gap"
|
|
67
|
+
echo "G-16: PASS"
|
|
68
|
+
exit 0
|
|
69
|
+
fi
|
|
70
|
+
echo -e "${RED}FAIL${NC} bigpowers' own specs/ disagree with its own package.json version (exit $RC)"
|
|
71
|
+
echo "G-16: FAIL"
|
|
72
|
+
exit 1
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# adapter-guard.sh — shared skill-name validation for every render adapter.
|
|
4
|
+
#
|
|
5
|
+
# Adapters interpolate the SkillIR `name` straight into a filesystem path
|
|
6
|
+
# (mkdir -p "$dir/$IR_NAME"). A name containing "/" or ".." therefore writes
|
|
7
|
+
# outside the destination directory.
|
|
8
|
+
#
|
|
9
|
+
# Ten adapters carried a private copy of this check (qwen_is_unsafe_skill_name
|
|
10
|
+
# and friends) and nine had none at all — and the nine unguarded ones were
|
|
11
|
+
# exactly the nine that never got a per-target test. One guard, sourced by every
|
|
12
|
+
# adapter, replaces both the duplication and the gap.
|
|
13
|
+
|
|
14
|
+
# Returns 0 (true) when the name must not be used as a path component.
|
|
15
|
+
bp_is_unsafe_skill_name() {
|
|
16
|
+
local name="${1-}"
|
|
17
|
+
[[ -z "$name" || "$name" == "null" || "$name" == *"/"* || "$name" == *".."* || "$name" == .* ]]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Echoes the name when safe; otherwise reports on stderr and returns 1.
|
|
21
|
+
# Usage inside render_skill: name="$(bp_assert_safe_skill_name "$IR_NAME" adaptername)" || return 1
|
|
22
|
+
bp_assert_safe_skill_name() {
|
|
23
|
+
local name="${1-}"
|
|
24
|
+
local adapter="${2:-adapter}"
|
|
25
|
+
if bp_is_unsafe_skill_name "$name"; then
|
|
26
|
+
echo "${adapter}: refusing unsafe skill name: ${name:-<empty>}" >&2
|
|
27
|
+
return 1
|
|
28
|
+
fi
|
|
29
|
+
printf '%s' "$name"
|
|
30
|
+
}
|
|
@@ -5,6 +5,23 @@
|
|
|
5
5
|
if [ -n "${AUDIT_COMPLIANCE_REPORT_LOADED:-}" ]; then return 0; fi
|
|
6
6
|
AUDIT_COMPLIANCE_REPORT_LOADED=1
|
|
7
7
|
|
|
8
|
+
# A score sitting exactly on the 94% threshold has zero margin: one more
|
|
9
|
+
# failing scenario (the suite grows over time) blocks all forward work under
|
|
10
|
+
# this repo's own Always-Green doctrine — it already happened once mid-session.
|
|
11
|
+
# pass-warn surfaces a thinning margin before it goes red; it still exits 0,
|
|
12
|
+
# it does not block, it only makes the OKF report and terminal output loud
|
|
13
|
+
# about a score close enough to the threshold to be worth attention.
|
|
14
|
+
audit_gate_status() {
|
|
15
|
+
local score="$1"
|
|
16
|
+
if [[ "$score" -lt 94 ]]; then
|
|
17
|
+
echo "fail"
|
|
18
|
+
elif [[ "$score" -lt 97 ]]; then
|
|
19
|
+
echo "pass-warn"
|
|
20
|
+
else
|
|
21
|
+
echo "pass"
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
24
|
+
|
|
8
25
|
audit_write_okf_report() {
|
|
9
26
|
local OKF_DIR OKF_FILE TIMESTAMP GIT_COMMIT GATE TOTAL_GLOBAL_ALL
|
|
10
27
|
|
|
@@ -20,7 +37,7 @@ audit_write_okf_report() {
|
|
|
20
37
|
OKF_FILE="$OKF_DIR/audit-$(date +%Y-%m-%d).okf.md"
|
|
21
38
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
22
39
|
GIT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
|
|
23
|
-
GATE=$(
|
|
40
|
+
GATE=$(audit_gate_status "$SCORE")
|
|
24
41
|
|
|
25
42
|
cat > "$OKF_FILE" << OKF_EOF
|
|
26
43
|
---
|
|
@@ -67,10 +84,18 @@ audit_print_summary_and_exit() {
|
|
|
67
84
|
echo " SCORE: ${SCORE}% (threshold 94%)"
|
|
68
85
|
fi
|
|
69
86
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
case "$(audit_gate_status "$SCORE")" in
|
|
88
|
+
pass)
|
|
89
|
+
echo " GATE: PASS"
|
|
90
|
+
exit 0
|
|
91
|
+
;;
|
|
92
|
+
pass-warn)
|
|
93
|
+
echo " GATE: PASS (WARNING: ${SCORE}% is within 3 points of the 94% threshold — margin is thin)"
|
|
94
|
+
exit 0
|
|
95
|
+
;;
|
|
96
|
+
*)
|
|
97
|
+
echo " GATE: FAIL (below 94%)"
|
|
98
|
+
exit 1
|
|
99
|
+
;;
|
|
100
|
+
esac
|
|
76
101
|
}
|
|
@@ -84,13 +84,26 @@ audit_run_file() {
|
|
|
84
84
|
TOTAL_PASS=0
|
|
85
85
|
TOTAL_FAIL=0
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
# `|| [[ -n "$line" ]]` is required: read returns non-zero on a final line
|
|
88
|
+
# with no trailing newline, so without this a feature file not ending in \n
|
|
89
|
+
# silently drops its last step — confirmed on karpathy.feature, whose last
|
|
90
|
+
# line ("And I should push back on unnecessary complexity") never appeared
|
|
91
|
+
# in [STEP] output at all.
|
|
92
|
+
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
88
93
|
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
89
94
|
|
|
90
95
|
if [[ "$line" =~ ^Feature: ]]; then
|
|
91
96
|
CURRENT_FEATURE="${line#Feature: }"
|
|
92
97
|
echo "FEATURE: $CURRENT_FEATURE"
|
|
93
98
|
echo "## Feature: $CURRENT_FEATURE" >> "$REPORT_FILE"
|
|
99
|
+
elif [[ "$line" =~ ^Background: ]]; then
|
|
100
|
+
# A Background's Given/And lines must execute the same as a Scenario's —
|
|
101
|
+
# without this branch IN_SCENARIO never goes true here, so every step
|
|
102
|
+
# under Background is silently skipped (not FAILed, not counted at all).
|
|
103
|
+
# Runs once per file, matching how every other line here executes once
|
|
104
|
+
# as encountered — not true per-scenario Gherkin re-execution semantics.
|
|
105
|
+
IN_SCENARIO=true
|
|
106
|
+
CURRENT_SCENARIO="Background"
|
|
94
107
|
elif [[ "$line" =~ ^Scenario: ]]; then
|
|
95
108
|
CURRENT_SCENARIO="${line#Scenario: }"
|
|
96
109
|
if [[ -n "$SCENARIO_FILTER" && "$CURRENT_SCENARIO" != "$SCENARIO_FILTER" ]]; then
|
|
@@ -19,10 +19,50 @@ GOLDEN_GATES=(
|
|
|
19
19
|
# first so a vacuous gate is caught before its verdict is trusted.
|
|
20
20
|
"g12-status-selftest:bash scripts/golden-g12-status-consistency.sh --self-test:false"
|
|
21
21
|
"g12-status-consistency:bash scripts/golden-g12-status-consistency.sh:false"
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
22
|
+
# audit-compliance-runner.sh silently dropped a Background: step and a
|
|
23
|
+
# feature file's last line when it had no trailing newline — a step exists,
|
|
24
|
+
# is correct, and never runs is exactly this session's recurring defect
|
|
25
|
+
# class. Fixture-based regression guard for both, plus a check that a fix
|
|
26
|
+
# to "make steps execute" doesn't also make a genuinely failing step report
|
|
27
|
+
# as PASS.
|
|
28
|
+
"g15-compliance-runner-selftest:bash scripts/golden-g15-compliance-runner-selftest.sh --self-test:false"
|
|
29
|
+
"g15-compliance-runner:bash scripts/golden-g15-compliance-runner-selftest.sh:false"
|
|
30
|
+
# Writing a script must be enough to make it run: G-13 fails if any
|
|
31
|
+
# scripts/*.sh is absent, unreferenced, and untagged bp-manual-utility.
|
|
32
|
+
# Broadened from scripts/test-*.sh only after a catalog-wide review found 9
|
|
33
|
+
# more orphans among non-test scripts; renamed to match (golden-g13-test-
|
|
34
|
+
# orphans.sh -> golden-g13-script-orphans.sh).
|
|
35
|
+
"g13-script-orphans-selftest:bash scripts/golden-g13-script-orphans.sh --self-test:false"
|
|
36
|
+
"g13-script-orphans:bash scripts/golden-g13-script-orphans.sh:false"
|
|
37
|
+
# An adapter that defines render_skill() must be dispatched by targets.yaml,
|
|
38
|
+
# or sync renders nothing for it while its install still claims success.
|
|
39
|
+
# docs/WORKFLOWS.md is generated from specs/workflows/*.yaml; a diagram nothing
|
|
40
|
+
# regenerates is a diagram that lies (see specs/archive/assets/README.md).
|
|
41
|
+
"workflow-diagrams-fresh:bash scripts/generate-workflow-diagrams.sh --check:false"
|
|
42
|
+
# REFERENCE.md nav tables are line-number indexes; hand-maintained they drift
|
|
43
|
+
# the moment a section grows (all 10 were stale when this gate was added).
|
|
44
|
+
"reference-nav-fresh:bash scripts/generate-reference-nav.sh --check:false"
|
|
45
|
+
"g14-adapter-dispatch-selftest:bash scripts/golden-g14-adapter-dispatch.sh --self-test:false"
|
|
46
|
+
"g14-adapter-dispatch:bash scripts/golden-g14-adapter-dispatch.sh:false"
|
|
47
|
+
# check-spec-version-gap.sh is a fully-formed SoT-drift detector for
|
|
48
|
+
# consuming projects but had no gate of its own (G-13 orphan). Self-checking
|
|
49
|
+
# bigpowers' own repo against its own package.json is the natural gate.
|
|
50
|
+
"g16-spec-version-gap-selftest:bash scripts/golden-g16-spec-version-gap.sh --self-test:false"
|
|
51
|
+
"g16-spec-version-gap:bash scripts/golden-g16-spec-version-gap.sh:false"
|
|
25
52
|
"target-contracts:bash scripts/test-target-contracts.sh:false"
|
|
53
|
+
# Registry-driven replacements for the 25 hand-written per-target scripts.
|
|
54
|
+
"install-hub:bash scripts/test-install-hub.sh:false"
|
|
55
|
+
"adapter-render:bash scripts/test-adapter-render.sh:false"
|
|
56
|
+
"adapters:bash scripts/test-adapters.sh:false"
|
|
57
|
+
# Previously orphaned: present in scripts/ but reachable from no gate.
|
|
58
|
+
"tombstone-mechanism:bash scripts/test-tombstone-mechanism.sh:false"
|
|
59
|
+
"trace-strict:bash scripts/test-trace-strict.sh:false"
|
|
60
|
+
"trace-matrix-size:bash scripts/test-trace-matrix-size.sh:false"
|
|
61
|
+
"setup-no-pyyaml:bash scripts/test-setup-no-pyyaml.sh:false"
|
|
62
|
+
"install-distribute-only:bash scripts/test-install-distribute-only.sh:false"
|
|
63
|
+
"completeness-critic-scope:bash scripts/test-completeness-critic-scope.sh:false"
|
|
64
|
+
"epics-wiki-zero-stories:bash scripts/test-generate-epics-wiki-zero-stories.sh:false"
|
|
65
|
+
"golden-g11-worktree-venv:bash scripts/test-golden-g11-worktree-venv.sh:false"
|
|
26
66
|
"install-helpers:bash scripts/test-install-helpers.sh:false"
|
|
27
67
|
"import-boundaries:bash scripts/check-import-boundaries.sh:false"
|
|
28
68
|
"skill-catalog:bash scripts/validate-skill-catalog.sh:false"
|