@event4u/agent-config 16.3.0 → 16.5.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 +178 -78
- package/README.md +2 -2
- package/agents/templates/.ai-council.yml.example +26 -8
- package/dist/agent-src/commands/analyze/inbox.md +10 -7
- 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/design.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 +1 -1
- package/dist/agent-src/commands/fix/ci.md +17 -3
- 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 +3 -3
- 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/next.md +10 -1
- package/dist/agent-src/commands/roadmap/process-full.md +52 -38
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +64 -14
- 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/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 +1 -1
- 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 +67 -52
- 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 +4 -10
- 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/design-antipatterns.md +1 -1
- package/dist/agent-src/guidelines/php/git.md +15 -2
- package/dist/agent-src/rules/active-remediation.md +0 -1
- 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 +0 -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 +0 -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 +0 -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 +5 -5
- 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 +2 -3
- package/dist/agent-src/rules/delegation-policy.md +2 -3
- package/dist/agent-src/rules/design-fidelity.md +0 -1
- 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 +0 -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 +0 -1
- package/dist/agent-src/rules/domain-safety-pii.md +0 -1
- package/dist/agent-src/rules/domain-safety-retention.md +0 -1
- package/dist/agent-src/rules/downstream-changes.md +0 -1
- package/dist/agent-src/rules/engineering-safety-floor.md +0 -1
- 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 +1 -2
- package/dist/agent-src/rules/finance-safety-floor.md +0 -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 +1 -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 +0 -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 +0 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +0 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +0 -1
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
- package/dist/agent-src/rules/media-governance-routing.md +1 -2
- 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 +2 -3
- 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 +2 -3
- package/dist/agent-src/rules/question-not-instruction.md +0 -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 +3 -6
- 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 +0 -1
- package/dist/agent-src/rules/scale-discipline.md +0 -1
- package/dist/agent-src/rules/secret-vcs-guard.md +0 -1
- package/dist/agent-src/rules/security-sensitive-stop.md +0 -1
- 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 +0 -1
- package/dist/agent-src/rules/settings-ask-protocol.md +5 -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 +0 -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 +0 -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 +14 -48
- 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 +0 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +0 -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 +0 -1
- package/dist/agent-src/scripts/gate_budget.ts +47 -23
- package/dist/agent-src/scripts/gate_execute.ts +12 -4
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
- package/dist/agent-src/skills/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/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/canvas-design/SKILL.md +4 -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-intelligence/references/integration-mapping.md +13 -10
- package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
- package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +49 -2
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
- 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 +4 -2
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
- package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
- package/dist/agent-src/skills/logo-generation/SKILL.md +12 -8
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/svg-authoring/SKILL.md +318 -0
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +3 -1
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- 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/skills/wireframe/SKILL.md +5 -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/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/skill.md +1 -1
- package/dist/cli/commands/uiRender.js +201 -4
- package/dist/cli/commands/uiRenderAsset.js +1308 -0
- package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
- package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
- package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
- package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
- package/dist/cli/commands/uiRenderAssetTypes.js +145 -0
- package/dist/cli/main.js +47 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli-delegate/check_update_banner.js +195 -119
- package/dist/cli-delegate/{chunk-S4UMZNES.js → chunk-4DBG5K7M.js} +5 -5
- package/dist/cli-delegate/{chunk-TRI6DQZ6.js → chunk-5GPULQBE.js} +60 -42
- package/dist/cli-delegate/{chunk-JQVYKIZA.js → chunk-6SRJTYJS.js} +33 -177
- package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
- 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-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
- package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
- package/dist/cli-delegate/{chunk-NXEILF2K.js → chunk-F3QDG2GT.js} +481 -72
- package/dist/cli-delegate/{chunk-CQWX336L.js → chunk-G5VVIZRC.js} +3 -3
- package/dist/cli-delegate/{chunk-JY2I2DXV.js → chunk-H76PHZBI.js} +137 -60
- package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
- package/dist/cli-delegate/{chunk-LIYTLH6O.js → chunk-KXXWJTDO.js} +5 -10
- package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
- package/dist/cli-delegate/{chunk-S4YWNRKO.js → chunk-MDPPKQCQ.js} +34 -1
- package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
- package/dist/cli-delegate/{chunk-GKE7ZVFA.js → chunk-PWX7CKMD.js} +1 -1
- package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
- package/dist/cli-delegate/{chunk-RQNNW7IF.js → chunk-T7XSJSUQ.js} +433 -632
- package/dist/cli-delegate/{chunk-NQ7WT43P.js → chunk-TMWYUOK4.js} +75 -12
- package/dist/cli-delegate/{chunk-EEHDXSYD.js → chunk-WQWXGIWB.js} +12 -273
- package/dist/cli-delegate/{chunk-QLDHIPWR.js → chunk-XQTPXKFA.js} +1 -1
- 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 +489 -238
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +15 -12
- package/dist/cli-delegate/cmd_doctor_neighbours.js +11 -4
- package/dist/cli-delegate/cmd_explain.js +43 -19
- package/dist/cli-delegate/cmd_export.js +10 -10
- package/dist/cli-delegate/cmd_git_convention.js +1851 -0
- package/dist/cli-delegate/cmd_handoff.js +40 -21
- package/dist/cli-delegate/cmd_mcp_available.js +3 -2
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +4 -3
- package/dist/cli-delegate/cmd_prune.js +10 -10
- package/dist/cli-delegate/cmd_route_audit.js +7 -7
- package/dist/cli-delegate/cmd_route_explain.js +5 -5
- package/dist/cli-delegate/cmd_session_recycle.js +9 -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 +10 -10
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +10 -10
- package/dist/cli-delegate/cmd_uninstall.js +10 -10
- package/dist/cli-delegate/cmd_update.js +7 -7
- package/dist/cli-delegate/cmd_upgrade.js +7 -7
- package/dist/cli-delegate/cmd_validate.js +10 -10
- package/dist/cli-delegate/cmd_versions.js +5 -5
- package/dist/cli-delegate/gate_budget.js +1 -1
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +2 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +171 -107
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +7 -7
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +41 -22
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +16 -11
- package/dist/hooks/dispatch.js +2520 -1924
- package/dist/hooks/dispatch.sha256 +1 -1
- package/dist/hooks/svg_rules.chunk.cjs +1626 -0
- package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
- package/dist/install/install.mjs +462 -431
- package/dist/install/installThinLayer.js +40 -12
- package/dist/install/installedRuleLinks.js +105 -19
- 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 +3063 -2160
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +15 -120
- 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 +344 -18
- package/dist/scripts/_lib/package_root.js +68 -0
- package/dist/scripts/_lib/rule_law_section.js +1 -1
- package/dist/scripts/_lib/scan_scope.js +105 -0
- package/dist/scripts/_lib/settings_removed_keys.js +168 -0
- package/dist/scripts/_lib/svg_dom.js +284 -0
- package/dist/scripts/_lib/svg_geometry.js +477 -0
- package/dist/scripts/_lib/svg_motion.js +179 -0
- package/dist/scripts/_lib/svg_rules.js +1337 -0
- package/dist/scripts/_lib/svg_urls.js +67 -0
- package/dist/scripts/_lib/thin_rules.js +80 -3
- package/dist/scripts/lint_svg_asset.js +324 -0
- 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 +23 -81
- package/dist/shared/skillRanking.js +30 -4
- 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 +35 -65
- 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/design-antipatterns.md +1 -1
- package/docs/guidelines/php/git.md +15 -2
- package/package.json +4 -3
- package/src/agent-src/scripts/gate_budget.ts +47 -23
- package/src/agent-src/scripts/gate_execute.ts +12 -4
- 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/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/config/agent-settings.template.yml +79 -312
- 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 +3 -3
- package/src/config/discovery/packs.yml +17 -1
- package/src/config/evaluator-budgets.json +19 -6
- package/src/config/gate-coverage.yml +65 -23
- package/src/config/gate-violation-baselines.json +56 -16
- package/src/config/gitignore-block.txt +19 -0
- package/src/config/hook-bundle-budget.json +1 -1
- package/src/config/release-gate-locality.yml +2 -1
- package/src/config/routing-coverage-seed.json +55 -6
- package/src/config/rule-law-ceilings.json +12 -6
- package/src/config/rule-obligations.json +833 -0
- package/src/install/installThinLayer.ts +76 -10
- package/src/install/installedRuleLinks.ts +105 -17
- 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 +10 -10
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +133 -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 +37 -2
- package/src/scripts/_lib/agent_settings.ts +15 -124
- package/src/scripts/_lib/blocked_by_marker.ts +1 -1
- package/src/scripts/_lib/compile_time_toggles.ts +12 -21
- package/src/scripts/_lib/dispatch_import_closure.ts +163 -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/global_deploy_inventory.ts +74 -0
- package/src/scripts/_lib/graph_feeder_record.ts +236 -13
- package/src/scripts/_lib/installed_layer.ts +448 -23
- package/src/scripts/_lib/knowledge_global.ts +14 -1
- package/src/scripts/_lib/module_reach.ts +456 -0
- package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +8 -10
- 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/rule_law_section.ts +1 -1
- 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/svg_dom.ts +318 -0
- package/src/scripts/_lib/svg_geometry.ts +480 -0
- package/src/scripts/_lib/svg_motion.ts +208 -0
- package/src/scripts/_lib/svg_rules.ts +1453 -0
- package/src/scripts/_lib/svg_urls.ts +72 -0
- package/src/scripts/_lib/test_red_state.ts +5 -0
- package/src/scripts/_lib/thin_rules.ts +83 -3
- package/src/scripts/_lib/touched_file_quality.ts +142 -6
- package/src/scripts/_lib/verification_command.ts +59 -0
- package/src/scripts/_lib/verify_clause.ts +27 -17
- package/src/scripts/_lib/worker_budget.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +16 -1
- package/src/scripts/ai_council/config.ts +7 -7
- 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_team/config.ts +11 -16
- package/src/scripts/audit_user_type_axis.ts +20 -8
- 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/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_evaluator_budgets.ts +4 -0
- package/src/scripts/check_finding_dispositions.ts +88 -25
- 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 +107 -0
- package/src/scripts/check_kernel_edit_ratified.ts +86 -6
- package/src/scripts/check_pack_size.ts +1 -1
- package/src/scripts/check_release_manifest_content.ts +189 -0
- package/src/scripts/check_standing_rule_delivery.ts +96 -0
- package/src/scripts/check_suppression_hygiene.ts +2 -5
- 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/command_suggester/settings.ts +8 -108
- package/src/scripts/command_suggester/types.ts +4 -5
- 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/explain_run.ts +8 -13
- package/src/scripts/generate_git_convention_grammar.ts +127 -0
- package/src/scripts/generate_host_cost_table.ts +20 -3
- package/src/scripts/handoff_context_hook.ts +86 -37
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +25 -6
- package/src/scripts/hooks/block_config_weakening.ts +48 -5
- package/src/scripts/hooks/block_plumbing_writes.ts +8 -4
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +16 -1
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
- package/src/scripts/hooks/design_pass_hook.ts +157 -3
- package/src/scripts/hooks/evidence_independence.ts +12 -4
- package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
- package/src/scripts/hooks/push_settle_hook.ts +4 -3
- package/src/scripts/hooks/rule_inject_hook.ts +44 -3
- package/src/scripts/hooks/state_io.ts +8 -4
- package/src/scripts/hooks/svg_obligation.ts +497 -0
- package/src/scripts/hooks/svg_rules_loader.ts +133 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +7 -46
- package/src/scripts/hooks/turn_end_gate_hook.ts +6 -3
- package/src/scripts/install-hooks.sh +42 -14
- package/src/scripts/install.ts +7 -31
- package/src/scripts/lint_blocker_citations.ts +198 -0
- package/src/scripts/lint_consolidation_lineage.ts +6 -3
- package/src/scripts/lint_design_quality.ts +60 -12
- package/src/scripts/lint_evidence_artifacts.ts +9 -0
- package/src/scripts/lint_hook_concern_budget.ts +10 -21
- package/src/scripts/lint_motion_authority_drift.ts +27 -0
- package/src/scripts/lint_pack_boundaries.ts +406 -28
- 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 +151 -21
- package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
- package/src/scripts/lint_settings_classes.ts +1 -1
- package/src/scripts/lint_svg_asset.ts +365 -0
- package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
- package/src/scripts/lint_workflow_security.ts +12 -1
- package/src/scripts/measure_skill_ranker_baseline.ts +5 -0
- package/src/scripts/model_rule_injection.ts +3 -3
- 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/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_installed_rule_links.ts +118 -1
- package/src/scripts/report_module_reach.ts +212 -0
- package/src/scripts/report_obligation_mechanism.ts +16 -18
- package/src/scripts/report_parked_blockers.ts +222 -0
- package/src/scripts/report_required_checks_drift.ts +196 -0
- package/src/scripts/report_skill_ranker_confusion.ts +103 -2
- package/src/scripts/report_standing_payload_by_host.ts +1 -1
- package/src/scripts/routing_doctor.ts +2 -2
- package/src/scripts/schemas/agent-settings.schema.json +17 -31
- package/src/scripts/schemas/command.schema.json +1 -1
- package/src/scripts/schemas/skill.schema.json +1 -1
- package/src/scripts/self_review_gate.ts +39 -2
- package/src/scripts/skill_tools/score_skill_relevance.ts +28 -19
- package/src/scripts/sync_pr_branch.ts +403 -132
- package/src/scripts/trigger_eval_grandfather.json +0 -16
- package/src/server/schemas/settings.ts +33 -177
- package/src/shared/skillRanking.ts +53 -4
- package/dist/cli-delegate/chunk-NYX3L2PZ.js +0 -99
- 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
|
@@ -33,6 +33,20 @@
|
|
|
33
33
|
* priced in the same unit the installed-layer report uses. Today's larger
|
|
34
34
|
* rules are named in `body_exceptions`, shrink-only on the same terms.
|
|
35
35
|
*
|
|
36
|
+
* 4. TRIGGER PRESENCE (`--axis trigger`). Added by step 3.4 of
|
|
37
|
+
* `road-to-an-installed-layer-that-is-thinned`: a stub is a pointer a prompt
|
|
38
|
+
* must be able to pull in, so a routed rule with ZERO triggers in
|
|
39
|
+
* `dist/router.json` cannot be discovered once it ships as a stub — the
|
|
40
|
+
* pointer sits in the installed layer forever and the law behind it never
|
|
41
|
+
* arrives. Four rules read zero today (measured 2026-10-06) and are named in
|
|
42
|
+
* `no_trigger`, SHRINK-ONLY on the same terms as `missing`: each is delivered
|
|
43
|
+
* by a mechanism other than a keyword match — a path collision
|
|
44
|
+
* (`collision_ok`) or an unconditional load with no scoping at all — which is
|
|
45
|
+
* a deliberate routing choice recorded in the rule's own frontmatter, not an
|
|
46
|
+
* oversight this gate should paper over. A NEW routed rule therefore cannot
|
|
47
|
+
* be born with no trigger a prompt can fire, same as it cannot be born
|
|
48
|
+
* lawless.
|
|
49
|
+
*
|
|
36
50
|
* WHY THE TARGET IS REPORTED AND NOT ENFORCED. A rule shortened to fit a number
|
|
37
51
|
* is the failure this roadmap says it will not cause. 1,200 is where the
|
|
38
52
|
* distribution sits (median 511, p90 1,787) and a rule between target and hard
|
|
@@ -51,7 +65,7 @@
|
|
|
51
65
|
*
|
|
52
66
|
* WHAT IT DOES NOT ASSERT. Not that the extracted section is the rule's real
|
|
53
67
|
* obligation — a heading match is structural and checkable, "this sentence is
|
|
54
|
-
* the obligation" is not; the
|
|
68
|
+
* the obligation" is not; the ids in `src/config/rule-obligations.json` and
|
|
55
69
|
* `report_obligation_carriers` own that. Not that a rule at its recorded
|
|
56
70
|
* exception is correct, only that it is not worse. And not a cross-commit
|
|
57
71
|
* ratchet: this gate reads one tree, so "shrink-only" means the tree sits at or
|
|
@@ -100,13 +114,15 @@ export interface LawConfig {
|
|
|
100
114
|
measured_at_commit?: string;
|
|
101
115
|
/** Routed rules with no law section. Shrink-only: ids may leave, never join. */
|
|
102
116
|
missing: string[];
|
|
117
|
+
/** Routed rules with no trigger a prompt can fire. Shrink-only, same terms as `missing`. */
|
|
118
|
+
no_trigger: string[];
|
|
103
119
|
/** Rules whose law exceeds {@link LAW_HARD_CHARS}. */
|
|
104
120
|
law_exceptions: Record<string, SizeException>;
|
|
105
121
|
/** Rules whose body exceeds {@link BODY_HARD_CHARS}. */
|
|
106
122
|
body_exceptions: Record<string, SizeException>;
|
|
107
123
|
}
|
|
108
124
|
|
|
109
|
-
export type Axis = 'presence' | 'ceiling' | 'body-ceiling' | 'all';
|
|
125
|
+
export type Axis = 'presence' | 'ceiling' | 'body-ceiling' | 'trigger' | 'all';
|
|
110
126
|
|
|
111
127
|
export interface Finding {
|
|
112
128
|
id: string;
|
|
@@ -153,6 +169,7 @@ export function readConfig(root = REPO_ROOT): LawConfig {
|
|
|
153
169
|
const raw = JSON.parse(fs.readFileSync(p, 'utf-8')) as Partial<LawConfig>;
|
|
154
170
|
return {
|
|
155
171
|
missing: Array.isArray(raw.missing) ? raw.missing : [],
|
|
172
|
+
no_trigger: Array.isArray(raw.no_trigger) ? raw.no_trigger : [],
|
|
156
173
|
law_exceptions: raw.law_exceptions ?? {},
|
|
157
174
|
body_exceptions: raw.body_exceptions ?? {},
|
|
158
175
|
measured_at_commit: raw.measured_at_commit ?? '',
|
|
@@ -170,15 +187,47 @@ export function measureRouted(root = REPO_ROOT): RuleLawMeasure[] {
|
|
|
170
187
|
return out;
|
|
171
188
|
}
|
|
172
189
|
|
|
190
|
+
/** Trigger count per routed tier rule id, straight off `dist/router.json`. */
|
|
191
|
+
export function routedRuleTriggerCounts(root = REPO_ROOT): Map<string, number> {
|
|
192
|
+
const data = JSON.parse(fs.readFileSync(path.join(root, ROUTER_REL), 'utf-8')) as Record<
|
|
193
|
+
string,
|
|
194
|
+
unknown
|
|
195
|
+
>;
|
|
196
|
+
const counts = new Map<string, number>();
|
|
197
|
+
for (const tier of ['tier_1', 'tier_2']) {
|
|
198
|
+
const entries = data[tier];
|
|
199
|
+
if (!Array.isArray(entries)) continue;
|
|
200
|
+
for (const e of entries) {
|
|
201
|
+
const rec = e as Record<string, unknown>;
|
|
202
|
+
const triggers = rec['triggers'];
|
|
203
|
+
counts.set(String(rec['id']), Array.isArray(triggers) ? triggers.length : 0);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return counts;
|
|
207
|
+
}
|
|
208
|
+
|
|
173
209
|
export function lint(root = REPO_ROOT, axis: Axis = 'all'): LintResult {
|
|
174
210
|
const cfg = readConfig(root);
|
|
175
211
|
const measures = measureRouted(root);
|
|
212
|
+
const triggerCounts = routedRuleTriggerCounts(root);
|
|
176
213
|
const findings: Finding[] = [];
|
|
177
214
|
const overTarget: Array<{ id: string; chars: number }> = [];
|
|
178
215
|
const baselined = new Set(cfg.missing);
|
|
216
|
+
const noTriggerBaselined = new Set(cfg.no_trigger);
|
|
179
217
|
const want = (a: Exclude<Axis, 'all'>): boolean => axis === 'all' || axis === a;
|
|
180
218
|
|
|
181
219
|
for (const m of measures) {
|
|
220
|
+
if (want('trigger') && (triggerCounts.get(m.id) ?? 0) === 0 && !noTriggerBaselined.has(m.id)) {
|
|
221
|
+
findings.push({
|
|
222
|
+
id: m.id,
|
|
223
|
+
axis: 'trigger',
|
|
224
|
+
kind: 'no-trigger',
|
|
225
|
+
detail:
|
|
226
|
+
'routed rule has no trigger in `dist/router.json` — a prompt can never pull it in, ' +
|
|
227
|
+
`so it cannot ship as a stub; add a trigger, or add the id to \`no_trigger\` in ` +
|
|
228
|
+
`${CONFIG_REL} (that list is shrink-only, so a new routed rule may not join it)`,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
182
231
|
if (want('presence') && m.law === null && !baselined.has(m.id)) {
|
|
183
232
|
findings.push({
|
|
184
233
|
id: m.id,
|
|
@@ -270,6 +319,30 @@ export function lint(root = REPO_ROOT, axis: Axis = 'all'): LintResult {
|
|
|
270
319
|
}
|
|
271
320
|
}
|
|
272
321
|
|
|
322
|
+
// Same stale-debt check for the trigger baseline: an id that gained a
|
|
323
|
+
// trigger, or left the routed set, is debt that was paid and never
|
|
324
|
+
// collected.
|
|
325
|
+
if (want('trigger')) {
|
|
326
|
+
const routed = new Set(measures.map((m) => m.id));
|
|
327
|
+
for (const id of cfg.no_trigger) {
|
|
328
|
+
if (!routed.has(id)) {
|
|
329
|
+
findings.push({
|
|
330
|
+
id,
|
|
331
|
+
axis: 'trigger',
|
|
332
|
+
kind: 'stale-baseline-entry',
|
|
333
|
+
detail: `is not a routed rule any more — remove it from \`no_trigger\` in ${CONFIG_REL}`,
|
|
334
|
+
});
|
|
335
|
+
} else if ((triggerCounts.get(id) ?? 0) > 0) {
|
|
336
|
+
findings.push({
|
|
337
|
+
id,
|
|
338
|
+
axis: 'trigger',
|
|
339
|
+
kind: 'stale-baseline-entry',
|
|
340
|
+
detail: `now has a trigger — remove it from \`no_trigger\` in ${CONFIG_REL}`,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
273
346
|
const kernelReported = kernelRuleIds(root).map((id) => {
|
|
274
347
|
const p = path.join(root, RULES_REL, `${id}.md`);
|
|
275
348
|
return { id, sections: fs.existsSync(p) ? measureRuleFile(id, p).sections : 0 };
|
|
@@ -284,9 +357,14 @@ export function lint(root = REPO_ROOT, axis: Axis = 'all'): LintResult {
|
|
|
284
357
|
export function writeBaseline(root = REPO_ROOT, today: string): string {
|
|
285
358
|
const prev = fs.existsSync(path.join(root, CONFIG_REL))
|
|
286
359
|
? readConfig(root)
|
|
287
|
-
: { missing: [], law_exceptions: {}, body_exceptions: {} };
|
|
360
|
+
: { missing: [], no_trigger: [], law_exceptions: {}, body_exceptions: {} };
|
|
288
361
|
const measures = measureRouted(root);
|
|
362
|
+
const triggerCounts = routedRuleTriggerCounts(root);
|
|
289
363
|
const missing = measures.filter((m) => m.law === null).map((m) => m.id).sort();
|
|
364
|
+
const no_trigger = measures
|
|
365
|
+
.filter((m) => (triggerCounts.get(m.id) ?? 0) === 0)
|
|
366
|
+
.map((m) => m.id)
|
|
367
|
+
.sort();
|
|
290
368
|
const law_exceptions: Record<string, SizeException> = {};
|
|
291
369
|
const body_exceptions: Record<string, SizeException> = {};
|
|
292
370
|
for (const m of measures) {
|
|
@@ -311,16 +389,22 @@ export function writeBaseline(root = REPO_ROOT, today: string): string {
|
|
|
311
389
|
}
|
|
312
390
|
const cfg = {
|
|
313
391
|
_comment:
|
|
314
|
-
'Per-rule law-section and body ceilings (road-to-rule-laws-that-can-stand Phase 1)
|
|
315
|
-
'
|
|
316
|
-
'
|
|
317
|
-
'
|
|
318
|
-
'
|
|
319
|
-
'
|
|
320
|
-
'
|
|
321
|
-
'
|
|
322
|
-
'
|
|
392
|
+
'Per-rule law-section and body ceilings (road-to-rule-laws-that-can-stand Phase 1) plus ' +
|
|
393
|
+
'the trigger-presence baseline (road-to-an-installed-layer-that-is-thinned step 3.4). Two ' +
|
|
394
|
+
'different guarantees, not one: `law_exceptions` and `body_exceptions` are numeric ' +
|
|
395
|
+
'ceilings `--write-baseline` structurally refuses to raise (it re-records the SMALLER of ' +
|
|
396
|
+
'old and current, never the current alone) — a rule at its exception is not thereby ' +
|
|
397
|
+
'correct, only not worse. `missing` and `no_trigger` are LIST membership: an id SHOULD ' +
|
|
398
|
+
'only leave, never join, but that is a review convention the generator does not enforce ' +
|
|
399
|
+
'by construction — `--write-baseline` re-records every id that currently fails ' +
|
|
400
|
+
'presence/trigger, full stop, so a newly-broken rule is swept in exactly like a ' +
|
|
401
|
+
'genuinely-fixed one is swept out. The `stale-baseline-entry` finding makes a fixed id ' +
|
|
402
|
+
'visible for removal; nothing makes a newly-broken id visible for refusal except a human ' +
|
|
403
|
+
'reading the diff. Regenerate with `lint_rule_law_section --write-baseline`; never ' +
|
|
404
|
+
'hand-edit the counts, but DO hand-edit `owner`, `review` and `reason` — those are the ' +
|
|
405
|
+
'review contract and the generator only seeds them.',
|
|
323
406
|
measured_at_commit: prev.measured_at_commit ?? '',
|
|
407
|
+
no_trigger,
|
|
324
408
|
missing,
|
|
325
409
|
law_exceptions,
|
|
326
410
|
body_exceptions,
|
|
@@ -339,7 +423,7 @@ interface Args {
|
|
|
339
423
|
}
|
|
340
424
|
|
|
341
425
|
const USAGE =
|
|
342
|
-
'usage: lint_rule_law_section [--axis presence|ceiling|body-ceiling|all] [--quiet] ' +
|
|
426
|
+
'usage: lint_rule_law_section [--axis presence|ceiling|body-ceiling|trigger|all] [--quiet] ' +
|
|
343
427
|
'[--write-baseline] [--root DIR] [--self-test]\n';
|
|
344
428
|
|
|
345
429
|
function parseArgs(argv: string[]): Args {
|
|
@@ -381,7 +465,7 @@ function parseArgs(argv: string[]): Args {
|
|
|
381
465
|
process.exit(2);
|
|
382
466
|
}
|
|
383
467
|
}
|
|
384
|
-
if (!['presence', 'ceiling', 'body-ceiling', 'all'].includes(out.axis)) {
|
|
468
|
+
if (!['presence', 'ceiling', 'body-ceiling', 'trigger', 'all'].includes(out.axis)) {
|
|
385
469
|
process.stderr.write(USAGE);
|
|
386
470
|
process.stderr.write(`lint_rule_law_section: error: unknown axis: ${out.axis}\n`);
|
|
387
471
|
process.exit(2);
|
|
@@ -402,23 +486,45 @@ export function selfTest(write: (s: string) => void = (s) => process.stdout.writ
|
|
|
402
486
|
fs.mkdirSync(path.join(tmp, 'dist'), { recursive: true });
|
|
403
487
|
fs.writeFileSync(
|
|
404
488
|
path.join(tmp, ROUTER_REL),
|
|
405
|
-
JSON.stringify({
|
|
489
|
+
JSON.stringify({
|
|
490
|
+
kernel: [],
|
|
491
|
+
tier_1: [
|
|
492
|
+
{ id: 'lawless', triggers: [{ keyword: 'lawless-word' }] },
|
|
493
|
+
{ id: 'lawful', triggers: [{ keyword: 'lawful-word' }] },
|
|
494
|
+
{ id: 'mute', triggers: [] },
|
|
495
|
+
{ id: 'vocal', triggers: [{ keyword: 'vocal-word' }] },
|
|
496
|
+
],
|
|
497
|
+
tier_2: [],
|
|
498
|
+
}),
|
|
406
499
|
);
|
|
407
500
|
fs.writeFileSync(
|
|
408
501
|
path.join(tmp, CONFIG_REL),
|
|
409
|
-
JSON.stringify({ missing: [], law_exceptions: {}, body_exceptions: {} }),
|
|
502
|
+
JSON.stringify({ missing: [], no_trigger: [], law_exceptions: {}, body_exceptions: {} }),
|
|
410
503
|
);
|
|
411
504
|
fs.writeFileSync(path.join(tmp, 'src/rules/lawless.md'), '---\nx: 1\n---\n\n# Lawless\n\nProse.\n');
|
|
412
505
|
fs.writeFileSync(
|
|
413
506
|
path.join(tmp, 'src/rules/lawful.md'),
|
|
414
507
|
'---\nx: 1\n---\n\n# Lawful\n\n## The Iron Law\n\nNEVER DO THE THING.\n',
|
|
415
508
|
);
|
|
509
|
+
fs.writeFileSync(
|
|
510
|
+
path.join(tmp, 'src/rules/mute.md'),
|
|
511
|
+
'---\nx: 1\n---\n\n# Mute\n\n## The Iron Law\n\nNEVER DO THE THING.\n',
|
|
512
|
+
);
|
|
513
|
+
fs.writeFileSync(
|
|
514
|
+
path.join(tmp, 'src/rules/vocal.md'),
|
|
515
|
+
'---\nx: 1\n---\n\n# Vocal\n\n## The Iron Law\n\nNEVER DO THE THING.\n',
|
|
516
|
+
);
|
|
416
517
|
|
|
417
518
|
const rejecting = lint(tmp, 'presence');
|
|
418
519
|
const accepting = (() => {
|
|
419
520
|
fs.writeFileSync(
|
|
420
521
|
path.join(tmp, CONFIG_REL),
|
|
421
|
-
JSON.stringify({
|
|
522
|
+
JSON.stringify({
|
|
523
|
+
missing: ['lawless'],
|
|
524
|
+
no_trigger: [],
|
|
525
|
+
law_exceptions: {},
|
|
526
|
+
body_exceptions: {},
|
|
527
|
+
}),
|
|
422
528
|
);
|
|
423
529
|
return lint(tmp, 'presence');
|
|
424
530
|
})();
|
|
@@ -426,12 +532,36 @@ export function selfTest(write: (s: string) => void = (s) => process.stdout.writ
|
|
|
426
532
|
rejecting.findings.length === 1 &&
|
|
427
533
|
rejecting.findings[0]?.kind === 'no-law-section' &&
|
|
428
534
|
accepting.findings.length === 0;
|
|
535
|
+
|
|
536
|
+
// Same rejecting/accepting shape for the trigger axis (step 3.4):
|
|
537
|
+
// `mute` has a law but no trigger and is unbaselined, `vocal` has both.
|
|
538
|
+
const triggerRejecting = lint(tmp, 'trigger');
|
|
539
|
+
const triggerAccepting = (() => {
|
|
540
|
+
fs.writeFileSync(
|
|
541
|
+
path.join(tmp, CONFIG_REL),
|
|
542
|
+
JSON.stringify({
|
|
543
|
+
missing: ['lawless'],
|
|
544
|
+
no_trigger: ['mute'],
|
|
545
|
+
law_exceptions: {},
|
|
546
|
+
body_exceptions: {},
|
|
547
|
+
}),
|
|
548
|
+
);
|
|
549
|
+
return lint(tmp, 'trigger');
|
|
550
|
+
})();
|
|
551
|
+
const triggerOk =
|
|
552
|
+
triggerRejecting.findings.map((f) => f.id).sort().join(',') === 'mute' &&
|
|
553
|
+
triggerRejecting.findings.every((f) => f.kind === 'no-trigger') &&
|
|
554
|
+
triggerAccepting.findings.length === 0;
|
|
555
|
+
|
|
556
|
+
const allOk = ok && triggerOk;
|
|
429
557
|
write(
|
|
430
|
-
|
|
431
|
-
? '✅ self-test:
|
|
432
|
-
: `❌ self-test FAILED: rejecting=${rejecting.findings.length}
|
|
558
|
+
allOk
|
|
559
|
+
? '✅ self-test: presence + trigger axes each have a rejecting and an accepting case\n'
|
|
560
|
+
: `❌ self-test FAILED: presence rejecting=${rejecting.findings.length} ` +
|
|
561
|
+
`accepting=${accepting.findings.length}; trigger rejecting=` +
|
|
562
|
+
`${triggerRejecting.findings.length} accepting=${triggerAccepting.findings.length}\n`,
|
|
433
563
|
);
|
|
434
|
-
return
|
|
564
|
+
return allOk ? 0 : 1;
|
|
435
565
|
} finally {
|
|
436
566
|
fs.rmSync(tmp, { recursive: true, force: true });
|
|
437
567
|
}
|
|
@@ -35,6 +35,23 @@
|
|
|
35
35
|
* the wizard may offer it and the user may decline, so an invariant that
|
|
36
36
|
* counted it would pass on installs that do not exist.
|
|
37
37
|
*
|
|
38
|
+
* SIBLING GATE, OPPOSITE READING, SAME REASONING (2026-10-09). Since D5 of
|
|
39
|
+
* `road-to-gates-a-pull-request-can-hear`, `lint_pack_boundaries` DOES read
|
|
40
|
+
* `suggests` — as permitting a cross-pack link. That is not a contradiction of
|
|
41
|
+
* the paragraph above, and the discriminator is the direction of the claim
|
|
42
|
+
* each gate makes:
|
|
43
|
+
*
|
|
44
|
+
* - THIS gate asserts a route WILL RESOLVE on the installs it covers.
|
|
45
|
+
* Counting an advisory edge would assert resolution on installs that may
|
|
46
|
+
* not exist — a false negative in the dangerous direction.
|
|
47
|
+
* - The boundary gate reports a link that MAY DANGLE. An advisory edge is
|
|
48
|
+
* the author stating they accept the dangle for a declining consumer, so
|
|
49
|
+
* reading it there downgrades a finding the author has already answered.
|
|
50
|
+
*
|
|
51
|
+
* Practical consequence, stated because it is the mistake the asymmetry
|
|
52
|
+
* invites: adding a `suggests` edge does NOT clear an `unreachable-route`
|
|
53
|
+
* finding here. It never will. Fix the route or accept the finding.
|
|
54
|
+
*
|
|
38
55
|
* ADVISORY UNTIL ITS FINDING SET IS EMPTY, AND THE FIRST RUN SAYS WHY.
|
|
39
56
|
* Measured on introduction: 12 `unreachable-route` and 14 `unrouted-skill`
|
|
40
57
|
* findings across 116 rules. The UI pair is one instance of an estate-wide
|
|
@@ -604,7 +604,7 @@ function main(): number {
|
|
|
604
604
|
for (const [removedKey, reason] of REMOVED_KEYS) {
|
|
605
605
|
if (reason.trim() === '') {
|
|
606
606
|
findings.push(
|
|
607
|
-
`src/scripts/_lib/
|
|
607
|
+
`src/scripts/_lib/settings_removed_keys.ts \`${removedKey}\` is in REMOVED_KEYS with an empty ` +
|
|
608
608
|
'reason — name what decides instead, not that it is gone.',
|
|
609
609
|
);
|
|
610
610
|
}
|