@event4u/agent-config 14.6.0 → 14.7.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 +260 -7
- 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/roadmap/process-full.md +116 -30
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +31 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +135 -104
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/decision-revisit-gate.md +3 -0
- 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 +1 -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 +19 -3
- 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 +251 -7
- 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/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/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 +45 -2
- 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 +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
- package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-4VR4ORQ6.js} +10 -7
- package/dist/cli-delegate/chunk-6EOCNQAM.js +402 -0
- package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-74E3TKWV.js} +381 -280
- package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-7F3VYSM2.js} +4 -4
- package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
- package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
- package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-GJ5BVHXM.js} +72 -165
- package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-JZ4NR2TW.js} +338 -0
- package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
- 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_conformance.js +459 -709
- package/dist/cli-delegate/cmd_doctor.js +6 -6
- package/dist/cli-delegate/cmd_explain.js +1 -1
- package/dist/cli-delegate/cmd_export.js +7 -6
- package/dist/cli-delegate/cmd_handoff.js +6 -6
- package/dist/cli-delegate/cmd_packs_active.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +7 -6
- package/dist/cli-delegate/cmd_session_recycle.js +840 -30
- package/dist/cli-delegate/cmd_settings_migrate.js +7 -6
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +7 -6
- package/dist/cli-delegate/cmd_uninstall.js +9 -7
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +7 -6
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +68 -25
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +10 -8
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +8 -6
- package/dist/hooks/dispatch.js +2901 -2053
- package/dist/install/claudePathsPlan.js +187 -0
- package/dist/install/claudePathsPlan.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 +276 -0
- package/dist/install/partitionEligibility.js.map +1 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1744 -1191
- 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/condense.js +13 -164
- 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/context-hygiene-mechanics.md +26 -0
- 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 +19 -3
- 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 +251 -7
- 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 +18 -0
- package/src/config/estate-count-budget.json +339 -3
- package/src/config/gate-violation-baselines.json +41 -41
- package/src/config/rule-activation-census.json +14 -6
- package/src/config/rule-stub-ceilings.json +19 -6
- package/src/install/claudePathsPlan.ts +196 -0
- package/src/install/hostLayerFingerprint.ts +145 -0
- package/src/install/partitionEligibility.ts +325 -0
- package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
- package/src/scripts/_dispatch.bash +6 -1
- package/src/scripts/_lib/ac_heading.ts +30 -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 +38 -8
- package/src/scripts/_lib/installed_lock.ts +50 -5
- package/src/scripts/_lib/md_section.ts +129 -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/ai_council/cli_help.ts +55 -0
- package/src/scripts/before_complete_hook.ts +153 -28
- package/src/scripts/bench_ab_v2_complexity.ts +27 -7
- package/src/scripts/check_references.ts +60 -0
- package/src/scripts/check_release_published.ts +32 -11
- package/src/scripts/check_single_delivery.ts +59 -15
- package/src/scripts/ci_settle.ts +170 -0
- package/src/scripts/condense.ts +20 -170
- package/src/scripts/council_cli.ts +3 -3
- package/src/scripts/dispatch_r2_reviewer.ts +6 -14
- 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 +1 -1
- package/src/scripts/hooks/concern_registry.ts +4 -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 +782 -20
- 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/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_plan_risk_register.ts +4 -3
- 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/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 +7 -0
- 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-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
|
@@ -180,82 +180,85 @@ change in § 3a.
|
|
|
180
180
|
`commit-policy` § NEVER ask about committing holds regardless of
|
|
181
181
|
autonomy).
|
|
182
182
|
|
|
183
|
-
### 3c.
|
|
183
|
+
### 3c. Capability screen — can the agent do this at all?
|
|
184
184
|
|
|
185
185
|
```
|
|
186
|
-
A RUN
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
A RUN ALWAYS STARTS. THERE IS NO PREFLIGHT REFUSAL.
|
|
187
|
+
PER OPEN STEP, ASK ONE QUESTION: CAN THE AGENT EXECUTE THIS AT ALL?
|
|
188
|
+
YES → IT IS WORK. NO → IT IS THE ONLY KIND OF BLOCKER LEFT.
|
|
189
|
+
WHO CONVENTIONALLY DOES A THING IS NOT A PROPERTY OF THE THING.
|
|
189
190
|
```
|
|
190
191
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
**
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
for the
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
192
|
+
**Rewritten by [ADR-237](../../../docs/decisions/ADR-237-end-to-end-execution-authority.md),
|
|
193
|
+
which supersedes ADR-235.** This section used to be a *preflight refusal*: a run
|
|
194
|
+
with no "runnable" open step created no branch and wrote nothing. That is gone.
|
|
195
|
+
The invocation is a delegation, so the question is no longer *is this step
|
|
196
|
+
runnable under current governance* but *is this step possible for the agent at
|
|
197
|
+
all.*
|
|
198
|
+
|
|
199
|
+
Run once at the end of the pre-scan, and again immediately before any `blocked`
|
|
200
|
+
report.
|
|
201
|
+
|
|
202
|
+
**The screen, in order:**
|
|
203
|
+
|
|
204
|
+
1. **Can the agent execute it?** Through the filesystem, git, `gh`, an API, a
|
|
205
|
+
CLI, a tool, a model, a council — anything machine-executable. If yes, the
|
|
206
|
+
step is **work**. Stop here; no blocker citation changes that.
|
|
207
|
+
2. **Is the authority already implied by the invocation?** For a `process-full`
|
|
208
|
+
run: branches, chunked commits, pushing that branch, opening and updating the
|
|
209
|
+
PR, reversible repository/branch settings, CI runs and re-runs, merge-base
|
|
210
|
+
updates, conflict resolution, project-local dependencies, and paid calls
|
|
211
|
+
inside the cumulative USD 25 ceiling. If yes → **run it**.
|
|
212
|
+
3. **Is it on the EXCLUDED list?** Merging to a production trunk, deploying,
|
|
213
|
+
production data / secrets / IAM / DNS, bulk deletion outside the roadmap's
|
|
214
|
+
scope, an irreversible external action beyond the PR itself. Those keep their
|
|
215
|
+
own this-turn confirmation ([`non-destructive-by-default`](../../rules/non-destructive-by-default.md))
|
|
216
|
+
and are a **halt**, not a blocker.
|
|
217
|
+
4. **Otherwise it is externally impossible**, and only then is it a blocker: a
|
|
218
|
+
credential that does not exist and cannot be created · a purchase beyond the
|
|
219
|
+
budget · physical hardware access · another person or organisation must act ·
|
|
220
|
+
a wait that is factually mandatory and unverifiable.
|
|
221
|
+
|
|
222
|
+
**A `## Blockers` entry is evidence, never a verdict.** A `Class: 3` label on an
|
|
223
|
+
action the agent can perform is a **defect in the roadmap**, and the run repairs
|
|
224
|
+
the label rather than obeying it — recording what it did and why. Class `0`/`1`
|
|
225
|
+
entries carry a `Run:` the agent executes, exactly as before. Class `2`
|
|
226
|
+
(consent-once) is pre-cleared for the duration of a `process-full` run when the
|
|
227
|
+
consent it wants is one the invocation already gave; a `2` asking for something
|
|
228
|
+
the invocation did NOT give (an EXCLUDED action, a spend crossing) still reaches
|
|
229
|
+
the owner.
|
|
230
|
+
|
|
231
|
+
**No citation → work**, and the default direction is unchanged: the failure this
|
|
232
|
+
screen must not have is declining work an agent could have done.
|
|
233
|
+
|
|
234
|
+
**A step this screen judges externally impossible carries a `blocked-by:` marker
|
|
235
|
+
on its own line.** The obligation is unchanged and its reason is unchanged: two
|
|
236
|
+
mechanisms read blockedness from two different places and only one reads this
|
|
237
|
+
section — `run-continuation`, the stop-slot concern that re-engages an autonomous
|
|
238
|
+
run, decides open-vs-blocked from the inline `<!-- blocked-by: <id> -->` marker
|
|
239
|
+
and never parses `## Blockers`. Without the marker a step that IS impossible
|
|
240
|
+
still counts as open work to the concern, which re-engages the agent into it
|
|
241
|
+
every stop fire until the stall rung fires — the mechanism whose job is to detect
|
|
242
|
+
a stall manufacturing one. **The residual is real and is not papered over:**
|
|
243
|
+
nothing enforces the pairing, so a `## Blockers` entry authored without its
|
|
244
|
+
marker is caught by review or not at all.
|
|
245
|
+
|
|
246
|
+
**The gaming vector inverted, and both directions are now named.** Under ADR-235
|
|
247
|
+
the vector was an agent writing itself a Class-3 blocker to stop early; the
|
|
248
|
+
defence was that a qualifying blocker must **pre-date the run**, checkable from
|
|
249
|
+
git. That defence is kept for the narrow blocker set that remains. ADR-237 adds
|
|
250
|
+
the opposite vector — an agent that keeps going past a spend ceiling or into an
|
|
251
|
+
EXCLUDED action under cover of "the roadmap needed it" — and its defences are
|
|
252
|
+
step 3 above being an enumerated list rather than a characterisation, and the
|
|
253
|
+
ceiling being cumulative per run rather than per action.
|
|
254
|
+
|
|
255
|
+
**One imprecision, inherited and now given a test.** The class taxonomy has no
|
|
256
|
+
row for *"waiting on time"* or *"waiting on another roadmap"*; both are authored
|
|
257
|
+
as `3` today because an absent `Class:` already means `3`. Under step 4 a wait is
|
|
258
|
+
a blocker only when it is factually mandatory and unverifiable — a soak window a
|
|
259
|
+
run can simply outlast, or a cross-roadmap dependency the run can satisfy itself,
|
|
260
|
+
is work. The taxonomy still lacks the row; the mislabel now has a stated test
|
|
261
|
+
instead of a default.
|
|
259
262
|
|
|
260
263
|
## 4. Resolve cadences — read once, cache for the run
|
|
261
264
|
|
|
@@ -507,51 +510,68 @@ artifact drafting, council enablement), not safety.
|
|
|
507
510
|
|
|
508
511
|
On halt: stop, surface state, do **not** auto-fix outside the failing step.
|
|
509
512
|
|
|
510
|
-
### Terminal outcomes — `complete`,
|
|
511
|
-
|
|
512
|
-
The halt list above answers *"what interrupts runnable work"*.
|
|
513
|
-
*"what does the run report when
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
out a soak window,
|
|
523
|
-
|
|
513
|
+
### Terminal outcomes — `complete`, or a genuine external impossibility
|
|
514
|
+
|
|
515
|
+
The halt list above answers *"what interrupts runnable work"*. This answers
|
|
516
|
+
*"what does the run report when the roadmap is not finished and the remaining
|
|
517
|
+
work is not the agent's to do"* — and under
|
|
518
|
+
[ADR-237](../../../docs/decisions/ADR-237-end-to-end-execution-authority.md) that
|
|
519
|
+
second set is much smaller than it looks.
|
|
520
|
+
|
|
521
|
+
**The measurement that motivated the old answer, and the reading that replaced
|
|
522
|
+
it.** Measured 2026-08-19 across the twelve most nearly complete roadmaps:
|
|
523
|
+
**zero** could reach `count_open == 0` in one PR, because every remaining step
|
|
524
|
+
needed "a human action" — flip branch protection, authorise paid spend, install a
|
|
525
|
+
binary, wait out a soak window, edit a file a hook denies. The census was sound.
|
|
526
|
+
The reading was not: it counted actions a human *conventionally* performs,
|
|
527
|
+
without asking per action whether a human was **necessary**. Flipping a branch
|
|
528
|
+
setting, pushing, opening a PR, re-running CI, updating a merge base, fixing a
|
|
529
|
+
test, spending inside a budget — the agent can do all of it. That is remediation
|
|
530
|
+
work, and a `process-full` invocation grants it.
|
|
524
531
|
|
|
525
532
|
Three outcomes, and only one of them is success:
|
|
526
533
|
|
|
527
534
|
| Outcome | When | What it reports |
|
|
528
535
|
|---|---|---|
|
|
529
|
-
| `complete` | `count_open == 0` | the roadmap is finished; archival check runs (§ 6) |
|
|
530
|
-
| `blocked` |
|
|
536
|
+
| `complete` | `count_open == 0` and the PR is open | the roadmap is finished; archival check runs (§ 6) |
|
|
537
|
+
| `blocked` | every remaining open step is **externally impossible** for the agent | the work that DID close, plus the specific impossibility |
|
|
531
538
|
| a halt | one of the five conditions above fired | the halt, its evidence, and what remains |
|
|
532
539
|
|
|
540
|
+
`blocked-preflight` **no longer exists** (ADR-237 § 4). A run always starts.
|
|
541
|
+
|
|
533
542
|
```
|
|
534
543
|
`blocked` IS NEVER PRESENTED AS COMPLETION.
|
|
535
544
|
count_open STAYS > 0. NO CHECKBOX IS FLIPPED TO [~] TO REACH IT.
|
|
536
545
|
A PR OPENED ON A BLOCKED RUN IS LABELLED PARTIAL PROGRESS.
|
|
537
|
-
|
|
546
|
+
BEFORE REPORTING IT, ASK PER REMAINING STEP: CAN I DO THIS AT ALL?
|
|
547
|
+
ONE STEP THE AGENT COULD HAVE EXECUTED REJECTS THE CLAIM.
|
|
538
548
|
```
|
|
539
549
|
|
|
550
|
+
**Externally impossible — the whole list.** A required credential that does not
|
|
551
|
+
exist and the agent cannot create · a purchase beyond the delegated budget ·
|
|
552
|
+
physical hardware access · another person or organisation must act · a wait that
|
|
553
|
+
is factually mandatory and cannot be simulated or verified.
|
|
554
|
+
|
|
555
|
+
**Not externally impossible — every one of these is work.** An unprotected
|
|
556
|
+
branch · a branch to create · a push · a PR to open · a repository or branch
|
|
557
|
+
setting the agent can change · a workflow to start · CI to re-run · a merge base
|
|
558
|
+
to update · conflicts · failing tests · local configuration · a paid call under
|
|
559
|
+
the ceiling · "this could be risky" · "a maintainer should do this".
|
|
560
|
+
|
|
540
561
|
The `[~]` prohibition is load-bearing and was the one point the council split on.
|
|
541
562
|
Deferring a blocked step to `[~]` would let the run reach `count_open == 0` and
|
|
542
563
|
report completion — laundering unfinished work through a glyph, which is exactly
|
|
543
564
|
what Iron Law 3 of [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md)
|
|
544
565
|
exists to catch on the archival side. So the boxes stay open and the outcome
|
|
545
|
-
carries the truth instead.
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
recomputed at the moment of reporting, because steps unblock during a run (a
|
|
549
|
-
prerequisite closes, a `Run:` succeeds, a peer merges). If any open step is
|
|
550
|
-
runnable, `blocked` is refused and the loop continues.
|
|
566
|
+
carries the truth instead. **ADR-237 keeps this clause verbatim** — narrowing
|
|
567
|
+
`blocked` makes it more important, not less, because a run with more authority
|
|
568
|
+
has more ways to reach a clean-looking count.
|
|
551
569
|
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
570
|
+
Revalidation is the second half of the same discipline: the set is recomputed at
|
|
571
|
+
the moment of reporting, because steps unblock during a run (a prerequisite
|
|
572
|
+
closes, a `Run:` succeeds, a peer merges, a setting the run itself changed). If
|
|
573
|
+
any remaining step is one the agent could execute, `blocked` is refused and the
|
|
574
|
+
loop continues.
|
|
555
575
|
|
|
556
576
|
### Forbidden non-halt reasons — agent-invented cautions
|
|
557
577
|
|
|
@@ -570,14 +590,25 @@ a violation of the command and the user's will:
|
|
|
570
590
|
the stop-and-wait reading of `phase-checkpoints` applies only to
|
|
571
591
|
`process-phase`.
|
|
572
592
|
- **"this step looks human-gated"** — the `blocked` outcome above is reached by
|
|
573
|
-
the § 3c test
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
593
|
+
the § 3c test, never by a judgement about how a step feels. A step with no
|
|
594
|
+
qualifying blocker citation is runnable, and writing the citation yourself does
|
|
595
|
+
not make it one. This entry exists because the terminal outcome is the single
|
|
596
|
+
most abusable thing on this page.
|
|
597
|
+
- **"the branch is not protected" / "a branch must be created" / "a PR must be
|
|
598
|
+
opened" / "a GitHub setting must change" / "CI must be re-run" / "the merge
|
|
599
|
+
base needs updating" / "there are conflicts" / "tests fail"** — every one is
|
|
600
|
+
remediation work the invocation authorised (ADR-237 § 1). Do it.
|
|
601
|
+
- **"a paid service is needed"** — authorised up to a cumulative USD 25 per run
|
|
602
|
+
(§ Spend in the wrapper). Uncertainty about the exact cost is explicitly NOT a
|
|
603
|
+
reason to ask.
|
|
604
|
+
- **"a maintainer should do this"** when the agent can perform the same action
|
|
605
|
+
through git, `gh`, an API or a CLI. **Capability before role**: the role of the
|
|
606
|
+
person who conventionally does a thing is not a property of the thing.
|
|
577
607
|
|
|
578
608
|
If the work genuinely cannot continue, it will be because one of the five real
|
|
579
|
-
halt conditions fired, or because
|
|
580
|
-
surface THAT, with the
|
|
609
|
+
halt conditions fired, or because every remaining step is externally impossible
|
|
610
|
+
by the § 3c test — surface THAT, with the specific impossibility named, not a
|
|
611
|
+
manufactured caution and not a convention mistaken for a constraint.
|
|
581
612
|
|
|
582
613
|
### Non-halt — gating notes, "optional" tags
|
|
583
614
|
|
|
@@ -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*
|
|
@@ -129,6 +129,9 @@ precedent-creates-no-authority clause: [`adr-layout § Reopen authority`](../doc
|
|
|
129
129
|
|
|
130
130
|
## See also
|
|
131
131
|
|
|
132
|
+
- [`recurring-criticism`](recurring-criticism.md) — the **other entrance**: this
|
|
133
|
+
rule fires when a lock blocks a change, that one when the same criticism arrives
|
|
134
|
+
again. It reuses the five steps and the owner-reserved table below.
|
|
132
135
|
- [`decision-review`](../skills/decision-review/SKILL.md) — the backward-audit
|
|
133
136
|
procedure + the migrated gate mechanics.
|
|
134
137
|
- [`ai-council`](../skills/ai-council/SKILL.md) — the re-evaluation mechanism;
|
|
@@ -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`](../domains/analysis-workbench/analyze/inbox/command.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
|
|
|
@@ -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]
|