@event4u/agent-config 16.4.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 +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- 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 +6 -1
- 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 +2 -2
- 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/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +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 +16 -4
- 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 +25 -22
- 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 +65 -4
- 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/frontend-render-security/SKILL.md +9 -0
- 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/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- 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 +21 -11
- 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 +324 -0
- 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/wireframe/SKILL.md +5 -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 +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -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 +5 -2
- 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-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -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 +669 -822
- 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 +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- 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 +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- 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 +9814 -5333
- 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/scan_scope.js +105 -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_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -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/scripts/lint_svg_asset.js +324 -0
- 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 +6 -1
- 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 +15 -5
- 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 +29 -25
- 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 +100 -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_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -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/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- 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 +54 -8
- 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 +199 -13
- 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 +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- 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 +150 -19
- 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_design_quality.ts +60 -12
- 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_motion_authority_drift.ts +27 -0
- 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_svg_asset.ts +365 -0
- 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-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-MSUL5NYP.js +0 -1123
- 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
|
@@ -13,6 +13,13 @@
|
|
|
13
13
|
* An ordinary pull request never reaches the network through this path, which is
|
|
14
14
|
* what keeps a fail-closed network dependency proportionate.
|
|
15
15
|
*
|
|
16
|
+
* One read runs on every invocation, gated diff or not, and needs no network:
|
|
17
|
+
* the bypass records in `BYPASS_RECORD_DIR`. A bypass still
|
|
18
|
+
* open past its `restore_by`, or restored with no council review recorded
|
|
19
|
+
* seven days on, fails the run — the contract's § Emergency use names the
|
|
20
|
+
* record, and this is the only reader that notices a route left unclosed. It
|
|
21
|
+
* stays what the rest of this gate is: local and voluntarily invoked.
|
|
22
|
+
*
|
|
16
23
|
* Failing closed is deliberate and was the explicit condition of the decision
|
|
17
24
|
* that commissioned this gate: `unverifiable` is a failure, not a pass, because
|
|
18
25
|
* a control that succeeds when it cannot measure is advisory. The two negative
|
|
@@ -38,8 +45,15 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
38
45
|
import { asOf } from './_lib/as_of.js';
|
|
39
46
|
import { GateLedger } from './_lib/gate_ledger.js';
|
|
40
47
|
import {
|
|
48
|
+
BYPASS_RECORD_DIR,
|
|
49
|
+
BYPASS_RECORD_LIMIT,
|
|
50
|
+
BYPASS_RECORD_MAX_BYTES,
|
|
41
51
|
checkAnchorIdentity,
|
|
42
52
|
evaluateAnchor,
|
|
53
|
+
evaluateBypassRecords,
|
|
54
|
+
printable,
|
|
55
|
+
type BypassFinding,
|
|
56
|
+
type BypassRecordInput,
|
|
43
57
|
readAnchorPolicy,
|
|
44
58
|
readWaivers,
|
|
45
59
|
type AnchorReading,
|
|
@@ -154,6 +168,218 @@ export function touchesPolicy(files: readonly string[]): boolean {
|
|
|
154
168
|
return files.map((f) => f.replace(/\\/g, '/').trim()).includes(POLICY_PATH);
|
|
155
169
|
}
|
|
156
170
|
|
|
171
|
+
/**
|
|
172
|
+
* The bypass records in the checkout. Read on every run, gated diff or not: an
|
|
173
|
+
* open bypass is a fact about the repository, not about the change under test.
|
|
174
|
+
* A missing directory is no records; one that exists and cannot be listed is
|
|
175
|
+
* returned as an unreadable record, which fails the gate.
|
|
176
|
+
*/
|
|
177
|
+
export function readBypassRecords(root: string): BypassRecordInput[] {
|
|
178
|
+
const names: string[] = [];
|
|
179
|
+
let dir: fs.Dir | null = null;
|
|
180
|
+
try {
|
|
181
|
+
if (!fs.lstatSync(path.join(root, BYPASS_RECORD_DIR)).isDirectory()) {
|
|
182
|
+
return [{ path: BYPASS_RECORD_DIR, text: null }];
|
|
183
|
+
}
|
|
184
|
+
// Every entry counts toward the ceiling, and the listing stops one past
|
|
185
|
+
// it, so a directory stuffed with other files cannot cost an unbounded read.
|
|
186
|
+
dir = fs.opendirSync(path.join(root, BYPASS_RECORD_DIR));
|
|
187
|
+
for (let entry = dir.readSync(); entry !== null; entry = dir.readSync()) {
|
|
188
|
+
names.push(entry.name);
|
|
189
|
+
if (names.length > BYPASS_RECORD_LIMIT) {
|
|
190
|
+
return [{ path: `${BYPASS_RECORD_DIR} (more than ${String(BYPASS_RECORD_LIMIT)} entries)`, text: null }];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} catch (err) {
|
|
194
|
+
// No directory means no bypass was ever recorded. Any other failure is
|
|
195
|
+
// a directory that exists and cannot be read, which shows nothing closed.
|
|
196
|
+
return (err as NodeJS.ErrnoException).code === 'ENOENT' ? [] : [{ path: BYPASS_RECORD_DIR, text: null }];
|
|
197
|
+
} finally {
|
|
198
|
+
try {
|
|
199
|
+
dir?.closeSync();
|
|
200
|
+
} catch {
|
|
201
|
+
// Closing a listing that already ended is not a finding.
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return names
|
|
205
|
+
.filter((n) => n.endsWith('.md'))
|
|
206
|
+
.sort()
|
|
207
|
+
.map((n) => ({ path: `${BYPASS_RECORD_DIR}/${n}`, text: readRecordOnce(path.join(root, BYPASS_RECORD_DIR, n)) }));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* One record, opened once without following a symbolic link, checked and read
|
|
212
|
+
* through that same descriptor with a byte ceiling — so the object checked is
|
|
213
|
+
* the object read, and a replacement between the two cannot slip in.
|
|
214
|
+
*/
|
|
215
|
+
export function readRecordOnce(file: string, platformNoFollow: boolean = fs.constants.O_NOFOLLOW !== undefined): string | null {
|
|
216
|
+
// Without O_NOFOLLOW the open would follow a link, so no record is trusted.
|
|
217
|
+
// The flag itself is never a parameter: a caller can only say it is missing.
|
|
218
|
+
const noFollow = fs.constants.O_NOFOLLOW;
|
|
219
|
+
if (!platformNoFollow || noFollow === undefined) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
let fd: number | null = null;
|
|
223
|
+
try {
|
|
224
|
+
fd = fs.openSync(file, fs.constants.O_RDONLY | noFollow);
|
|
225
|
+
const st = fs.fstatSync(fd);
|
|
226
|
+
if (!st.isFile() || st.size > BYPASS_RECORD_MAX_BYTES) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
const buf = Buffer.alloc(BYPASS_RECORD_MAX_BYTES + 1);
|
|
230
|
+
let total = 0;
|
|
231
|
+
for (;;) {
|
|
232
|
+
const read = fs.readSync(fd, buf, total, buf.length - total, null);
|
|
233
|
+
if (read === 0) break;
|
|
234
|
+
total += read;
|
|
235
|
+
if (total > BYPASS_RECORD_MAX_BYTES) return null;
|
|
236
|
+
}
|
|
237
|
+
return buf.subarray(0, total).toString('utf8');
|
|
238
|
+
} catch {
|
|
239
|
+
return null;
|
|
240
|
+
} finally {
|
|
241
|
+
if (fd !== null) {
|
|
242
|
+
try {
|
|
243
|
+
fs.closeSync(fd);
|
|
244
|
+
} catch {
|
|
245
|
+
// The result was already decided; a failed close must not turn it into a crash.
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Bypass records the base revision carries and the checkout does not. A record
|
|
253
|
+
* is the route's only trace, so removing one — or the whole directory — is a
|
|
254
|
+
* finding of its own. Read from Git against the base, never from a caller's
|
|
255
|
+
* file list, which can simply leave the deletion out. A base listing that
|
|
256
|
+
* cannot be read fails closed; a root that is no Git work tree has no base.
|
|
257
|
+
*/
|
|
258
|
+
export function removedBypassRecords(root: string, baseRef: string): BypassFinding[] {
|
|
259
|
+
const inside = spawnSync('git', ['-C', root, 'rev-parse', '--is-inside-work-tree'], { encoding: 'utf8' });
|
|
260
|
+
if (inside.status !== 0 || (inside.stdout ?? '').trim() !== 'true') {
|
|
261
|
+
return [];
|
|
262
|
+
}
|
|
263
|
+
const listed = spawnSync('git', ['-C', root, 'ls-tree', '-r', '-z', '--name-only', baseRef, '--', `${BYPASS_RECORD_DIR}/`], {
|
|
264
|
+
encoding: 'utf8',
|
|
265
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
266
|
+
});
|
|
267
|
+
if (listed.status !== 0 || typeof listed.stdout !== 'string') {
|
|
268
|
+
return [
|
|
269
|
+
{
|
|
270
|
+
code: 'bypass-record-removed',
|
|
271
|
+
path: BYPASS_RECORD_DIR,
|
|
272
|
+
message: `the bypass records at the base \`${printable(baseRef)}\` could not be listed, so a deletion cannot be ruled out`,
|
|
273
|
+
},
|
|
274
|
+
];
|
|
275
|
+
}
|
|
276
|
+
return listed.stdout
|
|
277
|
+
.split('\0')
|
|
278
|
+
.filter((f) => f.endsWith('.md'))
|
|
279
|
+
.filter((f) => {
|
|
280
|
+
try {
|
|
281
|
+
fs.lstatSync(path.join(root, f));
|
|
282
|
+
return false;
|
|
283
|
+
} catch {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
})
|
|
287
|
+
.map((f) => ({ code: 'bypass-record-removed' as const, path: printable(f), message: `${printable(f)} is at the base \`${printable(baseRef)}\` and gone here` }));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** The committed review cites the record's subject digest, read from `HEAD`. */
|
|
291
|
+
export function reviewReader(
|
|
292
|
+
root: string,
|
|
293
|
+
index: ReadonlySet<string>,
|
|
294
|
+
budget: { perReview: number; total: number; reads: number } = {
|
|
295
|
+
perReview: REVIEW_MAX_BYTES,
|
|
296
|
+
total: REVIEW_TOTAL_BYTES,
|
|
297
|
+
reads: REVIEW_READ_LIMIT,
|
|
298
|
+
},
|
|
299
|
+
): (rel: string, subject: string, restoredAtMs: number) => boolean {
|
|
300
|
+
const cache = new Map<string, { text: string; addedAtMs: number } | null>();
|
|
301
|
+
let bytes = 0;
|
|
302
|
+
const read = (rel: string): { text: string; addedAtMs: number } | null => {
|
|
303
|
+
// The allowance is computed before the read and caps it, so the total
|
|
304
|
+
// can reach the budget and never pass it; bytes are counted as bytes.
|
|
305
|
+
const allowance = Math.min(budget.perReview, budget.total - bytes);
|
|
306
|
+
if (cache.size >= budget.reads || allowance <= 0) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
const shown = spawnSync('git', ['-C', root, 'show', `HEAD:${rel}`], { maxBuffer: allowance });
|
|
310
|
+
// The commit that first added the file: a review written before the
|
|
311
|
+
// restore was committed before it, whatever its text says.
|
|
312
|
+
const added = spawnSync('git', ['-C', root, 'log', '--diff-filter=A', '--format=%ct', '--', rel], { encoding: 'utf8' });
|
|
313
|
+
const times = (added.stdout ?? '').trim().split('\n').filter((l) => /^\d+$/u.test(l));
|
|
314
|
+
const first = times.length > 0 ? Number(times[times.length - 1]) * 1000 : NaN;
|
|
315
|
+
if (shown.status !== 0 || !Buffer.isBuffer(shown.stdout) || shown.stdout.length > allowance || added.status !== 0 || Number.isNaN(first)) {
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
bytes += shown.stdout.length;
|
|
319
|
+
return { text: shown.stdout.toString('utf8'), addedAtMs: first };
|
|
320
|
+
};
|
|
321
|
+
return (rel, subject, restoredAtMs) => {
|
|
322
|
+
// A council review lives with the council's records — never in the bypass
|
|
323
|
+
// record directory, so a record cannot name itself or another record.
|
|
324
|
+
if (!rel.startsWith(COUNCIL_REVIEW_DIR) || rel.startsWith(`${BYPASS_RECORD_DIR}/`) || !reviewCommitted(root, rel, index)) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
if (!cache.has(rel)) {
|
|
328
|
+
cache.set(rel, read(rel));
|
|
329
|
+
}
|
|
330
|
+
const review = cache.get(rel);
|
|
331
|
+
return review !== null && review !== undefined && review.text.includes(subject) && review.addedAtMs >= restoredAtMs;
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/** Where a council review a bypass record may cite lives. */
|
|
336
|
+
export const COUNCIL_REVIEW_DIR = 'agents/evidence/council/';
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* The run's review budget: one review at most 1 MiB, at most 20 distinct
|
|
340
|
+
* reviews and 4 MiB in total. Past it a review is not read, so the record that
|
|
341
|
+
* names it fails closed rather than costing more.
|
|
342
|
+
*/
|
|
343
|
+
const REVIEW_MAX_BYTES = 1024 * 1024;
|
|
344
|
+
const REVIEW_READ_LIMIT = 20;
|
|
345
|
+
const REVIEW_TOTAL_BYTES = 4 * 1024 * 1024;
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* A `council_review` path names a regular file committed at `HEAD` inside the
|
|
349
|
+
* evidence tree — read from the commit's tree, never the working tree, so
|
|
350
|
+
* a directory, an untracked file or a symbolic link does not count.
|
|
351
|
+
*/
|
|
352
|
+
export function reviewCommitted(root: string, rel: string, index: ReadonlySet<string> = committedEvidence(root)): boolean {
|
|
353
|
+
const norm = path.posix.normalize(rel);
|
|
354
|
+
if (norm !== rel || !norm.startsWith('agents/evidence/') || norm.endsWith('/') || norm.split('/').includes('..')) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
return index.has(norm);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Every regular file committed at `HEAD` in the evidence tree, read once
|
|
362
|
+
* per run from one tree snapshot. A tree that cannot be read is an empty set,
|
|
363
|
+
* so every non-pending review then fails closed.
|
|
364
|
+
*/
|
|
365
|
+
export function committedEvidence(root: string): Set<string> {
|
|
366
|
+
const r = spawnSync('git', ['-C', root, 'ls-tree', '-r', '-z', 'HEAD', '--', 'agents/evidence/'], {
|
|
367
|
+
encoding: 'utf8',
|
|
368
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
369
|
+
});
|
|
370
|
+
const out = new Set<string>();
|
|
371
|
+
if (r.status !== 0 || typeof r.stdout !== 'string') {
|
|
372
|
+
return out;
|
|
373
|
+
}
|
|
374
|
+
for (const entry of r.stdout.split('\0')) {
|
|
375
|
+
const m = /^(100644|100755) blob [0-9a-f]+\t(.+)$/su.exec(entry);
|
|
376
|
+
if (m !== null) {
|
|
377
|
+
out.add(m[2] as string);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return out;
|
|
381
|
+
}
|
|
382
|
+
|
|
157
383
|
export interface AnchorGateResult {
|
|
158
384
|
exitCode: 0 | 1;
|
|
159
385
|
lines: string[];
|
|
@@ -336,6 +562,12 @@ export function main(argv: readonly string[] = process.argv.slice(2), source = l
|
|
|
336
562
|
files.push(a);
|
|
337
563
|
}
|
|
338
564
|
}
|
|
565
|
+
// The ref reaches `git diff` and `git ls-tree` as a positional argument, so
|
|
566
|
+
// one starting with `-` would be read as an option.
|
|
567
|
+
if (baseRef !== null && baseRef.startsWith('-')) {
|
|
568
|
+
process.stderr.write(`check_platform_anchor: --base-ref ${printable(baseRef)} is not a ref\n`);
|
|
569
|
+
return 1;
|
|
570
|
+
}
|
|
339
571
|
|
|
340
572
|
let changed: string[];
|
|
341
573
|
if (filesFlagSeen) {
|
|
@@ -366,6 +598,17 @@ export function main(argv: readonly string[] = process.argv.slice(2), source = l
|
|
|
366
598
|
}
|
|
367
599
|
|
|
368
600
|
const result = evaluateGate(changed, policyText, source, repo);
|
|
601
|
+
const open = [
|
|
602
|
+
...evaluateBypassRecords(readBypassRecords(root), asOf(), reviewReader(root, committedEvidence(root))),
|
|
603
|
+
...removedBypassRecords(root, resolveBaseRef(baseRef, root)),
|
|
604
|
+
];
|
|
605
|
+
if (open.length > 0) {
|
|
606
|
+
result.lines.push('', `❌ ${String(open.length)} bypass record(s) without a closing:`);
|
|
607
|
+
for (const f of open) {
|
|
608
|
+
result.lines.push(` · [${f.code}] ${f.message}`);
|
|
609
|
+
}
|
|
610
|
+
result.exitCode = 1;
|
|
611
|
+
}
|
|
369
612
|
|
|
370
613
|
reportScanned({
|
|
371
614
|
gate: 'check_platform_anchor',
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
* 5. Required sections all present (1..10 per template).
|
|
24
24
|
* 6. Success signal — Section 7 has a concrete metric, target, and
|
|
25
25
|
* evaluation date.
|
|
26
|
+
* 7. A `scope: package` proposal at `stage: gated` declares `changed_files:`
|
|
27
|
+
* and names a passing `ratification_record:` and an `owner_authorization:`,
|
|
28
|
+
* both bound to the digest of those files (ADR-281 as amended) — see
|
|
29
|
+
* `_checkGatedRecord` for what this can and cannot prove.
|
|
26
30
|
*
|
|
27
31
|
* Exit codes: 0 = pass, 1 = gate failure, 2 = PyYAML missing, 3 = internal error.
|
|
28
32
|
*
|
|
@@ -31,6 +35,7 @@
|
|
|
31
35
|
* check_proposal --format json path/to.md
|
|
32
36
|
*/
|
|
33
37
|
|
|
38
|
+
import { spawnSync } from 'node:child_process';
|
|
34
39
|
import * as fs from 'node:fs';
|
|
35
40
|
import * as nodePath from 'node:path';
|
|
36
41
|
import process from 'node:process';
|
|
@@ -38,8 +43,26 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
38
43
|
import { parse as parseYaml } from 'yaml';
|
|
39
44
|
|
|
40
45
|
import { asOf } from './_lib/as_of.js';
|
|
46
|
+
import {
|
|
47
|
+
isRatified,
|
|
48
|
+
RATIFICATION_DIR,
|
|
49
|
+
readRatification,
|
|
50
|
+
readRequiredProviders,
|
|
51
|
+
} from './_lib/ratification_artifact.js';
|
|
52
|
+
import {
|
|
53
|
+
assertContained,
|
|
54
|
+
DEFAULT_REVISION,
|
|
55
|
+
fileAtRevision,
|
|
56
|
+
GatedSubjectRefusal,
|
|
57
|
+
resolveRevision,
|
|
58
|
+
subjectOf,
|
|
59
|
+
} from './_lib/ratification_subject.js';
|
|
41
60
|
import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
42
61
|
|
|
62
|
+
/** This script's own tree: the quorum policy is read from here, never from the proposal's. */
|
|
63
|
+
const REPO = nodePath.resolve(nodePath.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
64
|
+
const POLICY_PATH = 'src/config/ratification-policy.json';
|
|
65
|
+
|
|
43
66
|
type Severity = 'error' | 'warning';
|
|
44
67
|
|
|
45
68
|
const REQUIRED_FRONTMATTER: ReadonlySet<string> = new Set([
|
|
@@ -392,7 +415,165 @@ function _resolvePath(p: string): string {
|
|
|
392
415
|
return nodePath.resolve(p);
|
|
393
416
|
}
|
|
394
417
|
|
|
395
|
-
|
|
418
|
+
/**
|
|
419
|
+
* The digest a package proposal's review and approval must both carry: one
|
|
420
|
+
* digest over EVERY file the proposal declares as its change, read from Git
|
|
421
|
+
* objects at `revision`.
|
|
422
|
+
*
|
|
423
|
+
* Not the gate's `subject`, on purpose. The gate digests only the GATED subset
|
|
424
|
+
* of a diff, and a learning usually changes a skill or rule body the gate does
|
|
425
|
+
* not watch — over such a change the gate's digest covers nothing and is the
|
|
426
|
+
* same for every proposal, so a record bound to it would be bound to no
|
|
427
|
+
* content. ADR-281 as amended requires a digest-bound review for every
|
|
428
|
+
* learning-originated package change, so the binding has to cover what the
|
|
429
|
+
* proposal changes. It reuses the subject module's ONE hashing loop and
|
|
430
|
+
* serialisation, by handing the declared files in as the closure it treats as
|
|
431
|
+
* covered, rather than growing a second loop that could drift from the first.
|
|
432
|
+
*/
|
|
433
|
+
export function proposalSubjectOf(
|
|
434
|
+
root: string,
|
|
435
|
+
files: readonly string[],
|
|
436
|
+
revision: string = DEFAULT_REVISION,
|
|
437
|
+
): string {
|
|
438
|
+
return subjectOf(root, files, files, revision).digest;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/** The Git work tree a proposal file sits in, or `null` outside one. */
|
|
442
|
+
function _repoRootOf(proposalPath: string): string | null {
|
|
443
|
+
const env = { ...process.env };
|
|
444
|
+
// A GIT_DIR inherited from a hook would answer for the hook's repository.
|
|
445
|
+
for (const k of ['GIT_DIR', 'GIT_WORK_TREE', 'GIT_INDEX_FILE', 'GIT_COMMON_DIR']) delete env[k];
|
|
446
|
+
const dir = nodePath.dirname(nodePath.resolve(proposalPath));
|
|
447
|
+
const res = spawnSync('git', ['-C', dir, 'rev-parse', '--show-toplevel'], { encoding: 'utf8', env });
|
|
448
|
+
return res.status === 0 ? res.stdout.trim() : null;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* A package-scoped proposal reaches `stage: gated` only on a council record
|
|
453
|
+
* bound to its own change AND an owner authorization bound to the same digest.
|
|
454
|
+
*
|
|
455
|
+
* The ORDER is ADR-281's amendment of 2026-10-07: the council record is the
|
|
456
|
+
* REVIEW, the owner's authorization is the APPROVAL, and a favourable verdict is
|
|
457
|
+
* advisory until the second exists. A record alone is refused, naming what is
|
|
458
|
+
* missing.
|
|
459
|
+
*
|
|
460
|
+
* WHAT THIS CANNOT PROVE, said before what it can. The authorization is a file
|
|
461
|
+
* the proposal names and a digest that file carries; nothing here establishes
|
|
462
|
+
* that the owner wrote it. ADR-281 § 5 makes the owner's route his own recorded
|
|
463
|
+
* act on the forge, which leaves no artifact a script can authenticate. What
|
|
464
|
+
* IS established is narrower: the review and the authorization name the SAME
|
|
465
|
+
* content as the proposal's declared change, read at one commit, so neither can
|
|
466
|
+
* be carried over from another change, and the review is a record the
|
|
467
|
+
* ratification reader accepts against the committed provider policy.
|
|
468
|
+
*
|
|
469
|
+
* A `scope: project` proposal, and any stage before `gated`, is checked exactly
|
|
470
|
+
* as before.
|
|
471
|
+
*/
|
|
472
|
+
function _checkGatedRecord(fm: Frontmatter, findings: Finding[], repoRoot: string | null): void {
|
|
473
|
+
if (fm['stage'] !== 'gated' || fm['scope'] !== 'package') {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
const refuse = (message: string): void => {
|
|
477
|
+
findings.push(new Finding('error', 'gated', message));
|
|
478
|
+
};
|
|
479
|
+
if (repoRoot === null) {
|
|
480
|
+
refuse('stage=gated with scope=package is checked against Git objects, and this proposal is not inside a Git work tree');
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
const changed = fm['changed_files'];
|
|
485
|
+
const files = Array.isArray(changed)
|
|
486
|
+
? changed.filter((f): f is string => typeof f === 'string').map((f) => f.trim()).filter((f) => f !== '')
|
|
487
|
+
: [];
|
|
488
|
+
if (files.length === 0 || !Array.isArray(changed) || files.length !== changed.length) {
|
|
489
|
+
refuse(
|
|
490
|
+
'stage=gated with scope=package needs `changed_files:` — a non-empty list of the paths ' +
|
|
491
|
+
'this proposal declares as its change, which its review and approval are bound to',
|
|
492
|
+
);
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// One commit for the whole check: the digest and both named files are read
|
|
497
|
+
// from the same resolved revision, never from a name resolved twice.
|
|
498
|
+
let commit: string;
|
|
499
|
+
let expected: string;
|
|
500
|
+
try {
|
|
501
|
+
commit = resolveRevision(repoRoot, DEFAULT_REVISION);
|
|
502
|
+
expected = proposalSubjectOf(repoRoot, files, commit);
|
|
503
|
+
} catch (err) {
|
|
504
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
505
|
+
throw err;
|
|
506
|
+
}
|
|
507
|
+
refuse(`the declared change cannot be digested: ${err.message}`);
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
const requiredProviders = readRequiredProviders(_readOrNull(joinPath(REPO, POLICY_PATH)));
|
|
512
|
+
for (const [key, what] of [
|
|
513
|
+
['ratification_record', 'the council’s review'],
|
|
514
|
+
['owner_authorization', 'the owner’s approval'],
|
|
515
|
+
] as const) {
|
|
516
|
+
const named = fm[key];
|
|
517
|
+
if (typeof named !== 'string' || named.trim() === '') {
|
|
518
|
+
refuse(
|
|
519
|
+
`stage=gated with scope=package needs \`${key}:\` — ${what}, bound to this ` +
|
|
520
|
+
'proposal’s own change (ADR-281 as amended 2026-10-07)',
|
|
521
|
+
);
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
const rel = named.trim();
|
|
525
|
+
let bytes: Buffer | null;
|
|
526
|
+
try {
|
|
527
|
+
assertContained(rel);
|
|
528
|
+
bytes = fileAtRevision(repoRoot, commit, rel);
|
|
529
|
+
} catch (err) {
|
|
530
|
+
if (!(err instanceof GatedSubjectRefusal)) {
|
|
531
|
+
throw err;
|
|
532
|
+
}
|
|
533
|
+
refuse(`${key} names \`${rel}\`: ${err.message}`);
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
if (bytes === null) {
|
|
537
|
+
refuse(`${key} names \`${rel}\`, which is not a committed regular file at HEAD`);
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
const text = bytes.toString('utf8');
|
|
541
|
+
if (key === 'ratification_record') {
|
|
542
|
+
if (!rel.startsWith(`${RATIFICATION_DIR}/`) || !rel.endsWith('.md')) {
|
|
543
|
+
refuse(`${key} \`${rel}\` is not a record under \`${RATIFICATION_DIR}/\``);
|
|
544
|
+
continue;
|
|
545
|
+
}
|
|
546
|
+
const reading = readRatification(text, requiredProviders, expected);
|
|
547
|
+
if (!isRatified(reading)) {
|
|
548
|
+
const why = reading.problems.map((pr) => pr.message);
|
|
549
|
+
if (reading.artifact !== null && !why.length) {
|
|
550
|
+
why.push(`verdict is \`${reading.artifact.verdict}\``);
|
|
551
|
+
}
|
|
552
|
+
refuse(`${key} \`${rel}\` does not pass for this change: ${why.join('; ')}`);
|
|
553
|
+
}
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
const found = /^subject:\s*([0-9a-f]{64})\s*$/m.exec(text);
|
|
557
|
+
if (found === null) {
|
|
558
|
+
refuse(`${key} \`${rel}\` carries no \`subject:\` digest, so it is bound to no change`);
|
|
559
|
+
} else if (found[1] !== expected) {
|
|
560
|
+
refuse(
|
|
561
|
+
`${key} \`${rel}\` is bound to \`${String(found[1]).slice(0, 12)}…\`, not to this ` +
|
|
562
|
+
`proposal’s change (\`${expected.slice(0, 12)}…\`)`,
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
function _readOrNull(p: string): string | null {
|
|
569
|
+
try {
|
|
570
|
+
return fs.readFileSync(p, 'utf8');
|
|
571
|
+
} catch {
|
|
572
|
+
return null;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
export function _runChecks(text: string, p: string | null = null, repoRoot?: string | null): Finding[] {
|
|
396
577
|
const findings: Finding[] = [];
|
|
397
578
|
const fm = _loadFrontmatter(text);
|
|
398
579
|
_checkFrontmatter(fm, findings);
|
|
@@ -402,6 +583,7 @@ function _runChecks(text: string, p: string | null = null): Finding[] {
|
|
|
402
583
|
_checkMarkers(body, findings);
|
|
403
584
|
_checkSuccessSignal(body, findings);
|
|
404
585
|
_checkOriginatingProject(body, fm, findings);
|
|
586
|
+
_checkGatedRecord(fm, findings, repoRoot !== undefined ? repoRoot : p === null ? null : _repoRootOf(p));
|
|
405
587
|
if (p !== null) {
|
|
406
588
|
_proposalRateWarning(p, findings);
|
|
407
589
|
}
|
|
@@ -53,6 +53,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
53
53
|
|
|
54
54
|
import { parse as parseYaml } from 'yaml';
|
|
55
55
|
|
|
56
|
+
import { AUTHORIZATION_HEADER, CLASS_SPELLED_PREFIXES } from './_lib/egress_rules.js';
|
|
56
57
|
import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
57
58
|
import { SchemaError, validate, type YamlValue } from './validate_frontmatter.js';
|
|
58
59
|
|
|
@@ -145,7 +146,7 @@ const REDACTED = '<redacted>';
|
|
|
145
146
|
export const REDACTIONS: readonly (readonly [RegExp, string])[] = [
|
|
146
147
|
// `Authorization: Bearer …` — the header name stays, the value does not.
|
|
147
148
|
// Runs to end of line: everything after the colon is the credential.
|
|
148
|
-
[
|
|
149
|
+
[new RegExp(`(\\b${AUTHORIZATION_HEADER}\\s*:\\s*)(\\S.*)$`, 'gi'), `$1${REDACTED}`],
|
|
149
150
|
// `KEY=VALUE`. Two narrowings carry their weight. The lookbehind requires
|
|
150
151
|
// the key to START a token — so `yt-dlp==2026.7.4` is never chopped at its
|
|
151
152
|
// `dlp=` tail and `--target=/opt` is left alone — while still admitting a
|
|
@@ -153,8 +154,9 @@ export const REDACTIONS: readonly (readonly [RegExp, string])[] = [
|
|
|
153
154
|
// actually appears in a command. `(?!=)` excludes the `==` pin operator.
|
|
154
155
|
[/(?<![A-Za-z0-9_./-])([A-Za-z_][A-Za-z0-9_]{2,})=(?!=)\S+/g, `$1=${REDACTED}`],
|
|
155
156
|
// Provider key prefixes — the shapes that are a secret by construction.
|
|
156
|
-
|
|
157
|
-
[
|
|
157
|
+
// Spelled as classes in the rule table; the prefix stem stays, the value does not.
|
|
158
|
+
[new RegExp(`\\b${CLASS_SPELLED_PREFIXES.dashKeys.family}[A-Za-z0-9_-]{8,}`, 'gi'), `$1-${REDACTED}`],
|
|
159
|
+
[new RegExp(`\\b${CLASS_SPELLED_PREFIXES.tokens.family}[A-Za-z0-9_-]{8,}`, 'gi'), `$1_${REDACTED}`],
|
|
158
160
|
// A hex digest ≥ 32: an API key or a signature, never part of an install verb.
|
|
159
161
|
[/(?<![0-9a-fA-F])[0-9a-fA-F]{32,}(?![0-9a-fA-F])/g, REDACTED],
|
|
160
162
|
// A ≥ 24-char run carrying lower + upper + digit — the entropy shape of an
|
|
@@ -9,8 +9,11 @@
|
|
|
9
9
|
* same scan scope and order, same example/allowlist/skip logic. No
|
|
10
10
|
* behaviour changes — latent bugs are replicated.
|
|
11
11
|
*
|
|
12
|
-
* Scans .md files in dist/agent-src/ and
|
|
13
|
-
* (file paths, skill names, rule names) and reports
|
|
12
|
+
* Scans .md files in dist/agent-src/, agents/ and docs/guidelines/ for
|
|
13
|
+
* internal references (file paths, skill names, rule names) and reports
|
|
14
|
+
* broken ones. The third root is not decoration: this line named two while
|
|
15
|
+
* `SCAN_DIRS` below has held three, so a reader checking whether their
|
|
16
|
+
* guideline's links are covered read the wrong answer off the header.
|
|
14
17
|
*
|
|
15
18
|
* Exit codes: 0 = clean, 1 = broken refs found, 3 = internal error
|
|
16
19
|
*
|
|
@@ -26,6 +26,7 @@ import * as fs from 'node:fs';
|
|
|
26
26
|
import * as path from 'node:path';
|
|
27
27
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
28
28
|
|
|
29
|
+
import { CONSUMER_IMPACT_VALUES } from './_lib/consumer_impact.js';
|
|
29
30
|
import { DeadScopeError, reportScanned } from './_lib/scan_scope.js';
|
|
30
31
|
|
|
31
32
|
const _HERE = fileURLToPath(import.meta.url);
|
|
@@ -78,6 +79,37 @@ function _diffPaths(a: unknown, b: unknown, at: Segment[] = []): Segment[][] {
|
|
|
78
79
|
return JSON.stringify(a) === JSON.stringify(b) ? [] : [at];
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
function _isImpactEntry(v: unknown): boolean {
|
|
83
|
+
if (!_isObject(v)) return false;
|
|
84
|
+
const keys = Object.keys(v);
|
|
85
|
+
return (
|
|
86
|
+
(CONSUMER_IMPACT_VALUES as readonly unknown[]).includes(v['impact']) &&
|
|
87
|
+
keys.every((k) => k === 'impact' || (k === 'security' && v[k] === true))
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* `head` without the one `agentConfig.impact` entry the release itself writes:
|
|
93
|
+
* keyed to the version being cut, absent at the base, in the trailer
|
|
94
|
+
* vocabulary. Containers the removal empties go too when the base lacked them,
|
|
95
|
+
* so any other difference still surfaces at its own path.
|
|
96
|
+
*/
|
|
97
|
+
function _withoutReleaseImpactEntry(base: unknown, head: unknown): unknown {
|
|
98
|
+
if (!_isObject(base) || !_isObject(head) || !_isObject(head['agentConfig'])) return head;
|
|
99
|
+
const version = head['version'];
|
|
100
|
+
const impact = head['agentConfig']['impact'];
|
|
101
|
+
const baseConfig = _isObject(base['agentConfig']) ? base['agentConfig'] : undefined;
|
|
102
|
+
const baseImpact = baseConfig && _isObject(baseConfig['impact']) ? baseConfig['impact'] : undefined;
|
|
103
|
+
if (typeof version !== 'string' || !_isObject(impact) || !_isImpactEntry(impact[version])) return head;
|
|
104
|
+
if (baseImpact && version in baseImpact) return head;
|
|
105
|
+
const { [version]: _written, ...restImpact } = impact;
|
|
106
|
+
const config: Record<string, unknown> = { ...head['agentConfig'], impact: restImpact };
|
|
107
|
+
if (Object.keys(restImpact).length === 0 && !baseImpact) delete config['impact'];
|
|
108
|
+
const out: Record<string, unknown> = { ...head, agentConfig: config };
|
|
109
|
+
if (Object.keys(config).length === 0 && !baseConfig) delete out['agentConfig'];
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
|
|
81
113
|
/**
|
|
82
114
|
* The differences between `base` and `head` text of one manifest that are NOT a
|
|
83
115
|
* version-string change in a declared version field. Empty means in shape.
|
|
@@ -94,6 +126,7 @@ export function manifestDifferences(file: string, base: string | null, head: str
|
|
|
94
126
|
} catch (err) {
|
|
95
127
|
return [`${file}: not parseable JSON (${(err as Error).message})`];
|
|
96
128
|
}
|
|
129
|
+
if (file === 'package.json') b = _withoutReleaseImpactEntry(a, b);
|
|
97
130
|
const allowed = VERSION_FIELDS[file] ?? [];
|
|
98
131
|
const out: string[] = [];
|
|
99
132
|
for (const p of _diffPaths(a, b)) {
|
|
@@ -59,6 +59,11 @@ const ALLOWLIST_GLOBS = [
|
|
|
59
59
|
// its regenerated dist twin (kept in lockstep with package.json.version).
|
|
60
60
|
'src/agent-src/templates/agents/agent-project-settings.example.yml',
|
|
61
61
|
'dist/agent-src/templates/agents/agent-project-settings.example.yml',
|
|
62
|
+
// Released settings surface — rewritten by release.ts writeReleasedSurface
|
|
63
|
+
// inside the cut, so without this entry the release PR carries a file its
|
|
64
|
+
// own shape step refuses. It is the base the NEXT cut's settings-delta
|
|
65
|
+
// assertion reads.
|
|
66
|
+
'tests/fixtures/settings_surface_released.json',
|
|
62
67
|
] as const;
|
|
63
68
|
|
|
64
69
|
/**
|
|
@@ -7,7 +7,15 @@
|
|
|
7
7
|
* re-landed as #847 (13f244c9b — non-destructive "Irreversible external action"
|
|
8
8
|
* row + "Never act while asking" clause) and #849 (2c46e7f3b — direct-answers
|
|
9
9
|
* "no duration estimates" + "never cite the rule"). This checker's invariant set
|
|
10
|
-
* covers those exact strings — it would have
|
|
10
|
+
* covers those exact strings — so a run of it would have caught the loss.
|
|
11
|
+
*
|
|
12
|
+
* WHERE it runs, stated because the line above used to say "at CI time" and
|
|
13
|
+
* that is not where this is registered: the only caller is `task ci`, and no
|
|
14
|
+
* workflow under `.github/workflows/` invokes `task ci` — three steps in
|
|
15
|
+
* `consistency.yml` say so in as many words, which is why they re-register
|
|
16
|
+
* their own gates there. It is also not in `task preflight`. So the loss would
|
|
17
|
+
* have been caught by someone running the full local chain, and by nothing on
|
|
18
|
+
* the pull request.
|
|
11
19
|
*
|
|
12
20
|
* Loads `tests/golden/invariants.json` and verifies that every invariant
|
|
13
21
|
* string (whitespace-normalised: runs of whitespace collapse to a single
|