@event4u/agent-config 14.9.0 → 14.11.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 +1 -1
- package/CHANGELOG.md +384 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/design.md +88 -0
- package/dist/agent-src/commands/project/analyze.md +47 -0
- package/dist/agent-src/commands/review/changes.md +67 -6
- package/dist/agent-src/commands/roadmap/create.md +49 -0
- package/dist/agent-src/commands/roadmap/next.md +27 -11
- package/dist/agent-src/commands/roadmap/process-full.md +14 -0
- package/dist/agent-src/commands/video/from-script.md +60 -3
- package/dist/agent-src/commands/video/stitch.md +14 -0
- package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +154 -2
- package/dist/agent-src/rules/active-remediation.md +3 -3
- package/dist/agent-src/rules/code-provenance.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +13 -33
- package/dist/agent-src/rules/council-availability.md +2 -2
- package/dist/agent-src/rules/decision-revisit-gate.md +3 -1
- package/dist/agent-src/rules/design-fidelity.md +18 -0
- package/dist/agent-src/rules/design-review-after-ui-write.md +2 -2
- package/dist/agent-src/rules/evaluator-independence.md +56 -44
- package/dist/agent-src/rules/fix-what-you-see.md +9 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +14 -20
- package/dist/agent-src/rules/missing-skill-recovery.md +13 -1
- package/dist/agent-src/rules/playbook-precedence.md +105 -0
- package/dist/agent-src/rules/recurring-criticism.md +3 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +14 -13
- package/dist/agent-src/rules/scale-discipline.md +24 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -2
- package/dist/agent-src/rules/settings-ask-protocol.md +2 -2
- package/dist/agent-src/rules/ui-audit-gate.md +27 -15
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -2
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +7 -0
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +33 -0
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +17 -3
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +31 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +19 -0
- package/dist/agent-src/skills/alerting-doctrine/SKILL.md +225 -0
- package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +17 -0
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +0 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +32 -0
- package/dist/agent-src/skills/brand/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-audit/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-strategy/SKILL.md +3 -0
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +3 -0
- package/dist/agent-src/skills/code-refactoring/SKILL.md +1 -1
- package/dist/agent-src/skills/code-review/SKILL.md +11 -0
- package/dist/agent-src/skills/command-routing/SKILL.md +6 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +4 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +4 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +10 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +3 -0
- package/dist/agent-src/skills/design-intelligence/data/landing.csv +36 -35
- package/dist/agent-src/skills/design-intelligence/data/stacks/threejs.csv +1 -0
- package/dist/agent-src/skills/design-review/SKILL.md +80 -2
- package/dist/agent-src/skills/design-review/references/verification-automation.md +41 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +35 -40
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +50 -0
- package/dist/agent-src/skills/design-tokens/SKILL.md +3 -0
- package/dist/agent-src/skills/design-variations/SKILL.md +3 -0
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +3 -0
- package/dist/agent-src/skills/discovery-interview/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +20 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +74 -41
- package/dist/agent-src/skills/fe-design/evals/triggers.json +65 -53
- package/dist/agent-src/skills/fe-design/references/craft-floor.md +52 -0
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +36 -0
- package/dist/agent-src/skills/file-editor/SKILL.md +5 -0
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +3 -0
- package/dist/agent-src/skills/github-ci/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +3 -0
- package/dist/agent-src/skills/iconography/SKILL.md +3 -0
- package/dist/agent-src/skills/image-editing/SKILL.md +3 -0
- package/dist/agent-src/skills/image-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +3 -0
- package/dist/agent-src/skills/incident-commander/SKILL.md +10 -0
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +173 -0
- package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +17 -0
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +270 -0
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-injection-defense/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-migration/SKILL.md +3 -0
- package/dist/agent-src/skills/laravel-validation/SKILL.md +1 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +3 -0
- package/dist/agent-src/skills/legal-intake-triage/SKILL.md +1 -1
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +1 -1
- package/dist/agent-src/skills/lint-skills/SKILL.md +3 -0
- package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +3 -0
- package/dist/agent-src/skills/logging-monitoring/SKILL.md +234 -51
- package/dist/agent-src/skills/logo-generation/SKILL.md +3 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -0
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +1 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -1
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -1
- package/dist/agent-src/skills/module-management/SKILL.md +1 -1
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +149 -0
- package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +17 -0
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +7 -1
- package/dist/agent-src/skills/multi-tenancy/SKILL.md +4 -0
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/operational-readiness/SKILL.md +184 -0
- package/dist/agent-src/skills/operational-readiness/evals/triggers.json +17 -0
- package/dist/agent-src/skills/override-management/SKILL.md +3 -0
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-improvement/SKILL.md +3 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +162 -0
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -0
- package/dist/agent-src/skills/privacy-review/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -0
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +5 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +52 -21
- package/dist/agent-src/skills/readme-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing/SKILL.md +3 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +3 -0
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/refine-prompt/SKILL.md +3 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -0
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +23 -41
- package/dist/agent-src/skills/roadmap-writing/references/follow-up-roadmap-shape.md +47 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +22 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +3 -0
- package/dist/agent-src/skills/scene-expander/SKILL.md +1 -1
- package/dist/agent-src/skills/scene-expander/scene-blueprint.schema.yaml +26 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +5 -1
- package/dist/agent-src/skills/server-hardening/SKILL.md +159 -0
- package/dist/agent-src/skills/server-hardening/evals/triggers.json +17 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-management/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +3 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +6 -0
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +3 -0
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +194 -0
- package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +17 -0
- package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.ts +134 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +25 -0
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +1 -1
- package/dist/agent-src/skills/terraform/SKILL.md +3 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +0 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +3 -0
- package/dist/agent-src/skills/typography-system/SKILL.md +3 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -1
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -0
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +3 -0
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +3 -0
- package/dist/agent-src/skills/wireframe/references/story-beat-ledger.schema.json +115 -0
- package/dist/agent-src/skills/workspace-link/SKILL.md +131 -0
- package/dist/agent-src/skills/workspace-link/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/playbook.md +75 -0
- package/dist/agent-src/templates/roadmaps.md +37 -0
- package/dist/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/dist/cli/commands/uiAudit.js +221 -0
- package/dist/cli/commands/uiAudit.js.map +1 -0
- package/dist/cli/commands/uiRender.js +206 -0
- package/dist/cli/commands/uiRender.js.map +1 -0
- package/dist/cli/main.js +22 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mcp/content.js +64 -1
- package/dist/cli/mcp/content.js.map +1 -1
- package/dist/cli/mcp/dispatch.js +175 -10
- package/dist/cli/mcp/dispatch.js.map +1 -1
- package/dist/cli/registry.js +3 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-H4VIVD4C.js → chunk-236PNQZK.js} +413 -391
- package/dist/cli-delegate/{chunk-G23AT6GD.js → chunk-DMSZHXZS.js} +57 -1
- package/dist/cli-delegate/{chunk-77GR3VD4.js → chunk-FF7WAFMR.js} +58 -3
- package/dist/cli-delegate/{chunk-PLSG6UL5.js → chunk-K4FFODTS.js} +341 -204
- package/dist/cli-delegate/{chunk-YM4GZDJG.js → chunk-L43NCYPB.js} +5 -0
- package/dist/cli-delegate/{chunk-B2ERU2VA.js → chunk-WOKWX5PL.js} +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +8 -6
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +70 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +380 -145
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +18 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -6
- package/dist/hooks/dispatch.js +2337 -1436
- package/dist/install/install.mjs +795 -708
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1685 -1250
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/lean_projection_mode.js +40 -0
- package/dist/scripts/_lib/lean_projection_mode.js.map +1 -0
- package/dist/scripts/_lib/scoped_projection.js +84 -0
- package/dist/scripts/_lib/scoped_projection.js.map +1 -1
- package/dist/scripts/_lib/ui_surface.js +89 -0
- package/dist/scripts/_lib/ui_surface.js.map +1 -0
- package/dist/scripts/condense.js +6 -10
- package/dist/scripts/condense.js.map +1 -1
- package/dist/scripts/project_thin_rules.js +40 -2
- package/dist/scripts/project_thin_rules.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/skillRanking.js +159 -0
- package/dist/shared/skillRanking.js.map +1 -0
- package/docs/contracts/provider-lifecycle.md +47 -18
- package/docs/contracts/settings-classes.md +14 -4
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +49 -0
- package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/docs/guidelines/design-antipatterns.md +4 -2
- package/docs/guidelines/design-asset-discipline.md +38 -0
- package/docs/guidelines/design-fidelity-mechanics.md +45 -29
- package/docs/guidelines/design-handover-extraction.md +35 -5
- package/docs/guidelines/design-modes.md +41 -1
- package/docs/guidelines/monorepo-antipatterns.md +141 -0
- package/llms.txt +50 -39
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/check_playbook_invokes.ts +231 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +24 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +2 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +159 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/stack_bundles.ts +73 -4
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +325 -40
- package/src/config/agent-settings.template.yml +28 -0
- package/src/config/assurance-capability-registry.json +223 -0
- package/src/config/assurance-threshold-budget.json +65 -0
- package/src/config/ci-local-parity.yml +14 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/dispatch-economy-metrics.json +4 -2
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +227 -8
- package/src/config/gate-violation-baselines.json +76 -72
- package/src/config/hook-latency-budget.json +1 -0
- package/src/config/hook-token-budget.json +137 -125
- package/src/config/pack-size-budget.json +4 -2
- package/src/config/preamble-payload-budget.json +71 -67
- package/src/config/quorum-attendance-budget.json +12 -4
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-enforcement-baseline.json +0 -1
- package/src/config/rule-stub-ceilings.json +112 -91
- package/src/scripts/_cli/cmd_doctor.ts +15 -16
- package/src/scripts/_cli/doctor_install_mode.ts +49 -0
- package/src/scripts/_cli/doctor_overrides.ts +154 -0
- package/src/scripts/_dispatch.bash +17 -0
- package/src/scripts/_lib/as_of.ts +412 -0
- package/src/scripts/_lib/exec_evidence.ts +7 -0
- package/src/scripts/_lib/hook_settings.ts +33 -0
- package/src/scripts/_lib/host_listing_model.ts +192 -0
- package/src/scripts/_lib/lean_projection_mode.ts +44 -0
- package/src/scripts/_lib/mcp_bridge.ts +199 -0
- package/src/scripts/_lib/review_independence.ts +62 -10
- package/src/scripts/_lib/rule_injection.ts +239 -0
- package/src/scripts/_lib/run_checkpoint.ts +54 -1
- package/src/scripts/_lib/scoped_projection.ts +96 -0
- package/src/scripts/_lib/session_register.ts +44 -2
- package/src/scripts/_lib/skill_catalogue.ts +38 -2
- package/src/scripts/_lib/transcript_reads.ts +207 -0
- package/src/scripts/_lib/ui_authority.test.ts +251 -0
- package/src/scripts/_lib/ui_authority.ts +343 -0
- package/src/scripts/ai-video/adapters/fal.sh +8 -3
- package/src/scripts/ai-video/adapters/gemini-veo.sh +10 -0
- package/src/scripts/ai-video/adapters/higgsfield.sh +10 -2
- package/src/scripts/ai-video/adapters/kling.sh +10 -0
- package/src/scripts/ai-video/adapters/sora.sh +10 -0
- package/src/scripts/ai-video/lib/calibrate-cost.sh +145 -0
- package/src/scripts/ai-video/lib/model-capabilities/README.md +53 -7
- package/src/scripts/ai-video/lib/model-capabilities/comfyui.json +15 -3
- package/src/scripts/ai-video/lib/model-capabilities/fal.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/gemini-veo.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/higgsfield.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/kling.json +23 -0
- package/src/scripts/ai-video/lib/model-capabilities/musetalk.json +8 -2
- package/src/scripts/ai-video/lib/model-capabilities/replicate.json +36 -6
- package/src/scripts/ai-video/lib/model-capabilities/sora.json +45 -0
- package/src/scripts/ai-video/lib/model-capabilities/syncso.json +8 -2
- package/src/scripts/ai-video/lib/parse-blueprint.sh +52 -5
- package/src/scripts/ai-video/lib/resume-scan.sh +92 -3
- package/src/scripts/ai-video/lib/seam-plan.sh +212 -0
- package/src/scripts/ai-video/smoke-trace.sh +450 -2
- package/src/scripts/ai-video/stitch.sh +191 -10
- package/src/scripts/ai-video/test-pipeline.sh +84 -6
- package/src/scripts/ai_council/cli_agency_bounds.ts +139 -0
- package/src/scripts/ai_council/cli_least_agency_canary.ts +347 -0
- package/src/scripts/ai_council/clients.ts +3 -2
- package/src/scripts/ai_council/consensus.ts +63 -6
- package/src/scripts/ai_council/events_log.ts +46 -1
- package/src/scripts/ai_council/orchestrator.ts +103 -108
- package/src/scripts/ai_council/orchestrator_results.ts +166 -0
- package/src/scripts/ai_council/prompts.ts +12 -5
- package/src/scripts/ai_council/quorum.ts +82 -1
- package/src/scripts/ai_council/quorum_wiring.ts +82 -5
- package/src/scripts/ai_council/seating.ts +211 -0
- package/src/scripts/ai_council/stance_tally.ts +22 -0
- package/src/scripts/bench_hook_latency.ts +62 -0
- package/src/scripts/build_proof.ts +12 -1
- package/src/scripts/capture_skill_catalogue.ts +21 -0
- package/src/scripts/check_always_budget.ts +2 -1
- package/src/scripts/check_augmentignore.ts +2 -1
- package/src/scripts/check_beta_review_markers.ts +2 -1
- package/src/scripts/check_composite_arming.ts +364 -0
- package/src/scripts/check_corpus_staleness.ts +2 -1
- package/src/scripts/check_council_pin_staleness.ts +3 -1
- package/src/scripts/check_enforcement_coverage.ts +116 -3
- package/src/scripts/check_enforcement_denominator.ts +365 -0
- package/src/scripts/check_gate_coverage.ts +2 -1
- package/src/scripts/check_hook_bundle_freshness.ts +13 -1
- package/src/scripts/check_knowledge_cards.ts +2 -1
- package/src/scripts/check_knowledge_pages.ts +3 -2
- package/src/scripts/check_memory.ts +2 -1
- package/src/scripts/check_no_automerge_key.ts +287 -0
- package/src/scripts/check_pack_conformance_fixture.ts +565 -0
- package/src/scripts/check_pack_passport_reconciliation.ts +274 -0
- package/src/scripts/check_proposal.ts +2 -1
- package/src/scripts/check_reach_staleness.ts +2 -1
- package/src/scripts/check_release_adjacent_health.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +5 -0
- package/src/scripts/check_review_schema.ts +34 -1
- package/src/scripts/check_roadmap_trackable.ts +48 -3
- package/src/scripts/check_source_size_budget.ts +2 -1
- package/src/scripts/check_standing_payload_delta.ts +505 -0
- package/src/scripts/check_trigger_evals.ts +2 -1
- package/src/scripts/classify_change_risk.ts +281 -0
- package/src/scripts/compute_skill_tiers.ts +186 -0
- package/src/scripts/condense.ts +8 -13
- package/src/scripts/council_attendance_metrics.ts +183 -0
- package/src/scripts/council_cli.ts +10 -8
- package/src/scripts/council_parse_rate.ts +116 -0
- package/src/scripts/derive_playbooks.ts +406 -0
- package/src/scripts/design_slop_rules.test.ts +7 -0
- package/src/scripts/design_slop_rules.ts +56 -2
- package/src/scripts/dispatch_r2_reviewer.ts +16 -0
- package/src/scripts/frontend_corpus_hash.ts +116 -0
- package/src/scripts/generate_pack_manifests.ts +78 -0
- package/src/scripts/grade_target_readiness.ts +478 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +97 -16
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/design_pass_hook.ts +356 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +30 -7
- package/src/scripts/hooks/rule_inject_hook.ts +318 -0
- package/src/scripts/hot_context_hook.ts +74 -7
- package/src/scripts/install.ts +40 -89
- package/src/scripts/lint_adapter_tier.ts +663 -0
- package/src/scripts/lint_archived_skills.ts +93 -0
- package/src/scripts/lint_budget_ownership.ts +2 -1
- package/src/scripts/lint_deterministic_time.ts +470 -0
- package/src/scripts/lint_framework_leakage.ts +5 -0
- package/src/scripts/lint_handoffs.ts +525 -1
- package/src/scripts/lint_judge_prompt_expectation.ts +155 -0
- package/src/scripts/lint_marketplace.ts +88 -0
- package/src/scripts/lint_media_policy_linkage.ts +140 -1
- package/src/scripts/lint_one_off_age.ts +6 -1
- package/src/scripts/lint_override_kernel_guard.ts +87 -5
- package/src/scripts/lint_roadmap_complexity.ts +56 -0
- package/src/scripts/lint_rule_enforcement_declaration.ts +24 -7
- package/src/scripts/lint_rule_norm_pin.ts +321 -0
- package/src/scripts/lint_spawn_payload.ts +42 -5
- package/src/scripts/lint_symptom_intake.ts +2 -1
- package/src/scripts/mcp_parity_smoke.ts +30 -4
- package/src/scripts/mcp_render.ts +66 -1
- package/src/scripts/mcp_tool_fingerprint.ts +241 -0
- package/src/scripts/measure_risk_class_drift.ts +140 -0
- package/src/scripts/measure_skill_ranker_baseline.ts +212 -0
- package/src/scripts/media/lib/adapter-common.sh +211 -1
- package/src/scripts/media/lib/adapter-contract.md +74 -6
- package/src/scripts/model_rule_injection.ts +907 -0
- package/src/scripts/project_thin_rules.ts +45 -2
- package/src/scripts/release.ts +66 -860
- package/src/scripts/release_drill.ts +59 -3
- package/src/scripts/release_env.ts +298 -0
- package/src/scripts/release_publication.ts +720 -0
- package/src/scripts/roadmap_context.ts +778 -0
- package/src/scripts/schemas/fidelity-measurement-sheet.schema.json +169 -0
- package/src/scripts/schemas/pack.schema.json +62 -4
- package/src/scripts/schemas/rule.schema.json +24 -2
- package/src/scripts/schemas/skill.schema.json +41 -2
- package/src/scripts/schemas/ui-authority.schema.json +114 -0
- package/src/scripts/session_register_hook.ts +29 -3
- package/src/scripts/sessions_cli.ts +67 -3
- package/src/scripts/skill_tools/score_skill_relevance.ts +36 -53
- package/src/scripts/tighten_skill_descriptions.ts +264 -0
- package/src/scripts/token_sink_report.ts +239 -0
- package/src/scripts/trigger_coverage.ts +122 -3
- package/src/scripts/update_counts.ts +7 -3
- package/src/scripts/validate_frontmatter.ts +66 -0
- package/src/server/schemas/settings.ts +5 -0
- package/src/shared/skillRanking.ts +183 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "Rule-activation ratchet baseline (road-to-mixed-trigger-activation-cost step 4.1). Two axes: the scoped/mixed ID SETS are pinned by identity, and the unconditional token total may only walk DOWN. Raising a number here to clear a failing check is the config-weakening move this repo blocks by construction
|
|
2
|
+
"_comment": "Rule-activation ratchet baseline (road-to-mixed-trigger-activation-cost step 4.1). Two axes: the scoped/mixed ID SETS are pinned by identity, and the unconditional token total may only walk DOWN. Raising a number here to clear a failing check is the config-weakening move this repo blocks by construction — every raise needs a baseline_history entry whose reason is a real sentence. Regenerate with `check_rule_activation_census --write-baseline`; never hand-edit the counts.",
|
|
3
3
|
"measured_at_commit": "unrecorded",
|
|
4
4
|
"tokens_exact": true,
|
|
5
|
-
"unconditional_tokens":
|
|
5
|
+
"unconditional_tokens": 113699,
|
|
6
6
|
"scoped_ids": [
|
|
7
7
|
"design-review-after-ui-write",
|
|
8
8
|
"roadmap-progress-sync",
|
|
@@ -39,11 +39,15 @@
|
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"date": "2026-08-20",
|
|
42
|
-
"reason": "Re-anchored WITH an authorized addition, not to clear a red: the new `recurring-criticism` rule plus the reconciling edits to `self-repair-loop` and `decision-revisit-gate`. The cost is structural, not sloppy authoring
|
|
42
|
+
"reason": "Re-anchored WITH an authorized addition, not to clear a red: the new `recurring-criticism` rule plus the reconciling edits to `self-repair-loop` and `decision-revisit-gate`. The cost is structural, not sloppy authoring — the rule fires on a recurrence phrase in the USER PROMPT, and on Claude the emitter writes no `paths:` at all once any non-path trigger is present, so a prompt-triggered rule is unconditional by construction. There is no scoped variant of this obligation to choose instead: a path-scoped version would never see the prompt that triggers it, which is the whole mechanism. The body was already cut once for this reason (~45 percent, depth moved to guideline:agent-infra/recurring-criticism-mechanics, which is read on demand and costs nothing at session start); what remains is the Iron Law, the three-outcome table that is the anti-sycophancy guard, and the honest-enforcement paragraph. Trimming further would remove the reasoning the rule itself marks as the clause most likely to be trimmed. Delta 3575 tokens against a 2000 allowance, standing cost per session, stated rather than hidden."
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
"date": "2026-08-20",
|
|
46
46
|
"reason": "Raised 103,265 -> 106,386 (+3,121) for one new rule, fix-what-you-see, added on maintainer instruction after a session identified a red check's cause, named the file's author, and handed it back unfixed. The rule permits exactly two dispositions -- fix it, or ship a tracked follow-up roadmap in the same change -- and removes ownership and note-only as escapes from active-remediation's ladder. WHAT THIS RE-ANCHOR EXPOSES, and it is the reason the entry is this long: the rule ships type auto rather than always because check_always_budget has two characters of headroom and its cap may only move down. That switch cleared the always gate and did NOT reduce the cost, because this census counts a rule as standing payload unless it is path-SCOPED, and a red CI check has no file pattern to scope on. So the two gates disagree about what a keyword-triggered rule costs, and the auto downgrade moved the same 3,121 tokens from a budget that refuses them into one that only asks for a sentence. Stated rather than exploited: the honest reading is that this rule costs standing payload whatever its type says, and the always-vs-auto choice bought delivery breadth, not weight."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"date": "2026-08-23",
|
|
50
|
+
"reason": "Re-anchored for one new rule, playbook-precedence, which ships with ADR-244's sixth context type and states that a repository's OWN configured playbook outranks a shipped skill for the same task. WHY THE DELTA IS THIS LARGE, stated rather than implied: the rule is 4,398 chars of source, but it declares seven triggers and every one of them is a keyword or phrase, so the emitter writes NO `paths:` block at all and the host loads it in every session -- the same mixed-trigger cost `ui-audit-gate` and `design-review-after-ui-write` each paid before being re-scoped to paths in road-to-mixed-trigger-activation-cost Phase 2. That is the honest reading of this number: it is not the price of the obligation, it is the price of expressing the obligation with keywords. A playbook lives at a known location, so a path-scoped form is available and would return most of these tokens; it is not cut here because the trigger set is the rule author's design decision and re-cutting it inside a merge-queue drain would change routing behaviour nobody reviewed. Recorded as the next candidate for that Phase-2 treatment rather than silently absorbed."
|
|
47
51
|
}
|
|
48
52
|
]
|
|
49
53
|
}
|
|
@@ -1,94 +1,115 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
2
|
+
"_comment": "Per-rule stub ceilings (road-to-rule-stub-projection Phase 2). One exact-BPE token ceiling per rule carrying a migration pointer. SHRINK-ONLY: a rule may fall below its ceiling freely, and may not rise above it. Raising a ceiling to clear a failing check is the config-weakening move this repo blocks by construction \u2014 every raise needs a `history` entry whose `reason` is a real sentence. The ceilings are a floor-plus-residue SNAPSHOT taken at adoption, not a target: a rule at its ceiling is not thereby correct, only not worse. Regenerate with `check_rule_stub_ceiling --write-baseline`; never hand-edit the counts.",
|
|
3
|
+
"measured_at_commit": "178b89235",
|
|
4
|
+
"tokens_exact": true,
|
|
5
|
+
"ceilings": {
|
|
6
|
+
"active-remediation": 1601,
|
|
7
|
+
"analysis-skill-routing": 76,
|
|
8
|
+
"architecture": 955,
|
|
9
|
+
"artifact-drafting-protocol": 680,
|
|
10
|
+
"augment-edit-discipline": 137,
|
|
11
|
+
"autonomous-execution": 1633,
|
|
12
|
+
"brand-consistency": 133,
|
|
13
|
+
"broken-access-control": 743,
|
|
14
|
+
"cli-output-handling": 83,
|
|
15
|
+
"code-comment-discipline": 692,
|
|
16
|
+
"commit-conventions": 136,
|
|
17
|
+
"context-hygiene": 2470,
|
|
18
|
+
"copilot-routing": 128,
|
|
19
|
+
"design-fidelity": 2540,
|
|
20
|
+
"devcontainer-routing": 128,
|
|
21
|
+
"docker-commands": 79,
|
|
22
|
+
"domain-adoption-policy": 497,
|
|
23
|
+
"framework-neutrality-in-generic-skills": 636,
|
|
24
|
+
"git-history-discipline": 1205,
|
|
25
|
+
"improve-before-implement": 845,
|
|
26
|
+
"laravel-routing": 126,
|
|
27
|
+
"laravel-translations": 82,
|
|
28
|
+
"legal-safety-floor": 1401,
|
|
29
|
+
"linked-projects-onboarding-gate": 172,
|
|
30
|
+
"minimal-safe-diff": 893,
|
|
31
|
+
"missing-tool-handling": 103,
|
|
32
|
+
"model-recommendation": 156,
|
|
33
|
+
"no-roadmap-references": 644,
|
|
34
|
+
"package-ci-checks": 74,
|
|
35
|
+
"persona-governance": 330,
|
|
36
|
+
"php-coding": 80,
|
|
37
|
+
"provider-lifecycle-discipline": 472,
|
|
38
|
+
"reviewer-awareness": 131,
|
|
39
|
+
"roadmap-ci-steps-policy": 564,
|
|
40
|
+
"roadmap-progress-sync": 2479,
|
|
41
|
+
"rule-type-governance": 87,
|
|
42
|
+
"skill-improvement-trigger": 81,
|
|
43
|
+
"skill-quality": 78,
|
|
44
|
+
"slash-command-routing-policy": 77,
|
|
45
|
+
"symfony-routing": 129,
|
|
46
|
+
"ui-audit-gate": 1491,
|
|
47
|
+
"untrusted-input-defense": 934,
|
|
48
|
+
"upstream-proposal": 76
|
|
49
|
+
},
|
|
50
|
+
"history": [
|
|
51
|
+
{
|
|
52
|
+
"date": "2026-08-19",
|
|
53
|
+
"rule": "roadmap-progress-sync",
|
|
54
|
+
"from": 1424,
|
|
55
|
+
"to": 2117,
|
|
56
|
+
"reason": "Iron Law 3 gained the preservation test that decides WHO resolves a deferred item \u2014 a routing table plus the two council refinements that make it binding (a follow-up naming a roadmap that does not exist yet fails closed to the user; a council resolution is recorded at the item or it did not happen) and the residual limit both authoring seats named. This is obligation surface, not explanation: the table decides a route and the two refinements are the conditions under which the route is legal, so a reader who reaches only the pointer target has already made the decision. It could not move to the pointer target either \u2014 roadmap-progress-mechanics.md sits at the 16,000-char check_depth_budget ceiling in this same change, and pushing prose there reds a count ratchet whose whole job is refusing a fifth over-ceiling file. The section was condensed once before this raise (2201 -> 2117) by turning four prose paragraphs into bullets; further cutting would delete substance, which preservation-guard forbids."
|
|
49
57
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
58
|
+
{
|
|
59
|
+
"date": "2026-08-20",
|
|
60
|
+
"rule": "context-hygiene",
|
|
61
|
+
"from": 2447,
|
|
62
|
+
"to": 2470,
|
|
63
|
+
"reason": "One sentence, +23 tokens, and it is obligation surface rather than explanation: for CI, do not hand-write the wait loop. The mechanics went to the pointer target where this rule's own migration note already sends them (context-hygiene-mechanics gains the exit codes, the four not-settled states and the measured incident) \u2014 that move is what took the growth from +179 to +23, and the residue is the pointer itself, which cannot live in the guideline because a rule that does not name the helper is a rule nobody follows to it. The incident it encodes: a hand-written `until ! gh pr checks N | grep -q pending` exited when the API failed, because the error text contains no `pending`, and the session reported a settle that had not happened and retracted it in the next reply. The rule's neighbouring waiter law already says one waiter per condition; what it did not say is that the exit condition is the part that gets written wrong, which is why the helper is named here rather than described."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"date": "2026-08-20",
|
|
67
|
+
"rule": "roadmap-progress-sync",
|
|
68
|
+
"from": 2117,
|
|
69
|
+
"to": 2185,
|
|
70
|
+
"reason": "One sentence in Iron Law 1, +68 tokens, and it is obligation surface rather than explanation: `roadmap:progress` now passes `--archive`, so the law's operational meaning changed \u2014 a complete roadmap is moved by the same run instead of reported to a human, and the two exclusions a reader must know before trusting that (`--check` never archives, the PostToolUse hook never archives) are exactly the part that cannot be deferred to a pointer. The prose was NOT moved to docs/guidelines/agent-infra/roadmap-progress-mechanics.md, which is where this rule's migration note sends its mechanics, because that file has roughly a hundred characters of headroom under the 16,000-char depth ceiling and check_depth_budget is shrink-only with four files already over it \u2014 a FIFTH over-ceiling file reds, so moving 400 characters there would have traded this gate for that one. The full contract, the council record and its recorded dissent live with the code in src/agent-src/scripts/archival_sweep.ts, which is the third home and the one with room."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"date": "2026-08-20",
|
|
74
|
+
"rule": "artifact-drafting-protocol",
|
|
75
|
+
"from": 611,
|
|
76
|
+
"to": 680,
|
|
77
|
+
"reason": "Three lines plus a pointer extension, +69 tokens, for a new contract field that governs what a run may author without asking: an artifact discovered AFTER an accepted execution contract halts by default, and `late_artifacts: auto-research` is the only declared value that continues, capped at three per run. The five-step auto-research procedure, the reasoning for the default and its reversibility argument all went to the pointer target (artifact-drafting-protocol-mechanics gains a Late artifacts section) rather than here, which is what held the growth to a bullet. The residue is obligation surface and cannot live in the guideline: this rule's own batch-mode bullet already tells the reader that a mid-run artifact triggers the full interactive protocol, so a reader who never opens the guideline would conclude that a declared value cannot change it. Named default rather than described behaviour, because the default direction is the decision -- AI council 2/2 (anthropic + openai) chose `halt` over `auto-research` on the autonomy-defaults-sheet fork of road-to-user-out-of-the-loop, record agents/evidence/council/drain-blocker-dispositions-a.md."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"date": "2026-08-20",
|
|
81
|
+
"rule": "roadmap-progress-sync",
|
|
82
|
+
"from": 2185,
|
|
83
|
+
"to": 2479,
|
|
84
|
+
"reason": "One subsection, +294 tokens, for the `deferred_policy` contract field: a declared policy removes the synchronous options ROUND at closure without moving any row of the preservation test's routing table. It is obligation surface and it cannot live anywhere else. Not in the pointer target -- roadmap-progress-mechanics.md sits at 16,039 chars against check_depth_budget's 16,000-char ceiling, and that gate is a count ratchet whose next failure is a FIFTH over-ceiling file, so prose pushed there is the one move that turns a warn into a red. Not in the contract context either: Iron Law 3 is the gate being amended, and a reader who learns from roadmap-execution-contract that a field exists but never reads this rule would not know that `cancel-with-memo` still stops for the user. The three-row table is the delta in full; the reasoning, both alternatives and the reversibility argument went to the contract context's own decision comment. Condensed once before this raise (2509 -> 2411) by cutting a paragraph that restated the preservation test. AI council 2/2 (anthropic + openai) on the autonomy-defaults-sheet fork of road-to-user-out-of-the-loop, record agents/evidence/council/drain-blocker-dispositions-a.md. RE-BASED on merge with origin/main, 2026-08-20: this entry was authored against a base of 2117 and raised to 2411. main had independently raised the same ceiling 2117 -> 2185 for its own reason, so the merged tree measures 2479 and the honest arithmetic for THIS raise is 2185 -> 2479 -- the same +294 for the same subsection, re-based rather than re-argued. Recorded rather than silently regenerated because the gate's own failure text names a history-versus-ceilings disagreement as the signature of a hand-edited count, and a merge that quietly adopted one side's numbers would produce exactly that signature with nothing saying why."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"date": "2026-08-22",
|
|
88
|
+
"rule": "untrusted-input-defense",
|
|
89
|
+
"from": 845,
|
|
90
|
+
"to": 934,
|
|
91
|
+
"reason": "Six lines, +89 tokens, correcting a claim the section itself had made false. It said no content-scanning backstop existed and that a future one would be the first candidate to change enforced_by; injection_scan_hook.ts now exists, so the first half is false, and the second was always wrong because a warn-only hook cannot refuse and therefore cannot enforce. Every sentence left carries one of those claims. The measurement half -- slot, 15 channels, 99.00 percent recall, 0.85 percent false positives, the manifest keys -- did move to the pointer target, which is what cut the overshoot from +194 to +89; what stays is the rule's own enforcement disclosure, and a stub ceiling that forbids correcting a false statement about the rule's own enforcement is the wrong constraint applied to the right file."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"date": "2026-08-23",
|
|
95
|
+
"rule": "design-fidelity",
|
|
96
|
+
"from": 2245,
|
|
97
|
+
"to": 2540,
|
|
98
|
+
"reason": "One subsection, +295 tokens, for the second axis: artefact MATURITY is a property of the handed-over artefact, instruction MANDATE is a property of the prose, and `strict` on a self-declared wireframe is a structure mandate rather than a pixel mandate. It is an Iron Law plus the two discriminator clauses that decide it -- obligation surface, which this repository's rule/mechanics split puts in the rule by construction. The lookup half ALREADY went to the pointer target in the same change: the maturity-to-spec table and the pinned `daf-wireframe-near-miss` row live in design-fidelity-mechanics.md \u00a7 Artefact maturity, and the rule links them. Pushing the remaining prose there too is the one move that is not available -- that migration is exactly what took the mechanics file from 15,265 to 16,524 chars past check_depth_budget's 16,000 ceiling, and paying for it required splitting the asset & imagery block out into its own guideline in this same commit series. A second push would re-red the ratchet the split just cleared. Raised rather than condensed because the two clauses that would compress are the ones that carry the decision: 'the discriminator reads the ARTEFACT, never the prose' and 'an undeclared artefact is treated as finished' -- drop either and the rule authorises the redesign it exists to prevent."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"date": "2026-08-23",
|
|
102
|
+
"rule": "ui-audit-gate",
|
|
103
|
+
"from": 1280,
|
|
104
|
+
"to": 1491,
|
|
105
|
+
"reason": "road-to-frontend-power E2.2 moved this rule's `enforced_by:` from `none` to `hook:design-pass`, because `agent-config ui:audit` now writes the artefact the rule previously had nothing to point at. +127 tokens, and every one of them is the SCOPE of that change rather than a description of the mechanism: the check is FRESHNESS not existence (a stale artefact looks like evidence, which is worse than a missing one), the carrier is default-OFF and warns before it blocks, and the greenfield asymmetry is NOT closed -- `_lib/ui_surface.ts` is a path predicate, measured recall 20/23 with all three misses being a UI request that has produced no UI file yet, so this gate cannot fire on the first write of a new surface. Condensed first, from +279 to +127, by cutting the narrative framing and the changed-in-both-directions paragraph. The three limits are what remains and they are the reason the raise is legitimate: a rule that newly claims a carrier and does not state where the carrier stops is a stronger claim than the tree supports, which is the exact over-claim this repository has already had to correct twice in the hook-architecture host table. Not pushed to the pointer target: `existing-ui-audit` is a SKILL describing how to run an audit, and the boundary of a gate's enforcement is an obligation-surface fact -- putting it there would file the limit where nobody reading the gate will find it. Amended in the same change, 1407 -> 1491 (+84): landing the carrier revealed that `design-pass-stop` is `severity: advisory` and the dispatcher enforces advisory as a CEILING, so an EXIT_BLOCK from it is downgraded and then mapped to exit 0. Claiming a block in this rule while the transport discards it would be the inert-refusal defect `run-continuation` already recorded once. Limit 2 therefore states what actually happens -- the stop verdict is REPORTED as would-block, not enforced -- and names what would make it real: an entry in concern_severity.test.ts's BLOCKING_ALLOWLIST, which that file calls a security-relevant decision and which would be the third turn-END refusal in the tree. That is a stronger reason to spend the tokens than the original raise had: a rule whose enforced_by names a carrier, and which does not say the carrier cannot refuse, is the over-claim this whole section exists to prevent."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"date": "2026-08-23",
|
|
109
|
+
"rule": "framework-neutrality-in-generic-skills",
|
|
110
|
+
"from": 621,
|
|
111
|
+
"to": 636,
|
|
112
|
+
"reason": "Two entries on the exempt list, +15 tokens: `^monorepo-workspace$` and `^workspace-link$`, the two skills road-to-monorepo-scope-and-detection adds. The list is not lookup material and cannot go to the pointer target: it is the rule's own ACTIVATION condition -- the gate decides from it whether an artefact is generic at all, so a rule whose exempt list lives elsewhere cannot answer its own first question. Every prior addition to that list moved this number for the same reason, and the alternative the gate offers (move prose to the pointer target) has nothing to move here: the two entries ARE the change. Raised rather than condensed because 15 tokens of pattern cannot be condensed without deleting one of the two patterns, which would make a framework-specific skill fail a rule it is exempt from."
|
|
113
|
+
}
|
|
114
|
+
]
|
|
94
115
|
}
|
|
@@ -82,6 +82,13 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
82
82
|
|
|
83
83
|
import * as YAML from 'yaml';
|
|
84
84
|
|
|
85
|
+
import { _check_overrides } from './doctor_overrides.js';
|
|
86
|
+
import { _is_global_only_consumer } from './doctor_install_mode.js';
|
|
87
|
+
// Forwarded, not re-declared: both names moved to doctor_install_mode.ts and existing
|
|
88
|
+
// importers of cmd_doctor.js keep resolving. `export ... from` rather than an import,
|
|
89
|
+
// because INSTALL_MODE_MARKER_RELATIVE is not referenced here any more and an unused
|
|
90
|
+
// import would be dropped — silently breaking whoever imports it from this path.
|
|
91
|
+
export { INSTALL_MODE_MARKER_RELATIVE, _is_global_only_consumer } from './doctor_install_mode.js';
|
|
85
92
|
import * as claude_plugin from '../_lib/claude_plugin.js';
|
|
86
93
|
import * as claude_settings_hooks from '../_lib/claude_settings_hooks.js';
|
|
87
94
|
import { _is_source_repo } from './cmd_refresh.js';
|
|
@@ -765,6 +772,7 @@ const CHECK_IDS = [
|
|
|
765
772
|
'surface-state',
|
|
766
773
|
'hook-wiring',
|
|
767
774
|
'stale-orphans',
|
|
775
|
+
'overrides',
|
|
768
776
|
'rule-scope-drift',
|
|
769
777
|
'manifest-integrity',
|
|
770
778
|
'lockfile-freshness',
|
|
@@ -795,6 +803,7 @@ const GLOBAL_CHECK_IDS: ReadonlySet<string> = new Set([
|
|
|
795
803
|
'surface-state',
|
|
796
804
|
'hook-wiring',
|
|
797
805
|
'stale-orphans',
|
|
806
|
+
'overrides',
|
|
798
807
|
'rule-scope-drift',
|
|
799
808
|
'mcp-mode',
|
|
800
809
|
'mcp-beta-readiness',
|
|
@@ -818,20 +827,6 @@ const MANIFEST_REQUIRED_CHECK_IDS: ReadonlySet<string> = new Set([
|
|
|
818
827
|
'unsupported-combos',
|
|
819
828
|
]);
|
|
820
829
|
|
|
821
|
-
/**
|
|
822
|
-
* Signals a set-up global-only consumer. The `.event4u-bridge.yml` marker was
|
|
823
|
-
* retired (ADR-020 amendment 2026-07-13); the durable project-side signal is
|
|
824
|
-
* the install-mode marker (written on every install) or the `agents/overrides/`
|
|
825
|
-
* scaffold. Either is sufficient.
|
|
826
|
-
*/
|
|
827
|
-
const INSTALL_MODE_MARKER_RELATIVE = 'agents/.agent-state/install-mode.txt';
|
|
828
|
-
|
|
829
|
-
function _is_global_only_consumer(project_root: string): boolean {
|
|
830
|
-
return (
|
|
831
|
-
isFile(path.join(project_root, INSTALL_MODE_MARKER_RELATIVE)) ||
|
|
832
|
-
isDir(path.join(project_root, 'agents', 'overrides'))
|
|
833
|
-
);
|
|
834
|
-
}
|
|
835
830
|
|
|
836
831
|
/** Repair targets that `--repair <id>` accepts. */
|
|
837
832
|
const REPAIR_IDS = ['wizard-state'] as const;
|
|
@@ -2976,6 +2971,7 @@ function _run_checks(
|
|
|
2976
2971
|
'surface-state': _check_surface_state,
|
|
2977
2972
|
'hook-wiring': _check_hook_wiring,
|
|
2978
2973
|
'stale-orphans': _check_stale_orphans,
|
|
2974
|
+
overrides: () => _check_overrides(project_root),
|
|
2979
2975
|
'rule-scope-drift': () => _check_rule_scope_drift(project_root),
|
|
2980
2976
|
'manifest-integrity': () => _check_manifest_integrity(manifest),
|
|
2981
2977
|
'lockfile-freshness': () => _check_lockfile_freshness(manifest),
|
|
@@ -3059,6 +3055,11 @@ function _run_checks_no_manifest(
|
|
|
3059
3055
|
'surface-state': _check_surface_state,
|
|
3060
3056
|
'hook-wiring': _check_hook_wiring,
|
|
3061
3057
|
'stale-orphans': _check_stale_orphans,
|
|
3058
|
+
// BOTH registries need the id. Registering only the first one crashed with
|
|
3059
|
+
// `runners[cid] is not a function` on a global-only consumer, which is the
|
|
3060
|
+
// path that has no manifest — a loud failure rather than a silent skip, and
|
|
3061
|
+
// worth the comment because the duplication is easy to miss.
|
|
3062
|
+
overrides: () => _check_overrides(project_root),
|
|
3062
3063
|
'rule-scope-drift': () => _check_rule_scope_drift(project_root),
|
|
3063
3064
|
'manifest-integrity': () => _skipped_manifest_check('manifest-integrity'),
|
|
3064
3065
|
'lockfile-freshness': () => _skipped_manifest_check('lockfile-freshness'),
|
|
@@ -3710,8 +3711,6 @@ export {
|
|
|
3710
3711
|
CHECK_IDS,
|
|
3711
3712
|
GLOBAL_CHECK_IDS,
|
|
3712
3713
|
MANIFEST_REQUIRED_CHECK_IDS,
|
|
3713
|
-
INSTALL_MODE_MARKER_RELATIVE,
|
|
3714
|
-
_is_global_only_consumer,
|
|
3715
3714
|
REPAIR_IDS,
|
|
3716
3715
|
MCP_BETA_GATES,
|
|
3717
3716
|
STATUS_SYMBOLS,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install-mode detection, extracted from `cmd_doctor.ts`.
|
|
3
|
+
*
|
|
4
|
+
* A PURE MOVE, and the reason is arithmetic. `cmd_doctor.ts` sits ~2,200 lines above the
|
|
5
|
+
* 1,500-line ceiling, so `check_source_size_budget` refuses ANY net growth in it: the
|
|
6
|
+
* override-delivery check cost 128 lines, extracting that check into
|
|
7
|
+
* `doctor_overrides.ts` paid 119, and this pays the residual 9.
|
|
8
|
+
*
|
|
9
|
+
* Extracting a NEIGHBOUR rather than shaving the new feature is deliberate. The
|
|
10
|
+
* alternative was compressing the new check's comments until the number fit, which buys
|
|
11
|
+
* the same green from worse code. A file under the ceiling contributes zero excess, so
|
|
12
|
+
* the total falls by exactly what leaves.
|
|
13
|
+
*
|
|
14
|
+
* It is also a genuinely separate concern: "which install shape is this project in" is
|
|
15
|
+
* asked before any check runs, and it reads markers rather than performing a check.
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'node:fs';
|
|
18
|
+
import * as path from 'node:path';
|
|
19
|
+
|
|
20
|
+
function isFile(p: string): boolean {
|
|
21
|
+
try {
|
|
22
|
+
return fs.statSync(p).isFile();
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function isDir(p: string): boolean {
|
|
29
|
+
try {
|
|
30
|
+
return fs.statSync(p).isDirectory();
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Signals a set-up global-only consumer. The `.event4u-bridge.yml` marker was
|
|
38
|
+
* retired (ADR-020 amendment 2026-07-13); the durable project-side signal is
|
|
39
|
+
* the install-mode marker (written on every install) or the `agents/overrides/`
|
|
40
|
+
* scaffold. Either is sufficient.
|
|
41
|
+
*/
|
|
42
|
+
export const INSTALL_MODE_MARKER_RELATIVE = 'agents/.agent-state/install-mode.txt';
|
|
43
|
+
|
|
44
|
+
export function _is_global_only_consumer(project_root: string): boolean {
|
|
45
|
+
return (
|
|
46
|
+
isFile(path.join(project_root, INSTALL_MODE_MARKER_RELATIVE)) ||
|
|
47
|
+
isDir(path.join(project_root, 'agents', 'overrides'))
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The doctor's override-delivery check, extracted from `cmd_doctor.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Extracted rather than inlined because `cmd_doctor.ts` sits at 3,852 lines against
|
|
5
|
+
* the 1,500-line ceiling, so `check_source_size_budget` refuses ANY net growth in it
|
|
6
|
+
* — the same ratchet that refused two earlier attempts at an unrelated feature. The
|
|
7
|
+
* check landed inline first and the gate said so (128 new violations); this file is
|
|
8
|
+
* the fix, and it is a pure move. A new file under the ceiling contributes zero
|
|
9
|
+
* excess, so the total falls by exactly what left.
|
|
10
|
+
*
|
|
11
|
+
* Kept as its own module rather than folded into a grab-bag of checks: it is the only
|
|
12
|
+
* consumer of `KERNEL_RULE_ID_SET` in the doctor, and that import came with it.
|
|
13
|
+
*/
|
|
14
|
+
import * as fs from 'node:fs';
|
|
15
|
+
import * as path from 'node:path';
|
|
16
|
+
|
|
17
|
+
import { KERNEL_RULE_ID_SET } from '../_lib/kernel_rules.js';
|
|
18
|
+
|
|
19
|
+
type Dict = Record<string, unknown>;
|
|
20
|
+
|
|
21
|
+
function isDir(p: string): boolean {
|
|
22
|
+
try {
|
|
23
|
+
return fs.statSync(p).isDirectory();
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isFile(p: string): boolean {
|
|
30
|
+
try {
|
|
31
|
+
return fs.statSync(p).isFile();
|
|
32
|
+
} catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Override DELIVERY and audit state — steps 3.1 and 3.2 of
|
|
39
|
+
* `road-to-override-efficacy-proof`.
|
|
40
|
+
*
|
|
41
|
+
* The report already knew `agents/overrides/` existed, as an install-mode marker
|
|
42
|
+
* (`_is_global_only_consumer`). It never said what was IN it, so a consumer who
|
|
43
|
+
* placed an override had no surface anywhere that confirmed the file was seen.
|
|
44
|
+
*
|
|
45
|
+
* THE VOCABULARY IS THE CONTRACT, and step 3.2 makes it a checkable one. This line
|
|
46
|
+
* says `present`, `registered`, `cited` — never `enforced`, `applied`, `honoured`
|
|
47
|
+
* or `honored`. Those four words would make it read as a claim that the agent
|
|
48
|
+
* changed its behaviour, which is Phase 2's number and is deferred on population
|
|
49
|
+
* validity. A delivery check quoted as an efficacy claim is the exact defect this
|
|
50
|
+
* roadmap exists to close, so the words it must not use are asserted against by
|
|
51
|
+
* `agent-config doctor 2>&1 | grep -iE 'override.*(enforced|applied|honoured|honored)'`
|
|
52
|
+
* returning nothing.
|
|
53
|
+
*
|
|
54
|
+
* `warn` rather than `error` on an uncited or unregistered override: the strict
|
|
55
|
+
* gate (`lint_override_kernel_guard --strict`) is what refuses those in CI. Two
|
|
56
|
+
* surfaces failing the same fact would make `doctor` a second gate with no
|
|
57
|
+
* authority, and the doctor's job is to tell a consumer what state they are in.
|
|
58
|
+
*/
|
|
59
|
+
export function _check_overrides(project_root: string): Dict {
|
|
60
|
+
const dir = path.join(project_root, 'agents', 'overrides', 'rules');
|
|
61
|
+
if (!isDir(dir)) {
|
|
62
|
+
return {
|
|
63
|
+
id: 'overrides',
|
|
64
|
+
status: 'skip',
|
|
65
|
+
message: 'no agents/overrides/rules/ — no overrides declared',
|
|
66
|
+
remedy: '',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
let names: string[];
|
|
70
|
+
try {
|
|
71
|
+
names = fs
|
|
72
|
+
.readdirSync(dir)
|
|
73
|
+
.filter((n) => n.endsWith('.md'))
|
|
74
|
+
.sort();
|
|
75
|
+
} catch {
|
|
76
|
+
return {
|
|
77
|
+
id: 'overrides',
|
|
78
|
+
status: 'warn',
|
|
79
|
+
message: 'agents/overrides/rules/ is present but unreadable',
|
|
80
|
+
remedy: 'check permissions on agents/overrides/rules/',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (names.length === 0) {
|
|
84
|
+
return {
|
|
85
|
+
id: 'overrides',
|
|
86
|
+
status: 'ok',
|
|
87
|
+
message: 'agents/overrides/rules/ present, 0 overrides declared',
|
|
88
|
+
remedy: '',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const registryPath = path.join(project_root, 'agents', 'overrides', 'kernel-exceptions.yml');
|
|
92
|
+
// Parse the `exceptions:` block the same way the audit does, rather than
|
|
93
|
+
// grepping for the rule name anywhere in the file. The first version did grep,
|
|
94
|
+
// and it read `verify-before-complete` as UNREGISTERED even though the registry
|
|
95
|
+
// lists it — the name appears inside a `justification:` block and the entry key
|
|
96
|
+
// is `rule:`, so a bare name match neither confirms nor denies registration. A
|
|
97
|
+
// doctor line that contradicts the strict gate is worse than no line.
|
|
98
|
+
const registered = new Set<string>();
|
|
99
|
+
if (isFile(registryPath)) {
|
|
100
|
+
let inExceptions = false;
|
|
101
|
+
for (const raw of fs.readFileSync(registryPath, 'utf-8').split('\n')) {
|
|
102
|
+
const line = raw.replace(/\s+$/, '');
|
|
103
|
+
if (/^exceptions:\s*$/.test(line)) {
|
|
104
|
+
inExceptions = true;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (!inExceptions) continue;
|
|
108
|
+
if (/^\S/.test(line)) break;
|
|
109
|
+
const m = /^\s*-?\s*rule:\s*"?([a-z0-9-]+)"?\s*$/i.exec(line);
|
|
110
|
+
if (m?.[1] !== undefined) registered.add(m[1]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
let kernel = 0;
|
|
114
|
+
let uncited = 0;
|
|
115
|
+
let unregisteredKernel = 0;
|
|
116
|
+
for (const n of names) {
|
|
117
|
+
const rule = n.replace(/\.md$/, '');
|
|
118
|
+
const isKernel = KERNEL_RULE_ID_SET.has(rule);
|
|
119
|
+
if (isKernel) kernel += 1;
|
|
120
|
+
const text = fs.readFileSync(path.join(dir, n), 'utf-8');
|
|
121
|
+
// Same shape the audit's `has_citation` looks for. Duplicated rather than
|
|
122
|
+
// imported because cmd_doctor must not pull a lint module into the CLI's
|
|
123
|
+
// startup path; the strict gate owns the authoritative check and this is a
|
|
124
|
+
// report.
|
|
125
|
+
if (!/^>\s*Overrides:/m.test(text)) uncited += 1;
|
|
126
|
+
if (isKernel && !registered.has(rule)) {
|
|
127
|
+
unregisteredKernel += 1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const parts = [
|
|
131
|
+
`${String(names.length)} override(s) present`,
|
|
132
|
+
`${String(kernel)} kernel`,
|
|
133
|
+
];
|
|
134
|
+
// Registration is stated POSITIVELY, not only on failure. Step 3.1's verify
|
|
135
|
+
// names four words the line must carry — one override, kernel, registered,
|
|
136
|
+
// cited — and a count that appears only when it is wrong leaves a reader
|
|
137
|
+
// unable to tell "all registered" from "registration not checked".
|
|
138
|
+
if (kernel > 0) {
|
|
139
|
+
parts.push(`${String(kernel - unregisteredKernel)}/${String(kernel)} kernel registered`);
|
|
140
|
+
}
|
|
141
|
+
parts.push(`${String(names.length - uncited)}/${String(names.length)} cited`);
|
|
142
|
+
// Deliberately last and deliberately blunt: without it the counts read as a
|
|
143
|
+
// verdict on whether the overrides work.
|
|
144
|
+
parts.push('delivery only — efficacy unmeasured');
|
|
145
|
+
return {
|
|
146
|
+
id: 'overrides',
|
|
147
|
+
status: uncited > 0 || unregisteredKernel > 0 ? 'warn' : 'ok',
|
|
148
|
+
message: parts.join(', '),
|
|
149
|
+
remedy:
|
|
150
|
+
uncited > 0 || unregisteredKernel > 0
|
|
151
|
+
? 'run `./scripts-run src/scripts/lint_override_kernel_guard --strict` for the detail'
|
|
152
|
+
: '',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
@@ -71,6 +71,10 @@ TS-shell native (run via the installed `agent-config` binary):
|
|
|
71
71
|
config Open the configuration GUI (global default; --project for the project surface)
|
|
72
72
|
settings Open the local Settings GUI (alias of config)
|
|
73
73
|
ui:serve Start the local UI server (127.0.0.1, auto-picked port)
|
|
74
|
+
ui:audit [path] Inventory a UI tree into agents/runtime/state/ui-audit.json
|
|
75
|
+
(Class A). The artefact ui-audit-gate reads.
|
|
76
|
+
ui:render <path|url> Headless capture at desktop / 375px / 320px into
|
|
77
|
+
agents/runtime/state/render/ (Class A; no process survives).
|
|
74
78
|
workspaces ls List workspaces from the discovery manifest
|
|
75
79
|
packs ls List packs from the discovery manifest
|
|
76
80
|
brand:status Is a consumer brand layer present, and at which of the
|
|
@@ -224,6 +228,10 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
|
|
|
224
228
|
session:recycle Validate + write the main-session recycle envelope (--verify validates only)
|
|
225
229
|
(deliberate recycle instead of auto-compact). Flags:
|
|
226
230
|
--file <json> | --template; default reads stdin
|
|
231
|
+
roadmap:context One live situational-awareness probe: open PRs and the
|
|
232
|
+
files they change, remote branches carrying a roadmap
|
|
233
|
+
slug, live sessions, agents/tmp/ note NAMES, and sibling
|
|
234
|
+
roadmaps on the same topic. --roadmap <slug>, --json
|
|
227
235
|
roadmap:progress Regenerate agents/roadmaps-progress.md from open roadmaps
|
|
228
236
|
(archives completed roadmaps; --no-archive to skip)
|
|
229
237
|
roadmap:progress-check Fail if agents/roadmaps-progress.md is stale (for CI)
|
|
@@ -693,6 +701,14 @@ cmd_mcp_run() {
|
|
|
693
701
|
# PACKAGE_ROOT, not the consumer projection: the CLI imports the register library
|
|
694
702
|
# under src/scripts/_lib/, which is package-internal and never shipped into
|
|
695
703
|
# dist/agent-src/scripts/. Same shape as cmd_settings_set.
|
|
704
|
+
# Situational-awareness probe (road-to-roadmap-situational-awareness Phase 1).
|
|
705
|
+
# PACKAGE_ROOT, not the consumer projection: it imports src/scripts/_lib/, which
|
|
706
|
+
# is package-internal and never shipped into dist/agent-src/scripts/. Same shape
|
|
707
|
+
# as cmd_sessions_list below, and for the same reason.
|
|
708
|
+
cmd_roadmap_context() {
|
|
709
|
+
exec_ts "$PACKAGE_ROOT/src/scripts/roadmap_context.ts" "$@"
|
|
710
|
+
}
|
|
711
|
+
|
|
696
712
|
cmd_sessions_list() {
|
|
697
713
|
exec_ts "$PACKAGE_ROOT/src/scripts/sessions_cli.ts" list "$@"
|
|
698
714
|
}
|
|
@@ -1461,6 +1477,7 @@ main() {
|
|
|
1461
1477
|
settings:get) cmd_settings_get "$@" ;;
|
|
1462
1478
|
mcp:available) cmd_mcp_available "$@" ;;
|
|
1463
1479
|
brand:status) cmd_brand_status "$@" ;;
|
|
1480
|
+
roadmap:context) cmd_roadmap_context "$@" ;;
|
|
1464
1481
|
roadmap:progress) cmd_roadmap_progress "$@" ;;
|
|
1465
1482
|
roadmap:progress-check) cmd_roadmap_progress_check "$@" ;;
|
|
1466
1483
|
roadmap:archive) cmd_roadmap_archive "$@" ;;
|