@event4u/agent-config 9.27.0 → 9.28.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/AGENTS.md +12 -11
- package/CHANGELOG.md +99 -0
- package/README.md +1 -1
- package/dist/agent-src/commands/analyze/conformance.md +24 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -3
- package/dist/agent-src/rules/artifact-engagement-recording.md +4 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -1
- package/dist/agent-src/rules/brand-source-of-truth.md +33 -6
- package/dist/agent-src/rules/context-hygiene.md +3 -1
- package/dist/agent-src/rules/council-availability.md +93 -0
- package/dist/agent-src/rules/cross-source-consistency.md +3 -0
- package/dist/agent-src/rules/delegation-policy.md +29 -5
- package/dist/agent-src/rules/design-fidelity.md +3 -0
- package/dist/agent-src/rules/evaluator-independence.md +2 -1
- package/dist/agent-src/rules/external-code-graph-interop.md +2 -1
- package/dist/agent-src/rules/finance-safety-floor.md +1 -1
- package/dist/agent-src/rules/git-history-discipline.md +1 -1
- package/dist/agent-src/rules/history-discipline.md +3 -1
- package/dist/agent-src/rules/legal-safety-floor.md +1 -1
- package/dist/agent-src/rules/no-pr-progress-comments.md +3 -1
- package/dist/agent-src/rules/onboarding-gate.md +3 -1
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +4 -1
- package/dist/agent-src/rules/role-mode-adherence.md +1 -1
- package/dist/agent-src/rules/scale-discipline.md +3 -1
- package/dist/agent-src/rules/self-repair-loop.md +103 -0
- package/dist/agent-src/rules/session-canary.md +2 -1
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
- package/dist/agent-src/rules/token-budget-discipline.md +3 -1
- package/dist/agent-src/rules/tool-safety.md +5 -1
- package/dist/agent-src/skills/adversarial-review/SKILL.md +1 -1
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
- package/dist/agent-src/skills/performance-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-improvement/SKILL.md +1 -1
- package/dist/agent-src/skills/project-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/sequential-thinking/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
- package/dist/agent-src/templates/AGENTS.md +6 -10
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/cli/registry.js +7 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-22GCIJ2O.js +270 -0
- package/dist/cli-delegate/{chunk-BCPIOAGV.js → chunk-2BE5I2MN.js} +8 -8
- package/dist/cli-delegate/{chunk-AIIUU73N.js → chunk-7OMQCH4V.js} +1 -1
- package/dist/cli-delegate/{chunk-HJ6DAJHR.js → chunk-GB2FSUEE.js} +57 -7
- package/dist/cli-delegate/{chunk-WR6GTRHJ.js → chunk-JXARCGVN.js} +3 -3
- package/dist/cli-delegate/{chunk-3KJIMFTB.js → chunk-PQSAQKHW.js} +466 -304
- package/dist/cli-delegate/chunk-REKCMYOU.js +2991 -0
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +134 -0
- package/dist/cli-delegate/cmd_conformance.js +7 -7
- package/dist/cli-delegate/cmd_converge.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +4 -4
- package/dist/cli-delegate/cmd_explain.js +80 -330
- package/dist/cli-delegate/cmd_export.js +5 -5
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +2 -2
- package/dist/cli-delegate/cmd_mcp_available.js +433 -0
- package/dist/cli-delegate/cmd_migrate.js +3 -3
- package/dist/cli-delegate/cmd_packs_active.js +153 -0
- package/dist/cli-delegate/cmd_preflight.js +1 -1
- package/dist/cli-delegate/cmd_prune.js +5 -5
- package/dist/cli-delegate/cmd_route_audit.js +8 -8
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_settings_get.js +272 -0
- package/dist/cli-delegate/cmd_settings_migrate.js +5 -5
- package/dist/cli-delegate/cmd_settings_set.js +7 -2967
- package/dist/cli-delegate/cmd_sync.js +5 -5
- package/dist/cli-delegate/cmd_uninstall.js +5 -5
- 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 +5 -5
- package/dist/cli-delegate/cmd_versions.js +4 -4
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +100 -40
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +9004 -6132
- package/dist/install/install.mjs +697 -507
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +127 -20
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +80 -15
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/docs/contracts/settings-classes.md +29 -8
- package/docs/guidelines/agent-infra/memory-access.md +14 -3
- package/package.json +1 -1
- package/src/agent-src/templates/AGENTS.md +6 -10
- package/src/config/budgets.yml +29 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +26 -0
- package/src/scripts/_cli/cmd_brand_status.ts +174 -0
- package/src/scripts/_cli/cmd_mcp_available.ts +266 -0
- package/src/scripts/_cli/cmd_packs_active.ts +225 -0
- package/src/scripts/_cli/cmd_settings_get.ts +324 -0
- package/src/scripts/_dispatch.bash +57 -0
- package/src/scripts/_lib/agent_settings.ts +82 -16
- package/src/scripts/_lib/carrier_divergence.ts +135 -0
- package/src/scripts/_lib/host_capability.ts +84 -1
- package/src/scripts/_lib/prompt_shape.ts +88 -0
- package/src/scripts/_lib/review_skipped_record.ts +102 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +254 -0
- package/src/scripts/_lib/self_repair.ts +342 -0
- package/src/scripts/_lib/self_repair_store.ts +100 -0
- package/src/scripts/_lib/transcript_entry.ts +80 -0
- package/src/scripts/check_branch_freshness.ts +255 -0
- package/src/scripts/check_council_config_location.ts +125 -1
- package/src/scripts/check_standing_rule_delivery.ts +314 -0
- package/src/scripts/config/profiles.ts +13 -3
- package/src/scripts/conformance_scan.ts +272 -24
- package/src/scripts/council_availability_hook.ts +188 -0
- package/src/scripts/council_cli.ts +126 -7
- package/src/scripts/hook_manifest.yaml +107 -26
- package/src/scripts/hooks/block_no_verify.ts +39 -2
- package/src/scripts/hooks/block_unauthorized_git.ts +156 -7
- package/src/scripts/hooks/concern_registry.ts +10 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +450 -0
- package/src/scripts/hooks/end_review_nudge_hook.ts +726 -0
- package/src/scripts/hooks/orchestration_record_hook.ts +342 -0
- package/src/scripts/install.ts +151 -0
- package/src/scripts/language_mirror_hook.ts +30 -37
- package/src/scripts/measure_scope_dedup.ts +19 -13
- package/src/scripts/onboarding_gate_hook.ts +40 -1
- package/src/scripts/orchestration_record.ts +4 -1
- package/src/scripts/preamble_byte_census.ts +9 -20
- package/src/scripts/report_carrier_divergence.ts +364 -0
- package/src/scripts/report_skill_activation.ts +257 -0
- package/src/scripts/report_skill_obligation_violations.ts +579 -0
- package/src/scripts/routing_doctor.ts +77 -6
- package/src/scripts/self_repair_cli.ts +240 -0
- package/src/scripts/self_repair_hook.ts +241 -0
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
|
|
9
|
-
"version": "9.
|
|
9
|
+
"version": "9.28.0",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"agent-config",
|
|
12
12
|
"skills",
|
package/AGENTS.md
CHANGED
|
@@ -4,30 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
## Source of truth
|
|
6
6
|
|
|
7
|
-
Edit `src/` only (`
|
|
7
|
+
Edit `src/` only (`skills`, `rules`, `agent-src`). `task sync` + `task generate-tools` regenerate the rest; never hand-edit.
|
|
8
8
|
|
|
9
9
|
## Working on this repo
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
task sync
|
|
13
|
-
task generate-tools
|
|
14
|
-
task ci
|
|
15
|
-
# maintainer: AGENT_CONFIG_DEV_MODE=1
|
|
12
|
+
task sync # dist/agent-src/, .augment/
|
|
13
|
+
task generate-tools # .claude/, .cursor/, .clinerules/, .windsurfrules
|
|
14
|
+
task ci # full pipeline, green before PR
|
|
15
|
+
# maintainer: AGENT_CONFIG_DEV_MODE=1 -> --scope=project (docs/maintainers/dev-mode.md)
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
## Pointers
|
|
19
19
|
|
|
20
20
|
- **Self-orientation**: [`package-self-orientation`](docs/contracts/package-self-orientation.md).
|
|
21
|
-
- **System map (maintainers)**: [`system-map`](docs/maintainers/system-map.md) —
|
|
22
|
-
- **Kernel + Router** — 9 Iron-Law rules
|
|
23
|
-
- **Trust & Safety** — enum
|
|
21
|
+
- **System map (maintainers)**: [`system-map`](docs/maintainers/system-map.md) — one-page overview.
|
|
22
|
+
- **Kernel + Router** — 9 Iron-Law rules + routing: [`kernel-membership`](docs/contracts/kernel-membership.md) + [`rule-router`](docs/contracts/rule-router.md).
|
|
23
|
+
- **Trust & Safety** — enum + floors: [`trust-and-safety`](docs/contracts/trust-and-safety.md) + [`ADR-018`](docs/decisions/ADR-018-trust-and-safety-layer.md).
|
|
24
24
|
- **Content pipelines** (A→D): [`docs/architecture.md`](docs/architecture.md).
|
|
25
25
|
- **Editing this repo**: [`source-of-truth`](src/rules/source-of-truth.md) + [`agents-md-thin-root`](src/skills/agents-md-thin-root/SKILL.md).
|
|
26
26
|
- **Consumer story** — `npx` + `scripts/install.sh`: [`README.md`](README.md).
|
|
27
|
-
- **Personas** — 34 lenses (
|
|
28
|
-
- **Discovery** — workspaces/packs: [`ADR-013`](docs/decisions/ADR-013-discovery-frontmatter-contract.md) + [`customization`](docs/customization.md
|
|
29
|
-
- **Root & `agents/` layout** — `src/` = source ([`ADR-050`](docs/decisions/ADR-050-workspace-vs-package-root-boundary.md));
|
|
27
|
+
- **Personas** — 34 lenses (core + specialists + advisors): [`docs/personas.md`](docs/personas.md).
|
|
28
|
+
- **Discovery** — workspaces/packs: [`ADR-013`](docs/decisions/ADR-013-discovery-frontmatter-contract.md) + [`customization`](docs/customization.md).
|
|
29
|
+
- **Root & `agents/` layout** — `src/` = source ([`ADR-050`](docs/decisions/ADR-050-workspace-vs-package-root-boundary.md)); contract: [`agents-layout`](docs/contracts/agents-layout.md).
|
|
30
30
|
- **Security** — [`SECURITY.md`](SECURITY.md); [`docs/threat-model.md`](docs/threat-model.md).
|
|
31
|
+
- **Delegate & review**: subagents take independent-slice work, not serial; no mutating session ends without neutral review — [`delegation-policy`](dist/agent-src/rules/delegation-policy.md).
|
|
31
32
|
|
|
32
33
|
## Emergency triage — when nothing else is reachable
|
|
33
34
|
|
package/CHANGELOG.md
CHANGED
|
@@ -312,6 +312,105 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
|
|
|
312
312
|
> that forces a new era split (`# Era: 9.28.x`, etc.) — see
|
|
313
313
|
> [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
|
|
314
314
|
|
|
315
|
+
## [9.28.0](https://github.com/event4u-app/agent-config/compare/9.27.0...9.28.0) (2026-08-09)
|
|
316
|
+
|
|
317
|
+
### Release highlights
|
|
318
|
+
|
|
319
|
+
<!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
|
|
320
|
+
- **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 63825ba, 9cd21cb, ae6f30e, 3d684ef, 909235c, 103a22b +2 more.
|
|
321
|
+
- **Default changes + migration:** _none_
|
|
322
|
+
- **Security and correctness:** _none_
|
|
323
|
+
- **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 2837fb7.
|
|
324
|
+
- **Known limitations:** _none_
|
|
325
|
+
|
|
326
|
+
### Features
|
|
327
|
+
|
|
328
|
+
* **hooks:** register the three orchestrator-discipline concerns ([b170fbc](https://github.com/event4u-app/agent-config/commit/b170fbc9c8a90bdb69ba97929a8c13b08c90ccb3))
|
|
329
|
+
* **hooks:** advisory end-review-nudge concern on stop ([3d2c1a0](https://github.com/event4u-app/agent-config/commit/3d2c1a0bc1087960d634e1d489867da78069ed8c))
|
|
330
|
+
* **hooks:** conditional delegation-nudge concern on user_prompt_submit ([761b793](https://github.com/event4u-app/agent-config/commit/761b793ad2e9a9371ade2272848e2d7aa856faae))
|
|
331
|
+
* **hooks:** deterministic orchestration-record concern on post_tool_use ([36e24c9](https://github.com/event4u-app/agent-config/commit/36e24c936e8e05281220574fbe9e924bd787c152))
|
|
332
|
+
* **host-capability:** committed registry for known hosts ([04e31f7](https://github.com/event4u-app/agent-config/commit/04e31f7c6274815db376fd545869f4bb80a3d225))
|
|
333
|
+
* **cli:** four capability probes for the gaps that had none ([909235c](https://github.com/event4u-app/agent-config/commit/909235ce713beaafec0dc0560ae21d47fca3df2e))
|
|
334
|
+
* **scripts:** measure the rule tokens a session actually receives ([406f986](https://github.com/event4u-app/agent-config/commit/406f98647fe3fca8a25cfa8f7a2e447f787bd5a6))
|
|
335
|
+
* **install:** refuse to create a silently doubled rule corpus ([9f2608f](https://github.com/event4u-app/agent-config/commit/9f2608f8da62ccf4ba2873845e4117b61cb91280))
|
|
336
|
+
* **rules:** detect when the rule corpus is delivered twice ([d9b6618](https://github.com/event4u-app/agent-config/commit/d9b6618c96f1cc0a328ac5e677ef16eb340b0c84))
|
|
337
|
+
* **scripts:** SK-2 loaded-but-violated, and the 3-of-110 coverage that is the finding ([2837fb7](https://github.com/event4u-app/agent-config/commit/2837fb7c1f44b303f97a6eb61c497679f36020ae))
|
|
338
|
+
* **conformance:** delivered rule payload by carrier, and the forward rate series ([78c19fd](https://github.com/event4u-app/agent-config/commit/78c19fdb1af6c02e81802da33f2e593e2599b9e1))
|
|
339
|
+
* **scripts:** name the rules the two carriers deliver differently ([cc6c8fb](https://github.com/event4u-app/agent-config/commit/cc6c8fbd307e4dc65ee4716208cd50084b32cf36))
|
|
340
|
+
* **wiring:** bind the self-repair concern and register its two CLI verbs ([a619cfc](https://github.com/event4u-app/agent-config/commit/a619cfc982965fb77a5c02f8480108be80661c92))
|
|
341
|
+
* **rules:** the self-repair loop as an always-loaded obligation ([cb8d560](https://github.com/event4u-app/agent-config/commit/cb8d56076ac09b351a565216b98a68789acd5e60))
|
|
342
|
+
* **self-repair:** detect agent defects and queue them as fixable records ([76b95ec](https://github.com/event4u-app/agent-config/commit/76b95ec7a524d482f333b701015f0a490cc4907d))
|
|
343
|
+
* **gate:** fail when no always-loaded rule carries the council user-global fact ([a56f28b](https://github.com/event4u-app/agent-config/commit/a56f28bf436c24b8f803711fa546ba713412c5c3))
|
|
344
|
+
* **rules:** carry the council user-global fact on the always-loaded surface ([36a0e4c](https://github.com/event4u-app/agent-config/commit/36a0e4cc6af6e83a47d120718a0fed7b5abb13cb))
|
|
345
|
+
* **gates:** refuse a push from a branch behind its base, asked of the remote ([bbdac53](https://github.com/event4u-app/agent-config/commit/bbdac539f5f3f2c8e86113f2a6a3a184a253a239))
|
|
346
|
+
* **report:** skill-activation census — the unmeasurable half, measured ([5719fd0](https://github.com/event4u-app/agent-config/commit/5719fd09e723bc7988fc0e90719c46d8a5f222f1))
|
|
347
|
+
|
|
348
|
+
### Bug Fixes
|
|
349
|
+
|
|
350
|
+
* **routing-doctor:** report whether the platform was observed or assumed ([2c176b2](https://github.com/event4u-app/agent-config/commit/2c176b212021bc05421233cb724677d4a1e44697))
|
|
351
|
+
* **routing-doctor:** resolve host capabilities through the committed registry ([9875177](https://github.com/event4u-app/agent-config/commit/9875177b73b65810eaae9e2c1a8f2c66c8648da3))
|
|
352
|
+
* **hooks:** harden transcript read, full session key, mutation-measure flag ([c908bbf](https://github.com/event4u-app/agent-config/commit/c908bbf41c944a9564dfd0efc9198472693a7f36))
|
|
353
|
+
* **ci:** ADR frontmatter and three consumer paths the reference gate read as repo paths ([9cd21cb](https://github.com/event4u-app/agent-config/commit/9cd21cb4182c205205b49f352c0a1745e11ff33e))
|
|
354
|
+
* **build:** rebuild the install bundle for the settings-cascade change ([dbcb658](https://github.com/event4u-app/agent-config/commit/dbcb658c51a31b7af028f0d745db4d23b3b5bf35))
|
|
355
|
+
* **settings:** four adjacent path defects that made the intuitive file wrong ([ae6f30e](https://github.com/event4u-app/agent-config/commit/ae6f30ee29c3e79bff20501adbfd394489de53df))
|
|
356
|
+
* **build:** rebuild the committed install bundle for the install.ts change ([0d362ce](https://github.com/event4u-app/agent-config/commit/0d362ce2242debe7fffc798e457fcad02a0e6426))
|
|
357
|
+
* **roadmap:** conform the Risk Register to the R1 gate grammar ([8a4f388](https://github.com/event4u-app/agent-config/commit/8a4f388c67d5351bbea7c76faf631dbd40a5aa29))
|
|
358
|
+
* **roadmap:** inline the council provenance instead of linking a path that rots ([5268154](https://github.com/event4u-app/agent-config/commit/5268154d686717d7ff64deb059c78779607c27b6))
|
|
359
|
+
* **skills:** lead nine descriptions with what they do, not with the guard ([bee0a72](https://github.com/event4u-app/agent-config/commit/bee0a72f90c97c67b57a949ac3c0d85756ad4db8))
|
|
360
|
+
* **scripts:** repair the round-2 review findings, incl. a second inverted polarity ([6ab06f7](https://github.com/event4u-app/agent-config/commit/6ab06f759c02774f02f37dd5b85aaf6009da44d4))
|
|
361
|
+
* **scripts:** repair all 14 R2 completion-review findings ([0ee1275](https://github.com/event4u-app/agent-config/commit/0ee1275af82ae1dfbe1f0e6eaa48337e71905aa1))
|
|
362
|
+
* **rules:** condense both new rules and re-anchor the token baseline ([103a22b](https://github.com/event4u-app/agent-config/commit/103a22b10c8830e87bf28ab0dddebf02d6354f85))
|
|
363
|
+
* **tests:** name the retired container by role, not by its dead literal path ([d7147ce](https://github.com/event4u-app/agent-config/commit/d7147ce2f4940c7095c94c91e731243a6c0ee495))
|
|
364
|
+
* **cli:** list council:status in usage(), the trunk was red without it ([1ca2ad0](https://github.com/event4u-app/agent-config/commit/1ca2ad00648533595d1d48794fd551c6e4e437d6))
|
|
365
|
+
* **tests:** two suites left directories in the tracked tree, and a third gate read them ([df70f14](https://github.com/event4u-app/agent-config/commit/df70f1436a325d0da2167f86ea464ee4ea074556))
|
|
366
|
+
* **council:** the refusal messages named the wrong config file ([62c6872](https://github.com/event4u-app/agent-config/commit/62c6872fe4647bc057835466414268cbf6da6971))
|
|
367
|
+
* **council:** stop the agent inferring council availability from a project file ([45f46b5](https://github.com/event4u-app/agent-config/commit/45f46b521ec4cb16a6d3d22c8a0db3009a68ea84))
|
|
368
|
+
* **conformance:** one trigger definition, and the count it was hiding ([8e131b4](https://github.com/event4u-app/agent-config/commit/8e131b41371a25255193702a23fd5820490db415))
|
|
369
|
+
* **hooks:** block what bash runs, not what the splitter finds readable ([bbc9b11](https://github.com/event4u-app/agent-config/commit/bbc9b11a949e2b6aad074fa11723d75609423b23))
|
|
370
|
+
|
|
371
|
+
### Documentation
|
|
372
|
+
|
|
373
|
+
* **review:** re-bind the R2 findings scope after the main merge ([8c85ea0](https://github.com/event4u-app/agent-config/commit/8c85ea05c707c0a379d3f8caf7c8c53d09df05fe))
|
|
374
|
+
* **review:** re-bind the R2 findings after the fix pass ([6728b67](https://github.com/event4u-app/agent-config/commit/6728b679853a9c4aea691d8348d060a4c892469d))
|
|
375
|
+
* **contexts:** carry the three open orchestrator-carrier decisions forward ([3c17c11](https://github.com/event4u-app/agent-config/commit/3c17c11f7246b0f2eb95e3e5904e9b43c0270b07))
|
|
376
|
+
* **review:** R2 completion-review findings for the closeout branch ([8217034](https://github.com/event4u-app/agent-config/commit/82170344f6fef8457c22ce125aa5adf51801a9fb))
|
|
377
|
+
* **roadmap:** close orchestrator-discipline-carriers on measured evidence ([e01b6f2](https://github.com/event4u-app/agent-config/commit/e01b6f284affa9bab5ec323e1c9c415962366fb7))
|
|
378
|
+
* **roadmap:** post-merge council pass, fd47df62 disposition, calibration biases ([ed8710d](https://github.com/event4u-app/agent-config/commit/ed8710d47bab07b4e428eac8f18b5560315d204e))
|
|
379
|
+
* **hooks:** correct stale cowork binding claim in delegation-nudge header ([d2f6e99](https://github.com/event4u-app/agent-config/commit/d2f6e99bf1a0ac11d0365f7854cab9177ff6692f))
|
|
380
|
+
* **roadmap:** orchestrator-discipline-carriers - measured defect, council pass, honest exits ([9a1798c](https://github.com/event4u-app/agent-config/commit/9a1798c6692f4c99c8cfcd418dbd2a9b1178b9cc))
|
|
381
|
+
* state the delegation and end-review obligations where sessions read ([63825ba](https://github.com/event4u-app/agent-config/commit/63825ba757524bbded04cf58e787585b4e3699e9))
|
|
382
|
+
* **rules:** make the capability answers reachable without knowing they exist ([3d684ef](https://github.com/event4u-app/agent-config/commit/3d684ef1403541fb707ec2a47026320dc734ae82))
|
|
383
|
+
* **roadmap:** the delivery-integrity roadmap, its council pass, and where it halts ([cd33314](https://github.com/event4u-app/agent-config/commit/cd333144c3a6636dd4209aa3c24e22b12484de77))
|
|
384
|
+
* **evidence:** three measurements behind the delivery findings ([cdf5b3f](https://github.com/event4u-app/agent-config/commit/cdf5b3f45165d374148ff87a3ba3240216c0d167))
|
|
385
|
+
* **contracts:** the router is compile-time, and no host reads it at runtime ([b1fdc72](https://github.com/event4u-app/agent-config/commit/b1fdc72a152d9d8250e713d8b5b8b482e3bd1acf))
|
|
386
|
+
* **roadmaps:** record what the two review rounds cost and the contract step I got wrong ([1e51900](https://github.com/event4u-app/agent-config/commit/1e51900fb143eb939bd8917d982ce76ff9fe6252))
|
|
387
|
+
* **reviews:** commit the binding completion-review artefact, re-bound to the shipping scope ([82e5909](https://github.com/event4u-app/agent-config/commit/82e5909e6ea5289b5f856f6343d38408e653b84b))
|
|
388
|
+
* **roadmaps:** close round 6 phases 3-4, and record the premises that came out false ([dc9b6b0](https://github.com/event4u-app/agent-config/commit/dc9b6b0a68ae3df99b1eee37d65bfc54edfd2d18))
|
|
389
|
+
* **gates:** the unregistered-emitter backstop covers one of the two emit shapes ([a032f0c](https://github.com/event4u-app/agent-config/commit/a032f0ccc2aceabf15ea92e1fcc86aa439d76e5f))
|
|
390
|
+
* **memory:** say which repo the intake sharing-boundary line describes ([466bdfc](https://github.com/event4u-app/agent-config/commit/466bdfcd050e58c47bef38a29fe7f24be59ffb51))
|
|
391
|
+
* **roadmap:** twelve places the agent must guess whether a capability exists ([9453c16](https://github.com/event4u-app/agent-config/commit/9453c162fd78f31f257eaea4dd5db68ff4513056))
|
|
392
|
+
* **roadmap:** the census, round 5 accounting, and a criterion that contradicted its own cancelled step ([3bac223](https://github.com/event4u-app/agent-config/commit/3bac22325f16287511c0f8dc3345a798cb0d47f6))
|
|
393
|
+
* **archive:** file superseded substrate-adoption roadmap ([f435453](https://github.com/event4u-app/agent-config/commit/f435453d3faa882a657b21475f467b13b332831e))
|
|
394
|
+
* **roadmap:** record the third #1208 defect, found by PR #1211 not by the review ([25d2d12](https://github.com/event4u-app/agent-config/commit/25d2d12e6f1c7ea56e7e99ba3fffd294638c3be5))
|
|
395
|
+
* **roadmap:** fold the challenge pass and four council verdicts into round 6 ([01f3286](https://github.com/event4u-app/agent-config/commit/01f3286d91ee34d155a175ce687679181602f838))
|
|
396
|
+
|
|
397
|
+
### Refactoring
|
|
398
|
+
|
|
399
|
+
* **scripts:** one definition of the cross-carrier rule comparison ([0a22a90](https://github.com/event4u-app/agent-config/commit/0a22a901fc95ed13e28afc44ce9f84fba9c7c5e2))
|
|
400
|
+
|
|
401
|
+
### Chores
|
|
402
|
+
|
|
403
|
+
* **tests:** drop dead subprocess scaffolding the changed-files lint surfaced ([2f786b9](https://github.com/event4u-app/agent-config/commit/2f786b91c31724561761a9489d118c3ccb50c7a6))
|
|
404
|
+
* **index:** regenerate index and catalog for the nine rewritten descriptions ([593330f](https://github.com/event4u-app/agent-config/commit/593330ff34e60711b40562b38e8eb880b45cc6c8))
|
|
405
|
+
* **tasks:** register the two new advisory reports as named tasks ([033732c](https://github.com/event4u-app/agent-config/commit/033732c56499f081ae614eed37a3fe43657bc01f))
|
|
406
|
+
* **generated:** reproject the council-availability rule after the probe rewrite ([9bac533](https://github.com/event4u-app/agent-config/commit/9bac533be54adad9f1d5bbe4b3965cbcf3c010eb))
|
|
407
|
+
* **generated:** counts, index, catalog, router, proof for the self-repair rule ([83e81ae](https://github.com/event4u-app/agent-config/commit/83e81ae48dc463d17f82edd89edd821f8b7fdb35))
|
|
408
|
+
* **generated:** router_rules count 108 -> 109 for the new routed rule ([bf00135](https://github.com/event4u-app/agent-config/commit/bf00135202a3ac84814a0324947dbecc57172bfd))
|
|
409
|
+
* **generated:** regenerate index, catalog, and router for the new rule ([188c434](https://github.com/event4u-app/agent-config/commit/188c4346428c7754b434bc86c4c3dfa8c8b203ee))
|
|
410
|
+
* **budgets:** record the 88 to 89 CLI verb move for council:status ([fa7404b](https://github.com/event4u-app/agent-config/commit/fa7404bf9483d241cd5d245cbc872cfd5406d851))
|
|
411
|
+
|
|
412
|
+
Tests: 12141 (+391 since 9.27.0)
|
|
413
|
+
|
|
315
414
|
## [9.27.0](https://github.com/event4u-app/agent-config/compare/9.26.0...9.27.0) (2026-08-07)
|
|
316
415
|
|
|
317
416
|
### Release highlights
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [](https://www.npmjs.com/package/@event4u/agent-config) [](https://glama.ai/mcp/servers/event4u-app/agent-config) [](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
|
|
6
6
|
|
|
7
|
-
[](dist/agent-src/skills/) [](dist/agent-src/skills/) [](dist/agent-src/rules/) [](dist/agent-src/commands/) [](docs/guidelines/) [](dist/agent-src/personas/) [](dist/agent-src/personas/advisors/)
|
|
8
8
|
|
|
9
9
|
**Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
|
|
10
10
|
|
|
@@ -82,6 +82,30 @@ is exactly why it is trustworthy and exactly why it is not sufficient.
|
|
|
82
82
|
|
|
83
83
|
`--scan-only` stops here.
|
|
84
84
|
|
|
85
|
+
The report also carries the **delivered rule payload** split by carrier (project
|
|
86
|
+
projection vs machine-global install, chars/4) and the store's **language-pin
|
|
87
|
+
rate** against the 9.1-39.2 % band M5 observed — round-6 Phase 4.3/4.5. Two
|
|
88
|
+
readings of that block, both deliberate:
|
|
89
|
+
|
|
90
|
+
- The payload is measured from the carriers **as they stand at scan time**, never
|
|
91
|
+
per session. A transcript records no system or tools field and the carriers
|
|
92
|
+
change under the sessions, so a per-session figure would be a fabrication.
|
|
93
|
+
- The band verdict is withheld below 1 978 assistant turns — the smallest corpus
|
|
94
|
+
the band was derived from — so it reports on behaviour rather than on corpus
|
|
95
|
+
size.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
agent-config conformance:behavior --record # append to the default series
|
|
99
|
+
agent-config conformance:behavior --record <path> # or a path you choose
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`--record` is the forward capture: one line per run into the gitignored
|
|
103
|
+
`agents/runtime/state/conformance-rates.jsonl`, keyed by a **digest** of the
|
|
104
|
+
store path rather than the path itself (the real slug carries a real name and
|
|
105
|
+
often a customer identifier). The record has no field able to hold a path, a
|
|
106
|
+
prompt, or a session id. Without it the project-identity variable cannot be
|
|
107
|
+
recovered later, which is why cancelling the volume test required adding it.
|
|
108
|
+
|
|
85
109
|
### 2 — Read the transcripts (subagent fan-out)
|
|
86
110
|
|
|
87
111
|
The scan cannot see a rule that has no gate: an ask handed over as a trailing
|
|
@@ -150,9 +150,16 @@ conformant audit-log-v1 line from the counts you already have:
|
|
|
150
150
|
[--first-pass-success true|false] [--escalated true|false]
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
A capture **hook** is the
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
A capture **hook** is now the primary path where the host has a
|
|
154
|
+
`post_tool_use` slot: the 2026-08-07 transcript backfill measured that
|
|
155
|
+
SYNCHRONOUS dispatch results DO carry `resolvedModel` / `totalTokens` /
|
|
156
|
+
`usage` — the 2026-06-30 "payload carries no usage" premise held only for
|
|
157
|
+
async dispatches, which stay metrics-absent. The `orchestration-record`
|
|
158
|
+
concern (`src/scripts/hooks/orchestration_record_hook.ts`, registered in
|
|
159
|
+
`hook_manifest.yaml`) emits the line deterministically on every Agent/Task
|
|
160
|
+
completion; measured model-carried capture before it existed was 1 of 370
|
|
161
|
+
dispatches (0.27 %). The CLI above stays for hosts without the slot and for
|
|
162
|
+
orchestrator-side records the hook cannot see. Reader:
|
|
156
163
|
`src/scripts/orchestration_savings_report.ts`.
|
|
157
164
|
|
|
158
165
|
**`token_delta` sourcing priority:**
|
|
@@ -23,7 +23,10 @@ obligation_frequency: "per-task"
|
|
|
23
23
|
|
|
24
24
|
**Iron Law.** After a `/implement-ticket` or `/work` phase-step, emit one
|
|
25
25
|
`telemetry:record` call with consulted + applied ids when telemetry is
|
|
26
|
-
enabled. Default-off; opt-in via `.agent-settings.yml
|
|
26
|
+
enabled. Default-off; opt-in via `.agent-settings.yml` — which is the **project
|
|
27
|
+
layer of a cascade that starts user-global**, so never read a value or its
|
|
28
|
+
absence from that file alone; `agent-config settings:get <key>` reports the
|
|
29
|
+
value and the file it actually came from. Zero overhead when
|
|
27
30
|
disabled. Recording contract + privacy floor:
|
|
28
31
|
[`contexts/contracts/artifact-engagement-flow.md`](../contexts/contracts/artifact-engagement-flow.md).
|
|
29
32
|
|
|
@@ -67,7 +67,7 @@ ALLOWLIST > 20 ENTRIES IN ONE SESSION = THE LINTER IS WRONG.
|
|
|
67
67
|
STOP. PROPOSE LINTER REDESIGN OR REMOVAL. DO NOT EXPAND THE ALLOWLIST FURTHER.
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Crossing 20 entries counts as the 3rd validation-target failure — fix the tool shape, not the list. Enforced at tool-call time by the `block-config-weakening` PreToolUse guard (`src/scripts/hooks/block_config_weakening.ts`): it counts allowlist entries added per session, warns from 5, and blocks past 20. Baselines and budget thresholds warn only — a rising count there may be a legitimate ratchet reset, which the edit alone cannot distinguish. Verify with the narrowest tool that proves the target green (a single `curl` / Playwright spec for HTTP/UI, the test runner with a `--filter`, an `xdebug` step-through) — never a meta-pipeline as per-iteration probe. Failed-attempt detail, suppression-sweep equivalents, probe-efficiency detail, and adaptive effort & stop (RDP): [`autonomy-mechanics § Validation-loop budget`](../contexts/execution/autonomy-mechanics.md).
|
|
70
|
+
Crossing 20 entries counts as the 3rd validation-target failure — fix the tool shape, not the list. Enforced at tool-call time by the `block-config-weakening` PreToolUse guard (`src/scripts/hooks/block_config_weakening.ts`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork: it counts allowlist entries added per session, warns from 5, and blocks past 20. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so there the cap is model-carried and "enforced at tool-call time" is not a claim this rule can make. Run `agent-config hooks:status` to see which slots are bound on the host you are actually on — the sibling rules `git-history-discipline` and `evaluator-independence` qualify the identical slot, and an unqualified claim here would read as a guarantee the manifest does not give. Baselines and budget thresholds warn only — a rising count there may be a legitimate ratchet reset, which the edit alone cannot distinguish. Verify with the narrowest tool that proves the target green (a single `curl` / Playwright spec for HTTP/UI, the test runner with a `--filter`, an `xdebug` step-through) — never a meta-pipeline as per-iteration probe. Failed-attempt detail, suppression-sweep equivalents, probe-efficiency detail, and adaptive effort & stop (RDP): [`autonomy-mechanics § Validation-loop budget`](../contexts/execution/autonomy-mechanics.md).
|
|
71
71
|
|
|
72
72
|
Body migrated to `contexts/execution/autonomy-mechanics.md` (per P4 of `road-to-kernel-and-router.md`) — opt-in detection summary, task-scope shapes table, N=3 mechanics, allowlist-antipattern detail, probe efficiency, adaptive effort (RDP).
|
|
73
73
|
Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
|
|
@@ -29,7 +29,7 @@ obligation_frequency: "per-edit"
|
|
|
29
29
|
A precedence rule plus its validation gate (merged from the former
|
|
30
30
|
`brand-consistency` rule, 2026-08-04 — the pair shared triggers and one
|
|
31
31
|
subject). When a consumer already has a brand — registered tokens
|
|
32
|
-
(
|
|
32
|
+
(`tokens.json`), a voice profile, a brand guide — that brand is authoritative
|
|
33
33
|
for the run. The curated `brand` corpus (archetypes, colour psychology, type
|
|
34
34
|
principles) is a **gap-filler**, never an override.
|
|
35
35
|
|
|
@@ -55,10 +55,32 @@ OR A VOICE RULE. A VALUE THAT TRACES TO NEITHER IS OFF-BRAND.
|
|
|
55
55
|
NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
+
## Where the brand actually lives — and how to check
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
NEVER INFER BRAND PRESENCE FROM A FILENAME. RUN `agent-config brand:status`.
|
|
62
|
+
THE FILE IS `tokens.json`, NEVER `.tokens.json` — A DOT-PREFIXED FILE IS READ BY NOTHING.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The resolver searches exactly four paths under the project root, in this order,
|
|
66
|
+
first hit wins (`BRAND_TOKEN_PATHS`, the UI scaffold directive):
|
|
67
|
+
|
|
68
|
+
1. `tokens.json`
|
|
69
|
+
2. `assets/tokens.json`
|
|
70
|
+
3. `resources/tokens.json`
|
|
71
|
+
4. `agents/settings/brand/tokens.json` <!-- ref-ignore -->
|
|
72
|
+
|
|
73
|
+
`agent-config brand:status` reports which one holds a file, or that none does —
|
|
74
|
+
and separately flags a dot-prefixed `.tokens.json`, which is the file a reader
|
|
75
|
+
of this rule's earlier wording would plausibly have created and which nothing
|
|
76
|
+
reads. Absent is a real answer: it means the greenfield branch below, not a
|
|
77
|
+
misconfiguration.
|
|
78
|
+
|
|
58
79
|
## Precedence order
|
|
59
80
|
|
|
60
|
-
1. **Consumer brand profile** — registered
|
|
61
|
-
guide, or a confirmed `brand-strategy`
|
|
81
|
+
1. **Consumer brand profile** — a registered `tokens.json` at one of the four
|
|
82
|
+
paths above, a voice profile, a brand guide, or a confirmed `brand-strategy`
|
|
83
|
+
/ `brand-identity` constraint set.
|
|
62
84
|
2. **This run's confirmed decisions** — selections the human signed off this session.
|
|
63
85
|
3. **The brand corpus** — archetype / colour / type / messaging defaults, used
|
|
64
86
|
only where 1 and 2 are silent, and always surfaced as corpus-sourced.
|
|
@@ -66,7 +88,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
|
66
88
|
## What the gate covers
|
|
67
89
|
|
|
68
90
|
- **Colour / type / spacing** in generated UI or assets that is not one of the
|
|
69
|
-
active brand tokens (from `state.ui_design` or the consumer's
|
|
91
|
+
active brand tokens (from `state.ui_design` or the consumer's `tokens.json`).
|
|
70
92
|
A raw hex / font / px value with no token behind it is off-brand.
|
|
71
93
|
- **Copy and microcopy** whose register contradicts the active voice profile
|
|
72
94
|
(e.g. playful copy under an authoritative `Ruler` voice).
|
|
@@ -79,7 +101,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
|
|
|
79
101
|
- **Precedence half:** any brand decision while a consumer brand profile is
|
|
80
102
|
present — to keep the corpus from quietly replacing a value the brand already
|
|
81
103
|
defines.
|
|
82
|
-
- **Gate half:** a brand layer is active for the run (a
|
|
104
|
+
- **Gate half:** a brand layer is active for the run (a `tokens.json` /
|
|
83
105
|
`state.ui_design` brand profile or a confirmed `brand-strategy` /
|
|
84
106
|
`brand-identity` constraint set) AND a UI / copy / asset is being emitted or
|
|
85
107
|
reviewed.
|
|
@@ -114,6 +136,11 @@ for the full Brand-mode vs Product-mode discriminator.
|
|
|
114
136
|
- [`brand-consistency`](brand-consistency.md) — pointer stub; its body lives here since the 2026-08-04 merge.
|
|
115
137
|
- [`brand`](../skills/brand/SKILL.md) — the gap-fill corpus this rule subordinates to consumer brand.
|
|
116
138
|
- [`brand-identity`](../skills/brand-identity/SKILL.md) — defines the tokens the gate validates against.
|
|
117
|
-
- [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG
|
|
139
|
+
- [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG token
|
|
140
|
+
source of truth. **Known contradiction, recorded not resolved:** that skill's
|
|
141
|
+
prose says to author `.tokens.json` while the only resolver in the tree reads
|
|
142
|
+
`tokens.json`, so a consumer following it literally produces a file nothing
|
|
143
|
+
loads. The authoring name is a consumer-visible decision and is not changed
|
|
144
|
+
here; `brand:status` surfaces the mismatch at the moment it matters.
|
|
118
145
|
- [`design-intelligence`](../skills/design-intelligence/SKILL.md) — the "audit findings outrank corpus" precedent the gate mirrors.
|
|
119
146
|
- [`docs/guidelines/design-modes.md`](../docs/guidelines/design-modes.md) — brand vs product register discriminator and routing.
|
|
@@ -19,7 +19,9 @@ obligation_frequency: "per-turn"
|
|
|
19
19
|
# Context Hygiene
|
|
20
20
|
|
|
21
21
|
> **Enforced by:** [`scripts/context_hygiene_hook.ts`](../../scripts/context_hygiene_hook.ts)
|
|
22
|
-
> on Augment + Claude Code (`PostToolUse`).
|
|
22
|
+
> on Augment + Claude Code (`PostToolUse`). Run `agent-config hooks:status` to
|
|
23
|
+
> see whether that slot is actually bound on the host you are on — this line is
|
|
24
|
+
> a statement about the manifest, not about your install. The hook maintains
|
|
23
25
|
> `agents/state/context-hygiene.json` (tool-call count, loop signal,
|
|
24
26
|
> freshness milestones at 20/40/60); the prose below is the spec the
|
|
25
27
|
> hook implements and the agent-side fallback.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "auto"
|
|
3
|
+
tier: "2a"
|
|
4
|
+
description: "Council availability is decided by the CLI resolver, never by the project tree — .agent-settings.yml is not the council config"
|
|
5
|
+
triggers:
|
|
6
|
+
- keyword: "council"
|
|
7
|
+
- keyword: "ai council"
|
|
8
|
+
- keyword: "ai-council"
|
|
9
|
+
- keyword: "council:status"
|
|
10
|
+
- keyword: "second opinion"
|
|
11
|
+
- phrase: "cross-check with another model"
|
|
12
|
+
self_contained: true
|
|
13
|
+
workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
|
|
14
|
+
packs: [meta]
|
|
15
|
+
enforced_by:
|
|
16
|
+
- "none"
|
|
17
|
+
# obligation: line 27
|
|
18
|
+
obligation_frequency: "per-task"
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Council Availability Is CLI-Decided
|
|
22
|
+
|
|
23
|
+
The council config is user-global (ADR-104): configured once per developer, live
|
|
24
|
+
in every project, worktree and CWD — including consumer repos carrying none of
|
|
25
|
+
this package's internals. Nothing in the project tree switches it on or off.
|
|
26
|
+
|
|
27
|
+
## The Iron Law
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
COUNCIL AVAILABILITY IS DECIDED BY THE CLI RESOLVER — NEVER BY THE PROJECT TREE.
|
|
31
|
+
RUN THE FREE `council:status` PROBE BEFORE CLAIMING THE COUNCIL IS UNAVAILABLE.
|
|
32
|
+
NEVER INFER "NOT CONFIGURED" FROM A MISSING `.agent-settings.yml`, A MISSING
|
|
33
|
+
`scripts/ai_council`, OR A MISSING PROJECT-LOCAL COUNCIL FILE — NONE OF THEM
|
|
34
|
+
CARRY COUNCIL ENABLEMENT.
|
|
35
|
+
NEVER COPY THE USER-GLOBAL CONFIG INTO THE PROJECT TREE TO "MAKE IT WORK".
|
|
36
|
+
NEVER PRESENT A SUBAGENT FAN-OUT AS A COUNCIL.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## The probe
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
agent-config council:status # no API call, no spend, any directory
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Prints `CONFIGURED` / `NOT CONFIGURED`, the resolved path, the layer that
|
|
46
|
+
resolved it, and the member count. In this package's own checkout:
|
|
47
|
+
`./scripts-run src/scripts/council_cli status`.
|
|
48
|
+
|
|
49
|
+
## What says nothing about availability
|
|
50
|
+
|
|
51
|
+
A missing `.agent-settings.yml` (it never carried enablement — the block was
|
|
52
|
+
removed in ADR-093), a missing `scripts/ai_council/` (package-internal, absent
|
|
53
|
+
from every consumer), a missing project-local council file (the resolver ignores
|
|
54
|
+
`project_root` entirely), and invisible API keys (they live under
|
|
55
|
+
`~/.event4u/agent-config/`). The one real location is
|
|
56
|
+
`~/.event4u/agent-config/settings/.ai-council.yml`; the only escape is
|
|
57
|
+
`$AI_COUNCIL_CONFIG`, an explicit absolute path — still not a project search.
|
|
58
|
+
|
|
59
|
+
## Why this rule exists
|
|
60
|
+
|
|
61
|
+
The council switch is **not** in `.agent-settings.yml`, though roughly twenty
|
|
62
|
+
rules train the reflex of reading that file to learn whether a feature is on.
|
|
63
|
+
The exception lived only in [`ai-council`](../skills/ai-council/SKILL.md),
|
|
64
|
+
a skill body that reaches context only on activation, so five consumer sessions
|
|
65
|
+
inspected the tree, announced "council not configured", and substituted a
|
|
66
|
+
subagent fan-out while two members were configured the whole time. One copied
|
|
67
|
+
the user-global config into the repo to "make it work".
|
|
68
|
+
|
|
69
|
+
## If the probe really says unavailable
|
|
70
|
+
|
|
71
|
+
State the resolver's own message and stop. A subagent fan-out is a legitimate
|
|
72
|
+
substitute **only when named as such** — never as "the council". Same honesty
|
|
73
|
+
boundary as [`evaluator-independence`](evaluator-independence.md).
|
|
74
|
+
|
|
75
|
+
## When NOT to fire
|
|
76
|
+
|
|
77
|
+
Availability is already settled this session, or the question is about council
|
|
78
|
+
*content* (findings, synthesis) rather than availability.
|
|
79
|
+
|
|
80
|
+
## Enforcement
|
|
81
|
+
|
|
82
|
+
`enforced_by: none` — no gate reads a chat claim. Deterministic instead:
|
|
83
|
+
`check_council_config_location` fails the build when a council surface ties the
|
|
84
|
+
config to `.agent-settings.yml`, which never carried it, or to a project-tree
|
|
85
|
+
path, and its §4 fails when no always-loaded rule carries this fact at all.
|
|
86
|
+
|
|
87
|
+
## See also
|
|
88
|
+
|
|
89
|
+
- [`ai-council`](../skills/ai-council/SKILL.md) — the full invocation procedure.
|
|
90
|
+
- [`direct-answers`](direct-answers.md) Iron Law 2 — a live-state fact is never
|
|
91
|
+
asserted from inspection when an authoritative resolver exists.
|
|
92
|
+
- [`self-repair-loop`](self-repair-loop.md) — catches the claim when it is made
|
|
93
|
+
anyway.
|
|
@@ -61,6 +61,9 @@ OBVIOUS-TO-THE-AGENT ≠ IN-SCOPE.
|
|
|
61
61
|
a ticket/spec that carries a second source (an attachment, a code reality, or an
|
|
62
62
|
internal contradiction), gated by `consistency.cross_source` in
|
|
63
63
|
`.agent-settings.yml` (`on` default · `auto` = high-confidence only · `off` = inert).
|
|
64
|
+
That file is the project layer of a cascade that starts user-global — never read
|
|
65
|
+
the setting or its absence from it alone; `agent-config settings:get
|
|
66
|
+
consistency.cross_source` reports the value and the file it came from.
|
|
64
67
|
|
|
65
68
|
**Does NOT fire** on a single clear source with no second source to compare
|
|
66
69
|
against (that is plain vagueness — it belongs to `ask-when-uncertain`), on
|
|
@@ -77,11 +77,35 @@ primitive → run in-session (clean no-op).
|
|
|
77
77
|
ordered slice never dispatches before its declared parent's return is
|
|
78
78
|
verified. Both per
|
|
79
79
|
[`subagent-steering`](../contexts/execution/subagent-steering.md).
|
|
80
|
-
6. **Record** telemetry after each dispatch —
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
6. **Record** telemetry after each dispatch — on hook-capable hosts the
|
|
81
|
+
`orchestration-record` concern (`post_tool_use`) emits the line
|
|
82
|
+
deterministically for every Agent/Task completion; on hosts without the
|
|
83
|
+
slot, run `orchestration_record` yourself (one validated line: spawn_count,
|
|
84
|
+
token_delta + provenance, tier, task_class) per
|
|
85
|
+
[`orchestration-telemetry`](../contexts/execution/orchestration-telemetry.md)
|
|
86
|
+
§ Emit. Measured before the hook existed: 1 of 370 dispatches captured —
|
|
87
|
+
the model-carried path alone leaves the value question unmeasured.
|
|
88
|
+
|
|
89
|
+
## Carriers — how this rule reaches a session (and what stays model-carried)
|
|
90
|
+
|
|
91
|
+
No host runs the tier-2 rule router, so this file's triggers alone never load
|
|
92
|
+
it. The obligation travels on three carriers instead: the always-loaded
|
|
93
|
+
AGENTS.md line (delegate-by-default + end-review), the `delegation-nudge`
|
|
94
|
+
concern on `user_prompt_submit` (runs `classifyTask` on cheap prompt signals
|
|
95
|
+
and injects a one-line verdict ONLY when the classifier says
|
|
96
|
+
`do-in-parallel`/`do-in-steps` — silence otherwise; delivery on
|
|
97
|
+
`user_prompt_submit` is end-to-end verified), and the `end-review-nudge`
|
|
98
|
+
concern on `stop` (ONE `review_skipped` telemetry line per mutating
|
|
99
|
+
no-review session — verified; its advisory line reaches the dispatcher
|
|
100
|
+
output, but host-side forwarding of stop-slot context to the model is
|
|
101
|
+
unverified, so the model-facing end-review carrier is the AGENTS.md line
|
|
102
|
+
plus this telemetry). The
|
|
103
|
+
capability gate itself resolves from the committed host registry in
|
|
104
|
+
`src/scripts/_lib/host_capability.ts` (settings override wins). What stays
|
|
105
|
+
model-carried, honestly: the decomposition itself, the per-return
|
|
106
|
+
verification, and every dispatch on hosts without hook slots. The nudges are
|
|
107
|
+
advisory by design — whether they change behaviour is measured by the
|
|
108
|
+
telemetry, not assumed.
|
|
85
109
|
|
|
86
110
|
## Scope — does NOT
|
|
87
111
|
|
|
@@ -72,6 +72,9 @@ decisions already made — treat it like brand tokens, not like inspiration.
|
|
|
72
72
|
## Strictness — set by `design.fidelity_mode`
|
|
73
73
|
|
|
74
74
|
Read `design.fidelity_mode` from `.agent-settings.yml`. Missing → `strict`.
|
|
75
|
+
That file is the project layer of a cascade that starts user-global, so "missing"
|
|
76
|
+
means missing from **every** layer — `agent-config settings:get
|
|
77
|
+
design.fidelity_mode` reports the value and the file it came from.
|
|
75
78
|
|
|
76
79
|
| Mode | Behaviour |
|
|
77
80
|
|---|---|
|
|
@@ -99,7 +99,8 @@ id; with no ledger yet, the counter falls back to session scope. And the slot
|
|
|
99
99
|
itself is not universal: `pre_tool_use` exists on **three** hosts — augment,
|
|
100
100
|
claude, cowork. On cursor, cline, windsurf, gemini and copilot this guard has
|
|
101
101
|
nowhere to bind, so items 1 and 4 join 2 and 3 as model-carried there. The
|
|
102
|
-
frequency join in `check_enforcement_coverage.ts` reports exactly that set
|
|
102
|
+
frequency join in `check_enforcement_coverage.ts` reports exactly that set, and
|
|
103
|
+
`agent-config hooks:status` answers it for the host you are on right now.
|
|
103
104
|
|
|
104
105
|
Items 2 and 3 — an honestly chosen scope, and recording the prompt with the
|
|
105
106
|
verdict — are **not** enforced by anything. A narrowed scope is not decidable
|
|
@@ -70,7 +70,8 @@ AND the repo contains a detectable index:
|
|
|
70
70
|
routing skill: `agent-config code-graph detect|query|affected|path` over the
|
|
71
71
|
native engine or a consumer-shipped index, grep as the stated fallback. On
|
|
72
72
|
hook-capable hosts the PreToolUse `code-graph` nudge surfaces this once per
|
|
73
|
-
session; on instruction-file hosts this rule is the surface.
|
|
73
|
+
session; on instruction-file hosts this rule is the surface. Which of the two
|
|
74
|
+
you are on is `agent-config hooks:status`, not a guess from the host name.
|
|
74
75
|
- [`discovery_graph`](../scripts/discovery_graph.ts) — this suite's OWN artefact
|
|
75
76
|
relation-graph (`affected`/`explain`); the external code-graph is the
|
|
76
77
|
*source-code* analogue this rule defers to for code questions.
|
|
@@ -41,7 +41,7 @@ obligation_frequency: "per-task"
|
|
|
41
41
|
|
|
42
42
|
# Finance Safety Floor
|
|
43
43
|
|
|
44
|
-
Domain safety floor for finance-pack artefacts (cash, runway, valuation, scenario, unit economics, forecasting). Auto-activates when `pack-finance-basic` or `pack-finance-advanced` is installed.
|
|
44
|
+
Domain safety floor for finance-pack artefacts (cash, runway, valuation, scenario, unit economics, forecasting). Auto-activates when `pack-finance-basic` or `pack-finance-advanced` is installed — `agent-config packs:active` says whether it is, and names the degraded case where zero packs load and this floor cannot activate at all.
|
|
45
45
|
|
|
46
46
|
## Iron Law — no final investment recommendation
|
|
47
47
|
|
|
@@ -84,4 +84,4 @@ Trigger-set above activates this routing on demand, independent of the disciplin
|
|
|
84
84
|
- [`commit-policy`](commit-policy.md) — commits are the user's call; rewriting them is a stronger version of the same restriction.
|
|
85
85
|
- [`token-efficiency`](token-efficiency.md) — Iron Law on burning the user's tokens for cosmetic gain.
|
|
86
86
|
- [`skill:git-workflow`](../skills/git-workflow/SKILL.md) — Safe Squash-After-Push protocol and Divergent-State Recovery decision tree.
|
|
87
|
-
- `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so on those hosts the Iron Laws above are model-carried and "deterministically blocked" is not a claim this rule can make. Surfaced by the frequency join in `check_enforcement_coverage.ts`, which reports the per-commit obligation as uncovered on exactly those platforms.
|
|
87
|
+
- `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so on those hosts the Iron Laws above are model-carried and "deterministically blocked" is not a claim this rule can make. Surfaced by the frequency join in `check_enforcement_coverage.ts`, which reports the per-commit obligation as uncovered on exactly those platforms. To check the host you are on rather than trusting this sentence, run `agent-config hooks:status`.
|
|
@@ -26,7 +26,9 @@ obligation_frequency: "per-edit"
|
|
|
26
26
|
# History Discipline
|
|
27
27
|
|
|
28
28
|
Pack floor for the `history-discipline` pack (default-off; auto-activates
|
|
29
|
-
when the pack is installed
|
|
29
|
+
when the pack is installed — `agent-config packs:active` says whether it is,
|
|
30
|
+
and names the degraded case where zero packs load and this floor cannot
|
|
31
|
+
activate at all). Agents get history wrong in both directions:
|
|
30
32
|
missing entirely on data that needs it, or over-built as event sourcing
|
|
31
33
|
where a row-level log suffices — and audit tables that themselves grow
|
|
32
34
|
without bound.
|
|
@@ -39,7 +39,7 @@ obligation_frequency: "per-task"
|
|
|
39
39
|
|
|
40
40
|
# Legal Safety Floor
|
|
41
41
|
|
|
42
|
-
Domain safety floor for the `legal-review-prep` pack (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal-review-prep` is installed. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft to PREPARE for attorney review**, never legal advice. Operating mechanics migrated to [`legal-practice-profile § Legal safety floor`](../skills/legal-practice-profile/SKILL.md) (per P4 of `road-to-kernel-and-router`) — the Iron Laws below stay here.
|
|
42
|
+
Domain safety floor for the `legal-review-prep` pack (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal-review-prep` is installed — `agent-config packs:active` says whether it is, and names the degraded case where zero packs load and this floor cannot activate at all. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft to PREPARE for attorney review**, never legal advice. Operating mechanics migrated to [`legal-practice-profile § Legal safety floor`](../skills/legal-practice-profile/SKILL.md) (per P4 of `road-to-kernel-and-router`) — the Iron Laws below stay here.
|
|
43
43
|
|
|
44
44
|
## Iron Law — no final legal call
|
|
45
45
|
|
|
@@ -25,7 +25,9 @@ EXCEPTION: USER-INVOKED FLOWS ALWAYS RUN.
|
|
|
25
25
|
EXCEPTION: USER EXPLICITLY ASKED FOR IT THIS TURN.
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Reading `.agent-settings.yml
|
|
28
|
+
Reading `.agent-settings.yml` — the project layer of a cascade that starts
|
|
29
|
+
user-global, so "not set" means not set on any layer; `agent-config settings:get
|
|
30
|
+
personal.pr_progress_comments` reports the value and the file it came from:
|
|
29
31
|
|
|
30
32
|
- Missing key / not set → treat as `false`.
|
|
31
33
|
- `personal.pr_progress_comments: false` (default) → gate fires.
|
|
@@ -18,7 +18,9 @@ obligation_frequency: "per-session"
|
|
|
18
18
|
# Onboarding Gate
|
|
19
19
|
|
|
20
20
|
**Iron Law.** First turn of a project: if `onboarding.onboarded` is
|
|
21
|
-
false in `.agent-settings.yml
|
|
21
|
+
false in `.agent-settings.yml` — the project layer of a cascade that starts
|
|
22
|
+
user-global, so check it with `agent-config settings:get onboarding.onboarded`
|
|
23
|
+
rather than by opening one file — instruct the developer to run
|
|
22
24
|
`agent-config setup` in their terminal before executing any other
|
|
23
25
|
request. The wizard writes `onboarding.onboarded: true` on `Finish`,
|
|
24
26
|
which silences this rule for subsequent turns.
|
|
@@ -45,7 +45,10 @@ AND EXECUTION MUST SKIP THEM INLINE WITH [-] AND A REASON.
|
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
When autonomous local-CI runs are disabled in `.agent-settings.yml`
|
|
48
|
-
(`quality.local_auto_run: false` — the shipped template default
|
|
48
|
+
(`quality.local_auto_run: false` — the shipped template default; that file is the
|
|
49
|
+
project layer of a cascade that starts user-global, and this key is one where an
|
|
50
|
+
ABSENT value resolves to `true` at its reader and therefore DISABLES this gate —
|
|
51
|
+
`agent-config settings:get quality.local_auto_run` reports both facts), every
|
|
49
52
|
full-pipeline gate run during roadmap work is wasted wall-clock and
|
|
50
53
|
tokens — the remote CI on the PR is the authoritative gate. Roadmaps must
|
|
51
54
|
neither schedule nor execute those gates locally. New CI gates and
|