@event4u/agent-config 16.5.0 → 17.1.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 +114 -530
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -24
- 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 +10 -2
- 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 +44 -2
- 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-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/chunk-3PK3VZHB.js +235 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- 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-F3QDG2GT.js → chunk-BZJ4Y3CI.js} +259 -159
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CMZEKSNN.js} +4280 -705
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-E3CFULNX.js} +67 -13
- 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-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/chunk-KR5ZIFPO.js +581 -0
- 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-QBHEI5N4.js +919 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- 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-T7XSJSUQ.js → chunk-VYZGJLCA.js} +1000 -814
- package/dist/cli-delegate/chunk-W5JXMF2T.js +77 -0
- 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-6SRJTYJS.js → chunk-XIAPY44N.js} +37 -16
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-YHAPONWV.js} +54 -40
- 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 +487 -820
- 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 +15 -12
- package/dist/cli-delegate/cmd_fleet.js +6 -4
- 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 +8 -6
- package/dist/cli-delegate/cmd_prune.js +17 -14
- 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 +15 -12
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +17 -14
- package/dist/cli-delegate/cmd_uninstall.js +186 -32
- package/dist/cli-delegate/cmd_update.js +76 -16
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +17 -14
- 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 +17450 -18612
- 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/claudeRuleRewrite.js +10 -3
- package/dist/install/conflict.js +59 -7
- package/dist/install/conflictTracker.js +93 -8
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3234 -1961
- package/dist/install/installThinLayer.js +2 -1
- package/dist/install/loggedWrites.js +142 -0
- 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/paths.js +12 -2
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +96 -13
- 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/txlog.js +10 -6
- 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 +10716 -5880
- 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 +769 -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 +57 -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 +33 -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 +45 -1
- 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 +176 -10
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +32 -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/production-entries.json +18 -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/release-gate-locality.yml +0 -7
- 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/claudeRuleRewrite.ts +10 -1
- package/src/install/conflict.ts +61 -6
- package/src/install/conflictTracker.ts +143 -9
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +12 -1
- package/src/install/loggedWrites.ts +148 -0
- 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/paths.ts +11 -2
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +131 -13
- 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/txlog.ts +10 -6
- 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_conformance.ts +3 -2
- 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 +49 -18
- 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/council_settings_block.ts +9 -2
- 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 +899 -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 +44 -7
- 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 +62 -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/price_freshness.ts +112 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/production_reach.ts +194 -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 +29 -14
- 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 +36 -311
- 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 +268 -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 +20 -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 +56 -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 +288 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +310 -0
- package/src/scripts/ai_council/free_route_client.ts +99 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +338 -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 +23 -26
- 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 +114 -0
- package/src/scripts/ai_council/seat_policy.ts +47 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/self_hosted_probe.ts +327 -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 +39 -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 +406 -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 +174 -73
- 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 +8 -3
- 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_production_reach.ts +257 -0
- 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 +56 -44
- 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 +68 -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 +14 -13
- 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 +43 -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 +162 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +80 -0
- 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 +61 -92
- 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_decision_classes.ts +34 -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 +118 -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 +114 -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 +31 -64
- package/src/scripts/release_drill.ts +63 -188
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -10
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_production_reach.ts +35 -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 +519 -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-A4QJ6ENT.js +0 -50
- 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
|
@@ -71,6 +71,7 @@ import * as os from 'node:os';
|
|
|
71
71
|
import * as path from 'node:path';
|
|
72
72
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
73
73
|
|
|
74
|
+
import { assignmentPattern } from './_lib/egress_rules.js';
|
|
74
75
|
import { GateLedger } from './_lib/gate_ledger.js';
|
|
75
76
|
import { runGateCli, runSelfTest } from './_lib/gate_self_test.js';
|
|
76
77
|
import { reportScanned } from './_lib/scan_scope.js';
|
|
@@ -159,8 +160,16 @@ export const PATTERNS: readonly FencePattern[] = [
|
|
|
159
160
|
source: 'tool-safety',
|
|
160
161
|
langs: 'any',
|
|
161
162
|
label: 'Credential assigned a literal value in an example',
|
|
162
|
-
pattern:
|
|
163
|
-
|
|
163
|
+
pattern: assignmentPattern(
|
|
164
|
+
{
|
|
165
|
+
keywords: ['apiKey', 'apikey', 'password', 'passwd', 'secret', 'accessToken', 'clientSecret'],
|
|
166
|
+
before: '\\b',
|
|
167
|
+
after: '\\b',
|
|
168
|
+
capture: true,
|
|
169
|
+
value: `["'][^"']{8,}["']`,
|
|
170
|
+
},
|
|
171
|
+
'i',
|
|
172
|
+
),
|
|
164
173
|
// Placeholders are the correct way to show the shape and must not fire.
|
|
165
174
|
// `secret-vcs-guard` owns real credentials; this pattern owns the
|
|
166
175
|
// *teaching* of an inline literal, so anything self-evidently fake is out.
|
|
@@ -36,7 +36,12 @@ const QUIET = process.argv.slice(2).includes('--quiet');
|
|
|
36
36
|
const REPO = path.resolve(path.dirname(_HERE), '..', '..');
|
|
37
37
|
// 6.0.x (ADR-051): ghostwriter fixtures live at src/agent-src/ghostwriter/.
|
|
38
38
|
const PACKAGE_DIR = path.join(REPO, 'src', 'agent-src', 'ghostwriter');
|
|
39
|
-
|
|
39
|
+
// Every ghostwriter command writes profiles to `agents/reference/ghostwriter/`
|
|
40
|
+
// (docs/contracts/ghostwriter-schema.md); `agents/ghostwriter/` is the legacy
|
|
41
|
+
// path. Both are linted, canonical first, so a profile at either is checked.
|
|
42
|
+
const CONSUMER_DIR = path.join(REPO, 'agents', 'reference', 'ghostwriter');
|
|
43
|
+
const LEGACY_CONSUMER_DIR = path.join(REPO, 'agents', 'ghostwriter');
|
|
44
|
+
const CONSUMER_DIRS: readonly string[] = [CONSUMER_DIR, LEGACY_CONSUMER_DIR];
|
|
40
45
|
const ALLOWLIST = path.join(REPO, 'src', 'scripts', 'ghostwriter_fixture_allowlist.txt');
|
|
41
46
|
const EXEMPT_STEMS: ReadonlySet<string> = new Set(['README']);
|
|
42
47
|
|
|
@@ -86,6 +91,35 @@ function _globMdSorted(dir: string): string[] {
|
|
|
86
91
|
return out.sort();
|
|
87
92
|
}
|
|
88
93
|
|
|
94
|
+
/** Sorted `*.md` files anywhere under `dir`, nested directories included. */
|
|
95
|
+
function _globMdRecursiveSorted(dir: string): string[] {
|
|
96
|
+
let entries: fs.Dirent[];
|
|
97
|
+
try {
|
|
98
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
99
|
+
} catch {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const out: string[] = [];
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const full = path.join(dir, entry.name);
|
|
105
|
+
if (entry.isDirectory()) {
|
|
106
|
+
out.push(..._globMdRecursiveSorted(full));
|
|
107
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
108
|
+
out.push(full);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return out.sort();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Every consumer-side profile file, canonical path first, then legacy. */
|
|
115
|
+
function consumer_profile_files(dirs: readonly string[] = CONSUMER_DIRS): string[] {
|
|
116
|
+
const out: string[] = [];
|
|
117
|
+
for (const dir of dirs) {
|
|
118
|
+
out.push(..._globMdRecursiveSorted(dir));
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
|
|
89
123
|
function _stem(p: string): string {
|
|
90
124
|
const base = path.basename(p);
|
|
91
125
|
const dot = base.lastIndexOf('.');
|
|
@@ -213,14 +247,11 @@ function lint_package_side(allowlist: Set<string>): string[] {
|
|
|
213
247
|
return errors;
|
|
214
248
|
}
|
|
215
249
|
|
|
216
|
-
function lint_consumer_side(): string[] {
|
|
250
|
+
function lint_consumer_side(dirs: readonly string[] = CONSUMER_DIRS): string[] {
|
|
217
251
|
const errors: string[] = [];
|
|
218
|
-
if (!_exists(CONSUMER_DIR)) {
|
|
219
|
-
return errors;
|
|
220
|
-
}
|
|
221
252
|
// (alias_ci → [source_path, source_value, source_kind])
|
|
222
253
|
const seen = new Map<string, [string, string, string]>();
|
|
223
|
-
for (const p of
|
|
254
|
+
for (const p of consumer_profile_files(dirs)) {
|
|
224
255
|
if (EXEMPT_STEMS.has(_stem(p))) {
|
|
225
256
|
continue;
|
|
226
257
|
}
|
|
@@ -302,15 +333,13 @@ function main(): number {
|
|
|
302
333
|
const pkg_count = _exists(PACKAGE_DIR)
|
|
303
334
|
? _globMdSorted(PACKAGE_DIR).filter((p) => !EXEMPT_STEMS.has(_stem(p))).length
|
|
304
335
|
: 0;
|
|
305
|
-
const cons_count =
|
|
306
|
-
? _globMdSorted(CONSUMER_DIR).filter((p) => !EXEMPT_STEMS.has(_stem(p))).length
|
|
307
|
-
: 0;
|
|
336
|
+
const cons_count = consumer_profile_files().filter((p) => !EXEMPT_STEMS.has(_stem(p))).length;
|
|
308
337
|
try {
|
|
309
338
|
assertScanned({
|
|
310
339
|
gate: 'lint_ghostwriter_source',
|
|
311
340
|
scanned: pkg_count + cons_count,
|
|
312
341
|
units: 'profile(s)',
|
|
313
|
-
roots: ['src/agent-src/ghostwriter', 'agents/ghostwriter'],
|
|
342
|
+
roots: ['src/agent-src/ghostwriter', 'agents/reference/ghostwriter', 'agents/ghostwriter'],
|
|
314
343
|
});
|
|
315
344
|
} catch (exc) {
|
|
316
345
|
if (exc instanceof DeadScopeError) {
|
|
@@ -414,6 +443,9 @@ export {
|
|
|
414
443
|
REPO,
|
|
415
444
|
PACKAGE_DIR,
|
|
416
445
|
CONSUMER_DIR,
|
|
446
|
+
LEGACY_CONSUMER_DIR,
|
|
447
|
+
CONSUMER_DIRS,
|
|
448
|
+
consumer_profile_files,
|
|
417
449
|
ALLOWLIST,
|
|
418
450
|
EXEMPT_STEMS,
|
|
419
451
|
ALIAS_MIN_LEN,
|
|
@@ -36,6 +36,7 @@ import { assertScanned, DeadScopeError } from "./_lib/scan_scope.js";
|
|
|
36
36
|
import { asOf } from "./_lib/as_of.js";
|
|
37
37
|
import { parseHostLowering, type HostLowering } from "./hooks/host_lowering.js";
|
|
38
38
|
import { RE_ARM_EVENTS } from "./_lib/prefix_stable_surfaces.js";
|
|
39
|
+
import { EXECUTION_VIEW_GRANTS } from "./hooks/egress_stage.js";
|
|
39
40
|
|
|
40
41
|
// src/scripts/lint_hook_manifest.ts → two levels up is the repo root.
|
|
41
42
|
const REPO_ROOT = path.resolve(
|
|
@@ -275,6 +276,30 @@ function _check_concerns(manifest: YamlObject, errors: string[]): Set<string> {
|
|
|
275
276
|
}
|
|
276
277
|
}
|
|
277
278
|
}
|
|
279
|
+
// `payload_fields:` — field-level projection of the declared bodies. A
|
|
280
|
+
// non-list is ignored at run time, which would silently hand the concern
|
|
281
|
+
// whole bodies; a projection on a guard is ignored by design, so declaring
|
|
282
|
+
// one there states a narrowing that never happens.
|
|
283
|
+
if ("payload_fields" in spec) {
|
|
284
|
+
const raw = spec["payload_fields"];
|
|
285
|
+
if (!Array.isArray(raw) || raw.length === 0 || raw.some((f) => typeof f !== "string" || f === "")) {
|
|
286
|
+
errors.push(
|
|
287
|
+
`concerns.${name}: 'payload_fields' must be a non-empty list of key names`,
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
if (!("needs_payload_bodies" in spec)) {
|
|
291
|
+
errors.push(
|
|
292
|
+
`concerns.${name}: 'payload_fields' without 'needs_payload_bodies' ` +
|
|
293
|
+
`narrows bodies the concern never receives — declare the body classes`,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
if (spec["fail_closed"] === true || spec["severity"] === "blocking") {
|
|
297
|
+
errors.push(
|
|
298
|
+
`concerns.${name}: 'payload_fields' has no effect on a blocking or ` +
|
|
299
|
+
`fail-closed concern, which always receives whole bodies — remove it`,
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
278
303
|
// `re_arm:` — the named boundary at which a rebuilt prompt prefix is
|
|
279
304
|
// expected and paid for once (`road-to-runtime-context-floors` step 1.2).
|
|
280
305
|
// `check_prefix_stable_mutation` reads this key to decide whether a
|
|
@@ -826,6 +851,97 @@ export function _check_slot_answers(table: HostLowering, errors: string[]): void
|
|
|
826
851
|
}
|
|
827
852
|
}
|
|
828
853
|
|
|
854
|
+
/**
|
|
855
|
+
* Host fields that replace what a tool or the model receives. The tool-output
|
|
856
|
+
* name is assembled rather than spelled, because a test pins that no file under
|
|
857
|
+
* src/ names it until the egress stage emits it (road-to-placeholders-on-the-wire
|
|
858
|
+
* step 3.2); refusing the field is not emitting it.
|
|
859
|
+
*/
|
|
860
|
+
const HOST_REWRITE_FIELDS: readonly string[] = ["updatedInput", ["updated", "ToolOutput"].join("")];
|
|
861
|
+
const REWRITE_DECLARATION_KEYS: readonly string[] = ["rewrite", "rewrites"];
|
|
862
|
+
|
|
863
|
+
/**
|
|
864
|
+
* ADR-285 — one dispatcher stage is the only rewriter. A concern that declares
|
|
865
|
+
* a rewrite, or whose own script names a host rewrite field, is refused: two
|
|
866
|
+
* concerns rewriting one input have no composition answer, so none may try.
|
|
867
|
+
*/
|
|
868
|
+
function _check_no_concern_rewrites(manifest: YamlObject, errors: string[]): void {
|
|
869
|
+
const concernsRaw = manifest["concerns"];
|
|
870
|
+
if (!isObject(concernsRaw)) return;
|
|
871
|
+
for (const [name, spec] of Object.entries(concernsRaw)) {
|
|
872
|
+
if (!isObject(spec)) continue;
|
|
873
|
+
const declared = REWRITE_DECLARATION_KEYS.find((k) => spec[k] !== undefined);
|
|
874
|
+
if (declared !== undefined) {
|
|
875
|
+
errors.push(
|
|
876
|
+
`concerns.${name}: rewrite-concern-refused — declares '${declared}', but only the ` +
|
|
877
|
+
`dispatcher's egress stage may produce a rewrite (ADR-285)`,
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
const script = spec["script"];
|
|
881
|
+
if (typeof script !== "string") continue;
|
|
882
|
+
let source = "";
|
|
883
|
+
try {
|
|
884
|
+
source = fs.readFileSync(path.join(REPO_ROOT, script), "utf8");
|
|
885
|
+
} catch {
|
|
886
|
+
continue; // missing script is already reported by _check_concerns
|
|
887
|
+
}
|
|
888
|
+
// Code forms only — a key, a quoted name, a property read. A header that
|
|
889
|
+
// explains the field in backticks (rtk_wrap_hook does) produces nothing.
|
|
890
|
+
const field = HOST_REWRITE_FIELDS.find((f) =>
|
|
891
|
+
[`${f}:`, `'${f}'`, `"${f}"`, `.${f}`].some((form) => source.includes(form)),
|
|
892
|
+
);
|
|
893
|
+
if (field !== undefined) {
|
|
894
|
+
errors.push(
|
|
895
|
+
`concerns.${name}: rewrite-concern-refused — ${script} names the host rewrite ` +
|
|
896
|
+
`field '${field}'; only the dispatcher's egress stage may produce a rewrite (ADR-285)`,
|
|
897
|
+
);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* The execution view is granted by the dispatcher's closed list, never
|
|
904
|
+
* requested. Refused: a concern declaring `payload_view: execution` off the
|
|
905
|
+
* list, a blocking concern the list omits (it would be served tokens instead
|
|
906
|
+
* of the value it guards), and a listed concern that is not blocking.
|
|
907
|
+
*/
|
|
908
|
+
function _check_execution_view_grants(manifest: YamlObject, errors: string[]): void {
|
|
909
|
+
const concernsRaw = manifest["concerns"];
|
|
910
|
+
if (!isObject(concernsRaw)) return;
|
|
911
|
+
for (const [name, spec] of Object.entries(concernsRaw)) {
|
|
912
|
+
if (!isObject(spec)) continue;
|
|
913
|
+
const view = spec["payload_view"];
|
|
914
|
+
const granted = EXECUTION_VIEW_GRANTS.has(name);
|
|
915
|
+
const blocking = spec["severity"] === "blocking";
|
|
916
|
+
if (view !== undefined && view !== "execution" && view !== "placeholder") {
|
|
917
|
+
errors.push(`concerns.${name}: 'payload_view' must be execution or placeholder, got ${JSON.stringify(view)}`);
|
|
918
|
+
} else if (view === "execution" && !granted) {
|
|
919
|
+
errors.push(
|
|
920
|
+
`concerns.${name}: execution-view-not-granted — declares 'payload_view: execution' but is not on ` +
|
|
921
|
+
`EXECUTION_VIEW_GRANTS in src/scripts/hooks/egress_stage.ts; a declaration grants nothing`,
|
|
922
|
+
);
|
|
923
|
+
}
|
|
924
|
+
if (blocking && !granted) {
|
|
925
|
+
errors.push(
|
|
926
|
+
`concerns.${name}: execution-view-not-granted — severity: blocking but missing from ` +
|
|
927
|
+
`EXECUTION_VIEW_GRANTS; under protect it would be served placeholder tokens instead of the values it guards`,
|
|
928
|
+
);
|
|
929
|
+
} else if (granted && !blocking) {
|
|
930
|
+
errors.push(
|
|
931
|
+
`concerns.${name}: execution-view-not-granted — on EXECUTION_VIEW_GRANTS but not severity: blocking; ` +
|
|
932
|
+
`the execution view is for concerns that decide whether a call runs`,
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
if (granted && spec["script"] !== EXECUTION_VIEW_GRANTS.get(name)) {
|
|
936
|
+
errors.push(
|
|
937
|
+
`concerns.${name}: execution-view-not-granted — the grant is bound to ` +
|
|
938
|
+
`${String(EXECUTION_VIEW_GRANTS.get(name))}, but the manifest runs ${JSON.stringify(spec["script"])}; ` +
|
|
939
|
+
`the dispatcher will serve it the placeholder view`,
|
|
940
|
+
);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
|
|
829
945
|
export function lint(
|
|
830
946
|
manifestPath: string,
|
|
831
947
|
strict: boolean,
|
|
@@ -858,6 +974,8 @@ export function lint(
|
|
|
858
974
|
const concernNames = _check_concerns(manifest, errors);
|
|
859
975
|
const bound = _check_platforms(manifest, concernNames, errors, warnings);
|
|
860
976
|
_check_guard_payload_bodies(manifest, errors);
|
|
977
|
+
_check_no_concern_rewrites(manifest, errors);
|
|
978
|
+
_check_execution_view_grants(manifest, errors);
|
|
861
979
|
_check_roles(manifest, concernNames, errors);
|
|
862
980
|
_check_aliases(manifest, errors);
|
|
863
981
|
_check_orphan_trampolines(manifest, errors);
|
|
@@ -97,6 +97,10 @@ function load_hook_commands(hooks_path: string): Array<[string, string]> {
|
|
|
97
97
|
|
|
98
98
|
/** Pull the agent-config subcommand out of a hooks.json command line. */
|
|
99
99
|
function extract_subcommand(command_line: string): string | null {
|
|
100
|
+
// What `echo` or `printf` prints is not what the line runs: the
|
|
101
|
+
// no-dispatcher branch echoes prose that names "agent-config hook". A
|
|
102
|
+
// quoted string a shell executes, as in `sh -c '…'`, is left to match.
|
|
103
|
+
command_line = command_line.replace(/\b(echo|printf)((?:\s+(?:-\w+|'[^']*'))+)/g, (_m, verb: string) => verb);
|
|
100
104
|
const m = _CMD_RE.exec(command_line);
|
|
101
105
|
if (m) {
|
|
102
106
|
return m[1] as string;
|
|
@@ -23,6 +23,7 @@ import * as path from 'node:path';
|
|
|
23
23
|
import * as fs from 'node:fs';
|
|
24
24
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
25
25
|
|
|
26
|
+
import { detect } from './_lib/egress_rules.js';
|
|
26
27
|
import * as sl from './_lib/security_lint.js';
|
|
27
28
|
import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
28
29
|
|
|
@@ -31,16 +32,13 @@ export const CHECK = 'mcp-config-security';
|
|
|
31
32
|
// Python: re.compile(r"(^|/)(\.mcp\.json|mcp\.json|claude_desktop_config\.json)")
|
|
32
33
|
const _NAME_HINTS = /(^|\/)(\.mcp\.json|mcp\.json|claude_desktop_config\.json)/;
|
|
33
34
|
|
|
34
|
-
// Real secret VALUES
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
'|ghp_[0-9A-Za-z]{36}' +
|
|
42
|
-
'|eyJ[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}',
|
|
43
|
-
);
|
|
35
|
+
// Real secret VALUES — detected by the one rule table, which owns every
|
|
36
|
+
// credential pattern (road-to-one-detector-and-the-senders-we-own 2.2). The
|
|
37
|
+
// heuristic keyword assignment is not a structural credential and never was HIGH
|
|
38
|
+
// here; this lint's HIGH tier stays the structural rows.
|
|
39
|
+
export function hasInlineSecret(text: string): boolean {
|
|
40
|
+
return detect(text).some((span) => span.class === 'credential' && span.rule !== 'generic-assignment');
|
|
41
|
+
}
|
|
44
42
|
|
|
45
43
|
// Line-level smells (match on a single line).
|
|
46
44
|
const _MED: ReadonlyArray<[RegExp, string]> = [
|
|
@@ -135,7 +133,7 @@ export function _scan(sf: sl.ScannedFile): sl.Finding[] {
|
|
|
135
133
|
const out: sl.Finding[] = [];
|
|
136
134
|
for (const [start, numbered] of _candidate_chunks(sf)) {
|
|
137
135
|
for (const [lineno, text] of numbered) {
|
|
138
|
-
if (
|
|
136
|
+
if (hasInlineSecret(text)) {
|
|
139
137
|
out.push(
|
|
140
138
|
new sl.Finding(
|
|
141
139
|
sf.rel,
|
|
@@ -42,6 +42,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
42
42
|
import { parse as parseYaml } from 'yaml';
|
|
43
43
|
|
|
44
44
|
import { isAcceptanceCriteriaHeading } from './_lib/ac_heading.js';
|
|
45
|
+
import { asOfMs } from './_lib/as_of.js';
|
|
45
46
|
import { workspaceIdentity } from './_lib/git_common_dir.js';
|
|
46
47
|
import { gitEnv } from './_lib/git_env.js';
|
|
47
48
|
import { splitMarkdownRow } from './_lib/md_table.js';
|
|
@@ -609,6 +610,12 @@ function _reviewedIn(text: string): string | null {
|
|
|
609
610
|
* reviewed exactly as the contract asks — every author-today/merge-tomorrow PR
|
|
610
611
|
* reproduces it.
|
|
611
612
|
*
|
|
613
|
+
* Within the run, a commit dated on or before the stamp is preferred, newest
|
|
614
|
+
* first: the marker takes a bare date, so a plan changed again the same day it
|
|
615
|
+
* was reviewed has no later value to write, and the contract (§ 1, "Residual
|
|
616
|
+
* (accepted)") resolves that same-day pair in favour of passing. A run with no
|
|
617
|
+
* such commit falls back to the commit that introduced the stamp.
|
|
618
|
+
*
|
|
612
619
|
* The oldest commit of the run is the honest baseline, and the age matters:
|
|
613
620
|
* comparing against the NEWEST commit carrying the stamp would compare the
|
|
614
621
|
* current content with itself, making every committed file trivially fresh and
|
|
@@ -620,12 +627,22 @@ function _stampIntroducedAt(
|
|
|
620
627
|
reviewed: string,
|
|
621
628
|
): HistoryEntry | undefined {
|
|
622
629
|
let introduced: HistoryEntry | undefined;
|
|
630
|
+
let sameDay: HistoryEntry | undefined;
|
|
623
631
|
for (const entry of history) {
|
|
624
632
|
const blob = _blobAt(absPath, entry.sha);
|
|
625
633
|
if (blob === null || _reviewedIn(blob) !== reviewed) break;
|
|
626
634
|
introduced = entry;
|
|
635
|
+
// History is newest-first, so the first run member dated on or before
|
|
636
|
+
// the stamp is the newest such commit: a change committed the day the
|
|
637
|
+
// stamp names is covered by it (contract § 1, accepted residual).
|
|
638
|
+
if (sameDay === undefined && entry.date <= reviewed) sameDay = entry;
|
|
627
639
|
}
|
|
628
|
-
return introduced;
|
|
640
|
+
return sameDay ?? introduced;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/** The latest calendar day anywhere on earth at the as-of instant (UTC+14), so no author's real today reads as future. */
|
|
644
|
+
function _latestToday(now: number = asOfMs()): string {
|
|
645
|
+
return new Date(now + 14 * 3_600_000).toISOString().slice(0, 10);
|
|
629
646
|
}
|
|
630
647
|
|
|
631
648
|
export type FileStatus = 'ok' | 'draft-exempt' | 'grandfathered' | 'fail';
|
|
@@ -689,6 +706,16 @@ export function checkFile(absPath: string): FileResult {
|
|
|
689
706
|
};
|
|
690
707
|
}
|
|
691
708
|
const violations = [...content.violations];
|
|
709
|
+
// A stamp after today would cover every commit made until that date as
|
|
710
|
+
// "reviewed" — the same-day residual of contract § 1 holds for today only.
|
|
711
|
+
if (content.reviewed !== null && content.reviewed > _latestToday()) {
|
|
712
|
+
violations.push({
|
|
713
|
+
file: absPath,
|
|
714
|
+
line: 1,
|
|
715
|
+
kind: 'future_review',
|
|
716
|
+
detail: `\`reviewed: ${content.reviewed}\` is later than today — stamp the day the review happened`,
|
|
717
|
+
});
|
|
718
|
+
}
|
|
692
719
|
// A file with uncommitted modifications has no committed baseline for the
|
|
693
720
|
// current content, so staleness is not judgeable — see
|
|
694
721
|
// hasUncommittedChanges. The committed-history case below is unchanged.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Positioning consistency lint for event4u/agent-config.
|
|
4
4
|
*
|
|
5
|
-
* Ported from
|
|
5
|
+
* Ported from its retired Python twin (ADR-200, Phase 4 /
|
|
6
6
|
* Wave 4b). Mirrors the CLI contract EXACTLY — the `--quiet` argparse flag,
|
|
7
7
|
* exit codes (0 clean, 1 drift, 2 missing PyYAML — inert here since `yaml`
|
|
8
8
|
* is always present), byte-identical stdout (success line) and stderr
|
|
@@ -134,8 +134,8 @@ interface ParsedArgs {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
function _argparse_error(message: string): never {
|
|
137
|
-
process.stderr.write('usage: lint_positioning
|
|
138
|
-
process.stderr.write(`lint_positioning
|
|
137
|
+
process.stderr.write('usage: lint_positioning [-h] [--quiet]\n');
|
|
138
|
+
process.stderr.write(`lint_positioning: error: ${message}\n`);
|
|
139
139
|
process.exit(2);
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -145,7 +145,7 @@ function parse_args(argv: readonly string[]): ParsedArgs {
|
|
|
145
145
|
if (arg === '--quiet') {
|
|
146
146
|
quiet = true;
|
|
147
147
|
} else if (arg === '-h' || arg === '--help') {
|
|
148
|
-
process.stdout.write('usage: lint_positioning
|
|
148
|
+
process.stdout.write('usage: lint_positioning [-h] [--quiet]\n');
|
|
149
149
|
process.exit(0);
|
|
150
150
|
} else {
|
|
151
151
|
_argparse_error(`unrecognized arguments: ${arg}`);
|
|
@@ -76,6 +76,7 @@ const WEAK_COPYLEFT_SPDX_IDS = [
|
|
|
76
76
|
'LGPL-2.1-only', 'LGPL-2.1-or-later', 'LGPL-2.1',
|
|
77
77
|
'LGPL-3.0-only', 'LGPL-3.0-or-later', 'LGPL-3.0',
|
|
78
78
|
'EPL-1.0', 'EPL-2.0', 'CDDL-1.0', 'CDDL-1.1',
|
|
79
|
+
'OFL-1.1',
|
|
79
80
|
];
|
|
80
81
|
// The conservative fallback deny set (GPL/AGPL/SSPL family) — see the header
|
|
81
82
|
// comment. Also part of the known-SPDX-id catalog, so a real GPL/AGPL/SSPL
|
|
@@ -201,6 +201,18 @@ interface TargetIndex {
|
|
|
201
201
|
*/
|
|
202
202
|
const USER_DECISION_OWNER_RE = /^-[ \t]*\*\*Owner:\*\*[ \t]*(maintainer|user|owner)\b/im;
|
|
203
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Template rule 20 "Route before you file": a human-owned blocker records the
|
|
206
|
+
* council verdict that sent it to a human, or why no council could be asked.
|
|
207
|
+
* Absent is ratcheted (the backlog predates the field); present-but-malformed
|
|
208
|
+
* is hard, since no entry carried the field on the day it shipped. Counted over
|
|
209
|
+
* this lint's own scope, so a blocker filed straight into a parked roadmap is
|
|
210
|
+
* not seen — parking itself is held by check_estate_count's later_roadmaps floor.
|
|
211
|
+
*/
|
|
212
|
+
const ROUTED_FIELD_RE = /^-[ \t]*\*\*Routed:\*\*[ \t]*(.*)$/im;
|
|
213
|
+
const ROUTED_VALUE_RE =
|
|
214
|
+
/^(?:council[ \t]+\d{4}-\d{2}-\d{2}[ \t]+ESCALATE[ \t]+[—-][ \t]*\S|pending[ \t]+[—-][ \t]*\S)/;
|
|
215
|
+
|
|
204
216
|
const REQUIRED_FIELDS: ReadonlyArray<readonly [string, RegExp]> = [
|
|
205
217
|
['Status', /^-[ \t]*\*\*Status:\*\*/im],
|
|
206
218
|
['Owner', /^-[ \t]*\*\*Owner:\*\*/im],
|
|
@@ -269,6 +281,27 @@ const TECHNICAL_CLASSES: ReadonlySet<string> = new Set([
|
|
|
269
281
|
* parses as `1`: the taxonomy name is documentation for the reader and must
|
|
270
282
|
* not have to be spelled identically in every entry to stay valid.
|
|
271
283
|
*/
|
|
284
|
+
/** A `## Decisions` row resolved by `owner`, dated, that names blocker `id`. */
|
|
285
|
+
function _ownerDecisionNames(text: string, id: string): boolean {
|
|
286
|
+
const lines = text.split('\n');
|
|
287
|
+
const start = lines.findIndex((l) => /^##\s+Decisions\s*$/.test(l));
|
|
288
|
+
if (start < 0) return false;
|
|
289
|
+
let resolvedCol = -1;
|
|
290
|
+
for (let i = start + 1; i < lines.length && !/^##\s/.test(lines[i] as string); i += 1) {
|
|
291
|
+
const line = (lines[i] as string).trim();
|
|
292
|
+
if (!line.startsWith('|')) continue;
|
|
293
|
+
const cells = line.replace(/^\|/, '').replace(/\|$/, '').split('|').map((c) => c.trim());
|
|
294
|
+
if (resolvedCol < 0) {
|
|
295
|
+
resolvedCol = cells.findIndex((c) => /^resolved[ _]by$/i.test(c));
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (cells[resolvedCol]?.replace(/`/g, '') !== 'owner') continue;
|
|
299
|
+
if (!line.includes(id) || !/\b\d{4}-\d{2}-\d{2}\b/.test(line)) continue;
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
|
|
272
305
|
function _blockerClass(body: string): string {
|
|
273
306
|
const m = CLASS_FIELD_RE.exec(body);
|
|
274
307
|
if (!m) {
|
|
@@ -327,6 +360,10 @@ interface ScanResult {
|
|
|
327
360
|
hard: Violation[];
|
|
328
361
|
/** Open entries that are not yet decidable — counted against the ratchet. */
|
|
329
362
|
decidability: Violation[];
|
|
363
|
+
/** Open human-owned entries with no `Routed:` field — counted against its own ratchet. */
|
|
364
|
+
routing: Violation[];
|
|
365
|
+
/** Resolved human-only entries no owner `## Decisions` row names — ratcheted (K1). */
|
|
366
|
+
ownerClose: Violation[];
|
|
330
367
|
}
|
|
331
368
|
|
|
332
369
|
/** What a scan needs to resolve a qualified reference: who it is, and where it may point. */
|
|
@@ -339,6 +376,8 @@ interface ScanContext {
|
|
|
339
376
|
function _scanBoth(rawText: string, ctx: ScanContext = {}): ScanResult {
|
|
340
377
|
const violations: Violation[] = [];
|
|
341
378
|
const decidability: Violation[] = [];
|
|
379
|
+
const routing: Violation[] = [];
|
|
380
|
+
const ownerClose: Violation[] = [];
|
|
342
381
|
const text = _stripFencedCode(rawText);
|
|
343
382
|
const declaredIds = new Set<string>();
|
|
344
383
|
const userDecisionIds = new Set<string>();
|
|
@@ -401,6 +440,15 @@ function _scanBoth(rawText: string, ctx: ScanContext = {}): ScanResult {
|
|
|
401
440
|
// Resolved entries are history — re-litigating a decision already
|
|
402
441
|
// made would be churn, and the ratchet would never reach zero.
|
|
403
442
|
const isResolved = /^-[ \t]*\*\*Status:\*\*[ \t]*resolved/im.test(body);
|
|
443
|
+
if (isResolved && ['', '3'].includes(_blockerClass(body)) && !_ownerDecisionNames(text, cur.id)) {
|
|
444
|
+
ownerClose.push({
|
|
445
|
+
line: _lineAt(text, sectionStart + cur.start),
|
|
446
|
+
message:
|
|
447
|
+
`blocker '${cur.id}' is human-only and resolved, but no \`## Decisions\` row ` +
|
|
448
|
+
'resolved by `owner` names it with a date — a class-3 blocker closes only on an ' +
|
|
449
|
+
'owner decision (road-to-a-tick-the-shipped-path-earns 2.3)',
|
|
450
|
+
});
|
|
451
|
+
}
|
|
404
452
|
if (!isResolved) {
|
|
405
453
|
openIds.add(cur.id);
|
|
406
454
|
// The class/run contract is HARD rather than ratcheted, and it
|
|
@@ -452,6 +500,24 @@ function _scanBoth(rawText: string, ctx: ScanContext = {}): ScanResult {
|
|
|
452
500
|
});
|
|
453
501
|
}
|
|
454
502
|
}
|
|
503
|
+
if (USER_DECISION_OWNER_RE.test(body)) {
|
|
504
|
+
const routed = ROUTED_FIELD_RE.exec(body);
|
|
505
|
+
const at = _lineAt(text, sectionStart + cur.start);
|
|
506
|
+
if (routed === null) {
|
|
507
|
+
routing.push({
|
|
508
|
+
line: at,
|
|
509
|
+
message: `blocker '${cur.id}' has a human Owner but no **Routed:** field`,
|
|
510
|
+
});
|
|
511
|
+
} else if (!ROUTED_VALUE_RE.test((routed[1] as string).trim())) {
|
|
512
|
+
violations.push({
|
|
513
|
+
line: at,
|
|
514
|
+
message:
|
|
515
|
+
`blocker '${cur.id}' declares **Routed:** '${(routed[1] as string).trim()}' — ` +
|
|
516
|
+
"expected 'council YYYY-MM-DD ESCALATE — <reserved row>' or " +
|
|
517
|
+
"'pending — <why the council was unreachable>' (templates/roadmaps.md rule 20)",
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
455
521
|
const gaps = DECIDABILITY_FIELDS.filter(([, re]) => !re.test(body)).map(
|
|
456
522
|
([name]) => name,
|
|
457
523
|
);
|
|
@@ -518,7 +584,8 @@ function _scanBoth(rawText: string, ctx: ScanContext = {}): ScanResult {
|
|
|
518
584
|
}
|
|
519
585
|
violations.sort((a, b) => a.line - b.line);
|
|
520
586
|
decidability.sort((a, b) => a.line - b.line);
|
|
521
|
-
|
|
587
|
+
routing.sort((a, b) => a.line - b.line);
|
|
588
|
+
return { hard: violations, decidability, routing, ownerClose };
|
|
522
589
|
}
|
|
523
590
|
|
|
524
591
|
interface LocalBlockers {
|
|
@@ -534,7 +601,7 @@ interface LocalBlockers {
|
|
|
534
601
|
* `<roadmap-stem>#<id>` resolves against the in-scope target named — never
|
|
535
602
|
* estate-wide, so an unrelated roadmap adding a same-named blocker cannot change
|
|
536
603
|
* what an existing marker means. A target that is declared but resolved makes
|
|
537
|
-
* the marker STALE: `run-continuation`
|
|
604
|
+
* the marker STALE: the withdrawn `run-continuation` treated every marker as blocked, so a
|
|
538
605
|
* marker on a resolved blocker would hold a step nothing holds any more.
|
|
539
606
|
* "Superseded" is not a state — the format has no replacement pointer, so a
|
|
540
607
|
* moved blocker is a reference to update, reported here as missing.
|
|
@@ -885,13 +952,24 @@ function main(): number {
|
|
|
885
952
|
const index = _targetIndex();
|
|
886
953
|
let failed = 0;
|
|
887
954
|
const undecidable: Array<{ rel: string; v: Violation }> = [];
|
|
955
|
+
const unrouted: Array<{ rel: string; v: Violation }> = [];
|
|
956
|
+
const unowned: Array<{ rel: string; v: Violation }> = [];
|
|
888
957
|
for (const roadmap of roadmaps) {
|
|
889
958
|
const rel = _relPosix(roadmap, REPO_ROOT);
|
|
890
959
|
const text = fs.readFileSync(roadmap, 'utf-8');
|
|
891
|
-
const { hard, decidability } = _scanBoth(text, {
|
|
960
|
+
const { hard, decidability, routing, ownerClose } = _scanBoth(text, {
|
|
961
|
+
selfStem: path.basename(roadmap, '.md'),
|
|
962
|
+
index,
|
|
963
|
+
});
|
|
892
964
|
for (const v of decidability) {
|
|
893
965
|
undecidable.push({ rel, v });
|
|
894
966
|
}
|
|
967
|
+
for (const v of routing) {
|
|
968
|
+
unrouted.push({ rel, v });
|
|
969
|
+
}
|
|
970
|
+
for (const v of ownerClose) {
|
|
971
|
+
unowned.push({ rel, v });
|
|
972
|
+
}
|
|
895
973
|
if (hard.length) {
|
|
896
974
|
failed += 1;
|
|
897
975
|
process.stderr.write(`❌ ${rel}\n`);
|
|
@@ -962,10 +1040,42 @@ function main(): number {
|
|
|
962
1040
|
' **What to do:** carrying a command, a path or an enumerated option set.\n' +
|
|
963
1041
|
' See templates/roadmaps.md rule 20.\n',
|
|
964
1042
|
);
|
|
1043
|
+
}
|
|
1044
|
+
const routingVerdict = checkRatchet({
|
|
1045
|
+
gate: 'lint_roadmap_blockers:routing',
|
|
1046
|
+
actual: unrouted.length,
|
|
1047
|
+
repoRoot: REPO_ROOT,
|
|
1048
|
+
});
|
|
1049
|
+
if (!routingVerdict.ok) {
|
|
1050
|
+
process.stderr.write(`❌ ${routingVerdict.message}\n`);
|
|
1051
|
+
for (const { rel, v } of unrouted) {
|
|
1052
|
+
process.stderr.write(` ${rel}:${v.line}: ${v.message}\n`);
|
|
1053
|
+
}
|
|
1054
|
+
process.stderr.write(
|
|
1055
|
+
'\n Route a human-owned blocker through the council before filing it, and record\n' +
|
|
1056
|
+
" **Routed:** council YYYY-MM-DD ESCALATE — <reserved row>, or 'pending — <reason>'\n" +
|
|
1057
|
+
' when no council could be reached. A DECIDE is a ## Decisions row, not a blocker.\n' +
|
|
1058
|
+
' See templates/roadmaps.md rule 20 "Route before you file".\n',
|
|
1059
|
+
);
|
|
1060
|
+
}
|
|
1061
|
+
const ownerVerdict = checkRatchet({
|
|
1062
|
+
gate: 'lint_roadmap_blockers:owner-close',
|
|
1063
|
+
actual: unowned.length,
|
|
1064
|
+
repoRoot: REPO_ROOT,
|
|
1065
|
+
});
|
|
1066
|
+
if (!ownerVerdict.ok) {
|
|
1067
|
+
process.stderr.write(`❌ ${ownerVerdict.message}\n`);
|
|
1068
|
+
for (const { rel, v } of unowned) {
|
|
1069
|
+
process.stderr.write(` ${rel}:${v.line}: ${v.message}\n`);
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
if (!verdict.ok || !routingVerdict.ok || !ownerVerdict.ok) {
|
|
965
1073
|
return 1;
|
|
966
1074
|
}
|
|
967
1075
|
if (!QUIET) {
|
|
968
1076
|
process.stdout.write(`\n✅ ${roadmaps.length} roadmap(s) blocker-contract-clean\n`);
|
|
1077
|
+
process.stdout.write(`✅ ${routingVerdict.message}\n`);
|
|
1078
|
+
process.stdout.write(`✅ ${ownerVerdict.message}\n`);
|
|
969
1079
|
process.stdout.write(
|
|
970
1080
|
`✅ 0 blocker id(s) open in both an active and an archived roadmap ` +
|
|
971
1081
|
`(${_globArchivedRoadmaps().length} archived file(s) read)\n`,
|
|
@@ -998,7 +1108,7 @@ function _isCliEntry(): boolean {
|
|
|
998
1108
|
}
|
|
999
1109
|
|
|
1000
1110
|
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
1001
|
-
process.
|
|
1111
|
+
process.exitCode = main();
|
|
1002
1112
|
}
|
|
1003
1113
|
|
|
1004
1114
|
export {
|