@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
|
@@ -28,6 +28,15 @@ import type { EvidenceBasis } from './evidence_basis.js';
|
|
|
28
28
|
import type { NoFreeForm } from './runtime_journal.js';
|
|
29
29
|
import { type PrivacyClass } from './privacy_class.js';
|
|
30
30
|
import type { PhaseOutcome } from './outcome_vocabularies.js';
|
|
31
|
+
import {
|
|
32
|
+
HAND_KINDS,
|
|
33
|
+
isUnpaid,
|
|
34
|
+
ROUTE_BILLINGS,
|
|
35
|
+
VERIFY_VERDICTS,
|
|
36
|
+
type HandKind,
|
|
37
|
+
type RouteBilling,
|
|
38
|
+
type VerifyVerdict,
|
|
39
|
+
} from './hand_kinds.js';
|
|
31
40
|
|
|
32
41
|
export type DispatchOutcome = 'DONE' | 'DONE_WITH_CONCERNS' | 'NEEDS_CONTEXT' | 'BLOCKED' | 'killed';
|
|
33
42
|
/** Which route the rung took: deterministic primitive (lean-init L0),
|
|
@@ -168,6 +177,8 @@ export interface RecordInput {
|
|
|
168
177
|
first_pass_success?: boolean | undefined;
|
|
169
178
|
/** QUALITY: slice retried on a higher tier after a verification failure. Optional boolean (null = not measured). */
|
|
170
179
|
escalated?: boolean | undefined;
|
|
180
|
+
/** The tier of the failed attempt when this dispatch re-ran a slice one tier up. */
|
|
181
|
+
escalated_from?: TierChosen | null | undefined;
|
|
171
182
|
/** U5 (reliability-measurement): the subagent-type combination this dispatch
|
|
172
183
|
* ran (ordered agent-type ids, e.g. ['implementer','implementer','judge']) —
|
|
173
184
|
* with `outcome`, lets the orchestrator prefer combos that worked. Ids only. */
|
|
@@ -233,6 +244,16 @@ export interface RecordInput {
|
|
|
233
244
|
// same built-and-unreachable class the rest of this change detects, so it
|
|
234
245
|
// goes rather than waiting behind a label. Re-adding them is one commit
|
|
235
246
|
// once an observation source exists.
|
|
247
|
+
/** The typed kind a rung-0.5 hand was asked to do; null for an untyped ask or a spawn. */
|
|
248
|
+
hand_kind?: HandKind | null | undefined;
|
|
249
|
+
/** Whether the hand's return matched its kind's schema; a mismatch is a failed call. */
|
|
250
|
+
schema_valid?: boolean | undefined;
|
|
251
|
+
/** How the route that served this call is paid for. */
|
|
252
|
+
route_billing?: RouteBilling | null | undefined;
|
|
253
|
+
/** The head's verdict on the hand's return; required on an unpaid route's line. */
|
|
254
|
+
verified?: VerifyVerdict | null | undefined;
|
|
255
|
+
/** Tokens the head itself spent verifying the return — what limit relief is measured net of. */
|
|
256
|
+
verify_tokens?: number | null | undefined;
|
|
236
257
|
// Audit-log envelope (sensible defaults for a dispatch record)
|
|
237
258
|
phase?: LinePhase | undefined;
|
|
238
259
|
outcome?: LineOutcome | undefined;
|
|
@@ -428,9 +449,14 @@ function modelDivergent(
|
|
|
428
449
|
): boolean | null {
|
|
429
450
|
if (typeof requested !== 'string' || typeof served !== 'string') return null;
|
|
430
451
|
if (!requested || !served) return null;
|
|
452
|
+
// A dispatch argument names a family alias (`haiku`), the host serves a
|
|
453
|
+
// full id of it; any other requested spelling is compared exactly.
|
|
454
|
+
if (MODEL_FAMILY_ALIASES.includes(requested)) return !served.toLowerCase().includes(requested);
|
|
431
455
|
return requested !== served;
|
|
432
456
|
}
|
|
433
457
|
|
|
458
|
+
const MODEL_FAMILY_ALIASES: readonly string[] = ['haiku', 'sonnet', 'opus', 'fable'];
|
|
459
|
+
|
|
434
460
|
/**
|
|
435
461
|
* Build + validate the audit-log-v1 line. Returns `{line, errors}`; when
|
|
436
462
|
* `errors` is non-empty, `line` is null and the caller must NOT write.
|
|
@@ -471,6 +497,9 @@ export function buildOrchestrationLine(input: RecordInput): BuiltLine {
|
|
|
471
497
|
if (input.tier_chosen != null && !TIERS_CHOSEN.includes(input.tier_chosen)) {
|
|
472
498
|
errors.push(`tier_chosen must be one of ${TIERS_CHOSEN.join(' | ')} (or omitted)`);
|
|
473
499
|
}
|
|
500
|
+
if (input.tier_chosen != null && (typeof input.model_requested !== 'string' || !input.model_requested)) {
|
|
501
|
+
errors.push('tier_chosen needs model_requested: a tier the dispatch did not carry is not checkable');
|
|
502
|
+
}
|
|
474
503
|
if (input.tier_source != null && !TIER_SOURCES.includes(input.tier_source)) {
|
|
475
504
|
errors.push(`tier_source must be one of ${TIER_SOURCES.join(' | ')} (or omitted)`);
|
|
476
505
|
}
|
|
@@ -485,6 +514,9 @@ export function buildOrchestrationLine(input: RecordInput): BuiltLine {
|
|
|
485
514
|
if (input.first_pass_success !== undefined && typeof input.first_pass_success !== 'boolean') {
|
|
486
515
|
errors.push('first_pass_success must be a boolean (true = return adopted without parent rework) or omitted');
|
|
487
516
|
}
|
|
517
|
+
if (input.escalated_from != null && !TIERS_CHOSEN.includes(input.escalated_from)) {
|
|
518
|
+
errors.push(`escalated_from must be one of ${TIERS_CHOSEN.join(' | ')} (or omitted)`);
|
|
519
|
+
}
|
|
488
520
|
if (input.escalated !== undefined && typeof input.escalated !== 'boolean') {
|
|
489
521
|
errors.push('escalated must be a boolean (true = retried on a higher tier after verification failure) or omitted');
|
|
490
522
|
}
|
|
@@ -547,6 +579,25 @@ export function buildOrchestrationLine(input: RecordInput): BuiltLine {
|
|
|
547
579
|
errors.push('rules_used cannot exceed rules_carried (a worker cannot apply a rule it was not given)');
|
|
548
580
|
}
|
|
549
581
|
|
|
582
|
+
if (input.hand_kind != null && !HAND_KINDS.includes(input.hand_kind)) {
|
|
583
|
+
errors.push(`hand_kind must be one of ${HAND_KINDS.join(' | ')} (or omitted)`);
|
|
584
|
+
}
|
|
585
|
+
if (input.schema_valid !== undefined && typeof input.schema_valid !== 'boolean') {
|
|
586
|
+
errors.push('schema_valid must be a boolean or omitted');
|
|
587
|
+
}
|
|
588
|
+
if (input.route_billing != null && !ROUTE_BILLINGS.includes(input.route_billing)) {
|
|
589
|
+
errors.push(`route_billing must be one of ${ROUTE_BILLINGS.join(' | ')} (or omitted)`);
|
|
590
|
+
}
|
|
591
|
+
if (input.verified != null && !VERIFY_VERDICTS.includes(input.verified)) {
|
|
592
|
+
errors.push(`verified must be one of ${VERIFY_VERDICTS.join(' | ')} (or omitted)`);
|
|
593
|
+
}
|
|
594
|
+
if (input.route_billing != null && ROUTE_BILLINGS.includes(input.route_billing) && isUnpaid(input.route_billing) && input.verified == null) {
|
|
595
|
+
errors.push('verified is required on an unpaid route: every hand return is verified by the head, or recorded as skipped');
|
|
596
|
+
}
|
|
597
|
+
if (input.verify_tokens != null && (!isInt(input.verify_tokens) || input.verify_tokens < 0)) {
|
|
598
|
+
errors.push('verify_tokens must be a non-negative integer count');
|
|
599
|
+
}
|
|
600
|
+
|
|
550
601
|
if (input.capsule_emitted !== undefined && typeof input.capsule_emitted !== 'boolean') {
|
|
551
602
|
errors.push('capsule_emitted must be a boolean or omitted');
|
|
552
603
|
}
|
|
@@ -593,6 +644,7 @@ export function buildOrchestrationLine(input: RecordInput): BuiltLine {
|
|
|
593
644
|
model_divergent: modelDivergent(input.model_requested, input.model_served),
|
|
594
645
|
first_pass_success: input.first_pass_success ?? null,
|
|
595
646
|
escalated: input.escalated ?? null,
|
|
647
|
+
escalated_from: input.escalated_from ?? null,
|
|
596
648
|
agent_combo: input.agent_combo ?? [],
|
|
597
649
|
// lean-init additive fields — readers ignore unknowns per audit-log-v1
|
|
598
650
|
init_tokens: input.init_tokens ?? null,
|
|
@@ -613,6 +665,15 @@ export function buildOrchestrationLine(input: RecordInput): BuiltLine {
|
|
|
613
665
|
// capsule shadow-measurement — readers ignore unknowns per audit-log-v1
|
|
614
666
|
capsule_emitted: input.capsule_emitted ?? null,
|
|
615
667
|
capsule_entries: input.capsule_entries ?? null,
|
|
668
|
+
hand_kind: input.hand_kind ?? null,
|
|
669
|
+
schema_valid: input.schema_valid ?? null,
|
|
670
|
+
route_billing: input.route_billing ?? null,
|
|
671
|
+
verified: input.verified ?? null,
|
|
672
|
+
verify_tokens: input.verify_tokens ?? null,
|
|
673
|
+
// Derived: an unpaid return nobody verified is read as an escalation,
|
|
674
|
+
// so skipping the check can never look cheaper than doing it.
|
|
675
|
+
counts_as_escalation:
|
|
676
|
+
input.route_billing == null ? null : isUnpaid(input.route_billing) && input.verified === 'skipped',
|
|
616
677
|
};
|
|
617
678
|
|
|
618
679
|
const line: Record<string, unknown> = {
|
|
@@ -33,13 +33,14 @@
|
|
|
33
33
|
* `partial`. So: separate vocabularies, one registry, mappings only where
|
|
34
34
|
* execution actually crosses.
|
|
35
35
|
*
|
|
36
|
-
* **Mappings are not written for symmetry.**
|
|
37
|
-
*
|
|
38
|
-
* `orchestration_record.ts
|
|
39
|
-
* `continuation_ladder.ts
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
36
|
+
* **Mappings are not written for symmetry.** One crossing exists, a place where
|
|
37
|
+
* execution actually translates: `DispatchOutcome` -> phase in
|
|
38
|
+
* `orchestration_record.ts`. A second, `LadderAction` -> run in
|
|
39
|
+
* `continuation_ladder.ts`, was added 2026-09-03 with the seventh run state and
|
|
40
|
+
* removed 2026-10-14 by owner decision together with that module, whose only
|
|
41
|
+
* caller had been withdrawn on its own kill date. A total phase<->step<->run
|
|
42
|
+
* mapping would be nine relations of which one is real, and the eight invented
|
|
43
|
+
* ones would read as contract.
|
|
43
44
|
*
|
|
44
45
|
* `revisit-if`: a producer needs a value its vocabulary cannot express, or a
|
|
45
46
|
* second real crossing appears, or producer analysis shows two of the three
|
|
@@ -56,9 +57,14 @@
|
|
|
56
57
|
* ({@link readRunTerminalState}), a declared downgrade
|
|
57
58
|
* ({@link RUN_TERMINAL_STATE_DOWNGRADE}) and the rollback trigger below.
|
|
58
59
|
*
|
|
60
|
+
* **Its producer is gone.** The ladder rung that emitted `premise-invalidated`
|
|
61
|
+
* left the tree on 2026-10-14, so no code writes the value today; it stays in
|
|
62
|
+
* the vocabulary because documents and persisted records may still carry it, and
|
|
63
|
+
* the tolerant read below is what keeps an old record readable.
|
|
64
|
+
*
|
|
59
65
|
* **Rollback trigger, stated rather than instrumented.** Withdraw
|
|
60
|
-
* `premise-invalidated` — remove it from {@link RUN_TERMINAL_STATES} and let
|
|
61
|
-
*
|
|
66
|
+
* `premise-invalidated` — remove it from {@link RUN_TERMINAL_STATES} and let a
|
|
67
|
+
* reader apply its declared downgrade `blocked` instead — on EITHER of:
|
|
62
68
|
* (1) any consumer is observed failing (a throw, a refused write, a dropped
|
|
63
69
|
* record) on encountering the value, or (2) `readRunTerminalState` returns
|
|
64
70
|
* `null` for a persisted value in normal operation, which would mean a writer
|
|
@@ -228,20 +234,6 @@ export const CROSS_DOMAIN_MAPPINGS = [
|
|
|
228
234
|
*/
|
|
229
235
|
semantics_version: 2,
|
|
230
236
|
},
|
|
231
|
-
{
|
|
232
|
-
source: 'LadderAction',
|
|
233
|
-
target: 'run',
|
|
234
|
-
at: 'src/scripts/_lib/continuation_ladder.ts',
|
|
235
|
-
fn: 'terminalStateFor',
|
|
236
|
-
/**
|
|
237
|
-
* Version 1, and the mapping is TOTAL over `LadderAction` by
|
|
238
|
-
* construction: `TERMINAL_STATE_BY_ACTION` is a `Record<LadderAction,
|
|
239
|
-
* RunTerminalState | null>`, so adding a rung without deciding its
|
|
240
|
-
* terminal state does not compile. `engage` maps to null because it is
|
|
241
|
-
* the one action that is not terminal.
|
|
242
|
-
*/
|
|
243
|
-
semantics_version: 1,
|
|
244
|
-
},
|
|
245
237
|
] as const;
|
|
246
238
|
|
|
247
239
|
/** Is this string a phase outcome? The guard the audit-log consumer was missing. */
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What lies between a project's `agent_config_version` pin and the latest
|
|
3
|
+
* release, read from the latest release's impact map. It proposes; moving the
|
|
4
|
+
* pin stays a team decision taken with `agent-config update`.
|
|
5
|
+
*
|
|
6
|
+
* Pure: the caller reads the pin and fetches the map. The map is registry input
|
|
7
|
+
* and untrusted, so an entry that does not parse is reported, never trusted.
|
|
8
|
+
*/
|
|
9
|
+
import { CONSUMER_IMPACT_VALUES } from './consumer_impact';
|
|
10
|
+
import { compare_versions, parse_version } from './version_order';
|
|
11
|
+
|
|
12
|
+
/** `impactMap` is `undefined` when it could not be fetched and `null` when the release carries none. */
|
|
13
|
+
export function pin_advice_lines(pin: string, latest: string, impactMap: unknown, label: 'latest' | 'target' = 'latest'): string[] {
|
|
14
|
+
const order = compare_versions(latest, pin);
|
|
15
|
+
// An unparsable pin or candidate is said, not read as "nothing newer".
|
|
16
|
+
if (order === null) return [`Pinned at ${pin}; ${label} ${latest} — one of the two is not a version this check can read.`];
|
|
17
|
+
if (order !== 1) return [];
|
|
18
|
+
const head = `Pinned at ${pin}; ${label} is ${latest}.`;
|
|
19
|
+
const tail = 'Moving the pin is a team decision: `agent-config update` rewrites it, this check never does.';
|
|
20
|
+
if (impactMap === undefined) {
|
|
21
|
+
return [head, ` The releases in between cannot be read: the impact map of ${latest} could not be fetched.`, tail];
|
|
22
|
+
}
|
|
23
|
+
if (impactMap === null || typeof impactMap !== 'object' || Array.isArray(impactMap)) {
|
|
24
|
+
return [head, ` The releases in between cannot be read: ${latest} carries no impact map.`, tail];
|
|
25
|
+
}
|
|
26
|
+
const rows: Array<[string, string]> = [];
|
|
27
|
+
for (const [version, entry] of Object.entries(impactMap as Record<string, unknown>)) {
|
|
28
|
+
if (parse_version(version) === null) return [head, ` The impact map is not trustworthy: key '${version}' is not a version.`, tail];
|
|
29
|
+
if (compare_versions(version, pin) !== 1 || compare_versions(version, latest) === 1) continue;
|
|
30
|
+
const impact = (entry as Record<string, unknown> | null)?.['impact'];
|
|
31
|
+
if (!(CONSUMER_IMPACT_VALUES as readonly unknown[]).includes(impact)) {
|
|
32
|
+
return [head, ` The impact map is not trustworthy: ${version} has impact '${String(impact)}'.`, tail];
|
|
33
|
+
}
|
|
34
|
+
const security = (entry as Record<string, unknown>)['security'] === true ? ', security fix' : '';
|
|
35
|
+
rows.push([version, `${String(impact)}${security}`]);
|
|
36
|
+
}
|
|
37
|
+
rows.sort((a, b) => compare_versions(a[0], b[0]) ?? 0);
|
|
38
|
+
const body = rows.length === 0
|
|
39
|
+
? [' No release in between records a consumer impact.']
|
|
40
|
+
: rows.map(([v, what]) => ` ${v} ${what}`);
|
|
41
|
+
const keys = Object.keys(impactMap as Record<string, unknown>).sort((a, b) => compare_versions(a, b) ?? 0);
|
|
42
|
+
const first = keys[0];
|
|
43
|
+
const uncovered = first === undefined
|
|
44
|
+
? [' The impact map is empty; the releases in between are not described.']
|
|
45
|
+
: compare_versions(pin, first) === -1
|
|
46
|
+
? [` The impact map's first entry is ${first}; releases between ${pin} and it may predate the map.`]
|
|
47
|
+
: [];
|
|
48
|
+
return [head, ...body, ...uncovered, tail];
|
|
49
|
+
}
|
|
@@ -1051,3 +1051,225 @@ export function evaluateAnchor(
|
|
|
1051
1051
|
evidence,
|
|
1052
1052
|
};
|
|
1053
1053
|
}
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
* Where the record of a bypass of the ratification gate lives — the owner's
|
|
1057
|
+
* route of `docs/contracts/ratification-artifact.md` § Emergency use.
|
|
1058
|
+
*/
|
|
1059
|
+
export const BYPASS_RECORD_DIR = 'agents/evidence/bypass-records';
|
|
1060
|
+
|
|
1061
|
+
/** The marker every bypass record carries below its frontmatter. */
|
|
1062
|
+
export const BYPASS_RECORD_MARKER = '<!-- evidence-type: bypass-record -->';
|
|
1063
|
+
|
|
1064
|
+
/** A review of a restored bypass is overdue this long after `restored_at`. */
|
|
1065
|
+
export const BYPASS_REVIEW_DAYS = 7;
|
|
1066
|
+
|
|
1067
|
+
/**
|
|
1068
|
+
* `restore_by` may lie at most this long after the bypass. Without a ceiling a
|
|
1069
|
+
* record could set it years ahead and stay open, quietly, for good.
|
|
1070
|
+
*/
|
|
1071
|
+
export const BYPASS_MAX_OPEN_DAYS = 7;
|
|
1072
|
+
|
|
1073
|
+
/** More records than this, or a record larger than this, is read as unreadable. */
|
|
1074
|
+
export const BYPASS_RECORD_LIMIT = 200;
|
|
1075
|
+
export const BYPASS_RECORD_MAX_BYTES = 64 * 1024;
|
|
1076
|
+
|
|
1077
|
+
const DAY_MS = 86_400_000;
|
|
1078
|
+
|
|
1079
|
+
/**
|
|
1080
|
+
* A value or a path as it may appear inside a one-line finding: no control,
|
|
1081
|
+
* format, line- or paragraph-separator character, and bounded, so a record's
|
|
1082
|
+
* content or name cannot forge a second line of output.
|
|
1083
|
+
*/
|
|
1084
|
+
export function printable(value: string): string {
|
|
1085
|
+
const flat = value.replace(/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/gu, ' ');
|
|
1086
|
+
return flat.length > 200 ? `${flat.slice(0, 197)}...` : flat;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
const shown = printable;
|
|
1090
|
+
|
|
1091
|
+
/** The nine fields every bypass record carries; `restored_at` and `council_review` may read `pending`. */
|
|
1092
|
+
export const BYPASS_RECORD_FIELDS = [
|
|
1093
|
+
'reason',
|
|
1094
|
+
'subject',
|
|
1095
|
+
'time',
|
|
1096
|
+
'commit',
|
|
1097
|
+
'ruleset_version_before',
|
|
1098
|
+
'ruleset_version_after',
|
|
1099
|
+
'restore_by',
|
|
1100
|
+
'restored_at',
|
|
1101
|
+
'council_review',
|
|
1102
|
+
] as const;
|
|
1103
|
+
|
|
1104
|
+
export type BypassFindingCode =
|
|
1105
|
+
| 'bypass-record-malformed'
|
|
1106
|
+
| 'bypass-record-unreadable'
|
|
1107
|
+
| 'bypass-record-removed'
|
|
1108
|
+
| 'bypass-not-restored'
|
|
1109
|
+
| 'bypass-unreviewed';
|
|
1110
|
+
|
|
1111
|
+
export interface BypassFinding {
|
|
1112
|
+
code: BypassFindingCode;
|
|
1113
|
+
path: string;
|
|
1114
|
+
message: string;
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
/** One record as the caller found it: its text, or `null` when it could not be read. */
|
|
1118
|
+
export interface BypassRecordInput {
|
|
1119
|
+
path: string;
|
|
1120
|
+
text: string | null;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
const INSTANT_RE = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d+)?)?(Z|[+-]\d{2}:\d{2})$/u;
|
|
1124
|
+
|
|
1125
|
+
/**
|
|
1126
|
+
* An ISO-8601 instant with a timezone, as epoch milliseconds — or `null` when
|
|
1127
|
+
* the text is not one or names a date the calendar does not have. `Date.parse`
|
|
1128
|
+
* alone would roll February 30 into March, so the components are read back.
|
|
1129
|
+
*/
|
|
1130
|
+
export function bypassInstant(value: string | undefined): number | null {
|
|
1131
|
+
const m = value === undefined ? null : INSTANT_RE.exec(value);
|
|
1132
|
+
if (m === null) {
|
|
1133
|
+
return null;
|
|
1134
|
+
}
|
|
1135
|
+
const ms = Date.parse(value as string);
|
|
1136
|
+
if (Number.isNaN(ms)) {
|
|
1137
|
+
return null;
|
|
1138
|
+
}
|
|
1139
|
+
const zone = m[7] as string;
|
|
1140
|
+
const offset = zone === 'Z' ? 0 : (zone.startsWith('-') ? -1 : 1) * (Number(zone.slice(1, 3)) * 60 + Number(zone.slice(4, 6)));
|
|
1141
|
+
const local = new Date(ms + offset * 60_000);
|
|
1142
|
+
const same =
|
|
1143
|
+
local.getUTCFullYear() === Number(m[1]) &&
|
|
1144
|
+
local.getUTCMonth() + 1 === Number(m[2]) &&
|
|
1145
|
+
local.getUTCDate() === Number(m[3]) &&
|
|
1146
|
+
local.getUTCHours() === Number(m[4]) &&
|
|
1147
|
+
local.getUTCMinutes() === Number(m[5]);
|
|
1148
|
+
return same ? ms : null;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/** The frontmatter's `key: value` lines, or a reason the block is not one. */
|
|
1152
|
+
function bypassFields(text: string): Map<string, string> | string {
|
|
1153
|
+
if (!text.startsWith('---\n')) {
|
|
1154
|
+
return 'no frontmatter';
|
|
1155
|
+
}
|
|
1156
|
+
const end = text.indexOf('\n---\n', 4);
|
|
1157
|
+
if (end === -1) {
|
|
1158
|
+
return 'the frontmatter is not closed';
|
|
1159
|
+
}
|
|
1160
|
+
if (!text.slice(end + 5).split('\n').slice(0, 5).some((l) => l.trim() === BYPASS_RECORD_MARKER)) {
|
|
1161
|
+
return `no \`${BYPASS_RECORD_MARKER}\` marker below the frontmatter`;
|
|
1162
|
+
}
|
|
1163
|
+
const fields = new Map<string, string>();
|
|
1164
|
+
for (const line of text.slice(4, end).split('\n')) {
|
|
1165
|
+
const m = /^([a-z_]+):[ \t]*(.*)$/u.exec(line);
|
|
1166
|
+
if (m === null) {
|
|
1167
|
+
return `unreadable frontmatter line \`${printable(line)}\` — one \`key: value\` per line, nothing else`;
|
|
1168
|
+
}
|
|
1169
|
+
const key = m[1] as string;
|
|
1170
|
+
if (fields.has(key)) {
|
|
1171
|
+
return `field \`${key}\` is recorded more than once`;
|
|
1172
|
+
}
|
|
1173
|
+
fields.set(key, (m[2] as string).trim().replace(/^(["'])(.*)\1$/u, '$2'));
|
|
1174
|
+
}
|
|
1175
|
+
return fields;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
/**
|
|
1179
|
+
* The bypass records that leave the route without a closing.
|
|
1180
|
+
*
|
|
1181
|
+
* Read fail-closed: a record that cannot be read, lacks one of the nine
|
|
1182
|
+
* fields, repeats a key, carries an instant that is not a real calendar
|
|
1183
|
+
* instant with a timezone, puts `restore_by` or `restored_at` before the
|
|
1184
|
+
* bypass or `restored_at` after `now`, or names a council review that does not
|
|
1185
|
+
* exist is `bypass-record-malformed` — an unreadable record cannot show it
|
|
1186
|
+
* closed. Of the readable ones: still open at or after `restore_by` is
|
|
1187
|
+
* `bypass-not-restored`; restored with `council_review: pending`
|
|
1188
|
+
* {@link BYPASS_REVIEW_DAYS} days on is `bypass-unreviewed`.
|
|
1189
|
+
*
|
|
1190
|
+
* `reviewCovers` answers whether a `council_review` path names a committed
|
|
1191
|
+
* council review that cites the record's `subject` digest and was first
|
|
1192
|
+
* committed at or after the restore — so neither a review of some other change
|
|
1193
|
+
* nor one written before the fact can close this one. It is injected so this
|
|
1194
|
+
* module stays free of I/O.
|
|
1195
|
+
*/
|
|
1196
|
+
export function evaluateBypassRecords(
|
|
1197
|
+
records: readonly BypassRecordInput[],
|
|
1198
|
+
now: Date,
|
|
1199
|
+
reviewCovers: (rel: string, subject: string, restoredAtMs: number) => boolean = () => false,
|
|
1200
|
+
): BypassFinding[] {
|
|
1201
|
+
const findings: BypassFinding[] = [];
|
|
1202
|
+
const t = now.getTime();
|
|
1203
|
+
const malformed = (p: string, why: string): void => {
|
|
1204
|
+
findings.push({ code: 'bypass-record-malformed', path: p, message: `${p} is not a readable bypass record — ${why}` });
|
|
1205
|
+
};
|
|
1206
|
+
for (const { path: rawPath, text } of records) {
|
|
1207
|
+
const p = printable(rawPath);
|
|
1208
|
+
if (text === null) {
|
|
1209
|
+
findings.push({ code: 'bypass-record-unreadable', path: p, message: `${p} could not be read` });
|
|
1210
|
+
continue;
|
|
1211
|
+
}
|
|
1212
|
+
const f = bypassFields(text);
|
|
1213
|
+
if (typeof f === 'string') {
|
|
1214
|
+
malformed(p, f);
|
|
1215
|
+
continue;
|
|
1216
|
+
}
|
|
1217
|
+
const missing = BYPASS_RECORD_FIELDS.filter(
|
|
1218
|
+
(k) => (f.get(k) ?? '') === '' || (f.get(k) === 'pending' && k !== 'restored_at' && k !== 'council_review'),
|
|
1219
|
+
);
|
|
1220
|
+
const unknown = [...f.keys()].filter((k) => !(BYPASS_RECORD_FIELDS as readonly string[]).includes(k));
|
|
1221
|
+
if (missing.length > 0 || unknown.length > 0) {
|
|
1222
|
+
malformed(
|
|
1223
|
+
p,
|
|
1224
|
+
[missing.length > 0 ? `missing: ${missing.join(', ')}` : '', unknown.length > 0 ? `unknown: ${unknown.join(', ')}` : '']
|
|
1225
|
+
.filter((s) => s !== '')
|
|
1226
|
+
.join('; '),
|
|
1227
|
+
);
|
|
1228
|
+
continue;
|
|
1229
|
+
}
|
|
1230
|
+
const time = bypassInstant(f.get('time'));
|
|
1231
|
+
const restoreBy = bypassInstant(f.get('restore_by'));
|
|
1232
|
+
const restoredRaw = f.get('restored_at') as string;
|
|
1233
|
+
const restored = restoredRaw === 'pending' ? null : bypassInstant(restoredRaw);
|
|
1234
|
+
const review = f.get('council_review') as string;
|
|
1235
|
+
const problem = !/^[0-9a-f]{64}$/u.test(f.get('subject') ?? '')
|
|
1236
|
+
? '`subject` is not a 64-hex digest'
|
|
1237
|
+
: !/^[0-9a-f]{40}$/u.test(f.get('commit') ?? '')
|
|
1238
|
+
? '`commit` is not a full 40-hex revision'
|
|
1239
|
+
: time === null || restoreBy === null || (restored === null && restoredRaw !== 'pending')
|
|
1240
|
+
? 'an instant is not ISO-8601 with a timezone, or names a date the calendar does not have'
|
|
1241
|
+
: time > t
|
|
1242
|
+
? '`time` is in the future — a bypass not yet taken cannot be recorded'
|
|
1243
|
+
: restoreBy < time || restoreBy - time > BYPASS_MAX_OPEN_DAYS * DAY_MS
|
|
1244
|
+
? `\`restore_by\` is before the bypass or more than ${String(BYPASS_MAX_OPEN_DAYS)} days after it`
|
|
1245
|
+
: restored !== null && (restored < time || restored > t)
|
|
1246
|
+
? '`restored_at` is before the bypass or in the future'
|
|
1247
|
+
: review !== 'pending' && restored === null
|
|
1248
|
+
? '`council_review` is named while `restored_at` is pending — the review comes after the restore'
|
|
1249
|
+
: review !== 'pending' && restored !== null && !reviewCovers(review, f.get('subject') as string, restored)
|
|
1250
|
+
? `\`council_review\` names \`${shown(review)}\`, which is not a committed council review citing this record's \`subject\`, first committed at or after \`restored_at\``
|
|
1251
|
+
: null;
|
|
1252
|
+
if (problem !== null || time === null || restoreBy === null) {
|
|
1253
|
+
malformed(p, problem ?? 'unreadable instant');
|
|
1254
|
+
continue;
|
|
1255
|
+
}
|
|
1256
|
+
if (restored === null) {
|
|
1257
|
+
if (t >= restoreBy) {
|
|
1258
|
+
findings.push({
|
|
1259
|
+
code: 'bypass-not-restored',
|
|
1260
|
+
path: p,
|
|
1261
|
+
message: `${p}: the bypass is at or past \`restore_by\` ${shown(String(f.get('restore_by')))} and records no \`restored_at\``,
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
continue;
|
|
1265
|
+
}
|
|
1266
|
+
if (review === 'pending' && t >= restored + BYPASS_REVIEW_DAYS * DAY_MS) {
|
|
1267
|
+
findings.push({
|
|
1268
|
+
code: 'bypass-unreviewed',
|
|
1269
|
+
path: p,
|
|
1270
|
+
message: `${p}: restored ${restoredRaw}, and no council review is recorded ${String(BYPASS_REVIEW_DAYS)} days on`,
|
|
1271
|
+
});
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
return findings;
|
|
1275
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the PROJECT tree's rule-layer form comes from, now that no settings key
|
|
3
|
+
* carries it.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. ADR-293 removed `lean_projection.*`, and the shipped
|
|
6
|
+
* settings template was the last layer of the cascade `resolveLeanProjection`
|
|
7
|
+
* read — so the project tree on the first host got its `delivery` from a key
|
|
8
|
+
* that no longer exists. Removing the key with nothing in its place would have
|
|
9
|
+
* flipped that tree to the full form: a default change for a tree whose form
|
|
10
|
+
* ADR-267 decided ON EVIDENCE (616/616 byte-equal deliveries, 101/101 labelled
|
|
11
|
+
* rules reachable, 0 of 212 near-misses fired on the frozen routing-matrix
|
|
12
|
+
* corpus), with nothing measured against it. That is not a "no worse" move, and
|
|
13
|
+
* it would also leave Phase 5 with no live arm to compare.
|
|
14
|
+
*
|
|
15
|
+
* WHY IT IS NOT THE KEY UNDER ANOTHER NAME. `src/config/project-tree-form.json`
|
|
16
|
+
* is package-owned and ships in the repository: there is no consumer-writable
|
|
17
|
+
* layer, no cascade, and no merge. `modeExplicit` stays false for it, exactly as
|
|
18
|
+
* it did for the template, so nothing here is read as a consumer's consent. And
|
|
19
|
+
* it carries its own replacement condition rather than a value alone — a row
|
|
20
|
+
* without the measurement that justifies it is REFUSED, so the file cannot
|
|
21
|
+
* become a place to write a form someone merely wants.
|
|
22
|
+
*
|
|
23
|
+
* PRECEDENCE, WHICH IS THE WHOLE SAFETY ARGUMENT. A valid OBSERVED verdict from
|
|
24
|
+
* the layer-form decision function supersedes this record for that host, in both
|
|
25
|
+
* directions — an observed `full` wins over a record saying `delivery`. The
|
|
26
|
+
* record stands only while that function can answer nothing but
|
|
27
|
+
* `delivery-unobserved`, which is its state today for every host. Without that
|
|
28
|
+
* rule this file would be a permanent bypass of the decision function rather
|
|
29
|
+
* than a stand-in for it, which is the one risk the reviewing seat named.
|
|
30
|
+
*
|
|
31
|
+
* WHY ONE SEAT WAS ENOUGH TO BUILD ON, AND NOT ENOUGH TO CLOSE. The choice was
|
|
32
|
+
* reviewed at a degraded quorum, so step 3.6 stays open and its blocker carries
|
|
33
|
+
* the confirmation. Acting on it meanwhile is bounded by what the option does:
|
|
34
|
+
* it changes no behaviour at all — it reproduces what the shipped template
|
|
35
|
+
* produced — and every alternative did. The record lives with the roadmap.
|
|
36
|
+
*/
|
|
37
|
+
import * as fs from 'node:fs';
|
|
38
|
+
import * as path from 'node:path';
|
|
39
|
+
|
|
40
|
+
import { DEFAULT_LEAN_PROJECTION_MODE, type LeanProjectionMode } from './lean_projection_mode.js';
|
|
41
|
+
|
|
42
|
+
export const PROJECT_TREE_FORM_REL = path.join('src', 'config', 'project-tree-form.json');
|
|
43
|
+
|
|
44
|
+
/** One host's shipped form, with the evidence that justifies it. */
|
|
45
|
+
export interface ProjectTreeForm {
|
|
46
|
+
readonly form: LeanProjectionMode;
|
|
47
|
+
readonly basis: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** The shape this module needs from a decision verdict; the full type lives in `layer_form_decision.ts`. */
|
|
51
|
+
export interface FormVerdict {
|
|
52
|
+
readonly form: 'full' | 'thinned';
|
|
53
|
+
readonly reason: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const FORMS: readonly string[] = ['eager-all', 'thin', 'delivery'];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The reason that means "the function could not look", as opposed to a verdict
|
|
60
|
+
* it actually reached. Only this one yields to the shipped record.
|
|
61
|
+
*/
|
|
62
|
+
export const UNOBSERVED_REASON = 'delivery-unobserved';
|
|
63
|
+
|
|
64
|
+
function isRecord(v: unknown): v is Record<string, unknown> {
|
|
65
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Every host row the record carries. A row without a `measured` block, or with
|
|
70
|
+
* a form the projector does not have, is dropped: this file records measured
|
|
71
|
+
* forms, and a row that records neither is not evidence.
|
|
72
|
+
*/
|
|
73
|
+
export function readProjectTreeForms(packageRoot: string): Map<string, ProjectTreeForm> {
|
|
74
|
+
const out = new Map<string, ProjectTreeForm>();
|
|
75
|
+
let raw: unknown;
|
|
76
|
+
try {
|
|
77
|
+
raw = JSON.parse(fs.readFileSync(path.join(packageRoot, PROJECT_TREE_FORM_REL), 'utf8'));
|
|
78
|
+
} catch {
|
|
79
|
+
return out; // absent or unreadable: every host gets the full form
|
|
80
|
+
}
|
|
81
|
+
if (!isRecord(raw) || !isRecord(raw['hosts'])) return out;
|
|
82
|
+
for (const [host, row] of Object.entries(raw['hosts'])) {
|
|
83
|
+
if (!isRecord(row)) continue;
|
|
84
|
+
const form = row['form'];
|
|
85
|
+
if (typeof form !== 'string' || !FORMS.includes(form)) continue;
|
|
86
|
+
// At least one measured figure, each a non-empty string: `{}` records no measurement.
|
|
87
|
+
const measured = row['measured'];
|
|
88
|
+
if (!isRecord(measured)) continue;
|
|
89
|
+
const figures = Object.values(measured);
|
|
90
|
+
if (figures.length === 0 || !figures.every((v) => typeof v === 'string' && v.trim() !== '')) continue;
|
|
91
|
+
out.set(host, { form: form as LeanProjectionMode, basis: typeof row['basis'] === 'string' ? row['basis'] : 'unrecorded' });
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The form the project tree is built with for `host`.
|
|
98
|
+
*
|
|
99
|
+
* `verdict` is the layer-form decision for this host where one exists. An
|
|
100
|
+
* observed verdict — anything whose reason is not {@link UNOBSERVED_REASON} —
|
|
101
|
+
* decides, and the record is not consulted. A host with no row and no observed
|
|
102
|
+
* verdict gets the full form, which is what an absent key always meant.
|
|
103
|
+
*/
|
|
104
|
+
export function projectTreeForm(
|
|
105
|
+
packageRoot: string,
|
|
106
|
+
host: string,
|
|
107
|
+
verdict: FormVerdict | null,
|
|
108
|
+
): LeanProjectionMode {
|
|
109
|
+
if (verdict !== null && verdict.reason !== UNOBSERVED_REASON) {
|
|
110
|
+
return verdict.form === 'full' ? DEFAULT_LEAN_PROJECTION_MODE : (readProjectTreeForms(packageRoot).get(host)?.form ?? DEFAULT_LEAN_PROJECTION_MODE);
|
|
111
|
+
}
|
|
112
|
+
return readProjectTreeForms(packageRoot).get(host)?.form ?? DEFAULT_LEAN_PROJECTION_MODE;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The `{ mode, hosts }` pair the projector asks for, derived from the record.
|
|
117
|
+
*
|
|
118
|
+
* The record is per host, the projector's API is one mode plus the host list it
|
|
119
|
+
* applies to, and this is the one place the two shapes meet. `mode` is the
|
|
120
|
+
* strongest form any row carries — `delivery` over `thin` over `eager-all` —
|
|
121
|
+
* and `hosts` is every row carrying exactly that form. A tree with no record,
|
|
122
|
+
* or with rows the reader refused, gets the full form and no hosts, which is
|
|
123
|
+
* what an absent key always meant.
|
|
124
|
+
*/
|
|
125
|
+
export function shippedProjection(packageRoot: string): { mode: LeanProjectionMode; hosts: string[] } {
|
|
126
|
+
const forms = readProjectTreeForms(packageRoot);
|
|
127
|
+
const rank: Record<string, number> = { 'eager-all': 0, thin: 1, delivery: 2 };
|
|
128
|
+
let mode: LeanProjectionMode = DEFAULT_LEAN_PROJECTION_MODE;
|
|
129
|
+
for (const row of forms.values()) {
|
|
130
|
+
if ((rank[row.form] ?? 0) > (rank[mode] ?? 0)) mode = row.form;
|
|
131
|
+
}
|
|
132
|
+
const hosts = [...forms.entries()].filter(([, row]) => row.form === mode).map(([host]) => host).sort();
|
|
133
|
+
return { mode, hosts: mode === DEFAULT_LEAN_PROJECTION_MODE ? [] : hosts };
|
|
134
|
+
}
|