@event4u/agent-config 16.4.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
- package/CHANGELOG.md +483 -669
- package/CONTRIBUTING.md +47 -0
- package/README.md +25 -25
- package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
- package/dist/agent-src/commands/agents/init.md +66 -3
- package/dist/agent-src/commands/agents/user/init.md +3 -0
- package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
- package/dist/agent-src/commands/analyze/inbox.md +168 -37
- package/dist/agent-src/commands/analyze/pr.md +144 -0
- package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
- package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
- package/dist/agent-src/commands/analyze.md +28 -12
- package/dist/agent-src/commands/audit.md +115 -0
- package/dist/agent-src/commands/brand/review.md +13 -2
- package/dist/agent-src/commands/brand/tokens.md +3 -3
- package/dist/agent-src/commands/brand/voice.md +8 -5
- package/dist/agent-src/commands/brand.md +2 -2
- package/dist/agent-src/commands/challenge-me/closure.md +25 -0
- package/dist/agent-src/commands/design-system/import.md +8 -3
- package/dist/agent-src/commands/design-system/sync.md +98 -0
- package/dist/agent-src/commands/design-system.md +6 -1
- package/dist/agent-src/commands/evals/analyze.json +44 -0
- package/dist/agent-src/commands/evals/audit.json +12 -0
- package/dist/agent-src/commands/evals/retro.json +12 -0
- package/dist/agent-src/commands/fix/ci.md +10 -8
- package/dist/agent-src/commands/ghostwriter/write.md +22 -0
- package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
- package/dist/agent-src/commands/memory/propose.md +12 -0
- package/dist/agent-src/commands/memory.md +1 -1
- package/dist/agent-src/commands/optimize.md +4 -3
- package/dist/agent-src/commands/post-as/me.md +18 -0
- package/dist/agent-src/commands/pr/create.md +17 -342
- package/dist/agent-src/commands/pr/merge.md +129 -368
- package/dist/agent-src/commands/retro.md +121 -0
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +4 -1
- package/dist/agent-src/commands/roadmap/process-full.md +46 -333
- package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
- package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
- package/dist/agent-src/commands/team-knowledge.md +1 -1
- package/dist/agent-src/commands/threat-model.md +1 -1
- package/dist/agent-src/commands/upstream-contribute.md +91 -101
- package/dist/agent-src/commands/worktree/cleanup.md +18 -11
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
- package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
- package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
- package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
- package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
- package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
- package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
- package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
- package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
- package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
- package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
- package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
- package/dist/agent-src/contexts/model-recommendations.md +5 -5
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/dist/agent-src/guidelines/design-antipatterns.md +6 -1
- package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
- package/dist/agent-src/guidelines/php/api-design.md +10 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +0 -1
- package/dist/agent-src/rules/design-fidelity.md +12 -13
- package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
- package/dist/agent-src/rules/fix-what-you-see.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
- package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
- package/dist/agent-src/rules/neighbour-precedence.md +1 -1
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +2 -2
- package/dist/agent-src/rules/token-budget-discipline.md +2 -2
- package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
- package/dist/agent-src/scripts/roadmap_age.ts +175 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
- package/dist/agent-src/skills/api-design/SKILL.md +2 -2
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
- package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/brand/SKILL.md +7 -3
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
- package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
- package/dist/agent-src/skills/canvas-design/SKILL.md +16 -4
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
- package/dist/agent-src/skills/database/SKILL.md +5 -4
- package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
- package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +25 -22
- package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
- package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
- package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
- package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
- package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
- package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
- package/dist/agent-src/skills/docker/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
- package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
- package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +65 -4
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
- package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
- package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
- package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
- package/dist/agent-src/skills/iconography/SKILL.md +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
- package/dist/agent-src/skills/logo-generation/SKILL.md +21 -11
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
- package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
- package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
- package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
- package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
- package/dist/agent-src/skills/security/SKILL.md +41 -5
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
- package/dist/agent-src/skills/svg-authoring/SKILL.md +324 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
- package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
- package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
- package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
- package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
- package/dist/agent-src/skills/type-design/SKILL.md +196 -0
- package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
- package/dist/agent-src/skills/type-design/references/gates.md +113 -0
- package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
- package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
- package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +1 -1
- package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
- package/dist/agent-src/templates/roadmaps.md +39 -1
- package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/dist/cli/commands/uiRender.js +265 -13
- package/dist/cli/commands/uiRenderAsset.js +1316 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
- package/dist/cli/initRouting.js +1 -1
- package/dist/cli/main.js +47 -1
- package/dist/cli/mcp/dispatch.js +31 -9
- package/dist/cli/python/knowledge_ingest.js +7 -39
- package/dist/cli/python/workspace_secrets.js +4 -177
- package/dist/cli/registry.js +5 -2
- package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
- package/dist/cli-delegate/check_update_banner.js +635 -266
- package/dist/cli-delegate/{chunk-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -437
- package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
- package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
- package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
- package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
- package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
- package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
- package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
- package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
- package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
- package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
- package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
- package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
- package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
- package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
- package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
- package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
- package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
- package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
- package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
- package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
- package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
- package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
- package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
- package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
- package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
- package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
- package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
- package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
- package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
- package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
- package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
- package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
- package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
- package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
- package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
- package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
- package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
- package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
- package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
- package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
- package/dist/cli-delegate/cmd_adr_effective.js +41 -2
- package/dist/cli-delegate/cmd_analyze_session.js +7 -7
- package/dist/cli-delegate/cmd_brand_status.js +1287 -10
- package/dist/cli-delegate/cmd_ci_settle.js +330 -0
- package/dist/cli-delegate/cmd_conformance.js +669 -822
- package/dist/cli-delegate/cmd_doctor.js +26 -16
- package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
- package/dist/cli-delegate/cmd_explain.js +9 -24
- package/dist/cli-delegate/cmd_export.js +14 -11
- package/dist/cli-delegate/cmd_fleet.js +5 -3
- package/dist/cli-delegate/cmd_git_convention.js +8 -4
- package/dist/cli-delegate/cmd_handoff.js +79 -242
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +4 -2
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_preflight.js +7 -5
- package/dist/cli-delegate/cmd_prune.js +16 -13
- package/dist/cli-delegate/cmd_route_audit.js +11 -8
- package/dist/cli-delegate/cmd_route_explain.js +649 -16
- package/dist/cli-delegate/cmd_session_recycle.js +15 -6
- package/dist/cli-delegate/cmd_settings_check.js +2 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +16 -13
- package/dist/cli-delegate/cmd_uninstall.js +185 -31
- package/dist/cli-delegate/cmd_update.js +67 -3
- package/dist/cli-delegate/cmd_upgrade.js +38 -7
- package/dist/cli-delegate/cmd_validate.js +16 -13
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/dashboard_mode.js +1 -1
- package/dist/cli-delegate/gate_execute.js +4 -3
- package/dist/cli-delegate/roadmap_age.js +22 -0
- package/dist/cli-delegate/roadmap_gates.js +4 -3
- package/dist/cli-delegate/update_roadmap_progress.js +3 -2
- package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +409 -201
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +36 -27
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +25 -16
- package/dist/hooks/chat_history.chunk.cjs +6852 -0
- package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
- package/dist/hooks/dispatch.js +17706 -18627
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/egress_engine.chunk.cjs +915 -0
- package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
- package/dist/hooks/svg_rules.chunk.cjs +1858 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/conflict.js +36 -6
- package/dist/install/conflictTracker.js +81 -7
- package/dist/install/detect.js +3 -3
- package/dist/install/hostPermissionsAdapter.js +106 -0
- package/dist/install/install.mjs +3117 -1949
- package/dist/install/installThinLayer.js +1 -1
- package/dist/install/manifestFiles.js +21 -0
- package/dist/install/noGoDenyRows.js +300 -0
- package/dist/install/noGoRules.js +368 -0
- package/dist/install/ownershipLedger.js +133 -0
- package/dist/install/plan.js +1 -1
- package/dist/install/preflight.js +39 -8
- package/dist/install/preserve.js +74 -12
- package/dist/install/recordedOwnership.js +88 -5
- package/dist/install/rule_scope.js +20 -3
- package/dist/install/stagedRuntime.js +455 -0
- package/dist/install/toolsArg.js +19 -0
- package/dist/install/userPin.js +47 -0
- package/dist/install/wizard-plan.js +26 -4
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
- package/dist/mcp/registry-manifest.json +6 -5
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +9814 -5333
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +7 -12
- package/dist/scripts/_lib/asset_render_record.js +219 -0
- package/dist/scripts/_lib/claude_builtin_names.js +9 -4
- package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
- package/dist/scripts/_lib/egress_rules.js +766 -0
- package/dist/scripts/_lib/environment_detector.js +24 -33
- package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
- package/dist/scripts/_lib/guidelines_lane.js +10 -1
- package/dist/scripts/_lib/identifier_redaction.js +24 -0
- package/dist/scripts/_lib/installed_layer.js +17 -0
- package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
- package/dist/scripts/_lib/lean_projection_mode.js +34 -152
- package/dist/scripts/_lib/project_tree_form.js +118 -0
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/scoped_projection.js +133 -3
- package/dist/scripts/_lib/settings_removed_keys.js +29 -0
- package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
- package/dist/scripts/_lib/subagent_native_fields.js +35 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_filled_counter.js +285 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1339 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/ui_surface.js +19 -0
- package/dist/scripts/_lib/verification_command.js +364 -0
- package/dist/scripts/_lib/workspace_secrets.js +229 -0
- package/dist/scripts/ai_council/seat_policy.js +27 -0
- package/dist/scripts/ai_council/transport_resolver.js +9 -10
- package/dist/scripts/condense.js +25 -29
- package/dist/scripts/lint_svg_asset.js +324 -0
- package/dist/server/io/substituteTemplate.js +2 -2
- package/dist/server/io/yamlIO.js +2 -2
- package/dist/server/routes/install.js +5 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/wizard.js +1 -1
- package/dist/server/schemas/settings.js +22 -16
- package/dist/server/serverInfo.js +1 -1
- package/dist/shared/brandTokenDocument.js +47 -0
- package/dist/shared/brandTokenPaths.js +43 -0
- package/dist/shared/settingsCarveOut.js +0 -7
- package/dist/shared/skillRanking.js +103 -5
- package/dist/shared/userMd/formAdapter.js +16 -0
- package/dist/shared/userMd/schema.js +17 -0
- package/dist/ui/assets/index-w70Ado09.js +23 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +89 -2
- package/docs/THIRD-PARTY-NOTICES.md +27 -0
- package/docs/contracts/settings-classes.md +27 -9
- package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
- package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
- package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
- package/docs/guidelines/design-antipatterns.md +6 -1
- package/docs/guidelines/design-asset-discipline.md +17 -0
- package/docs/guidelines/design-fidelity-routing.md +1 -0
- package/docs/guidelines/php/api-design.md +10 -1
- package/llms.txt +12 -10
- package/package.json +15 -5
- package/src/agent-src/scripts/dashboard_mode.ts +4 -1
- package/src/agent-src/scripts/roadmap_age.ts +175 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/check_memory.ts +2 -2
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
- package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
- package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
- package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
- package/src/config/agent-settings.template.yml +120 -57
- package/src/config/agents-paths.yml +13 -7
- package/src/config/ci-local-parity.yml +44 -0
- package/src/config/continuity-surface.json +51 -2
- package/src/config/depth-audit-samples.json +5 -0
- package/src/config/discovery/command-verbs.yml +1 -0
- package/src/config/dispatch-economy-metrics.json +1 -0
- package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
- package/src/config/egress-mutations/credential-token-restores.json +7 -0
- package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
- package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +149 -3
- package/src/config/gate-reachability-exemptions.json +3 -5
- package/src/config/gate-violation-baselines.json +29 -25
- package/src/config/gitignore-block.txt +6 -3
- package/src/config/hook-bundle-budget.json +34 -3
- package/src/config/hook-carrier-probes.json +30 -0
- package/src/config/hook-latency-budget.json +4 -2
- package/src/config/host-injection-effect.json +8 -1
- package/src/config/host-skill-frontmatter-keys.json +56 -0
- package/src/config/layer-form-brakes.json +4 -0
- package/src/config/layer-form-comparison-corpus.json +42 -0
- package/src/config/loop-surfaces.yaml +28 -47
- package/src/config/memory-twin-verdicts.yml +9 -1
- package/src/config/metric-registry.yml +40 -3
- package/src/config/pack-size-budget.json +15 -0
- package/src/config/procedure-core-budget.json +21 -0
- package/src/config/profiles/minimal.ini +1 -1
- package/src/config/project-tree-form.json +24 -0
- package/src/config/reach-channels.yml +3 -3
- package/src/config/reach-prescriptions-intake.yml +1 -1
- package/src/config/roadmap-step-size-baseline.json +118 -0
- package/src/config/routing-coverage-seed.json +100 -2
- package/src/config/skill-body-budget.json +686 -0
- package/src/config/skill-fork-pilot.json +17 -0
- package/src/config/skill-lifecycle-probes-codex.json +57 -0
- package/src/config/skill-lifecycle-probes.json +57 -0
- package/src/config/skill-output-shape.json +316 -0
- package/src/config/step-depth-table.json +58 -0
- package/src/config/turnaround-budget.json +90 -0
- package/src/install/conflict.ts +38 -6
- package/src/install/conflictTracker.ts +126 -8
- package/src/install/detect.ts +3 -3
- package/src/install/hostPermissionsAdapter.ts +136 -0
- package/src/install/installThinLayer.ts +6 -1
- package/src/install/manifestFiles.ts +24 -0
- package/src/install/noGoDenyRows.ts +368 -0
- package/src/install/noGoRules.ts +438 -0
- package/src/install/ownershipLedger.ts +180 -0
- package/src/install/plan.ts +1 -1
- package/src/install/preflight.ts +42 -10
- package/src/install/preserve.ts +94 -12
- package/src/install/recordedOwnership.ts +121 -3
- package/src/install/rule_scope.ts +20 -3
- package/src/install/stagedRuntime.ts +528 -0
- package/src/install/toolsArg.ts +16 -0
- package/src/install/types.ts +23 -2
- package/src/install/userPin.ts +54 -0
- package/src/install/wizard-plan.ts +25 -4
- package/src/scripts/_cli/_doctor_emit.ts +24 -0
- package/src/scripts/_cli/cmd_brand_status.ts +223 -12
- package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -44
- package/src/scripts/_cli/cmd_route_explain.ts +176 -2
- package/src/scripts/_cli/cmd_uninstall.ts +270 -26
- package/src/scripts/_cli/cmd_update.ts +34 -1
- package/src/scripts/_cli/cmd_upgrade.ts +38 -2
- package/src/scripts/_cli/detection_report.ts +7 -0
- package/src/scripts/_cli/doctor_execution.ts +1 -2
- package/src/scripts/_cli/doctor_install_mode.ts +39 -0
- package/src/scripts/_cli/doctor_network_posture.ts +3 -3
- package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
- package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
- package/src/scripts/_cli/upgrade_unattended.ts +548 -0
- package/src/scripts/_dispatch.bash +42 -9
- package/src/scripts/_lib/activation_ladder.ts +1 -1
- package/src/scripts/_lib/advisory_inventory.ts +405 -0
- package/src/scripts/_lib/advisory_notice.ts +270 -0
- package/src/scripts/_lib/advisory_sources.ts +752 -0
- package/src/scripts/_lib/advisory_verdicts.ts +363 -0
- package/src/scripts/_lib/agent_artifact_location.ts +177 -0
- package/src/scripts/_lib/agent_settings.ts +7 -12
- package/src/scripts/_lib/arrival_record.ts +217 -0
- package/src/scripts/_lib/asset_render_record.ts +247 -0
- package/src/scripts/_lib/billing_grant.ts +4 -2
- package/src/scripts/_lib/brand_voice_slot.ts +258 -0
- package/src/scripts/_lib/canary_status.ts +24 -0
- package/src/scripts/_lib/cc_transcript.ts +276 -0
- package/src/scripts/_lib/changelog_eras.ts +83 -0
- package/src/scripts/_lib/claim_phrases.ts +71 -0
- package/src/scripts/_lib/classify_update.ts +171 -0
- package/src/scripts/_lib/claude_builtin_names.ts +9 -4
- package/src/scripts/_lib/claude_hook_scope.ts +195 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
- package/src/scripts/_lib/codex_resident_set.ts +460 -0
- package/src/scripts/_lib/codex_skill_finder.ts +225 -0
- package/src/scripts/_lib/confusables.ts +19 -0
- package/src/scripts/_lib/consumer_impact.ts +199 -0
- package/src/scripts/_lib/content_class.ts +127 -0
- package/src/scripts/_lib/counted_probe.ts +68 -1
- package/src/scripts/_lib/credential_deny_rows.ts +151 -0
- package/src/scripts/_lib/credential_files.ts +367 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
- package/src/scripts/_lib/depth_flip.ts +141 -0
- package/src/scripts/_lib/design_lock.ts +117 -0
- package/src/scripts/_lib/design_sync_ledger.ts +142 -0
- package/src/scripts/_lib/design_sync_plan.ts +177 -0
- package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
- package/src/scripts/_lib/design_sync_verify.ts +99 -0
- package/src/scripts/_lib/design_system_claude_design.ts +323 -0
- package/src/scripts/_lib/design_system_import.ts +84 -6
- package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
- package/src/scripts/_lib/egress_credential_env.ts +35 -0
- package/src/scripts/_lib/egress_engine.ts +22 -0
- package/src/scripts/_lib/egress_known_values.ts +223 -0
- package/src/scripts/_lib/egress_normalize.ts +67 -0
- package/src/scripts/_lib/egress_prefixes.ts +42 -0
- package/src/scripts/_lib/egress_rules.ts +896 -0
- package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
- package/src/scripts/_lib/egress_sender_scan.ts +290 -0
- package/src/scripts/_lib/egress_session_table.ts +510 -0
- package/src/scripts/_lib/egress_text.ts +63 -0
- package/src/scripts/_lib/egress_token.ts +252 -0
- package/src/scripts/_lib/empty_cycles.ts +1 -1
- package/src/scripts/_lib/environment_detector.ts +45 -30
- package/src/scripts/_lib/exemption_shape.ts +75 -1
- package/src/scripts/_lib/floor_posture.ts +185 -0
- package/src/scripts/_lib/forge_protection.ts +140 -2
- package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
- package/src/scripts/_lib/guidelines_lane.ts +12 -1
- package/src/scripts/_lib/hand_kinds.ts +65 -0
- package/src/scripts/_lib/headless_invocation.ts +3 -3
- package/src/scripts/_lib/host_capability.ts +34 -2
- package/src/scripts/_lib/host_env_write.ts +39 -18
- package/src/scripts/_lib/host_listing_model.ts +14 -7
- package/src/scripts/_lib/identifier_redaction.ts +26 -0
- package/src/scripts/_lib/impact_bump.ts +70 -0
- package/src/scripts/_lib/install_reach_checks.ts +53 -1
- package/src/scripts/_lib/installed_layer.ts +31 -0
- package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
- package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/layer_form_corpus.ts +165 -0
- package/src/scripts/_lib/layer_form_decision.ts +248 -0
- package/src/scripts/_lib/layer_form_evidence.ts +112 -0
- package/src/scripts/_lib/lean_projection_mode.ts +32 -161
- package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
- package/src/scripts/_lib/loop_guards.ts +8 -120
- package/src/scripts/_lib/major_surface.ts +207 -0
- package/src/scripts/_lib/mcp_bridge.ts +30 -69
- package/src/scripts/_lib/merge_clearance_record.ts +384 -0
- package/src/scripts/_lib/neighbour_census.ts +18 -1
- package/src/scripts/_lib/orchestration_record.ts +61 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
- package/src/scripts/_lib/pin_advice.ts +49 -0
- package/src/scripts/_lib/platform_anchor.ts +222 -0
- package/src/scripts/_lib/procedure_checks.ts +5 -0
- package/src/scripts/_lib/project_tree_form.ts +134 -0
- package/src/scripts/_lib/projection_key_migration.ts +122 -0
- package/src/scripts/_lib/prompt_shape.ts +13 -2
- package/src/scripts/_lib/provenance_verify.ts +272 -0
- package/src/scripts/_lib/quota_parked.ts +27 -1
- package/src/scripts/_lib/ratification_artifact.ts +64 -1
- package/src/scripts/_lib/ratification_subject.ts +508 -46
- package/src/scripts/_lib/release_findings_ingest.ts +52 -5
- package/src/scripts/_lib/release_highlights.ts +72 -2
- package/src/scripts/_lib/release_settings_surface.ts +392 -0
- package/src/scripts/_lib/review_round.ts +134 -0
- package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
- package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
- package/src/scripts/_lib/roadmap_step_size.ts +75 -0
- package/src/scripts/_lib/run_checkpoint.ts +60 -3
- package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
- package/src/scripts/_lib/scope_guard.sh +64 -5
- package/src/scripts/_lib/scoped_projection.ts +136 -3
- package/src/scripts/_lib/secret_detector.ts +24 -103
- package/src/scripts/_lib/security_fix.ts +429 -0
- package/src/scripts/_lib/security_fix_context.ts +133 -0
- package/src/scripts/_lib/self_repair.ts +69 -39
- package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
- package/src/scripts/_lib/self_repair_payload.ts +86 -0
- package/src/scripts/_lib/session_eol.ts +3 -0
- package/src/scripts/_lib/session_pr_watch.ts +207 -0
- package/src/scripts/_lib/session_register.ts +51 -1
- package/src/scripts/_lib/session_tag.ts +51 -0
- package/src/scripts/_lib/settings_removed_keys.ts +30 -0
- package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
- package/src/scripts/_lib/skill_catalogue.ts +66 -25
- package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
- package/src/scripts/_lib/skill_leases.ts +203 -0
- package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
- package/src/scripts/_lib/skill_materialisation.ts +388 -0
- package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
- package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
- package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
- package/src/scripts/_lib/skill_origin.ts +21 -1
- package/src/scripts/_lib/skill_reach.ts +342 -0
- package/src/scripts/_lib/source_shape.ts +7 -2
- package/src/scripts/_lib/sqlite_guard.ts +1 -1
- package/src/scripts/_lib/step_anatomy.ts +330 -0
- package/src/scripts/_lib/subagent_capsule.ts +8 -2
- package/src/scripts/_lib/subagent_native_fields.ts +30 -0
- package/src/scripts/_lib/subagent_spawn.ts +36 -0
- package/src/scripts/_lib/subagent_steering.ts +367 -0
- package/src/scripts/_lib/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_filled_counter.ts +287 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1455 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_delta.ts +89 -6
- package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
- package/src/scripts/_lib/tool_result_census.ts +62 -0
- package/src/scripts/_lib/trigger_routers.ts +1 -0
- package/src/scripts/_lib/turnaround_throughput.ts +378 -0
- package/src/scripts/_lib/ui_surface.ts +22 -0
- package/src/scripts/_lib/unattended_gates.ts +100 -0
- package/src/scripts/_lib/undeployed_fixes.ts +34 -0
- package/src/scripts/_lib/update_check.ts +143 -12
- package/src/scripts/_lib/update_invite.ts +116 -0
- package/src/scripts/_lib/update_notice.ts +259 -0
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +31 -19
- package/src/scripts/_lib/version_order.ts +146 -0
- package/src/scripts/_lib/worker_reuse.ts +191 -0
- package/src/scripts/_lib/workspace_secrets.ts +273 -0
- package/src/scripts/_lib/worktree_git.ts +67 -0
- package/src/scripts/_lib/worktree_ignored.ts +116 -0
- package/src/scripts/adoption_status.ts +330 -3
- package/src/scripts/adr_cite_check.ts +93 -0
- package/src/scripts/advisories.ts +803 -0
- package/src/scripts/ai-image/adapters/flux.sh +1 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
- package/src/scripts/ai-image/adapters/recraft.sh +1 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
- package/src/scripts/ai-video/adapters/fal.sh +1 -0
- package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
- package/src/scripts/ai-video/adapters/kling.sh +1 -0
- package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
- package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
- package/src/scripts/ai-video/adapters/replicate.sh +1 -0
- package/src/scripts/ai-video/adapters/sora.sh +1 -0
- package/src/scripts/ai-video/adapters/syncso.sh +1 -0
- package/src/scripts/ai-video/stitch.sh +115 -2
- package/src/scripts/ai_council/airgap.ts +1 -0
- package/src/scripts/ai_council/api_transport.ts +27 -4
- package/src/scripts/ai_council/budget_guard.ts +300 -11
- package/src/scripts/ai_council/bundler.ts +20 -29
- package/src/scripts/ai_council/chairman.ts +17 -2
- package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
- package/src/scripts/ai_council/cli_launch_env.ts +54 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
- package/src/scripts/ai_council/clients.ts +55 -73
- package/src/scripts/ai_council/config.ts +16 -22
- package/src/scripts/ai_council/council_egress.ts +167 -0
- package/src/scripts/ai_council/exposure_ledger.ts +117 -0
- package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
- package/src/scripts/ai_council/free_route.ts +216 -0
- package/src/scripts/ai_council/free_route_catalog.ts +173 -0
- package/src/scripts/ai_council/free_route_client.ts +95 -0
- package/src/scripts/ai_council/free_rung.ts +61 -0
- package/src/scripts/ai_council/hand_payload.ts +230 -0
- package/src/scripts/ai_council/hand_schemas.ts +123 -0
- package/src/scripts/ai_council/jury_aggregate.ts +155 -1
- package/src/scripts/ai_council/kind_flip.ts +221 -0
- package/src/scripts/ai_council/kind_flip_state.ts +19 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
- package/src/scripts/ai_council/modification_review.ts +98 -5
- package/src/scripts/ai_council/necessity.ts +7 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -16
- package/src/scripts/ai_council/pricing.ts +10 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
- package/src/scripts/ai_council/response_render.ts +27 -4
- package/src/scripts/ai_council/round_reservations.ts +119 -0
- package/src/scripts/ai_council/route_chooser.ts +161 -0
- package/src/scripts/ai_council/route_liveness.ts +152 -0
- package/src/scripts/ai_council/route_member.ts +52 -0
- package/src/scripts/ai_council/seat_policy.ts +40 -0
- package/src/scripts/ai_council/seat_resume.ts +40 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
- package/src/scripts/ai_council/spend_gate.ts +18 -2
- package/src/scripts/ai_council/status_surface.ts +37 -0
- package/src/scripts/ai_council/transport_resolver.ts +15 -18
- package/src/scripts/analysis_analysts.ts +226 -0
- package/src/scripts/analysis_anchors.ts +140 -0
- package/src/scripts/analysis_and_optimize.ts +44 -0
- package/src/scripts/analysis_emit.ts +150 -0
- package/src/scripts/analysis_exchange.ts +186 -0
- package/src/scripts/analysis_gate.ts +158 -0
- package/src/scripts/analysis_inbox_final.ts +173 -0
- package/src/scripts/analysis_ledger.ts +119 -0
- package/src/scripts/analysis_pr_optimize.ts +219 -0
- package/src/scripts/analysis_pr_review.ts +240 -0
- package/src/scripts/analysis_pr_target.ts +121 -0
- package/src/scripts/analysis_prompts.ts +130 -0
- package/src/scripts/analysis_publish.ts +358 -0
- package/src/scripts/analysis_questions.ts +78 -0
- package/src/scripts/analysis_run.ts +248 -0
- package/src/scripts/analysis_run_record.ts +210 -0
- package/src/scripts/analysis_target.ts +343 -0
- package/src/scripts/analysis_validate.ts +161 -0
- package/src/scripts/anchor_eval_falsify.ts +1 -1
- package/src/scripts/arrival_report.ts +115 -0
- package/src/scripts/ask_transport.ts +284 -35
- package/src/scripts/backfill_model_tier.ts +4 -5
- package/src/scripts/before_complete_hook.ts +48 -2
- package/src/scripts/bench_hook_latency.ts +3 -3
- package/src/scripts/bench_procedure_cursor.ts +440 -0
- package/src/scripts/bootstrap.sh +3 -3
- package/src/scripts/build_exit_code_register.ts +440 -0
- package/src/scripts/build_proof.ts +23 -1
- package/src/scripts/cache_realization_report.ts +155 -14
- package/src/scripts/canary_liveness.ts +117 -0
- package/src/scripts/chat_history.ts +12 -15
- package/src/scripts/check_account_surface.ts +318 -0
- package/src/scripts/check_agent_artifact_location.ts +17 -160
- package/src/scripts/check_bundle_path_leakage.ts +6 -0
- package/src/scripts/check_ci_local_parity.ts +21 -13
- package/src/scripts/check_claims.ts +77 -2
- package/src/scripts/check_completion_review.ts +34 -1
- package/src/scripts/check_concern_admissions.ts +41 -5
- package/src/scripts/check_consumer_scope_flip.ts +1 -1
- package/src/scripts/check_context_paths.ts +2 -0
- package/src/scripts/check_council_layout.ts +9 -0
- package/src/scripts/check_credential_spelling.ts +267 -0
- package/src/scripts/check_egress_mutations.ts +239 -0
- package/src/scripts/check_enforcement_coverage.ts +16 -3
- package/src/scripts/check_estate_count.ts +16 -1
- package/src/scripts/check_finding_dispositions.ts +147 -0
- package/src/scripts/check_gate_coverage.ts +123 -21
- package/src/scripts/check_gate_reachability.ts +16 -2
- package/src/scripts/check_generator_sync.ts +46 -0
- package/src/scripts/check_hook_bundle_composition.ts +139 -1
- package/src/scripts/check_host_docs_digest.ts +142 -5
- package/src/scripts/check_kernel_edit_ratified.ts +301 -76
- package/src/scripts/check_kernel_rule_bundle.ts +14 -10
- package/src/scripts/check_knowledge_cards.ts +83 -3
- package/src/scripts/check_memory.ts +13 -3
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_permission_deny_syntax.ts +247 -0
- package/src/scripts/check_platform_anchor.ts +243 -0
- package/src/scripts/check_proposal.ts +183 -1
- package/src/scripts/check_reach_channels.ts +5 -3
- package/src/scripts/check_references.ts +5 -2
- package/src/scripts/check_release_manifest_content.ts +33 -0
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_rule_invariants.ts +9 -1
- package/src/scripts/check_skill_body_budget.ts +343 -0
- package/src/scripts/check_skill_requires.ts +137 -1
- package/src/scripts/check_step_receipts.ts +246 -0
- package/src/scripts/check_structural_breaking.ts +7 -1
- package/src/scripts/check_suppression_hygiene.ts +8 -0
- package/src/scripts/check_test_weakening.ts +14 -0
- package/src/scripts/check_token_quality_golden.ts +5 -1
- package/src/scripts/check_update_banner.ts +50 -3
- package/src/scripts/check_verify_expectation_delta.ts +2 -1
- package/src/scripts/check_voice_lexicon.ts +531 -0
- package/src/scripts/ci_os_attribution.ts +327 -0
- package/src/scripts/ci_platform_scope.ts +69 -0
- package/src/scripts/ci_settle.ts +4 -1
- package/src/scripts/ci_status.ts +0 -1
- package/src/scripts/ci_time_to_green.ts +748 -0
- package/src/scripts/classify_merge_risk.ts +407 -19
- package/src/scripts/code_graph/sqlite_store.ts +1 -1
- package/src/scripts/compile_trigger_evals.ts +353 -0
- package/src/scripts/condense.ts +25 -31
- package/src/scripts/consumer_matrix.ts +61 -3
- package/src/scripts/council_availability_hook.ts +12 -4
- package/src/scripts/council_cli.ts +48 -38
- package/src/scripts/cross_repo_retrieve.ts +9 -72
- package/src/scripts/design_lock.ts +106 -0
- package/src/scripts/design_slop_rules.ts +30 -0
- package/src/scripts/design_sync.ts +264 -0
- package/src/scripts/design_system_import.ts +30 -13
- package/src/scripts/dispatch_economy_report.ts +46 -1
- package/src/scripts/dispatch_r2_reviewer.ts +41 -5
- package/src/scripts/egress_canary.ts +166 -0
- package/src/scripts/egress_sender_census.ts +101 -0
- package/src/scripts/external_sources_denylist.json +94 -12
- package/src/scripts/generate_catalog.ts +6 -2
- package/src/scripts/generate_owned_digest.ts +163 -0
- package/src/scripts/generate_reference_toc.ts +143 -0
- package/src/scripts/generate_subagent_floor.ts +11 -1
- package/src/scripts/handoff_context_hook.ts +34 -0
- package/src/scripts/hook_carrier_census.ts +263 -0
- package/src/scripts/hook_chunks.d.mts +12 -0
- package/src/scripts/hook_chunks.mjs +114 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +65 -42
- package/src/scripts/hooks/block_config_weakening.ts +127 -3
- package/src/scripts/hooks/block_credential_reads.ts +165 -0
- package/src/scripts/hooks/block_no_verify.ts +47 -23
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +54 -8
- package/src/scripts/hooks/category_a.ts +202 -25
- package/src/scripts/hooks/concern_failure_policy.ts +6 -6
- package/src/scripts/hooks/concern_registry.ts +31 -6
- package/src/scripts/hooks/concern_registry_types.ts +11 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
- package/src/scripts/hooks/design_pass_hook.ts +199 -13
- package/src/scripts/hooks/dispatch_hook.ts +13 -12
- package/src/scripts/hooks/egress_engine_loader.ts +125 -0
- package/src/scripts/hooks/egress_stage.ts +440 -0
- package/src/scripts/hooks/hook_stdin.ts +29 -4
- package/src/scripts/hooks/host_docs_pages.ts +194 -0
- package/src/scripts/hooks/host_docs_pages.yaml +75 -0
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.yaml +22 -21
- package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
- package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
- package/src/scripts/hooks/lazy_concern.ts +148 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
- package/src/scripts/hooks/payload_stub.ts +16 -6
- package/src/scripts/hooks/permission_gate.ts +7 -7
- package/src/scripts/hooks/push_settle_hook.ts +32 -3
- package/src/scripts/hooks/replay_hook.ts +43 -0
- package/src/scripts/hooks/reread_guard_hook.ts +87 -10
- package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +8 -1
- package/src/scripts/hooks/session_eol_hook.ts +48 -1
- package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
- package/src/scripts/hooks/state_io.ts +2 -2
- package/src/scripts/hooks/svg_obligation.ts +553 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
- package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
- package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
- package/src/scripts/hooks_doctor.ts +31 -0
- package/src/scripts/hooks_status.ts +58 -3
- package/src/scripts/inbox_source_census.ts +74 -13
- package/src/scripts/install +25 -3
- package/src/scripts/install.ts +60 -91
- package/src/scripts/interruption_report.ts +11 -1
- package/src/scripts/layer_baseline_report.ts +267 -0
- package/src/scripts/learning_sidecar.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +3 -0
- package/src/scripts/lint_blocker_citations.ts +104 -0
- package/src/scripts/lint_breaking_changes_index.ts +40 -7
- package/src/scripts/lint_consolidation_lineage.ts +150 -19
- package/src/scripts/lint_consumer_internal_refs.ts +90 -42
- package/src/scripts/lint_context_spine_usage.ts +21 -0
- package/src/scripts/lint_design_antipattern_parity.ts +39 -7
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +31 -0
- package/src/scripts/lint_example_fences.ts +11 -2
- package/src/scripts/lint_ghostwriter_source.ts +42 -10
- package/src/scripts/lint_hook_manifest.ts +94 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
- package/src/scripts/lint_mcp_config_security.ts +9 -11
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_plan_risk_register.ts +28 -1
- package/src/scripts/lint_positioning.ts +4 -4
- package/src/scripts/lint_provenance.ts +1 -0
- package/src/scripts/lint_roadmap_blockers.ts +65 -4
- package/src/scripts/lint_roadmap_complexity.ts +98 -0
- package/src/scripts/lint_skill_link_reach.ts +251 -9
- package/src/scripts/lint_skill_procedures.ts +252 -0
- package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
- package/src/scripts/lint_subagent_determinism.ts +14 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
- package/src/scripts/mcp_registry_submit.sh +2 -2
- package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
- package/src/scripts/mcp_server/suggest_skill.ts +89 -4
- package/src/scripts/mcp_server/tools.ts +2 -33
- package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
- package/src/scripts/measure_turn_end_gate.ts +61 -1
- package/src/scripts/merge_clearance.ts +225 -0
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/network_sources.ts +236 -0
- package/src/scripts/no_go_deny_rows.ts +225 -0
- package/src/scripts/orchestration_record.ts +15 -2
- package/src/scripts/plan_test_shards.ts +103 -0
- package/src/scripts/pr_url_reminder_hook.ts +10 -0
- package/src/scripts/print_required_checks.ts +5 -5
- package/src/scripts/probe_depth_shadow.ts +406 -0
- package/src/scripts/probe_turnaround.ts +342 -10
- package/src/scripts/ratification_subject.ts +176 -0
- package/src/scripts/rdp_gate_classify.ts +1 -0
- package/src/scripts/rdp_quality_eval.ts +1 -0
- package/src/scripts/release.ts +26 -55
- package/src/scripts/release_drill.ts +52 -23
- package/src/scripts/release_env.ts +37 -0
- package/src/scripts/release_publication.ts +11 -1
- package/src/scripts/report_consumer_gate_reach.ts +233 -0
- package/src/scripts/report_merge_gate_load.ts +295 -0
- package/src/scripts/report_project_contract.ts +123 -0
- package/src/scripts/report_reducible_classes.ts +342 -0
- package/src/scripts/report_required_checks_drift.ts +5 -3
- package/src/scripts/report_skill_host_census.ts +199 -0
- package/src/scripts/report_standing_payload_by_host.ts +7 -7
- package/src/scripts/retro.ts +758 -0
- package/src/scripts/retro_facts.ts +575 -0
- package/src/scripts/retro_queue.ts +739 -0
- package/src/scripts/retro_session_facts.ts +218 -0
- package/src/scripts/retro_sweep.ts +493 -0
- package/src/scripts/retro_triage.ts +126 -0
- package/src/scripts/roadmap_context.ts +2 -2
- package/src/scripts/roadmap_drain_queue.ts +601 -0
- package/src/scripts/run_supervise.ts +24 -2
- package/src/scripts/schemas/agent-settings.schema.json +0 -16
- package/src/scripts/schemas/command.schema.json +3 -3
- package/src/scripts/schemas/review-findings.schema.json +8 -0
- package/src/scripts/schemas/skill.schema.json +7 -6
- package/src/scripts/schemas/subagent.schema.json +33 -2
- package/src/scripts/score_skill_selection.ts +5 -2
- package/src/scripts/second_brain_retrieval.ts +1 -0
- package/src/scripts/second_brain_run.ts +1 -0
- package/src/scripts/self_repair_cli.ts +563 -87
- package/src/scripts/self_review_gate.ts +59 -4
- package/src/scripts/session_register_hook.ts +91 -4
- package/src/scripts/sessions_cli.ts +100 -5
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
- package/src/scripts/skill_trigger_eval.ts +4 -2
- package/src/scripts/source_adapters.ts +183 -0
- package/src/scripts/step_receipt.ts +100 -0
- package/src/scripts/sync_pr_branch.ts +4 -0
- package/src/scripts/test_council_qualification.ts +1 -1
- package/src/scripts/trigger_eval_grandfather.json +3 -49
- package/src/scripts/trigger_eval_rotation.ts +31 -3
- package/src/scripts/ui_conformance_probe.ts +405 -1
- package/src/scripts/update_counts.ts +230 -11
- package/src/scripts/update_invite_hook.ts +245 -0
- package/src/scripts/update_notice_hook.ts +298 -0
- package/src/scripts/validate_frontmatter.ts +85 -0
- package/src/scripts/worker_reuse_shadow_report.ts +121 -0
- package/src/scripts/worktree_cleanup_check.ts +915 -121
- package/src/server/io/yamlIO.ts +2 -2
- package/src/server/schemas/settings.ts +37 -23
- package/src/shared/brandTokenDocument.ts +46 -0
- package/src/shared/brandTokenPaths.ts +43 -0
- package/src/shared/settingsCarveOut.ts +0 -8
- package/src/shared/skillRanking.ts +106 -5
- package/src/shared/userMd/formAdapter.ts +15 -1
- package/src/shared/userMd/schema.ts +22 -0
- package/src/templates/agent-user.md +4 -0
- package/src/templates/agent-user.yml +4 -0
- package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
- package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
- package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
- package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
- package/dist/cli-delegate/chunk-MSUL5NYP.js +0 -1123
- package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
- package/dist/ui/assets/index-C3djEJah.js +0 -23
- package/src/scripts/_lib/continuation_ladder.ts +0 -335
- package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
|
@@ -21,13 +21,20 @@
|
|
|
21
21
|
* `lint_blocker_citations`): line numbers drift, so a miss already in the tree
|
|
22
22
|
* is drift rather than a new defect, and the count may only fall.
|
|
23
23
|
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* ./scripts-run src/scripts/lint_blocker_citations
|
|
26
|
+
* ./scripts-run src/scripts/lint_blocker_citations --root <repo>
|
|
27
|
+
* ./scripts-run src/scripts/lint_blocker_citations --self-test
|
|
28
|
+
*
|
|
24
29
|
* Exit codes: 0 within the ratchet · 1 above it · 2 usage error.
|
|
25
30
|
*/
|
|
26
31
|
import * as fs from 'node:fs';
|
|
32
|
+
import * as os from 'node:os';
|
|
27
33
|
import * as path from 'node:path';
|
|
28
34
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
29
35
|
|
|
30
36
|
import { checkRatchet } from './_lib/gate_baseline.js';
|
|
37
|
+
import { runGateCli, runSelfTest } from './_lib/gate_self_test.js';
|
|
31
38
|
import { reportScanned } from './_lib/scan_scope.js';
|
|
32
39
|
|
|
33
40
|
type MissKind = 'missing-file' | 'beyond-end';
|
|
@@ -133,11 +140,108 @@ function scanTree(root: string): { misses: Miss[]; scanned: number; citations: n
|
|
|
133
140
|
|
|
134
141
|
const _DEFAULT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
135
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Five fixtures over a temporary tree, driven through the real CLI.
|
|
145
|
+
*
|
|
146
|
+
* Each fixture carries its own baselines file pinned at 0, so the ratchet is
|
|
147
|
+
* out of the way and a single planted miss has to redden. That is the one thing
|
|
148
|
+
* the repository's own run cannot show: on the real tree this gate sits two
|
|
149
|
+
* below its baseline, so a planted citation reads green there — which is why
|
|
150
|
+
* this gate's `gate-coverage.yml` row carries `no_canary_reason` and leans on
|
|
151
|
+
* exactly these cases instead.
|
|
152
|
+
*/
|
|
153
|
+
function selfTest(): number {
|
|
154
|
+
const repoRoot = _DEFAULT_ROOT;
|
|
155
|
+
const rel = 'src/scripts/lint_blocker_citations.ts';
|
|
156
|
+
const BASELINE = JSON.stringify({
|
|
157
|
+
gates: {
|
|
158
|
+
lint_blocker_citations: {
|
|
159
|
+
count: 0,
|
|
160
|
+
landed: '2026-10-13',
|
|
161
|
+
falsifier: 'self-test fixture — pinned at zero so one planted miss must redden',
|
|
162
|
+
note: 'Self-test fixture baseline. Not a tree reading.',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
const over = (blockers: string, extra?: { file: string; body: string }): (() => number) => (): number => {
|
|
168
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'blocker-cites-self-'));
|
|
169
|
+
try {
|
|
170
|
+
const roadmaps = path.join(dir, 'agents', 'roadmaps');
|
|
171
|
+
fs.mkdirSync(roadmaps, { recursive: true });
|
|
172
|
+
fs.mkdirSync(path.join(dir, 'src', 'config'), { recursive: true });
|
|
173
|
+
fs.writeFileSync(path.join(dir, 'src', 'config', 'gate-violation-baselines.json'), BASELINE);
|
|
174
|
+
if (extra !== undefined) {
|
|
175
|
+
const abs = path.join(dir, extra.file);
|
|
176
|
+
fs.mkdirSync(path.dirname(abs), { recursive: true });
|
|
177
|
+
fs.writeFileSync(abs, extra.body);
|
|
178
|
+
}
|
|
179
|
+
fs.writeFileSync(path.join(roadmaps, 'road-to-fixture.md'), blockers);
|
|
180
|
+
return runGateCli(repoRoot, rel, ['--root', dir], repoRoot);
|
|
181
|
+
} finally {
|
|
182
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const THREE_LINES = 'one\ntwo\nthree\n';
|
|
187
|
+
|
|
188
|
+
return runSelfTest({
|
|
189
|
+
gate: 'lint_blocker_citations',
|
|
190
|
+
minCases: 5,
|
|
191
|
+
minRejectCases: 2,
|
|
192
|
+
cases: [
|
|
193
|
+
{
|
|
194
|
+
name: 'a citation whose file does not exist is rejected',
|
|
195
|
+
expect: 'reject',
|
|
196
|
+
run: over('## Blockers\n\nResolved when `src/scripts/nope.ts:12` says so.\n'),
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'a citation past the end of an existing file is rejected',
|
|
200
|
+
expect: 'reject',
|
|
201
|
+
run: over('## Blockers\n\nResolved when `src/scripts/real.ts:99` says so.\n', {
|
|
202
|
+
file: 'src/scripts/real.ts',
|
|
203
|
+
body: THREE_LINES,
|
|
204
|
+
}),
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'a citation inside an existing file is accepted',
|
|
208
|
+
expect: 'accept',
|
|
209
|
+
run: over('## Blockers\n\nResolved when `src/scripts/real.ts:2` says so.\n', {
|
|
210
|
+
file: 'src/scripts/real.ts',
|
|
211
|
+
body: THREE_LINES,
|
|
212
|
+
}),
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'a bare `:12` with no path is not a citation and is accepted',
|
|
216
|
+
expect: 'accept',
|
|
217
|
+
run: over('## Blockers\n\nResolved when the block at :12 says so.\n'),
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: 'the same dead citation OUTSIDE the Blockers section is accepted',
|
|
221
|
+
expect: 'accept',
|
|
222
|
+
run: over('## Context\n\nSee `src/scripts/nope.ts:12`.\n\n## Goal\n\nNothing.\n'),
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: 'a roadmap tree with no Blockers section at all is accepted',
|
|
226
|
+
expect: 'accept',
|
|
227
|
+
run: over('# Road to nothing\n\nNo blockers here.\n'),
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
136
233
|
function main(argv: string[] = process.argv.slice(2)): number {
|
|
137
234
|
let root = _DEFAULT_ROOT;
|
|
138
235
|
let baselineRoot = _DEFAULT_ROOT;
|
|
139
236
|
for (let i = 0; i < argv.length; i += 1) {
|
|
140
237
|
const arg = argv[i];
|
|
238
|
+
if (arg === '--self-test') {
|
|
239
|
+
if (process.env['GATE_SELF_TEST_CHILD'] === '1') {
|
|
240
|
+
process.stderr.write('lint_blocker_citations: --self-test does not recurse\n');
|
|
241
|
+
return 2;
|
|
242
|
+
}
|
|
243
|
+
return selfTest();
|
|
244
|
+
}
|
|
141
245
|
if (arg === '--root') {
|
|
142
246
|
const v = argv[i + 1];
|
|
143
247
|
if (v === undefined) {
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
* breaking note under `## [Unreleased]` is WIP and never trips the gate.
|
|
15
15
|
*
|
|
16
16
|
* REQUIREMENT: when triggered, the same diff must also modify
|
|
17
|
-
* `BREAKING_CHANGES.md
|
|
17
|
+
* `BREAKING_CHANGES.md`, unless the index already carries a by-major row
|
|
18
|
+
* (`| **N.0.0** |`) for that major — the row the Pending workflow lands on main
|
|
19
|
+
* before the cut, which the release diff then never touches.
|
|
18
20
|
*
|
|
19
21
|
* Escape hatch (mirrors `check_structural_breaking.ts`'s `ci-override` trailer):
|
|
20
22
|
* an own-line trailer `ci-override: breaking-index-override` (the bare token
|
|
@@ -95,23 +97,45 @@ export function added_released_breaking_majors(
|
|
|
95
97
|
return added;
|
|
96
98
|
}
|
|
97
99
|
|
|
100
|
+
// A by-major row opens with the version in bold: `| **17.0.0** | 2026-10-21 | …`.
|
|
101
|
+
const INDEX_ROW_RE = /^\|\s*\*\*(?<version>\d+\.\d+\.\d+)\*\*\s*\|/;
|
|
102
|
+
|
|
103
|
+
/** The majors `BREAKING_CHANGES.md` already carries a by-major row for. */
|
|
104
|
+
export function indexed_majors(indexLines: readonly string[]): Set<string> {
|
|
105
|
+
const found = new Set<string>();
|
|
106
|
+
for (const ln of indexLines) {
|
|
107
|
+
const m = INDEX_ROW_RE.exec(ln);
|
|
108
|
+
if (m) found.add(m.groups!['version']!);
|
|
109
|
+
}
|
|
110
|
+
return found;
|
|
111
|
+
}
|
|
112
|
+
|
|
98
113
|
export interface CheckResult {
|
|
99
114
|
readonly addedMajors: readonly string[];
|
|
115
|
+
/** Added majors with no by-major row in the index. */
|
|
116
|
+
readonly unindexedMajors: readonly string[];
|
|
100
117
|
readonly indexChanged: boolean;
|
|
101
118
|
readonly overridden: boolean;
|
|
102
119
|
readonly violation: boolean;
|
|
103
120
|
}
|
|
104
121
|
|
|
105
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* Pure decision: violation iff a released BREAKING was added for a major the
|
|
124
|
+
* index carries no row for, the index was not touched, and no override cleared
|
|
125
|
+
* it. A row landed before the cut satisfies the index: the Pending workflow
|
|
126
|
+
* writes it on main, so the release diff itself never touches the file.
|
|
127
|
+
*/
|
|
106
128
|
export function evaluate(
|
|
107
129
|
oldLines: readonly string[],
|
|
108
130
|
newLines: readonly string[],
|
|
109
131
|
indexChanged: boolean,
|
|
110
132
|
overridden: boolean,
|
|
133
|
+
indexed: ReadonlySet<string> = new Set(),
|
|
111
134
|
): CheckResult {
|
|
112
135
|
const addedMajors = added_released_breaking_majors(oldLines, newLines);
|
|
113
|
-
const
|
|
114
|
-
|
|
136
|
+
const unindexedMajors = addedMajors.filter((v) => !indexed.has(v));
|
|
137
|
+
const violation = unindexedMajors.length > 0 && !indexChanged && !overridden;
|
|
138
|
+
return { addedMajors, unindexedMajors, indexChanged, overridden, violation };
|
|
115
139
|
}
|
|
116
140
|
|
|
117
141
|
// ─── git helpers (CLI only) ──────────────────────────────────────────────────
|
|
@@ -267,12 +291,21 @@ function main(argv?: readonly string[]): number {
|
|
|
267
291
|
const log = _git('log', '--format=%B', `${base}..HEAD`);
|
|
268
292
|
const overridden = OVERRIDE_RE.test(log) || process.env['BREAKING_INDEX_OVERRIDE'] === '1';
|
|
269
293
|
|
|
270
|
-
const
|
|
294
|
+
const indexPath = path.join(REPO_ROOT, INDEX_REL);
|
|
295
|
+
const indexed = fs.existsSync(indexPath)
|
|
296
|
+
? indexed_majors(_splitlines(fs.readFileSync(indexPath, 'utf-8')))
|
|
297
|
+
: new Set<string>();
|
|
298
|
+
|
|
299
|
+
const result = evaluate(oldLines, newLines, indexChanged, overridden, indexed);
|
|
271
300
|
|
|
272
301
|
if (!result.violation) {
|
|
273
302
|
if (!args.quiet) {
|
|
274
303
|
if (result.addedMajors.length > 0) {
|
|
275
|
-
const why = result.
|
|
304
|
+
const why = result.indexChanged
|
|
305
|
+
? `${INDEX_REL} updated`
|
|
306
|
+
: result.unindexedMajors.length === 0
|
|
307
|
+
? `an existing ${INDEX_REL} row`
|
|
308
|
+
: 'override';
|
|
276
309
|
process.stdout.write(
|
|
277
310
|
`✅ lint-breaking-changes-index: ${result.addedMajors.length} released ` +
|
|
278
311
|
`BREAKING addition(s), cleared by ${why}\n`,
|
|
@@ -290,7 +323,7 @@ function main(argv?: readonly string[]): number {
|
|
|
290
323
|
`❌ lint-breaking-changes-index: released BREAKING entr(y/ies) added to ${CHANGELOG_REL} ` +
|
|
291
324
|
`without a matching ${INDEX_REL} change:\n`,
|
|
292
325
|
);
|
|
293
|
-
for (const v of result.
|
|
326
|
+
for (const v of result.unindexedMajors) {
|
|
294
327
|
process.stderr.write(` - ## [${v}] gained a ### BREAKING section\n`);
|
|
295
328
|
}
|
|
296
329
|
process.stderr.write(
|
|
@@ -44,6 +44,15 @@
|
|
|
44
44
|
* parent set does not name.
|
|
45
45
|
* - `missing-parent` a declared parent with no matching file — the lineage
|
|
46
46
|
* names something nobody can open.
|
|
47
|
+
* - `unresolvable-parent` a declared parent named only in prose: no slug, so
|
|
48
|
+
* no file could ever match it. Distinct from
|
|
49
|
+
* `missing-parent`, which sends the reader looking for a
|
|
50
|
+
* file.
|
|
51
|
+
*
|
|
52
|
+
* A sibling that declares itself DOWNSTREAM of the consolidating file
|
|
53
|
+
* (`supersedes:`, `supersedes_proposals:`, or a `relates:` entry with
|
|
54
|
+
* `relation: extends`) is a successor, not an omission, and is not reported
|
|
55
|
+
* as `omitted-sibling`.
|
|
47
56
|
* - `overlapping-sets` two artifacts in one folder declaring overlapping parent
|
|
48
57
|
* sets while neither names the other: an artifact that
|
|
49
58
|
* reads as the settled answer while a peer of equal
|
|
@@ -121,7 +130,7 @@ export interface Declaration {
|
|
|
121
130
|
}
|
|
122
131
|
|
|
123
132
|
export interface Finding {
|
|
124
|
-
code: 'omitted-sibling' | 'missing-parent' | 'overlapping-sets' | 'claims-without-field';
|
|
133
|
+
code: 'omitted-sibling' | 'missing-parent' | 'unresolvable-parent' | 'overlapping-sets' | 'claims-without-field';
|
|
125
134
|
folder: string;
|
|
126
135
|
file: string;
|
|
127
136
|
detail: string;
|
|
@@ -134,16 +143,23 @@ export interface Finding {
|
|
|
134
143
|
* with or without `.md`, with a download-collision `(1)` suffix, and followed by
|
|
135
144
|
* arbitrary prose (`road-to-gated-self-evolution` v3 (Claude-Session) — P0–P7).
|
|
136
145
|
* Everything after the first token is commentary.
|
|
146
|
+
*
|
|
147
|
+
* A YAML scalar may also arrive quoted. One matching pair of wrapping quotes is
|
|
148
|
+
* removed — around the whole input and around the selected token — and nothing
|
|
149
|
+
* else, so an apostrophe inside a slug survives (D6 of
|
|
150
|
+
* road-to-gates-that-read-what-was-written). Callers pass the raw value.
|
|
137
151
|
*/
|
|
138
152
|
export function normalizeParent(raw: string): string {
|
|
139
153
|
let s = raw.trim();
|
|
140
154
|
s = s.replace(/^[-*]\s+/, '');
|
|
155
|
+
s = unwrapQuotes(s, true);
|
|
141
156
|
const tick = /`([^`]+)`/.exec(s);
|
|
142
157
|
if (tick) {
|
|
143
158
|
s = tick[1] as string;
|
|
144
159
|
} else {
|
|
145
160
|
s = (s.split(/[\s—–,;|]/)[0] ?? '').trim();
|
|
146
161
|
}
|
|
162
|
+
s = unwrapQuotes(s, false);
|
|
147
163
|
s = s.replace(/^.*\//, '');
|
|
148
164
|
s = s.replace(/\.md$/i, '');
|
|
149
165
|
s = s.replace(/\(\d+\)$/, '');
|
|
@@ -154,6 +170,19 @@ export function normalizeParent(raw: string): string {
|
|
|
154
170
|
return s;
|
|
155
171
|
}
|
|
156
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Remove one matching pair of wrapping quotes. With `whole`, the pair must be
|
|
175
|
+
* the only occurrence of that quote character: `"a" — "b"` is two quoted
|
|
176
|
+
* strings, not one, and unwrapping it would glue a quote onto the first token.
|
|
177
|
+
*/
|
|
178
|
+
function unwrapQuotes(s: string, whole: boolean): string {
|
|
179
|
+
const q = s[0];
|
|
180
|
+
if (s.length < 2 || (q !== '"' && q !== "'") || s[s.length - 1] !== q) return s;
|
|
181
|
+
const inner = s.slice(1, -1);
|
|
182
|
+
if (whole && inner.includes(q)) return s;
|
|
183
|
+
return inner.trim();
|
|
184
|
+
}
|
|
185
|
+
|
|
157
186
|
function frontmatterList(fm: string, key: string): string[] | null {
|
|
158
187
|
const lines = fm.split(/\r?\n/);
|
|
159
188
|
const head = new RegExp(`^${key}:\\s*(.*)$`);
|
|
@@ -165,7 +194,7 @@ function frontmatterList(fm: string, key: string): string[] | null {
|
|
|
165
194
|
return inline
|
|
166
195
|
.slice(1, inline.lastIndexOf(']') === -1 ? undefined : inline.lastIndexOf(']'))
|
|
167
196
|
.split(',')
|
|
168
|
-
.map((x) => normalizeParent(x
|
|
197
|
+
.map((x) => normalizeParent(x))
|
|
169
198
|
.filter(Boolean);
|
|
170
199
|
}
|
|
171
200
|
const out: string[] = [];
|
|
@@ -185,6 +214,82 @@ function frontmatterList(fm: string, key: string): string[] | null {
|
|
|
185
214
|
return null;
|
|
186
215
|
}
|
|
187
216
|
|
|
217
|
+
/**
|
|
218
|
+
* The `relates:` entries of a frontmatter block that carry a DOWNSTREAM
|
|
219
|
+
* relation, as `{slug}` stems.
|
|
220
|
+
*
|
|
221
|
+
* Only `extends` is directional by declaration in the measured corpus; a
|
|
222
|
+
* generic `relates` names a neighbour without saying which came first, and
|
|
223
|
+
* reading it as succession would suppress real omissions. AI council
|
|
224
|
+
* 2026-10-16 (anthropic + openai, convergent): an allowlist of one, widened
|
|
225
|
+
* only on evidence that another relation value states a direction.
|
|
226
|
+
*/
|
|
227
|
+
const DOWNSTREAM_RELATIONS: ReadonlySet<string> = new Set(['extends']);
|
|
228
|
+
|
|
229
|
+
function downstreamRelates(fm: string): string[] {
|
|
230
|
+
const lines = fm.split(/\r?\n/);
|
|
231
|
+
const start = lines.findIndex((l) => /^relates:\s*$/.test(l));
|
|
232
|
+
if (start === -1) return [];
|
|
233
|
+
const out: string[] = [];
|
|
234
|
+
let slug: string | null = null;
|
|
235
|
+
const flush = (relation: string | null): void => {
|
|
236
|
+
if (slug && relation && DOWNSTREAM_RELATIONS.has(relation)) out.push(normalizeParent(slug));
|
|
237
|
+
};
|
|
238
|
+
let relation: string | null = null;
|
|
239
|
+
for (let j = start + 1; j < lines.length; j += 1) {
|
|
240
|
+
const line = lines[j] as string;
|
|
241
|
+
if (line.trim() === '' || /^\s*#/.test(line)) continue;
|
|
242
|
+
if (!/^\s/.test(line)) break;
|
|
243
|
+
const head = /^\s+-\s+(.*)$/.exec(line);
|
|
244
|
+
const body = head ? (head[1] as string) : line.trim();
|
|
245
|
+
if (head) {
|
|
246
|
+
flush(relation);
|
|
247
|
+
slug = null;
|
|
248
|
+
relation = null;
|
|
249
|
+
}
|
|
250
|
+
const kv = /^(slug|relation):\s*(.*)$/.exec(body);
|
|
251
|
+
if (!kv) continue;
|
|
252
|
+
const value = unwrapQuotes((kv[2] as string).replace(/#.*$/, '').trim(), false);
|
|
253
|
+
if (kv[1] === 'slug') slug = value;
|
|
254
|
+
else relation = value;
|
|
255
|
+
}
|
|
256
|
+
flush(relation);
|
|
257
|
+
return out.filter(Boolean);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* The stems this artifact declares itself DOWNSTREAM of: a supersession key
|
|
262
|
+
* (`supersedes:`, `supersedes_proposals:`) or a `relates:` entry with a
|
|
263
|
+
* directional relation. A sibling that names the consolidating file here was
|
|
264
|
+
* written knowing it, so it is a successor, never an undiscussed parent.
|
|
265
|
+
* Keyed on explicit declaration only — never on dates or file order.
|
|
266
|
+
*/
|
|
267
|
+
export function downstreamOf(text: string): string[] {
|
|
268
|
+
const fmMatch = FM_RE.exec(text);
|
|
269
|
+
if (!fmMatch) return [];
|
|
270
|
+
const fm = fmMatch[1] as string;
|
|
271
|
+
return [
|
|
272
|
+
...(frontmatterList(fm, 'supersedes') ?? []),
|
|
273
|
+
...(frontmatterList(fm, 'supersedes_proposals') ?? []),
|
|
274
|
+
...downstreamRelates(fm),
|
|
275
|
+
];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Whether a declared parent that resolves to no file is at least slug-shaped.
|
|
280
|
+
*
|
|
281
|
+
* A separator-joined name (`road-to-x`, `deep-plan-2026-09-30`) is a file
|
|
282
|
+
* somebody can be sent to look for: `missing-parent`. A single word — the
|
|
283
|
+
* first word of a prose title, `AC` — names no file at all, and reporting it as
|
|
284
|
+
* missing sends the reader hunting for one: `unresolvable-parent`.
|
|
285
|
+
*
|
|
286
|
+
* The council suggested a lowercase `road-to-*` grammar. It is widened on two
|
|
287
|
+
* measured facts: a non-roadmap parent is a supported shape (see
|
|
288
|
+
* analyseFolder's `present`), and the archived estate carries roadmap names
|
|
289
|
+
* with dots and capitals (`road-to-6.0.0-…`, `…-HUMAN-MEASUREMENT`).
|
|
290
|
+
*/
|
|
291
|
+
const SLUG_RE = /^[A-Za-z0-9._]+(?:[-_][A-Za-z0-9._]+)+$/;
|
|
292
|
+
|
|
188
293
|
/** A prose `**Label:**` heading followed by a `- ` bullet list. */
|
|
189
294
|
function proseList(body: string, label: RegExp): string[] | null {
|
|
190
295
|
const lines = body.split(/\r?\n/);
|
|
@@ -276,6 +381,8 @@ interface Artifact {
|
|
|
276
381
|
stem: string;
|
|
277
382
|
file: string;
|
|
278
383
|
decl: Declaration;
|
|
384
|
+
/** Stems this artifact declares itself a successor of — see downstreamOf. */
|
|
385
|
+
downstream: string[];
|
|
279
386
|
}
|
|
280
387
|
|
|
281
388
|
/**
|
|
@@ -313,18 +420,25 @@ export function analyseFolder(
|
|
|
313
420
|
surface: Surface = 'inbox',
|
|
314
421
|
): Finding[] {
|
|
315
422
|
const findings: Finding[] = [];
|
|
316
|
-
let
|
|
423
|
+
let entries: string[];
|
|
317
424
|
try {
|
|
318
|
-
|
|
425
|
+
entries = fs.readdirSync(dir);
|
|
319
426
|
} catch {
|
|
320
427
|
return findings;
|
|
321
428
|
}
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
429
|
+
const names = entries.filter((n) => ROADMAP_RE.test(n)).sort();
|
|
430
|
+
const artifacts: Artifact[] = names.map((n) => {
|
|
431
|
+
const text = fs.readFileSync(path.join(dir, n), 'utf-8');
|
|
432
|
+
return {
|
|
433
|
+
stem: n.replace(/\.md$/i, ''),
|
|
434
|
+
file: n,
|
|
435
|
+
decl: parseDeclaration(text, surface),
|
|
436
|
+
downstream: downstreamOf(text),
|
|
437
|
+
};
|
|
438
|
+
});
|
|
439
|
+
// A parent need not be named road-to-*: a dated deep-dive plan is a parent
|
|
440
|
+
// too, and only its absence makes it missing.
|
|
441
|
+
const present = new Set(entries.filter((n) => /\.md$/i.test(n)).map((n) => n.replace(/\.md$/i, '')));
|
|
328
442
|
|
|
329
443
|
for (const a of artifacts) {
|
|
330
444
|
if (a.decl.unparseable) {
|
|
@@ -339,18 +453,35 @@ export function analyseFolder(
|
|
|
339
453
|
if (a.decl.parents.length === 0) continue;
|
|
340
454
|
|
|
341
455
|
for (const p of a.decl.parents) {
|
|
342
|
-
if (
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
456
|
+
if (present.has(p)) continue;
|
|
457
|
+
findings.push(
|
|
458
|
+
SLUG_RE.test(p)
|
|
459
|
+
? {
|
|
460
|
+
code: 'missing-parent',
|
|
461
|
+
folder: folderLabel,
|
|
462
|
+
file: a.file,
|
|
463
|
+
detail: `declares parent \`${p}\` but no such file is present`,
|
|
464
|
+
}
|
|
465
|
+
: {
|
|
466
|
+
code: 'unresolvable-parent',
|
|
467
|
+
folder: folderLabel,
|
|
468
|
+
file: a.file,
|
|
469
|
+
detail: `declares a parent named only in prose (normalised to \`${p}\`) — no slug, so no file can match; name it by slug`,
|
|
470
|
+
},
|
|
471
|
+
);
|
|
350
472
|
}
|
|
351
473
|
const omitted =
|
|
352
474
|
surface === 'inbox'
|
|
353
|
-
? artifacts
|
|
475
|
+
? artifacts
|
|
476
|
+
.filter(
|
|
477
|
+
(b) =>
|
|
478
|
+
b.stem !== a.stem
|
|
479
|
+
&& !a.decl.parents.includes(b.stem)
|
|
480
|
+
// A sibling declaring itself downstream of `a` is
|
|
481
|
+
// a successor: `a` could not have discussed it.
|
|
482
|
+
&& !b.downstream.includes(a.stem),
|
|
483
|
+
)
|
|
484
|
+
.map((b) => b.stem)
|
|
354
485
|
: [];
|
|
355
486
|
if (omitted.length > 0) {
|
|
356
487
|
findings.push({
|
|
@@ -31,18 +31,18 @@
|
|
|
31
31
|
*
|
|
32
32
|
* Scope: every `dist/agent-src/skills/<name>/SKILL.md` — the consumer projection
|
|
33
33
|
* actually shipped in the npm package (mirrors the reviewer's own vantage
|
|
34
|
-
* point: `npm i` + read the installed skills)
|
|
34
|
+
* point: `npm i` + read the installed skills) — plus, for the skill-script
|
|
35
|
+
* form alone, `references/*.md` beside it.
|
|
35
36
|
*
|
|
36
|
-
*
|
|
37
|
+
* The twenty-skill `SCRIPTS_RUN_ALLOWLIST` this gate used to carry is GONE.
|
|
38
|
+
* It exempted the one form that most needed the finding: a line telling a
|
|
39
|
+
* consumer to type a wrapper the package does not ship. The skills now teach
|
|
40
|
+
* `node <skills-root>/<name>/scripts/<tool>.mjs`, which an install can start,
|
|
41
|
+
* so the exemption has nothing left to exempt.
|
|
42
|
+
*
|
|
43
|
+
* Carve-out:
|
|
37
44
|
* - Skill frontmatter `workspaces: [agent-config-maintainer]` (exclusive)
|
|
38
45
|
* — entirely exempt, per the mechanism above.
|
|
39
|
-
* - `SCRIPTS_RUN_ALLOWLIST` below — the `corpus-grounding` engine's own
|
|
40
|
-
* documented consumer-runtime CLI convention (`./scripts-run
|
|
41
|
-
* <skills-root>/<name>/scripts/<tool> …`, skill-bundled assets per
|
|
42
|
-
* `docs/contracts/skill-bundled-assets.md`) — the invoked PATH is real
|
|
43
|
-
* and reachable in every install; only the wrapper name is inherited
|
|
44
|
-
* from the maintainer dispatcher. Tracked as a separate, larger-scope
|
|
45
|
-
* naming-consistency item; out of scope for this lint's 17-skill sweep.
|
|
46
46
|
*
|
|
47
47
|
* Exit codes: 0 clean · 1 findings · 2 internal error.
|
|
48
48
|
*/
|
|
@@ -57,38 +57,6 @@ import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
|
|
|
57
57
|
const REPO_ROOT = path.resolve(fileURLToPath(import.meta.url), '..', '..', '..');
|
|
58
58
|
const SKILLS_DIR = path.join(REPO_ROOT, 'dist', 'agent-src', 'skills');
|
|
59
59
|
|
|
60
|
-
/**
|
|
61
|
-
* Skills using `corpus-grounding`'s documented `./scripts-run
|
|
62
|
-
* <skills-root>/<name>/scripts/<tool>` consumer-runtime CLI convention
|
|
63
|
-
* (skill-bundled assets, `docs/contracts/skill-bundled-assets.md`) — the
|
|
64
|
-
* path is real and reachable once installed; only the wrapper name drifted
|
|
65
|
-
* from the contract's prescribed `node_modules/.bin/tsx` form. A single,
|
|
66
|
-
* uniform, cross-skill convention — renaming it is a separate, larger-scope
|
|
67
|
-
* follow-up, not one of this sweep's 17 leaky skills.
|
|
68
|
-
*/
|
|
69
|
-
const SCRIPTS_RUN_ALLOWLIST = new Set([
|
|
70
|
-
'accessibility-auditor',
|
|
71
|
-
'api-design',
|
|
72
|
-
'api-endpoint',
|
|
73
|
-
'authz-review',
|
|
74
|
-
'blade-ui',
|
|
75
|
-
'brand',
|
|
76
|
-
'brand-identity',
|
|
77
|
-
'brand-strategy',
|
|
78
|
-
'brand-to-tokens',
|
|
79
|
-
'corpus-grounding',
|
|
80
|
-
'dashboard-design',
|
|
81
|
-
'database',
|
|
82
|
-
'design-intelligence',
|
|
83
|
-
'design-tokens',
|
|
84
|
-
'flux',
|
|
85
|
-
'livewire',
|
|
86
|
-
'react-shadcn-ui',
|
|
87
|
-
'sql-writing',
|
|
88
|
-
'threat-modeling',
|
|
89
|
-
'typography-system',
|
|
90
|
-
]);
|
|
91
|
-
|
|
92
60
|
interface PatternDef {
|
|
93
61
|
readonly re: RegExp;
|
|
94
62
|
readonly label: string;
|
|
@@ -120,10 +88,73 @@ const PATTERNS: readonly PatternDef[] = [
|
|
|
120
88
|
{
|
|
121
89
|
re: /\.\/scripts-run\b/,
|
|
122
90
|
label: 'invocation of the maintainer-only `./scripts-run` dispatcher (not in `package.json` `files`, never reaches a consumer install)',
|
|
123
|
-
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
re: /node_modules\/\.bin\/tsx\b/,
|
|
94
|
+
label: 'invocation through `node_modules/.bin/tsx` (a devDependency binary; an install carries `node`, not a TypeScript loader)',
|
|
124
95
|
},
|
|
125
96
|
];
|
|
126
97
|
|
|
98
|
+
/**
|
|
99
|
+
* The skill-script form: `<runner> <skills-root>/<skill>/scripts/<tool>`.
|
|
100
|
+
*
|
|
101
|
+
* Checked apart from PATTERNS because the runner is not always on the line
|
|
102
|
+
* that carries the path — a wrapped command leaves it at the end of the line
|
|
103
|
+
* above, and a per-line regex reading only its own line reports every wrapped
|
|
104
|
+
* invocation in the tree.
|
|
105
|
+
*
|
|
106
|
+
* It is also the one form checked inside `references/`. A blanket widening
|
|
107
|
+
* would red on the reference files that name `./scripts-run src/scripts/…`,
|
|
108
|
+
* which is a different class — a maintainer script, invoked while working on
|
|
109
|
+
* this package — and this gate is not the place that decides those.
|
|
110
|
+
*/
|
|
111
|
+
const SKILL_SCRIPT_RE = /<skills-root>\/([A-Za-z0-9._-]+)\/scripts\/([A-Za-z0-9._-]+)/;
|
|
112
|
+
const SKILL_SCRIPT_RUNNER = 'node';
|
|
113
|
+
|
|
114
|
+
/** The last shell-ish token of a markdown fragment, decoration stripped. */
|
|
115
|
+
function lastToken(fragment: string): string {
|
|
116
|
+
const cleaned = fragment.replace(/\\\s*$/, '').replace(/[`\s]+$/, '').trim();
|
|
117
|
+
if (cleaned === '') return '';
|
|
118
|
+
return (cleaned.split(/\s+/).pop() ?? '').replace(/^[`>*_(]+/, '').replace(/[`*_)]+$/, '');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** The runner a taught line names: its own, or the one the line above ends with. */
|
|
122
|
+
function runnerFor(lines: readonly string[], idx: number, col: number): string {
|
|
123
|
+
const before = (lines[idx] as string).slice(0, col);
|
|
124
|
+
const own = lastToken(before.replace(/^[\s>]*(?:[-*+]\s+|\d+\.\s+)?/, ''));
|
|
125
|
+
if (own !== '') return own;
|
|
126
|
+
if (idx === 0) return '';
|
|
127
|
+
const above = lines[idx - 1] as string;
|
|
128
|
+
if (/^\s*(?:```|~~~)/.test(above)) return '';
|
|
129
|
+
return lastToken(above);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Findings for taught skill-script lines that a node-only install cannot start. */
|
|
133
|
+
export function scanSkillScriptForm(relPath: string, text: string): string[] {
|
|
134
|
+
const findings: string[] = [];
|
|
135
|
+
const lines = text.split('\n');
|
|
136
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
137
|
+
const m = SKILL_SCRIPT_RE.exec(lines[i] as string);
|
|
138
|
+
if (!m) continue;
|
|
139
|
+
const tool = m[2] as string;
|
|
140
|
+
const runner = runnerFor(lines, i, m.index);
|
|
141
|
+
if (runner !== SKILL_SCRIPT_RUNNER) {
|
|
142
|
+
findings.push(
|
|
143
|
+
`${relPath}:${i + 1}: skill-script line whose runner is ` +
|
|
144
|
+
`${runner === '' ? 'absent' : `\`${runner}\``}, not \`node\` — ` +
|
|
145
|
+
'an install carries the runtime and the bundle, nothing else',
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
if (!tool.endsWith('.mjs')) {
|
|
149
|
+
findings.push(
|
|
150
|
+
`${relPath}:${i + 1}: skill-script line naming \`${tool}\` — ` +
|
|
151
|
+
'the shipped entry point is the `.mjs` beside the source',
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return findings;
|
|
156
|
+
}
|
|
157
|
+
|
|
127
158
|
/** `workspaces:` frontmatter list of a skill file ([] when untagged). */
|
|
128
159
|
function skillWorkspaces(skillPath: string): string[] {
|
|
129
160
|
const src = fs.readFileSync(skillPath, 'utf-8');
|
|
@@ -191,6 +222,23 @@ export function main(): number {
|
|
|
191
222
|
}
|
|
192
223
|
const relPath = path.relative(REPO_ROOT, abs);
|
|
193
224
|
findings.push(...scanText(name, relPath, text));
|
|
225
|
+
findings.push(...scanSkillScriptForm(relPath, text));
|
|
226
|
+
|
|
227
|
+
// `references/` is read for the skill-script form only — see the note
|
|
228
|
+
// above `SKILL_SCRIPT_RE` for why the other patterns stop at SKILL.md.
|
|
229
|
+
const refsDir = path.join(SKILLS_DIR, name, 'references');
|
|
230
|
+
if (!fs.existsSync(refsDir) || !fs.statSync(refsDir).isDirectory()) continue;
|
|
231
|
+
for (const ref of fs.readdirSync(refsDir).sort()) {
|
|
232
|
+
if (!ref.endsWith('.md')) continue;
|
|
233
|
+
const refAbs = path.join(refsDir, ref);
|
|
234
|
+
let refText: string;
|
|
235
|
+
try {
|
|
236
|
+
refText = fs.readFileSync(refAbs, 'utf-8');
|
|
237
|
+
} catch {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
findings.push(...scanSkillScriptForm(path.relative(REPO_ROOT, refAbs), refText));
|
|
241
|
+
}
|
|
194
242
|
}
|
|
195
243
|
|
|
196
244
|
// Counted BEFORE the maintainer-exclusive skip, so an all-maintainer
|