@event4u/agent-config 16.5.0 → 17.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -59,23 +59,38 @@
|
|
|
59
59
|
*
|
|
60
60
|
* Inputs:
|
|
61
61
|
* --base-ref REF git ref to diff against (default: origin/main, then main)
|
|
62
|
-
* --files F [F …] override the changed-file list (testing
|
|
62
|
+
* --files F [F …] override the changed-file list (testing); CI derives
|
|
63
|
+
* the list from git with --base-ref, because a hosted
|
|
64
|
+
* PR file list names a rename by its destination only
|
|
63
65
|
* --root DIR repo root the diff and artifacts are read from (testing)
|
|
66
|
+
* --rev REV the commit the gated content and the artifacts are read
|
|
67
|
+
* at (default HEAD) — Git objects, never the working tree,
|
|
68
|
+
* so an uncommitted edit can neither pass nor fail the gate.
|
|
69
|
+
* Without --files it is resolved ONCE to a commit id, and
|
|
70
|
+
* that id — not the name — feeds the diff, the digest and
|
|
71
|
+
* the record read, so a ref that moves mid-run cannot pair
|
|
72
|
+
* one commit's file list with another commit's content
|
|
64
73
|
* --policy-root DIR where the quorum policy is read from (testing); defaults
|
|
65
74
|
* to THIS script's tree, so a base-revision run reads the
|
|
66
75
|
* base's policy rather than one the candidate lowered
|
|
67
76
|
* --quiet verdict line only
|
|
68
77
|
*
|
|
78
|
+
* An option that takes a value and is given none is a refusal (exit 1), never
|
|
79
|
+
* a silent default.
|
|
80
|
+
*
|
|
69
81
|
* Exit codes: 0 = pass (or nothing gated) · 1 = fail · 3 = internal error.
|
|
70
82
|
*/
|
|
71
83
|
|
|
72
|
-
import { spawnSync } from 'node:child_process';
|
|
73
84
|
import * as fs from 'node:fs';
|
|
74
85
|
import * as path from 'node:path';
|
|
75
86
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
76
87
|
|
|
77
88
|
import { GateLedger } from './_lib/gate_ledger.js';
|
|
78
|
-
import {
|
|
89
|
+
import {
|
|
90
|
+
dispatchImportClosure,
|
|
91
|
+
verdictModules,
|
|
92
|
+
type ClosureTree,
|
|
93
|
+
} from './_lib/dispatch_import_closure.js';
|
|
79
94
|
import { is_kernel_rule } from './_lib/kernel_rules.js';
|
|
80
95
|
import { reportScanned } from './_lib/scan_scope.js';
|
|
81
96
|
import {
|
|
@@ -85,6 +100,18 @@ import {
|
|
|
85
100
|
readRequiredProviders,
|
|
86
101
|
type RatificationProblem,
|
|
87
102
|
} from './_lib/ratification_artifact.js';
|
|
103
|
+
import {
|
|
104
|
+
DEFAULT_REVISION,
|
|
105
|
+
GatedSubjectRefusal,
|
|
106
|
+
changedFilesBetween,
|
|
107
|
+
fileAtRevision,
|
|
108
|
+
optionValue,
|
|
109
|
+
refExists,
|
|
110
|
+
resolveRevision,
|
|
111
|
+
subjectOf,
|
|
112
|
+
treeAtRevision,
|
|
113
|
+
type SubjectReading,
|
|
114
|
+
} from './_lib/ratification_subject.js';
|
|
88
115
|
|
|
89
116
|
const _HERE = fileURLToPath(import.meta.url);
|
|
90
117
|
const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
@@ -102,6 +129,30 @@ export const READER_PATH = 'src/scripts/_lib/ratification_artifact.ts';
|
|
|
102
129
|
*/
|
|
103
130
|
export const CLOSURE_READER_PATH = 'src/scripts/_lib/dispatch_import_closure.ts';
|
|
104
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Modules of this gate's static import closure that run inside the verdict, so
|
|
134
|
+
* an edit to one is an edit to the gate:
|
|
135
|
+
*
|
|
136
|
+
* - `_lib/adr_frontmatter.ts` parses the record's header, verdict included;
|
|
137
|
+
* - `_lib/gate_ledger.ts` and `_lib/scan_scope.ts` run before the exit code is
|
|
138
|
+
* returned, so either could end the process first;
|
|
139
|
+
* - `_lib/ratification_subject.ts` computes the digest a record must carry.
|
|
140
|
+
*
|
|
141
|
+
* `_lib/kernel_rules.ts` is already gated as plumbing. A change that gates a
|
|
142
|
+
* module and edits it at once is digested over different files by the base
|
|
143
|
+
* revision's gate and by its own, so no single record answers for both: a
|
|
144
|
+
* module joins this list in a change that leaves its bytes alone. The writer
|
|
145
|
+
* CLIs `src/scripts/ratification_subject.ts` and `src/scripts/ratification_header.ts`
|
|
146
|
+
* and the contract stay outside by owner decision (2026-10-15): the gate does
|
|
147
|
+
* not import them, recomputes the digest and reads only the record.
|
|
148
|
+
*/
|
|
149
|
+
export const MECHANISM_IMPORT_PATHS: readonly string[] = [
|
|
150
|
+
'src/scripts/_lib/adr_frontmatter.ts',
|
|
151
|
+
'src/scripts/_lib/gate_ledger.ts',
|
|
152
|
+
'src/scripts/_lib/ratification_subject.ts',
|
|
153
|
+
'src/scripts/_lib/scan_scope.ts',
|
|
154
|
+
];
|
|
155
|
+
|
|
105
156
|
/** The in-repo quorum policy. Present on every runner; absent means refuse. */
|
|
106
157
|
export const POLICY_PATH = 'src/config/ratification-policy.json';
|
|
107
158
|
|
|
@@ -182,10 +233,11 @@ const GOVERNANCE_HOOK_RE = /^src\/scripts\/hooks\/block_[a-z0-9_]+\.ts$/;
|
|
|
182
233
|
* from that list removes a rule from this gate's own reach — the one edit
|
|
183
234
|
* that could quietly narrow the gate while every other path kept working.
|
|
184
235
|
*
|
|
185
|
-
*
|
|
186
|
-
* plumbing guard
|
|
187
|
-
*
|
|
188
|
-
*
|
|
236
|
+
* No `pre_tool_use` concern bound in `hook_manifest.yaml` denies an edit to
|
|
237
|
+
* either: the plumbing guard protects four generated build outputs and names
|
|
238
|
+
* `dispatch_hook.ts` only where it reads one, and the kernel-rule write guard
|
|
239
|
+
* imports `kernel_rules.ts` without protecting it. For these two paths the
|
|
240
|
+
* record this gate demands is the only layer, not a second one beside a deny.
|
|
189
241
|
*
|
|
190
242
|
* The compiled tables are REGENERATED, not hand-edited, by
|
|
191
243
|
* `./scripts-run src/scripts/compile_hook_manifest --table manifest|host-lowering`,
|
|
@@ -243,12 +295,18 @@ export function derivedPlumbing(root: string = REPO): readonly string[] {
|
|
|
243
295
|
* strips the names that classed it, so declassifying one is itself a gated
|
|
244
296
|
* edit of it.
|
|
245
297
|
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* the gate's own tree sees no arrivals, and says nothing it cannot measure.
|
|
298
|
+
* Each side is a checkout path or a commit's objects (see `derivedFor`). A
|
|
299
|
+
* checkout equal to `root` is the same tree on both sides and has no arrivals.
|
|
249
300
|
*/
|
|
250
|
-
export function closureArrivals(
|
|
251
|
-
|
|
301
|
+
export function closureArrivals(
|
|
302
|
+
root: string | ClosureTree,
|
|
303
|
+
baseRoot: string | ClosureTree = REPO,
|
|
304
|
+
): string[] {
|
|
305
|
+
if (
|
|
306
|
+
typeof root === 'string' &&
|
|
307
|
+
typeof baseRoot === 'string' &&
|
|
308
|
+
path.resolve(root) === path.resolve(baseRoot)
|
|
309
|
+
) {
|
|
252
310
|
return [];
|
|
253
311
|
}
|
|
254
312
|
const base = new Set(dispatchImportClosure(baseRoot).map((e) => e.path));
|
|
@@ -260,13 +318,19 @@ export function closureArrivals(root: string, baseRoot: string = REPO): string[]
|
|
|
260
318
|
/**
|
|
261
319
|
* A kernel rule, in the source tree or in any projection.
|
|
262
320
|
*
|
|
263
|
-
* The reach is deliberately the same as the
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
321
|
+
* The reach is deliberately the same as the tool-call deny's, and that deny is
|
|
322
|
+
* bound rather than retired: `block-kernel-rule-writes` has a row in
|
|
323
|
+
* `src/scripts/hook_manifest.yaml` and sits in the `pre_tool_use` list of three
|
|
324
|
+
* host sections there. The header above says why both mechanisms stand; this
|
|
325
|
+
* sentence described the deny as already withdrawn and contradicted it.
|
|
326
|
+
*
|
|
327
|
+
* The reach: any path whose basename is a kernel rule filename and which sits
|
|
328
|
+
* under a `rules/` path segment. `src/rules/commit-policy.md` is the source;
|
|
329
|
+
* `.claude/rules/…`, `.augment/rules/…` and `dist/agent-src/rules/…` are
|
|
330
|
+
* projections. A hand-edited projection reaches consumers without the source
|
|
331
|
+
* ever changing, so narrowing this to the source alone would cover half of
|
|
332
|
+
* what the deny covers — the gate that reaches every host is not supposed to
|
|
333
|
+
* be the narrower of the two.
|
|
270
334
|
*
|
|
271
335
|
* A kernel-NAMED file outside a `rules/` directory (a doc, a fixture) is not a
|
|
272
336
|
* rule file and is not matched.
|
|
@@ -281,6 +345,22 @@ export interface GatedPaths {
|
|
|
281
345
|
self: boolean;
|
|
282
346
|
}
|
|
283
347
|
|
|
348
|
+
/**
|
|
349
|
+
* True for a file of the ratification mechanism itself — the one list both the
|
|
350
|
+
* classification and the subject digest read.
|
|
351
|
+
*/
|
|
352
|
+
export function isMechanismPath(p: string): boolean {
|
|
353
|
+
return (
|
|
354
|
+
p === SELF_PATH ||
|
|
355
|
+
p === READER_PATH ||
|
|
356
|
+
p === CLOSURE_READER_PATH ||
|
|
357
|
+
p === POLICY_PATH ||
|
|
358
|
+
p === WORKFLOW_PATH ||
|
|
359
|
+
ANCHOR_PATHS.includes(p) ||
|
|
360
|
+
MECHANISM_IMPORT_PATHS.includes(p)
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
|
|
284
364
|
/** Partition a changed-file list into the surfaces this gate watches. */
|
|
285
365
|
export function classifyPaths(
|
|
286
366
|
files: readonly string[],
|
|
@@ -296,14 +376,7 @@ export function classifyPaths(
|
|
|
296
376
|
if (p === '') {
|
|
297
377
|
continue;
|
|
298
378
|
}
|
|
299
|
-
if (
|
|
300
|
-
p === SELF_PATH ||
|
|
301
|
-
p === READER_PATH ||
|
|
302
|
-
p === CLOSURE_READER_PATH ||
|
|
303
|
-
p === POLICY_PATH ||
|
|
304
|
-
p === WORKFLOW_PATH ||
|
|
305
|
-
ANCHOR_PATHS.includes(p)
|
|
306
|
-
) {
|
|
379
|
+
if (isMechanismPath(p)) {
|
|
307
380
|
self = true;
|
|
308
381
|
continue;
|
|
309
382
|
}
|
|
@@ -354,33 +427,92 @@ export function configuredProviderCount(policyRoot: string): number | null {
|
|
|
354
427
|
}
|
|
355
428
|
}
|
|
356
429
|
|
|
357
|
-
function gitChangedFiles(baseRef: string, root: string): string[] | null {
|
|
358
|
-
const res = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
|
|
359
|
-
cwd: root,
|
|
360
|
-
encoding: 'utf8',
|
|
361
|
-
});
|
|
362
|
-
if (res.status !== 0) {
|
|
363
|
-
return null;
|
|
364
|
-
}
|
|
365
|
-
return (res.stdout ?? '').split('\n').filter((l) => l.trim() !== '');
|
|
366
|
-
}
|
|
367
|
-
|
|
368
430
|
function resolveBaseRef(explicit: string | null, root: string): string {
|
|
369
431
|
if (explicit !== null) {
|
|
370
432
|
return explicit;
|
|
371
433
|
}
|
|
372
434
|
for (const candidate of ['origin/main', 'origin/master', 'main', 'master']) {
|
|
373
|
-
|
|
374
|
-
cwd: root,
|
|
375
|
-
stdio: ['ignore', 'ignore', 'ignore'],
|
|
376
|
-
});
|
|
377
|
-
if (res.status === 0) {
|
|
435
|
+
if (refExists(root, candidate)) {
|
|
378
436
|
return candidate;
|
|
379
437
|
}
|
|
380
438
|
}
|
|
381
439
|
return 'HEAD~1';
|
|
382
440
|
}
|
|
383
441
|
|
|
442
|
+
/**
|
|
443
|
+
* The plumbing closure this gate classifies with: the base side's verdict
|
|
444
|
+
* modules, the head side's, and every module arriving in the closure — so a
|
|
445
|
+
* module present on either side is watched.
|
|
446
|
+
*
|
|
447
|
+
* BOTH SIDES ARE COMMITS, READ FROM GIT OBJECTS IN `root`, in every execution
|
|
448
|
+
* shape. The head is `revision`, the commit the digest and the record are read
|
|
449
|
+
* at, so an uncommitted import edit cannot add or hide a module. The base is
|
|
450
|
+
* `baseRef`, resolved the way the diff's base is. The same two commits
|
|
451
|
+
* therefore yield the same gated set whichever copy of this script runs.
|
|
452
|
+
*
|
|
453
|
+
* Why the base is not this script's checkout: CI runs the base revision's copy
|
|
454
|
+
* with `--root <head>`, where that checkout IS the base, but a local run
|
|
455
|
+
* (pre-push, `task ci`, the subject CLI) executes the head's copy, whose
|
|
456
|
+
* checkout is the head. Compared with itself it saw no arrivals, digested fewer
|
|
457
|
+
* files than CI and refused the record CI required (PR #2371).
|
|
458
|
+
*
|
|
459
|
+
* One residue keeps the old base: a call with no `baseRef` over a `root` that
|
|
460
|
+
* is not this checkout — a direct call, or `--files` without `--base-ref` —
|
|
461
|
+
* compares against this script's checkout. A run that builds its own diff
|
|
462
|
+
* always passes the base it diffed against.
|
|
463
|
+
*
|
|
464
|
+
* `headCommit` is already a commit id; the base ref is resolved here.
|
|
465
|
+
*
|
|
466
|
+
* THROWS a {@link GatedSubjectRefusal} when the base does not resolve or the
|
|
467
|
+
* object store cannot be read.
|
|
468
|
+
*/
|
|
469
|
+
function derivedFor(root: string, baseRef: string | null, headCommit: string): readonly string[] {
|
|
470
|
+
const verdictsOf = (tree: ClosureTree): string[] =>
|
|
471
|
+
dispatchImportClosure(tree)
|
|
472
|
+
.filter((e) => e.class === 'verdict')
|
|
473
|
+
.map((e) => e.path);
|
|
474
|
+
const head = treeAtRevision(root, headCommit);
|
|
475
|
+
if (baseRef === null && path.resolve(root) !== REPO) {
|
|
476
|
+
return [...new Set([...derivedPlumbing(), ...verdictsOf(head), ...closureArrivals(head)])];
|
|
477
|
+
}
|
|
478
|
+
const base = treeAtRevision(root, resolveRevision(root, resolveBaseRef(baseRef, root)));
|
|
479
|
+
return [...new Set([...verdictsOf(base), ...verdictsOf(head), ...closureArrivals(head, base)])];
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* The `subject` digest a record must carry to answer for this diff, AND the
|
|
484
|
+
* gated files it covers — from one classification, never two.
|
|
485
|
+
*
|
|
486
|
+
* Exported so that whoever WRITES a record asks the gate for the digest rather
|
|
487
|
+
* than recomputing it from a second reading of the membership rule. A writer
|
|
488
|
+
* that derived its own list would be the second definition of "gated" that
|
|
489
|
+
* `ratification_subject`'s header exists to prevent — and it would fail only
|
|
490
|
+
* for the diffs where the two lists disagree, which are exactly the diffs that
|
|
491
|
+
* widen the gated set.
|
|
492
|
+
*
|
|
493
|
+
* RETURNS BOTH HALVES so that the coverage list printed beside a digest is the
|
|
494
|
+
* list that digest was taken over: a list classified separately, with a
|
|
495
|
+
* different `derived` input, could disagree with it — the false reassurance
|
|
496
|
+
* that list exists to prevent.
|
|
497
|
+
*
|
|
498
|
+
* The content is read at `revision` from Git objects, so the digest a writer
|
|
499
|
+
* prints and the digest this gate checks agree exactly when both name the
|
|
500
|
+
* same commit — the one the reviewers were shown.
|
|
501
|
+
*
|
|
502
|
+
* THROWS a {@link GatedSubjectRefusal} when the revision does not resolve, git
|
|
503
|
+
* cannot run, or a gated path escapes the tree or is not absent or a regular
|
|
504
|
+
* file in that commit. Callers turn that into a refusal; none may continue.
|
|
505
|
+
*/
|
|
506
|
+
export function expectedSubjectFor(
|
|
507
|
+
files: readonly string[],
|
|
508
|
+
root: string,
|
|
509
|
+
revision: string = DEFAULT_REVISION,
|
|
510
|
+
baseRef: string | null = null,
|
|
511
|
+
): SubjectReading {
|
|
512
|
+
const commit = resolveRevision(root, revision);
|
|
513
|
+
return subjectOf(root, files, derivedFor(root, baseRef, commit), commit);
|
|
514
|
+
}
|
|
515
|
+
|
|
384
516
|
export interface GateResult {
|
|
385
517
|
exitCode: 0 | 1 | 3;
|
|
386
518
|
lines: string[];
|
|
@@ -392,14 +524,10 @@ export function evaluate(
|
|
|
392
524
|
files: readonly string[],
|
|
393
525
|
root: string,
|
|
394
526
|
providerCount: number | null,
|
|
527
|
+
revision: string = DEFAULT_REVISION,
|
|
528
|
+
baseRef: string | null = null,
|
|
395
529
|
): GateResult {
|
|
396
530
|
const lines: string[] = [];
|
|
397
|
-
// The union of the closure read from the tree under review and from this
|
|
398
|
-
// script's own tree: under CI the gate code is the base revision's and
|
|
399
|
-
// `root` is the head, so a module present on either side is watched.
|
|
400
|
-
const gated = classifyPaths(files, [
|
|
401
|
-
...new Set([...derivedPlumbing(), ...derivedPlumbing(root), ...closureArrivals(root)]),
|
|
402
|
-
]);
|
|
403
531
|
const scanned = files.length;
|
|
404
532
|
|
|
405
533
|
// Every changed path is a planned target: the gate's denominator is the
|
|
@@ -407,11 +535,33 @@ export function evaluate(
|
|
|
407
535
|
// counting rather than a silence.
|
|
408
536
|
const ledger = new GateLedger('check_kernel_edit_ratified');
|
|
409
537
|
ledger.plan(files.map((f) => f.replace(/\\/g, '/').trim()).filter((f) => f !== ''));
|
|
538
|
+
|
|
539
|
+
// The revision is resolved once and the closure computed once, then both
|
|
540
|
+
// are handed to the digest below, so the classification and the digest
|
|
541
|
+
// read one head commit and one base.
|
|
542
|
+
let derived: readonly string[];
|
|
543
|
+
let headCommit: string;
|
|
544
|
+
try {
|
|
545
|
+
headCommit = resolveRevision(root, revision);
|
|
546
|
+
derived = derivedFor(root, baseRef, headCommit);
|
|
547
|
+
} catch (err) {
|
|
548
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
549
|
+
throw err;
|
|
550
|
+
}
|
|
551
|
+
lines.push(`❌ ${err.message}`);
|
|
552
|
+
for (const target of ledger.unaccountedTargets()) {
|
|
553
|
+
ledger.fail(target, 'the dispatcher closure could not be read at the named commits');
|
|
554
|
+
}
|
|
555
|
+
const tally = ledger.finalize();
|
|
556
|
+
lines.push('', `ledger: planned ${tally.planned} · completed 0 · failed ${tally.failed} · out_of_scope 0`);
|
|
557
|
+
return { exitCode: 1, lines, scanned };
|
|
558
|
+
}
|
|
559
|
+
const gated = classifyPaths(files, derived);
|
|
410
560
|
const gatedSet = new Set<string>([
|
|
411
561
|
...gated.kernelRules,
|
|
412
562
|
...gated.governanceHooks,
|
|
413
563
|
...gated.plumbing,
|
|
414
|
-
...(
|
|
564
|
+
...files.map((f) => f.replace(/\\/g, '/').trim()).filter(isMechanismPath),
|
|
415
565
|
]);
|
|
416
566
|
const artifactSet = new Set(ratificationArtifactsIn(files));
|
|
417
567
|
for (const target of ledger.unaccountedTargets()) {
|
|
@@ -442,6 +592,44 @@ export function evaluate(
|
|
|
442
592
|
);
|
|
443
593
|
};
|
|
444
594
|
|
|
595
|
+
/**
|
|
596
|
+
* The digest of this diff's gated content, recomputed from the tree rather
|
|
597
|
+
* than read from the record.
|
|
598
|
+
*
|
|
599
|
+
* WHICH FILES COUNT IS DECIDED BY THIS CODE, AND IN CI THIS CODE IS THE BASE
|
|
600
|
+
* REVISION'S. The workflow runs the base's copy of this gate with `--root
|
|
601
|
+
* <head>`, so the membership rule a candidate is judged by is one the
|
|
602
|
+
* candidate did not write — and the same holds for the digest, which uses
|
|
603
|
+
* this module's `classifyPaths` and the derived list computed just above.
|
|
604
|
+
* A change that widens the gated set is therefore judged, and written, by
|
|
605
|
+
* the same list.
|
|
606
|
+
*/
|
|
607
|
+
let expectedSubject: string;
|
|
608
|
+
let commit: string | null;
|
|
609
|
+
try {
|
|
610
|
+
({ digest: expectedSubject, revision: commit } = subjectOf(root, files, derived, headCommit));
|
|
611
|
+
} catch (err) {
|
|
612
|
+
// ONE boundary for EVERY failure of the subject computation: each is
|
|
613
|
+
// a subclass of `GatedSubjectRefusal`, so a gate that advertises a
|
|
614
|
+
// refusal cannot crash on one of its own refusal classes instead.
|
|
615
|
+
//
|
|
616
|
+
// Fail closed, and BEFORE the "nothing to ratify" exit: a revision
|
|
617
|
+
// that does not resolve, a git that cannot run, a gated path outside
|
|
618
|
+
// the tree or one that is not absent or a regular file in the commit
|
|
619
|
+
// is content the gate cannot describe, and a gate that cannot
|
|
620
|
+
// describe the content cannot say a record answers for it.
|
|
621
|
+
//
|
|
622
|
+
// NARROW AND TYPED, never a blanket catch: wrapping everything would
|
|
623
|
+
// report a defect in this gate as a property of the checkout. Anything
|
|
624
|
+
// that is not a refusal is a bug here and stays a crash.
|
|
625
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
626
|
+
throw err;
|
|
627
|
+
}
|
|
628
|
+
lines.push(`❌ ${err.message}`);
|
|
629
|
+
close(false);
|
|
630
|
+
return { exitCode: 1, lines, scanned };
|
|
631
|
+
}
|
|
632
|
+
|
|
445
633
|
if (!requiresRatification(gated)) {
|
|
446
634
|
lines.push(
|
|
447
635
|
'✅ no kernel rule, governance hook, hook-plumbing source or self edit in the ' +
|
|
@@ -455,7 +643,7 @@ export function evaluate(
|
|
|
455
643
|
...gated.kernelRules.map((p) => `kernel rule ${p}`),
|
|
456
644
|
...gated.governanceHooks.map((p) => `governance hook ${p}`),
|
|
457
645
|
...gated.plumbing.map((p) => `hook-plumbing source ${p}`),
|
|
458
|
-
...(gated.self ? ['the ratification mechanism itself (gate,
|
|
646
|
+
...(gated.self ? ['the ratification mechanism itself (gate, its imports, policy or workflow)'] : []),
|
|
459
647
|
];
|
|
460
648
|
lines.push(`Gated surfaces in this diff (${touched.length}):`);
|
|
461
649
|
for (const t of touched) {
|
|
@@ -486,22 +674,33 @@ export function evaluate(
|
|
|
486
674
|
let anyRatified = false;
|
|
487
675
|
const failures: string[] = [];
|
|
488
676
|
for (const rel of artifacts) {
|
|
489
|
-
|
|
677
|
+
// The record is read at the same commit as the content it answers
|
|
678
|
+
// for: a record rewritten in the working tree and never committed is
|
|
679
|
+
// not what a push or a merge would land.
|
|
490
680
|
let text: string;
|
|
491
681
|
try {
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
682
|
+
const bytes = commit === null ? null : fileAtRevision(root, commit, rel);
|
|
683
|
+
if (bytes === null) {
|
|
684
|
+
failures.push(`${rel}: listed in the diff but absent at \`${revision}\``);
|
|
685
|
+
continue;
|
|
686
|
+
}
|
|
687
|
+
text = bytes.toString('utf8');
|
|
688
|
+
} catch (err) {
|
|
689
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
690
|
+
throw err;
|
|
691
|
+
}
|
|
692
|
+
failures.push(`${rel}: ${err.message}`);
|
|
495
693
|
continue;
|
|
496
694
|
}
|
|
497
|
-
const reading = readRatification(text, providerCount);
|
|
695
|
+
const reading = readRatification(text, providerCount, expectedSubject);
|
|
498
696
|
if (isRatified(reading)) {
|
|
499
697
|
anyRatified = true;
|
|
500
698
|
lines.push('');
|
|
501
699
|
lines.push(
|
|
502
700
|
`✅ ${rel} — ratified by ${reading.artifact?.reviewed_by} ` +
|
|
503
701
|
`(providers: ${reading.artifact?.providers.join(', ')}; ` +
|
|
504
|
-
`effective after ${reading.artifact?.effective_after}
|
|
702
|
+
`effective after ${reading.artifact?.effective_after}; ` +
|
|
703
|
+
`subject ${String(reading.artifact?.subject).slice(0, 12)}…)`,
|
|
505
704
|
);
|
|
506
705
|
continue;
|
|
507
706
|
}
|
|
@@ -537,6 +736,7 @@ export function evaluate(
|
|
|
537
736
|
|
|
538
737
|
export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
539
738
|
let baseRef: string | null = null;
|
|
739
|
+
let revision = DEFAULT_REVISION;
|
|
540
740
|
let root = REPO;
|
|
541
741
|
// The policy is read relative to THIS SCRIPT's tree, never to `--root`.
|
|
542
742
|
//
|
|
@@ -552,18 +752,24 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
552
752
|
const files: string[] = [];
|
|
553
753
|
let collectingFiles = false;
|
|
554
754
|
|
|
755
|
+
const valueOptions = new Set(['--base-ref', '--root', '--rev', '--policy-root']);
|
|
555
756
|
for (let i = 0; i < argv.length; i += 1) {
|
|
556
757
|
const a = argv[i];
|
|
557
|
-
if (a
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
758
|
+
if (a !== undefined && valueOptions.has(a)) {
|
|
759
|
+
const value = optionValue(argv, i);
|
|
760
|
+
if (value === null) {
|
|
761
|
+
process.stderr.write(`❌ check_kernel_edit_ratified: ${a} takes a value\n`);
|
|
762
|
+
return 1;
|
|
763
|
+
}
|
|
764
|
+
if (a === '--base-ref') {
|
|
765
|
+
baseRef = value;
|
|
766
|
+
} else if (a === '--root') {
|
|
767
|
+
root = path.resolve(value);
|
|
768
|
+
} else if (a === '--rev') {
|
|
769
|
+
revision = value;
|
|
770
|
+
} else {
|
|
771
|
+
policyRoot = path.resolve(value);
|
|
772
|
+
}
|
|
567
773
|
i += 1;
|
|
568
774
|
collectingFiles = false;
|
|
569
775
|
} else if (a === '--quiet') {
|
|
@@ -576,19 +782,38 @@ export function main(argv: readonly string[] = process.argv.slice(2)): number {
|
|
|
576
782
|
}
|
|
577
783
|
}
|
|
578
784
|
|
|
785
|
+
// ONE resolution for the whole run. The diff, the digest and the record read
|
|
786
|
+
// all receive this id; passing the name to each would let a ref that moves
|
|
787
|
+
// between them yield a file list from one commit and a digest and record
|
|
788
|
+
// from another.
|
|
789
|
+
let commit: string;
|
|
790
|
+
try {
|
|
791
|
+
commit = resolveRevision(root, revision);
|
|
792
|
+
} catch (err) {
|
|
793
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
794
|
+
throw err;
|
|
795
|
+
}
|
|
796
|
+
process.stderr.write(`❌ check_kernel_edit_ratified: ${err.message}\n`);
|
|
797
|
+
return 1;
|
|
798
|
+
}
|
|
579
799
|
let changed: string[];
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
800
|
+
try {
|
|
801
|
+
// The base, too, is resolved once: the diff and the closure's base side
|
|
802
|
+
// read the same commit. A `--files` list may add paths to the range,
|
|
803
|
+
// never hide one, so a range that cannot be read refuses rather than
|
|
804
|
+
// falling back to the list alone.
|
|
805
|
+
baseRef = resolveRevision(root, resolveBaseRef(baseRef, root));
|
|
806
|
+
changed = [...new Set([...files, ...changedFilesBetween(root, baseRef, commit)])];
|
|
807
|
+
} catch (err) {
|
|
808
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
809
|
+
throw err;
|
|
587
810
|
}
|
|
588
|
-
|
|
811
|
+
process.stderr.write(`❌ check_kernel_edit_ratified: ${err.message}\n`);
|
|
812
|
+
return 3;
|
|
589
813
|
}
|
|
814
|
+
revision = commit;
|
|
590
815
|
|
|
591
|
-
const result = evaluate(changed, root, configuredProviderCount(policyRoot));
|
|
816
|
+
const result = evaluate(changed, root, configuredProviderCount(policyRoot), revision, baseRef);
|
|
592
817
|
|
|
593
818
|
// OUTSIDE the quiet guard: CI passes --quiet, and a coverage guard that
|
|
594
819
|
// sees no count reports the gate silent.
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* Phase 4 / Wave 4c). The CLI contract is pinned — `--base-ref`
|
|
7
7
|
* / `--label` / `--event-path` / `--files` flags, exit codes (0 pass,
|
|
8
8
|
* 1 fail, 3 internal error), stdout/stderr split, byte-identical finding
|
|
9
|
-
* messages,
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* messages, base-ref candidate order, and PR-label parsing from the GitHub
|
|
10
|
+
* event JSON. Two deliberate departures, both because CI reads the changed
|
|
11
|
+
* files from git through this script: the diff runs with `--no-renames`, so a
|
|
12
|
+
* kernel rule renamed away is listed under its old path too, and a failed
|
|
13
|
+
* diff exits 3 instead of passing on an empty list.
|
|
12
14
|
*
|
|
13
15
|
* Fails when a single PR (or commit range) modifies more than one
|
|
14
16
|
* kernel rule under `src/rules/`. Override via the
|
|
@@ -59,17 +61,15 @@ const DEFAULT_LABEL = 'bundled-always-rules-acknowledged';
|
|
|
59
61
|
// src/scripts/check_kernel_rule_bundle.ts → two levels up is the repo root.
|
|
60
62
|
const REPO = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
61
63
|
|
|
62
|
-
function _git_changed_files(base_ref: string): string[] {
|
|
64
|
+
function _git_changed_files(base_ref: string): string[] | null {
|
|
63
65
|
// Bounded read: a truncated diff would shrink the change set and let the
|
|
64
|
-
// bundle guard pass on files it never saw.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// CalledProcessError and the handler prints the combined output. spawnSync
|
|
68
|
-
// does not raise; mirror by checking status and combining stdout+stderr.
|
|
66
|
+
// bundle guard pass on files it never saw. Rename detection off: a rename
|
|
67
|
+
// reported under its destination alone hides the kernel rule it moved.
|
|
68
|
+
const res = runCountedProbe('git', ['diff', '--no-renames', '--name-only', `${base_ref}...HEAD`]);
|
|
69
69
|
if (!res.ok) {
|
|
70
70
|
const combined = `${res.stdout ?? ''}${res.stderr ?? ''}`;
|
|
71
71
|
process.stderr.write(`❌ git diff failed: ${combined.trim()}\n`);
|
|
72
|
-
return
|
|
72
|
+
return null;
|
|
73
73
|
}
|
|
74
74
|
return (res.stdout ?? '').split('\n').filter((line) => line.trim() !== '');
|
|
75
75
|
}
|
|
@@ -217,6 +217,10 @@ export function main(argv?: readonly string[]): number {
|
|
|
217
217
|
args.files && args.files.length > 0
|
|
218
218
|
? args.files
|
|
219
219
|
: _git_changed_files(_resolve_base_ref(args.base_ref));
|
|
220
|
+
if (files === null) {
|
|
221
|
+
// An unreadable change set is not an empty one.
|
|
222
|
+
return 3;
|
|
223
|
+
}
|
|
220
224
|
const hits = _kernel_changes(files);
|
|
221
225
|
|
|
222
226
|
if (hits.length <= 1) {
|