@event4u/agent-config 10.3.0 → 11.0.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 +147 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze.md +2 -1
- package/dist/agent-src/commands/council/debate.md +13 -4
- package/dist/agent-src/commands/council/default.md +26 -11
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/design-system/capture.md +44 -0
- package/dist/agent-src/commands/design-system/generate.md +75 -0
- package/dist/agent-src/commands/design-system/import.md +63 -0
- package/dist/agent-src/commands/design-system.md +66 -0
- package/dist/agent-src/commands/pr/create.md +51 -26
- package/dist/agent-src/commands/worktree/create.md +5 -3
- package/dist/agent-src/rules/settings-ask-protocol.md +14 -9
- package/dist/agent-src/skills/ai-council/SKILL.md +24 -6
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +12 -1
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +215 -7
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +39 -1
- package/dist/agent-src/skills/design-intelligence/ATTRIBUTION.md +19 -2
- package/dist/agent-src/skills/design-intelligence/data/manifest.json +36 -1
- package/dist/agent-src/skills/design-intelligence/data/motion.csv +17 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +9 -0
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +70 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +9 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +9 -6
- package/dist/agent-src/skills/using-git-worktrees/SKILL.md +25 -21
- package/dist/agent-src/templates/agent-settings.md +0 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +4 -1
- package/dist/cli-delegate/{chunk-BV3WR67D.js → chunk-55WZN5VF.js} +3 -6
- package/dist/cli-delegate/{chunk-X3VOARZD.js → chunk-L565YFXH.js} +3 -3
- package/dist/cli-delegate/{chunk-JMQZ7MM5.js → chunk-MNWRDMR5.js} +1 -1
- package/dist/cli-delegate/{chunk-IR3IVRVC.js → chunk-NLP54U3J.js} +2 -1
- package/dist/cli-delegate/{chunk-FV34EGEX.js → chunk-NN4KW4HZ.js} +1 -1
- package/dist/cli-delegate/{chunk-6ENSXSBW.js → chunk-PPQO4NGR.js} +1 -1
- package/dist/cli-delegate/chunk-RLN73PR5.js +157 -0
- package/dist/cli-delegate/{chunk-6LOPHJLD.js → chunk-RYNADUFG.js} +1 -1
- package/dist/cli-delegate/{chunk-I5EAFRII.js → chunk-ZPSXJTLI.js} +2 -154
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +673 -215
- package/dist/cli-delegate/cmd_doctor.js +2 -2
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +10 -8
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +2 -2
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +6 -4
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +1 -1
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- 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 +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +127 -22
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +9 -5
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +8 -4
- package/dist/hooks/dispatch.js +994 -399
- package/dist/install/install.mjs +5 -7
- package/dist/mcp/registry-manifest.json +2 -2
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1104 -593
- package/dist/scripts/_lib/agent_settings.js +8 -0
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -4
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/{index-5fXOHoVh.js → index-B0aMJnuz.js} +2 -2
- package/dist/ui/assets/{index-5fXOHoVh.js.map → index-B0aMJnuz.js.map} +1 -1
- package/dist/ui/index.html +1 -1
- package/docs/contracts/settings-classes.md +12 -9
- package/package.json +1 -1
- package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +4 -1
- package/src/config/agent-settings.template.yml +15 -18
- package/src/config/gate-coverage.yml +33 -2
- package/src/config/gate-violation-baselines.json +2 -2
- package/src/config/pack-size-budget.json +3 -2
- package/src/scripts/_lib/agent_settings.ts +8 -0
- package/src/scripts/_lib/design_system_import.ts +987 -0
- package/src/scripts/check_branch_freshness.ts +238 -6
- package/src/scripts/design_system_import.ts +264 -0
- package/src/scripts/external_sources_denylist.json +7 -2
- package/src/scripts/hook_manifest.yaml +71 -2
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/dispatch_hook.ts +10 -0
- package/src/scripts/hooks/host_semantics.ts +2 -0
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +212 -0
- package/src/scripts/hooks/subagent_ledger_hook.ts +723 -0
- package/src/scripts/hooks/turn_end_gate_hook.ts +39 -2
- package/src/scripts/lint_hook_manifest.ts +2 -0
- package/src/scripts/lint_rule_skill_pack_reach.ts +194 -13
- package/src/scripts/session_register_hook.ts +120 -10
- package/src/server/schemas/settings.ts +3 -6
- package/tests/fixtures/hooks/subagent_start.json +7 -0
- package/tests/fixtures/hooks/subagent_stop.json +8 -0
package/dist/ui/index.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
document.documentElement.setAttribute('data-theme', theme);
|
|
28
28
|
})();
|
|
29
29
|
</script>
|
|
30
|
-
<script type="module" crossorigin src="/assets/index-
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-B0aMJnuz.js"></script>
|
|
31
31
|
<link rel="stylesheet" crossorigin href="/assets/index-jSfMW8_t.css">
|
|
32
32
|
</head>
|
|
33
33
|
<body>
|
|
@@ -39,9 +39,10 @@ surface without a consumer.
|
|
|
39
39
|
**It governs writes, not reads.** Every class is readable by everything. A C
|
|
40
40
|
class does not hide a value; it refuses to let a non-human change it.
|
|
41
41
|
|
|
42
|
-
**It governs writes, not asks.**
|
|
43
|
-
enum (`tokens.rich_skills`, `subagents.adversarial_council`,
|
|
44
|
-
`decision_engine.on_block`).
|
|
42
|
+
**It governs writes, not asks.** Three settings ship an `ask` value in their own
|
|
43
|
+
enum (`tokens.rich_skills`, `subagents.adversarial_council`,
|
|
44
|
+
`decision_engine.on_block`). It was four until ADR-229 deleted
|
|
45
|
+
`worktrees.mode`.
|
|
45
46
|
Those are C-class here, and that is not a contradiction: the class says who may
|
|
46
47
|
*persist* a new value; the `ask` value says what happens *at runtime* when the
|
|
47
48
|
setting is already set to `ask`. A C-class key set to `ask` still produces a
|
|
@@ -189,12 +190,15 @@ dispatch runs, not WHETHER the layer exists, so they keep their own C rows.
|
|
|
189
190
|
|---|---|
|
|
190
191
|
| A — preference | 26 |
|
|
191
192
|
| B — consent | 3 |
|
|
192
|
-
| C — guarded |
|
|
193
|
-
| **Total** | **
|
|
193
|
+
| C — guarded | 105 |
|
|
194
|
+
| **Total** | **134** |
|
|
194
195
|
|
|
195
196
|
The total was 140 until 2026-08-12, when five of the six keys no code path read were
|
|
196
197
|
deleted, minus the one held open (§ The six unread keys, below): one A
|
|
197
|
-
(`telegraph.speak_scope`) and four C.
|
|
198
|
+
(`telegraph.speak_scope`) and four C. It dropped to 134 on 2026-08-13 when
|
|
199
|
+
ADR-229 deleted `worktrees.mode` — a fifth C, and the first deletion in this
|
|
200
|
+
series of a key that WAS read: the doctrine there is that the decision was never
|
|
201
|
+
the agent's to make, not that nothing consulted it.
|
|
198
202
|
|
|
199
203
|
The total is every leaf in the template, where *leaf* means anything that is not
|
|
200
204
|
a **non-empty** map. An empty map (like the former `subagents.host_capabilities: {}`) is a real
|
|
@@ -244,9 +248,9 @@ the template, which is the drift this contract exists to prevent.
|
|
|
244
248
|
|---|---|
|
|
245
249
|
| derivable | 83 |
|
|
246
250
|
| un-inferrable | 9 |
|
|
247
|
-
| consent |
|
|
251
|
+
| consent | 37 |
|
|
248
252
|
| policy | 5 |
|
|
249
|
-
| **Total** | **
|
|
253
|
+
| **Total** | **134** |
|
|
250
254
|
|
|
251
255
|
First measured 2026-08-12 at 140 leaves (derivable 88 · consent 38 ·
|
|
252
256
|
un-inferrable 9 · policy 5), from the table below rather than predicted — the
|
|
@@ -421,7 +425,6 @@ Rows follow template order, so a diff against the template reads straight down.
|
|
|
421
425
|
| `subagents.model_ceiling` | C | `""` | session-wide subagent model cap (exported as `CLAUDE_CODE_SUBAGENT_MODEL` by suite-owned CLI spawn wrappers), which is spend and quality | consent |
|
|
422
426
|
| `subagents.max_parallel` | C | `3` | parallelism cap, and therefore a spend rate | consent |
|
|
423
427
|
| `subagents.adversarial_council` | C | `"off"` | governs a paid verification step | consent |
|
|
424
|
-
| `worktrees.mode` | C | `ask` | standing permission for autonomous worktree creation | consent |
|
|
425
428
|
| `ai_team.model` | C | `auto` | names an external model | un-inferrable |
|
|
426
429
|
| `ai_team.allow_delegate` | C | `false` | grants an external tool write access to the repository | consent |
|
|
427
430
|
| `ai_team.max_calls_per_day` | C | `50` | quota cap on a shared budget | consent |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event4u/agent-config",
|
|
3
3
|
"mcpName": "io.github.event4u-app/agent-config",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "11.0.0",
|
|
5
5
|
"description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|
|
@@ -345,7 +345,10 @@ function _halt_provided_without_contract(
|
|
|
345
345
|
'> 1. Proceed — port it with those five losses on the record; `apply` ' +
|
|
346
346
|
'still has to report what it honoured, translated, and flagged',
|
|
347
347
|
'> 2. Supply a `design-system.json` — its token values are then ' +
|
|
348
|
-
'honoured verbatim instead of re-derived'
|
|
348
|
+
'honoured verbatim instead of re-derived. Already have an ' +
|
|
349
|
+
"extractor's output in another shape? `/design-system:import " +
|
|
350
|
+
'<file>` maps a DTCG token file or an extraction tool\'s raw JSON ' +
|
|
351
|
+
'into this contract offline.',
|
|
349
352
|
'> 3. Abort — drop this UI request',
|
|
350
353
|
'',
|
|
351
354
|
'**Recommendation: 2 — Supply the contract** — it is the only option ' +
|
|
@@ -815,24 +815,21 @@ subagents:
|
|
|
815
815
|
|
|
816
816
|
# --- Git worktrees ---
|
|
817
817
|
#
|
|
818
|
-
#
|
|
819
|
-
# mode 6 (`do-in-worktrees`)
|
|
820
|
-
#
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
# ask; mode 6 may be picked without prompting. Iron-Law gates
|
|
834
|
-
# (ignore-check, clean baseline) still apply.
|
|
835
|
-
mode: ask
|
|
818
|
+
# There is no setting. Worktree creation is INSTRUCTION-ONLY (ADR-229):
|
|
819
|
+
# `using-git-worktrees` and `subagent-orchestration` mode 6 (`do-in-worktrees`)
|
|
820
|
+
# create a worktree ONLY when the user asks for one in the chat ("do this in a
|
|
821
|
+
# worktree", "use mode 6"). Unprompted, mode 6 is not selectable and the chain
|
|
822
|
+
# falls back to mode 3 (`do-in-steps`).
|
|
823
|
+
#
|
|
824
|
+
# `worktrees.mode` was DELETED. It offered `ask`/`on`/`off` over a decision that
|
|
825
|
+
# was never the agent's to make: `ask` spent a round trip on every spawn, `on`
|
|
826
|
+
# let the agent start parallel work on its own, and `off` was the behaviour
|
|
827
|
+
# everyone actually wanted — so the setting's only real value was hardcoded and
|
|
828
|
+
# the other two values removed. A leftover key from an older install is ignored
|
|
829
|
+
# with one deprecation line (see `REMOVED_KEYS` in `_lib/agent_settings.ts`).
|
|
830
|
+
#
|
|
831
|
+
# The Iron-Law gates on creation (ignore-safety check, clean baseline) are
|
|
832
|
+
# unchanged and still run on every explicitly-requested worktree.
|
|
836
833
|
|
|
837
834
|
# --- AI Council (external second-opinion network) ---
|
|
838
835
|
#
|
|
@@ -305,8 +305,8 @@ gates:
|
|
|
305
305
|
|
|
306
306
|
- id: check_ci_local_parity
|
|
307
307
|
argv: ["--quiet"]
|
|
308
|
-
min_scanned:
|
|
309
|
-
corpus: "CI + local gate invocations parsed from .github/workflows + taskfiles (
|
|
308
|
+
min_scanned: 340
|
|
309
|
+
corpus: "CI + local gate invocations parsed from .github/workflows + taskfiles (360 measured 2026-08-13: 109 CI + 251 local)"
|
|
310
310
|
status: enforced
|
|
311
311
|
note: >
|
|
312
312
|
Registered 2026-08-02. It already emitted the contract line on every path,
|
|
@@ -317,6 +317,37 @@ gates:
|
|
|
317
317
|
taskfile set, so the only plantable violation is a new file under
|
|
318
318
|
.github/workflows — a surface the canary must not write to. Reported
|
|
319
319
|
UNPROVEN by --canary, never green.
|
|
320
|
+
FLOOR RE-ANCHORED 380 → 340 on 2026-08-13, and the direction deserves an
|
|
321
|
+
argument rather than a diff.
|
|
322
|
+
The claim is NOT that 443 minus phantoms equals 360 — that arithmetic does
|
|
323
|
+
not close, and pretending otherwise would be the false-precision this
|
|
324
|
+
manifest exists to prevent. 443 was measured on 2026-08-02 against a
|
|
325
|
+
different tree: both a CI-side set inflated by 167 phantoms AND a smaller
|
|
326
|
+
local set than today's. The two totals are not comparable term by term.
|
|
327
|
+
What IS comparable is the repair's own before/after on ONE tree, which is
|
|
328
|
+
the measurement that matters here: CI-side 273 → 106, because gate names
|
|
329
|
+
were being read out of workflow COMMENTS by an extraction bug this gate's
|
|
330
|
+
own repair removed. So the fall is entries that never existed ceasing to be
|
|
331
|
+
counted, not reach being lost — the discriminator false-green.md § 5 asks
|
|
332
|
+
for ("a legitimate ratchet lowers severity while keeping reach"). Reach over
|
|
333
|
+
the real corpus is one unit HIGHER than before this change: the two gates
|
|
334
|
+
wired into consistency.yml were previously reachable from neither side.
|
|
335
|
+
Why 340 and not 360, the measured value: gate-authoring.md § registration
|
|
336
|
+
requires a floor BELOW the live count, because a floor pinned at today's
|
|
337
|
+
number reds on the very change that legitimately retires one unit. 340
|
|
338
|
+
leaves ~20 units (~5.5%) of headroom.
|
|
339
|
+
What this floor can and cannot catch, corrected after the R2 review caught
|
|
340
|
+
the first version arguing from a break that cannot fire it. The extraction
|
|
341
|
+
bug INFLATED the count — phantom gate names entering the CI set — so a
|
|
342
|
+
re-break raises the population to roughly 527 and a min_scanned floor never
|
|
343
|
+
triggers on a rise. The floor guards the opposite direction: an extractor
|
|
344
|
+
that stops finding taskfiles or workflows at all, a parse error zeroing one
|
|
345
|
+
side, a scan root that moves. Those are collapses of 100+ units and 340
|
|
346
|
+
catches every one of them. The realistic PARTIAL break — one taskfile
|
|
347
|
+
failing to parse, say ~14 units — passes 340 and would have failed 380,
|
|
348
|
+
which is the honest cost of the headroom and is accepted here rather than
|
|
349
|
+
hidden: a floor tight enough to catch that is also tight enough to red on
|
|
350
|
+
the next legitimate retirement.
|
|
320
351
|
|
|
321
352
|
- id: check_site_links
|
|
322
353
|
argv: []
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"$comment": "Violation ratchet for gates whose dead scan root was repaired. A repair REVEALS pre-existing debt; it does not create it. Each entry records the count revealed at repair time — the gate fails only when its count RISES. Lowering a count is a normal commit; raising one is a defect. Entries expire: a baseline that has not dropped within 56 days of `landed` (or of `reaffirmed.date`) fails its gate, because a number that never moves is suppression with extra steps. Mechanism + rationale: src/scripts/_lib/gate_baseline.ts. Decision: AI council 2026-08-02, roadmap road-to-gates-that-can-fail blocker `dead-gate-finding-triage`.",
|
|
3
3
|
"gates": {
|
|
4
4
|
"ci-parity:local-only": {
|
|
5
|
-
"count":
|
|
5
|
+
"count": 166,
|
|
6
6
|
"landed": "2026-08-13",
|
|
7
|
-
"note": "Gates that `task ci` runs and no workflow does — the direction this manifest's own header calls the one that let real defects merge (16 stale index rows reached the trunk behind a local-only check-index). Revealed, not created, by repairing the checker's extraction: check_ci_local_parity built its CI-side set by regexing RAW workflow text for `task <name>` and expanding each closure, comments included. Several workflow comments contain the literal string `task ci` while stating that no workflow invokes it, so `ci` was read as an invocation and its full 247-gate closure entered the 'runs in CI' set. The count was therefore 0 BY CONSTRUCTION, and the prose documenting the gap was what suppressed it. Measured at the repair: CI-side 273 → 106, undeclared_local_only 0 → 167 of 247 local gates (68%). Baselined rather than hard-failed because 167 findings nobody can clear in the change that reveals them is the gate-that-lands-as-N-instant-blockers failure this repository has refused before; shrink-only keeps the property that matters, namely that a NEW gate registered in `task ci` with no workflow reds immediately. Lowering happens by wiring gates into workflows or declaring them under `local_only:` with a reason. Note the punchline, because it bounds the risk of this entry: check_ci_local_parity ITSELF runs in no workflow, so it is its own finding and this ratchet has no remote reach either — clearing the backlog is what gives it teeth.",
|
|
7
|
+
"note": "Gates that `task ci` runs and no workflow does — the direction this manifest's own header calls the one that let real defects merge (16 stale index rows reached the trunk behind a local-only check-index). Revealed, not created, by repairing the checker's extraction: check_ci_local_parity built its CI-side set by regexing RAW workflow text for `task <name>` and expanding each closure, comments included. Several workflow comments contain the literal string `task ci` while stating that no workflow invokes it, so `ci` was read as an invocation and its full 247-gate closure entered the 'runs in CI' set. The count was therefore 0 BY CONSTRUCTION, and the prose documenting the gap was what suppressed it. Measured at the repair: CI-side 273 → 106, undeclared_local_only 0 → 167 of 247 local gates (68%). Baselined rather than hard-failed because 167 findings nobody can clear in the change that reveals them is the gate-that-lands-as-N-instant-blockers failure this repository has refused before; shrink-only keeps the property that matters, namely that a NEW gate registered in `task ci` with no workflow reds immediately. Lowering happens by wiring gates into workflows or declaring them under `local_only:` with a reason. Note the punchline, because it bounds the risk of this entry: check_ci_local_parity ITSELF runs in no workflow, so it is its own finding and this ratchet has no remote reach either — clearing the backlog is what gives it teeth. DRAINED BY ONE, 2026-08-13: check_ci_local_parity itself was wired into consistency.yml, so it left the set it exists to report. That is the whole shape of a legitimate drain here — the gate stops being local-only because a workflow now runs it, not because the declaration list grew. The floor in gate-coverage.yml moved in the same change and for the same reason: wiring two gates raised the parsed population 357 -> 360 (109 CI + 251 local). The intermediate 359 was the reading after the CI-side wiring alone and before check_gate_coverage joined the local `ci` chain; it was committed here by mistake and is corrected rather than left as a second number for the same measurement.",
|
|
8
8
|
"falsifier": "./scripts-run src/scripts/check_ci_local_parity"
|
|
9
9
|
},
|
|
10
10
|
"check_no_new_legacy_path:hardcoded-scan-roots": {
|
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
"rationale": "Measured 2026-07-31: the largest non-excepted skill is corpus-grounding at 2.33%, so a 5% cap is green with better than 2x headroom and red for any skill that doubles. It is a falsifiable gate, not a ritual one.",
|
|
21
21
|
"exceptions": {
|
|
22
22
|
"design-intelligence": {
|
|
23
|
-
"max_pct": 23.
|
|
23
|
+
"max_pct": 23.5,
|
|
24
24
|
"measured_pct": 22.63,
|
|
25
|
-
"reason": "771 KB of BM25 corpus (27 CSVs + 16 design-language prose specs + manifest.json) consumed at runtime by corpus-grounding's retriever, and referenced by 6 further skills. Moving it behind a lazy fetch would add a network dependency to a skill that works offline today — the same trade-off ADR-061 §8 already REJECTED for a 745 KB font index. The exception is visible debt, not an endorsement: raising max_pct requires a reason in the same commit."
|
|
25
|
+
"reason": "771 KB of BM25 corpus (27 CSVs + 16 design-language prose specs + manifest.json) consumed at runtime by corpus-grounding's retriever, and referenced by 6 further skills. Moving it behind a lazy fetch would add a network dependency to a skill that works offline today — the same trade-off ADR-061 §8 already REJECTED for a 745 KB font index. The exception is visible debt, not an endorsement: raising max_pct requires a reason in the same commit.",
|
|
26
|
+
"baseline_note_2026_08_13": "23.0 → 23.5 on 2026-08-13, and the reason belongs in this file per the sentence above. WHAT WAS ADOPTED: data/motion.csv, 10.5 KB, 16 rows. WHY IT IS NOT DISCRETIONARY: the roadmap's three design dials were all in its original scope, and two of the three (variance, density) were already portable — variance's keywords resolve against the local styles.csv (2/3/3 hits) and density is three pure range maps. The motion dial is not: upstream filters its corpus rows by `Intensity Tier == <dial tier>`, and that column exists only in motion.csv, so shipping the dial without the file means shipping a flag that silently does nothing. Two of three dials plus an inert third is a worse surface than three working ones. WHAT WAS DECLINED IN THE SAME PASS, so this is not a ratchet slipping: google-fonts.csv (743 KB — ADR-061 §8 rejects it by name and by size; the 2026-06-16 amendment authorises a slim top-N slice from a different mirror, not this file), typography.csv (our curated font-pairings-reference.csv is the ADR's working substitution), six desktop-UI stacks outside frontend-design's scope, and eleven content-drifted files nobody has reviewed. The base pin in ATTRIBUTION.md is deliberately NOT bumped for the same reason. HONEST LIMIT ON THE NUMBER: 22.63 is the committed measurement, not a fresh one — check_pack_size cannot be re-measured from a built worktree (it reads 9.096 against the 7.8 packed cap before any change, the trap the packed_size_mb note above documents), so the post-adoption share is arithmetic (~22.87 %) and the new cap carries ~0.6 pp over it rather than clearing by a hair. DECIDED BY: AI council, 2026-08-13, on a maintainer delegation — and honestly, by ONE member over two rounds, not by convergence: the second seat returned exit_1 (the codex CLI refuses a git worktree as an untrusted directory). Recorded as a single-member review in agents/evidence/analysis/design-system-blockers-council.md."
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
}
|
|
@@ -922,6 +922,13 @@ export function load_agent_settings(
|
|
|
922
922
|
* whether the repair is to build its missing reader or to delete a promise a
|
|
923
923
|
* Hard Floor can never honour. See `settings-classes.md` § The six unread keys.
|
|
924
924
|
*
|
|
925
|
+
* `worktrees.mode` (2026-08-13, ADR-229) is a third doctrine again: not
|
|
926
|
+
* always-on, not unread. It WAS read, and the reader honoured all three values —
|
|
927
|
+
* the deletion says the decision was never the agent's to make. `ask` bought a
|
|
928
|
+
* round trip per spawn, `on` let the agent start parallel work unprompted, and
|
|
929
|
+
* `off` described the wanted behaviour, so `off` became the hardcoded rule and
|
|
930
|
+
* the switch went. What decides instead is the user's own sentence in the chat.
|
|
931
|
+
*
|
|
925
932
|
* Every reason string must name what decides INSTEAD, never just "removed".
|
|
926
933
|
* Exported so `lint_settings_classes` can check the deletion side of the
|
|
927
934
|
* surface: a reason that names no replacement, or an entry whose key is live in
|
|
@@ -942,6 +949,7 @@ export const REMOVED_KEYS: ReadonlyMap<string, string> = new Map([
|
|
|
942
949
|
['chat_history.on_overflow', 'the overflow mode comes from the rotate command --mode argv'],
|
|
943
950
|
['quality.wait_for_remote_ci', 'whether to poll follows from the push plus a detectable remote pipeline'],
|
|
944
951
|
['legal_review_prep.consented_at', 'the provenance sidecar settings:set writes and consentVerdict reads'],
|
|
952
|
+
['worktrees.mode', 'the user asking for a worktree in the chat; creation is instruction-only and hardcoded'],
|
|
945
953
|
]);
|
|
946
954
|
|
|
947
955
|
/** Keys already warned about in THIS process — the "once per run" dedupe. */
|