@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
|
@@ -24,16 +24,22 @@
|
|
|
24
24
|
* `_none_` was never that failure; it was noise standing in front of it.
|
|
25
25
|
*/
|
|
26
26
|
import { spawnSync } from 'node:child_process';
|
|
27
|
+
import fs from 'node:fs';
|
|
28
|
+
import path from 'node:path';
|
|
27
29
|
|
|
30
|
+
import { assuranceOverrideLimitation } from './release_findings_ingest.js';
|
|
28
31
|
import { CURATED_HEAD_INSTRUCTION } from './release_material.js';
|
|
29
32
|
|
|
33
|
+
/** The label a cut taken on an assurance override reports itself under. */
|
|
34
|
+
export const KNOWN_LIMITATIONS_LABEL = 'Known limitations';
|
|
35
|
+
|
|
30
36
|
/** The five curated labels, in the order an operator reads them. */
|
|
31
37
|
export const HEAD_LABELS: readonly string[] = [
|
|
32
38
|
'Behaviour changes',
|
|
33
39
|
'Default changes + migration',
|
|
34
40
|
'Security and correctness',
|
|
35
41
|
'Honest nulls',
|
|
36
|
-
|
|
42
|
+
KNOWN_LIMITATIONS_LABEL,
|
|
37
43
|
];
|
|
38
44
|
|
|
39
45
|
export const HEAD_NONE = '_none_';
|
|
@@ -615,6 +621,16 @@ export interface MixObligation {
|
|
|
615
621
|
to_sha?: string;
|
|
616
622
|
governance_only?: number;
|
|
617
623
|
consumer_only?: number;
|
|
624
|
+
/**
|
|
625
|
+
* The two buckets the line used to drop. `mixed` is the commits touching
|
|
626
|
+
* more than one classified category, and the measurer states that it "is
|
|
627
|
+
* never collapsed" into either side — yet over 16.3.0..16.4.0 it was the
|
|
628
|
+
* LARGEST bucket at 41 against governance 42 and consumer 1, and the
|
|
629
|
+
* published line named neither it nor maintenance. A reader of "42 vs 1"
|
|
630
|
+
* had no way to know that almost half the span was in a third bucket.
|
|
631
|
+
*/
|
|
632
|
+
mixed?: number;
|
|
633
|
+
maintenance?: number;
|
|
618
634
|
}
|
|
619
635
|
|
|
620
636
|
/** Labels whose curated value is still the generator's unedited draft. */
|
|
@@ -759,11 +775,65 @@ export function derive_head_prefill(
|
|
|
759
775
|
from: string | null,
|
|
760
776
|
to: string,
|
|
761
777
|
cwd: string,
|
|
778
|
+
version?: string | null,
|
|
762
779
|
): Record<string, string> {
|
|
763
780
|
const span = collect_span_commits(from, to, cwd);
|
|
764
|
-
|
|
781
|
+
const out = render_derived_head_values(
|
|
765
782
|
derive_category_hits(span, { readTouchedFile: make_span_file_reader(to, cwd) }),
|
|
766
783
|
);
|
|
784
|
+
// A cut taken on an assurance override is a known limitation no commit in
|
|
785
|
+
// the span declares, so the classifier above cannot derive it: it is a fact
|
|
786
|
+
// about the ledger, not about the range. Appended rather than substituted —
|
|
787
|
+
// a derived limitation and this one are both true.
|
|
788
|
+
const override = version ? assuranceOverrideLimitation(version, cwd) : null;
|
|
789
|
+
if (override !== null) {
|
|
790
|
+
const existing = out[KNOWN_LIMITATIONS_LABEL];
|
|
791
|
+
out[KNOWN_LIMITATIONS_LABEL] = existing ? `${existing} ${override}` : override;
|
|
792
|
+
}
|
|
793
|
+
// Same shape for the breaking-changes index: a Pending row has landed, so
|
|
794
|
+
// whatever this release is, it ships it — and no commit subject carries the
|
|
795
|
+
// row's wording, so the span classifier above cannot derive it.
|
|
796
|
+
const pending = pendingBreakingLine(readIndex(cwd));
|
|
797
|
+
if (pending !== null) {
|
|
798
|
+
const existing = out[MIGRATION_LABEL];
|
|
799
|
+
out[MIGRATION_LABEL] = existing ? `${existing} ${pending}` : pending;
|
|
800
|
+
}
|
|
801
|
+
return out;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
const MIGRATION_LABEL = 'Default changes + migration';
|
|
805
|
+
|
|
806
|
+
function readIndex(cwd: string): string {
|
|
807
|
+
try {
|
|
808
|
+
return fs.readFileSync(path.join(cwd, 'BREAKING_CHANGES.md'), 'utf-8');
|
|
809
|
+
} catch {
|
|
810
|
+
return '';
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* The `What changes` cell of every row under `BREAKING_CHANGES.md`'s
|
|
816
|
+
* `## Pending` heading, as one head value; null when there is none.
|
|
817
|
+
*
|
|
818
|
+
* Without this a breaking change whose wording lives only in the index — the
|
|
819
|
+
* hook-carrier guards of #2455, named in an inner bullet of a squash body —
|
|
820
|
+
* reaches no released changelog unless an operator copies it by hand.
|
|
821
|
+
*/
|
|
822
|
+
export function pendingBreakingLine(index: string): string | null {
|
|
823
|
+
const cells: string[] = [];
|
|
824
|
+
let inPending = false;
|
|
825
|
+
for (const line of index.split('\n')) {
|
|
826
|
+
if (line.startsWith('## ')) {
|
|
827
|
+
inPending = line.startsWith('## Pending');
|
|
828
|
+
continue;
|
|
829
|
+
}
|
|
830
|
+
if (!inPending || !line.startsWith('|')) continue;
|
|
831
|
+
const cell = (line.split('|')[2] ?? '').trim();
|
|
832
|
+
if (cell === '' || cell === 'What changes' || /^-+$/u.test(cell)) continue;
|
|
833
|
+
cells.push(cell);
|
|
834
|
+
}
|
|
835
|
+
if (cells.length === 0) return null;
|
|
836
|
+
return `Breaking, pending in \`BREAKING_CHANGES.md\` and shipped by this release: ${cells.join(' ')}`;
|
|
767
837
|
}
|
|
768
838
|
|
|
769
839
|
/** Latest reachable release tag before `ref`, or null when there is none. */
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settings-surface reading a cut performs, and the file it reads it from.
|
|
3
|
+
*
|
|
4
|
+
* `docs/releases.md` § The stability surface names `.agent-settings.yml` keys
|
|
5
|
+
* as part of the public contract (`SETTINGS_REMOVAL_RULE`). The bump could not see
|
|
6
|
+
* that surface at all: it reads commit SUBJECTS (`release.ts` `commits_since`
|
|
7
|
+
* → `infer_bump`), so a key deleted under a `feat:` subject proposes a minor
|
|
8
|
+
* and names nothing. Nothing else checked either — `lint_settings_classes`
|
|
9
|
+
* validates the tombstone entries that EXIST, and the loader's removal warning
|
|
10
|
+
* walks `REMOVED_KEYS` only, so a key deleted from the schema with no entry in
|
|
11
|
+
* either map produces no warning anywhere and the installed value simply stops
|
|
12
|
+
* applying.
|
|
13
|
+
*
|
|
14
|
+
* Three parts, in the order a cut uses them:
|
|
15
|
+
*
|
|
16
|
+
* 1. {@link emitReleasedSurface} — the flattened settings surface at one
|
|
17
|
+
* version, plus the KEYS of both tombstone maps. Descriptions are dropped
|
|
18
|
+
* (prose churn is not a surface change) and there is no timestamp, so two
|
|
19
|
+
* runs at the same version produce byte-identical output.
|
|
20
|
+
* 2. {@link SETTINGS_SURFACE_FIXTURE} — one committed file holding (1) as of
|
|
21
|
+
* the LAST release. `release.ts` rewrites it inside the cut, which is its
|
|
22
|
+
* only writer; `check_release_pr_shape` allows it on a release PR.
|
|
23
|
+
* 3. {@link classifySettingsDelta} / {@link assert_settings_surface_delta} —
|
|
24
|
+
* the delta between the committed file and the live schema, via
|
|
25
|
+
* `computeSurfaceDelta` (D3: the consumer-side delta and its six kinds are
|
|
26
|
+
* reused rather than given a second vocabulary), classified into the four
|
|
27
|
+
* refusals and the one carried case.
|
|
28
|
+
*
|
|
29
|
+
* Preview semantics match the two assertions this one sits beside in
|
|
30
|
+
* `release.ts`: under `--dry-run` it PRINTS what the real run will refuse and
|
|
31
|
+
* returns, because `--dry-run exits 0` is a contract that file's tests pin.
|
|
32
|
+
*/
|
|
33
|
+
import * as fs from 'node:fs';
|
|
34
|
+
import * as path from 'node:path';
|
|
35
|
+
|
|
36
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
37
|
+
|
|
38
|
+
import { settingsSchema } from '../../server/schemas/settings.js';
|
|
39
|
+
import { computeSurfaceDelta, flattenSurface, type SettingsSurface, type SurfaceEntry } from '../../shared/settingsSurface.js';
|
|
40
|
+
import { REPO_ROOT } from '../release_env.js';
|
|
41
|
+
import { die } from '../release_publication.js';
|
|
42
|
+
import { MINOR_REMOVAL_PROOFS, REMOVED_KEYS } from './settings_removed_keys.js';
|
|
43
|
+
import { RENAMED_KEYS, SETTINGS_REMOVAL_RULE } from './settings_renamed_keys.js';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Synchronous on purpose. `release.ts`'s `main` returns a number and is not
|
|
47
|
+
* async; making the emission a promise would turn the whole CLI entry async to
|
|
48
|
+
* serve one call, so the conversion runs inline — it is the same millisecond
|
|
49
|
+
* cost `install.ts` pays on every install, not the ~15 s vitest collection the
|
|
50
|
+
* "keep a preview fast" rule was written about.
|
|
51
|
+
*/
|
|
52
|
+
function _jsonSchema(): Parameters<typeof flattenSurface>[0] {
|
|
53
|
+
return zodToJsonSchema(settingsSchema, {
|
|
54
|
+
name: 'AgentSettings',
|
|
55
|
+
$refStrategy: 'none',
|
|
56
|
+
target: 'jsonSchema7',
|
|
57
|
+
}) as Parameters<typeof flattenSurface>[0];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** The one committed copy of the last release's surface. */
|
|
61
|
+
export const SETTINGS_SURFACE_FIXTURE = path.join(
|
|
62
|
+
REPO_ROOT,
|
|
63
|
+
'tests',
|
|
64
|
+
'fixtures',
|
|
65
|
+
'settings_surface_released.json',
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
/** Path as a release PR's shape gate sees it — repo-relative, forward slashes. */
|
|
69
|
+
export const SETTINGS_SURFACE_FIXTURE_REL = 'tests/fixtures/settings_surface_released.json';
|
|
70
|
+
|
|
71
|
+
export interface ReleasedSurface extends SettingsSurface {
|
|
72
|
+
/** Sorted keys of `REMOVED_KEYS` at this version. */
|
|
73
|
+
removedKeys: string[];
|
|
74
|
+
/** Sorted `old -> new` pairs of `RENAMED_KEYS` at this version. */
|
|
75
|
+
renamedKeys: Array<[string, string]>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Flatten the live schema at `version`, minus the descriptions.
|
|
80
|
+
*
|
|
81
|
+
* Descriptions are dropped rather than kept-and-ignored: keeping them would
|
|
82
|
+
* make every reworded help string a diff on a file whose only job is to carry
|
|
83
|
+
* the comparable shape, and a file that churns for prose reasons stops being
|
|
84
|
+
* read. `computeSurfaceDelta` has no `description_changed` kind, so nothing
|
|
85
|
+
* downstream loses a signal.
|
|
86
|
+
*/
|
|
87
|
+
export function emitReleasedSurface(version: string): ReleasedSurface {
|
|
88
|
+
const surface = flattenSurface(_jsonSchema(), version);
|
|
89
|
+
const entries: Record<string, SurfaceEntry> = {};
|
|
90
|
+
for (const key of Object.keys(surface.entries).sort()) {
|
|
91
|
+
const { description: _drop, ...rest } = surface.entries[key] as SurfaceEntry;
|
|
92
|
+
entries[key] = rest;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
version,
|
|
96
|
+
entries,
|
|
97
|
+
removedKeys: [...REMOVED_KEYS.keys()].sort(),
|
|
98
|
+
renamedKeys: [...RENAMED_KEYS.entries()].sort((a, b) => a[0].localeCompare(b[0])),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Serialize exactly as the committed file is written — one trailing newline. */
|
|
103
|
+
export function serializeReleasedSurface(s: ReleasedSurface): string {
|
|
104
|
+
return `${JSON.stringify(s, null, 2)}\n`;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Rewrite the committed file. Called by `release.ts` inside the cut, nowhere else. */
|
|
108
|
+
export function writeReleasedSurface(version: string, target = SETTINGS_SURFACE_FIXTURE): void {
|
|
109
|
+
fs.writeFileSync(target, serializeReleasedSurface(emitReleasedSurface(version)), 'utf8');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Read the committed file. Throws when it is missing — a cut cannot proceed blind. */
|
|
113
|
+
export function readReleasedSurface(target = SETTINGS_SURFACE_FIXTURE): ReleasedSurface {
|
|
114
|
+
return JSON.parse(fs.readFileSync(target, 'utf8')) as ReleasedSurface;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The shape `install.ts` persists to `state/settings-delta.json` on an upgrade. */
|
|
118
|
+
export interface InstallerDelta {
|
|
119
|
+
oldVersion: string;
|
|
120
|
+
newVersion: string;
|
|
121
|
+
changes: Array<{ kind: string; key: string; values?: Array<string | number> }>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface SettingsDeltaFindings {
|
|
125
|
+
/** Removed, and in NEITHER tombstone map. Refuses under either owner answer (D4). */
|
|
126
|
+
untombstoned_removals: string[];
|
|
127
|
+
/** Removed, but carried by `REMOVED_KEYS` or `RENAMED_KEYS`. */
|
|
128
|
+
carried_removals: Array<{ key: string; via: 'removed' | 'renamed'; to?: string }>;
|
|
129
|
+
/** A key whose JSON-schema type changed. */
|
|
130
|
+
type_changed: string[];
|
|
131
|
+
/** A key that lost one or more vocabulary values. */
|
|
132
|
+
enum_removed: Array<{ key: string; values: Array<string | number> }>;
|
|
133
|
+
/** A key that arrived with no default — nothing tells an existing install what it now does. */
|
|
134
|
+
added_without_default: string[];
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Classify the delta between a released surface and the live one.
|
|
139
|
+
*
|
|
140
|
+
* Tombstone membership is read from the NEW surface, not the old one: a
|
|
141
|
+
* removal and its tombstone land in the SAME change, so checking the old
|
|
142
|
+
* side's maps would refuse every correctly-annotated removal.
|
|
143
|
+
*
|
|
144
|
+
* A rename contributes a removal AND an addition. The removal is `carried`
|
|
145
|
+
* via `renamed`; the addition is excluded from `added_without_default`,
|
|
146
|
+
* because the old value is what arrives there and a default would never be
|
|
147
|
+
* consulted.
|
|
148
|
+
*/
|
|
149
|
+
export function classifySettingsDelta(oldS: ReleasedSurface, newS: ReleasedSurface): SettingsDeltaFindings {
|
|
150
|
+
const delta = computeSurfaceDelta(oldS, newS);
|
|
151
|
+
const removedMap = new Set(newS.removedKeys);
|
|
152
|
+
const renamedMap = new Map(newS.renamedKeys);
|
|
153
|
+
const renameTargets = new Set(newS.renamedKeys.map(([, to]) => to));
|
|
154
|
+
|
|
155
|
+
const findings: SettingsDeltaFindings = {
|
|
156
|
+
untombstoned_removals: [],
|
|
157
|
+
carried_removals: [],
|
|
158
|
+
type_changed: [],
|
|
159
|
+
enum_removed: [],
|
|
160
|
+
added_without_default: [],
|
|
161
|
+
};
|
|
162
|
+
for (const c of delta.changes) {
|
|
163
|
+
if (c.kind === 'removed') {
|
|
164
|
+
const to = renamedMap.get(c.key);
|
|
165
|
+
if (to !== undefined) findings.carried_removals.push({ key: c.key, via: 'renamed', to });
|
|
166
|
+
else if (removedMap.has(c.key)) findings.carried_removals.push({ key: c.key, via: 'removed' });
|
|
167
|
+
else findings.untombstoned_removals.push(c.key);
|
|
168
|
+
} else if (c.kind === 'type_changed') {
|
|
169
|
+
findings.type_changed.push(c.key);
|
|
170
|
+
} else if (c.kind === 'enum_removed') {
|
|
171
|
+
findings.enum_removed.push({ key: c.key, values: c.values ?? [] });
|
|
172
|
+
} else if (c.kind === 'added') {
|
|
173
|
+
if (c.new?.default === undefined && !renameTargets.has(c.key)) {
|
|
174
|
+
findings.added_without_default.push(c.key);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return findings;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** The four refusing classes, as `label: keys` lines. Empty when the cut is clean. */
|
|
182
|
+
export function refusalLines(f: SettingsDeltaFindings): string[] {
|
|
183
|
+
const out: string[] = [];
|
|
184
|
+
if (f.untombstoned_removals.length > 0) {
|
|
185
|
+
out.push(
|
|
186
|
+
`removed with no entry in REMOVED_KEYS or RENAMED_KEYS: ${f.untombstoned_removals.join(', ')}`,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
if (f.type_changed.length > 0) out.push(`type changed: ${f.type_changed.join(', ')}`);
|
|
190
|
+
if (f.enum_removed.length > 0) {
|
|
191
|
+
out.push(
|
|
192
|
+
`vocabulary value removed: ${f.enum_removed
|
|
193
|
+
.map((e) => `${e.key} (${e.values.join(', ')})`)
|
|
194
|
+
.join(', ')}`,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
if (f.added_without_default.length > 0) {
|
|
198
|
+
out.push(`added with no default: ${f.added_without_default.join(', ')}`);
|
|
199
|
+
}
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** The non-refusing line a cut still reports, so a carried removal is never silent. */
|
|
204
|
+
export function carriedLine(f: SettingsDeltaFindings): string | null {
|
|
205
|
+
if (f.carried_removals.length === 0) return null;
|
|
206
|
+
return `carried removals (annotated, not refused): ${f.carried_removals
|
|
207
|
+
.map((r) => (r.to === undefined ? r.key : `${r.key} -> ${r.to}`))
|
|
208
|
+
.join(', ')}`;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** True when `target` raises the major component of `from`. */
|
|
212
|
+
export function isMajorBump(from: string, target: string): boolean {
|
|
213
|
+
const major = (v: string): number => Number.parseInt(v.replace(/^v/, '').split('.')[0] ?? '', 10);
|
|
214
|
+
return major(target) > major(from);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Does a `<test file>::<it title>` proof name a test this tree contains?
|
|
219
|
+
* The file must hold an `it(` or `test(` whose quoted title starts with the one
|
|
220
|
+
* named — not the string in a comment, and not a `.skip` or `.todo` test.
|
|
221
|
+
* Whether that test PASSES is not checked: a cut does not run the suite, and
|
|
222
|
+
* the test itself is what carries the claim.
|
|
223
|
+
*/
|
|
224
|
+
export function proofHolds(proof: string | undefined, root: string = REPO_ROOT): boolean {
|
|
225
|
+
if (proof === undefined) return false;
|
|
226
|
+
const sep = proof.indexOf('::');
|
|
227
|
+
if (sep <= 0) return false;
|
|
228
|
+
const file = path.join(root, proof.slice(0, sep));
|
|
229
|
+
const title = proof.slice(sep + 2).trim();
|
|
230
|
+
if (title === '' || !fs.existsSync(file)) return false;
|
|
231
|
+
const escaped = title.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
232
|
+
const call = new RegExp(`(?<![.\\w])(?:it|test)\\s*\\(\\s*['"\`]${escaped}`);
|
|
233
|
+
return fs
|
|
234
|
+
.readFileSync(file, 'utf8')
|
|
235
|
+
.split('\n')
|
|
236
|
+
.some((line) => !/^\s*(?:\/\/|\/?\*)/.test(line) && call.test(line));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* The owner's answer to blocker `what-a-minor-may-remove`, option (c), applied
|
|
241
|
+
* at the cut: {@link SETTINGS_REMOVAL_RULE}. Below a major this refuses a
|
|
242
|
+
* carried removal or rename whose key has no proof that holds in
|
|
243
|
+
* `MINOR_REMOVAL_PROOFS`, and an alias dropped from `RENAMED_KEYS`. At a major
|
|
244
|
+
* it returns nothing — a carried removal is still reported by
|
|
245
|
+
* {@link carriedLine}, never silent.
|
|
246
|
+
*/
|
|
247
|
+
export function belowMajorRefusalLines(
|
|
248
|
+
released: ReleasedSurface,
|
|
249
|
+
live: ReleasedSurface,
|
|
250
|
+
f: SettingsDeltaFindings,
|
|
251
|
+
target: string,
|
|
252
|
+
proofs: ReadonlyMap<string, string> = MINOR_REMOVAL_PROOFS,
|
|
253
|
+
root: string = REPO_ROOT,
|
|
254
|
+
): string[] {
|
|
255
|
+
if (isMajorBump(released.version, target)) return [];
|
|
256
|
+
const out: string[] = [];
|
|
257
|
+
const unproven = f.carried_removals.map((r) => r.key).filter((k) => !proofHolds(proofs.get(k), root));
|
|
258
|
+
if (unproven.length > 0) {
|
|
259
|
+
out.push(`removed or renamed below a major with no consumer-neutral proof: ${unproven.join(', ')}`);
|
|
260
|
+
}
|
|
261
|
+
const kept = new Set(live.renamedKeys.map(([from]) => from));
|
|
262
|
+
const dropped = released.renamedKeys.map(([from]) => from).filter((k) => !kept.has(k));
|
|
263
|
+
if (dropped.length > 0) out.push(`rename alias dropped below a major: ${dropped.join(', ')}`);
|
|
264
|
+
return out;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* The third assertion beside `assert_scheduled_deprecations_clear` and
|
|
269
|
+
* `assert_major_migration_section`: refuse a cut whose settings surface moved
|
|
270
|
+
* in a way no consumer was told about.
|
|
271
|
+
*
|
|
272
|
+
* @param emit Seam for the live surface. Production passes nothing; tests
|
|
273
|
+
* inject a planted surface, because the alternative — reaching the refusal
|
|
274
|
+
* only by editing the tracked zod schema — would make every refusal branch
|
|
275
|
+
* testable exclusively through a tracked-file edit.
|
|
276
|
+
*/
|
|
277
|
+
export function assert_settings_surface_delta(
|
|
278
|
+
target: string,
|
|
279
|
+
opts: {
|
|
280
|
+
previewOnly?: boolean;
|
|
281
|
+
emit?: (version: string) => ReleasedSurface;
|
|
282
|
+
read?: () => ReleasedSurface;
|
|
283
|
+
write?: (line: string) => void;
|
|
284
|
+
proofs?: ReadonlyMap<string, string>;
|
|
285
|
+
} = {},
|
|
286
|
+
): SettingsDeltaFindings | null {
|
|
287
|
+
const write = opts.write ?? ((line: string): void => void process.stderr.write(line));
|
|
288
|
+
let released: ReleasedSurface;
|
|
289
|
+
try {
|
|
290
|
+
released = (opts.read ?? readReleasedSurface)();
|
|
291
|
+
} catch (e) {
|
|
292
|
+
// A missing or unreadable file is an environment failure, not a
|
|
293
|
+
// finding: diagnosing it as "a key was removed" sends the releaser to
|
|
294
|
+
// edit a schema that is not the problem.
|
|
295
|
+
die(
|
|
296
|
+
`refusing the ${target} cut: ${SETTINGS_SURFACE_FIXTURE_REL} could not be read ` +
|
|
297
|
+
`(${e instanceof Error ? e.message : String(e)}). That is an environment failure, not a ` +
|
|
298
|
+
'settings change — restore the file from the last release, then re-run.',
|
|
299
|
+
);
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
const live = (opts.emit ?? emitReleasedSurface)(target);
|
|
303
|
+
const findings = classifySettingsDelta(released, live);
|
|
304
|
+
|
|
305
|
+
const carried = carriedLine(findings);
|
|
306
|
+
if (carried !== null) write(`settings surface ${released.version} → ${target}: ${carried}\n`);
|
|
307
|
+
|
|
308
|
+
const lines = [
|
|
309
|
+
...refusalLines(findings),
|
|
310
|
+
...belowMajorRefusalLines(released, live, findings, target, opts.proofs ?? MINOR_REMOVAL_PROOFS),
|
|
311
|
+
];
|
|
312
|
+
if (lines.length === 0) return findings;
|
|
313
|
+
|
|
314
|
+
write(`settings surface ${released.version} → ${target}:\n`);
|
|
315
|
+
for (const l of lines) write(` - ${l}\n`);
|
|
316
|
+
if (opts.previewOnly === true) {
|
|
317
|
+
write(
|
|
318
|
+
`\n(dry-run) the ${target} cut WOULD BE REFUSED for the reason above. ` +
|
|
319
|
+
'Previewing only; exit code unchanged.\n',
|
|
320
|
+
);
|
|
321
|
+
return findings;
|
|
322
|
+
}
|
|
323
|
+
die(
|
|
324
|
+
`refusing the ${target} cut: the settings surface changed in a way no consumer is told ` +
|
|
325
|
+
'about. Act on each line above — add the key to REMOVED_KEYS or RENAMED_KEYS, revert the ' +
|
|
326
|
+
'type or vocabulary change, or give the new key a default; below a major, name the proving ' +
|
|
327
|
+
`test in MINOR_REMOVAL_PROOFS or cut a major — then re-run. ${SETTINGS_REMOVAL_RULE}`,
|
|
328
|
+
);
|
|
329
|
+
return findings;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Disagreements between the delta an installed upgrade WROTE and the one the
|
|
334
|
+
* release COMPUTES for the same version pair. Empty means they agree.
|
|
335
|
+
*
|
|
336
|
+
* Three kinds only — `removed`, `type_changed`, `enum_removed`. The other
|
|
337
|
+
* three are deliberately out: `added` and `default_changed` are the review
|
|
338
|
+
* form's business and neither refuses a cut, and `enum_added` widens a
|
|
339
|
+
* vocabulary, which no installed value can be invalid under.
|
|
340
|
+
*
|
|
341
|
+
* The comparison is the point of the leg: the release reads a COMMITTED file
|
|
342
|
+
* and the installer recomputes the surface from SHIPPED bytes, so an
|
|
343
|
+
* agreement is evidence the committed file describes what was actually
|
|
344
|
+
* published, and a disagreement means it does not.
|
|
345
|
+
*/
|
|
346
|
+
export function compareInstallerDelta(
|
|
347
|
+
installer: InstallerDelta,
|
|
348
|
+
release: SettingsDeltaFindings,
|
|
349
|
+
): string[] {
|
|
350
|
+
const out: string[] = [];
|
|
351
|
+
const seen = (kind: string): string[] =>
|
|
352
|
+
installer.changes
|
|
353
|
+
.filter((c) => c.kind === kind)
|
|
354
|
+
.map((c) => c.key)
|
|
355
|
+
.sort();
|
|
356
|
+
|
|
357
|
+
const releaseRemoved = [
|
|
358
|
+
...release.untombstoned_removals,
|
|
359
|
+
...release.carried_removals.map((r) => r.key),
|
|
360
|
+
].sort();
|
|
361
|
+
const pairs: Array<[string, string[], string[]]> = [
|
|
362
|
+
['removed', seen('removed'), releaseRemoved],
|
|
363
|
+
['type_changed', seen('type_changed'), [...release.type_changed].sort()],
|
|
364
|
+
['enum_removed', seen('enum_removed'), release.enum_removed.map((e) => e.key).sort()],
|
|
365
|
+
];
|
|
366
|
+
for (const [kind, installed, computed] of pairs) {
|
|
367
|
+
if (installed.join('\u0000') === computed.join('\u0000')) continue;
|
|
368
|
+
out.push(
|
|
369
|
+
`${kind}: installer wrote [${installed.join(', ')}], the release computes ` +
|
|
370
|
+
`[${computed.join(', ')}]`,
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
// Per-key values for the one kind that carries them: a vocabulary that
|
|
374
|
+
// lost DIFFERENT values on the two sides is the same disagreement as one
|
|
375
|
+
// that lost them on only one side.
|
|
376
|
+
const installedVals = new Map(
|
|
377
|
+
installer.changes
|
|
378
|
+
.filter((c) => c.kind === 'enum_removed')
|
|
379
|
+
.map((c) => [c.key, [...(c.values ?? [])].sort()] as const),
|
|
380
|
+
);
|
|
381
|
+
for (const e of release.enum_removed) {
|
|
382
|
+
const theirs = installedVals.get(e.key);
|
|
383
|
+
if (theirs === undefined) continue;
|
|
384
|
+
const ours = [...e.values].sort();
|
|
385
|
+
if (theirs.join('\u0000') === ours.join('\u0000')) continue;
|
|
386
|
+
out.push(
|
|
387
|
+
`enum_removed ${e.key}: installer wrote [${theirs.join(', ')}], the release computes ` +
|
|
388
|
+
`[${ours.join(', ')}]`,
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
return out;
|
|
392
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract §2.1 `round:` and the review round cap (ADR-294) for
|
|
3
|
+
* `check_completion_review`. Pure: the caller reads the path's history and
|
|
4
|
+
* hands over the markers it recorded.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
|
|
9
|
+
import type { FindingRow, Marker, Violation } from '../check_completion_review.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The completion review closes after this many review passes (ADR-294). Rounds
|
|
13
|
+
* 1-5 yielded 0.71-1.54 high+critical rows per artefact, rounds 6-10 0.38.
|
|
14
|
+
*/
|
|
15
|
+
export const REVIEW_ROUND_CAP = 5;
|
|
16
|
+
|
|
17
|
+
export interface RecordedPasses {
|
|
18
|
+
passes: Set<string>;
|
|
19
|
+
anyRound: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* One review pass: the reviewer prompt it ran on. Versions written before
|
|
24
|
+
* `prompt_hash` existed cannot be told apart — every in-place re-bind moved
|
|
25
|
+
* their `scope:` — so together they count as one pass.
|
|
26
|
+
*/
|
|
27
|
+
function passKey(marker: Marker): string {
|
|
28
|
+
return marker.promptHash ?? 'legacy';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Every review pass among the markers a path recorded across its WHOLE history.
|
|
33
|
+
*
|
|
34
|
+
* A pass is a reviewer dispatch, so a fix pass that re-binds in place with the
|
|
35
|
+
* same `prompt_hash` is the same pass touched again — CI fixes and base merges
|
|
36
|
+
* move the scope, not the round. The caller does not stop at the § 2.7 archive
|
|
37
|
+
* rename: the archived rounds were committed at this path, so a fresh skeleton
|
|
38
|
+
* after an archive continues the count instead of restarting it at 1.
|
|
39
|
+
*/
|
|
40
|
+
export function countReviewPasses(markers: Iterable<Marker | null>): RecordedPasses {
|
|
41
|
+
const passes = new Set<string>();
|
|
42
|
+
let anyRound = false;
|
|
43
|
+
for (const prior of markers) {
|
|
44
|
+
if (prior === null) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
passes.add(passKey(prior));
|
|
48
|
+
anyRound ||= prior.round !== undefined;
|
|
49
|
+
}
|
|
50
|
+
return { passes, anyRound };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The header round must equal the number of review passes the path records,
|
|
55
|
+
* this one included (`round-miscounted`); past {@link REVIEW_ROUND_CAP} the
|
|
56
|
+
* review is closed (`round-cap-exceeded`). At the cap, a high or critical row
|
|
57
|
+
* is deferred only to an owner report that exists (`cap-deferral-without-owner-report`):
|
|
58
|
+
* the cap ends the review, it never closes a finding.
|
|
59
|
+
*/
|
|
60
|
+
export function checkReviewRound(
|
|
61
|
+
repo: string,
|
|
62
|
+
artifactAbs: string,
|
|
63
|
+
current: Marker,
|
|
64
|
+
rows: readonly FindingRow[],
|
|
65
|
+
recorded: RecordedPasses,
|
|
66
|
+
): Violation[] {
|
|
67
|
+
const rel = path.relative(repo, artifactAbs).split(path.sep).join('/');
|
|
68
|
+
const { passes, anyRound } = recorded;
|
|
69
|
+
if (current.round === undefined) {
|
|
70
|
+
return anyRound
|
|
71
|
+
? [
|
|
72
|
+
{
|
|
73
|
+
kind: 'round-miscounted',
|
|
74
|
+
file: artifactAbs,
|
|
75
|
+
detail: 'the header dropped `round:` although an earlier version of this path carried it (contract §2.1 `round:`)',
|
|
76
|
+
},
|
|
77
|
+
]
|
|
78
|
+
: [];
|
|
79
|
+
}
|
|
80
|
+
passes.add(passKey(current));
|
|
81
|
+
const derived = passes.size;
|
|
82
|
+
const violations: Violation[] = [];
|
|
83
|
+
if (current.round !== derived) {
|
|
84
|
+
violations.push({
|
|
85
|
+
kind: 'round-miscounted',
|
|
86
|
+
file: artifactAbs,
|
|
87
|
+
detail:
|
|
88
|
+
`the header reads round ${String(current.round)} but this path records ${String(derived)} review ` +
|
|
89
|
+
`pass(es) — a re-bind with the same prompt_hash keeps the round, a new reviewer pass adds one, ` +
|
|
90
|
+
'and an archive does not restart it (contract §2.1 `round:`)',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (derived > REVIEW_ROUND_CAP) {
|
|
94
|
+
violations.push({
|
|
95
|
+
kind: 'round-cap-exceeded',
|
|
96
|
+
file: artifactAbs,
|
|
97
|
+
detail:
|
|
98
|
+
`review pass ${String(derived)} exceeds the cap of ${String(REVIEW_ROUND_CAP)} — the review closed at ` +
|
|
99
|
+
`round ${String(REVIEW_ROUND_CAP)}: re-bind that round in place, defer open high/critical rows to ` +
|
|
100
|
+
`${ownerReportPath(rel)} and medium/low rows to a ledger ref (contract §2.8)`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (derived >= REVIEW_ROUND_CAP) {
|
|
104
|
+
for (const row of rows) {
|
|
105
|
+
const severe = row.severity === 'high' || row.severity === 'critical';
|
|
106
|
+
if (!severe || row.status !== 'deferred') {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const cited = /\S+\.owner-report\.md/.exec(row.reasonRef)?.[0];
|
|
110
|
+
// Confined to the artefact's own directory inside the repository:
|
|
111
|
+
// an absolute or `..` path, or another review's report, proves
|
|
112
|
+
// nothing about THIS round.
|
|
113
|
+
const sameDir =
|
|
114
|
+
cited !== undefined &&
|
|
115
|
+
!path.isAbsolute(cited) &&
|
|
116
|
+
path.posix.dirname(path.posix.normalize(cited)) === path.posix.dirname(rel);
|
|
117
|
+
if (cited === undefined || !sameDir || !fs.existsSync(path.join(repo, cited))) {
|
|
118
|
+
violations.push({
|
|
119
|
+
kind: 'cap-deferral-without-owner-report',
|
|
120
|
+
file: artifactAbs,
|
|
121
|
+
detail:
|
|
122
|
+
`row ${row.index} (line ${String(row.line)}): a ${row.severity} row deferred at the round cap must ` +
|
|
123
|
+
`cite an existing owner report, e.g. ${ownerReportPath(rel)} (contract §2.8)`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return violations;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** `<dir>/<slug>.findings.md` → `<dir>/<slug>.owner-report.md`. */
|
|
132
|
+
function ownerReportPath(rel: string): string {
|
|
133
|
+
return rel.replace(/\.findings\.md$/, '.owner-report.md');
|
|
134
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The checkbox vocabulary and the phase-span rule, in one place.
|
|
3
3
|
*
|
|
4
4
|
* R2 review, findings 11 and 15. Two scanners on the autonomous-run path —
|
|
5
|
-
* `run_checkpoint.countRoadmap` and `run_continuation_hook.scanOpenSteps` —
|
|
5
|
+
* `run_checkpoint.countRoadmap` and the withdrawn `run_continuation_hook.scanOpenSteps` —
|
|
6
6
|
* each carried their own narrower regex and each scanned the WHOLE file, while
|
|
7
7
|
* both docblocks claimed the dashboard's vocabulary. Two consequences, and
|
|
8
8
|
* they pull in opposite directions:
|