@event4u/agent-config 9.13.0 → 9.15.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +113 -67
- package/README.md +9 -1
- package/dist/agent-src/commands/agents/audit.md +7 -7
- package/dist/agent-src/commands/agents/optimize.md +1 -1
- package/dist/agent-src/commands/analyze/reference-repo.md +1 -1
- package/dist/agent-src/commands/chat-history.md +1 -0
- package/dist/agent-src/commands/context.md +1 -0
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/memory.md +2 -1
- package/dist/agent-src/commands/module.md +1 -0
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
- package/dist/agent-src/commands/optimize/deep.md +150 -0
- package/dist/agent-src/commands/optimize/skills.md +5 -5
- package/dist/agent-src/commands/optimize.md +12 -6
- package/dist/agent-src/commands/override.md +1 -0
- package/dist/agent-src/commands/prediction-pool.md +4 -4
- package/dist/agent-src/commands/research/deep.md +1 -1
- package/dist/agent-src/commands/roadmap.md +2 -1
- package/dist/agent-src/commands/rule-compliance-audit.md +1 -1
- package/dist/agent-src/commands/tdd.md +1 -0
- package/dist/agent-src/commands/tests.md +1 -0
- package/dist/agent-src/commands/upstream-contribute.md +5 -5
- package/dist/agent-src/commands/video/from-script.md +1 -1
- package/dist/agent-src/commands/video/from-song.md +1 -1
- package/dist/agent-src/commands/video/scene.md +1 -1
- package/dist/agent-src/commands/video/stitch.md +1 -1
- package/dist/agent-src/commands/video/storyboard.md +1 -1
- package/dist/agent-src/commands/worktree/create.md +2 -1
- package/dist/agent-src/contexts/augment-infrastructure.md +1 -1
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +5 -5
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
- package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +4 -3
- package/dist/agent-src/contexts/execution/subagent-routing.md +19 -0
- package/dist/agent-src/contexts/override-system.md +1 -1
- package/dist/agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/dist/agent-src/rules/augment-edit-discipline.md +1 -1
- package/dist/agent-src/rules/autonomous-execution.md +2 -1
- package/dist/agent-src/rules/brand-consistency.md +1 -0
- package/dist/agent-src/rules/brand-source-of-truth.md +1 -0
- package/dist/agent-src/rules/code-comment-discipline.md +2 -0
- package/dist/agent-src/rules/communication-through-line.md +1 -0
- package/dist/agent-src/rules/content-quoting-floor.md +1 -0
- package/dist/agent-src/rules/cross-source-consistency.md +0 -1
- package/dist/agent-src/rules/downstream-changes.md +1 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +1 -0
- package/dist/agent-src/rules/external-reference-deep-dive.md +1 -0
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
- package/dist/agent-src/rules/finance-safety-floor.md +0 -1
- package/dist/agent-src/rules/icon-consistency.md +1 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/invite-challenge.md +1 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +1 -0
- package/dist/agent-src/rules/media-governance-routing.md +4 -3
- package/dist/agent-src/rules/media-sync-ground-truth.md +1 -0
- package/dist/agent-src/rules/no-attribution-footers.md +1 -0
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +1 -0
- package/dist/agent-src/rules/no-pr-progress-comments.md +1 -0
- package/dist/agent-src/rules/onboarding-gate.md +1 -0
- package/dist/agent-src/rules/output-discipline.md +1 -0
- package/dist/agent-src/rules/prefer-enums-over-literals.md +1 -0
- package/dist/agent-src/rules/preservation-guard.md +1 -0
- package/dist/agent-src/rules/question-not-instruction.md +1 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
- package/dist/agent-src/rules/role-mode-adherence.md +1 -0
- package/dist/agent-src/rules/runtime-safety.md +1 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -0
- package/dist/agent-src/rules/session-canary.md +9 -2
- package/dist/agent-src/rules/source-confidentiality.md +1 -0
- package/dist/agent-src/rules/source-of-truth.md +1 -0
- package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -0
- package/dist/agent-src/rules/think-before-action.md +1 -0
- package/dist/agent-src/rules/token-budget-discipline.md +1 -0
- package/dist/agent-src/rules/token-efficiency.md +1 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +5 -5
- package/dist/agent-src/rules/tool-safety.md +1 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +2 -0
- package/dist/agent-src/rules/user-interaction.md +1 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +1 -1
- package/dist/agent-src/skills/check-refs/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/github-ci/SKILL.md +1 -0
- package/dist/agent-src/skills/guideline-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/lint-skills/SKILL.md +1 -1
- package/dist/agent-src/skills/readme-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/SKILL.md +8 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +4 -4
- package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +6 -6
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +25 -0
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +1 -1
- package/dist/agent-src/templates/copilot-instructions.md +3 -3
- package/dist/agent-src/templates/rule.md +2 -2
- package/dist/agent-src/templates/scripts/work_engine/orchestration.ts +1 -1
- package/dist/agent-src/templates/skill-archive-note.md +5 -5
- package/dist/agent-src/templates/skill.md +1 -1
- package/dist/cli/agent-config.js +66 -19
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/main.js +9 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/python/workspace_drive.js +2 -0
- package/dist/cli/python/workspace_drive.js.map +1 -1
- package/dist/cli/python/workspace_drive_health.js +2 -0
- package/dist/cli/python/workspace_drive_health.js.map +1 -1
- package/dist/cli/python/workspace_hosts.js +2 -0
- package/dist/cli/python/workspace_hosts.js.map +1 -1
- package/dist/cli/python/workspace_sessions.js +2 -0
- package/dist/cli/python/workspace_sessions.js.map +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-A3HJ6NTI.js → chunk-63WSP6YZ.js} +2 -1
- package/dist/cli-delegate/{chunk-EJYIGZ3T.js → chunk-BKO2AZ7Z.js} +1 -1
- package/dist/cli-delegate/{chunk-QFKQLQ7X.js → chunk-H574KOUH.js} +340 -462
- package/dist/cli-delegate/chunk-NXFWFAYV.js +339 -0
- package/dist/cli-delegate/{chunk-TEGJU2JX.js → chunk-ZXXJLL5K.js} +2 -2
- package/dist/cli-delegate/cmd_conformance.js +29 -23
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +163 -103
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +6 -5
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +5 -4
- package/dist/hooks/dispatch.js +729 -430
- package/dist/install/install.mjs +700 -625
- package/dist/install/rule_scope.js +18 -2
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +564 -424
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_settings_hooks.js +30 -5
- package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
- package/dist/scripts/_lib/scoped_projection.js +223 -0
- package/dist/scripts/_lib/scoped_projection.js.map +1 -0
- package/dist/scripts/_lib/surface_tiers.js +125 -0
- package/dist/scripts/_lib/surface_tiers.js.map +1 -0
- package/dist/scripts/_lib/token_count.js +166 -0
- package/dist/scripts/_lib/token_count.js.map +1 -0
- package/dist/scripts/_lib/trigger_eval_floors.js +8 -0
- package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -1
- package/dist/scripts/condense.js +139 -9
- package/dist/scripts/condense.js.map +1 -1
- package/dist/scripts/project_thin_rules.js +450 -0
- package/dist/scripts/project_thin_rules.js.map +1 -0
- package/dist/server/routes/workspace.js +2 -0
- package/dist/server/routes/workspace.js.map +1 -1
- package/dist/server/schemas/settings.js +9 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-DJY_vQVn.js +40 -0
- package/dist/ui/assets/index-DJY_vQVn.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/package.json +11 -11
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/work_engine/orchestration.ts +1 -1
- package/src/config/agent-settings.template.yml +59 -11
- package/src/config/ci-local-parity.yml +8 -0
- package/src/config/discovery/unassigned-artefacts.yml +23 -25
- package/src/config/evaluator-budgets.json +35 -5
- package/src/config/gate-coverage.yml +147 -0
- package/src/config/gate-violation-baselines.json +25 -0
- package/src/install/rule_scope.ts +27 -2
- package/src/scripts/_cli/cmd_conformance.ts +13 -24
- package/src/scripts/_dispatch.bash +10 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +30 -4
- package/src/scripts/_lib/exec_evidence.ts +5 -0
- package/src/scripts/_lib/gate_baseline.ts +213 -0
- package/src/scripts/_lib/scoped_projection.ts +262 -0
- package/src/scripts/_lib/tier_budget_routing.ts +234 -0
- package/src/scripts/_lib/tool_adapter_registry.ts +8 -1
- package/src/scripts/_lib/trigger_eval_floors.ts +9 -0
- package/src/scripts/_lib/trigger_routers.ts +17 -5
- package/src/scripts/adr/regenerate_index.ts +4 -3
- package/src/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/src/scripts/ai_council/compile_corpus.ts +1 -1
- package/src/scripts/audit_cloud_compatibility.ts +37 -2
- package/src/scripts/audit_initial_context.ts +53 -19
- package/src/scripts/audit_likelihood.ts +31 -2
- package/src/scripts/audit_user_type_axis.ts +58 -11
- package/src/scripts/bench_hook_latency.ts +172 -41
- package/src/scripts/build_mcp_catalog.ts +12 -1
- package/src/scripts/check_always_budget.ts +122 -11
- package/src/scripts/check_artefact_count_messaging.ts +128 -15
- package/src/scripts/check_augment_description_cap.ts +24 -3
- package/src/scripts/check_ci_strict_superset.ts +150 -0
- package/src/scripts/check_cluster_patterns.ts +100 -0
- package/src/scripts/check_consumer_scope_flip.ts +26 -4
- package/src/scripts/check_evaluator_budgets.ts +198 -19
- package/src/scripts/check_gate_coverage.ts +337 -1
- package/src/scripts/check_generator_output_coverage.ts +2 -1
- package/src/scripts/check_iron_law_prominence.ts +1 -1
- package/src/scripts/check_kernel_rule_bundle.ts +1 -1
- package/src/scripts/check_no_new_legacy_path.ts +167 -3
- package/src/scripts/check_pack_size.ts +18 -4
- package/src/scripts/check_portability.ts +37 -7
- package/src/scripts/check_references.ts +19 -3
- package/src/scripts/check_release_pr_shape.ts +13 -0
- package/src/scripts/check_token_regression.ts +9 -2
- package/src/scripts/condense.ts +155 -12
- package/src/scripts/cost/budget.mjs +63 -2
- package/src/scripts/count_scoped_projection.ts +104 -0
- package/src/scripts/evaluator_umbrella.sh +34 -1
- package/src/scripts/generate_capability_matrix.ts +8 -0
- package/src/scripts/generate_router_coverage_from_matrix.ts +155 -0
- package/src/scripts/hook_manifest.yaml +17 -3
- package/src/scripts/hooks/block_config_weakening.ts +337 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/probe_throttle.ts +75 -0
- package/src/scripts/install-hooks.sh +24 -2
- package/src/scripts/install.ts +15 -92
- package/src/scripts/lint_agents_md.ts +9 -3
- package/src/scripts/lint_archived_skills.ts +1 -1
- package/src/scripts/lint_artefact_frontmatter.ts +185 -37
- package/src/scripts/lint_command_routing.ts +21 -52
- package/src/scripts/lint_command_verbs.ts +47 -28
- package/src/scripts/lint_context_spine_usage.ts +38 -12
- package/src/scripts/lint_framework_leakage.ts +25 -6
- package/src/scripts/lint_handoffs.ts +49 -2
- package/src/scripts/lint_media_policy_linkage.ts +62 -30
- package/src/scripts/lint_namespace.ts +92 -7
- package/src/scripts/lint_new_skill_gate.ts +39 -31
- package/src/scripts/lint_originality_shingles.ts +7 -1
- package/src/scripts/lint_override_kernel_guard.ts +21 -3
- package/src/scripts/lint_pack_boundaries.ts +461 -91
- package/src/scripts/lint_pack_dependencies.ts +24 -57
- package/src/scripts/lint_persona_governance.ts +1 -1
- package/src/scripts/lint_role_experiences.ts +34 -5
- package/src/scripts/lint_trigger_precision.ts +142 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +12 -201
- package/src/scripts/mcp_server/tools.ts +1 -1
- package/src/scripts/prepack-check.mjs +40 -1
- package/src/scripts/prepack_router_targets.d.mts +7 -0
- package/src/scripts/prepack_router_targets.mjs +93 -0
- package/src/scripts/print_required_checks.ts +72 -18
- package/src/scripts/profile_staleness_hook.ts +12 -0
- package/src/scripts/record_evaluator_measurements.mjs +105 -0
- package/src/scripts/recruit_preflight.sh +1 -1
- package/src/scripts/release.ts +105 -1
- package/src/scripts/router_target_paths.d.mts +4 -0
- package/src/scripts/router_target_paths.mjs +69 -0
- package/src/scripts/router_telemetry.ts +52 -1
- package/src/scripts/routing_doctor.ts +485 -0
- package/src/scripts/rule_trigger_eval.ts +403 -0
- package/src/scripts/schemas/rule.schema.json +5 -1
- package/src/scripts/session_canary_hook.ts +96 -5
- package/src/scripts/skill_linter.ts +90 -42
- package/src/scripts/smoke/skills.sh +1 -1
- package/src/scripts/sweep_dead_scan_roots.ts +356 -10
- package/src/scripts/trigger_coverage.ts +13 -2
- package/src/scripts/update_counts.ts +91 -12
- package/src/scripts/validate_telegraph_carveouts.ts +1 -1
- package/src/scripts/wrapper_freshness_hook.ts +14 -0
- package/src/server/schemas/settings.ts +19 -5
- package/dist/cli-delegate/chunk-TJIAM5FW.js +0 -133
- package/dist/ui/assets/index-BpSQt5vm.js +0 -40
- package/dist/ui/assets/index-BpSQt5vm.js.map +0 -1
package/dist/ui/index.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
document.documentElement.setAttribute('data-theme', theme);
|
|
28
28
|
})();
|
|
29
29
|
</script>
|
|
30
|
-
<script type="module" crossorigin src="/assets/index-
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-DJY_vQVn.js"></script>
|
|
31
31
|
<link rel="stylesheet" crossorigin href="/assets/index-jSfMW8_t.css">
|
|
32
32
|
</head>
|
|
33
33
|
<body>
|
|
@@ -218,7 +218,7 @@ Keep aligned with the dashboard counter in `scripts/update_roadmap_progress.ts`
|
|
|
218
218
|
|
|
219
219
|
`[~]` is **not** an "in-progress" indicator. Mid-reply work-in-flight has no checkbox change until the step lands; that's a normal `[ ] → [x]` transition.
|
|
220
220
|
|
|
221
|
-
**Dashboard regen cadence — opt-in batching.** The checkbox flip is non-batchable. The **subprocess regen** (`./agent-config roadmap:progress`) is batchable per `roadmap.dashboard_regen_cadence` in `.agent-settings.yml` (`
|
|
221
|
+
**Dashboard regen cadence — opt-in batching.** The checkbox flip is non-batchable. The **subprocess regen** (`./agent-config roadmap:progress`) is batchable per `roadmap.dashboard_regen_cadence` in `.agent-settings.yml` (`every_5_steps` default · `per_step` · `phase_boundary`). Run end, phase boundary, and any file-shape touch (rename / phase add / archive — Iron Law 1) always force an immediate regen regardless of cadence.
|
|
222
222
|
|
|
223
223
|
**Blockers follow the same cadence as checkboxes.** Clearing a `## Blockers` entry (per `templates/roadmaps.md` rule 20) flips its `Status: resolved` and regenerates the dashboard in the same reply — Iron Law 1's "same response" obligation applies to blocker resolution exactly as it applies to a checkbox flip.
|
|
224
224
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
3
|
"mcpName": "io.github.event4u-app/agent-config",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.15.0",
|
|
5
5
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|
|
@@ -87,20 +87,20 @@
|
|
|
87
87
|
"provenance": true
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@inquirer/prompts": "^
|
|
91
|
-
"@playwright/test": "^1.
|
|
92
|
-
"@preact/preset-vite": "^2.10.
|
|
90
|
+
"@inquirer/prompts": "^8.5.2",
|
|
91
|
+
"@playwright/test": "^1.62.1",
|
|
92
|
+
"@preact/preset-vite": "^2.10.6",
|
|
93
93
|
"@testing-library/preact": "^3.2.4",
|
|
94
94
|
"@types/js-yaml": "^4.0.9",
|
|
95
|
-
"@types/node": "^
|
|
96
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
95
|
+
"@types/node": "^26.1.2",
|
|
96
|
+
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
|
97
97
|
"@typescript-eslint/parser": "^8.59.4",
|
|
98
98
|
"eslint": "^9.39.4",
|
|
99
|
-
"happy-dom": "^20.
|
|
99
|
+
"happy-dom": "^20.11.1",
|
|
100
100
|
"js-tiktoken": "^1.0.21",
|
|
101
101
|
"publint": "^0.3.22",
|
|
102
102
|
"tree-sitter-wasms": "0.1.13",
|
|
103
|
-
"tsx": "^4.
|
|
103
|
+
"tsx": "^4.23.1",
|
|
104
104
|
"typescript": "^5.9.3",
|
|
105
105
|
"vite": "^5.4.21",
|
|
106
106
|
"vitest": "^2.1.9",
|
|
@@ -108,11 +108,11 @@
|
|
|
108
108
|
},
|
|
109
109
|
"dependencies": {
|
|
110
110
|
"@fastify/static": "^10.1.2",
|
|
111
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
112
|
-
"@preact/signals": "^2.
|
|
111
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
112
|
+
"@preact/signals": "^2.10.0",
|
|
113
113
|
"commander": "^12.1.0",
|
|
114
114
|
"execa": "^9.5.0",
|
|
115
|
-
"fastify": "^5.
|
|
115
|
+
"fastify": "^5.11.0",
|
|
116
116
|
"js-yaml": "^4.1.0",
|
|
117
117
|
"open": "^10.2.0",
|
|
118
118
|
"preact": "^10.29.0",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
2. **What language?** — Project-specific; agents mirror the user's language at runtime.
|
|
31
31
|
3. **Where do I edit agent-config?** — Do not edit `.augment/` or `dist/agent-src/` here; they are installed artifacts. Project edits live in `agents/` and project source.
|
|
32
32
|
4. **Lint / test / sync entry point?** — Project-specific (see project README); agent-config reinstalls via `composer update event4u/agent-config` or `npm update @event4u/agent-config`.
|
|
33
|
-
5. **Where do the always-active rules live?** — `dist/agent-src/rules/` (kernel = 9 Iron-Law rules; tier-1 / tier-2 routed via `dist/
|
|
33
|
+
5. **Where do the always-active rules live?** — `dist/agent-src/rules/` (kernel = 9 Iron-Law rules; tier-1 / tier-2 routed via `dist/router.json`).
|
|
34
34
|
6. **Per-module agent docs?** — If `modules.enabled: true`, each module under `modules.root_paths` may carry its own `{agent_folder}/` (default `agents/`). See `module-management` skill.
|
|
@@ -104,7 +104,7 @@ interface DispatchHookModule {
|
|
|
104
104
|
* reachable both when this module runs from the consumer projection
|
|
105
105
|
* (`dist/agent-src/templates/scripts/work_engine/`) and from the
|
|
106
106
|
* source-of-truth tree
|
|
107
|
-
* (`
|
|
107
|
+
* (`src/agent-src/templates/scripts/work_engine/`).
|
|
108
108
|
* Loaded by dynamic `import()` to avoid namespace collisions with test
|
|
109
109
|
* modules named `hooks` (the TS analogue of the Python importlib-by-path
|
|
110
110
|
* approach).
|
|
@@ -83,6 +83,25 @@ projection:
|
|
|
83
83
|
# a non-kernel rule also needs a `packs:` intersection to project — e.g.
|
|
84
84
|
# deselecting `frontend-design` removes ui-audit-gate + design-fidelity.
|
|
85
85
|
# Empty = inactive, same as rule_workspaces.
|
|
86
|
+
#
|
|
87
|
+
# `rule_packs: auto` derives the id list from the ACTIVE-PACK set — the same
|
|
88
|
+
# set the skill/command prune uses — instead of hand-typing ids that would
|
|
89
|
+
# need re-typing whenever a pack is added. It exists because a domain safety
|
|
90
|
+
# floor whose own body says "auto-activates when pack-X is installed" ships
|
|
91
|
+
# today into installs that have no pack-X, where it guards nothing. Measured
|
|
92
|
+
# on this repo (2026-08-02): `auto` drops 8 rules / 8,110 GPT tok — the six
|
|
93
|
+
# domain floors plus provider-lifecycle-discipline and
|
|
94
|
+
# spreadsheet-source-quality. `history-discipline` and `scale-discipline`
|
|
95
|
+
# correctly SURVIVE (their packs are engineering-workspace packs).
|
|
96
|
+
#
|
|
97
|
+
# The DEFAULT stays `[]`. Flipping it to `auto` changes what a consumer
|
|
98
|
+
# install receives and therefore inherits the same human release gate the
|
|
99
|
+
# workspace axis carries (2026-07-13,
|
|
100
|
+
# agents/settings/contexts/consumer-scoping-audit-2026-07-07.md) — that
|
|
101
|
+
# audit's "unsure → ship it" ruling was about the maintainer-vs-consumer
|
|
102
|
+
# WORKSPACE question, not about a pack condition the rule declares itself,
|
|
103
|
+
# but the gate applies to the flip either way. Do not set this from
|
|
104
|
+
# automation.
|
|
86
105
|
rule_packs: []
|
|
87
106
|
|
|
88
107
|
# --- Discipline profile (successor knob, opt-in until the evidence gates pass) ---
|
|
@@ -207,6 +226,16 @@ cost:
|
|
|
207
226
|
weekly: 0
|
|
208
227
|
# Monthly USD ceiling (rolling 30d). 0 / null = no monthly budget.
|
|
209
228
|
monthly: 0
|
|
229
|
+
# Per-model-tier USD ceilings for budget-aware cheap-request delegation
|
|
230
|
+
# (docs/contracts/budget-routing.md; council 2026-08-03). null = no
|
|
231
|
+
# separate tier cap — the global ceilings above still apply and the
|
|
232
|
+
# budget-routing relation works purely off them. Set a value to cap one
|
|
233
|
+
# tier (e.g. cheap: 10 keeps haiku-class delegation under $10/day-window
|
|
234
|
+
# of the ledger). Consumed by subagents.budget_routing below.
|
|
235
|
+
per_tier:
|
|
236
|
+
cheap: null
|
|
237
|
+
medium: null
|
|
238
|
+
strong: null
|
|
210
239
|
# Enforcement mode at the HARD_STOP tier (100% utilization):
|
|
211
240
|
# advisory = dashboards and `cost:check` show the breach; agent
|
|
212
241
|
# keeps working. Default. Safe for greenfield projects.
|
|
@@ -256,7 +285,11 @@ personal:
|
|
|
256
285
|
# greeting silently disappears, the context window is degrading and it is
|
|
257
286
|
# time for a fresh conversation. Also keeps the reply-close markers alive
|
|
258
287
|
# (ONE end-summary; PR URL as the literal last line).
|
|
259
|
-
#
|
|
288
|
+
# Personal concern, resolved user-globally: empty here falls back to the
|
|
289
|
+
# user-global settings' personal.canary_name and then to identity.name in
|
|
290
|
+
# the wizard's settings/.agent-user.yml — set this key only to OVERRIDE
|
|
291
|
+
# the global name per project. No name on any layer = feature off.
|
|
292
|
+
# See rules/session-canary.md.
|
|
260
293
|
canary_name: ""
|
|
261
294
|
|
|
262
295
|
# Prefix PR comment replies with a bot icon 🤖 (true, false)
|
|
@@ -458,14 +491,14 @@ roadmap:
|
|
|
458
491
|
# of the run, at every phase boundary, and at run end — this knob
|
|
459
492
|
# only affects the inter-step beat.
|
|
460
493
|
#
|
|
461
|
-
# per_step =
|
|
462
|
-
#
|
|
463
|
-
#
|
|
464
|
-
#
|
|
465
|
-
#
|
|
466
|
-
# every_5_steps = batch flips, regen every 5 closed
|
|
467
|
-
# every phase boundary. Balanced
|
|
468
|
-
# for runs of 20–100 steps.
|
|
494
|
+
# per_step = regen after every checkbox flip. Safest for
|
|
495
|
+
# crash recovery; highest subprocess overhead.
|
|
496
|
+
# Use when a session may be killed mid-roadmap
|
|
497
|
+
# and a fresh dashboard must always reflect the
|
|
498
|
+
# last-saved step.
|
|
499
|
+
# every_5_steps = default: batch flips, regen every 5 closed
|
|
500
|
+
# steps + at every phase boundary. Balanced
|
|
501
|
+
# cost/freshness for runs of 20–100 steps.
|
|
469
502
|
# phase_boundary = regen only at phase boundaries + run end.
|
|
470
503
|
# Cheapest for long roadmaps (100+ steps).
|
|
471
504
|
# The checkbox flip itself is still inline per
|
|
@@ -474,8 +507,10 @@ roadmap:
|
|
|
474
507
|
# `process-step` ignores this knob (single-step runs always regen
|
|
475
508
|
# at the end of the step). The Iron Law 1 mandate to regen on any
|
|
476
509
|
# file-shape touch (rename / phase add / archive) still fires
|
|
477
|
-
# immediately regardless of this setting
|
|
478
|
-
|
|
510
|
+
# immediately regardless of this setting — so the dashboard is never
|
|
511
|
+
# stale across a rename, a phase add, or an archive, whatever the
|
|
512
|
+
# inter-step beat is.
|
|
513
|
+
dashboard_regen_cadence: every_5_steps
|
|
479
514
|
|
|
480
515
|
# Visible-horizon framing in roadmap authoring (integer weeks, default 0).
|
|
481
516
|
# 0 = off (default). Time-boxed plate / horizon framing is forbidden:
|
|
@@ -679,6 +714,19 @@ subagents:
|
|
|
679
714
|
# false = every subagent runs on the session tier.
|
|
680
715
|
downshift: true
|
|
681
716
|
|
|
717
|
+
# Budget-aware cheap-request delegation (docs/contracts/budget-routing.md).
|
|
718
|
+
# Picks the cheapest CLASSIFIER-ADEQUATE tier that has available budget
|
|
719
|
+
# (cost.budgets.per_tier above); cheap exhausted but strong funded → strong
|
|
720
|
+
# tier; everything exhausted → session model + notice. Work is never
|
|
721
|
+
# blocked to save money, and the session model is never switched — routing
|
|
722
|
+
# happens as delegation with a model override. DISTINCT from `downshift`
|
|
723
|
+
# above: downshift is the quality/cost trade-off knob, budget_routing is
|
|
724
|
+
# the resource-availability gate (council 2026-08-03).
|
|
725
|
+
# ask = (default) first budget-motivated downshift of a session asks once
|
|
726
|
+
# auto = apply the relation silently (telemetry line per routed request)
|
|
727
|
+
# off = today's behavior; single-flip rollback
|
|
728
|
+
budget_routing: ask
|
|
729
|
+
|
|
682
730
|
# Prefer a separate-quota-pool model for delegable sub-tasks WHERE the host
|
|
683
731
|
# manifest reports `separate_quota_pool: true` (e.g. a subscription whose
|
|
684
732
|
# Sonnet allowance is distinct from Opus). Optional bonus only — behaviour is
|
|
@@ -66,7 +66,15 @@ pre_push_budget_seconds: 25
|
|
|
66
66
|
# artifact needs something only CI builds (site, tarball, bundle)
|
|
67
67
|
# benchmark it is a measurement, timing-sensitive or paid
|
|
68
68
|
# matrix needs an OS or Node version this machine is not
|
|
69
|
+
# resolver not a gate at all — a helper a workflow step calls to compute
|
|
70
|
+
# something (a diff base, a scope); it decides and blocks nothing
|
|
69
71
|
ci_only:
|
|
72
|
+
- id: check_evaluator_budgets
|
|
73
|
+
class: benchmark
|
|
74
|
+
reason: "asserts against a measurements JSON that only the nightly evaluator-umbrella run produces — with no artifact there is nothing local to compare against"
|
|
75
|
+
- id: resolve_lint_scope
|
|
76
|
+
class: resolver
|
|
77
|
+
reason: "not a gate — the diff-base resolver skill-lint.yml shell steps call so they scope from the same source as `skill_linter --changed`; it decides nothing and blocks nothing"
|
|
70
78
|
- id: adoption_snapshot
|
|
71
79
|
class: network
|
|
72
80
|
reason: "live api.npmjs.org + api.github.com calls, reads GITHUB_TOKEN"
|
|
@@ -18,21 +18,21 @@
|
|
|
18
18
|
# /skill-management, /override:create, etc. They carry no runtime
|
|
19
19
|
# frontmatter on purpose: the consuming command fills it in. Quarantined
|
|
20
20
|
# from the discovery manifest so strict mode stays clean.
|
|
21
|
-
- path:
|
|
21
|
+
- path: src/agent-src/templates/AGENTS.md
|
|
22
22
|
reason: scaffold template for new project AGENTS.md; placeholders filled by /agents init
|
|
23
|
-
- path:
|
|
23
|
+
- path: src/agent-src/templates/agent-settings.md
|
|
24
24
|
reason: scaffold for project .agent-settings.yml
|
|
25
|
-
- path:
|
|
25
|
+
- path: src/agent-src/templates/command.md
|
|
26
26
|
reason: scaffold for new slash-command authoring
|
|
27
27
|
- path: src/agent-src/templates/tickets.md
|
|
28
28
|
reason: scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket
|
|
29
|
-
- path:
|
|
29
|
+
- path: src/agent-src/templates/contexts.md
|
|
30
30
|
reason: scaffold index for project contexts/
|
|
31
|
-
- path:
|
|
31
|
+
- path: src/agent-src/templates/contexts/auth-model.md
|
|
32
32
|
reason: scaffold for project auth-model context
|
|
33
|
-
- path:
|
|
33
|
+
- path: src/agent-src/templates/contexts/data-sensitivity.md
|
|
34
34
|
reason: scaffold for project data-sensitivity context
|
|
35
|
-
- path:
|
|
35
|
+
- path: src/agent-src/templates/contexts/deployment-order.md
|
|
36
36
|
reason: scaffold for project deployment-order context
|
|
37
37
|
- path: src/agent-src/templates/contexts/knowledge-card.md
|
|
38
38
|
reason: fill-in skeleton for committed knowledge cards (evidence-first structure discovery / ADR-098); frontmatter is the example shape a filled card carries, not a runtime artefact
|
|
@@ -40,37 +40,35 @@
|
|
|
40
40
|
reason: convention doc for the typed agents/knowledge/ page directories (road-to-knowledge-system); documents the optional page frontmatter shape, carries none itself
|
|
41
41
|
- path: src/agent-src/templates/contexts/lesson-card.md
|
|
42
42
|
reason: fill-in skeleton for Class-C learned lessons (Evidence v2 project-intelligence); frontmatter is the example shape a filled lesson carries, not a runtime artefact
|
|
43
|
-
- path:
|
|
43
|
+
- path: src/agent-src/templates/contexts/observability.md
|
|
44
44
|
reason: scaffold for project observability context
|
|
45
|
-
- path:
|
|
45
|
+
- path: src/agent-src/templates/contexts/tenant-boundaries.md
|
|
46
46
|
reason: scaffold for project tenant-boundaries context
|
|
47
|
-
- path:
|
|
47
|
+
- path: src/agent-src/templates/copilot-instructions.md
|
|
48
48
|
reason: scaffold for project copilot-instructions.md
|
|
49
|
-
- path:
|
|
49
|
+
- path: src/agent-src/templates/features.md
|
|
50
50
|
reason: scaffold for project features.md catalogue
|
|
51
|
-
- path:
|
|
51
|
+
- path: src/agent-src/templates/overrides/command.md
|
|
52
52
|
reason: scaffold for project override of a shared command
|
|
53
|
-
- path:
|
|
53
|
+
- path: src/agent-src/templates/overrides/guideline.md
|
|
54
54
|
reason: scaffold for project override of a shared guideline
|
|
55
|
-
- path:
|
|
55
|
+
- path: src/agent-src/templates/overrides/rule.md
|
|
56
56
|
reason: scaffold for project override of a shared rule
|
|
57
|
-
- path:
|
|
57
|
+
- path: src/agent-src/templates/overrides/skill.md
|
|
58
58
|
reason: scaffold for project override of a shared skill
|
|
59
|
-
- path:
|
|
59
|
+
- path: src/agent-src/templates/overrides/template.md
|
|
60
60
|
reason: scaffold-of-scaffold for new override types
|
|
61
|
-
- path:
|
|
61
|
+
- path: src/agent-src/templates/persona.md
|
|
62
62
|
reason: scaffold for new persona authoring
|
|
63
|
-
- path:
|
|
63
|
+
- path: src/agent-src/templates/roadmaps.md
|
|
64
64
|
reason: scaffold for new roadmap authoring
|
|
65
|
-
- path:
|
|
65
|
+
- path: src/agent-src/templates/rule.md
|
|
66
66
|
reason: scaffold for new rule authoring
|
|
67
|
-
- path:
|
|
68
|
-
reason: pytest cache artefact, not an agent-config artefact
|
|
69
|
-
- path: .agent-src.uncondensed/templates/scripts/README.md
|
|
67
|
+
- path: src/agent-src/templates/scripts/README.md
|
|
70
68
|
reason: scaffold README for project scripts/
|
|
71
|
-
- path:
|
|
69
|
+
- path: src/agent-src/templates/skill-archive-note.md
|
|
72
70
|
reason: scaffold for archive-note generation
|
|
73
|
-
- path:
|
|
71
|
+
- path: src/agent-src/templates/skill.md
|
|
74
72
|
reason: scaffold for new SKILL.md authoring
|
|
75
|
-
- path:
|
|
73
|
+
- path: src/agent-src/README.md
|
|
76
74
|
reason: package-root orientation; carries no artefact frontmatter — follows package core
|
|
@@ -4,43 +4,73 @@
|
|
|
4
4
|
"owner": "maintainer",
|
|
5
5
|
"review_by": "2027-07-27",
|
|
6
6
|
"regression_pct": 10,
|
|
7
|
+
"posture": {
|
|
8
|
+
"on_release": "fail",
|
|
9
|
+
"on_main_and_prs": "warn",
|
|
10
|
+
"on_local": "fail",
|
|
11
|
+
"always_blocking": ["a metric with no measurement supplied"],
|
|
12
|
+
"rationale": "road-to-gates-that-can-fail Phase 5. A hard fail on main turns every legitimate command addition into a blocked merge, which is how budgets get quietly raised with a cushion instead of consciously — so budget / regression / drift findings are ADVISORY on main, the nightly and ordinary PRs, and BLOCKING on a release ref. Not a weakening: before the Phase-4 path triggers, this gate ran on release PRs and the nightly only, so the surfaces that now warn never saw it at all. A LOCAL run (no CI env) is strict, because a maintainer running it by hand — including release.ts — wants the strict answer and blocks nobody. A metric with NO measurement is always blocking in either posture: that is a broken harness reporting green on nothing. Implemented in src/scripts/check_evaluator_budgets.ts::detectPosture; override with --posture warn|fail.",
|
|
13
|
+
"delivery": "This posture IS the nightly-visibility route (council 2026-08-02, blocker nightly-visibility-owner), not a second mechanism beside it: the nightly publishes measurement_record below, a later run re-measures and compares, and the contradiction warns on main / fails on release. No notification channel, no auto-managed issue — a one-maintainer channel producing routine noise gets muted, and a muted channel reproduces the original failure."
|
|
14
|
+
},
|
|
15
|
+
"measurement_record": {
|
|
16
|
+
"path": "agents/evidence/metrics/evaluator-measurements.json",
|
|
17
|
+
"written_by": "src/scripts/evaluator_umbrella.sh (UMBRELLA_RECORD=1 — the nightly sets it)",
|
|
18
|
+
"compared_by": "src/scripts/check_evaluator_budgets.ts --recorded",
|
|
19
|
+
"note": "Only entries WITHOUT `deterministic: false` participate in the drift comparison. The council's recorded objection was that a non-deterministic comparison produces noise and gets ignored; determinism is therefore a precondition, verified per metric, not an assumption."
|
|
20
|
+
},
|
|
21
|
+
"remeasurement_2026_08_02": {
|
|
22
|
+
"verified_against_a_fresh_run": {
|
|
23
|
+
"cli_help_command_count": "80 — three consecutive runs of the pinned method on an unchanged tree returned 80/80/80. Matches last_measured; deterministic confirmed.",
|
|
24
|
+
"mcp_public_tool_count": "19 — two consecutive tools/list runs on a freshly built dist/mcp/server.mjs returned 19/19. Matches last_measured; deterministic confirmed."
|
|
25
|
+
},
|
|
26
|
+
"not_re_measured": "unpacked_size_mb, node_modules_mb, runtime_dep_count, cli_version_cold_ms, mcp_boot_to_initialize_ms. All five require the packed-tarball harness (npm pack of a fully built tree, then a clean `npm install --omit=dev <tarball>` into a scratch project) that evaluator_umbrella.sh runs in CI. They were NOT re-measured in this pass and their values remain the 2026-07-27 acceptance numbers — stated rather than invented. The next nightly writes the real numbers into measurement_record, and the drift check then reports any contradiction with last_measured on the PR that carries it."
|
|
27
|
+
},
|
|
7
28
|
"budgets": {
|
|
8
29
|
"unpacked_size_mb": {
|
|
9
30
|
"max": 28,
|
|
10
31
|
"last_measured": 26.05,
|
|
32
|
+
"last_measured_at": "2026-07-27",
|
|
11
33
|
"method": "npm pack --json → dist.unpackedSize / 1e6 — includes the Phase-1 precompiled bundles (dist/hooks/dispatch.js + dist/mcp/server.mjs, ~2.1 MB) that bought the 23x hook-latency win and the tsx removal, plus dist/cli-delegate/ (~1.40 MB, ADR-204) which finished that removal for the consumer command surface. This gate is the ONLY size trip-wire on those bundles by design: a dedicated per-bundle budget key would need its own measurement wired into evaluator_umbrella.sh, and an unwired key fails check_evaluator_budgets with 'no measurement supplied' instead of guarding anything. ADR-204 projected 27.45 against max 28 without packing — the next real measurement here is the confirming one, and headroom is thin"
|
|
12
34
|
},
|
|
13
35
|
"node_modules_mb": {
|
|
14
36
|
"max": 140,
|
|
15
37
|
"last_measured": 127,
|
|
38
|
+
"last_measured_at": "2026-07-27",
|
|
16
39
|
"method": "du -sm node_modules after `npm install --omit=dev <tarball>` in a clean project"
|
|
17
40
|
},
|
|
18
41
|
"runtime_dep_count": {
|
|
19
42
|
"max": 200,
|
|
20
43
|
"last_measured": 187,
|
|
44
|
+
"last_measured_at": "2026-07-27",
|
|
21
45
|
"method": "package-lock.json packages count (minus root) of the clean --omit=dev install"
|
|
22
46
|
},
|
|
23
47
|
"cli_version_cold_ms": {
|
|
24
48
|
"max": 1500,
|
|
25
49
|
"last_measured": 370,
|
|
50
|
+
"last_measured_at": "2026-07-27",
|
|
26
51
|
"method": "wall-clock of the FIRST `agent-config --version` after install (cold fs cache run counts)",
|
|
27
|
-
"regression_pct": 200
|
|
52
|
+
"regression_pct": 200,
|
|
53
|
+
"deterministic": false
|
|
28
54
|
},
|
|
29
55
|
"mcp_boot_to_initialize_ms": {
|
|
30
56
|
"max": 2000,
|
|
31
57
|
"last_measured": 264,
|
|
58
|
+
"last_measured_at": "2026-07-27",
|
|
32
59
|
"method": "initialize request piped to `node dist/mcp/server.mjs`, wall-clock to response",
|
|
33
|
-
"regression_pct": 200
|
|
60
|
+
"regression_pct": 200,
|
|
61
|
+
"deterministic": false
|
|
34
62
|
},
|
|
35
63
|
"cli_help_command_count": {
|
|
36
|
-
"max":
|
|
37
|
-
"last_measured":
|
|
64
|
+
"max": 81,
|
|
65
|
+
"last_measured": 81,
|
|
66
|
+
"last_measured_at": "2026-08-03",
|
|
38
67
|
"method": "registry enumeration — count of `{ name: '...', disposition` entries in src/cli/registry.ts (NOT --help prose parsing; methods historically disagreed 74 vs 76 vs 79)",
|
|
39
|
-
"baseline_note": "
|
|
68
|
+
"baseline_note": "80 → 81 on 2026-08-03 (release 9.15.0 gate). This RECORDS growth that already shipped through its own reviewed PR; it does not authorize new surface. The +1 is f02db54c2 (fix(cli): register routing:doctor in the CLI registry) — the command existed, only its registry entry was missing, and the registering PR did not move this budget. The gate did its job again: breach WARNS on main and BLOCKS on release, which is the conscious-decision point rather than a silently raised cap. Re-measured 2026-08-03 via the pinned method: 81. Headroom stays zero by design — the next registry addition must move this number in its own PR."
|
|
40
69
|
},
|
|
41
70
|
"mcp_public_tool_count": {
|
|
42
71
|
"max": 19,
|
|
43
72
|
"last_measured": 19,
|
|
73
|
+
"last_measured_at": "2026-08-02",
|
|
44
74
|
"method": "tools/list length on the stdio server (post-ADR-132: implemented tools only)"
|
|
45
75
|
}
|
|
46
76
|
}
|
|
@@ -38,6 +38,51 @@
|
|
|
38
38
|
# pending = not yet emitting `scanned:`. The guard REPORTS these
|
|
39
39
|
# rather than skipping silently: its own partial coverage must be
|
|
40
40
|
# visible, or it repeats the sin it exists to catch.
|
|
41
|
+
# canary optional mutation recipe (Phase 7) — see CANARY below
|
|
42
|
+
#
|
|
43
|
+
# COVERAGE — THE HONEST DENOMINATOR (measured 2026-08-02)
|
|
44
|
+
# ------------------------------------------------------
|
|
45
|
+
# 211 `lint_*` / `check_*` / `audit_*` scripts live under `src/scripts/`.
|
|
46
|
+
# **8 of them emit the machine-readable `scanned: <N>` line under their
|
|
47
|
+
# CI-identical argv, and all 8 are listed below.** The manifest is therefore
|
|
48
|
+
# complete with respect to its own contract, and covers ~4 % of the gate
|
|
49
|
+
# population.
|
|
50
|
+
#
|
|
51
|
+
# The other ~203 are NOT covered, for one reason: rule 1. They print their count
|
|
52
|
+
# in prose ("111 file(s) scanned", "0 declarer(s)") or not at all, and a guard
|
|
53
|
+
# that parses prose is the fragile thing being replaced. Padding this list with
|
|
54
|
+
# them would manufacture exactly the false green the file exists to prevent.
|
|
55
|
+
#
|
|
56
|
+
# Closing the gap is one line per gate, not a new mechanism: a gate that already
|
|
57
|
+
# computes its count for `_lib/scan_scope.assertScanned` need only also write
|
|
58
|
+
# `scanned: <N>`. Seven gates are one line away today — they call `assertScanned`
|
|
59
|
+
# / `assertWatchlistResolves` with a real count in hand: `audit_skill_overlap`,
|
|
60
|
+
# `check_iron_law_prominence`, `check_safety_floor_untouched`, `lint_handoffs`,
|
|
61
|
+
# `lint_namespace`, `lint_artefact_frontmatter`, `skill_linter` (listed).
|
|
62
|
+
# `tests/scripts/check_gate_coverage.test.ts` fails the build the moment a gate
|
|
63
|
+
# starts emitting the line without being registered here, so the list cannot
|
|
64
|
+
# silently fall behind again (that omission is exactly how `check_site_links`
|
|
65
|
+
# reported green over a stale build for weeks).
|
|
66
|
+
#
|
|
67
|
+
# CANARY (road-to-gates-that-can-fail Phase 7)
|
|
68
|
+
# --------------------------------------------
|
|
69
|
+
# Coverage proves a gate READ something. It cannot prove the gate can still FAIL.
|
|
70
|
+
# An optional `canary:` block declares one revertible violation for the gate:
|
|
71
|
+
#
|
|
72
|
+
# canary:
|
|
73
|
+
# class: defect class planted (gate-surface classes, not the review-side
|
|
74
|
+
# five; the shared contract is cadence + sealing + never-ships)
|
|
75
|
+
# path: repo-relative file to CREATE (must not already exist)
|
|
76
|
+
# content: the planted body
|
|
77
|
+
#
|
|
78
|
+
# `--canary` plants it, runs the gate with the same CI-identical argv, records
|
|
79
|
+
# red/green, and deletes the plant in a `finally`. Create-only is deliberate: an
|
|
80
|
+
# in-place edit would need byte-exact restoration of a tracked file, and a canary
|
|
81
|
+
# that can corrupt the tree violates the never-ships rule it inherits. The
|
|
82
|
+
# consequence is a real gap — a gate whose only possible violation is a
|
|
83
|
+
# modification of an existing tracked artefact (`check_condensation`, whose
|
|
84
|
+
# contract is `dist == rewrite(src)`; `check_ci_local_parity`, whose corpus is
|
|
85
|
+
# workflow files) carries no recipe and is reported UNPROVEN, never green.
|
|
41
86
|
gates:
|
|
42
87
|
- id: check_condensation
|
|
43
88
|
argv: []
|
|
@@ -50,6 +95,16 @@ gates:
|
|
|
50
95
|
min_scanned: 80
|
|
51
96
|
corpus: "auto-type rules carrying a description (98 at baseline)"
|
|
52
97
|
status: enforced
|
|
98
|
+
canary:
|
|
99
|
+
class: oversized-artifact
|
|
100
|
+
path: src/rules/zz-canary-probe.md
|
|
101
|
+
content: |
|
|
102
|
+
---
|
|
103
|
+
type: auto
|
|
104
|
+
description: "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Planted canary: a 180-char auto-rule description, 30 over the cap.
|
|
53
108
|
note: >
|
|
54
109
|
Retargeted 2026-07-29 from the ADR-051-emptied tree (0 -> 98). It printed
|
|
55
110
|
"All 0 auto-rule descriptions" and exited 0 in CI. Retargeting surfaced 16
|
|
@@ -64,6 +119,18 @@ gates:
|
|
|
64
119
|
min_scanned: 180
|
|
65
120
|
corpus: "md files inspected for a load_context block: src/rules + src/agent-src/contexts + agents/settings/contexts (231 at baseline, 17 declarers)"
|
|
66
121
|
status: enforced
|
|
122
|
+
canary:
|
|
123
|
+
class: dead-target
|
|
124
|
+
path: src/rules/zz-canary-probe.md
|
|
125
|
+
content: |
|
|
126
|
+
---
|
|
127
|
+
type: auto
|
|
128
|
+
description: "Planted canary rule declaring a load_context target that does not exist."
|
|
129
|
+
load_context:
|
|
130
|
+
- contexts/zz-canary-target-does-not-exist.md
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
Planted canary: a declared context target with nothing behind it.
|
|
67
134
|
note: >
|
|
68
135
|
Retargeted 2026-07-29 from the ADR-051-emptied tree: 0 -> 231 files, and it
|
|
69
136
|
immediately found a real violation the blindness had hidden
|
|
@@ -80,6 +147,11 @@ gates:
|
|
|
80
147
|
min_scanned: 380
|
|
81
148
|
corpus: "skills + rules under artefact_roots() (429 at baseline)"
|
|
82
149
|
status: enforced
|
|
150
|
+
canary:
|
|
151
|
+
class: malformed-frontmatter
|
|
152
|
+
path: src/skills/zz-canary-probe/SKILL.md
|
|
153
|
+
content: |
|
|
154
|
+
Planted canary: a SKILL.md with no frontmatter block at all.
|
|
83
155
|
note: >
|
|
84
156
|
NOT blind — the manifest's regression case for rule 2. The sweep's bare
|
|
85
157
|
probe made it look blind; `--all` scans 429. Enforced precisely so that
|
|
@@ -91,6 +163,17 @@ gates:
|
|
|
91
163
|
min_scanned: 700
|
|
92
164
|
corpus: "stable artefacts across src/{rules,skills,agent-src/*} + docs/ + agents/settings/contexts (872 at baseline)"
|
|
93
165
|
status: enforced
|
|
166
|
+
canary:
|
|
167
|
+
class: stale-reference
|
|
168
|
+
path: src/rules/zz-canary-probe.md
|
|
169
|
+
content: |
|
|
170
|
+
---
|
|
171
|
+
type: auto
|
|
172
|
+
description: "Planted canary rule linking a stable artefact into the transient roadmap tree."
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
See [the plan](../../agents/roadmaps/road-to-nowhere.md) — the exact
|
|
176
|
+
stable-to-transient link this gate exists to reject.
|
|
94
177
|
note: >
|
|
95
178
|
Retargeted 2026-07-29 from the ADR-051-emptied tree. It had been enforcing the
|
|
96
179
|
no-roadmap-references rule for docs/ only while the rule + skill layer went
|
|
@@ -102,10 +185,30 @@ gates:
|
|
|
102
185
|
min_scanned: 900
|
|
103
186
|
corpus: "reference corpus: src/{rules,skills,agent-src/commands,agent-src/contexts,domains} + agents/roadmaps (1170 at baseline)"
|
|
104
187
|
status: enforced
|
|
188
|
+
canary:
|
|
189
|
+
class: orphan-artifact
|
|
190
|
+
path: src/agent-src/contexts/zz-canary-probe.md
|
|
191
|
+
content: |
|
|
192
|
+
# Planted canary: a context nothing in the reference corpus points at.
|
|
105
193
|
note: >
|
|
106
194
|
Retargeted 2026-07-29. An empty reference corpus makes every "unreferenced
|
|
107
195
|
context" verdict vacuous, which is how the dead root stayed invisible.
|
|
108
196
|
|
|
197
|
+
- id: check_ci_local_parity
|
|
198
|
+
argv: ["--quiet"]
|
|
199
|
+
min_scanned: 380
|
|
200
|
+
corpus: "CI + local gate invocations parsed from .github/workflows + taskfiles (443 at baseline)"
|
|
201
|
+
status: enforced
|
|
202
|
+
note: >
|
|
203
|
+
Registered 2026-08-02. It already emitted the contract line on every path,
|
|
204
|
+
including the failing one — it was simply never listed, the same omission
|
|
205
|
+
that let check_site_links report green over a stale build. Found by the
|
|
206
|
+
registry-completeness test rather than by another sweep, which is the point
|
|
207
|
+
of adding that test. NO CANARY RECIPE: its corpus is the workflow and
|
|
208
|
+
taskfile set, so the only plantable violation is a new file under
|
|
209
|
+
.github/workflows — a surface the canary must not write to. Reported
|
|
210
|
+
UNPROVEN by --canary, never green.
|
|
211
|
+
|
|
109
212
|
- id: check_site_links
|
|
110
213
|
argv: []
|
|
111
214
|
min_scanned: 20
|
|
@@ -125,3 +228,47 @@ gates:
|
|
|
125
228
|
shards — is NOT listed here because it was deleted rather than repaired
|
|
126
229
|
(skill_linter --all already covers all 429 artefacts in 0.5s).
|
|
127
230
|
|
|
231
|
+
|
|
232
|
+
# ── Registered 2026-08-02 (road-to-renewal-foundation Phase 1) ───────────
|
|
233
|
+
# All three were repaired in the same change from scanning a root ADR-051
|
|
234
|
+
# deleted. Each exited 0 the whole time it was blind, which is why the
|
|
235
|
+
# registration matters more than the repair: the repair fixes today, the
|
|
236
|
+
# floor is what makes the next path migration LOUD instead of silent.
|
|
237
|
+
# The roadmap step asked for `assertScanned` to be made mandatory across all
|
|
238
|
+
# corpus gates; this manifest is the stronger form of the same guarantee —
|
|
239
|
+
# `assertScanned` can only distinguish 0 from 1, while a floor also catches
|
|
240
|
+
# the 1566 → 3 collapse that a `> 0` check reports as healthy.
|
|
241
|
+
|
|
242
|
+
- id: check_portability
|
|
243
|
+
argv: []
|
|
244
|
+
min_scanned: 1200
|
|
245
|
+
corpus: "all .md under src/ + dist/agent-src/ plus the shipped root files (1,566 at baseline)"
|
|
246
|
+
status: enforced
|
|
247
|
+
note: >
|
|
248
|
+
SCAN_DIRS named the retired authoring root, so the entire src/ tree —
|
|
249
|
+
more than half the corpus — was skipped and an identifier authored there
|
|
250
|
+
was caught only once a condense run projected it into dist/agent-src/.
|
|
251
|
+
|
|
252
|
+
- id: check_references
|
|
253
|
+
argv: []
|
|
254
|
+
min_scanned: 800
|
|
255
|
+
corpus: ".md under the scanned roots plus memory YAML (1,043 at baseline)"
|
|
256
|
+
status: enforced
|
|
257
|
+
note: >
|
|
258
|
+
src/ was absent from every reference-resolution candidate list, so a link
|
|
259
|
+
resolvable only under the source of truth was reported BROKEN. The
|
|
260
|
+
failure direction was false-positive rather than false-green, but the
|
|
261
|
+
cause was the same dead root.
|
|
262
|
+
|
|
263
|
+
- id: lint_framework_leakage
|
|
264
|
+
argv: []
|
|
265
|
+
min_scanned: 350
|
|
266
|
+
corpus: "skills / rules / commands .md (431 at baseline)"
|
|
267
|
+
status: enforced
|
|
268
|
+
note: >
|
|
269
|
+
Its human summary prints "N hits across M files", where M is files WITH
|
|
270
|
+
HITS — 0 on a clean run. Reading that as coverage is precisely how a
|
|
271
|
+
blind gate looks healthy, so this gate now emits a separate `scanned:`
|
|
272
|
+
count. Its inventory-file exemption was also dead: it compared against
|
|
273
|
+
the retired root AND against 'dist/agent-src' as a single path segment,
|
|
274
|
+
which a '/'-split can never yield.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Violation ratchet for gates whose dead scan root was repaired. A repair REVEALS pre-existing debt; it does not create it. Each entry records the count revealed at repair time — the gate fails only when its count RISES. Lowering a count is a normal commit; raising one is a defect. Entries expire: a baseline that has not dropped within 56 days of `landed` (or of `reaffirmed.date`) fails its gate, because a number that never moves is suppression with extra steps. Mechanism + rationale: src/scripts/_lib/gate_baseline.ts. Decision: AI council 2026-08-02, roadmap road-to-gates-that-can-fail blocker `dead-gate-finding-triage`.",
|
|
3
|
+
"gates": {
|
|
4
|
+
"check_no_new_legacy_path:hardcoded-scan-roots": {
|
|
5
|
+
"count": 51,
|
|
6
|
+
"landed": "2026-08-02",
|
|
7
|
+
"note": "Lines under src/scripts/**/*.{ts,mts,mjs} that pass the retired `.agent-src.uncondensed` directory into `path.join(...)` — a filesystem path CONSTRUCTED against the tree ADR-051 abandoned, which is the exact shape of all 14 dead gates. Deliberately narrow so the number is signal, not noise: 236 raw mentions under src/scripts → 147 string-literal lines → 67 path-constructing lines when the pass was written, after exempting src/scripts/_lib/agent_src.ts (the shared resolver, whose job IS owning the constant — gates that route through it survived the move). Detectors holding the literal as data to match, strip, or print are not counted, and no prose, docs, tests or fixtures are read: that full-tree shape was measured at 44 files / 213 hits and rejected as the wrong lint (see the note in check_no_new_legacy_path.ts::find_offenders). Recorded at 58 rather than 67 because Phase 1's scan-root repairs were landing on this branch while the pass was being written and had already removed 9 — a baseline above the truth silently permits new violations. This count goes to ZERO as the remaining repairs land; every repair is a lowering commit. Lowered 56→51 by the road-to-renewal-foundation Phase 1 dead-root sweep (check_always_budget, check_portability, check_references, lint_framework_leakage, lint_agents_md)."
|
|
8
|
+
},
|
|
9
|
+
"audit_user_type_axis": {
|
|
10
|
+
"count": 1,
|
|
11
|
+
"landed": "2026-08-02",
|
|
12
|
+
"note": "One orphan user-type value: `legal`. Five legal-review-prep skills (contract-review, dpa-review, nda-triage, legal-intake-triage, legal-practice-profile) declare `recommended_for_user_types: [legal]`, but there is no `user-types/legal.yml` — the pack shipped an axis value with no user-type definition behind it, and the dead scan root hid it (the audit reported used=0 orphans=0 while reading zero skills; it now reads 288 and reports used=8). Clearing this entry is a product call, not a copy edit: either author `user-types/legal.yml` (tagline, recommended packs, install-path hint) or drop `legal` from those five skills. Not decided here because both options change shipped pack behaviour."
|
|
13
|
+
},
|
|
14
|
+
"lint_handoffs": {
|
|
15
|
+
"count": 18,
|
|
16
|
+
"landed": "2026-08-02",
|
|
17
|
+
"note": "All 18 are `handoff_tier_mismatch`: a senior-tier skill links to a peer whose frontmatter carries no `tier` (reported as tier='unset') — e.g. build-buy-partner → adr-create, customer-research → po-discovery, gated-reach → threat-modeling. This is a tier-metadata backfill backlog on the LINKED-TO skills, not a broken link. The one genuinely dangling link revealed by the same repair (competitive-positioning → a non-existent ../analyze-reference-repo/SKILL.md; it is a command, not a skill) was FIXED in the repairing commit rather than baselined. Clearing this entry means backfilling `tier` on the linked-to skills, or deciding that `tier: unset` on a link target is not a violation and narrowing the rule."
|
|
18
|
+
},
|
|
19
|
+
"lint_pack_boundaries": {
|
|
20
|
+
"count": 337,
|
|
21
|
+
"landed": "2026-08-02",
|
|
22
|
+
"note": "Markdown links between source artefacts that cross a pack boundary the source pack's `requires` graph does not reach — revealed when the scan root moved off the deleted packages/ tree to the live corpus (0 -> 753 artefacts scanned). 82 distinct pack pairs across 131 source files; largest single class is engineering-base -> meta (73), skills in a consumer-installable pack citing this package's own maintenance skills. Each is a link that dangles for a consumer who installs the source pack without the target's. Judged real drift rather than an over-strict gate because it is long-tailed — top bucket 22%, no single systematic cause — unlike the lint_artefact_frontmatter case, where one required shape had 0-of-288 adoption. Fix per finding: add the edge to packs.yml requires, retarget the link, or move the artefact."
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|