@event4u/agent-config 16.2.0 → 16.4.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 +337 -234
- package/README.md +15 -13
- package/agents/templates/.ai-council.yml.example +26 -8
- package/dist/agent-src/commands/analyze/inbox.md +11 -8
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/bug/investigate.md +1 -1
- package/dist/agent-src/commands/commit/in-chunks.md +40 -31
- package/dist/agent-src/commands/commit.md +72 -33
- package/dist/agent-src/commands/condense.md +2 -8
- package/dist/agent-src/commands/council/debate.md +11 -7
- package/dist/agent-src/commands/council/default.md +10 -9
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/estimate-ticket.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +3 -3
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +18 -4
- package/dist/agent-src/commands/fix/commit-messages.md +48 -23
- package/dist/agent-src/commands/fix/pr-comments.md +3 -6
- package/dist/agent-src/commands/implement-ticket.md +4 -4
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/memory/add.md +4 -16
- package/dist/agent-src/commands/memory/load.md +5 -6
- package/dist/agent-src/commands/memory/promote.md +3 -16
- package/dist/agent-src/commands/mission/upgrade.md +3 -2
- package/dist/agent-src/commands/optimize/agents-dir.md +2 -2
- package/dist/agent-src/commands/optimize/deep.md +4 -2
- package/dist/agent-src/commands/optimize/rtk.md +4 -26
- package/dist/agent-src/commands/pr/create/description-only.md +18 -15
- package/dist/agent-src/commands/pr/create.md +42 -34
- package/dist/agent-src/commands/pr/merge.md +136 -9
- package/dist/agent-src/commands/prepare-for-review.md +13 -11
- package/dist/agent-src/commands/project/analyze.md +7 -35
- package/dist/agent-src/commands/refine-ticket.md +1 -1
- package/dist/agent-src/commands/review/changes.md +14 -19
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +10 -1
- package/dist/agent-src/commands/roadmap/process-full.md +56 -42
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +411 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/worktree/create.md +7 -3
- package/dist/agent-src/commands/worktree/verify.md +2 -1
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +5 -3
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +7 -9
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -6
- package/dist/agent-src/contexts/contracts/frugality-charter.md +8 -5
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +7 -7
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +0 -1
- package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +5 -8
- package/dist/agent-src/contexts/execution/rdp-gate.md +4 -4
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +9 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +99 -54
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/subagent-routing.md +8 -8
- package/dist/agent-src/contexts/execution/subagent-steering.md +6 -4
- package/dist/agent-src/contexts/execution/terminal-states.md +2 -2
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +95 -7
- package/dist/agent-src/contexts/subagent-configuration.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +13 -1
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +36 -0
- package/dist/agent-src/guidelines/php/git.md +15 -2
- package/dist/agent-src/rules/active-remediation.md +1 -2
- package/dist/agent-src/rules/analysis-skill-routing.md +0 -1
- package/dist/agent-src/rules/architecture.md +0 -1
- package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -1
- package/dist/agent-src/rules/artifact-engagement-recording.md +0 -1
- package/dist/agent-src/rules/augment-edit-discipline.md +0 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -1
- package/dist/agent-src/rules/brand-consistency.md +0 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +0 -1
- package/dist/agent-src/rules/broken-access-control.md +1 -1
- package/dist/agent-src/rules/cli-output-handling.md +0 -1
- package/dist/agent-src/rules/code-comment-discipline.md +0 -1
- package/dist/agent-src/rules/code-provenance.md +0 -1
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -1
- package/dist/agent-src/rules/commit-conventions.md +1 -2
- package/dist/agent-src/rules/communication-through-line.md +1 -2
- package/dist/agent-src/rules/content-quoting-floor.md +1 -2
- package/dist/agent-src/rules/context-hygiene.md +6 -6
- package/dist/agent-src/rules/copilot-routing.md +1 -2
- package/dist/agent-src/rules/council-availability.md +4 -4
- package/dist/agent-src/rules/cross-source-consistency.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +17 -35
- package/dist/agent-src/rules/delegation-policy.md +2 -3
- package/dist/agent-src/rules/design-fidelity.md +12 -16
- package/dist/agent-src/rules/design-review-after-ui-write.md +3 -3
- package/dist/agent-src/rules/devcontainer-routing.md +1 -2
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
- package/dist/agent-src/rules/docker-commands.md +0 -1
- package/dist/agent-src/rules/domain-adoption-policy.md +0 -1
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +1 -1
- package/dist/agent-src/rules/domain-safety-retention.md +1 -1
- package/dist/agent-src/rules/downstream-changes.md +0 -1
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/external-code-graph-interop.md +0 -1
- package/dist/agent-src/rules/external-reference-deep-dive.md +0 -1
- package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -2
- package/dist/agent-src/rules/finance-safety-floor.md +1 -1
- package/dist/agent-src/rules/fix-what-you-see.md +6 -32
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +0 -1
- package/dist/agent-src/rules/git-history-discipline.md +2 -2
- package/dist/agent-src/rules/guidelines.md +0 -1
- package/dist/agent-src/rules/history-discipline.md +0 -1
- package/dist/agent-src/rules/icon-consistency.md +0 -1
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -1
- package/dist/agent-src/rules/improve-before-implement.md +0 -1
- package/dist/agent-src/rules/invite-challenge.md +0 -1
- package/dist/agent-src/rules/laravel-routing.md +1 -2
- package/dist/agent-src/rules/laravel-translations.md +0 -1
- package/dist/agent-src/rules/legal-safety-floor.md +3 -3
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -1
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
- package/dist/agent-src/rules/media-governance-routing.md +13 -17
- package/dist/agent-src/rules/media-sync-ground-truth.md +0 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +0 -1
- package/dist/agent-src/rules/missing-skill-recovery.md +0 -1
- package/dist/agent-src/rules/missing-tool-handling.md +0 -1
- package/dist/agent-src/rules/model-recommendation.md +0 -1
- package/dist/agent-src/rules/neighbour-precedence.md +64 -0
- package/dist/agent-src/rules/no-attribution-footers.md +0 -1
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -1
- package/dist/agent-src/rules/no-pr-progress-comments.md +0 -1
- package/dist/agent-src/rules/no-roadmap-references.md +0 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +0 -1
- package/dist/agent-src/rules/onboarding-gate.md +0 -1
- package/dist/agent-src/rules/output-discipline.md +0 -1
- package/dist/agent-src/rules/package-ci-checks.md +0 -1
- package/dist/agent-src/rules/persona-governance.md +4 -5
- package/dist/agent-src/rules/php-coding.md +0 -1
- package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -1
- package/dist/agent-src/rules/preservation-guard.md +0 -1
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -4
- package/dist/agent-src/rules/question-not-instruction.md +1 -1
- package/dist/agent-src/rules/reviewer-awareness.md +0 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +4 -7
- package/dist/agent-src/rules/role-mode-adherence.md +0 -1
- package/dist/agent-src/rules/rule-type-governance.md +0 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -1
- package/dist/agent-src/rules/scale-discipline.md +0 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -3
- package/dist/agent-src/rules/self-repair-loop.md +0 -1
- package/dist/agent-src/rules/senior-engineering-discipline.md +0 -1
- package/dist/agent-src/rules/session-canary.md +7 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +6 -6
- package/dist/agent-src/rules/size-enforcement.md +0 -1
- package/dist/agent-src/rules/skill-improvement-trigger.md +2 -3
- package/dist/agent-src/rules/skill-quality.md +0 -1
- package/dist/agent-src/rules/slash-command-routing-policy.md +0 -1
- package/dist/agent-src/rules/source-confidentiality.md +1 -1
- package/dist/agent-src/rules/source-discovery-gate.md +0 -1
- package/dist/agent-src/rules/source-of-truth.md +0 -1
- package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -2
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
- package/dist/agent-src/rules/symfony-routing.md +1 -2
- package/dist/agent-src/rules/think-before-action.md +0 -1
- package/dist/agent-src/rules/token-budget-discipline.md +12 -46
- package/dist/agent-src/rules/token-efficiency.md +0 -1
- package/dist/agent-src/rules/token-optimizer-maintenance.md +0 -1
- package/dist/agent-src/rules/tool-safety.md +1 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -1
- package/dist/agent-src/rules/upstream-proposal.md +0 -1
- package/dist/agent-src/rules/user-interaction.md +0 -1
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -1
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/gate_budget.ts +47 -23
- package/dist/agent-src/scripts/gate_execute.ts +12 -4
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +7 -4
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +21 -11
- package/dist/agent-src/skills/ai-council/references/procedure.md +12 -6
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/command-routing/SKILL.md +3 -4
- package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +127 -139
- package/dist/agent-src/skills/corpus-grounding/ATTRIBUTION.md +39 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +8 -2
- package/dist/agent-src/skills/database/data/manifest.json +2 -2
- package/dist/agent-src/skills/database/data/query-tuning.csv +13 -13
- package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/git-workflow/SKILL.md +44 -44
- package/dist/agent-src/skills/git-workflow/references/branch-update.md +312 -0
- package/dist/agent-src/skills/git-workflow/references/commit-subject.md +205 -0
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
- package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +4 -2
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +2 -2
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +46 -129
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/roadmaps.md +6 -1
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/skill.md +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +207 -120
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-5GPULQBE.js} +2797 -338
- package/dist/cli-delegate/{chunk-IGD6ERX6.js → chunk-6SRJTYJS.js} +42 -176
- package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-6YQC2HLF.js +415 -0
- package/dist/cli-delegate/{chunk-E4XIZDIB.js → chunk-7HKRE54K.js} +1 -64
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-AED2VQGM.js} +1245 -249
- package/dist/cli-delegate/{chunk-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
- package/dist/cli-delegate/chunk-F3QDG2GT.js +2569 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-G5VVIZRC.js} +3 -3
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-H76PHZBI.js} +149 -61
- package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-KXXWJTDO.js} +6 -11
- package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-MDPPKQCQ.js} +58 -9
- package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-MSUL5NYP.js} +5 -5
- package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-PWX7CKMD.js} +4 -4
- package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
- package/dist/cli-delegate/{chunk-7XGBX6ZH.js → chunk-T7XSJSUQ.js} +1144 -589
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/chunk-WQWXGIWB.js +1779 -0
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-XQTPXKFA.js} +1 -1
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +223 -43
- package/dist/cli-delegate/cmd_brand_status.js +3 -2
- package/dist/cli-delegate/cmd_conformance.js +1252 -249
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +19 -9
- package/dist/cli-delegate/cmd_doctor_neighbours.js +30 -0
- package/dist/cli-delegate/cmd_explain.js +45 -21
- package/dist/cli-delegate/cmd_export.js +13 -10
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_git_convention.js +1851 -0
- package/dist/cli-delegate/cmd_handoff.js +44 -22
- package/dist/cli-delegate/cmd_mcp_available.js +3 -2
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +5 -4
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +14 -11
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +10 -8
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +10 -7
- package/dist/cli-delegate/cmd_settings_check.js +54 -7
- package/dist/cli-delegate/cmd_settings_get.js +18 -8
- package/dist/cli-delegate/cmd_settings_migrate.js +13 -10
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +14 -11
- package/dist/cli-delegate/cmd_uninstall.js +15 -12
- package/dist/cli-delegate/cmd_update.js +7 -7
- package/dist/cli-delegate/cmd_upgrade.js +9 -8
- package/dist/cli-delegate/cmd_validate.js +15 -12
- package/dist/cli-delegate/cmd_versions.js +5 -5
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_budget.js +1 -1
- package/dist/cli-delegate/gate_execute.js +3 -3
- package/dist/cli-delegate/roadmap_gates.js +6 -6
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +232 -141
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +26 -9
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +7 -4
- package/dist/hooks/dispatch.js +5655 -6623
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2336 -1249
- package/dist/install/installThinLayer.js +289 -0
- package/dist/install/installedRuleLinks.js +262 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
- package/dist/mcp/registry-manifest.json +5 -5
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +36504 -30986
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +26 -120
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/compile_time_toggles.js +12 -21
- package/dist/scripts/_lib/git_convention.js +232 -0
- package/dist/scripts/_lib/global_deploy_inventory.js +730 -0
- package/dist/scripts/_lib/installed_layer.js +704 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/package_root.js +68 -0
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/settings_removed_keys.js +168 -0
- package/dist/scripts/_lib/thin_rules.js +535 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/app.js +2 -1
- package/dist/server/gitKeysGate.js +105 -0
- package/dist/server/routes/settings.js +67 -8
- package/dist/server/routes/wizard.js +4 -0
- package/dist/server/schemas/settings.js +29 -81
- package/dist/shared/skillRanking.js +103 -16
- package/dist/ui/assets/{index-Cwq4d0hX.js → index-C3djEJah.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +72 -1
- package/docs/contracts/settings-classes.md +39 -67
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
- package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
- package/docs/guidelines/agent-infra/layered-settings.md +13 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
- package/docs/guidelines/agent-infra/size-and-scope.md +36 -0
- package/docs/guidelines/php/git.md +15 -2
- package/package.json +1 -1
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/gate_budget.ts +47 -23
- package/src/agent-src/scripts/gate_execute.ts +12 -4
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
- package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
- package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
- package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/config/agent-settings.template.yml +141 -334
- package/src/config/agents-paths.yml +16 -0
- package/src/config/assurance-capability-registry.json +7 -3
- package/src/config/ci-local-parity.yml +3 -0
- package/src/config/continuity-surface.json +10 -3
- package/src/config/discovery/packs.yml +17 -1
- package/src/config/evaluator-budgets.json +23 -10
- package/src/config/gate-coverage.yml +138 -3
- package/src/config/gate-violation-baselines.json +64 -16
- package/src/config/gitignore-block.txt +19 -0
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-token-budget.json +6 -1
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/release-gate-locality.yml +2 -1
- package/src/config/routing-coverage-seed.json +67 -4
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +105 -0
- package/src/config/rule-obligations.json +833 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +378 -0
- package/src/install/installedRuleLinks.ts +308 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_analyze_session.ts +9 -15
- package/src/scripts/_cli/cmd_conformance.ts +13 -2
- package/src/scripts/_cli/cmd_doctor.ts +33 -81
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +426 -0
- package/src/scripts/_cli/cmd_explain.ts +72 -14
- package/src/scripts/_cli/cmd_git_convention.ts +637 -0
- package/src/scripts/_cli/cmd_settings_check.ts +66 -8
- package/src/scripts/_cli/cmd_settings_get.ts +18 -3
- package/src/scripts/_cli/doctor_execution.ts +72 -1
- package/src/scripts/_dispatch.bash +53 -4
- package/src/scripts/_lib/agent_settings.ts +26 -124
- package/src/scripts/_lib/blocked_by_marker.ts +1 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/compile_time_toggles.ts +12 -21
- package/src/scripts/_lib/dispatch_import_closure.ts +163 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/git_base_ref.ts +92 -0
- package/src/scripts/_lib/git_convention.ts +291 -0
- package/src/scripts/_lib/git_convention_carrier.ts +389 -0
- package/src/scripts/_lib/git_convention_grammar.ts +246 -0
- package/src/scripts/_lib/git_convention_measure.ts +344 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +106 -0
- package/src/scripts/_lib/graph_feeder_record.ts +437 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +963 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/knowledge_global.ts +14 -1
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/module_reach.ts +456 -0
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +187 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/ratification_artifact.ts +220 -1
- package/src/scripts/_lib/ratification_subject.ts +92 -0
- package/src/scripts/_lib/release_findings_ingest.ts +15 -7
- package/src/scripts/_lib/release_highlights.ts +5 -0
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/rule_obligations.ts +205 -0
- package/src/scripts/_lib/self_repair.ts +1 -1
- package/src/scripts/_lib/settings_removed_keys.ts +173 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/test_red_state.ts +5 -0
- package/src/scripts/_lib/thin_rules.ts +620 -0
- package/src/scripts/_lib/touched_file_quality.ts +570 -0
- package/src/scripts/_lib/turn_end_refusals.ts +77 -2
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/_lib/worker_budget.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +16 -1
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +8 -8
- package/src/scripts/ai_council/modification_review.ts +100 -0
- package/src/scripts/ai_council/modification_review_questions.ts +90 -0
- package/src/scripts/ai_council/orchestrator.ts +5 -5
- package/src/scripts/ai_council/spend_gate.ts +18 -7
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/config.ts +11 -16
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/audit_user_type_axis.ts +20 -8
- package/src/scripts/before_complete_hook.ts +243 -12
- package/src/scripts/bench_ab_clone.ts +1 -2
- package/src/scripts/bench_concern_spawn_path.ts +129 -0
- package/src/scripts/bench_graph_feeder_latency.ts +584 -0
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/check_agent_artifact_location.ts +36 -0
- package/src/scripts/check_branch_freshness.ts +147 -24
- package/src/scripts/check_enforcement_coverage.ts +130 -0
- package/src/scripts/check_enforcement_matrix.ts +377 -20
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_evaluator_budgets.ts +4 -0
- package/src/scripts/check_finding_dispositions.ts +196 -21
- package/src/scripts/check_gate_coverage.ts +4 -3
- package/src/scripts/check_gate_reachability.ts +48 -1
- package/src/scripts/check_generator_sync.ts +48 -0
- package/src/scripts/check_hook_bundle_composition.ts +477 -0
- package/src/scripts/check_kernel_edit_ratified.ts +132 -14
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_manifest_content.ts +189 -0
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_standing_rule_delivery.ts +129 -13
- package/src/scripts/check_suppression_hygiene.ts +2 -5
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +42 -5
- package/src/scripts/classify_merge_risk.ts +320 -0
- package/src/scripts/closure_scan.ts +91 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/command_suggester/settings.ts +8 -108
- package/src/scripts/command_suggester/types.ts +4 -5
- package/src/scripts/compile_hook_manifest.ts +33 -1
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/consumer_matrix.ts +102 -0
- package/src/scripts/context_hygiene_hook.ts +13 -23
- package/src/scripts/cost/preflight.mjs +12 -1
- package/src/scripts/council_cli.ts +7 -7
- package/src/scripts/dispatch_r2_reviewer.ts +24 -11
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/explain_run.ts +8 -13
- package/src/scripts/generate_git_convention_grammar.ts +127 -0
- package/src/scripts/generate_host_cost_table.ts +21 -4
- package/src/scripts/handoff_context_hook.ts +86 -37
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +175 -15
- package/src/scripts/hooks/block_config_weakening.ts +115 -7
- package/src/scripts/hooks/block_plumbing_writes.ts +37 -5
- package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
- package/src/scripts/hooks/dispatch_hook.ts +52 -52
- package/src/scripts/hooks/evidence_independence.ts +12 -4
- package/src/scripts/hooks/exit_codes.ts +2 -1
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.ts +19 -1
- package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
- package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/push_settle_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +795 -60
- package/src/scripts/hooks/state_io.ts +8 -4
- package/src/scripts/hooks/table_fingerprint.ts +21 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +24 -7
- package/src/scripts/hooks/turn_end_gate_hook.ts +85 -0
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install-hooks.sh +42 -14
- package/src/scripts/install.ts +78 -215
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_blocker_citations.ts +198 -0
- package/src/scripts/lint_evidence_artifacts.ts +9 -0
- package/src/scripts/lint_hook_concern_budget.ts +10 -21
- package/src/scripts/lint_hook_manifest.ts +53 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +465 -29
- package/src/scripts/lint_roadmap_blockers.ts +282 -29
- package/src/scripts/lint_roadmap_complexity.ts +4 -2
- package/src/scripts/lint_rule_law_section.ts +647 -0
- package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
- package/src/scripts/lint_settings_classes.ts +1 -1
- package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
- package/src/scripts/lint_workflow_security.ts +173 -6
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +221 -8
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/model_rule_injection.ts +55 -8
- package/src/scripts/onboarding_gate_hook.ts +7 -6
- package/src/scripts/print_required_checks.ts +15 -3
- package/src/scripts/probe_host_compliance.ts +33 -5
- package/src/scripts/probe_turnaround.ts +183 -3
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/ratification_header.ts +77 -0
- package/src/scripts/refusal_envelope.ts +138 -0
- package/src/scripts/release_publication.ts +29 -3
- package/src/scripts/report_dispatch_import_closure.ts +76 -0
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +274 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_module_reach.ts +212 -0
- package/src/scripts/report_obligation_mechanism.ts +228 -0
- package/src/scripts/report_parked_blockers.ts +222 -0
- package/src/scripts/report_required_checks_drift.ts +196 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_ranker_confusion.ts +543 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/routing_doctor.ts +2 -2
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/agent-settings.schema.json +17 -31
- package/src/scripts/schemas/command.schema.json +1 -1
- package/src/scripts/schemas/review-findings.schema.json +3 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +1 -1
- package/src/scripts/self_review_gate.ts +101 -9
- package/src/scripts/skill_tools/score_skill_relevance.ts +314 -40
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/sync_pr_branch.ts +403 -132
- package/src/scripts/trigger_eval_grandfather.json +0 -21
- package/src/server/schemas/settings.ts +42 -176
- package/src/shared/skillRanking.ts +169 -14
- package/dist/cli-delegate/chunk-5R7HOLAF.js +0 -99
- package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/src/scripts/_lib/config_chain.ts +0 -477
- package/src/scripts/_lib/conformance_report.ts +0 -403
- package/src/scripts/_lib/eval_discrimination.ts +0 -95
- package/src/scripts/_lib/evaluator_promotion.ts +0 -225
- package/src/scripts/_lib/file_slicer.ts +0 -117
- package/src/scripts/_lib/legacy_boundary_map.ts +0 -228
- package/src/scripts/_lib/minimality_tiebreak.ts +0 -168
- package/src/scripts/_lib/overbuild_lens_contract.ts +0 -196
- package/src/scripts/_lib/role_split.ts +0 -338
|
@@ -154,6 +154,8 @@ import { resolveBaseRef } from './_lib/ratchet_base_ref.js';
|
|
|
154
154
|
import { materialiseSubtree } from './_lib/base_tree.js';
|
|
155
155
|
import { SKILLS_POSIX, measureSkillEstate } from './_lib/skill_estate.js';
|
|
156
156
|
import { CONCERN_MANIFEST_POSIX, countConcerns } from './_lib/concern_estate.js';
|
|
157
|
+
import { exemptionFindings, type ExemptionFinding } from './_lib/exemption_shape.js';
|
|
158
|
+
import { classifyDiff, growthClaims, type GrowthClaim, type OffsetLedger } from './_lib/estate_offsets.js';
|
|
157
159
|
import { runGateCli, runSelfTest, type SelfTestCase } from './_lib/gate_self_test.js';
|
|
158
160
|
|
|
159
161
|
const GATE = 'check_estate_count';
|
|
@@ -301,32 +303,7 @@ export interface GrowthFinding {
|
|
|
301
303
|
allowance: number;
|
|
302
304
|
}
|
|
303
305
|
|
|
304
|
-
/** How a change touched the active roadmap tree, as git reports it. */
|
|
305
|
-
export interface OffsetLedger {
|
|
306
|
-
/** Files that entered the active top level: new files, and un-parked ones. */
|
|
307
|
-
added: string[];
|
|
308
|
-
/** Files that left it: deleted, archived, parked or merged away. */
|
|
309
|
-
offsets: string[];
|
|
310
|
-
/** Added files carrying an `estate_offset_exempt:` reason, with the reason. */
|
|
311
|
-
exempt: Array<{ file: string; reason: string }>;
|
|
312
|
-
/**
|
|
313
|
-
* The subset of `offsets` that went to `later/`.
|
|
314
|
-
*
|
|
315
|
-
* Tracked separately because parking is the one offset that RAISES another
|
|
316
|
-
* gated count: active falls by one and later rises by one, which under an
|
|
317
|
-
* exact floor is growth in `later_roadmaps` unless this allowance exists.
|
|
318
|
-
* Kept out of a general "any offset raises any allowance" rule on purpose —
|
|
319
|
-
* an archived roadmap must not buy a new `later/` file.
|
|
320
|
-
*/
|
|
321
|
-
parked: string[];
|
|
322
|
-
}
|
|
323
306
|
|
|
324
|
-
/** An `estate_growth_exempt:` reason ADDED to a roadmap in this change. */
|
|
325
|
-
export interface GrowthClaim {
|
|
326
|
-
/** The roadmap the claim was added to, as git reports the path. */
|
|
327
|
-
file: string;
|
|
328
|
-
reason: string;
|
|
329
|
-
}
|
|
330
307
|
|
|
331
308
|
export interface EstateVerdict {
|
|
332
309
|
counts: EstateCounts;
|
|
@@ -362,6 +339,23 @@ export interface EstateVerdict {
|
|
|
362
339
|
offsets: OffsetLedger | null;
|
|
363
340
|
offsetSkipReason: string | null;
|
|
364
341
|
unpaid: number;
|
|
342
|
+
/**
|
|
343
|
+
* Added exemptions whose reason names no rejected alternative, or repeats
|
|
344
|
+
* another added file's. Empty on every change that adds no exemption.
|
|
345
|
+
*/
|
|
346
|
+
exemptionFindings: ExemptionFinding[];
|
|
347
|
+
/**
|
|
348
|
+
* Roadmaps carrying an unscheduled status — REPORTED, never gated.
|
|
349
|
+
*
|
|
350
|
+
* `collect()` excludes them by design, so a draft is invisible to every
|
|
351
|
+
* count above and adding one costs no slot. That is the right policy: a
|
|
352
|
+
* draft is not active work, and charging for one would make every parked
|
|
353
|
+
* idea cost a slot. What was wrong was that the number was invisible too, so
|
|
354
|
+
* a reader of `active_roadmaps 26` could not tell an estate of 26 from an
|
|
355
|
+
* estate of 26 with 14 drafts behind it. It contributes nothing to
|
|
356
|
+
* `withinBudget` — there is no floor for it and no claim path to it.
|
|
357
|
+
*/
|
|
358
|
+
draftRoadmaps: number;
|
|
365
359
|
/**
|
|
366
360
|
* The provisional-promotion path's state, reported and never acted on.
|
|
367
361
|
*
|
|
@@ -513,143 +507,51 @@ export function countEstate(repoRoot: string): EstateCounts {
|
|
|
513
507
|
};
|
|
514
508
|
}
|
|
515
509
|
|
|
516
|
-
/** Did the tokeniser resolve under `root`? A ratchet must not mix the two modes. */
|
|
517
|
-
export function skillTokensExact(root: string): boolean {
|
|
518
|
-
return measureSkillEstate(root).skill_description_tokens !== null;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
/** `agents/roadmaps/<name>.md` — the active top level. code-comment-allow provenance-comment -- operand, not provenance */
|
|
522
|
-
function isActiveTopLevel(rel: string): boolean {
|
|
523
|
-
const norm = rel.split(path.sep).join('/');
|
|
524
|
-
if (!norm.startsWith('agents/roadmaps/') || !norm.endsWith('.md')) {
|
|
525
|
-
return false;
|
|
526
|
-
}
|
|
527
|
-
const tail = norm.slice('agents/roadmaps/'.length);
|
|
528
|
-
return !tail.includes('/') && isRoadmapCandidate(norm);
|
|
529
|
-
}
|
|
530
|
-
|
|
531
510
|
/**
|
|
532
|
-
*
|
|
511
|
+
* Top-level roadmaps `collect()` drops for an unscheduled status.
|
|
533
512
|
*
|
|
534
|
-
*
|
|
535
|
-
*
|
|
536
|
-
*
|
|
537
|
-
*
|
|
538
|
-
*
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
const norm = rel.split(path.sep).join('/');
|
|
542
|
-
return /^agents\/roadmaps\/(archive|later|skipped|stubs)\//.test(norm);
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
/** A roadmap parked for later — the one disposition that grows another count. */
|
|
546
|
-
function isParked(rel: string): boolean {
|
|
547
|
-
return rel.split(path.sep).join('/').startsWith('agents/roadmaps/later/');
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
* Read the exemption reason a newly added roadmap declares, if any.
|
|
513
|
+
* Reported beside the count, never added to it. The exclusion in `collect()` is
|
|
514
|
+
* deliberate and stays: a draft is not active work, and counting one would make
|
|
515
|
+
* every parked idea cost a slot under one-in-one-out. What the exclusion also
|
|
516
|
+
* did, silently, was make the drafts unreadable — the estate report showed
|
|
517
|
+
* `active_roadmaps 26` whether 0 or 14 drafts sat beside them. This closes the
|
|
518
|
+
* reporting half and nothing else, so it has no floor, no allowance and no
|
|
519
|
+
* claim path: it cannot fail.
|
|
552
520
|
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
* it, and a reviewer sees it without being told to look.
|
|
521
|
+
* `isUnscheduled` is the same predicate `collect()` filters on, so this count
|
|
522
|
+
* and that exclusion cannot disagree — a second status list here is how a
|
|
523
|
+
* reported number starts describing a different set from the one it explains.
|
|
557
524
|
*/
|
|
558
|
-
export function
|
|
559
|
-
const
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
525
|
+
export function countDrafts(repoRoot: string): number {
|
|
526
|
+
const dir = path.join(repoRoot, ROADMAPS_REL);
|
|
527
|
+
let names: string[];
|
|
528
|
+
try {
|
|
529
|
+
names = fs.readdirSync(dir);
|
|
530
|
+
} catch {
|
|
531
|
+
return 0;
|
|
563
532
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
* `later/road-to-x.md` → `road-to-x.md` is an un-parking and counts as an
|
|
574
|
-
* addition. A top-level-to-top-level rename is neither.
|
|
575
|
-
*/
|
|
576
|
-
export function classifyDiff(
|
|
577
|
-
nameStatus: string,
|
|
578
|
-
readFile: (rel: string) => string | null,
|
|
579
|
-
): OffsetLedger {
|
|
580
|
-
const added: string[] = [];
|
|
581
|
-
const offsets: string[] = [];
|
|
582
|
-
const exempt: Array<{ file: string; reason: string }> = [];
|
|
583
|
-
const parked: string[] = [];
|
|
584
|
-
for (const line of nameStatus.split('\n')) {
|
|
585
|
-
if (line.trim() === '') continue;
|
|
586
|
-
const cols = line.split('\t');
|
|
587
|
-
const status = (cols[0] ?? '').trim();
|
|
588
|
-
if (status.startsWith('R') || status.startsWith('C')) {
|
|
589
|
-
const from = cols[1] ?? '';
|
|
590
|
-
const to = cols[2] ?? '';
|
|
591
|
-
if (isActiveTopLevel(from) && isDisposed(to)) {
|
|
592
|
-
offsets.push(from);
|
|
593
|
-
if (isParked(to)) parked.push(to);
|
|
594
|
-
} else if (isDisposed(from) && isActiveTopLevel(to)) {
|
|
595
|
-
added.push(to);
|
|
596
|
-
}
|
|
533
|
+
let n = 0;
|
|
534
|
+
for (const name of names) {
|
|
535
|
+
if (!name.endsWith('.md') || !isRoadmapCandidate(name)) continue;
|
|
536
|
+
const abs = path.join(dir, name);
|
|
537
|
+
let text: string;
|
|
538
|
+
try {
|
|
539
|
+
if (!fs.statSync(abs).isFile()) continue;
|
|
540
|
+
text = fs.readFileSync(abs, 'utf-8');
|
|
541
|
+
} catch {
|
|
597
542
|
continue;
|
|
598
543
|
}
|
|
599
|
-
|
|
600
|
-
if (!isActiveTopLevel(file)) continue;
|
|
601
|
-
if (status === 'A') {
|
|
602
|
-
added.push(file);
|
|
603
|
-
} else if (status === 'D') {
|
|
604
|
-
offsets.push(file);
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
for (const file of added) {
|
|
608
|
-
const text = readFile(file);
|
|
609
|
-
if (text === null) continue;
|
|
610
|
-
const reason = exemptionReason(text);
|
|
611
|
-
if (reason !== null) {
|
|
612
|
-
exempt.push({ file, reason });
|
|
613
|
-
}
|
|
544
|
+
if (isUnscheduled(parseFrontmatter(text))) n += 1;
|
|
614
545
|
}
|
|
615
|
-
return
|
|
546
|
+
return n;
|
|
616
547
|
}
|
|
617
548
|
|
|
618
|
-
/**
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
* Read from the diff rather than from the file, and that is the point: a claim
|
|
622
|
-
* sitting in a roadmap authorises nothing on a later change, so an exemption
|
|
623
|
-
* cannot be banked the way surplus in a stored baseline could. It also means a
|
|
624
|
-
* newly added roadmap and an edited one need no separate handling — in a
|
|
625
|
-
* `base...HEAD` patch both arrive as `+` lines.
|
|
626
|
-
*
|
|
627
|
-
* `--unified=0` keeps context lines out, so a claim that merely sits NEAR an
|
|
628
|
-
* edited line is not read as added. Deliberately tolerant of leading whitespace
|
|
629
|
-
* and of quoted values, matching `exemptionReason`; deliberately NOT tolerant of
|
|
630
|
-
* an empty reason, because an exemption whose reason is blank is the silent
|
|
631
|
-
* exception the key exists to replace.
|
|
632
|
-
*/
|
|
633
|
-
export function growthClaims(patch: string): GrowthClaim[] {
|
|
634
|
-
const out: GrowthClaim[] = [];
|
|
635
|
-
let file = '';
|
|
636
|
-
for (const line of patch.split('\n')) {
|
|
637
|
-
// `+++ b/<path>` names the file the following `+` lines belong to. The
|
|
638
|
-
// `/dev/null` form is a deletion, which cannot carry a claim.
|
|
639
|
-
const head = /^\+\+\+ b\/(.+)$/.exec(line);
|
|
640
|
-
if (head !== null) {
|
|
641
|
-
file = (head[1] ?? '').trim();
|
|
642
|
-
continue;
|
|
643
|
-
}
|
|
644
|
-
if (!line.startsWith('+') || line.startsWith('+++')) continue;
|
|
645
|
-
const m = /^\+\s*estate_growth_exempt:\s*(.+?)\s*$/.exec(line);
|
|
646
|
-
if (m === null) continue;
|
|
647
|
-
const reason = (m[1] ?? '').trim().replace(/^["']|["']$/g, '').trim();
|
|
648
|
-
if (reason !== '') out.push({ file, reason });
|
|
649
|
-
}
|
|
650
|
-
return out;
|
|
549
|
+
/** Did the tokeniser resolve under `root`? A ratchet must not mix the two modes. */
|
|
550
|
+
export function skillTokensExact(root: string): boolean {
|
|
551
|
+
return measureSkillEstate(root).skill_description_tokens !== null;
|
|
651
552
|
}
|
|
652
553
|
|
|
554
|
+
|
|
653
555
|
export function evaluate(
|
|
654
556
|
repoRoot: string,
|
|
655
557
|
opts: { baseRef?: string | undefined } = {},
|
|
@@ -816,6 +718,13 @@ export function evaluate(
|
|
|
816
718
|
unpaid = Math.max(0, chargeable.length - offsets.offsets.length);
|
|
817
719
|
}
|
|
818
720
|
|
|
721
|
+
// The SHAPE half, and it is deliberately not gated on `lintApplies`. The
|
|
722
|
+
// threshold decides whether an unoffset addition is charged; it says nothing
|
|
723
|
+
// about whether a claim an author chose to write has to mean something. An
|
|
724
|
+
// exemption below the threshold buys nothing anyway, so a shapeless one
|
|
725
|
+
// below it is a line that will be read as a reason later and is not one.
|
|
726
|
+
const findings = offsets === null ? [] : exemptionFindings(offsets.exempt);
|
|
727
|
+
|
|
819
728
|
// The allowances, one metric at a time and never a blanket rule. An exempt
|
|
820
729
|
// addition and a parked roadmap are the two increases the existing policy
|
|
821
730
|
// already sanctions, and under an exact floor each needs its own headroom or
|
|
@@ -883,13 +792,15 @@ export function evaluate(
|
|
|
883
792
|
offsets,
|
|
884
793
|
offsetSkipReason,
|
|
885
794
|
unpaid,
|
|
795
|
+
exemptionFindings: findings,
|
|
796
|
+
draftRoadmaps: countDrafts(repoRoot),
|
|
886
797
|
provisionalPromotion,
|
|
887
798
|
// No floor is a FAILURE, not a skip, and it is the one place this gate
|
|
888
799
|
// convicts on a missing input. The other halves can report "unproven" and
|
|
889
800
|
// still leave a meaningful verdict behind; the count half IS the verdict,
|
|
890
801
|
// so with no floor a green here would assert something nothing measured.
|
|
891
802
|
// A shrink-only gate whose floor is absent passes every possible tree.
|
|
892
|
-
withinBudget: floorSkipReason === null && growth.length === 0 && unpaid === 0,
|
|
803
|
+
withinBudget: floorSkipReason === null && growth.length === 0 && unpaid === 0 && findings.length === 0,
|
|
893
804
|
};
|
|
894
805
|
}
|
|
895
806
|
|
|
@@ -1104,10 +1015,44 @@ function selfTest(): number {
|
|
|
1104
1015
|
write(
|
|
1105
1016
|
dir,
|
|
1106
1017
|
'agents/roadmaps/road-to-new.md',
|
|
1107
|
-
'---\nestate_offset_exempt: fixture —
|
|
1018
|
+
'---\nestate_offset_exempt: fixture — archiving road-to-0 was rejected, it is mid-flight\n---\n\n' +
|
|
1019
|
+
roadmap('N'),
|
|
1108
1020
|
),
|
|
1109
1021
|
}),
|
|
1110
1022
|
},
|
|
1023
|
+
{
|
|
1024
|
+
// The shape half. The old reason here was "the addition that cannot
|
|
1025
|
+
// be offset", which names no alternative and is exactly what this
|
|
1026
|
+
// case now refuses — so the pair above and below are the same
|
|
1027
|
+
// addition differing only in what its reason says.
|
|
1028
|
+
name: 'exemption naming no rejected alternative → reject',
|
|
1029
|
+
expect: 'reject',
|
|
1030
|
+
run: () =>
|
|
1031
|
+
fixture({
|
|
1032
|
+
roadmaps: 3,
|
|
1033
|
+
base: 'main',
|
|
1034
|
+
after: (dir) =>
|
|
1035
|
+
write(
|
|
1036
|
+
dir,
|
|
1037
|
+
'agents/roadmaps/road-to-new.md',
|
|
1038
|
+
'---\nestate_offset_exempt: fixture — lane 5 of road-to-parent\n---\n\n' + roadmap('N'),
|
|
1039
|
+
),
|
|
1040
|
+
}),
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
name: 'one exemption reason pasted into two added files → reject',
|
|
1044
|
+
expect: 'reject',
|
|
1045
|
+
run: () =>
|
|
1046
|
+
fixture({
|
|
1047
|
+
roadmaps: 3,
|
|
1048
|
+
base: 'main',
|
|
1049
|
+
after: (dir) => {
|
|
1050
|
+
const fm = '---\nestate_offset_exempt: fixture — archiving road-to-0 was rejected, it is mid-flight\n---\n\n';
|
|
1051
|
+
write(dir, 'agents/roadmaps/road-to-n1.md', fm + roadmap('N1'));
|
|
1052
|
+
write(dir, 'agents/roadmaps/road-to-n2.md', fm + roadmap('N2'));
|
|
1053
|
+
},
|
|
1054
|
+
}),
|
|
1055
|
+
},
|
|
1111
1056
|
{
|
|
1112
1057
|
name: 'addition paid for by an archive move → accept',
|
|
1113
1058
|
expect: 'accept',
|
|
@@ -1319,7 +1264,7 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
1319
1264
|
}
|
|
1320
1265
|
|
|
1321
1266
|
const ledger = new GateLedger(GATE);
|
|
1322
|
-
ledger.plan([...METRICS, 'floor', 'one_in_one_out']);
|
|
1267
|
+
ledger.plan([...METRICS, 'floor', 'one_in_one_out', 'exemption_shape']);
|
|
1323
1268
|
for (const metric of METRICS) {
|
|
1324
1269
|
// Round 2 finding 3, kept: a metric is recorded ONCE here, for whichever
|
|
1325
1270
|
// way it actually failed, so the ledger cannot show a green completeness
|
|
@@ -1335,6 +1280,10 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
1335
1280
|
if (verdict.offsets === null) ledger.skip('one_in_one_out', 'precondition_unmet');
|
|
1336
1281
|
else if (verdict.unpaid > 0) ledger.fail('one_in_one_out', `${String(verdict.unpaid)} unpaid addition(s)`);
|
|
1337
1282
|
else ledger.complete('one_in_one_out');
|
|
1283
|
+
if (verdict.offsets === null) ledger.skip('exemption_shape', 'precondition_unmet');
|
|
1284
|
+
else if (verdict.exemptionFindings.length > 0)
|
|
1285
|
+
ledger.fail('exemption_shape', `${String(verdict.exemptionFindings.length)} unshaped exemption(s)`);
|
|
1286
|
+
else ledger.complete('exemption_shape');
|
|
1338
1287
|
|
|
1339
1288
|
if (json) {
|
|
1340
1289
|
// The ledger goes to stderr here so stdout stays parseable after the
|
|
@@ -1358,6 +1307,12 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
1358
1307
|
` ${metric.padEnd(18)} ${String(live).padStart(5)} (floor ${String(base)} at ${verdict.floorRef ?? '?'}, ${sign}${String(delta)})\n`,
|
|
1359
1308
|
);
|
|
1360
1309
|
}
|
|
1310
|
+
// Beside the gated counts, never among them: no floor line, no delta, and
|
|
1311
|
+
// the label says what it is. A reader comparing two runs can see the drafts
|
|
1312
|
+
// move without reading this as a ratchet that moved.
|
|
1313
|
+
process.stdout.write(
|
|
1314
|
+
` ${'draft_roadmaps'.padEnd(18)} ${String(verdict.draftRoadmaps).padStart(5)} (reported, not gated — excluded from active_roadmaps)\n`,
|
|
1315
|
+
);
|
|
1361
1316
|
if (verdict.offsets !== null) {
|
|
1362
1317
|
const o = verdict.offsets;
|
|
1363
1318
|
process.stdout.write(
|
|
@@ -1435,6 +1390,28 @@ export function main(argv: string[] = process.argv.slice(2)): number {
|
|
|
1435
1390
|
' that costs one reviewable line instead of a silent exception.\n',
|
|
1436
1391
|
);
|
|
1437
1392
|
}
|
|
1393
|
+
|
|
1394
|
+
for (const f of verdict.exemptionFindings) {
|
|
1395
|
+
if (f.kind === 'shapeless') {
|
|
1396
|
+
process.stderr.write(
|
|
1397
|
+
`❌ ${f.file}: estate_offset_exempt names no rejected alternative.\n` +
|
|
1398
|
+
` reason: ${f.reason.slice(0, 160)}\n` +
|
|
1399
|
+
' The exemption is the escape hatch from one-in-one-out, so its reason has to\n' +
|
|
1400
|
+
' say what you considered INSTEAD of adding a file — archiving something,\n' +
|
|
1401
|
+
' parking it in `later/`, merging into an existing roadmap — and why that was\n' +
|
|
1402
|
+
' not available. Name the disposition you rejected. Measured over the existing\n' +
|
|
1403
|
+
' 221 exemptions, 43 name none; this check applies to ADDED files only, so\n' +
|
|
1404
|
+
' nothing already in the tree is re-read.\n',
|
|
1405
|
+
);
|
|
1406
|
+
} else {
|
|
1407
|
+
process.stderr.write(
|
|
1408
|
+
`❌ ${f.file}: estate_offset_exempt repeats ${f.twin ?? '(another added file)'} verbatim.\n` +
|
|
1409
|
+
` reason: ${f.reason.slice(0, 160)}\n` +
|
|
1410
|
+
' One sentence pasted into every file a round adds is one claim, not N. Write\n' +
|
|
1411
|
+
' the reason this FILE could not be offset, or offset the ones that could.\n',
|
|
1412
|
+
);
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1438
1415
|
ledger.report();
|
|
1439
1416
|
if (verdict.withinBudget) {
|
|
1440
1417
|
process.stdout.write(`✅ ${GATE}: estate within its ratchet.\n`);
|
|
@@ -59,6 +59,10 @@ interface BudgetEntry {
|
|
|
59
59
|
/** `false` for wall-clock metrics: they cannot be compared run-to-run,
|
|
60
60
|
* so they are excluded from the drift check. Missing = deterministic. */
|
|
61
61
|
deterministic?: boolean;
|
|
62
|
+
/** Repository paths (globs as the workflow `paths` filter writes them) the
|
|
63
|
+
* metric is measured from. Every one must trigger the umbrella, so the PR
|
|
64
|
+
* that moves the input is the PR that sees the budget. */
|
|
65
|
+
inputs?: string[];
|
|
62
66
|
}
|
|
63
67
|
interface BudgetsDoc {
|
|
64
68
|
regression_pct: number;
|