@event4u/agent-config 16.5.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +463 -498
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +1 -1
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +72 -17
- package/dist/cli/commands/uiRenderAsset.js +10 -2
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +4 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +483 -817
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +373 -190
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +21 -16
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17506 -18692
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +281 -49
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9831 -5546
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_rules.js +2 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +5 -0
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +13 -4
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +26 -22
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +93 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_rules.ts +2 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verify_clause.ts +4 -2
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +42 -10
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +75 -19
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +144 -16
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -52,7 +52,9 @@ import { fileURLToPath } from 'node:url';
|
|
|
52
52
|
|
|
53
53
|
import { wilsonInterval } from './_lib/capture_rate.js';
|
|
54
54
|
import { fnv1a } from './_lib/fnv.js';
|
|
55
|
+
import { corpusSkills, loadTrainCases } from './_lib/routing_corpus.js';
|
|
55
56
|
import { rank } from './skill_tools/score_skill_relevance.js';
|
|
57
|
+
import type { RankRow } from './skill_tools/score_skill_relevance.js';
|
|
56
58
|
import type { RankOptions } from '../shared/skillRanking.js';
|
|
57
59
|
|
|
58
60
|
export const REPO = path.resolve(fileURLToPath(import.meta.url), '..', '..', '..');
|
|
@@ -535,6 +537,192 @@ export function rankOptionsFor(ranker: string): RankOptions {
|
|
|
535
537
|
return RANKER_LABELS[ranker] as RankOptions;
|
|
536
538
|
}
|
|
537
539
|
|
|
540
|
+
/**
|
|
541
|
+
* The second corpus this script can read, and the only one it reads by SKILL
|
|
542
|
+
* rather than by hand-written label.
|
|
543
|
+
*
|
|
544
|
+
* It is deliberately NOT a fourth `CorpusName`. The three names above all feed
|
|
545
|
+
* `measureAccuracy`, which answers "is the owning skill in the top 1 or top 3"
|
|
546
|
+
* over prompts somebody labelled with an expected-skills list. The trigger
|
|
547
|
+
* corpus answers a different question — "how deep must the answer be returned
|
|
548
|
+
* before the owning skill is in it" — over cases whose ground truth is the
|
|
549
|
+
* directory the corpus file sits in. Folding it into `CorpusName` would have
|
|
550
|
+
* put a case into `promptsForCorpus`, `DENOMINATOR_NOTES` and the pack census
|
|
551
|
+
* that none of them can answer, so the argument is a union of two kinds and
|
|
552
|
+
* `main` branches on it once.
|
|
553
|
+
*/
|
|
554
|
+
export const TRIGGERS_TRAIN = 'triggers-train';
|
|
555
|
+
export type CorpusArg = CorpusName | typeof TRIGGERS_TRAIN;
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* The depths printed. 1 and 3 so the arm is comparable with the accuracy arm,
|
|
559
|
+
* 5 because that was the shipped default `limit` the bar is measured against,
|
|
560
|
+
* and 8, 10, 20 because the question this arm exists to answer is how much
|
|
561
|
+
* recall a deeper default would buy. 8 is the default it selected
|
|
562
|
+
* (`DEFAULT_SUGGEST_LIMIT` in `src/shared/skillRanking.ts`, which records the
|
|
563
|
+
* pre-registered bar).
|
|
564
|
+
*/
|
|
565
|
+
export const RECALL_DEPTHS: readonly number[] = [1, 3, 5, 8, 10, 20];
|
|
566
|
+
|
|
567
|
+
/** The key a depth is printed under. `recall@8` is quoted by the roadmap's verify line. */
|
|
568
|
+
export function recallKey(depth: number): string {
|
|
569
|
+
return `recall@${depth}`;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
export interface RecallPoint {
|
|
573
|
+
hits: number;
|
|
574
|
+
rate: number;
|
|
575
|
+
ci95: Interval;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
export interface RecallSplit {
|
|
579
|
+
/** The denominator: positive cases in this split. */
|
|
580
|
+
positives: number;
|
|
581
|
+
/**
|
|
582
|
+
* Positives whose owning skill scores nothing at all.
|
|
583
|
+
*
|
|
584
|
+
* `rank()` drops every row that scores 0, so "absent from the ranked rows"
|
|
585
|
+
* and "shares no indexed term and no persona with the prompt" are the same
|
|
586
|
+
* state. These are the cases no DEPTH can reach — counted separately so a
|
|
587
|
+
* reader never reads the gap between `recall@20` and 1.0 as a ranking
|
|
588
|
+
* problem when part of it is a vocabulary problem.
|
|
589
|
+
*/
|
|
590
|
+
zero_overlap: number;
|
|
591
|
+
recall: Record<string, RecallPoint>;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
export interface NearMissArm {
|
|
595
|
+
cases: number;
|
|
596
|
+
first: number;
|
|
597
|
+
top3: number;
|
|
598
|
+
note: string;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
export interface RecallReport {
|
|
602
|
+
schema: 1;
|
|
603
|
+
arm: 'recall-at-depth';
|
|
604
|
+
corpus: typeof TRIGGERS_TRAIN;
|
|
605
|
+
ranker: string;
|
|
606
|
+
commit: string;
|
|
607
|
+
skills_dir: string;
|
|
608
|
+
skills_indexed: number;
|
|
609
|
+
/** Train corpora read. The holdout ones are never opened — see `seal_note`. */
|
|
610
|
+
train_corpora: number;
|
|
611
|
+
cases_total: number;
|
|
612
|
+
positives: number;
|
|
613
|
+
negatives: number;
|
|
614
|
+
all: RecallSplit;
|
|
615
|
+
de: RecallSplit;
|
|
616
|
+
near_miss: NearMissArm;
|
|
617
|
+
seal_note: string;
|
|
618
|
+
denominator_note: string;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Where the owning skill sits in the ranked rows, 1-based, or `null` when it
|
|
623
|
+
* is not there at all.
|
|
624
|
+
*
|
|
625
|
+
* Computed ONCE per case and reused for every depth and for both splits. The
|
|
626
|
+
* alternative — one `rank()` call per depth — would read the catalogue from
|
|
627
|
+
* disk six times per prompt and could not be made to disagree with itself.
|
|
628
|
+
*/
|
|
629
|
+
export function depthOfOwner(rows: readonly RankRow[], skill: string): number | null {
|
|
630
|
+
for (let i = 0; i < rows.length; i += 1) {
|
|
631
|
+
if (rows[i]![0] === skill) return i + 1;
|
|
632
|
+
}
|
|
633
|
+
return null;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function splitOf(depths: readonly (number | null)[]): RecallSplit {
|
|
637
|
+
const n = depths.length;
|
|
638
|
+
const recall: Record<string, RecallPoint> = {};
|
|
639
|
+
for (const d of RECALL_DEPTHS) {
|
|
640
|
+
const hits = depths.filter((p) => p !== null && p <= d).length;
|
|
641
|
+
recall[recallKey(d)] = { hits, rate: n ? round3(hits / n) : 0, ci95: ci(hits, n) };
|
|
642
|
+
}
|
|
643
|
+
return { positives: n, zero_overlap: depths.filter((p) => p === null).length, recall };
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* Recall at depth over the TRAIN slice of the per-skill trigger corpus.
|
|
648
|
+
*
|
|
649
|
+
* Ground truth is the directory the case was read from, so there is no label to
|
|
650
|
+
* disagree with. The seal is inherited rather than re-implemented:
|
|
651
|
+
* `loadTrainCases` decides the partition from the directory NAME and skips a
|
|
652
|
+
* holdout path before any read, so this arm cannot open one even by mistake.
|
|
653
|
+
*/
|
|
654
|
+
export function measureRecallAtDepth(opts: {
|
|
655
|
+
ranker: string;
|
|
656
|
+
commit: string;
|
|
657
|
+
repo?: string;
|
|
658
|
+
skillsDir?: string;
|
|
659
|
+
}): RecallReport {
|
|
660
|
+
const repo = opts.repo ?? REPO;
|
|
661
|
+
const skillsDir = opts.skillsDir ?? path.join(repo, 'src', 'skills');
|
|
662
|
+
const rankOpts = rankOptionsFor(opts.ranker);
|
|
663
|
+
|
|
664
|
+
const cases = loadTrainCases(repo);
|
|
665
|
+
const positives: (number | null)[] = [];
|
|
666
|
+
const dePositives: (number | null)[] = [];
|
|
667
|
+
let nearMissCases = 0;
|
|
668
|
+
let nearMissFirst = 0;
|
|
669
|
+
let nearMissTop3 = 0;
|
|
670
|
+
|
|
671
|
+
for (const c of cases) {
|
|
672
|
+
const at = depthOfOwner(rank(c.prompt, skillsDir, rankOpts), c.skill);
|
|
673
|
+
if (c.expect) {
|
|
674
|
+
positives.push(at);
|
|
675
|
+
if (c.language === 'de') dePositives.push(at);
|
|
676
|
+
continue;
|
|
677
|
+
}
|
|
678
|
+
if (c.caseClass === 'near-miss') {
|
|
679
|
+
nearMissCases++;
|
|
680
|
+
if (at === 1) nearMissFirst++;
|
|
681
|
+
if (at !== null && at <= 3) nearMissTop3++;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
const skillsIndexed = fs.existsSync(skillsDir)
|
|
686
|
+
? fs.readdirSync(skillsDir).filter((s) => fs.existsSync(path.join(skillsDir, s, 'SKILL.md'))).length
|
|
687
|
+
: 0;
|
|
688
|
+
|
|
689
|
+
return {
|
|
690
|
+
schema: 1,
|
|
691
|
+
arm: 'recall-at-depth',
|
|
692
|
+
corpus: TRIGGERS_TRAIN,
|
|
693
|
+
ranker: opts.ranker,
|
|
694
|
+
commit: opts.commit,
|
|
695
|
+
skills_dir: path.relative(repo, skillsDir),
|
|
696
|
+
skills_indexed: skillsIndexed,
|
|
697
|
+
train_corpora: corpusSkills(repo).filter((s) => s.partition === 'train').length,
|
|
698
|
+
cases_total: cases.length,
|
|
699
|
+
positives: positives.length,
|
|
700
|
+
negatives: cases.length - positives.length,
|
|
701
|
+
all: splitOf(positives),
|
|
702
|
+
de: splitOf(dePositives),
|
|
703
|
+
near_miss: {
|
|
704
|
+
cases: nearMissCases,
|
|
705
|
+
first: nearMissFirst,
|
|
706
|
+
top3: nearMissTop3,
|
|
707
|
+
note:
|
|
708
|
+
'Cases the corpus declares `class: near-miss`. Every one of them is a NEGATIVE ' +
|
|
709
|
+
'(`trigger: false`), so `first` and `top3` are false-positive counts, not hits — ' +
|
|
710
|
+
'lower is better, and they are printed beside recall so a depth change cannot be ' +
|
|
711
|
+
'read as free.',
|
|
712
|
+
},
|
|
713
|
+
seal_note:
|
|
714
|
+
'The sealed holdout corpora are never opened: `routing_corpus.loadTrainCases` decides ' +
|
|
715
|
+
'the partition from the skill DIRECTORY NAME and skips a holdout path before reading ' +
|
|
716
|
+
'any file. Filtering after the read would satisfy the letter of the freeze and not ' +
|
|
717
|
+
'the seal.',
|
|
718
|
+
denominator_note:
|
|
719
|
+
'Positive cases of the TRAIN slice of `src/skills/*/evals/triggers.json`. The owning ' +
|
|
720
|
+
'skill is the directory the case was read from, so no expected-skills label is ' +
|
|
721
|
+
'involved and none can be stale. `recall@k` is the share of positives whose owning ' +
|
|
722
|
+
'skill appears within the first k ranked rows.',
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
|
|
538
726
|
export function measure(opts: {
|
|
539
727
|
ranker: string;
|
|
540
728
|
commit: string;
|
|
@@ -588,13 +776,14 @@ export function measure(opts: {
|
|
|
588
776
|
};
|
|
589
777
|
}
|
|
590
778
|
|
|
591
|
-
function parseCorpus(argv: readonly string[]):
|
|
779
|
+
export function parseCorpus(argv: readonly string[]): CorpusArg {
|
|
592
780
|
const i = argv.indexOf('--corpus');
|
|
593
781
|
if (i === -1) return 'labelled';
|
|
594
782
|
const raw = argv[i + 1];
|
|
783
|
+
if (raw === TRIGGERS_TRAIN) return TRIGGERS_TRAIN;
|
|
595
784
|
if (!raw || !CORPUS_NAMES.includes(raw as CorpusName)) {
|
|
596
785
|
throw new Error(
|
|
597
|
-
`measure_skill_ranker_baseline: --corpus expects one of ${CORPUS_NAMES.join(' | ')}, got ${raw ?? '(nothing)'}`,
|
|
786
|
+
`measure_skill_ranker_baseline: --corpus expects one of ${[...CORPUS_NAMES, TRIGGERS_TRAIN].join(' | ')}, got ${raw ?? '(nothing)'}`,
|
|
598
787
|
);
|
|
599
788
|
}
|
|
600
789
|
return raw as CorpusName;
|
|
@@ -653,11 +842,11 @@ export function parseSlice(argv: readonly string[]): SliceName {
|
|
|
653
842
|
}
|
|
654
843
|
|
|
655
844
|
export function main(argv: readonly string[]): number {
|
|
656
|
-
let corpus:
|
|
845
|
+
let corpus: CorpusArg;
|
|
657
846
|
let slice: SliceName;
|
|
658
847
|
let ranker: string;
|
|
659
848
|
let commit: string;
|
|
660
|
-
let out: RankerBaseline;
|
|
849
|
+
let out: RankerBaseline | RecallReport;
|
|
661
850
|
try {
|
|
662
851
|
corpus = parseCorpus(argv);
|
|
663
852
|
slice = parseSlice(argv);
|
|
@@ -665,7 +854,16 @@ export function main(argv: readonly string[]): number {
|
|
|
665
854
|
commit = parseFlagValue(argv, '--commit', 'unknown');
|
|
666
855
|
// Inside the same guard as the two parsers above: an unknown --ranker is
|
|
667
856
|
// the same class of mistake and now gets the same exit code.
|
|
668
|
-
|
|
857
|
+
//
|
|
858
|
+
// `--slice` is PARSED on this branch and then unused, deliberately: the
|
|
859
|
+
// trigger corpus carries its own frozen train/holdout partition, so the
|
|
860
|
+
// accuracy arm's tuning/sealed division does not apply to it. Parsing it
|
|
861
|
+
// anyway keeps a malformed `--slice` an error here too rather than a
|
|
862
|
+
// value silently ignored only on this corpus.
|
|
863
|
+
out =
|
|
864
|
+
corpus === TRIGGERS_TRAIN
|
|
865
|
+
? measureRecallAtDepth({ ranker, commit })
|
|
866
|
+
: measure({ ranker, commit, corpus, slice });
|
|
669
867
|
} catch (err) {
|
|
670
868
|
process.stderr.write(`${(err as Error).message}\n`);
|
|
671
869
|
return 2;
|
|
@@ -178,6 +178,15 @@ interface Counts {
|
|
|
178
178
|
* the pointer that makes a human read possible ships with it.
|
|
179
179
|
*/
|
|
180
180
|
dropped_sites: { session: string; turn: number; evidence: string }[];
|
|
181
|
+
/**
|
|
182
|
+
* C's fires split by what the turn edited (road-to-agent-throughput-recovery
|
|
183
|
+
* 4.2): whether a docs-only exemption is worth proposing turns on how many
|
|
184
|
+
* fires edited nothing but `agents/**` or `docs/**` markdown. The rows sum to
|
|
185
|
+
* `unverified_fires`; a fire with no recorded path is `unknown`.
|
|
186
|
+
*/
|
|
187
|
+
unverified_by_path_class: Record<EditPathClass, number>;
|
|
188
|
+
/** Where C fired, with the class only — never the path. */
|
|
189
|
+
unverified_sites: { session: string; turn: number; path_class: EditPathClass }[];
|
|
181
190
|
/** The independent scanner's own per-session language total, for context. */
|
|
182
191
|
scanner_language: number;
|
|
183
192
|
sessions: number;
|
|
@@ -208,6 +217,31 @@ const _TEST_DIR_RE = /(?:^|\/)(?:tests?|specs?|__tests__|__specs__|e2e|cypress|p
|
|
|
208
217
|
const _TEST_FILE_RE =
|
|
209
218
|
/(?:\.(?:test|spec)\.[a-z]+$)|(?:_test\.[a-z]+$)|(?:(?:^|\/)test_[^/]+$)|(?:Test\.php$)|(?:Spec\.php$)|(?:\.feature$)/i;
|
|
210
219
|
|
|
220
|
+
export const EDIT_PATH_CLASSES = ['docs-md', 'code', 'mixed', 'unknown'] as const;
|
|
221
|
+
export type EditPathClass = (typeof EDIT_PATH_CLASSES)[number];
|
|
222
|
+
|
|
223
|
+
const _DOCS_MD_RE = /(?:^|\/)(?:agents|docs)\/.*\.md$/i;
|
|
224
|
+
const _ROOT_DOCS_MD_RE = /^(?:agents|docs)\/.*\.md$/i;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* `docs-md` when every edited path is `agents/**` or `docs/**` markdown at the
|
|
228
|
+
* repository root. With the session's `root` known an absolute path is judged
|
|
229
|
+
* relative to it, so `src/agents/x.md` or `node_modules/p/docs/y.md` is not
|
|
230
|
+
* docs; without it the segment match is the only reading available.
|
|
231
|
+
*/
|
|
232
|
+
export function editPathClass(paths: readonly string[], root?: string): EditPathClass {
|
|
233
|
+
if (paths.length === 0) return 'unknown';
|
|
234
|
+
const isDocs = (p: string): boolean => {
|
|
235
|
+
if (root === undefined) return _DOCS_MD_RE.test(p);
|
|
236
|
+
const prefix = root.endsWith('/') ? root : `${root}/`;
|
|
237
|
+
if (p.startsWith('/')) return p.startsWith(prefix) && _ROOT_DOCS_MD_RE.test(p.slice(prefix.length));
|
|
238
|
+
return _ROOT_DOCS_MD_RE.test(p);
|
|
239
|
+
};
|
|
240
|
+
const docs = paths.filter(isDocs).length;
|
|
241
|
+
if (docs === paths.length) return 'docs-md';
|
|
242
|
+
return docs === 0 ? 'code' : 'mixed';
|
|
243
|
+
}
|
|
244
|
+
|
|
211
245
|
function _looksTestPath(p: string): boolean {
|
|
212
246
|
return _TEST_DIR_RE.test(p) || _TEST_FILE_RE.test(p);
|
|
213
247
|
}
|
|
@@ -254,6 +288,8 @@ export function measure(store: string, limit: number): Counts {
|
|
|
254
288
|
e2_no_test_touched: 0,
|
|
255
289
|
untested_sites: [],
|
|
256
290
|
dropped_sites: [],
|
|
291
|
+
unverified_by_path_class: { 'docs-md': 0, code: 0, mixed: 0, unknown: 0 },
|
|
292
|
+
unverified_sites: [],
|
|
257
293
|
scanner_language: 0,
|
|
258
294
|
sessions: 0,
|
|
259
295
|
};
|
|
@@ -311,6 +347,9 @@ export function measure(store: string, limit: number): Counts {
|
|
|
311
347
|
// trade taken: the closing reply the two instruments score stays
|
|
312
348
|
// identical, which is the property the rest of this script rests on.
|
|
313
349
|
let pendingTexts: string[] = [];
|
|
350
|
+
// The session's working directory as the transcript records it — the
|
|
351
|
+
// root `editPathClass` judges an absolute edited path against.
|
|
352
|
+
let sessionRoot: string | undefined;
|
|
314
353
|
// Per-SESSION, because that is the only ordinal a reader can use to find
|
|
315
354
|
// the turn again. `c.turns` is the corpus-wide running total, and
|
|
316
355
|
// labelling it "turn" in a per-session pointer sends the reader to the
|
|
@@ -329,7 +368,17 @@ export function measure(store: string, limit: number): Counts {
|
|
|
329
368
|
// 2026-09-11, holding F's finding in a file that also names a
|
|
330
369
|
// detector E — the same mislabel that reached a commit title.
|
|
331
370
|
const fFinding = detectUntestedChange(pendingReply, pendingCalls);
|
|
332
|
-
if (cFired)
|
|
371
|
+
if (cFired) {
|
|
372
|
+
c.unverified_fires += 1;
|
|
373
|
+
const cls = editPathClass(
|
|
374
|
+
pendingCalls
|
|
375
|
+
.filter((call) => _EDIT_TOOL_NAMES.has(call.name) && call.path !== undefined)
|
|
376
|
+
.map((call) => call.path as string),
|
|
377
|
+
sessionRoot,
|
|
378
|
+
);
|
|
379
|
+
c.unverified_by_path_class[cls] += 1;
|
|
380
|
+
c.unverified_sites.push({ session: sessionId, turn: sessionTurn, path_class: cls });
|
|
381
|
+
}
|
|
333
382
|
if (fFinding !== null) {
|
|
334
383
|
c.untested_fires += 1;
|
|
335
384
|
if (!cFired) c.untested_c_silent += 1;
|
|
@@ -370,6 +419,7 @@ export function measure(store: string, limit: number): Counts {
|
|
|
370
419
|
} catch {
|
|
371
420
|
continue;
|
|
372
421
|
}
|
|
422
|
+
if (sessionRoot === undefined && typeof entry['cwd'] === 'string' && entry['cwd'] !== '') sessionRoot = entry['cwd'];
|
|
373
423
|
|
|
374
424
|
const u = _userTurnText(entry);
|
|
375
425
|
if (u !== null) {
|
|
@@ -446,6 +496,14 @@ export function renderFires(c: Counts): string {
|
|
|
446
496
|
.join('\n');
|
|
447
497
|
}
|
|
448
498
|
|
|
499
|
+
/** C's fires with their edited-path class, for the 4.2 table. */
|
|
500
|
+
export function renderUnverifiedFires(c: Counts): string {
|
|
501
|
+
if (c.unverified_sites.length === 0) return ' detector C fired on no turn in this corpus.';
|
|
502
|
+
return c.unverified_sites
|
|
503
|
+
.map((site) => ` ${site.session} turn ${String(site.turn)} — ${site.path_class}`)
|
|
504
|
+
.join('\n');
|
|
505
|
+
}
|
|
506
|
+
|
|
449
507
|
/**
|
|
450
508
|
* E's fires, as a separate function rather than a widened `renderFires`: the
|
|
451
509
|
* two lists answer different questions and a caller printing one must not
|
|
@@ -466,6 +524,7 @@ export function render(c: Counts): string {
|
|
|
466
524
|
` detector A (promissory) fires on ${c.promissory_fires} turns (${pct(c.promissory_fires)}%)`,
|
|
467
525
|
` detector B (language) fires on ${c.language_fires} turns (${pct(c.language_fires)}%)`,
|
|
468
526
|
` detector C (unverified) fires on ${c.unverified_fires} turns (${pct(c.unverified_fires)}%)`,
|
|
527
|
+
...EDIT_PATH_CLASSES.map((k) => ` by edited path: ${k.padEnd(10)}${String(c.unverified_by_path_class[k])}`),
|
|
469
528
|
` detector E (dropped) fires on ${c.dropped_fires} turns (${pct(c.dropped_fires)}%)`,
|
|
470
529
|
` detector F (untested) fires on ${c.untested_fires} turns (${pct(c.untested_fires)}%)`,
|
|
471
530
|
'',
|
|
@@ -729,6 +788,7 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
729
788
|
if (showFires) {
|
|
730
789
|
process.stdout.write(`\n detector F fired here — read these turns before\n calling any of them a false positive:\n${renderFires(counts)}\n`);
|
|
731
790
|
process.stdout.write(`\n detector E fired here — same reading, same reason:\n${renderDroppedFires(counts)}\n`);
|
|
791
|
+
process.stdout.write(`\n detector C fired here, with the edited-path class:\n${renderUnverifiedFires(counts)}\n`);
|
|
732
792
|
}
|
|
733
793
|
return 0;
|
|
734
794
|
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Write and check the merge clearance a `needs-council` pull request needs.
|
|
4
|
+
*
|
|
5
|
+
* merge_clearance write --pr N --head SHA --base SHA
|
|
6
|
+
* --classification FILE --session FILE --prompt FILE
|
|
7
|
+
* merge_clearance --check N [--head SHA]
|
|
8
|
+
*
|
|
9
|
+
* `write` reads the seats from the council's saved session record and the
|
|
10
|
+
* verdict from the danger gate's output; it takes no verdict from the command
|
|
11
|
+
* line. It refuses a classification other than `needs-council` — `routine`
|
|
12
|
+
* needs no clearance and `needs-owner` is never sent for one — and a session
|
|
13
|
+
* whose `artefact` is not the prompt file given, so the prompt digest names
|
|
14
|
+
* what the seats were actually asked. It also refuses a prompt that does not
|
|
15
|
+
* fence the diff between the untrusted-data markers, under the notice that the
|
|
16
|
+
* content inside is data and not instructions (`checkPromptFraming`).
|
|
17
|
+
*
|
|
18
|
+
* `--check` exits 0 only when the record named for the pull request's live
|
|
19
|
+
* head exists, parses, re-derives to `cleared` under the committed quorum
|
|
20
|
+
* policy, and names that pull request and head. `--head` additionally pins the
|
|
21
|
+
* head the caller recorded; a live head that moved away from it fails.
|
|
22
|
+
*
|
|
23
|
+
* The record shape and every derivation live in `_lib/merge_clearance_record.ts`.
|
|
24
|
+
*
|
|
25
|
+
* Exit codes: 0 = written / cleared · 1 = not cleared · 2 = usage or input error.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { spawnSync } from 'node:child_process';
|
|
29
|
+
import * as fs from 'node:fs';
|
|
30
|
+
import * as path from 'node:path';
|
|
31
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
32
|
+
|
|
33
|
+
import {
|
|
34
|
+
CLEARANCE_DIR,
|
|
35
|
+
checkPromptFraming,
|
|
36
|
+
clearanceFileName,
|
|
37
|
+
deriveOutcome,
|
|
38
|
+
parseClearance,
|
|
39
|
+
readNeedsCouncilLine,
|
|
40
|
+
renderClearance,
|
|
41
|
+
seatsFromSession,
|
|
42
|
+
sha256,
|
|
43
|
+
} from './_lib/merge_clearance_record.js';
|
|
44
|
+
import { readRequiredProviders } from './_lib/ratification_artifact.js';
|
|
45
|
+
|
|
46
|
+
const POLICY_PATH = 'src/config/ratification-policy.json';
|
|
47
|
+
const SHA40_RE = /^[0-9a-f]{40}$/u;
|
|
48
|
+
|
|
49
|
+
type Out = (line: string) => void;
|
|
50
|
+
|
|
51
|
+
function argValue(argv: readonly string[], flag: string): string | null {
|
|
52
|
+
const i = argv.indexOf(flag);
|
|
53
|
+
if (i === -1) return null;
|
|
54
|
+
const v = argv[i + 1];
|
|
55
|
+
return v === undefined || v.startsWith('--') ? null : v;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function readPolicy(root: string): number | null {
|
|
59
|
+
try {
|
|
60
|
+
return readRequiredProviders(fs.readFileSync(path.join(root, POLICY_PATH), 'utf8'));
|
|
61
|
+
} catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function prNumber(raw: string | null): number | null {
|
|
67
|
+
return raw !== null && /^[1-9][0-9]*$/u.test(raw) ? Number(raw) : null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function writeClearance(argv: readonly string[], root: string, out: Out): number {
|
|
71
|
+
const pr = prNumber(argValue(argv, '--pr'));
|
|
72
|
+
const head = argValue(argv, '--head') ?? '';
|
|
73
|
+
const base = argValue(argv, '--base') ?? '';
|
|
74
|
+
const classification = argValue(argv, '--classification');
|
|
75
|
+
const sessionPath = argValue(argv, '--session');
|
|
76
|
+
const promptPath = argValue(argv, '--prompt');
|
|
77
|
+
if (pr === null || !SHA40_RE.test(head) || !SHA40_RE.test(base) || !classification || !sessionPath || !promptPath) {
|
|
78
|
+
out('merge_clearance: write needs --pr N, full --head and --base, --classification, --session and --prompt');
|
|
79
|
+
return 2;
|
|
80
|
+
}
|
|
81
|
+
const required = readPolicy(root);
|
|
82
|
+
if (required === null) {
|
|
83
|
+
out(`merge_clearance: ${POLICY_PATH} is missing or unreadable — refusing to derive an outcome`);
|
|
84
|
+
return 2;
|
|
85
|
+
}
|
|
86
|
+
let lastLine: string;
|
|
87
|
+
let session: unknown;
|
|
88
|
+
let prompt: string;
|
|
89
|
+
try {
|
|
90
|
+
const lines = fs.readFileSync(classification, 'utf8').trimEnd().split('\n');
|
|
91
|
+
lastLine = lines[lines.length - 1] ?? '';
|
|
92
|
+
session = JSON.parse(fs.readFileSync(sessionPath, 'utf8')) as unknown;
|
|
93
|
+
prompt = fs.readFileSync(promptPath, 'utf8');
|
|
94
|
+
} catch (exc) {
|
|
95
|
+
out(`merge_clearance: cannot read an input — ${String(exc)}`);
|
|
96
|
+
return 2;
|
|
97
|
+
}
|
|
98
|
+
const triggers = readNeedsCouncilLine(lastLine);
|
|
99
|
+
if (triggers === null) {
|
|
100
|
+
out(`merge_clearance: the classification's last line is not \`verdict: needs-council (…)\`: ${lastLine}`);
|
|
101
|
+
return 2;
|
|
102
|
+
}
|
|
103
|
+
const framing = checkPromptFraming(prompt);
|
|
104
|
+
if (framing !== null) {
|
|
105
|
+
out(`merge_clearance: the prompt does not fence the diff as untrusted data — ${framing}`);
|
|
106
|
+
return 2;
|
|
107
|
+
}
|
|
108
|
+
const artefact = (session as { artefact?: unknown } | null)?.artefact;
|
|
109
|
+
if (typeof artefact !== 'string' || path.resolve(root, artefact) !== path.resolve(root, promptPath)) {
|
|
110
|
+
out(`merge_clearance: the session's artefact (${String(artefact)}) is not the prompt file ${promptPath}`);
|
|
111
|
+
return 2;
|
|
112
|
+
}
|
|
113
|
+
const seats = seatsFromSession(session);
|
|
114
|
+
if (typeof seats === 'string') {
|
|
115
|
+
out(`merge_clearance: ${seats}`);
|
|
116
|
+
return 2;
|
|
117
|
+
}
|
|
118
|
+
const outcome = deriveOutcome(seats, required);
|
|
119
|
+
const body = renderClearance({
|
|
120
|
+
pr,
|
|
121
|
+
head,
|
|
122
|
+
base,
|
|
123
|
+
classifierVerdict: 'needs-council',
|
|
124
|
+
triggers,
|
|
125
|
+
promptSha256: sha256(prompt),
|
|
126
|
+
seats,
|
|
127
|
+
outcome,
|
|
128
|
+
});
|
|
129
|
+
const rel = path.posix.join(CLEARANCE_DIR, clearanceFileName(pr, head));
|
|
130
|
+
fs.mkdirSync(path.join(root, CLEARANCE_DIR), { recursive: true });
|
|
131
|
+
fs.writeFileSync(path.join(root, rel), body, 'utf8');
|
|
132
|
+
out(`merge_clearance: wrote ${rel}`);
|
|
133
|
+
out(`outcome: ${outcome}`);
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** The pull request's live head, from the forge. `null` on any failure. */
|
|
138
|
+
export function liveHeadFromForge(pr: number): string | null {
|
|
139
|
+
const r = spawnSync('gh', ['pr', 'view', String(pr), '--json', 'headRefOid', '--jq', '.headRefOid'], {
|
|
140
|
+
encoding: 'utf8',
|
|
141
|
+
});
|
|
142
|
+
const v = r.status === 0 && typeof r.stdout === 'string' ? r.stdout.trim() : '';
|
|
143
|
+
return SHA40_RE.test(v) ? v : null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function checkClearance(
|
|
147
|
+
opts: { pr: number; liveHead: string | null; pinnedHead: string | null; root: string },
|
|
148
|
+
out: Out,
|
|
149
|
+
): number {
|
|
150
|
+
const { pr, liveHead, pinnedHead, root } = opts;
|
|
151
|
+
if (liveHead === null) {
|
|
152
|
+
out(`merge_clearance: not cleared — the live head of #${String(pr)} could not be read`);
|
|
153
|
+
return 1;
|
|
154
|
+
}
|
|
155
|
+
if (pinnedHead !== null && pinnedHead !== liveHead) {
|
|
156
|
+
out(`merge_clearance: not cleared — the live head ${liveHead} is not the recorded head ${pinnedHead}`);
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
const required = readPolicy(root);
|
|
160
|
+
if (required === null) {
|
|
161
|
+
out(`merge_clearance: not cleared — ${POLICY_PATH} is missing or unreadable`);
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
const rel = path.posix.join(CLEARANCE_DIR, clearanceFileName(pr, liveHead));
|
|
165
|
+
let text: string;
|
|
166
|
+
try {
|
|
167
|
+
text = fs.readFileSync(path.join(root, rel), 'utf8');
|
|
168
|
+
} catch {
|
|
169
|
+
out(`merge_clearance: not cleared — no record ${rel} for the live head`);
|
|
170
|
+
return 1;
|
|
171
|
+
}
|
|
172
|
+
const parsed = parseClearance(text, required);
|
|
173
|
+
if (Array.isArray(parsed)) {
|
|
174
|
+
out(`merge_clearance: not cleared — ${rel} does not parse:`);
|
|
175
|
+
for (const p of parsed) out(` ${p}`);
|
|
176
|
+
return 1;
|
|
177
|
+
}
|
|
178
|
+
if (parsed.pr !== pr || parsed.head !== liveHead) {
|
|
179
|
+
out(`merge_clearance: not cleared — ${rel} names #${String(parsed.pr)} at ${parsed.head}`);
|
|
180
|
+
return 1;
|
|
181
|
+
}
|
|
182
|
+
if (parsed.outcome !== 'cleared') {
|
|
183
|
+
out(`merge_clearance: not cleared — ${rel} records \`${parsed.outcome}\``);
|
|
184
|
+
return 1;
|
|
185
|
+
}
|
|
186
|
+
out(`merge_clearance: cleared — #${String(pr)} at ${liveHead}`);
|
|
187
|
+
return 0;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export function main(argv: readonly string[] = process.argv.slice(2), out: Out = (l) => process.stdout.write(`${l}\n`)): number {
|
|
191
|
+
const root = process.cwd();
|
|
192
|
+
if (argv[0] === 'write') {
|
|
193
|
+
return writeClearance(argv.slice(1), root, out);
|
|
194
|
+
}
|
|
195
|
+
if (argv.includes('--check')) {
|
|
196
|
+
const pr = prNumber(argValue(argv, '--check'));
|
|
197
|
+
if (pr === null) {
|
|
198
|
+
out('merge_clearance: --check needs a pull request number');
|
|
199
|
+
return 2;
|
|
200
|
+
}
|
|
201
|
+
const pinned = argValue(argv, '--head');
|
|
202
|
+
if (pinned !== null && !SHA40_RE.test(pinned)) {
|
|
203
|
+
out('merge_clearance: --head must be a full 40-hex revision');
|
|
204
|
+
return 2;
|
|
205
|
+
}
|
|
206
|
+
return checkClearance({ pr, liveHead: liveHeadFromForge(pr), pinnedHead: pinned, root }, out);
|
|
207
|
+
}
|
|
208
|
+
out('usage: merge_clearance write --pr N --head SHA --base SHA --classification F --session F --prompt F');
|
|
209
|
+
out(' merge_clearance --check N [--head SHA]');
|
|
210
|
+
return 2;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function isCliEntry(): boolean {
|
|
214
|
+
if (process.argv[1] === undefined) return false;
|
|
215
|
+
if (import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) return true;
|
|
216
|
+
try {
|
|
217
|
+
return fs.realpathSync(fileURLToPath(import.meta.url)) === fs.realpathSync(path.resolve(process.argv[1]));
|
|
218
|
+
} catch {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (isCliEntry()) {
|
|
224
|
+
process.exit(main());
|
|
225
|
+
}
|
|
@@ -73,7 +73,7 @@ export const ELIGIBLE: Record<string, [string, string]> = {
|
|
|
73
73
|
'audit my agent docs, check the state of the agents/ directory',
|
|
74
74
|
'stale files under agents/ or recent edits to .augment/ without doc updates',
|
|
75
75
|
],
|
|
76
|
-
'analyze-
|
|
76
|
+
'analyze-reference': [
|
|
77
77
|
"look at how X does this, compare with that other repo, study this competitor's approach",
|
|
78
78
|
'external repo URL or path mentioned in the prompt',
|
|
79
79
|
],
|