@event4u/agent-config 14.6.0 → 14.8.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 +255 -145
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/inbox.md +264 -10
- package/dist/agent-src/commands/analyze.md +1 -1
- package/dist/agent-src/commands/evals/git-pr-merge.json +13 -0
- package/dist/agent-src/commands/evals/roadmap.json +17 -1
- package/dist/agent-src/commands/pr/create.md +14 -2
- package/dist/agent-src/commands/pr/merge.md +379 -0
- package/dist/agent-src/commands/roadmap/process-full.md +272 -32
- package/dist/agent-src/commands/roadmap.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +46 -36
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +37 -2
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +95 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +289 -106
- package/dist/agent-src/rules/artifact-drafting-protocol.md +5 -1
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +67 -32
- package/dist/agent-src/rules/fix-what-you-see.md +108 -0
- package/dist/agent-src/rules/no-roadmap-references.md +0 -5
- package/dist/agent-src/rules/recurring-criticism.md +110 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +20 -1
- package/dist/agent-src/rules/rule-type-governance.md +0 -2
- package/dist/agent-src/rules/self-repair-loop.md +17 -0
- package/dist/agent-src/rules/skill-quality.md +0 -2
- package/dist/agent-src/rules/source-confidentiality.md +37 -7
- package/dist/agent-src/scripts/archival_sweep.ts +117 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
- package/dist/agent-src/scripts/dashboard_mode.ts +212 -0
- package/dist/agent-src/scripts/gate_budget.ts +282 -0
- package/dist/agent-src/scripts/gate_execute.ts +72 -31
- package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
- package/dist/agent-src/scripts/update_roadmap_progress.ts +296 -53
- package/dist/agent-src/skills/adr-create/SKILL.md +124 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
- package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
- package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
- package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
- package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
- package/dist/agent-src/skills/decision-record/SKILL.md +61 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +65 -0
- package/dist/agent-src/skills/merge-conflicts/SKILL.md +26 -0
- package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
- package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
- package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
- package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
- package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
- package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
- package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
- package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
- package/dist/agent-src/skills/security/SKILL.md +8 -0
- package/dist/agent-src/skills/security-audit/SKILL.md +12 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
- package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
- package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +65 -4
- package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
- package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
- package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
- package/dist/cli/registry.js +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
- package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-7PRE6ZV2.js} +338 -0
- package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
- package/dist/cli-delegate/chunk-E4XIZDIB.js +402 -0
- package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-EEJUMCDZ.js} +16 -16
- package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
- package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-H4VIVD4C.js} +385 -284
- package/dist/cli-delegate/chunk-I3EIN2YG.js +36 -0
- package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-LPPWO5CE.js} +12 -8
- package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
- package/dist/cli-delegate/{chunk-UEZ7D35A.js → chunk-N7CDDGI3.js} +4 -23
- package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-PMEKGDED.js} +74 -167
- package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
- package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
- package/dist/cli-delegate/cmd_adr_effective.js +1162 -0
- package/dist/cli-delegate/cmd_conformance.js +466 -716
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +10 -10
- package/dist/cli-delegate/cmd_explain.js +1 -1
- package/dist/cli-delegate/cmd_export.js +10 -9
- package/dist/cli-delegate/cmd_handoff.js +10 -9
- package/dist/cli-delegate/cmd_memory_get.js +2 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +5 -5
- package/dist/cli-delegate/cmd_prune.js +11 -10
- package/dist/cli-delegate/cmd_route_audit.js +6 -5
- package/dist/cli-delegate/cmd_route_explain.js +3 -3
- package/dist/cli-delegate/cmd_session_recycle.js +840 -30
- package/dist/cli-delegate/cmd_settings_get.js +3 -3
- package/dist/cli-delegate/cmd_settings_migrate.js +10 -9
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +11 -10
- package/dist/cli-delegate/cmd_uninstall.js +13 -11
- package/dist/cli-delegate/cmd_update.js +4 -4
- package/dist/cli-delegate/cmd_upgrade.js +4 -4
- package/dist/cli-delegate/cmd_validate.js +11 -10
- package/dist/cli-delegate/cmd_versions.js +3 -3
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +111 -37
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +5 -5
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +15 -12
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +11 -8
- package/dist/hooks/dispatch.js +3165 -2192
- package/dist/install/claudePathsPlan.js +187 -0
- package/dist/install/claudePathsPlan.js.map +1 -0
- package/dist/install/globalRuleLayers.js +169 -0
- package/dist/install/globalRuleLayers.js.map +1 -0
- package/dist/install/hostLayerFingerprint.js +136 -0
- package/dist/install/hostLayerFingerprint.js.map +1 -0
- package/dist/install/install.mjs +553 -425
- package/dist/install/partitionEligibility.js +432 -0
- package/dist/install/partitionEligibility.js.map +1 -0
- package/dist/install/ruleLayerPartition.js +157 -0
- package/dist/install/ruleLayerPartition.js.map +1 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1863 -1234
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_src.js +41 -0
- package/dist/scripts/_lib/agent_src.js.map +1 -1
- package/dist/scripts/_lib/install_layout.js +83 -0
- package/dist/scripts/_lib/install_layout.js.map +1 -0
- package/dist/scripts/_lib/installed_lock.js +444 -0
- package/dist/scripts/_lib/installed_lock.js.map +1 -0
- package/dist/scripts/_lib/prune_empty_dirs.js +85 -0
- package/dist/scripts/_lib/prune_empty_dirs.js.map +1 -0
- package/dist/scripts/condense.js +63 -251
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/contracts/settings-classes.md +12 -6
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +45 -1
- package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
- package/docs/guidelines/agent-infra/false-green.md +47 -1
- package/docs/guidelines/agent-infra/memory-access.md +17 -0
- package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/package.json +1 -1
- package/src/agent-src/scripts/archival_sweep.ts +117 -0
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
- package/src/agent-src/scripts/dashboard_mode.ts +212 -0
- package/src/agent-src/scripts/gate_budget.ts +282 -0
- package/src/agent-src/scripts/gate_execute.ts +72 -31
- package/src/agent-src/scripts/roadmap_gates.ts +74 -3
- package/src/agent-src/scripts/update_roadmap_progress.ts +296 -53
- package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
- package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
- package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
- package/src/config/agent-settings.template.yml +27 -2
- package/src/config/ci-local-parity.yml +39 -0
- package/src/config/estate-count-budget.json +612 -3
- package/src/config/evaluator-budgets.json +3 -3
- package/src/config/gate-coverage.yml +220 -12
- package/src/config/gate-violation-baselines.json +73 -63
- package/src/config/gitignore-block.txt +15 -2
- package/src/config/hook-latency-budget.json +5 -0
- package/src/config/rule-activation-census.json +14 -6
- package/src/config/rule-stub-ceilings.json +34 -7
- package/src/install/claudePathsPlan.ts +196 -0
- package/src/install/globalRuleLayers.ts +197 -0
- package/src/install/hostLayerFingerprint.ts +145 -0
- package/src/install/partitionEligibility.ts +502 -0
- package/src/install/ruleLayerPartition.ts +212 -0
- package/src/scripts/_cli/cmd_adr_effective.ts +484 -0
- package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
- package/src/scripts/_dispatch.bash +17 -1
- package/src/scripts/_lib/ac_heading.ts +30 -0
- package/src/scripts/_lib/adr_frontmatter.test.ts +365 -0
- package/src/scripts/_lib/adr_frontmatter.ts +459 -0
- package/src/scripts/_lib/agent_src.ts +42 -0
- package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
- package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
- package/src/scripts/_lib/envelope_grounding.ts +49 -9
- package/src/scripts/_lib/installed_lock.ts +50 -5
- package/src/scripts/_lib/layer_overlap_notice.ts +11 -2
- package/src/scripts/_lib/md_section.ts +129 -0
- package/src/scripts/_lib/prune_empty_dirs.ts +80 -0
- package/src/scripts/_lib/scope_guard.sh +26 -3
- package/src/scripts/_lib/self_repair.ts +19 -0
- package/src/scripts/_lib/self_repair_class_b.ts +171 -0
- package/src/scripts/adr/evidence_census.ts +899 -0
- package/src/scripts/adr/regenerate_index.ts +12 -32
- package/src/scripts/adr_cite_check.ts +540 -39
- package/src/scripts/ai_council/cli_help.ts +55 -0
- package/src/scripts/audit_adr_coverage.ts +103 -17
- package/src/scripts/before_complete_hook.ts +153 -28
- package/src/scripts/bench_ab_v2_complexity.ts +27 -7
- package/src/scripts/bench_hook_latency.ts +204 -0
- package/src/scripts/build_archive_index.ts +34 -0
- package/src/scripts/check_adr_frontmatter.ts +574 -39
- package/src/scripts/check_hook_bundle_content.ts +219 -0
- package/src/scripts/check_new_adr_evidence.ts +529 -0
- package/src/scripts/check_references.ts +78 -0
- package/src/scripts/check_release_published.ts +32 -11
- package/src/scripts/check_rule_layer_partition.ts +531 -0
- package/src/scripts/check_single_delivery.ts +194 -17
- package/src/scripts/check_standing_rule_delivery.ts +8 -2
- package/src/scripts/ci_settle.ts +170 -0
- package/src/scripts/condense.ts +79 -259
- package/src/scripts/council_cli.ts +3 -3
- package/src/scripts/dispatch_r2_reviewer.ts +6 -14
- package/src/scripts/external_sources_denylist.json +4 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +77 -14
- package/src/scripts/hooks/block_no_verify.ts +61 -10
- package/src/scripts/hooks/block_unauthorized_git.ts +21 -1
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/dispatch_hook.ts +154 -187
- package/src/scripts/hooks/dispatch_issues.ts +38 -19
- package/src/scripts/hooks/fallback_yaml.ts +66 -0
- package/src/scripts/hooks/host_semantics.ts +21 -0
- package/src/scripts/hooks/injection_budget.ts +13 -3
- package/src/scripts/hooks/py_json_dumps.ts +103 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
- package/src/scripts/hooks/run_continuation_hook.ts +8 -5
- package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
- package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
- package/src/scripts/hooks/state_io.ts +870 -21
- package/src/scripts/hooks/stdin_failure_policy.ts +96 -0
- package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
- package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
- package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
- package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
- package/src/scripts/injection_scan_hook.ts +137 -5
- package/src/scripts/install.ts +16 -11
- package/src/scripts/language_mirror_hook.ts +561 -25
- package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
- package/src/scripts/lint_hook_manifest.ts +49 -0
- package/src/scripts/lint_plan_risk_register.ts +4 -3
- package/src/scripts/lint_provenance_vocabulary.ts +472 -4
- package/src/scripts/lint_skill_router_head.ts +4 -4
- package/src/scripts/mcp_server/tools.ts +2 -2
- package/src/scripts/new_roadmap.ts +136 -0
- package/src/scripts/pack_mcp_content.ts +20 -5
- package/src/scripts/release.ts +37 -38
- package/src/scripts/report_layer_overlap.ts +6 -0
- package/src/scripts/routing_doctor.ts +5 -1
- package/src/scripts/self_repair_hook.ts +37 -5
- package/src/scripts/session_register_hook.ts +11 -0
- package/src/scripts/skill_usage_collect.ts +11 -1
- package/src/scripts/skill_usage_report.ts +278 -8
- package/src/scripts/sync_pr_branch.ts +170 -20
- package/src/server/schemas/settings.ts +8 -0
- package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
- package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
- package/dist/cli-delegate/{chunk-PPQO4NGR.js → chunk-6RJA2F5A.js} +3 -3
- package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
- package/dist/cli-delegate/{chunk-FBKL6JWT.js → chunk-MMSGVZKV.js} +3 -3
|
@@ -55,8 +55,12 @@ Fires once per creation task, not once per edit.
|
|
|
55
55
|
- At most two propose → reject cycles; then stop.
|
|
56
56
|
- Commit only on approval.
|
|
57
57
|
- Bypass is legitimate — *"just write it"* drops the protocol immediately.
|
|
58
|
+
- An artifact discovered **after** an accepted contract halts by default;
|
|
59
|
+
`late_artifacts: auto-research` is the only declared value that continues,
|
|
60
|
+
capped at three per run (mechanics guideline § Late artifacts).
|
|
58
61
|
|
|
59
|
-
Body migrated to [`guideline:agent-infra/artifact-drafting-protocol-mechanics`](../docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — Phase A/B/C procedure detail + the roadmap-run batch-mode carve-out (Research-once-at-contract-time, batch scope, no `artifact_protocol: skip`)
|
|
62
|
+
Body migrated to [`guideline:agent-infra/artifact-drafting-protocol-mechanics`](../docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — Phase A/B/C procedure detail + the roadmap-run batch-mode carve-out (Research-once-at-contract-time, batch scope, no `artifact_protocol: skip`) + § Late artifacts (the `halt` default
|
|
63
|
+
and the five-step `auto-research` procedure).
|
|
60
64
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
61
65
|
|
|
62
66
|
Extends (cross-link, don't restate): `ask-when-uncertain`,
|
|
@@ -93,6 +93,8 @@ one shape the loop test above systematically misses, in both of its clauses.
|
|
|
93
93
|
available were wait, or stop and report, and 34 licensed neither more than 31
|
|
94
94
|
did. **The discriminator is the decision, not the digits.**
|
|
95
95
|
|
|
96
|
+
For CI, do not hand-write the loop: `ci_settle <pr>` (mechanics below).
|
|
97
|
+
|
|
96
98
|
So state it separately: pick **one** waiter for the condition and let it finish.
|
|
97
99
|
Where the harness re-invokes on completion, waiting costs nothing and polling
|
|
98
100
|
costs a turn per expiry — and every stacked waiter is a turn that arrives *after*
|
|
@@ -39,25 +39,21 @@ THE USER IS REACHED FOR THE RESERVED SET — AND ALWAYS FOR IT.
|
|
|
39
39
|
NEVER CITE A LOCK YOU HAVE NOT EVALUATED THIS TURN.
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
An agent that finds a
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
true when they were written, not a ceiling on what the package may ever become.
|
|
42
|
+
An agent that finds a beneficial change blocked by a recorded decision — an
|
|
43
|
+
honest-null verdict, a "don't relitigate" note, a budget-canon line, or an ADR —
|
|
44
|
+
does not quietly comply and drop it. It surfaces the conflict and re-evaluates
|
|
45
|
+
the lock **in the council by default**, reaching the user only for the reserved
|
|
46
|
+
set below. Locks encode what was true when they were written, not a ceiling on
|
|
47
|
+
what the package may ever become.
|
|
49
48
|
|
|
50
49
|
**The default venue is the council, and this is a correction, not a new
|
|
51
|
-
policy.** [`ai-council`](../skills/ai-council/SKILL.md)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
work resumed — in the two clearest cases the lock report is timestamped **before**
|
|
59
|
-
the override demand. The ordering was the defect; the permission was never
|
|
60
|
-
missing.
|
|
50
|
+
policy.** [`ai-council`](../skills/ai-council/SKILL.md)'s Iron Law already sends
|
|
51
|
+
a decision the agent cannot settle from the tree to the council first, and its
|
|
52
|
+
class table lists "reopening a recorded decision". The old "offers the user a
|
|
53
|
+
path" wording made every lock an owner interrupt; measured across 26 days of
|
|
54
|
+
transcripts, the agent reported a lock and waited while the owner voided the
|
|
55
|
+
decision retroactively — twice with the lock report timestamped **before** the
|
|
56
|
+
override demand. The ordering was the defect; the permission was never missing.
|
|
61
57
|
|
|
62
58
|
**Mechanism-match check comes FIRST**: a verdict settles the *mechanism it
|
|
63
59
|
tested*, not every future proposal that resembles it — if the blocked change
|
|
@@ -81,20 +77,54 @@ distinction.
|
|
|
81
77
|
4. **Route it** — council by default (below), user only for the reserved set.
|
|
82
78
|
5. **Record** the outcome with scope and `revisit-if`.
|
|
83
79
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
[`decision-review`](../skills/decision-review/SKILL.md) stays optional, which is
|
|
91
|
-
the correct status for depth.
|
|
80
|
+
The five are stated here, not only behind a route, because the route was
|
|
81
|
+
measurably unreachable: `decision-review` ships `install.default: false` in the
|
|
82
|
+
non-default `analysis-workbench` pack, so a pack-legal install received the
|
|
83
|
+
obligation and not the procedure. `routes_to` now names two always-on skills;
|
|
84
|
+
the backward-audit depth in
|
|
85
|
+
[`decision-review`](../skills/decision-review/SKILL.md) stays optional.
|
|
92
86
|
|
|
93
87
|
Full catalog (honest nulls, don't-relitigate notes, budget-canon lines, ADRs,
|
|
94
88
|
hard structural caps), the per-step detail, when-NOT-to-fire and the failure
|
|
95
89
|
modes remain in [`skill:decision-review` § Decision-revisit gate — mechanics](../skills/decision-review/SKILL.md).
|
|
96
90
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
97
91
|
|
|
92
|
+
## Reading a lock — the two descriptive axes
|
|
93
|
+
|
|
94
|
+
Step 2 reads, in order: **effective state** (status · amendments · successors) →
|
|
95
|
+
**provenance** → **evidence strength** → **discovery** → **current evidence**
|
|
96
|
+
(does the basis still resolve in a clone?) → **reversibility of the proposed
|
|
97
|
+
transition** → **reserved dimensions**. `adr_cite_check` prints six of them —
|
|
98
|
+
read 6 is the agent's, because reversibility belongs to the proposed transition
|
|
99
|
+
and no tool reading one record supplies it. What each field means, and what a
|
|
100
|
+
`[found]` basis ref does NOT claim, is in that script's module docstring. The
|
|
101
|
+
evidence-priced burden table stays in
|
|
102
|
+
[`adr-layout § The reopen record`](../docs/contracts/adr-layout.md).
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
A GRADE IS A MEASUREMENT, NOT A PERMISSION — IT GRANTS NOTHING.
|
|
106
|
+
CITING AN E0 LOCK AS A HARD BLOCKER WITHOUT SURFACING ITS GRADE IS A VIOLATION.
|
|
107
|
+
NO GRADE LETS AN AGENT SUPERSEDE A RECORD, SKIP A COUNCIL, OR TAKE ANY ACTION
|
|
108
|
+
IT COULD NOT TAKE YESTERDAY. THE COUNCIL-FIRST VENUE STAYS, AT EVERY GRADE.
|
|
109
|
+
AN ADR'S HISTORICAL DECISION-MAKER DOES NOT DETERMINE ITS REOPEN VENUE.
|
|
110
|
+
A LOW-EVIDENCE RECORD MAY STATE A DECISION; IT DOES NOT ESTABLISH THAT ITS
|
|
111
|
+
ALTERNATIVES REMAIN INVALID.
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Venue comes from the proposed transition, the trust boundaries it touches and
|
|
115
|
+
the reserved dimensions below — never from who decided originally, and never
|
|
116
|
+
from a grade. A weak grade changes how much a reopen must **do**, never who may
|
|
117
|
+
do it: `authority_basis: owner_intent` is surfaced with its accumulated cost and
|
|
118
|
+
never overruled, and council agreement never raises `evidence.strength` —
|
|
119
|
+
sources and measurements do.
|
|
120
|
+
|
|
121
|
+
**No E0/E1 agent path is enabled here, and no reading of this rule enables
|
|
122
|
+
one.** Whether an independently validated grade may ever reduce the
|
|
123
|
+
*authorization* burden is an owner-reserved open question — the
|
|
124
|
+
`authority-coupling-decision` blocker — left unanswered because the party
|
|
125
|
+
assigning a grade would be the party gaining authority from it, and would be
|
|
126
|
+
self-classifying the transition as reversible-internal on top.
|
|
127
|
+
|
|
98
128
|
## Who decides — the owner-reserved set
|
|
99
129
|
|
|
100
130
|
The discriminator, in one question: **does the proposed transition weaken an
|
|
@@ -121,24 +151,24 @@ forever. Availability is `agent-config council:status`, never a project file
|
|
|
121
151
|
([`council-availability`](council-availability.md)).
|
|
122
152
|
|
|
123
153
|
Field on the ADR: `reopen_policy: directional | owner | unclassified`, absent →
|
|
124
|
-
**`unclassified
|
|
125
|
-
|
|
154
|
+
**`unclassified`** — council investigation and reversible experiments are
|
|
155
|
+
permitted; only execution of a reserved transition is gated. Absent is
|
|
126
156
|
deliberately not `owner`: with 146 accepted ADRs that default would encode
|
|
127
|
-
today's blockage into the new schema. Full contract, the reopen record
|
|
157
|
+
today's blockage into the new schema. Full contract, the reopen record and the
|
|
128
158
|
precedent-creates-no-authority clause: [`adr-layout § Reopen authority`](../docs/contracts/adr-layout.md).
|
|
129
159
|
|
|
130
160
|
## See also
|
|
131
161
|
|
|
162
|
+
- [`recurring-criticism`](recurring-criticism.md) — the **other entrance**: this
|
|
163
|
+
rule fires when a lock blocks a change, that one when the same criticism arrives
|
|
164
|
+
again. It reuses the five steps and the owner-reserved table above.
|
|
132
165
|
- [`decision-review`](../skills/decision-review/SKILL.md) — the backward-audit
|
|
133
166
|
procedure + the migrated gate mechanics.
|
|
134
167
|
- [`ai-council`](../skills/ai-council/SKILL.md) — the re-evaluation mechanism;
|
|
135
168
|
owns the convergence-summary scope + `revisit-if` contract.
|
|
136
169
|
- [`decision-record`](../skills/decision-record/SKILL.md) — forward-flow decision
|
|
137
170
|
locking; its **§ 4 Lock the choice + consequences** requires the `Revisit-if:`
|
|
138
|
-
line that names the reopening condition up front.
|
|
139
|
-
"escalation litmus" heading; `grep` over `src/` + `docs/` returns two hits and
|
|
140
|
-
neither is in that file — the heading never existed, so the pointer led
|
|
141
|
-
nowhere. Corrected to the section that carries the obligation.)
|
|
171
|
+
line that names the reopening condition up front.
|
|
142
172
|
- [`token-budget-discipline`](token-budget-discipline.md) — the frugality-canon
|
|
143
173
|
value-over-budget escalation this rule's budget-lock case defers to.
|
|
144
174
|
- [`no-cheap-questions`](no-cheap-questions.md) — the question-quality floor a
|
|
@@ -161,3 +191,8 @@ plus the curated `dist/agent-src/scripts/` list and is deliberately out of this
|
|
|
161
191
|
change. And `docs/decisions/` is projected into no agent-visible tree at all —
|
|
162
192
|
the agent sees ADR *numbers* cited across rules and skills, almost never ADR
|
|
163
193
|
*text*. Until that changes, "evaluate before citing" means opening the file.
|
|
194
|
+
|
|
195
|
+
`docs/contracts/` is unprojected on the same terms (`dist/agent-src/` carries no
|
|
196
|
+
`docs/`), so the burden table this rule points at is maintainer-reachable only.
|
|
197
|
+
That is why the reserved-set table above stays here rather than becoming a
|
|
198
|
+
pointer: a consumer install receives these lines and not the contract.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2a"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
description: "Saw a red check or a real defect — fix it, whoever wrote it; if you cannot, ship a tracked follow-up roadmap in the same change. Ownership is never a disposition"
|
|
6
|
+
# Due when a defect is OBSERVED, not on a clock: a turn that sees nothing owes
|
|
7
|
+
# nothing; a turn that sees a red check owes a disposition.
|
|
8
|
+
obligation_frequency: "per-event"
|
|
9
|
+
routes_to:
|
|
10
|
+
- "guideline:agent-infra/active-remediation-mechanics"
|
|
11
|
+
triggers:
|
|
12
|
+
- keyword: "failing"
|
|
13
|
+
- keyword: "fails"
|
|
14
|
+
- keyword: "broken"
|
|
15
|
+
- keyword: "regression"
|
|
16
|
+
- phrase: "is red"
|
|
17
|
+
- phrase: "ci failed"
|
|
18
|
+
- phrase: "ci is"
|
|
19
|
+
- phrase: "not my"
|
|
20
|
+
- phrase: "nicht mein"
|
|
21
|
+
- phrase: "someone else's"
|
|
22
|
+
- phrase: "whose test"
|
|
23
|
+
workspaces: [engineering]
|
|
24
|
+
packs: [engineering-base]
|
|
25
|
+
enforced_by:
|
|
26
|
+
- "none"
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Fix What You See
|
|
30
|
+
|
|
31
|
+
## The Iron Law
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
YOU SAW IT, YOU FIX IT — WHOEVER WROTE IT.
|
|
35
|
+
"NOT MY CODE" / "NOT MY TEST" / "ANOTHER SESSION OWNS THAT FILE" IS NOT A
|
|
36
|
+
DISPOSITION. CANNOT FIX IT NOW → A TRACKED FOLLOW-UP ROADMAP SHIPS IN THE
|
|
37
|
+
SAME CHANGE. A CHAT MENTION IS NOT ONE EITHER, NOR A "KNOWN-OPEN" LINE IN A
|
|
38
|
+
PR BODY. A RED CHECK IS NEVER HANDED BACK WITH ITS CAUSE NAMED AND UNFIXED.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Saw it** = a red check already in front of you (test, lint, type, CI), or a
|
|
42
|
+
defect you pass while working — in your diff, a neighbouring file, a file
|
|
43
|
+
another agent or a parallel session wrote. The author is irrelevant.
|
|
44
|
+
|
|
45
|
+
**Two dispositions, and only two:** fix it with its verification, or land a
|
|
46
|
+
roadmap under `agents/roadmaps/` in the SAME change naming the defect, its
|
|
47
|
+
evidence, and what closes it.
|
|
48
|
+
|
|
49
|
+
**Read the red before fixing it, with the narrowest tool.** A CI job:
|
|
50
|
+
`gh run view --job <id> --log-failed | grep -E '×|FAIL|Error'` — never the whole
|
|
51
|
+
log into context, and never `--watch`'s exit code, which is 0 even on a failure.
|
|
52
|
+
A local red: the test runner with a filter on the one failing name, `tsc
|
|
53
|
+
--noEmit` for a type error, the linter scoped to the changed files. **Reproduce
|
|
54
|
+
it before you believe your diagnosis** — an environment-dependent red reproduces
|
|
55
|
+
under the condition, not on your machine's defaults.
|
|
56
|
+
|
|
57
|
+
Match the probe to the surface, because a passing unit test is not evidence for
|
|
58
|
+
a broken surface: an HTTP red is proven with `curl` against the running
|
|
59
|
+
endpoint, a UI red with a Playwright spec, a runtime red with the debugger
|
|
60
|
+
(`xdebug`, breakpoints) rather than by reading the diff again.
|
|
61
|
+
|
|
62
|
+
**Prove the fix with the same tool that showed the red**, in the same change.
|
|
63
|
+
For a guard or a concurrency fix, prove SENSITIVITY too: neutralise the mechanism,
|
|
64
|
+
watch the test fail, restore it. A test never seen red has unknown sensitivity.
|
|
65
|
+
|
|
66
|
+
## Bounds
|
|
67
|
+
|
|
68
|
+
Removes *ownership* as an excuse, not the diff limit:
|
|
69
|
+
[`minimal-safe-diff`](minimal-safe-diff.md) still caps the change — too large
|
|
70
|
+
IS the roadmap case. A fix crossing
|
|
71
|
+
[`non-destructive-by-default`](non-destructive-by-default.md) still stops and
|
|
72
|
+
asks; the ask becomes the work, not the exit.
|
|
73
|
+
|
|
74
|
+
**Does NOT fire:** user fenced the scope this turn · no falsifiable break (a
|
|
75
|
+
preference, not a red) · already decided by the user.
|
|
76
|
+
|
|
77
|
+
## Why separate from `active-remediation`
|
|
78
|
+
|
|
79
|
+
That rule forbids ignoring a spotted issue and its ladder permits **note + ask**.
|
|
80
|
+
Two properties made it insufficient, both measured 2026-08-20: it is `type: auto`
|
|
81
|
+
on `refactor`/`legacy`/`cleanup` triggers — **none of which a failing CI job
|
|
82
|
+
matches**, so it does not load when the obligation matters most — and its
|
|
83
|
+
note-and-ask tier is what let a session name a red check's cause, name the
|
|
84
|
+
file's author, and hand it back still red.
|
|
85
|
+
|
|
86
|
+
Mechanics (fix-now size criteria, follow-up shape) stay there; this rule only
|
|
87
|
+
deletes the two escapes.
|
|
88
|
+
|
|
89
|
+
## Honest activation gap — this rule is `auto`, and it wanted to be `always`
|
|
90
|
+
|
|
91
|
+
It shipped `auto` for a budget reason, not a design one, and the gap that leaves
|
|
92
|
+
is exactly the one it was written to close: **a red check the agent sees in tool
|
|
93
|
+
output triggers nothing.** Keyword triggers match the PROMPT. So the rule loads
|
|
94
|
+
when a human says "CI is red" or "not my test", and does NOT load when a test
|
|
95
|
+
run comes back red and nobody has said a word.
|
|
96
|
+
|
|
97
|
+
`check_always_budget` is the reason: the extended always-budget sat at
|
|
98
|
+
60,252 / 60,254 chars — **two characters of headroom** — and the cap is a
|
|
99
|
+
ratchet that may only move down. The other nine always-rules are the kernel,
|
|
100
|
+
which `block_kernel_rule_writes` denies agent writes to, so no room can be made
|
|
101
|
+
from this side. A 2,332-char rule puts the total at 103.9 %.
|
|
102
|
+
|
|
103
|
+
Closing the gap needs one of: the ext-cap ratchet opened deliberately (a
|
|
104
|
+
maintainer decision, recorded), a kernel rule shortened to make room, or a
|
|
105
|
+
`post_tool_use` carrier that notices a non-zero verification exit — the only
|
|
106
|
+
option that would fire on tool output rather than on wording. Until then, `auto`
|
|
107
|
+
plus this paragraph is the honest state: the obligation is real, its delivery is
|
|
108
|
+
partial, and the partiality is named rather than implied away.
|
|
@@ -3,11 +3,6 @@ type: "auto"
|
|
|
3
3
|
tier: "mechanical-already"
|
|
4
4
|
description: "Linking transient files (agents/roadmaps/, agents/runtime/council/) from stable artifacts — both expire; promote findings"
|
|
5
5
|
alwaysApply: false
|
|
6
|
-
triggers:
|
|
7
|
-
- path_prefix: "agents/roadmaps/"
|
|
8
|
-
- path_prefix: "agents/runtime/council/questions/"
|
|
9
|
-
- path_prefix: "agents/runtime/council/responses/"
|
|
10
|
-
- path_prefix: "agents/runtime/council/sessions/"
|
|
11
6
|
routes_to:
|
|
12
7
|
- "skill:ai-council"
|
|
13
8
|
- "skill:agent-docs-writing"
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2b"
|
|
4
|
+
description: "The same criticism arriving again indicts the system, not only the item — reopen the disposition that dismissed it, resolve on evidence, never on the repetition count"
|
|
5
|
+
alwaysApply: false
|
|
6
|
+
triggers:
|
|
7
|
+
- phrase: "schon mehrfach"
|
|
8
|
+
- phrase: "schon wieder"
|
|
9
|
+
- phrase: "zum dritten mal"
|
|
10
|
+
- phrase: "wie oft noch"
|
|
11
|
+
- phrase: "wie oft soll ich"
|
|
12
|
+
- phrase: "immer noch nicht"
|
|
13
|
+
- phrase: "i already told you"
|
|
14
|
+
- phrase: "told you this"
|
|
15
|
+
- phrase: "how many times"
|
|
16
|
+
- phrase: "as i mentioned before"
|
|
17
|
+
routes_to:
|
|
18
|
+
- "guideline:agent-infra/recurring-criticism-mechanics"
|
|
19
|
+
- "skill:skill-improvement-pipeline"
|
|
20
|
+
workspaces: [agent-config-maintainer, engineering]
|
|
21
|
+
packs: [meta]
|
|
22
|
+
collision_ok:
|
|
23
|
+
"schon wieder": "active-remediation makes a user 'leave it' terminal against the AGENT re-raising a closed item; this rule fires only when the USER brings it back — a decision-maker reopening their own decision is not the nagging that rule prevents"
|
|
24
|
+
obligation_frequency: "per-task"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Recurring Criticism
|
|
28
|
+
|
|
29
|
+
[`decision-revisit-gate`](decision-revisit-gate.md) has one entrance: the agent
|
|
30
|
+
wants to act and a lock is in the way. This is the other — **the same criticism
|
|
31
|
+
arrives again**, from the user or from a re-arrived artifact.
|
|
32
|
+
|
|
33
|
+
## The Iron Law
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
THE SAME CRITICISM ARRIVING AGAIN IS EVIDENCE ABOUT THE SYSTEM,
|
|
37
|
+
NOT ONLY ABOUT THE ITEM.
|
|
38
|
+
REOPEN THE DISPOSITION THAT DISMISSED IT. NAME WHICH ASSUMPTION BROKE.
|
|
39
|
+
NEVER RESOLVE IT ON THE REPETITION COUNT — RESOLVE IT ON EVIDENCE.
|
|
40
|
+
CAPITULATING BECAUSE IT WAS SAID TWICE IS THE SAME FAILURE
|
|
41
|
+
AS DISMISSING IT TWICE.
|
|
42
|
+
A LEARNING THAT DOES NOT CONSTRAIN THE NEXT RUN IS NOT A LEARNING.
|
|
43
|
+
NEVER BUY A HARDENING BY WEAKENING A SAFETY FLOOR.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**The repetition reverses the burden of proof.** The standing rule is: same
|
|
47
|
+
mechanism, no new evidence → the lock applies. Recurrence *is* the new evidence —
|
|
48
|
+
not that the item is right, that the disposition did not hold. Whoever keeps the
|
|
49
|
+
lock now carries the argument. **Mechanism-match still runs first**: a complaint
|
|
50
|
+
resembling the old one but testing a different mechanism is a new finding.
|
|
51
|
+
|
|
52
|
+
**Resolve on evidence, never on the count.** Challenging a model's answer —
|
|
53
|
+
including a correct one — reliably makes it capitulate and revise toward the
|
|
54
|
+
perceived expectation rather than toward truth
|
|
55
|
+
<!-- harvest:reflection-sycophancy-flipflop -->, so a rule reading "said twice" as
|
|
56
|
+
proof of error would be that failure mode with a procedure attached. The
|
|
57
|
+
repetition opens the question; it never answers it.
|
|
58
|
+
|
|
59
|
+
## Exactly three outcomes
|
|
60
|
+
|
|
61
|
+
The repetition proves the **system** failed <!-- harvest:recurrence-indicts-the-system -->;
|
|
62
|
+
it does not prove the **decision** was wrong. Own analysis, from that split:
|
|
63
|
+
|
|
64
|
+
| Outcome | What actually broke | Hardening means |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| The disposition was **wrong** | the decision | reverse it, record what would have caught it |
|
|
67
|
+
| **Right, never recorded** | the record | make it durable + citable, with `revisit-if` |
|
|
68
|
+
| **Right, recorded, unreachable** | reachability | move it onto a surface the next run reads |
|
|
69
|
+
|
|
70
|
+
In all three the system failed — only in the first was the decision wrong. A
|
|
71
|
+
resolution naming none of them is an unresolved recurrence.
|
|
72
|
+
|
|
73
|
+
**Look up the earlier disposition before re-deriving anything, and name the store
|
|
74
|
+
you checked** — addresses, the mechanism-is-the-defect classification, the
|
|
75
|
+
hardening floor and the failure modes are in
|
|
76
|
+
[`recurring-criticism-mechanics`](../docs/guidelines/agent-infra/recurring-criticism-mechanics.md).
|
|
77
|
+
One line does not migrate, because acting on it wrong is silent: rejections live in
|
|
78
|
+
analysis prose by design, so "I found nothing" means *prose was grepped*, never
|
|
79
|
+
*nothing was decided*.
|
|
80
|
+
|
|
81
|
+
## When NOT to fire
|
|
82
|
+
|
|
83
|
+
- **A repeated task instruction**, not a criticism — that is an instruction, do it.
|
|
84
|
+
- **Mechanism-match fails** — a resemblance is not a recurrence.
|
|
85
|
+
- **The agent is the one repeating** — that is [`no-cheap-questions`](no-cheap-questions.md).
|
|
86
|
+
- **Already resolved this task.** Once decided, it is decided.
|
|
87
|
+
|
|
88
|
+
## Honest enforcement — `enforced_by: none`
|
|
89
|
+
|
|
90
|
+
One narrow deterministic signal exists. `src/scripts/_lib/self_repair.ts` keeps one
|
|
91
|
+
record per defect fingerprint with an `occurrences` counter and reopens a released
|
|
92
|
+
record when the user re-reports it — literally this rule's trigger state — and the
|
|
93
|
+
injected queue line now carries that number, so above 1 an agent sees it. Three
|
|
94
|
+
limits: `agents/runtime/` is gitignored, so the store is one machine's and empty on
|
|
95
|
+
a fresh checkout; it covers only defects the complaint detector matched, where a
|
|
96
|
+
phrasing outside the added patterns is a paraphrase away from silence; and it is
|
|
97
|
+
hook-carried, so on a host without the slot nothing fires.
|
|
98
|
+
|
|
99
|
+
The rest is model-carried, named rather than implied: **nothing** observes whether
|
|
100
|
+
the earlier disposition was opened, for rejections there is nothing structured to
|
|
101
|
+
open, and no gate can tell a resolution that named one of the three outcomes from
|
|
102
|
+
one that asserted it. Claiming the counter as coverage for any of that would
|
|
103
|
+
inflate it, so it is not claimed — skipping this rule is caught by nothing.
|
|
104
|
+
|
|
105
|
+
## See also
|
|
106
|
+
|
|
107
|
+
- [`decision-revisit-gate`](decision-revisit-gate.md) — the other entrance; owns the five steps and the owner-reserved routing this rule reuses instead of restating. Separate file only because that one sits four lines under the 200-line cap.
|
|
108
|
+
- [`self-repair-loop`](self-repair-loop.md) — the single-occurrence intake; this rule is what its `occurrences` counter is for.
|
|
109
|
+
- [`active-remediation`](active-remediation.md) — the terminal "leave it" this rule does not override (see `collision_ok`).
|
|
110
|
+
- [`/analyze:inbox`](../commands/analyze/inbox.md) § Phase 4c — the artifact-side detection that routes here.
|
|
@@ -29,7 +29,7 @@ ANY ROADMAP TOUCH → REGENERATE THE DASHBOARD, SAME RESPONSE.
|
|
|
29
29
|
NO EXCEPTIONS. NO "I'LL DO IT AT THE END". NO BATCHING ACROSS TURNS.
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Roadmap touch = create / rename / delete / move file, add/rename/remove a phase, OR flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`). Regen command: `./agent-config roadmap:progress
|
|
32
|
+
Roadmap touch = create / rename / delete / move file, add/rename/remove a phase, OR flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`). Regen command: `./agent-config roadmap:progress` — it passes `--archive`, so a roadmap at `count_open == 0` with no deferred item and no open blocker is `git mv`'d to `archive/` by the same run, not reported for someone to do later. `--check` never archives, and the PostToolUse hook never archives (contract + the council's recorded dissent: the `--archive` block in `update_roadmap_progress.ts`).
|
|
33
33
|
|
|
34
34
|
## Iron Law 2 — real-time checkbox cadence (autonomous execution)
|
|
35
35
|
|
|
@@ -97,6 +97,25 @@ in the estate?**
|
|
|
97
97
|
[`no-cheap-questions`](no-cheap-questions.md) forbids. The gate protects the
|
|
98
98
|
item, not the maintainer's attention.
|
|
99
99
|
|
|
100
|
+
### `deferred_policy` — a declared contract removes the round, never the route
|
|
101
|
+
|
|
102
|
+
An accepted execution contract may declare `deferred_policy`
|
|
103
|
+
([`roadmap-execution-contract § 2b`](../contexts/execution/roadmap-execution-contract.md)).
|
|
104
|
+
It changes **when the round happens**, never **who decides**:
|
|
105
|
+
|
|
106
|
+
| Declared | Effect on the gate |
|
|
107
|
+
|---|---|
|
|
108
|
+
| absent / `wait` | Unchanged — the synchronous menu runs. |
|
|
109
|
+
| `spawn-follow-up-draft` | The council-routed carry disposition runs **automatically** at closure, with no options round. Legal only because the table above already routes it to the council and Accept pre-authorized the run. |
|
|
110
|
+
| `cancel-with-memo` | The run writes the memo and the recommendation; the `[-]` conversion stays **user**. A declared field never moves a row from user to council. |
|
|
111
|
+
|
|
112
|
+
Recorded-or-it-did-not-happen applies unchanged to an automatic spawn, and
|
|
113
|
+
fail-closed binds hardest here: a spawn naming a follow-up that does not exist
|
|
114
|
+
yet reaches the user, because a contract cannot pre-authorize a promise.
|
|
115
|
+
Reversible — `wait` is the default, so removing the field restores always-wait
|
|
116
|
+
(`decision 2026-08-20`, AI council 2/2; record
|
|
117
|
+
`agents/evidence/council/drain-blocker-dispositions-a.md`).
|
|
118
|
+
|
|
100
119
|
## Later disposition — blocked-for-later roadmaps are parked, never left active
|
|
101
120
|
|
|
102
121
|
```
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
type: "auto"
|
|
3
3
|
tier: "2a"
|
|
4
4
|
description: "Creating/editing rules, or auditing rule types — decides when a rule should be always vs auto"
|
|
5
|
-
triggers:
|
|
6
|
-
- path_prefix: "src/rules/"
|
|
7
5
|
routes_to:
|
|
8
6
|
- "guideline:agent-infra/rule-type-governance"
|
|
9
7
|
workspaces: [agent-config-maintainer]
|
|
@@ -52,6 +52,16 @@ work, not a notification:
|
|
|
52
52
|
the user's call, per
|
|
53
53
|
[`non-destructive-by-default`](non-destructive-by-default.md).
|
|
54
54
|
|
|
55
|
+
**When the line says the record has recurred, step 2 changes target.** The store
|
|
56
|
+
keeps one record per fingerprint and increments it, so a repeat does not raise
|
|
57
|
+
`count` — the line now carries the newest record's `occurrences` instead, and
|
|
58
|
+
above 1 it is the only deterministic "this came back" signal in the session. A
|
|
59
|
+
recurrence means the *earlier* fix or dismissal did not hold, so the surface that
|
|
60
|
+
failed is the one that let it be closed prematurely, not only the one that let the
|
|
61
|
+
behaviour happen. Resolve it through
|
|
62
|
+
[`recurring-criticism`](recurring-criticism.md) — which also states the part that
|
|
63
|
+
matters most here: resolve on evidence, never on the repetition count.
|
|
64
|
+
|
|
55
65
|
## Correct openly, never silently
|
|
56
66
|
|
|
57
67
|
Reported by the user → redo the task properly in the same turn, visibly, saying
|
|
@@ -84,6 +94,13 @@ The user is criticising the **code**, not the agent's conduct; the fingerprint
|
|
|
84
94
|
is already an open record (the hook increments it); or a one-off caused by
|
|
85
95
|
information the agent could not have had — note it, do not queue it.
|
|
86
96
|
|
|
97
|
+
**The already-an-open-record case suppresses a duplicate QUEUE ENTRY, never the
|
|
98
|
+
response.** Read on its own the clause above inverts into "it came back, so do
|
|
99
|
+
nothing new", which is the opposite of what a repeat means. The counter exists
|
|
100
|
+
precisely so a recurrence is visible without a second entry: no new record, and a
|
|
101
|
+
**stronger** obligation — [`recurring-criticism`](recurring-criticism.md) fires,
|
|
102
|
+
because the earlier disposition demonstrably did not hold.
|
|
103
|
+
|
|
87
104
|
## Enforcement
|
|
88
105
|
|
|
89
106
|
The hook is `fail_closed: false` and always exits 0: it records, it never
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
type: "auto"
|
|
3
3
|
tier: "mechanical-already"
|
|
4
4
|
description: "Creating/editing/reviewing skills — minimum quality standard; every skill executable, validated, self-contained"
|
|
5
|
-
triggers:
|
|
6
|
-
- path_prefix: "src/skills/"
|
|
7
5
|
routes_to:
|
|
8
6
|
- "guideline:agent-infra/skill-quality-checklist"
|
|
9
7
|
workspaces: [agent-config-maintainer]
|
|
@@ -3,13 +3,6 @@ type: "auto"
|
|
|
3
3
|
tier: "mechanical-already"
|
|
4
4
|
description: "Naming an external repo this package copied/harvested/compared against — keep the tracked tree source-anonymous"
|
|
5
5
|
alwaysApply: false
|
|
6
|
-
triggers:
|
|
7
|
-
- path_prefix: "src/skills/"
|
|
8
|
-
- path_prefix: "src/rules/"
|
|
9
|
-
- path_prefix: "src/domains/"
|
|
10
|
-
- path_prefix: "docs/"
|
|
11
|
-
- path_prefix: "agents/evidence/"
|
|
12
|
-
- path_prefix: "agents/roadmaps/"
|
|
13
6
|
validator_ignore:
|
|
14
7
|
- type: "substring"
|
|
15
8
|
pattern: "external_sources_denylist"
|
|
@@ -96,6 +89,43 @@ runs in the package CI pipeline and fails the build on any denied source token
|
|
|
96
89
|
in a non-carve-out tracked file. The linter is a deterministic net, not a
|
|
97
90
|
substitute for not writing the attribution in the first place.
|
|
98
91
|
|
|
92
|
+
## Why this rule is not path-scoped
|
|
93
|
+
|
|
94
|
+
Under ADR-236 (`docs/decisions/ADR-236-one-artefact-one-layer.md`) this rule is
|
|
95
|
+
delivered by the PROJECT layer only — it exists to maintain this package, so the
|
|
96
|
+
global layer no longer carries an unscoped twin of it. A `paths:`-scoped rule is
|
|
97
|
+
**not re-injected after `/compact`** (ADR-227:79-80), so scoping it would mean the
|
|
98
|
+
obligation silently disappears mid-session with nothing left to reload it.
|
|
99
|
+
|
|
100
|
+
It is therefore delivered unconditionally, and the path triggers were removed
|
|
101
|
+
rather than worked around. **This section is the shared record for all four such
|
|
102
|
+
rules** — `no-roadmap-references`, `rule-type-governance` and `skill-quality` carry
|
|
103
|
+
the same change and no note of their own. Two reasons: four copies of the rationale
|
|
104
|
+
cost more standing context than the decision they explain, and the other three are
|
|
105
|
+
migrated POINTER stubs held at their pointer's size by
|
|
106
|
+
`check_rule_stub_ceiling` — prose added there is prose in the wrong place by that
|
|
107
|
+
gate's own contract, which is what caught the first attempt to duplicate it.
|
|
108
|
+
|
|
109
|
+
AI council 2026-08-20, 2/2 convergent on this option over three alternatives, with
|
|
110
|
+
two independent decisive arguments. First: the obligation governs an **authoring
|
|
111
|
+
decision**, which happens before any file exists for a path trigger to match — so
|
|
112
|
+
path-scoping fails at greenfield creation whether or not a compaction ever occurs.
|
|
113
|
+
Second: the measured cost is small against what the partition returns. Keeping an
|
|
114
|
+
unscoped global copy was rejected because it re-creates the duplication the
|
|
115
|
+
partition exists to remove; splitting the four by "has a CI gate" was rejected by
|
|
116
|
+
both seats as the wrong axis — a validator observes an outcome, it does not hold an
|
|
117
|
+
obligation during the session, and `rule-type-governance` has no gate at all.
|
|
118
|
+
|
|
119
|
+
**Cost, measured and corrected.** An earlier revision of this note claimed 1,754
|
|
120
|
+
tokens (1.8 % of the partition's 96,584-token saving). That figure was a
|
|
121
|
+
`chars / 4` proxy over the projected files and **understated the real cost by about
|
|
122
|
+
half**: `check_rule_activation_census`, which counts with the exact BPE tokenizer,
|
|
123
|
+
measures the unconditional corpus growing **108,130 → 111,642, i.e. +3,512 tokens
|
|
124
|
+
(3.6 %)** — and that number includes this rationale, which is why it lives in one
|
|
125
|
+
place instead of four. The verdict does not depend on the figure: one seat argued
|
|
126
|
+
the token axis was the wrong one entirely, the other that cost is a legitimate axis
|
|
127
|
+
which simply loses this particular comparison. Both readings survive 3.6 %.
|
|
128
|
+
|
|
99
129
|
## See also
|
|
100
130
|
|
|
101
131
|
- [`source-of-truth`](source-of-truth.md) — edit `src/`, never the projections.
|