@event4u/agent-config 9.15.0 → 9.17.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.
Files changed (157) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +1 -1
  3. package/CHANGELOG.md +74 -0
  4. package/README.md +1 -1
  5. package/dist/agent-src/commands/agent-handoff.md +100 -48
  6. package/dist/agent-src/commands/commit.md +1 -1
  7. package/dist/agent-src/commands/condense.md +19 -64
  8. package/dist/agent-src/commands/evals/agent-handoff.json +13 -1
  9. package/dist/agent-src/commands/memory/promote.md +14 -1
  10. package/dist/agent-src/commands/mode.md +9 -5
  11. package/dist/agent-src/commands/optimize/deep.md +72 -11
  12. package/dist/agent-src/contexts/authority/commit-mechanics.md +5 -5
  13. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  14. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  15. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +6 -1
  16. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +4 -1
  17. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +27 -1
  18. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +5 -2
  19. package/dist/agent-src/profiles/agency.yml +3 -3
  20. package/dist/agent-src/profiles/content_creator.yml +2 -2
  21. package/dist/agent-src/profiles/developer.yml +2 -2
  22. package/dist/agent-src/profiles/finance.yml +1 -1
  23. package/dist/agent-src/profiles/founder.yml +2 -2
  24. package/dist/agent-src/profiles/ops.yml +2 -2
  25. package/dist/agent-src/rules/architecture.md +2 -2
  26. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  27. package/dist/agent-src/rules/context-hygiene.md +3 -2
  28. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  29. package/dist/agent-src/rules/output-discipline.md +9 -2
  30. package/dist/agent-src/rules/token-budget-discipline.md +2 -2
  31. package/dist/agent-src/rules/user-interaction.md +3 -4
  32. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  33. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +4 -4
  34. package/dist/agent-src/skills/copilot-config/SKILL.md +1 -1
  35. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +7 -4
  36. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  37. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  38. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  39. package/dist/agent-src/skills/persona-writing/SKILL.md +2 -2
  40. package/dist/agent-src/skills/readme-reviewer/SKILL.md +2 -1
  41. package/dist/agent-src/skills/rule-writing/SKILL.md +4 -2
  42. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  43. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  44. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +3 -1
  45. package/dist/agent-src/skills/token-optimizer/SKILL.md +2 -2
  46. package/dist/agent-src/skills/ui-component-architect/SKILL.md +6 -3
  47. package/dist/agent-src/templates/agent-settings.md +13 -15
  48. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +6 -2
  49. package/dist/agent-src/templates/persona.md +2 -2
  50. package/dist/agent-src/templates/roadmaps.md +1 -1
  51. package/dist/agent-src/templates/rule.md +1 -1
  52. package/dist/agent-src/templates/skill.md +1 -1
  53. package/dist/cli/mcp/content.js +1 -1
  54. package/dist/cli/mcp/content.js.map +1 -1
  55. package/dist/cli/registry.js +1 -0
  56. package/dist/cli/registry.js.map +1 -1
  57. package/dist/cli-delegate/{chunk-ZXXJLL5K.js → chunk-BSLUHV2F.js} +127 -1487
  58. package/dist/cli-delegate/{chunk-H574KOUH.js → chunk-IMSXPRVH.js} +24 -1
  59. package/dist/cli-delegate/chunk-VSYT7OHO.js +1382 -0
  60. package/dist/cli-delegate/chunk-XGA2NTU4.js +3727 -0
  61. package/dist/cli-delegate/cmd_conformance.js +4 -3
  62. package/dist/cli-delegate/cmd_converge.js +3 -3
  63. package/dist/cli-delegate/cmd_doctor.js +3 -2
  64. package/dist/cli-delegate/cmd_export.js +4 -4
  65. package/dist/cli-delegate/cmd_handoff.js +3194 -0
  66. package/dist/cli-delegate/cmd_memory_get.js +35 -3754
  67. package/dist/cli-delegate/cmd_migrate.js +2 -2
  68. package/dist/cli-delegate/cmd_prune.js +4 -4
  69. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  70. package/dist/cli-delegate/cmd_sync.js +4 -4
  71. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  72. package/dist/cli-delegate/cmd_update.js +3 -3
  73. package/dist/cli-delegate/cmd_upgrade.js +3 -3
  74. package/dist/cli-delegate/cmd_validate.js +4 -4
  75. package/dist/cli-delegate/cmd_versions.js +3 -3
  76. package/dist/discovery/deprecation-report.md +1 -1
  77. package/dist/discovery/discovery-manifest.json +31 -31
  78. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  79. package/dist/discovery/discovery-manifest.summary.md +1 -1
  80. package/dist/discovery/orphan-report.md +1 -1
  81. package/dist/discovery/packs.json +2 -2
  82. package/dist/discovery/trust-report.md +1 -1
  83. package/dist/discovery/workspaces.json +2 -2
  84. package/dist/hooks/dispatch.js +602 -507
  85. package/dist/install/install.mjs +23 -0
  86. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  87. package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
  88. package/dist/mcp/registry-manifest.json +4 -4
  89. package/dist/mcp/server.json +2 -2
  90. package/dist/mcp/server.mjs +25 -3
  91. package/dist/scripts/_lib/agent_src.js +39 -6
  92. package/dist/scripts/_lib/agent_src.js.map +1 -1
  93. package/dist/server/routes/workspace.js +1 -1
  94. package/dist/server/routes/workspace.js.map +1 -1
  95. package/dist/server/schemas/settings.js +13 -0
  96. package/dist/server/schemas/settings.js.map +1 -1
  97. package/dist/shared/userMd/utils.js +1 -1
  98. package/dist/shared/userMd/utils.js.map +1 -1
  99. package/dist/ui/assets/index-DmR0mbk4.js +26 -0
  100. package/dist/ui/assets/index-DmR0mbk4.js.map +1 -0
  101. package/dist/ui/index.html +1 -1
  102. package/docs/guidelines/abstraction-thresholds.md +53 -0
  103. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -1
  104. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +7 -0
  105. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +2 -2
  106. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +5 -3
  107. package/docs/guidelines/agent-infra/size-and-scope.md +8 -2
  108. package/docs/guidelines/component-oriented-and-oop-development.md +11 -6
  109. package/docs/guidelines/docs/readme-size-and-splitting.md +5 -2
  110. package/llms.txt +1 -0
  111. package/package.json +4 -4
  112. package/src/config/agent-settings.template.yml +25 -1
  113. package/src/config/budget-routing.json +7 -0
  114. package/src/config/evaluator-budgets.json +8 -11
  115. package/src/config/gate-coverage.yml +30 -0
  116. package/src/scripts/_cli/cmd_handoff.ts +405 -0
  117. package/src/scripts/_cli/handoff_generate.ts +453 -0
  118. package/src/scripts/_cli/handoff_sessions.ts +435 -0
  119. package/src/scripts/_dispatch.bash +9 -0
  120. package/src/scripts/_lib/agent_src.ts +36 -6
  121. package/src/scripts/_lib/release_material.ts +156 -0
  122. package/src/scripts/_lib/tier_budget_routing.ts +154 -28
  123. package/src/scripts/anchor_scoring_run.ts +1 -1
  124. package/src/scripts/bench_persona_placebo.ts +1 -1
  125. package/src/scripts/bench_quality_run.ts +1 -1
  126. package/src/scripts/check_cli_registry_budget_sync.ts +168 -0
  127. package/src/scripts/check_condensation.ts +2 -1
  128. package/src/scripts/check_finding_dispositions.ts +278 -0
  129. package/src/scripts/check_gate_coverage.ts +1 -1
  130. package/src/scripts/check_pack_size.ts +4 -3
  131. package/src/scripts/check_references.ts +1 -0
  132. package/src/scripts/check_release_highlights.ts +300 -0
  133. package/src/scripts/check_release_pr_shape.ts +4 -0
  134. package/src/scripts/check_release_surface_equality.ts +132 -0
  135. package/src/scripts/check_reply_consistency.ts +187 -138
  136. package/src/scripts/check_token_quality_golden.ts +1 -1
  137. package/src/scripts/cost/budget.mjs +18 -4
  138. package/src/scripts/handoff_context_hook.ts +148 -0
  139. package/src/scripts/hook_manifest.yaml +17 -7
  140. package/src/scripts/hooks/concern_registry.ts +2 -0
  141. package/src/scripts/lint_abstraction_thresholds.ts +325 -0
  142. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  143. package/src/scripts/lint_profile_personas.ts +153 -0
  144. package/src/scripts/lint_token_budget_discipline.ts +148 -0
  145. package/src/scripts/release.ts +264 -37
  146. package/src/scripts/release_drill.ts +491 -0
  147. package/src/scripts/routing_doctor.ts +76 -1
  148. package/src/scripts/schemas/command.schema.json +33 -0
  149. package/src/scripts/self_review_gate.ts +41 -3
  150. package/src/scripts/skill_linter.ts +3 -1
  151. package/src/scripts/smoke/router.sh +1 -1
  152. package/src/scripts/update_counts.ts +60 -12
  153. package/src/server/schemas/settings.ts +23 -0
  154. package/src/shared/userMd/utils.ts +1 -1
  155. package/dist/ui/assets/index-DJY_vQVn.js +0 -40
  156. package/dist/ui/assets/index-DJY_vQVn.js.map +0 -1
  157. package/dist/cli-delegate/{chunk-XX6TOPD7.js → chunk-WR6GTRHJ.js} +3 -3
@@ -27,7 +27,7 @@
27
27
  document.documentElement.setAttribute('data-theme', theme);
28
28
  })();
29
29
  </script>
30
- <script type="module" crossorigin src="/assets/index-DJY_vQVn.js"></script>
30
+ <script type="module" crossorigin src="/assets/index-DmR0mbk4.js"></script>
31
31
  <link rel="stylesheet" crossorigin href="/assets/index-jSfMW8_t.css">
32
32
  </head>
33
33
  <body>
@@ -0,0 +1,53 @@
1
+ # Abstraction Thresholds — the per-class canon
2
+
3
+ > The single source of truth for "how many repetitions before you extract". Every
4
+ > other artifact that states a numeric extraction threshold cites this table and
5
+ > names its artifact class — a bare number outside this file is drift
6
+ > (enforced by `src/scripts/lint_abstraction_thresholds.ts`).
7
+
8
+ _Origin: council convergence 2026-08-03 (claude-sonnet-4-5 + gpt-4o, unanimous), recorded in ADR-213. Before this file, four artifacts stated four bare numbers (2 / 3+ / ≥4 / ≥3) with no scope tags — an agent loading them together received contradictory instructions._
9
+
10
+ ## Why the bars differ — cost scales with the artifact class
11
+
12
+ Extracting a pure helper function is a near-zero-cost act; extracting a stateful
13
+ UI component creates a file, a props contract, and a test surface. The threshold
14
+ is a price signal: the heavier the extraction, the more proven repetition it
15
+ must buy. These are **deliberately different bars for different acts**, not
16
+ editorial drift.
17
+
18
+ ## The canon
19
+
20
+ | Artifact class | Concrete tag (what to check) | Threshold |
21
+ |---|---|---|
22
+ | **Code-level abstraction** — helper, method, class, Strategy, generic, config layer | any non-UI code shape | **2 real repetitions** (or a genuine second axis of change) |
23
+ | **Pure-markup UI shell** — props-only fragment, no state (button shell, card frame, header) | renders props, holds no state | **3+ uses** |
24
+ | **Stateful UI component** — carries real props/state (form, table, filter) | repeats **AND** has varying props / local state | **~4+ repeats AND real state** (both conditions) |
25
+ | **Utility-class string** (Tailwind et al.) — repeated class list | identical class string | **≥ 3 duplications** (mechanism table: [`tailwind-engineer`](../../src/skills/tailwind-engineer/SKILL.md)) |
26
+
27
+ The code-level bar of **two** is this suite's settled base decision (the
28
+ borrowed "Rule of Three" for code was evaluated and not adopted — see
29
+ [`minimal-safe-diff-mechanics`](agent-infra/minimal-safe-diff-mechanics.md)).
30
+ The UI rows are scoped carve-outs **above** that base bar, never a license to
31
+ lower it.
32
+
33
+ ## The qualitative floor — applies to every row
34
+
35
+ A number alone never justifies an extraction. In every class, a reviewer must
36
+ be able to name the **concrete duplication or the concrete second axis of
37
+ change** the abstraction removes. One occurrence is not a component; one branch
38
+ is not a Strategy; a repeat with no varying props is inlined, not extracted.
39
+
40
+ ## Precedence
41
+
42
+ [`minimal-safe-diff`](../../src/rules/minimal-safe-diff.md) / YAGNI win on every
43
+ conflict: these thresholds authorize extraction when repetition is **already
44
+ present in the diff** — never speculative abstraction for "this could grow
45
+ later". See [`component-oriented-and-oop-development`](component-oriented-and-oop-development.md)
46
+ § The load-bearing caveat.
47
+
48
+ ## See also
49
+
50
+ - [`architecture`](../../src/rules/architecture.md) — the rule that carries the code-level bar.
51
+ - [`fe-design`](../../src/skills/fe-design/SKILL.md) § Component granularity — the UI-shell bar in context.
52
+ - [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) § Componentization threshold — the stateful-component bar in context.
53
+ - ADR-213 — the decision record scoping the bars.
@@ -135,7 +135,7 @@ source's remote lookup is dropped — a lethal-trifecta egress concern).
135
135
  - Is the scope bounded? (not "make it better" but "add X to Y")
136
136
  - Are edge cases considered?
137
137
 
138
- **If unclear** → ask ONE focused question. Max 2 questions, never an interrogation.
138
+ **If unclear** → ask ONE focused question per turn (`ask-when-uncertain` Iron Law — serial, never batched), never an interrogation.
139
139
 
140
140
  ### 8b. Does it fit the existing architecture?
141
141
 
@@ -120,6 +120,13 @@ is a fabricated fact wearing a number:
120
120
 
121
121
  A step list is honest ("A → B → C, C depends on B"); a schedule is invention.
122
122
 
123
+ **Carve-out — world-knowledge ranges.** An industry-typical duration sourced
124
+ from public benchmarks in strategy-advisory output ("integrations of this
125
+ class typically run 4–8 weeks") is a statement about the world, not a
126
+ prediction of the agent's or the user's own latency — allowed, but it MUST
127
+ carry an "industry-typical, not a prediction" qualifier. Unqualified, it
128
+ reads as the banned schedule.
129
+
123
130
  ### Never cite the rule as the reason
124
131
 
125
132
  When declining or constraining an action, give the **actual, substantive
@@ -68,8 +68,8 @@ If you need an ignored skill: read its SKILL.md directly, apply guidance, then a
68
68
 
69
69
  GitHub Copilot has no `PostToolUse` hook surface, so
70
70
  `scripts/context_hygiene_hook.ts` cannot run structurally and
71
- `agents/runtime/state/context-hygiene.json` is not maintained automatically
72
- (turn count, loop signal, freshness milestones at 20/40/60).
71
+ `agents/state/context-hygiene.json` is not maintained automatically
72
+ (tool-call count, loop signal, freshness milestones at 20/40/60).
73
73
 
74
74
  The cooperative path: track turns and tool-loop signals from memory
75
75
  during the conversation and apply the suggest-a-new-chat / 3-failure
@@ -27,12 +27,14 @@ The smallest change is also the least *abstract* and least *speculative* one:
27
27
  / generic / config layer to dedupe two or three call sites — inline
28
28
  repetition is cheaper to read and change than the wrong abstraction. Per new
29
29
  abstraction: **cite the second caller — or inline it.** The operative
30
- threshold in this suite is the **second real repetition** (or a genuine second
31
- axis of change), matching `architecture` and
30
+ **code-level** threshold in this suite is the **second real repetition** (or a
31
+ genuine second axis of change), matching `architecture` and
32
32
  [`component-oriented-and-oop-development`](../component-oriented-and-oop-development.md);
33
33
  the "three lines" phrasing is about *line* count inside one call site, not a
34
34
  third-occurrence gate. A borrowed "wait for the third occurrence" rule is
35
- **not** adopted — it would fork a threshold this repo already decided.
35
+ **not** adopted for code — it would fork a threshold this repo already
36
+ decided. UI extractions carry deliberately higher, scoped bars (ADR-213) —
37
+ the per-class canon is [`abstraction-thresholds`](../abstraction-thresholds.md).
36
38
  - **No speculative features.** Nothing beyond what was asked: no
37
39
  configurability or "flexibility" nobody requested, no parameters with one
38
40
  call site, no error handling for scenarios that cannot occur in this
@@ -81,8 +81,11 @@ Commands orchestrate — not implement.
81
81
 
82
82
  ## AGENTS.md
83
83
 
84
- - Target: **200–800 words**
85
- - Acceptable: **up to ~1200 words**
84
+ - Enforced budget: **character caps** via `lint_agents_md.ts` — package
85
+ root fails at **3,000 chars** (warns 2,800); consumer template fails at
86
+ **2,500 chars** (warns 2,300).
87
+ - Word guidance: aim for **≤ ~450 words** — that is roughly what fits
88
+ under the 3,000-char cap.
86
89
 
87
90
  High-level only.
88
91
 
@@ -92,6 +95,9 @@ High-level only.
92
95
 
93
96
  - Ideal: **< 60 lines**
94
97
  - Acceptable: **< 100–150 lines**
98
+ - Note: Copilot Code Review reads only the **first 4,000 characters**
99
+ (see `src/agent-src/templates/copilot-instructions.md`), so the
100
+ effective cap is character-based — highest-priority rules go up top.
95
101
 
96
102
  Must stay lightweight.
97
103
 
@@ -48,9 +48,13 @@ package's restraint posture and defers to it on every conflict:
48
48
  pattern for a five-line function, no class where a function is clearer.
49
49
 
50
50
  Rule of thumb: **two real repetitions (or a genuine second axis of change)
51
- before you extract.** One occurrence is not a component; one branch is not a
52
- Strategy. A reviewer should be able to name the concrete duplication or the
53
- concrete change-axis the abstraction removes.
51
+ before you extract a code-level abstraction.** One occurrence is not a
52
+ component; one branch is not a Strategy. A reviewer should be able to name the
53
+ concrete duplication or the concrete change-axis the abstraction removes.
54
+ UI extractions carry deliberately higher, scoped bars (shell 3+ · stateful
55
+ component ~4 + real state) — the per-class canon is
56
+ [`abstraction-thresholds`](abstraction-thresholds.md); this file does not
57
+ restate it.
54
58
 
55
59
  **Precedence (explicit): `minimal-safe-diff` / YAGNI always trump OOP
56
60
  advocacy.** When "prefer OO shape" and "smallest change" conflict, the smallest
@@ -67,11 +71,12 @@ when they repeat. Depth and mechanics already live in dedicated skills — consu
67
71
  them, don't duplicate:
68
72
 
69
73
  - [`fe-design`](../../src/skills/fe-design/SKILL.md) § Component Architecture —
70
- the stack-agnostic "kind, not framework" taxonomy, granularity, extract-on-3+.
74
+ the stack-agnostic "kind, not framework" taxonomy, granularity, and the
75
+ UI-shell bar (per [`abstraction-thresholds`](abstraction-thresholds.md)).
71
76
  - [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) —
72
77
  how to *shape* a reusable component: composition over inheritance, slot
73
- contracts, prop-API caps, controlled/uncontrolled, the componentization
74
- threshold (repeat **and** real state).
78
+ contracts, prop-API caps, controlled/uncontrolled, the stateful-component
79
+ bar (repeat **and** real state, per the same canon).
75
80
  - [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md) — the
76
81
  reuse-before-invent gate: inventory existing components/tokens/primitives
77
82
  first (enforced by [`ui-audit-gate`](../../src/rules/ui-audit-gate.md)).
@@ -18,7 +18,10 @@ and `readme-reviewer` skills.
18
18
  | **< 150** | Healthy | No splitting needed |
19
19
  | **150–300** | Busy | Add a Table of Contents; review for padding |
20
20
  | **300–500** | Overloaded | Split deep content to `/docs/` or `references/` |
21
- | **> 500** | Broken | Hard split required; README has stopped being an entry point |
21
+ | **> 500** | Broken | Split strongly recommended; README has stopped being an entry point |
22
+
23
+ These bands are editorial; the **enforced** limit is **750 lines** —
24
+ `lint_readme_size.ts` fails the build above it.
22
25
 
23
26
  Lines, not bytes — tables, code blocks, and badges inflate bytes but stay
24
27
  scannable. The real signal is: **can a new reader reach install/usage
@@ -61,7 +64,7 @@ docs/
61
64
  api.md ← full API reference
62
65
  ```
63
66
 
64
- README stays < 200 lines. Each `/docs/` file is a self-contained chapter.
67
+ After a split, aim for a README < 200 lines. Each `/docs/` file is a self-contained chapter.
65
68
 
66
69
  ### Strategy 2 — Deep-link tables for multi-platform repos
67
70
 
package/llms.txt CHANGED
@@ -180,6 +180,7 @@ onboarding-program: Use when shaping employee onboarding — time-to-productivit
180
180
  one-on-one-cadence: Use when designing engineering 1:1s — cadence, agenda mix, growth-vs-blocker-vs-trust shape, cancellation anti-patterns. Triggers on 'fix my 1:1s', 'should I cancel 1:1s this week'.
181
181
  openapi: Use when documenting APIs — OpenAPI/Swagger, PHP attributes, Redocly validation, versioned specs — even when the user just says 'document this endpoint' without naming OpenAPI.
182
182
  org-design: Use when shaping team structure — functional vs squad, span-of-control, reorg cost, Conway-aware boundaries. Triggers on 'should we reorg', 'how do we split this team'.
183
+ overbuild-review-lens: Use when a diff builds more than the task needs — code that should not exist, a dependency the platform already covers, or a clever form where a flat one reads better. Deletion-hunting, not quality.
183
184
  override-management: Creates and manages project-level overrides for shared skills, rules, and commands — extending or replacing originals from .augment/ with project-specific behavior in agents/overrides/.
184
185
  pdf-tools: Use when creating, merging, splitting, filling, or extracting from a PDF — library-per-task, output validated. Triggers on 'merge these PDFs', 'fill this PDF form', 'split the PDF', 'create a PDF'.
185
186
  perf-feedback-craft: Use when shaping feedback — situation-behavior-impact, growth-vs-corrective split, cadence design, ladder-of-inference checks. Triggers on 'how do I give this feedback', 'perf review shape'.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
3
  "mcpName": "io.github.event4u-app/agent-config",
4
- "version": "9.15.0",
4
+ "version": "9.17.0",
5
5
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including \"zero runtime daemon\".",
6
6
  "license": "MIT",
7
7
  "private": false,
@@ -110,11 +110,11 @@
110
110
  "@fastify/static": "^10.1.2",
111
111
  "@modelcontextprotocol/sdk": "^1.30.0",
112
112
  "@preact/signals": "^2.10.0",
113
- "commander": "^12.1.0",
113
+ "commander": "^15.0.0",
114
114
  "execa": "^9.5.0",
115
115
  "fastify": "^5.11.0",
116
- "js-yaml": "^4.1.0",
117
- "open": "^10.2.0",
116
+ "js-yaml": "^5.2.0",
117
+ "open": "^11.0.0",
118
118
  "preact": "^10.29.0",
119
119
  "yaml": "^2.9.0",
120
120
  "zod": "^3.25.0",
@@ -321,6 +321,28 @@ personal:
321
321
  # See user-types/README.md for the per-id contract.
322
322
  user_type: "__USER_TYPE__"
323
323
 
324
+ # --- Reply verbosity ---
325
+ verbosity:
326
+ # Announce intent before tool batches ("Let me check X…") — only honored
327
+ # when personal.play_by_play is ALSO true (the direct-answers narration
328
+ # carve-out requires both). Default false = no intent narration.
329
+ intent_announcements: false
330
+
331
+ # Show generated commit messages, PR titles/bodies, branch names before
332
+ # acting. false = use generated content directly (/commit terse path).
333
+ preview_artifacts: false
334
+
335
+ # Confirmation prompts for routine workflow steps with one obvious answer.
336
+ # Iron-Law gates (commit-policy, scope-control git-ops, Hard Floor) ALWAYS
337
+ # ask regardless of this setting.
338
+ routine_confirmations: false
339
+
340
+ # Offer "run AI Council on this?" inside delivery commands.
341
+ offer_council_in_delivery: false
342
+
343
+ # Status blocks after a successful action: off | minimal | full.
344
+ post_action_reports: minimal
345
+
324
346
  # --- Project / team preferences ---
325
347
  project:
326
348
  # Path to the PR template file (relative to project root)
@@ -724,7 +746,9 @@ subagents:
724
746
  # the resource-availability gate (council 2026-08-03).
725
747
  # ask = (default) first budget-motivated downshift of a session asks once
726
748
  # auto = apply the relation silently (telemetry line per routed request)
727
- # off = today's behavior; single-flip rollback
749
+ # off = today's behavior; single-flip rollback — QUOTE it ("off") when
750
+ # editing: bare off is YAML-1.1 boolean false (readers coerce, but
751
+ # the quoted form is the unambiguous one, same as `auto: "on"`)
728
752
  budget_routing: ask
729
753
 
730
754
  # Prefer a separate-quota-pool model for delegable sub-tasks WHERE the host
@@ -0,0 +1,7 @@
1
+ {
2
+ "$comment": "Single source of truth for the budget-routing reserve lifecycle (docs/contracts/budget-routing.md). Read by BOTH reserve readers — src/scripts/_lib/tier_budget_routing.ts (acquireBudgetPermit) and src/scripts/cost/budget.mjs (tier subcommand) — so the reserve window can never diverge between them. reserve_ttl_ms: reserves are RACE PROTECTION, not spend accounting — a pending entry older than this is dead and is dropped at the next compaction. lock_break_ms: an .lock file older than this is a crash leftover and is broken (unlink + one retry).",
3
+ "owner": "maintainer",
4
+ "review_by": "2027-08-03",
5
+ "reserve_ttl_ms": 600000,
6
+ "lock_break_ms": 30000
7
+ }
@@ -8,7 +8,9 @@
8
8
  "on_release": "fail",
9
9
  "on_main_and_prs": "warn",
10
10
  "on_local": "fail",
11
- "always_blocking": ["a metric with no measurement supplied"],
11
+ "always_blocking": [
12
+ "a metric with no measurement supplied"
13
+ ],
12
14
  "rationale": "road-to-gates-that-can-fail Phase 5. A hard fail on main turns every legitimate command addition into a blocked merge, which is how budgets get quietly raised with a cushion instead of consciously — so budget / regression / drift findings are ADVISORY on main, the nightly and ordinary PRs, and BLOCKING on a release ref. Not a weakening: before the Phase-4 path triggers, this gate ran on release PRs and the nightly only, so the surfaces that now warn never saw it at all. A LOCAL run (no CI env) is strict, because a maintainer running it by hand — including release.ts — wants the strict answer and blocks nobody. A metric with NO measurement is always blocking in either posture: that is a broken harness reporting green on nothing. Implemented in src/scripts/check_evaluator_budgets.ts::detectPosture; override with --posture warn|fail.",
13
15
  "delivery": "This posture IS the nightly-visibility route (council 2026-08-02, blocker nightly-visibility-owner), not a second mechanism beside it: the nightly publishes measurement_record below, a later run re-measures and compares, and the contradiction warns on main / fails on release. No notification channel, no auto-managed issue — a one-maintainer channel producing routine noise gets muted, and a muted channel reproduces the original failure."
14
16
  },
@@ -25,13 +27,8 @@
25
27
  },
26
28
  "not_re_measured": "unpacked_size_mb, node_modules_mb, runtime_dep_count, cli_version_cold_ms, mcp_boot_to_initialize_ms. All five require the packed-tarball harness (npm pack of a fully built tree, then a clean `npm install --omit=dev <tarball>` into a scratch project) that evaluator_umbrella.sh runs in CI. They were NOT re-measured in this pass and their values remain the 2026-07-27 acceptance numbers — stated rather than invented. The next nightly writes the real numbers into measurement_record, and the drift check then reports any contradiction with last_measured on the PR that carries it."
27
29
  },
30
+ "removed_2026_08_04": "unpacked_size_mb (max 28) — removed by maintainer decision at the 9.17.0 release: the gate turned every legitimate payload addition into a blocked release (measured 28.22 vs max 28 with all functional gates green), and the maintainer judged tarball size not worth gating. evaluator_umbrella.sh still MEASURES and records unpacked_size_mb as evidence; only the budget enforcement is gone. ADR-204 review_trigger (a) fired and was resolved this way.",
28
31
  "budgets": {
29
- "unpacked_size_mb": {
30
- "max": 28,
31
- "last_measured": 26.05,
32
- "last_measured_at": "2026-07-27",
33
- "method": "npm pack --json → dist.unpackedSize / 1e6 — includes the Phase-1 precompiled bundles (dist/hooks/dispatch.js + dist/mcp/server.mjs, ~2.1 MB) that bought the 23x hook-latency win and the tsx removal, plus dist/cli-delegate/ (~1.40 MB, ADR-204) which finished that removal for the consumer command surface. This gate is the ONLY size trip-wire on those bundles by design: a dedicated per-bundle budget key would need its own measurement wired into evaluator_umbrella.sh, and an unwired key fails check_evaluator_budgets with 'no measurement supplied' instead of guarding anything. ADR-204 projected 27.45 against max 28 without packing — the next real measurement here is the confirming one, and headroom is thin"
34
- },
35
32
  "node_modules_mb": {
36
33
  "max": 140,
37
34
  "last_measured": 127,
@@ -61,11 +58,11 @@
61
58
  "deterministic": false
62
59
  },
63
60
  "cli_help_command_count": {
64
- "max": 81,
65
- "last_measured": 81,
66
- "last_measured_at": "2026-08-03",
61
+ "max": 82,
62
+ "last_measured": 82,
63
+ "last_measured_at": "2026-08-04",
67
64
  "method": "registry enumeration — count of `{ name: '...', disposition` entries in src/cli/registry.ts (NOT --help prose parsing; methods historically disagreed 74 vs 76 vs 79)",
68
- "baseline_note": "80 → 81 on 2026-08-03 (release 9.15.0 gate). This RECORDS growth that already shipped through its own reviewed PR; it does not authorize new surface. The +1 is f02db54c2 (fix(cli): register routing:doctor in the CLI registry) — the command existed, only its registry entry was missing, and the registering PR did not move this budget. The gate did its job again: breach WARNS on main and BLOCKS on release, which is the conscious-decision point rather than a silently raised cap. Re-measured 2026-08-03 via the pinned method: 81. Headroom stays zero by design — the next registry addition must move this number in its own PR."
65
+ "baseline_note": "80 → 81 on 2026-08-03 (release 9.15.0 gate). This RECORDS growth that already shipped through its own reviewed PR; it does not authorize new surface. The +1 is f02db54c2 (fix(cli): register routing:doctor in the CLI registry) — the command existed, only its registry entry was missing, and the registering PR did not move this budget. The gate did its job again: breach WARNS on main and BLOCKS on release, which is the conscious-decision point rather than a silently raised cap. Re-measured 2026-08-03 via the pinned method: 81. Headroom stays zero by design — the next registry addition must move this number in its own PR. 81 → 82 on 2026-08-04: the `handoff` subcommand (road-to-agent-handoff-resume Phase 4) registers in the same PR that adds the surface, per this record's own contract. Re-measured via the pinned method: 82."
69
66
  },
70
67
  "mcp_public_tool_count": {
71
68
  "max": 19,
@@ -260,6 +260,36 @@ gates:
260
260
  failure direction was false-positive rather than false-green, but the
261
261
  cause was the same dead root.
262
262
 
263
+ - id: lint_abstraction_thresholds
264
+ argv: []
265
+ min_scanned: 400
266
+ corpus: "src/rules + src/skills + src/agent-src/commands + docs/guidelines .md (533 at baseline)"
267
+ status: enforced
268
+ note: >
269
+ A collapse below the floor would mean the gate stopped reading the tree
270
+ that states extraction thresholds, so a bare or diverging threshold
271
+ (ADR-213 drift) could land while the gate still printed green.
272
+
273
+ - id: lint_profile_personas
274
+ argv: []
275
+ min_scanned: 5
276
+ corpus: "src/agent-src/profiles/*.yml (6 seed profiles at baseline)"
277
+ status: enforced
278
+ note: >
279
+ Fewer than 5 profiles scanned would mean the gate stopped reading the
280
+ seed-profile dir, so a defaults.personas id that resolves to no persona
281
+ file could land while the gate still printed green.
282
+
283
+ - id: lint_token_budget_discipline
284
+ argv: []
285
+ min_scanned: 200
286
+ corpus: "src/skills/*/SKILL.md (288 at baseline)"
287
+ status: enforced
288
+ note: >
289
+ A collapse below the floor would mean the gate stopped reading the skills
290
+ tree, so a rich-tagged skill without its justification section (or a cap
291
+ breach) could land while the gate still printed green.
292
+
263
293
  - id: lint_framework_leakage
264
294
  argv: []
265
295
  min_scanned: 350