@event4u/agent-config 10.0.0 → 10.2.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 +172 -5
- package/README.md +1 -1
- package/dist/agent-src/commands/roadmap/next.md +38 -0
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +22 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +39 -0
- package/dist/agent-src/rules/token-budget-discipline.md +3 -2
- package/dist/agent-src/rules/token-efficiency.md +22 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +17 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -0
- package/dist/agent-src/skills/ai-council/SKILL.md +28 -6
- package/dist/agent-src/skills/check-refs/SKILL.md +5 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/lint-skills/SKILL.md +5 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +5 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +5 -1
- package/dist/agent-src/templates/agent-settings.md +12 -28
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +2 -2
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/{chunk-3JUTT26I.js → chunk-6ENSXSBW.js} +1 -1
- package/dist/cli-delegate/{chunk-TVGXH7VA.js → chunk-6LOPHJLD.js} +1 -1
- package/dist/cli-delegate/{chunk-XT2YTJCZ.js → chunk-AYKQGIBG.js} +4 -0
- package/dist/cli-delegate/{chunk-HJSKTMIF.js → chunk-BV3WR67D.js} +3 -19
- package/dist/cli-delegate/{chunk-HTIU3W56.js → chunk-BWMXLD4B.js} +6 -2
- package/dist/cli-delegate/{chunk-2H5SE7DU.js → chunk-E4RUZKXB.js} +165 -38
- package/dist/cli-delegate/{chunk-XTC5ARB6.js → chunk-IR3IVRVC.js} +7 -2
- package/dist/cli-delegate/{chunk-LRXJK6GN.js → chunk-JMQZ7MM5.js} +1 -1
- package/dist/cli-delegate/{chunk-NX5AXSLD.js → chunk-X3VOARZD.js} +3 -3
- 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 +881 -204
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- 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 +6 -5
- 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 +44 -9
- package/dist/cli-delegate/cmd_settings_get.js +2 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- 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 +15 -15
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +88 -20
- package/dist/install/install.mjs +9 -21
- package/dist/mcp/registry-manifest.json +1 -1
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +1359 -492
- package/dist/scripts/_lib/agent_settings.js +25 -2
- package/dist/scripts/_lib/agent_settings.js.map +1 -1
- package/dist/scripts/_lib/compile_time_toggles.js +4 -3
- package/dist/scripts/_lib/compile_time_toggles.js.map +1 -1
- package/dist/server/io/yamlIO.js +0 -2
- package/dist/server/io/yamlIO.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -9
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/shared/settingsClasses.js +64 -2
- package/dist/shared/settingsClasses.js.map +1 -1
- package/dist/ui/assets/{index-B5qGYOJo.js → index-5fXOHoVh.js} +2 -2
- package/dist/ui/assets/index-5fXOHoVh.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/contracts/settings-classes.md +307 -145
- package/docs/guidelines/agent-infra/layered-settings.md +1 -2
- package/docs/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/package.json +1 -1
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -1
- package/src/config/agent-settings.template.yml +12 -30
- package/src/config/gate-violation-baselines.json +9 -3
- package/src/config/profiles/balanced.ini +0 -2
- package/src/config/profiles/full.ini +1 -3
- package/src/config/profiles/minimal.ini +0 -2
- package/src/scripts/_cli/cmd_session_recycle.ts +66 -9
- package/src/scripts/_cli/handoff_sessions.ts +3 -2
- package/src/scripts/_lib/agent_settings.ts +25 -2
- package/src/scripts/_lib/bench_telegraph.ts +1 -1
- package/src/scripts/_lib/cc_transcript.ts +25 -0
- package/src/scripts/_lib/compile_time_toggles.ts +4 -3
- package/src/scripts/_lib/untrusted_content.test.ts +175 -0
- package/src/scripts/_lib/untrusted_content.ts +184 -0
- package/src/scripts/ai_council/clients.ts +228 -33
- package/src/scripts/cache_realization_report.ts +3 -2
- package/src/scripts/check_rule_projection_integrity.ts +3 -1
- package/src/scripts/conformance_scan.ts +282 -9
- package/src/scripts/cost/track.mjs +10 -4
- package/src/scripts/council_cli.ts +33 -3
- package/src/scripts/external_sources_denylist.json +3 -1
- package/src/scripts/hook_manifest.yaml +17 -6
- package/src/scripts/hooks/block_unauthorized_git.ts +54 -8
- package/src/scripts/hooks/delegation_nudge_hook.ts +33 -8
- package/src/scripts/hooks/evidence_independence.ts +61 -9
- package/src/scripts/hooks/session_eol_hook.ts +123 -3
- package/src/scripts/hooks/turn_end_gate_hook.ts +31 -0
- package/src/scripts/lint_settings_classes.ts +273 -11
- package/src/scripts/lint_symptom_intake.ts +241 -0
- package/src/scripts/report_consultation_rate.ts +2 -1
- package/src/scripts/report_skill_activation.ts +6 -4
- package/src/scripts/report_skill_obligation_violations.ts +2 -1
- package/src/scripts/schemas/skill.schema.json +42 -0
- package/src/scripts/skill_linter.ts +57 -2
- package/src/server/io/yamlIO.ts +0 -2
- package/src/server/schemas/settings.ts +3 -19
- package/src/shared/settingsClasses.ts +93 -2
- package/dist/ui/assets/index-B5qGYOJo.js.map +0 -1
|
@@ -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": "10.
|
|
9
|
+
"version": "10.2.0",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"agent-config",
|
|
12
12
|
"skills",
|
package/CHANGELOG.md
CHANGED
|
@@ -339,15 +339,177 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
|
|
|
339
339
|
> that forces a new era split (`# Era: 9.37.x`, etc.) — see
|
|
340
340
|
> [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
|
|
341
341
|
|
|
342
|
-
## [10.
|
|
342
|
+
## [10.2.0](https://github.com/event4u-app/agent-config/compare/10.1.0...10.2.0) (2026-08-13)
|
|
343
343
|
|
|
344
344
|
### Release highlights
|
|
345
345
|
|
|
346
346
|
<!-- 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. -->
|
|
347
|
-
- **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in
|
|
347
|
+
- **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 1bb1076, 698aa3f, d805133, 973787a.
|
|
348
|
+
- **Default changes + migration:** _none_
|
|
349
|
+
- **Security and correctness:** _auto-derived, rewrite before merge:_ security-scoped commits in 0309b8e.
|
|
350
|
+
- **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in c428ac6.
|
|
351
|
+
- **Known limitations:** _none_
|
|
352
|
+
|
|
353
|
+
### Features
|
|
354
|
+
|
|
355
|
+
* **process:** give operator symptoms a home and codify the loop that resolves them ([6e01a24](https://github.com/event4u-app/agent-config/commit/6e01a24bb9c0a2496feca0a5dfb69d50fefa5fbf))
|
|
356
|
+
* **gates:** warn on unresolved operator symptom entries past 30 days ([ef98cfa](https://github.com/event4u-app/agent-config/commit/ef98cfa7d02c98ec88abf0ec9b778af12b2b6e91))
|
|
357
|
+
* **rules:** size-gated reads — probe a large file before loading it whole ([1bb1076](https://github.com/event4u-app/agent-config/commit/1bb10767269e1d348a874b845f0176fc1c83deba))
|
|
358
|
+
* **hooks:** severity follows the input type — prose alone may not block ([2716d4f](https://github.com/event4u-app/agent-config/commit/2716d4f87280b71f7301a885a9c10da1f1f00ffd))
|
|
359
|
+
* **settings:** gate the deletion side of the surface, not just the addition side ([da3bc3c](https://github.com/event4u-app/agent-config/commit/da3bc3c536184462c73a7214be953b8a57f9c432))
|
|
360
|
+
* **settings:** delete the six keys no code path read ([973787a](https://github.com/event4u-app/agent-config/commit/973787a6026d9b18f86f9961d7286993c6a491b8))
|
|
361
|
+
* **settings:** add the disposition axis to lint_settings_classes ([4c9ced8](https://github.com/event4u-app/agent-config/commit/4c9ced8908a9e89e2f9b8684cb4f1f6642d55c55))
|
|
362
|
+
* **conformance:** give task-completeness a denominator, and cover it ([18e4a0c](https://github.com/event4u-app/agent-config/commit/18e4a0c85cd705e5f404ea5b08f7a1018b7a7c3b))
|
|
363
|
+
* **conformance:** measure task completeness before refusing on it ([11610f8](https://github.com/event4u-app/agent-config/commit/11610f85c46d0eeb024ccb224e9236d264ffe0fe))
|
|
364
|
+
|
|
365
|
+
### Bug Fixes
|
|
366
|
+
|
|
367
|
+
* **roadmap-writing:** fit the symptom-loop route without tripping the size check ([d5b3253](https://github.com/event4u-app/agent-config/commit/d5b3253f7875ab4da2da45a869cbbcb134a03763))
|
|
368
|
+
* **roadmaps:** anonymize the vendored corpus upstream outside its attribution file ([8406ac8](https://github.com/event4u-app/agent-config/commit/8406ac8c52a75355e0c704184aea123c7895d2fc))
|
|
369
|
+
* **roadmaps:** satisfy the complexity and blocker contracts on two active plans ([498cea7](https://github.com/event4u-app/agent-config/commit/498cea7c93bdbea57e00b5d6ba56ca828692e34f))
|
|
370
|
+
* **contracts:** the rule-router described a Claude Code gap that closed in PR #1231 ([f87240d](https://github.com/event4u-app/agent-config/commit/f87240d899e5418fa256e6462160b74466ad728d))
|
|
371
|
+
* **context-hygiene:** name the wait shape both loop clauses miss ([698aa3f](https://github.com/event4u-app/agent-config/commit/698aa3f65e704e3fa796be606c54a880c0736d01))
|
|
372
|
+
* **turn-end-gate:** stop refusing the honest "not done yet" line ([f85a8c7](https://github.com/event4u-app/agent-config/commit/f85a8c713d7bfa1d577ed1897261493ab1336d33))
|
|
373
|
+
* **git-guard:** classify the verb that is invoked, not the one that is named ([1b0d42d](https://github.com/event4u-app/agent-config/commit/1b0d42dd4135af012647853a469b1e43070d6502))
|
|
374
|
+
* **transcripts:** close the store-slug character class instead of widening it ([580f12d](https://github.com/event4u-app/agent-config/commit/580f12ddb9e1dc1c2d0a5ca9d0d2961707fa3b76))
|
|
375
|
+
* **evidence:** a worktree location is not a verdict subject ([351f245](https://github.com/event4u-app/agent-config/commit/351f245b946d5ec186d454888dfa65764003de32))
|
|
376
|
+
* **review:** stop the findings artefact citing a path that is the finding ([3dc1f86](https://github.com/event4u-app/agent-config/commit/3dc1f863d6c15b1afdccf0700897cc463eb80ccb))
|
|
377
|
+
* **council:** close the seven review findings, including two tests of mine that could not fail ([368c895](https://github.com/event4u-app/agent-config/commit/368c895d78d50b79520b686ade54e7d9aeddfe76))
|
|
378
|
+
* **council:** the spawned member answered the caller's hooks, and held tools it never needed ([67efa72](https://github.com/event4u-app/agent-config/commit/67efa720e380e54989c0e95b14285b729f5e279b))
|
|
379
|
+
* **council:** gemini rejects --system too, and two members dropped the system prompt entirely ([9faee19](https://github.com/event4u-app/agent-config/commit/9faee19e22fcf51cd21c04b7b12bd0a4da7bfb4e))
|
|
380
|
+
* **council:** close six of the eight review findings ([01c7b1f](https://github.com/event4u-app/agent-config/commit/01c7b1fb23ecfee991477d5c086ebc977fa5720b))
|
|
381
|
+
* **roadmap:** make the PR the end condition of /roadmap:next, not a step ([0184f3b](https://github.com/event4u-app/agent-config/commit/0184f3b92c8ce975c6f9eab815060f09e0479149))
|
|
382
|
+
* **council:** print the post-run quorum, not only the pre-run one ([cd8e518](https://github.com/event4u-app/agent-config/commit/cd8e518c115b2b873e2c85fc8aaf1c85edc37f67))
|
|
383
|
+
* **council:** codex exec has no --system flag, so stop passing one ([990d698](https://github.com/event4u-app/agent-config/commit/990d6982ff7f79c1979a96e5b8a37beaa788e65c))
|
|
384
|
+
* **review:** close the R2 findings, one of them by admitting the fix was half-built ([ff8be31](https://github.com/event4u-app/agent-config/commit/ff8be31c5aea39a2b85874b1d1224f463a12b0d7))
|
|
385
|
+
* **session-eol:** stop recommending /clear without checking the envelope exists ([ee27132](https://github.com/event4u-app/agent-config/commit/ee2713277230081929096719893739f64b416913))
|
|
386
|
+
* **session-recycle:** refuse a write into an unanchored working directory ([825df09](https://github.com/event4u-app/agent-config/commit/825df094771c44bbab37de44ea03c713e39980cd))
|
|
387
|
+
|
|
388
|
+
### Documentation
|
|
389
|
+
|
|
390
|
+
* **roadmaps:** archive the symptom-driven harvest loop, fully executed ([d8ddccb](https://github.com/event4u-app/agent-config/commit/d8ddccb8707be0e39b15106f5181964c6f32f531))
|
|
391
|
+
* **roadmaps:** adopt the four August plans plus their program layer ([f84ba70](https://github.com/event4u-app/agent-config/commit/f84ba70e4bc56c9413d05ae6f9aa0189c3e629d1))
|
|
392
|
+
* **review:** re-bind the skip declaration to the Phase 2 re-cut scope ([ceac026](https://github.com/event4u-app/agent-config/commit/ceac02600bc198309163b7d269b87c6c648e4049))
|
|
393
|
+
* **roadmap:** re-cut Phase 2 to the downstream evidence control, cancel Phase 3 ([614f3df](https://github.com/event4u-app/agent-config/commit/614f3dfdfe6f4eb3e0c805769bd19ad1846c61ed))
|
|
394
|
+
* **contracts:** correct the prompt-channel residual — the prompt IS readable ([35a7796](https://github.com/event4u-app/agent-config/commit/35a7796ce728c6c6e70d10d813eb0da083c343bb))
|
|
395
|
+
* **roadmap:** corpus knowledge skills — the compiler gap, with eight corrections to the source ([c428ac6](https://github.com/event4u-app/agent-config/commit/c428ac61f8da7aa8e83f0f71758166fcf7e2eb42))
|
|
396
|
+
* **review:** declare the structured-guard-input measurement a no-code-surface skip ([44c5092](https://github.com/event4u-app/agent-config/commit/44c5092c522fbf4cff0db2ade5e731266c521784))
|
|
397
|
+
* **evidence:** measure the three Phase-1 falsifiers before building the field ([e817d50](https://github.com/event4u-app/agent-config/commit/e817d5084d67d5d937e65fcf86926ab4e640a566))
|
|
398
|
+
* **contracts:** state which text a guard reads, pre- or post-expansion ([953e7c1](https://github.com/event4u-app/agent-config/commit/953e7c1efca019061ba37842726fcf8fd27a198e))
|
|
399
|
+
* **review:** declare the waiter-discipline completion a no-code-surface skip ([cf2019e](https://github.com/event4u-app/agent-config/commit/cf2019ea2da0473ee36906f99b98a76be50541fa))
|
|
400
|
+
* **roadmap:** regenerate the dashboard after resolving the merge ([f2e6179](https://github.com/event4u-app/agent-config/commit/f2e617964b360f61d3cf32cf3094564498f25f44))
|
|
401
|
+
* **roadmap:** risk register for the structured-guard-input plan ([224eda9](https://github.com/event4u-app/agent-config/commit/224eda90be5f1918bc0f59cf6aa0072ef0c259a1))
|
|
402
|
+
* **council:** record the convergence and the work it does not fit in ([806e40c](https://github.com/event4u-app/agent-config/commit/806e40c25dbc148d51cccd51438c6622c451f9bc))
|
|
403
|
+
* **roadmap:** close zero-settings 2.1, 2.2 and 4.1, and re-date the blocker ([9acf679](https://github.com/event4u-app/agent-config/commit/9acf679f83a5ec260cc0b8be73aa98cd5bb3a219))
|
|
404
|
+
* **roadmap:** regenerate the dashboard after the merge ([945d614](https://github.com/event4u-app/agent-config/commit/945d6148a4e1cda1f01bdd8da769b58bd66a880e))
|
|
405
|
+
* **roadmap:** record that a failed council attempt still spends quota ([d6e6f11](https://github.com/event4u-app/agent-config/commit/d6e6f11ab78b2ec593098b3e850be94e7e342800))
|
|
406
|
+
* **roadmap:** close zero-settings 2.1, 2.2 and 4.1; record why 3.1 and 3.2 stay open ([c5499d9](https://github.com/event4u-app/agent-config/commit/c5499d94529da815709afa2d9776b69acc6ee5b4))
|
|
407
|
+
* **settings:** the telegraph rule states its own scope, and four contracts stop naming a dead key ([d805133](https://github.com/event4u-app/agent-config/commit/d805133257302e0beaa732cb1dd33ee413ceb4a6))
|
|
408
|
+
* **settings:** republish the counts, the floor, and the reclassification argument ([e53a799](https://github.com/event4u-app/agent-config/commit/e53a7992f4eb49b0859a267c7814434a263fdf4e))
|
|
409
|
+
* **audit:** record the cross-project session audit and its refusals ([dddafe9](https://github.com/event4u-app/agent-config/commit/dddafe91e36f2eceb243d8292e1da087eeff00d0))
|
|
410
|
+
* **review:** re-bind the adapter-follow-up artefact to the fixed scope ([783b784](https://github.com/event4u-app/agent-config/commit/783b784456429ff897538f23ffd83250c8e67b89))
|
|
411
|
+
* **review:** record the R2 findings on the adapter follow-up before fixing them ([a910931](https://github.com/event4u-app/agent-config/commit/a910931b3fe915c97902b90ecdea9540d4b07284))
|
|
412
|
+
* **review:** re-bind the context manifest, not only the marker ([3a22d35](https://github.com/event4u-app/agent-config/commit/3a22d357e7d6f5c93e4a8b855a58dd423762c09f))
|
|
413
|
+
* **review:** re-bind the R2 artefact to the fixed scope ([e6b4ce8](https://github.com/event4u-app/agent-config/commit/e6b4ce8e968d54a5bb22ca0b8d9f0d36ee7069fb))
|
|
414
|
+
* **review:** record the R2 completion review before the fixes ([169fcfd](https://github.com/event4u-app/agent-config/commit/169fcfd9d454ef9951c698783ea8859ff94462a4))
|
|
415
|
+
* **evidence:** task-completeness measures 0 of 3 precision — detector D is not built ([a7f6ffd](https://github.com/event4u-app/agent-config/commit/a7f6ffd459c7b5f19db087b31ccd42de5a85504b))
|
|
416
|
+
* **roadmap:** close zero-settings Phase 1 + 4.2, file the consent blocker ([99e6df2](https://github.com/event4u-app/agent-config/commit/99e6df2aebfae9433eff3ba7ce24c46090706196))
|
|
417
|
+
* **settings:** classify all 140 leaves and ratchet the derivable surface ([4a40578](https://github.com/event4u-app/agent-config/commit/4a405780354a7432d615373577f2e2f0bba4efa6))
|
|
418
|
+
* **review:** ship the reviewer prompt and scope beside the verdict ([0e57c8e](https://github.com/event4u-app/agent-config/commit/0e57c8e27621350fe086304b6f8f4f9143ffb8f4))
|
|
419
|
+
* **review:** re-bind the R2 artefact to the fixed scope, dispositions terminal ([8492864](https://github.com/event4u-app/agent-config/commit/8492864e2a6540fad5d1970cf76ae6a0dea2259c))
|
|
420
|
+
* **evidence:** pre-register the bar for detector D, contamination disclosed ([ee3f43f](https://github.com/event4u-app/agent-config/commit/ee3f43faca834a44eaaf3dab1770e9f422aeae9c))
|
|
421
|
+
* **review:** record the R2 findings before fixing any of them ([a151f36](https://github.com/event4u-app/agent-config/commit/a151f368422afbd18cf1f81175e69129acfa0e05))
|
|
422
|
+
* **roadmap:** close the rootless-write roadmap and record the sibling inventory ([4f5447a](https://github.com/event4u-app/agent-config/commit/4f5447a5ce022adf8e356ebc93419cababa1af0a))
|
|
423
|
+
|
|
424
|
+
### Refactoring
|
|
425
|
+
|
|
426
|
+
* **settings:** delete the five keys nothing ever read ([94b9134](https://github.com/event4u-app/agent-config/commit/94b913481610deb1e981760280019c7ef0ae4aa1))
|
|
427
|
+
|
|
428
|
+
### Tests
|
|
429
|
+
|
|
430
|
+
* **settings:** pin what a deleted unread key can and cannot do ([db0c6bd](https://github.com/event4u-app/agent-config/commit/db0c6bdba4eef271ae6803e4adb12c202d14ee2b))
|
|
431
|
+
* **settings:** pin the inverted invariant per deleted key ([e87af34](https://github.com/event4u-app/agent-config/commit/e87af347d9f0eacfd5f753737fadc85813b181fb))
|
|
432
|
+
|
|
433
|
+
### Build
|
|
434
|
+
|
|
435
|
+
* take the trunk install bundle instead of a worktree rebuild ([f3ef74c](https://github.com/event4u-app/agent-config/commit/f3ef74c800b492cab4327953de7bb8af706e83bc))
|
|
436
|
+
* regenerate the derived outputs after the reconciliation merge ([50b4ce6](https://github.com/event4u-app/agent-config/commit/50b4ce6df13dff915ec0adbbe4f03f0f08475d02))
|
|
437
|
+
* rebuild the tracked install bundle after the schema deletion ([7b143ae](https://github.com/event4u-app/agent-config/commit/7b143ae4e0611f478e0ddd86c8e837d01a738940))
|
|
438
|
+
|
|
439
|
+
### Chores
|
|
440
|
+
|
|
441
|
+
* **index:** regenerate the artifact index and catalog for the new guideline ([5d2d563](https://github.com/event4u-app/agent-config/commit/5d2d56351048163930fba8c8871d4eaddb5d203b))
|
|
442
|
+
* **security:** backstop the anonymization obligation for one more harvest source ([0309b8e](https://github.com/event4u-app/agent-config/commit/0309b8efc7f304bdbbc1886701dad1706c22f543))
|
|
443
|
+
* **tests:** drop the template handle the trimmed assertion orphaned ([ed764a9](https://github.com/event4u-app/agent-config/commit/ed764a9e600d330e5a33d3c49981f2e7e84b840e))
|
|
444
|
+
* **tests:** finish the orphan chain the previous deletion opened ([9bc6020](https://github.com/event4u-app/agent-config/commit/9bc6020a9ddf9578b98898024a2191ffc480a906))
|
|
445
|
+
* **tests:** drop two dead declarations the changed-files linter surfaced ([2d7ff19](https://github.com/event4u-app/agent-config/commit/2d7ff19b3dba4584b83e393a5e6f6c2fdafdd816))
|
|
446
|
+
* **roadmap:** archive road-to-feedback-9-35, which merged complete but unarchived ([2e26094](https://github.com/event4u-app/agent-config/commit/2e26094de27c845466229c6e7842a8217ac3b21f))
|
|
447
|
+
* **roadmaps:** archive road-to-completion-loop, closed as a published null ([92f9b9a](https://github.com/event4u-app/agent-config/commit/92f9b9aa675cbc42cc81e7eb829e68d6ddd3c4b7))
|
|
448
|
+
|
|
449
|
+
Tests: 13506 (+95 since 10.1.0)
|
|
450
|
+
|
|
451
|
+
## [10.1.0](https://github.com/event4u-app/agent-config/compare/10.0.0...10.1.0) (2026-08-12)
|
|
452
|
+
|
|
453
|
+
### Release highlights
|
|
454
|
+
|
|
455
|
+
<!-- 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. -->
|
|
456
|
+
- **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 0992c92, 20a8606, 63aeba1.
|
|
348
457
|
- **Default changes + migration:** _none_
|
|
349
458
|
- **Security and correctness:** _none_
|
|
350
|
-
- **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in
|
|
459
|
+
- **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 0f3ce9b.
|
|
460
|
+
- **Known limitations:** _none_
|
|
461
|
+
|
|
462
|
+
### Features
|
|
463
|
+
|
|
464
|
+
* **untrusted-content:** tag external content where it enters, with an unforgeable boundary ([7a313ec](https://github.com/event4u-app/agent-config/commit/7a313ecfae4eadd06ff547a4a67d363a6758707b))
|
|
465
|
+
* **skill-schema:** structured runtime requirements, and the rule that gives them teeth ([63aeba1](https://github.com/event4u-app/agent-config/commit/63aeba1070af3d72bcaac0c7f999788d3b833354))
|
|
466
|
+
|
|
467
|
+
### Bug Fixes
|
|
468
|
+
|
|
469
|
+
* **roadmap,context:** satisfy the two gates this branch newly tripped ([e61d461](https://github.com/event4u-app/agent-config/commit/e61d46142a9dc41841c98360377cc89176ce1057))
|
|
470
|
+
* **roadmap-archival:** an open blocker outlives its steps, and the sweep did not look ([710dc26](https://github.com/event4u-app/agent-config/commit/710dc266a27a82aad9a527c525650e8d43accfdc))
|
|
471
|
+
* **review:** close all eight R2 findings, one of them by admitting a gap instead of papering it ([0992c92](https://github.com/event4u-app/agent-config/commit/0992c92219364bc646e78c29fa3072b5e46361ef))
|
|
472
|
+
* **diff:** drop a regenerated report my git add -A swept in ([3aec031](https://github.com/event4u-app/agent-config/commit/3aec031b160a8bc676053be370b2fddfbeab250c))
|
|
473
|
+
* **skill-schema:** rename requires to runtime_requires — the key was already taken ([20a8606](https://github.com/event4u-app/agent-config/commit/20a86065cc5d9c86e9fdf0710c51ddf850ca7ae4))
|
|
474
|
+
* **roadmap:** anonymize the harvest source per source-confidentiality ([195e444](https://github.com/event4u-app/agent-config/commit/195e444a7b1f9d7d05ac5cb768b0be17a1ac58ea))
|
|
475
|
+
|
|
476
|
+
### Documentation
|
|
477
|
+
|
|
478
|
+
* **changelog:** curate the 10.0.0 head, which shipped the same placeholder hours later ([0f3ce9b](https://github.com/event4u-app/agent-config/commit/0f3ce9b22c1858e12556a4b0fe95bec1931dde91))
|
|
479
|
+
* **roadmap:** the verified residue of five external release reviews ([a25579f](https://github.com/event4u-app/agent-config/commit/a25579fdf4d13cf6057ccdfeba5dc87990dd11e0))
|
|
480
|
+
* **analysis:** threat-model the confirmation store, and enumerate the buried decisions ([8b18f1c](https://github.com/event4u-app/agent-config/commit/8b18f1c4a850a9b08906aceccbe3562f381de7c3))
|
|
481
|
+
* **records:** three figures five reviews keep re-deriving, corrected at the source ([1612a70](https://github.com/event4u-app/agent-config/commit/1612a70e3e13daa0572fefb4803533708c1273f0))
|
|
482
|
+
* **changelog:** curate the 9.36.0 head that shipped its own placeholder ([83a3922](https://github.com/event4u-app/agent-config/commit/83a3922f63efbe5aca280e775acc85b36573c3f4))
|
|
483
|
+
* **review:** re-bind after the count correction ([9dd75ec](https://github.com/event4u-app/agent-config/commit/9dd75ecf178152641f8744a8f1b81f045befde7b))
|
|
484
|
+
* **roadmap:** correct the test count the review fixes moved ([ec52c42](https://github.com/event4u-app/agent-config/commit/ec52c421ba69dc85ee78095323f8495b93f3dd26))
|
|
485
|
+
* **review:** re-bind the R2 artefact to the fixed scope, dispositions terminal ([e601648](https://github.com/event4u-app/agent-config/commit/e6016487e883f611b2b7b989f23ed682796a6a73))
|
|
486
|
+
* **review:** record the R2 findings before fixing any of them ([1cf8d78](https://github.com/event4u-app/agent-config/commit/1cf8d787c015f51261bdd22b7388e47d127003f6))
|
|
487
|
+
* **roadmap:** add the Acceptance Criteria the completion review needs to bind to ([f35becd](https://github.com/event4u-app/agent-config/commit/f35becd885c09a5ac7f5a678adf29a360e776efa))
|
|
488
|
+
* **roadmap:** follow the schema key rename, and record why the obvious name was unavailable ([5720847](https://github.com/event4u-app/agent-config/commit/572084763fef97eb66fa91fd722d75a9c527440a))
|
|
489
|
+
* **roadmap:** the executable-payload harvest, with four source claims corrected ([2f4d8a8](https://github.com/event4u-app/agent-config/commit/2f4d8a8be5891d6045d4605a4a6d8fe3dc28a65e))
|
|
490
|
+
|
|
491
|
+
### Tests
|
|
492
|
+
|
|
493
|
+
* **council-cli:** the quota case asserted a property of the developer machine ([35037f9](https://github.com/event4u-app/agent-config/commit/35037f96d3e631d6ee1a235415e716e2a29f8f8c))
|
|
494
|
+
|
|
495
|
+
Tests: 13411 (+27 since 10.0.0)
|
|
496
|
+
|
|
497
|
+
## [10.0.0](https://github.com/event4u-app/agent-config/compare/9.36.0...10.0.0) (2026-08-12)
|
|
498
|
+
|
|
499
|
+
### Release highlights
|
|
500
|
+
|
|
501
|
+
- **Behaviour changes:** council transport is **resolved per machine rather than
|
|
502
|
+
configured** — the breaking change this major carries (4eda4ff); every member
|
|
503
|
+
now resolves as `auto`, so a configured CLI call budget applies wherever a
|
|
504
|
+
council config exists. The turn-end gate is armed unconditionally and loses its
|
|
505
|
+
settings surface (42cd613). Conformance round 7 records its downgrades rather
|
|
506
|
+
than restating them (030ca0d, c1bc2aa).
|
|
507
|
+
- **Default changes + migration:** _none_
|
|
508
|
+
- **Security and correctness:** _none_
|
|
509
|
+
- **Honest nulls:** a blocker whose resolution condition no passage of time could
|
|
510
|
+
satisfy — a default-OFF gate cannot soak, so the switch removal discharges it
|
|
511
|
+
and the original wording stays verbatim beside the resolution, because the
|
|
512
|
+
unsatisfiable condition is itself the finding (7c6b404).
|
|
351
513
|
- **Known limitations:** _none_
|
|
352
514
|
|
|
353
515
|
### BREAKING CHANGES
|
|
@@ -400,8 +562,13 @@ Tests: 13384 (+51 since 9.36.0)
|
|
|
400
562
|
|
|
401
563
|
### Release highlights
|
|
402
564
|
|
|
403
|
-
|
|
404
|
-
|
|
565
|
+
- **Behaviour changes:** the demand gate reads `project.audience` and is inert at
|
|
566
|
+
`self` — a market-demand ladder no longer fires on a project that intends no
|
|
567
|
+
market (9f69017). The two UI rules stop claiming the `ui-route-nudge` concern
|
|
568
|
+
reads their `keyword:` triggers; it does not, and six surfaces said it did
|
|
569
|
+
(3c20d47). The design skills now reach the consumers they were written for
|
|
570
|
+
(72bb1bc). The CI-side change in 924cad8 is internal to the pipeline and
|
|
571
|
+
changes no consumer-visible behaviour.
|
|
405
572
|
- **Default changes + migration:** _none_
|
|
406
573
|
- **Security and correctness:** _none_
|
|
407
574
|
- **Honest nulls:** _none_
|
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/rules/) [](dist/agent-src/commands/) [](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
|
|
|
@@ -224,6 +224,11 @@ Chunked commits (the agent picks the split — never ask how, per
|
|
|
224
224
|
[`/create-pr`](../../git/pr/create.md): archival sweep, preflight,
|
|
225
225
|
push, PR opened **ready for review** (not draft).
|
|
226
226
|
|
|
227
|
+
This step is where the run **ends**, not a step it may stop before — see the
|
|
228
|
+
second Iron Law below. The invocation already authorised the push and the PR;
|
|
229
|
+
asking for them again is the re-ask
|
|
230
|
+
[`no-cheap-questions`](../../rules/no-cheap-questions.md) § IL 5 forbids.
|
|
231
|
+
|
|
227
232
|
### 7. CI — fix locally, honour the push gate
|
|
228
233
|
|
|
229
234
|
Follow [`/create-pr` § 4d](../../git/pr/create.md): wait for the
|
|
@@ -258,6 +263,39 @@ A ROADMAP CLAIMED "IN FLIGHT", "MERGED", OR "DONE" WITHOUT A LIVE CHECK
|
|
|
258
263
|
AT THE MOMENT OF THE CLAIM IS AN UNVERIFIED CLAIM.
|
|
259
264
|
```
|
|
260
265
|
|
|
266
|
+
## Iron Law — the run ends at a PR, never at an offer to open one
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
STEP 6 IS AN END CONDITION, NOT A STEP THE RUN MAY STOP BEFORE REACHING.
|
|
270
|
+
A RUN THAT PRODUCED COMMITS ENDS WITH A PR OPENED FOR REVIEW.
|
|
271
|
+
THE INVOCATION IS THE ACCEPT — IT COVERS THE BRANCH, THE CHUNKED COMMITS,
|
|
272
|
+
THE FIRST PUSH TO THAT BRANCH, AND THE PR. NEVER RE-ASK FOR THEM.
|
|
273
|
+
"SAY THE WORD AND I'LL OPEN IT" IS A PROMISSORY CLOSE, WHICH
|
|
274
|
+
verify-before-complete ALREADY FORBIDS. SO IS ENDING ON COMMITTED-BUT-UNPUSHED
|
|
275
|
+
WORK WITHOUT NAMING IT.
|
|
276
|
+
STOPPING EARLIER IS LEGAL ONLY AS ONE OF process-full's FIVE NAMED HALTS,
|
|
277
|
+
A HARD-FLOOR TRIGGER, OR AN N=3 EXHAUSTION — AND THE HALT IS NAMED IN THE
|
|
278
|
+
REPORT TOGETHER WITH WHAT IS STILL UNPUSHED.
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**What this does NOT lift.** § 7's re-push restriction stands unchanged: the
|
|
282
|
+
invocation covers the *first* push that opens the PR, never the pushes that
|
|
283
|
+
follow a CI fix. Those are Hard-Floor triggers needing the user's word that turn
|
|
284
|
+
([`non-destructive-by-default`](../../rules/non-destructive-by-default.md)), and
|
|
285
|
+
no reading of this law manufactures a per-PR standing mandate.
|
|
286
|
+
|
|
287
|
+
**Why it needed saying, measured on this command's own run.** A session screened
|
|
288
|
+
30 roadmaps, recovered from a live claim collision, picked, branched and did the
|
|
289
|
+
work — then closed with a status report and no PR, because § 6 read as a step in
|
|
290
|
+
a list rather than as the condition the run terminates on. The user had to ask
|
|
291
|
+
for the PR the invocation had already authorised. A step that can be narrated
|
|
292
|
+
instead of executed is not an obligation; an end condition is.
|
|
293
|
+
|
|
294
|
+
**Honest scope.** `enforced_by: none` — nothing inspects a chat turn for a
|
|
295
|
+
missing PR, so this is model-carried like the live screen above it. The
|
|
296
|
+
deterministic half is elsewhere and unchanged: `/create-pr` runs the archival
|
|
297
|
+
sweep and preflight, and CI gates the branch once the PR exists.
|
|
298
|
+
|
|
261
299
|
## Rules
|
|
262
300
|
|
|
263
301
|
- **One roadmap per invocation.** Never chain a second pick after the
|
|
@@ -83,10 +83,31 @@ When `personal.minimal_output: true`:
|
|
|
83
83
|
### Minimize tool calls
|
|
84
84
|
|
|
85
85
|
- Parallel reads — don't read 5 files sequentially.
|
|
86
|
-
- Regex search over full file reads. View specific line ranges.
|
|
87
86
|
- One codebase search call with all symbols — not 5 separate.
|
|
88
87
|
- Short question → short answer. Summary tables only for 3+ items.
|
|
89
88
|
|
|
89
|
+
### Size-gated read procedure (the 800-line threshold)
|
|
90
|
+
|
|
91
|
+
The rule states the obligation; this is how to discharge it. Three steps, in
|
|
92
|
+
order, and each one narrows the next:
|
|
93
|
+
|
|
94
|
+
1. **Size** — `wc -l <file>`. Under the threshold, stop here and read it.
|
|
95
|
+
2. **Shape** — a structural grep for the anchors you need, emitting offsets:
|
|
96
|
+
`grep -nE '^(class|function|def|export|## )' <file>` for a map, or
|
|
97
|
+
`grep -n '<the symbol>' <file>` when you know what you are after.
|
|
98
|
+
3. **Slice** — a ranged read around those offsets only (the host's
|
|
99
|
+
`offset`/`limit` read, or `sed -n 'A,Bp'`), widened once if the slice
|
|
100
|
+
straddles a boundary.
|
|
101
|
+
|
|
102
|
+
Two failure modes this replaces. **Blind full read:** loading a 3,000-line file
|
|
103
|
+
to answer a question one function answers — the cost is paid on every later turn
|
|
104
|
+
that carries it. **Blind slice:** reading lines 1–200 of an unknown file and
|
|
105
|
+
guessing the rest, which is the probe skipped rather than performed.
|
|
106
|
+
|
|
107
|
+
The step-2 grep is not a second probe of the same file for the same fact — it
|
|
108
|
+
returns information step 1 did not have, so it is one operation with step 3, per
|
|
109
|
+
the enumerated-set carve-out.
|
|
110
|
+
|
|
90
111
|
### Exceptions
|
|
91
112
|
|
|
92
113
|
- Small output (< 30 lines) — read directly.
|
|
@@ -38,7 +38,7 @@ Live Phase 1 schema (see [`templates/agent-settings.md`](../../templates/agent-s
|
|
|
38
38
|
| `verbosity.offer_council_in_delivery` | When `false`, delivery commands skip the optional "run Council on this?" offer. |
|
|
39
39
|
| `verbosity.post_action_reports` | `off` / `minimal` / `full` — multi-line status blocks after a successful action. |
|
|
40
40
|
| `verbosity.intent_announcements` | When `false`, writers must not generate "Let me…", "Now I will…", "Found it" openers. |
|
|
41
|
-
| `telegraph.
|
|
41
|
+
| `telegraph.speak` | When `false` (the shipped default) the telegraph-speak rule does not ship at all; when `true` its own carve-out list states the grammar's scope — options blocks, Iron-Law literals, code, and paths stay byte-stable. |
|
|
42
42
|
|
|
43
43
|
Phase 10 adds `verbosity.script_output` (`silent` / `minimal` / `verbose`) and `verbosity.taskfile_command_echo` (`true` / `false`); writer artifacts cite this row when those land.
|
|
44
44
|
|
|
@@ -72,6 +72,45 @@ Calling the **same tool** more than **2 times in a row** with similar parameters
|
|
|
72
72
|
**"Similar parameters" is the load-bearing word — an enumerated set is not a loop.** Walking N *declared, distinct* targets (a downstream-caller sweep per [`downstream-changes`](downstream-changes.md), an override chain, the members of a grep result) is one operation whose parameters differ every call. Counting it as N repetitions makes `downstream-changes`' "find **ALL** callers, tests, imports" unsatisfiable — it cannot be done in two calls. The loop this detects is *repetition without new information*: same target, same parameters, hoping for a different answer. Mirrors the same carve-out in [`token-efficiency`](token-efficiency.md).
|
|
73
73
|
`sequentialthinking` is especially prone to loops: at most **once** per task, NEVER for simple file operations, command execution, or straightforward edits.
|
|
74
74
|
|
|
75
|
+
### Waiting is one waiter, never a fleet
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
ONE WAITER PER CONDITION. NEVER A TIMER AND A WATCHER FOR THE SAME WAIT.
|
|
79
|
+
NEVER START A NEW WAITER WHILE ONE IS STILL LIVE FOR THAT CONDITION.
|
|
80
|
+
A NUMBER THAT CHANGED IS NOT NEW INFORMATION UNLESS IT CHANGES WHAT YOU DO NEXT.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Waiting on something external — CI, a deploy, a queue, a background job — is the
|
|
84
|
+
one shape the loop test above systematically misses, in both of its clauses.
|
|
85
|
+
|
|
86
|
+
- **"Same parameters" fails.** A `sleep 240` followed by `sleep 420` followed by
|
|
87
|
+
`sleep 595` are three different calls by any parameter comparison, so nothing
|
|
88
|
+
reads them as repetition.
|
|
89
|
+
- **"Repetition without new information" fails too**, and this is the subtler
|
|
90
|
+
half: the poll genuinely returns a different value each round — 31 green, then
|
|
91
|
+
34, then 36 — which *feels* like progress. It is not information unless a
|
|
92
|
+
different digit would make you act differently. It would not: the only actions
|
|
93
|
+
available were wait, or stop and report, and 34 licensed neither more than 31
|
|
94
|
+
did. **The discriminator is the decision, not the digits.**
|
|
95
|
+
|
|
96
|
+
So state it separately: pick **one** waiter for the condition and let it finish.
|
|
97
|
+
Where the harness re-invokes on completion, waiting costs nothing and polling
|
|
98
|
+
costs a turn per expiry — and every stacked waiter is a turn that arrives *after*
|
|
99
|
+
the answer already did. Where it does not, one `until <condition>` loop is still
|
|
100
|
+
one call rather than N.
|
|
101
|
+
|
|
102
|
+
**Measured once, at n=1, and worth naming for its shape rather than its
|
|
103
|
+
frequency** (2026-08-12): a CI wait started roughly 35 background commands —
|
|
104
|
+
a fresh timer *and* a fresh condition-watcher per round, none cancelled when the
|
|
105
|
+
next pair started. CI settled with about fifteen still live; each then expired
|
|
106
|
+
and produced an empty turn. Nothing was corrupted, which is exactly why it ran
|
|
107
|
+
so long: every individual step looked reasonable.
|
|
108
|
+
|
|
109
|
+
**Enforcement: none, and the reason is structural.** The `context-hygiene` hook
|
|
110
|
+
counts tool calls; a waiter is indistinguishable from any other call at that
|
|
111
|
+
layer, and nothing in the envelope says two live waiters are watching one
|
|
112
|
+
condition. This is model-carried on every host.
|
|
113
|
+
|
|
75
114
|
## Read-Loop Detection — the 15 / 25 rule
|
|
76
115
|
|
|
77
116
|
```
|
|
@@ -74,8 +74,9 @@ from. Where a consumer has enabled it, it **exempts** skills marked
|
|
|
74
74
|
- Preserve all worked examples, decision tables, and code blocks verbatim
|
|
75
75
|
|
|
76
76
|
This exemption is limited to the skill's guidance content; reply prose from the
|
|
77
|
-
*agent* (not from the skill body) remains subject to telegraph-speak
|
|
78
|
-
|
|
77
|
+
*agent* (not from the skill body) remains subject to telegraph-speak wherever
|
|
78
|
+
that rule ships at all (`telegraph.speak`), within the carve-outs the rule
|
|
79
|
+
itself names.
|
|
79
80
|
|
|
80
81
|
## Value-over-budget escalation
|
|
81
82
|
|
|
@@ -52,6 +52,28 @@ cohorts (batch), or a cost-aware model/effort decision → route via the
|
|
|
52
52
|
[`token-optimizer`](../skills/token-optimizer/SKILL.md) index branch
|
|
53
53
|
(`api-cost-levers` row) — single source of truth for the billing levers.
|
|
54
54
|
|
|
55
|
+
## Size-gated reads — probe a large file before loading it whole
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
A FILE OVER THE THRESHOLD IS PROBED, NEVER LOADED WHOLE ON SPEC.
|
|
59
|
+
SIZE CHECK → STRUCTURAL GREP → BOUNDED SLICE. FULL READ BELOW IT.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Threshold: 800 lines.** Above it, establish the file's shape before its
|
|
63
|
+
content — size, then a structural grep for the offsets that matter, then a
|
|
64
|
+
ranged read of those offsets. Below it, just read it: a probe you did not need
|
|
65
|
+
costs a call and teaches nothing.
|
|
66
|
+
|
|
67
|
+
The number is a **stated default, not a measured optimum** — said plainly rather
|
|
68
|
+
than implying a derivation it does not have. *Revisit-if:* a run records a
|
|
69
|
+
probe-then-slice that cost more than the full read would have, or the host's
|
|
70
|
+
ranged-read primitive changes its own default. Either falsifies the number, not
|
|
71
|
+
the obligation.
|
|
72
|
+
|
|
73
|
+
Additive: the repetition discriminator above is untouched, an enumerated
|
|
74
|
+
multi-file sweep stays ONE operation, and re-probing a file whose shape you
|
|
75
|
+
already established this session is the loop, not the fix.
|
|
76
|
+
|
|
55
77
|
## Mechanics
|
|
56
78
|
|
|
57
79
|
Anti-loop patterns, act-skip-narration / stop-early / minimize-tool-calls clauses, and small-output / debugging exceptions: [`token-efficiency-mechanics`](../contexts/communication/rules-auto/token-efficiency-mechanics.md). Precedence: never overrides `user-interaction` or command rules.
|
|
@@ -335,6 +335,23 @@ function archive_completed(
|
|
|
335
335
|
if (stats.open_ !== 0 || stats.deferred !== 0) {
|
|
336
336
|
continue; // not complete
|
|
337
337
|
}
|
|
338
|
+
// An unresolved blocker outlives its steps. Closing every box does not
|
|
339
|
+
// answer a question the roadmap raised for a human, and archiving on
|
|
340
|
+
// step-count alone is how `b-highlights-mechanism` left the active tree
|
|
341
|
+
// unanswered in the 9.29 roadmap — four releases before the failure it
|
|
342
|
+
// predicted shipped in the 9.36.0 changelog head. Same discipline
|
|
343
|
+
// `roadmap-progress-sync` Iron Law 3 applies to `[~]` steps: a roadmap
|
|
344
|
+
// carrying an open decision stays visible until the decision is made.
|
|
345
|
+
const open_blockers = stats.open_blockers;
|
|
346
|
+
if (open_blockers.length > 0) {
|
|
347
|
+
const ids = open_blockers.map((b) => b.id).join(', ');
|
|
348
|
+
process.stderr.write(
|
|
349
|
+
` ⚠️ ${stats.rel}: all steps closed but ${open_blockers.length} ` +
|
|
350
|
+
`blocker(s) still open (${ids}) — not archived. Resolve them, ` +
|
|
351
|
+
'or record the decision, then re-run the sweep.\n',
|
|
352
|
+
);
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
338
355
|
const old_rel = `agents/roadmaps/${stats.rel}`;
|
|
339
356
|
if (changed_only && !(touched as Set<string>).has(old_rel)) {
|
|
340
357
|
continue; // complete, but not this branch's work
|
|
@@ -228,10 +228,12 @@ Three vendor CLIs are wired:
|
|
|
228
228
|
model: claude-sonnet-4-5
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
-
- **OpenAI / Codex** — invokes `codex exec --json
|
|
232
|
-
newline-delimited JSON event stream, pulling text from
|
|
233
|
-
`item.completed` and tokens from `turn.completed`. Session id
|
|
234
|
-
is
|
|
231
|
+
- **OpenAI / Codex** — invokes `codex exec --json -` with the prompt piped on
|
|
232
|
+
stdin, and walks the newline-delimited JSON event stream, pulling text from
|
|
233
|
+
`item.completed` and tokens from `turn.completed`. Session id is preserved.
|
|
234
|
+
Unlike the Anthropic client, there is **no separate system-prompt channel**:
|
|
235
|
+
`codex exec` has no `--system` flag, so a system prompt is prepended to the
|
|
236
|
+
user prompt in the same payload.
|
|
235
237
|
|
|
236
238
|
```yaml
|
|
237
239
|
members:
|
|
@@ -244,12 +246,23 @@ Three vendor CLIs are wired:
|
|
|
244
246
|
- **Google / Gemini** — invokes `gemini --output-format json` with
|
|
245
247
|
the prompt piped on stdin, parses the `response` + `stats.models.<m>.tokens`
|
|
246
248
|
envelope. OAuth consent must be granted once interactively before
|
|
247
|
-
the CLI is usable from a non-interactive shell.
|
|
249
|
+
the CLI is usable from a non-interactive shell. Like Codex and unlike Claude,
|
|
250
|
+
it has **no system-prompt flag** — `--system` is rejected outright with
|
|
251
|
+
`Unknown argument: system` — so the system prompt is prepended to the piped
|
|
252
|
+
payload.
|
|
253
|
+
|
|
254
|
+
Two caveats before enabling it, both measured 2026-08-12 and neither resolved.
|
|
255
|
+
The CLI's own `--help` says `-p/--prompt` is what selects non-interactive
|
|
256
|
+
mode, and this invocation passes neither `-p` nor the `query` positional;
|
|
257
|
+
whether piped stdin alone keeps it headless is **unestablished**. And the
|
|
258
|
+
free tier now refuses this client outright with `IneligibleTierError`, so a
|
|
259
|
+
round-trip could not be completed here at all. Enable it only if you can
|
|
260
|
+
confirm both on your own account.
|
|
248
261
|
|
|
249
262
|
```yaml
|
|
250
263
|
members:
|
|
251
264
|
gemini:
|
|
252
|
-
enabled:
|
|
265
|
+
enabled: false # see the two caveats above before flipping this
|
|
253
266
|
mode: cli
|
|
254
267
|
model: gemini-2.5-pro
|
|
255
268
|
```
|
|
@@ -265,6 +278,15 @@ substitutes.
|
|
|
265
278
|
their community CLIs DO consume the API key and DO NOT bypass
|
|
266
279
|
per-token billing — the contract doc warns explicitly.
|
|
267
280
|
|
|
281
|
+
Both take a single `-p <prompt>` and have no second channel, so the system
|
|
282
|
+
prompt is folded into that same value. Until 2026-08-12 it was **discarded**,
|
|
283
|
+
and these two members answered every question with no role, no neutrality
|
|
284
|
+
framing and no output contract while the run counted the reply as a peer
|
|
285
|
+
verdict. Two consequences worth knowing: their whole prompt travels on argv, so
|
|
286
|
+
a very large one can fail with `os_error: E2BIG` (the response carries a `hint`
|
|
287
|
+
saying so), and because their CLIs report no usage block, the input side of
|
|
288
|
+
their cost is an estimate rather than a provider figure.
|
|
289
|
+
|
|
268
290
|
### Cost-gate bypass for non-billable members
|
|
269
291
|
|
|
270
292
|
`ExternalAIClient.billable` is the contract. Clients with
|
|
@@ -118,7 +118,7 @@ A future `telegraph-v2.md` will tabulate the realised input-token saving against
|
|
|
118
118
|
|
|
119
119
|
## Cross-references
|
|
120
120
|
|
|
121
|
-
- [`telegraph-speak`](../../rules/telegraph-speak.md) — runtime rule the script mirrors for input-side targets;
|
|
121
|
+
- [`telegraph-speak`](../../rules/telegraph-speak.md) — runtime rule the script mirrors for input-side targets; that output-side rule does **not** gate this script (input-side runs regardless).
|
|
122
122
|
- [`src/scripts/validate_safe_paths.ts`](../../../src/scripts/validate_safe_paths.ts) — Phase 0 gate; ported from upstream Telegraph `63a91ec`.
|
|
123
123
|
- [`src/scripts/condense_memory.ts`](../../../src/scripts/condense_memory.ts) — implementation.
|
|
124
124
|
- [`tests/scripts/condense_memory.test.ts`](../../../tests/scripts/condense_memory.test.ts) — regression locks for each carve-out + idempotency + denylist.
|
|
@@ -22,7 +22,7 @@ packs:
|
|
|
22
22
|
* Rewriting an existing roadmap (phase restructure, goal pivot,
|
|
23
23
|
council-pass integration — not a checkbox flip)
|
|
24
24
|
* Drafting a phase block, exit criteria, or rollback section that
|
|
25
|
-
will land inside an existing roadmap
|
|
25
|
+
will land inside an existing roadmap — an operator **symptom** as the input has its own entry procedure: [`symptom-driven harvest`](../../../docs/guidelines/agent-infra/symptom-driven-harvest-loop.md)
|
|
26
26
|
|
|
27
27
|
Do NOT use this skill when:
|
|
28
28
|
|
|
@@ -56,6 +56,10 @@ INTENT
|
|
|
56
56
|
│ → cite markitdown (upstream: https://github.com/microsoft/markitdown)
|
|
57
57
|
│ Convert FIRST, then read the markdown — never paste raw binary.
|
|
58
58
|
│
|
|
59
|
+
├── Large file read (source / data / log already in the tree, > 800 lines)
|
|
60
|
+
│ → cite [token-efficiency § Size-gated reads](../../rules/token-efficiency.md)
|
|
61
|
+
│ (size → structural grep → bounded slice; never a full read on spec)
|
|
62
|
+
│
|
|
59
63
|
├── Repeated tool-call across N targets
|
|
60
64
|
│ → cite [token-efficiency](../../rules/token-efficiency.md)
|
|
61
65
|
│ (batch, parallelize, prune; one tool call > many)
|
|
@@ -81,7 +85,7 @@ INTENT
|
|
|
81
85
|
|---|---|---|---|
|
|
82
86
|
| `cli-output-handling` | `src/rules/cli-output-handling.md` | `verbose`, `tail`, `grep`, `CLI` | Wrap-tail-grep contract for any verbose command |
|
|
83
87
|
| `rtk-output-filtering` | `src/skills/rtk-output-filtering/SKILL.md` | `rtk`, `verbose`, `filter`, `wrap` | Project-local rtk filters; wrapper command |
|
|
84
|
-
| `token-efficiency` | `src/rules/token-efficiency.md` | `redirect`, `verbose`, `concise`, `tool` | Batch + parallelize tool calls; brevity floor |
|
|
88
|
+
| `token-efficiency` | `src/rules/token-efficiency.md` | `redirect`, `verbose`, `concise`, `tool`, `large file` | Batch + parallelize tool calls; brevity floor; size-gated reads (probe → grep → slice above 800 lines) |
|
|
85
89
|
| `agent-handoff` | `src/domains/meta/agent-handoff/command.md` | `handoff`, `fresh`, `chat`, `context`, `resume`, `session` | Session picker + generated handoff auto-seeding the next session |
|
|
86
90
|
| `direct-answers` | `src/rules/direct-answers.md` | `brevity`, `flattery`, `severity`, `tiered` | Iron-Law brevity floor (kernel) |
|
|
87
91
|
| `markitdown` | upstream: github.com/microsoft/markitdown | `PDF`, `DOCX`, `HTML`, `convert` | Document → markdown converter (authoritative-link only) |
|