@event4u/agent-config 1.16.0 → 1.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 (203) hide show
  1. package/.agent-src/commands/{agents-audit.md → agents/audit.md} +4 -3
  2. package/.agent-src/commands/{agents-cleanup.md → agents/cleanup.md} +12 -6
  3. package/.agent-src/commands/{agents-prepare.md → agents/prepare.md} +4 -3
  4. package/.agent-src/commands/agents.md +46 -0
  5. package/.agent-src/commands/{chat-history-checkpoint.md → chat-history/checkpoint.md} +4 -4
  6. package/.agent-src/commands/{chat-history-clear.md → chat-history/clear.md} +4 -4
  7. package/.agent-src/commands/{chat-history-resume.md → chat-history/resume.md} +4 -4
  8. package/.agent-src/commands/chat-history/show.md +107 -0
  9. package/.agent-src/commands/chat-history.md +33 -89
  10. package/.agent-src/commands/{commit-in-chunks.md → commit/in-chunks.md} +15 -13
  11. package/.agent-src/commands/commit.md +22 -2
  12. package/.agent-src/commands/{context-create.md → context/create.md} +4 -3
  13. package/.agent-src/commands/{context-refactor.md → context/refactor.md} +4 -3
  14. package/.agent-src/commands/context.md +44 -0
  15. package/.agent-src/commands/{copilot-agents-init.md → copilot-agents/init.md} +4 -3
  16. package/.agent-src/commands/{copilot-agents-optimize.md → copilot-agents/optimize.md} +4 -3
  17. package/.agent-src/commands/copilot-agents.md +44 -0
  18. package/.agent-src/commands/council/default.md +221 -0
  19. package/.agent-src/commands/{council-design.md → council/design.md} +6 -5
  20. package/.agent-src/commands/{council-optimize.md → council/optimize.md} +7 -6
  21. package/.agent-src/commands/{council-pr.md → council/pr.md} +6 -5
  22. package/.agent-src/commands/council.md +47 -212
  23. package/.agent-src/commands/{create-pr-description.md → create-pr/description-only.md} +4 -2
  24. package/.agent-src/commands/create-pr.md +26 -5
  25. package/.agent-src/commands/{feature-dev.md → feature/dev.md} +5 -10
  26. package/.agent-src/commands/{feature-explore.md → feature/explore.md} +4 -8
  27. package/.agent-src/commands/{feature-plan.md → feature/plan.md} +4 -8
  28. package/.agent-src/commands/{feature-refactor.md → feature/refactor.md} +4 -8
  29. package/.agent-src/commands/{feature-roadmap.md → feature/roadmap.md} +6 -10
  30. package/.agent-src/commands/feature.md +6 -12
  31. package/.agent-src/commands/{fix-ci.md → fix/ci.md} +4 -8
  32. package/.agent-src/commands/{fix-portability.md → fix/portability.md} +4 -8
  33. package/.agent-src/commands/{fix-pr-bot-comments.md → fix/pr-bots.md} +4 -8
  34. package/.agent-src/commands/{fix-pr-developer-comments.md → fix/pr-developers.md} +4 -8
  35. package/.agent-src/commands/{fix-pr-comments.md → fix/pr.md} +7 -11
  36. package/.agent-src/commands/{fix-references.md → fix/refs.md} +4 -8
  37. package/.agent-src/commands/{fix-seeder.md → fix/seeder.md} +4 -8
  38. package/.agent-src/commands/fix.md +7 -13
  39. package/.agent-src/commands/{do-and-judge.md → judge/on-diff.md} +4 -3
  40. package/.agent-src/commands/judge/solo.md +90 -0
  41. package/.agent-src/commands/{do-in-steps.md → judge/steps.md} +4 -3
  42. package/.agent-src/commands/judge.md +35 -70
  43. package/.agent-src/commands/{memory-add.md → memory/add.md} +4 -3
  44. package/.agent-src/commands/{memory-full.md → memory/load.md} +4 -3
  45. package/.agent-src/commands/{memory-promote.md → memory/promote.md} +4 -3
  46. package/.agent-src/commands/{propose-memory.md → memory/propose.md} +4 -3
  47. package/.agent-src/commands/memory.md +48 -0
  48. package/.agent-src/commands/{module-create.md → module/create.md} +4 -3
  49. package/.agent-src/commands/{module-explore.md → module/explore.md} +4 -3
  50. package/.agent-src/commands/module.md +44 -0
  51. package/.agent-src/commands/{optimize-agents.md → optimize/agents.md} +4 -8
  52. package/.agent-src/commands/{optimize-augmentignore.md → optimize/augmentignore.md} +4 -9
  53. package/.agent-src/commands/{optimize-rtk-filters.md → optimize/rtk.md} +4 -8
  54. package/.agent-src/commands/{optimize-skills.md → optimize/skills.md} +4 -8
  55. package/.agent-src/commands/optimize.md +4 -10
  56. package/.agent-src/commands/{override-create.md → override/create.md} +4 -3
  57. package/.agent-src/commands/{override-manage.md → override/manage.md} +4 -3
  58. package/.agent-src/commands/override.md +44 -0
  59. package/.agent-src/commands/{roadmap-create.md → roadmap/create.md} +4 -3
  60. package/.agent-src/commands/{roadmap-execute.md → roadmap/execute.md} +4 -3
  61. package/.agent-src/commands/roadmap.md +44 -0
  62. package/.agent-src/commands/{tests-create.md → tests/create.md} +4 -3
  63. package/.agent-src/commands/{tests-execute.md → tests/execute.md} +4 -3
  64. package/.agent-src/commands/tests.md +44 -0
  65. package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +72 -0
  66. package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +79 -0
  67. package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +98 -0
  68. package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +87 -0
  69. package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +62 -0
  70. package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +78 -0
  71. package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +85 -0
  72. package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +65 -0
  73. package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +78 -0
  74. package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +62 -0
  75. package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +55 -0
  76. package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +53 -0
  77. package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +77 -0
  78. package/.agent-src/contexts/judges/no-consolidate-rationale.md +102 -0
  79. package/.agent-src/contexts/judges/persona-voice-rubric.md +140 -0
  80. package/.agent-src/rules/artifact-engagement-recording.md +13 -69
  81. package/.agent-src/rules/ask-when-uncertain.md +27 -42
  82. package/.agent-src/rules/augment-portability.md +15 -61
  83. package/.agent-src/rules/augment-source-of-truth.md +27 -93
  84. package/.agent-src/rules/cli-output-handling.md +10 -76
  85. package/.agent-src/rules/command-suggestion-policy.md +18 -59
  86. package/.agent-src/rules/commit-conventions.md +17 -14
  87. package/.agent-src/rules/direct-answers.md +34 -49
  88. package/.agent-src/rules/docker-commands.md +5 -5
  89. package/.agent-src/rules/docs-sync.md +15 -69
  90. package/.agent-src/rules/language-and-tone.md +48 -72
  91. package/.agent-src/rules/missing-tool-handling.md +28 -22
  92. package/.agent-src/rules/no-cheap-questions.md +45 -52
  93. package/.agent-src/rules/no-roadmap-references.md +73 -0
  94. package/.agent-src/rules/package-ci-checks.md +21 -61
  95. package/.agent-src/rules/preservation-guard.md +64 -29
  96. package/.agent-src/rules/review-routing-awareness.md +24 -43
  97. package/.agent-src/rules/roadmap-progress-sync.md +10 -71
  98. package/.agent-src/rules/security-sensitive-stop.md +8 -8
  99. package/.agent-src/rules/skill-quality.md +16 -48
  100. package/.agent-src/rules/slash-command-routing-policy.md +7 -4
  101. package/.agent-src/rules/think-before-action.md +52 -42
  102. package/.agent-src/rules/tool-safety.md +19 -16
  103. package/.agent-src/rules/ui-audit-gate.md +24 -38
  104. package/.agent-src/rules/user-interaction.md +13 -68
  105. package/.agent-src/skills/ai-council/SKILL.md +2 -0
  106. package/.agent-src/skills/api-testing/SKILL.md +1 -1
  107. package/.agent-src/skills/check-refs/SKILL.md +59 -40
  108. package/.agent-src/skills/conventional-commits-writing/SKILL.md +86 -28
  109. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +5 -5
  110. package/.agent-src/skills/developer-like-execution/SKILL.md +4 -4
  111. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +101 -65
  112. package/.agent-src/skills/flux/SKILL.md +30 -10
  113. package/.agent-src/skills/github-ci/SKILL.md +2 -2
  114. package/.agent-src/skills/judge-code-quality/SKILL.md +7 -8
  115. package/.agent-src/skills/judge-security-auditor/SKILL.md +4 -5
  116. package/.agent-src/skills/judge-test-coverage/SKILL.md +3 -4
  117. package/.agent-src/skills/lint-skills/SKILL.md +57 -39
  118. package/.agent-src/skills/md-language-check/SKILL.md +61 -39
  119. package/.agent-src/skills/override-management/SKILL.md +5 -5
  120. package/.agent-src/skills/quality-tools/SKILL.md +2 -2
  121. package/.agent-src/skills/react-shadcn-ui/SKILL.md +116 -43
  122. package/.agent-src/skills/readme-reviewer/SKILL.md +30 -29
  123. package/.agent-src/skills/readme-writing/SKILL.md +78 -53
  124. package/.agent-src/skills/readme-writing-package/SKILL.md +50 -47
  125. package/.agent-src/skills/receiving-code-review/SKILL.md +52 -47
  126. package/.agent-src/skills/refine-prompt/SKILL.md +0 -1
  127. package/.agent-src/skills/requesting-code-review/SKILL.md +35 -30
  128. package/.agent-src/skills/security/SKILL.md +7 -2
  129. package/.agent-src/skills/security-audit/SKILL.md +7 -3
  130. package/.agent-src/skills/systematic-debugging/SKILL.md +68 -60
  131. package/.agent-src/skills/test-driven-development/SKILL.md +59 -57
  132. package/.agent-src/skills/test-performance/SKILL.md +0 -1
  133. package/.agent-src/skills/traefik/SKILL.md +4 -4
  134. package/.agent-src/skills/verify-completion-evidence/SKILL.md +28 -26
  135. package/.claude-plugin/marketplace.json +22 -11
  136. package/AGENTS.md +2 -2
  137. package/CHANGELOG.md +90 -1
  138. package/README.md +18 -17
  139. package/docs/architecture.md +4 -6
  140. package/docs/catalog.md +67 -39
  141. package/docs/contracts/STABILITY.md +13 -7
  142. package/docs/contracts/adr-chat-history-split.md +1 -3
  143. package/docs/contracts/adr-command-suggestion.md +0 -2
  144. package/docs/contracts/adr-implement-ticket-runtime.md +1 -2
  145. package/docs/contracts/adr-product-ui-track.md +3 -6
  146. package/docs/contracts/adr-prompt-driven-execution.md +3 -4
  147. package/docs/contracts/agent-memory-contract.md +6 -11
  148. package/docs/contracts/artifact-engagement-flow.md +6 -9
  149. package/docs/contracts/command-clusters.md +56 -46
  150. package/docs/contracts/command-suggestion-flow.md +1 -3
  151. package/docs/contracts/context-paths.md +99 -0
  152. package/docs/contracts/file-ownership-matrix.json +6722 -0
  153. package/docs/contracts/file-ownership-matrix.md +134 -0
  154. package/docs/contracts/implement-ticket-flow.md +6 -9
  155. package/docs/contracts/linear-ai-rules-inclusion.md +0 -1
  156. package/docs/contracts/linear-ai-three-layers.md +0 -2
  157. package/docs/contracts/load-context-budget-model.md +178 -0
  158. package/docs/contracts/load-context-schema.md +1 -3
  159. package/docs/contracts/rule-interactions.md +0 -1
  160. package/docs/contracts/rule-priority-hierarchy.md +1 -1
  161. package/docs/contracts/ui-track-flow.md +7 -17
  162. package/docs/customization.md +2 -0
  163. package/docs/getting-started.md +5 -4
  164. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +100 -0
  165. package/package.json +1 -1
  166. package/scripts/_one_off_phase4_dispatch_latency.py +108 -0
  167. package/scripts/_one_off_phase6_trigger_jaccard.py +92 -0
  168. package/scripts/_phase2_shim_helper.py +109 -0
  169. package/scripts/agent-config +10 -0
  170. package/scripts/ai_council/_one_off_2a4_acceptance.py +208 -0
  171. package/scripts/ai_council/_one_off_context_layer_v1_estimate.py +67 -0
  172. package/scripts/ai_council/_one_off_context_layer_v1_review.py +292 -0
  173. package/scripts/ai_council/_one_off_followups_review.py +259 -0
  174. package/scripts/ai_council/_one_off_nondestructive_inline_audit.py +209 -0
  175. package/scripts/ai_council/_one_off_phase_2a_budget_rebalance.py +257 -0
  176. package/scripts/ai_council/_one_off_phase_2a_post_revert.py +197 -0
  177. package/scripts/ai_council/_one_off_rule_hardening_v1.py +251 -0
  178. package/scripts/ai_council/_one_off_structural_open_questions.py +232 -0
  179. package/scripts/ai_council/_one_off_structural_optimization.py +144 -0
  180. package/scripts/ai_council/_one_off_structural_v3_gaps.py +252 -0
  181. package/scripts/ai_council/_one_off_structural_v3_review.py +240 -0
  182. package/scripts/check_always_budget.py +363 -45
  183. package/scripts/check_cluster_patterns.py +159 -0
  184. package/scripts/check_command_count_messaging.py +14 -7
  185. package/scripts/check_context_paths.py +201 -0
  186. package/scripts/check_no_roadmap_refs.py +155 -0
  187. package/scripts/check_phase_coupling.py +148 -0
  188. package/scripts/check_portability.py +2 -0
  189. package/scripts/check_references.py +29 -2
  190. package/scripts/check_safety_floor_untouched.py +125 -0
  191. package/scripts/command_suggester/loader.py +4 -1
  192. package/scripts/compress.py +59 -13
  193. package/scripts/generate_index.py +6 -2
  194. package/scripts/generate_ownership_matrix.py +323 -0
  195. package/scripts/hooks/augment-roadmap-progress.sh +57 -0
  196. package/scripts/install.py +49 -28
  197. package/scripts/lint_no_new_atomic_commands.py +12 -11
  198. package/scripts/requirements-evals.txt +1 -0
  199. package/scripts/roadmap_progress_hook.py +159 -0
  200. package/scripts/schemas/command.schema.json +4 -3
  201. package/scripts/skill_linter.py +1 -0
  202. package/scripts/sync_agent_settings.py +25 -2
  203. package/scripts/update_counts.py +7 -0
@@ -0,0 +1,134 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # File-ownership matrix
6
+
7
+ > **Audience:** roadmap authors, phase reviewers, and CI gate writers
8
+ > who need to know which artefact reads which, and whether two phases
9
+ > can run concurrently without colliding.
10
+ > **Generator:** `scripts/generate_ownership_matrix.py`
11
+ > (run via `task generate-ownership-matrix`).
12
+ > **Validator:** `task check-ownership-matrix` (fails if the JSON drifts
13
+ > from a fresh regeneration).
14
+ > **Companion contracts:** [`load-context-schema.md`](load-context-schema.md),
15
+ > [`context-paths.md`](context-paths.md).
16
+
17
+ This contract defines the **schema** of the file-ownership matrix: the
18
+ machine-readable JSON at `docs/contracts/file-ownership-matrix.json` and
19
+ the human-readable mirror at
20
+ `agents/contexts/structural/file-ownership-matrix.md`. Both are
21
+ regenerated from `.agent-src.uncompressed/` by the generator and locked
22
+ by CI.
23
+
24
+ **Status:** internal-locked (`stability: beta`). Schema bumps require a
25
+ contract version increment plus a roadmap revision (per
26
+ `road-to-structural-optimization.md` § 0.1).
27
+
28
+ ## Why the matrix exists
29
+
30
+ `road-to-structural-optimization` Phase 0.1 (CRITICAL) is the DAG
31
+ successor of Phase 0.6 (path conventions). Subsequent phases (1, 2A,
32
+ 2B, 3, 6) extract material into context files, slim rules, and reorder
33
+ command surface. The matrix is the substrate that lets later phases
34
+ ask three questions deterministically:
35
+
36
+ 1. **Which files does my edit reach transitively?** Answered by the
37
+ `READ_ONLY` edges plus their depth-2 closure.
38
+ 2. **Can Phase X and Phase Y land in either order?** Answered by
39
+ intersecting per-phase `WRITE` sets — empty intersection = safe.
40
+ 3. **Has the matrix drifted since the last green CI run?** Answered by
41
+ the `check-ownership-matrix` consistency gate.
42
+
43
+ ## Schema (v1)
44
+
45
+ The JSON document is a single object:
46
+
47
+ ```json
48
+ {
49
+ "version": 1,
50
+ "generated_by": "scripts/generate_ownership_matrix.py",
51
+ "source_of_truth": ".agent-src.uncompressed/",
52
+ "files": {
53
+ "<repo-root-relative path>": {
54
+ "kind": "rule | skill | command | context | persona",
55
+ "rule_type": "always | auto | manual | null",
56
+ "load_context": ["<path>", ...],
57
+ "load_context_eager": ["<path>", ...]
58
+ }
59
+ },
60
+ "edges": [
61
+ {
62
+ "source": "<path>",
63
+ "target": "<path>",
64
+ "type": "READ_ONLY | WRITE | BLOCKS_IF_CONCURRENT",
65
+ "via": "load_context | load_context_eager | load_context_transitive | body_link",
66
+ "depth": 1
67
+ }
68
+ ]
69
+ }
70
+ ```
71
+
72
+ **Edge types**
73
+
74
+ | Type | Meaning | Populated in v1 |
75
+ |---|---|:-:|
76
+ | `READ_ONLY` | Source file reads target (frontmatter declaration or body markdown link). | ✅ |
77
+ | `WRITE` | Source file owns target. Self-edge for every file (`source == target`). | ✅ |
78
+ | `BLOCKS_IF_CONCURRENT` | Two phases would write the same file. Derived later from a phase manifest; reserved in v1. | ⏳ |
79
+
80
+ **Edge `via` values**
81
+
82
+ - `load_context` — frontmatter `load_context:` entry (lazy).
83
+ - `load_context_eager` — frontmatter `load_context_eager:` entry.
84
+ - `load_context_transitive` — depth-2 hop reached by following a target's own
85
+ `load_context*` declarations one level deeper.
86
+ - `body_link` — markdown link in body to a path inside one of the
87
+ scanned roots.
88
+
89
+ ## Depth invariant (G2 — v3.1)
90
+
91
+ The generator computes the transitive closure of `load_context` /
92
+ `load_context_eager` edges **up to depth 2**. Any chain
93
+ `R → A → B → C` where every hop is a `load_context*` edge **fails the
94
+ build** with exit code 2. This duplicates the same nesting cap that
95
+ Phase 0.2.4 will enforce in `scripts/check_always_budget.py` — two
96
+ enforcement points, one invariant.
97
+
98
+ ## Regeneration policy
99
+
100
+ | Trigger | What runs | What fails |
101
+ |---|---|---|
102
+ | `task generate-ownership-matrix` | Regenerates JSON + MD in place. | Depth-3 chain → exit 2. |
103
+ | `task check-ownership-matrix` (CI) | Regenerates to memory, diffs against committed JSON. | Diff non-empty → exit 1. Depth-3 → exit 2. |
104
+ | Pre-commit hook (Phase 2A — A1 fix) | Future: regenerate and diff on commits that touch contexts. | Same as `check-ownership-matrix`. |
105
+
106
+ Any commit that adds, moves, or modifies a context, rule, skill, or
107
+ command MUST regenerate the matrix in the same commit. CI is the
108
+ backstop; the consistency gate fails if regeneration drifts.
109
+
110
+ ## Scope notes (v1)
111
+
112
+ - **Greppable surface:** `rules/`, `skills/`, `commands/`, `contexts/`,
113
+ `personas/` under `.agent-src.uncompressed/`. Generated tool
114
+ projections (`.augment/`, `.claude/`, `.cursor/`, …) are intentionally
115
+ ignored — they are downstream of the source of truth.
116
+ - **`skill:` frontmatter in rules** (named in roadmap 0.1.2) is reserved.
117
+ No rules currently declare it; the generator scans for it but emits
118
+ zero edges of that kind in v1.
119
+ - **Body link parser** is conservative: it only recognises markdown
120
+ link targets ending in `.md` whose path resolves under one of the
121
+ scanned roots. Bare backtick-name references (e.g., `` `skill-quality` ``)
122
+ are **not** edges in v1; they are too ambiguous to attribute.
123
+ - **Cycles** are not the matrix's concern — the existing
124
+ `lint_load_context.py` rejects them. The matrix generator follows
125
+ edges with a visited-set so a cycle, if one slipped through, cannot
126
+ loop forever; it would surface as a depth-3 abort.
127
+
128
+ ## Versioning
129
+
130
+ `version: 1` is the initial lock. Schema-breaking changes (renaming a
131
+ field, removing an edge type, changing semantics of an existing
132
+ `via`) require a version bump and a roadmap revision. Additive changes
133
+ (new `via` values, new optional file fields) MAY land at the current
134
+ version with a `CHANGELOG.md` entry under `### Beta`.
@@ -4,10 +4,9 @@ stability: beta
4
4
 
5
5
  # `/implement-ticket` — Flow Contract
6
6
 
7
- > Technical contracts for the delivery orchestrator shipped under
8
- > [`road-to-implement-ticket.md`](../../agents/roadmaps/road-to-implement-ticket.md).
9
- > This document is the stable reference; the roadmap tracks phased
10
- > delivery.
7
+ > Technical contracts for the `/implement-ticket` delivery orchestrator.
8
+ > This document is the stable reference for engine boundaries, state
9
+ > schema, and replay protocol.
11
10
  >
12
11
  > - **Created:** 2026-04-22
13
12
  > - **Status:** Phase 1 shipped 2026-04-23 — `DeliveryState` +
@@ -133,9 +132,9 @@ against actual engine output rather than synthetic fixtures.
133
132
  Prompt envelopes (`input.kind="prompt"`) carry a free-form goal
134
133
  instead of a refined ticket. The `refine` step routes on shape
135
134
  (presence of `raw` key) and on the first pass emits an
136
- `@agent-directive: refine-prompt` halt — the agent runs the
137
- matching skill, which reconstructs `acceptance_criteria` +
138
- `assumptions`. On the rebound, `scoring/confidence.py` produces a
135
+ `@agent-directive: refine-prompt` halt — the host agent is
136
+ instructed to run the matching skill, which reconstructs
137
+ `acceptance_criteria` + `assumptions`. On the rebound, `scoring/confidence.py` produces a
139
138
  frozen `ConfidenceScore(band, score, dimensions, reasons,
140
139
  ui_intent)` and the dispatcher branches on `band`:
141
140
 
@@ -616,8 +615,6 @@ are blocked by `freeze-guard.yml::manifest-integrity` at PR time.
616
615
 
617
616
  ## See also
618
617
 
619
- - [`agents/roadmaps/road-to-implement-ticket.md`](../../agents/roadmaps/road-to-implement-ticket.md)
620
- - [`agents/roadmaps/road-to-universal-execution-engine.md`](../../agents/roadmaps/road-to-universal-execution-engine.md)
621
618
  - `tests/golden/` — capture sandbox, recipes, and Capture Packs
622
619
  - [`../../tests/golden/harness.py`](../../tests/golden/harness.py) — Strict-Verb replay harness
623
620
  - [`../../.github/workflows/freeze-guard.yml`](../../.github/workflows/freeze-guard.yml) — manifest-integrity + live-replay gates
@@ -4,7 +4,6 @@ stability: beta
4
4
 
5
5
  # Linear AI — rules inclusion list
6
6
 
7
- > Phase 3 Step 1 deliverable for [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md).
8
7
  > Per-rule decision for the Linear AI rules digest. The digest is a
9
8
  > Markdown blob the user pastes into Linear's `Settings → Agents →
10
9
  > Additional guidance` (workspace / team / personal). The third-party
@@ -4,7 +4,6 @@ stability: beta
4
4
 
5
5
  # Linear AI — three-layer split rationale
6
6
 
7
- > Phase 3 Step 3 deliverable for [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md).
8
7
  > Per-rule routing is in [`linear-ai-rules-inclusion.md`](linear-ai-rules-inclusion.md);
9
8
  > this file documents *why* the split is workspace / team / personal and
10
9
  > what belongs in each.
@@ -128,4 +127,3 @@ does not maintain `event4u/agent-config`.
128
127
  - Per-rule decision: [`linear-ai-rules-inclusion.md`](linear-ai-rules-inclusion.md)
129
128
  - Builder script: [`scripts/build_linear_digest.py`](../../scripts/build_linear_digest.py)
130
129
  - Generated digests: `dist/linear/{workspace,team,personal}.md` (gitignored)
131
- - Roadmap: [`road-to-universal-distribution.md`](../../agents/roadmaps/road-to-universal-distribution.md) Phase 3
@@ -0,0 +1,178 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # `load_context:` Budget Accounting Model
6
+
7
+ > **Audience:** maintainers of `type: "always"` rules and the budget
8
+ > linter who need a single, deterministic answer to "how many chars
9
+ > does this rule cost the always-budget?".
10
+ > **Linter:** `scripts/check_always_budget.py`
11
+ > (run via `task check-always-budget`).
12
+ > **Companion:** [`load-context-schema.md`](load-context-schema.md) —
13
+ > frontmatter contract for citing a context from a rule.
14
+ > [`STABILITY.md § Budget contracts`](STABILITY.md#budget-contracts) —
15
+ > the numeric caps this model enforces.
16
+
17
+ This contract locks the **accounting model** by which a `type: "always"`
18
+ rule's `load_context:` declarations contribute to the always-rule
19
+ budget. It resolves the "is the rule its file size or its file size
20
+ plus everything it loads?" ambiguity surfaced by Round-2 council on
21
+ `road-to-structural-optimization` (Finding 7, CRITICAL).
22
+
23
+ **Status:** internal-locked. Changes require a contract version bump
24
+ and a roadmap revision (per
25
+ `road-to-structural-optimization.md` § Definitions). The 2 % tolerance
26
+ band on the retroactive test (G3 in v3.1) is the only legal way to
27
+ adjust the model parameters without a roadmap revision; an overshoot
28
+ above the band rejects the model and escalates to the council.
29
+
30
+ ## The locked model — Model (b) literal
31
+
32
+ For any rule with frontmatter `type: "always"`:
33
+
34
+ ```
35
+ EffectiveSize(rule) = RawSize(rule)
36
+ + Σ RawSize(c) for every c in transitive_closure(rule.load_context*)
37
+ ```
38
+
39
+ Where:
40
+
41
+ - `load_context*` is the union of `load_context:` (lazy) **and**
42
+ `load_context_eager:` entries declared in frontmatter
43
+ (per [`load-context-schema.md`](load-context-schema.md)).
44
+ - `transitive_closure` walks `load_context:` declarations on
45
+ context files **up to depth 2** — see § Nesting cap below.
46
+ - `RawSize` is the byte size of the compressed file
47
+ (`.agent-src/...`), measured by `os.path.getsize()`. The
48
+ uncompressed source paths in frontmatter are mapped to their
49
+ compressed counterparts before sizing.
50
+ - A context loaded by N always-rules counts **N times** (once per
51
+ loading rule). Rationale: the always-budget protects context-window
52
+ utilization at activation time; if rule A and rule B both fire on
53
+ the same turn, the agent pays both costs.
54
+
55
+ ### Why model (b) and not (a) or (c)
56
+
57
+ | Model | Definition | Why rejected |
58
+ |---|---|---|
59
+ | (a) rule chars only | `EffectiveSize = RawSize(rule)` | Ignores the cost of declared contexts. Phase-2A obligation extraction would *appear* free, allowing unbounded context bloat. |
60
+ | (b) literal *(this contract)* | `EffectiveSize = RawSize(rule) + Σ contexts` | Simplest invariant. Aligns with how the agent actually pays the cost when both rule and context fire on a turn. |
61
+ | (c) shared-divisor | `EffectiveSize = RawSize(rule) + Σ (RawSize(c) / N_loaders)` | Tempting for shared `commit-mechanics`-style contexts but breaks the "what does each rule cost in isolation" question. Reserved as the **first refinement step** if the 2 % tolerance band is exceeded. |
62
+
63
+ Council Round 3 converged A/A/A on the **separate-skills + shared-context**
64
+ extraction pattern (Q1) and the **one-rule + three-contexts** consolidation
65
+ (Q2); model (b) literal is the accounting that makes both patterns
66
+ honest about their cost.
67
+
68
+ ## Nesting cap — depth 2
69
+
70
+ A rule's `load_context:` may cite a context (depth 1). A context may
71
+ cite further contexts in its own frontmatter (depth 2). A depth-2
72
+ context citing a third context (depth 3) **aborts the build**.
73
+
74
+ Rationale: bounded recursion makes the linter terminate in O(N) and
75
+ prevents accidental cycles. Council Round-2 finding 9 (HIGH).
76
+
77
+ The check is enforced by `scripts/check_always_budget.py` as a
78
+ separate exit-code-1 condition (independent of the budget caps), so
79
+ that a depth violation surfaces with the violating chain, not as a
80
+ budget-cap breach.
81
+
82
+ ## Known-breach allowlist (transitional)
83
+
84
+ Phase 2A targets `non-destructive-by-default` and `scope-control`
85
+ for slimming. Both rules currently exceed the **6,000-char per-rule
86
+ cap** under model (b) literal — this is expected and intentional:
87
+ Phase 0.2 lands the model and its measurement; Phase 2A brings the
88
+ breaches under the cap.
89
+
90
+ To keep CI green during the transition, the linter and the test
91
+ suite carry an explicit `KNOWN_PER_RULE_BREACHES` allowlist with the
92
+ **measured ceiling** for each entry. Each entry must:
93
+
94
+ - Be referenced by the Phase 2A roadmap step that will retire it.
95
+ - Have a documented expected-removal date or roadmap milestone.
96
+ - Fail the build the moment the breach **grows** above the recorded
97
+ ceiling (regression guard).
98
+
99
+ Phase 2A's success criterion (`budget delta ≥ −5 %`) is the trigger
100
+ to remove entries from the allowlist. The allowlist must be **empty**
101
+ before Phase 2A is marked complete.
102
+
103
+ ## Retroactive test result (Phase 0.2.3)
104
+
105
+ PR #34's `autonomous-execution` split moved mechanics into three
106
+ contexts under `contexts/execution/`. Re-measuring under model (b)
107
+ literal:
108
+
109
+ | Metric | Value | Cap | Utilization |
110
+ |---|---:|---:|---:|
111
+ | Total extended budget | 49,311 chars | 49,000 | **100.6 %** |
112
+ | Top-3 extended | 22,248 chars | 24,500 | 90.8 % |
113
+ | Per-rule breaches | 2 of 9 | 0 | `non-destructive-by-default` (7,887), `scope-control` (8,529) |
114
+
115
+ The total sits **0.6 % over** the cap — within the 2 % tolerance band
116
+ (G3) which permits parameter refinement before model rejection. Per
117
+ the contract, the model is **accepted**; the per-rule breaches are
118
+ recorded in the transitional allowlist for Phase 2A.
119
+
120
+ `autonomous-execution` itself is `type: "auto"` and does not enter
121
+ the always-budget. Its own extended size (rule 5,196 + three contexts
122
+ 8,453) = 13,649 chars is reported by the linter for Phase 2B
123
+ diagnostics but does not gate the always-budget cap.
124
+
125
+ ## Linter contract
126
+
127
+ `scripts/check_always_budget.py` enforces:
128
+
129
+ 1. `EffectiveSize` per always-rule against the per-rule cap (with
130
+ the transitional allowlist).
131
+ 2. Sum of `EffectiveSize` across all always-rules against the total
132
+ cap (warn at 80 %, fail at ≥ 90 % — unchanged from PR #34).
133
+ 3. Top-3 sum against the top-3 cap.
134
+ 4. Depth ≤ 2 on every `load_context:` chain reachable from an
135
+ always-rule.
136
+
137
+ ### Recovery band (Phase 2A → Phase 5 transitional)
138
+
139
+ Locked by AI Council session `2026-05-03T12-02-42Z` (verdict A1)
140
+ after Phase 2A was attempted and reverted: the 1:1 rule-to-context
141
+ split was uneconomical under Model (b) literal because the
142
+ frontmatter and citation-line tax on the new context file outweighed
143
+ the chars removed from the rule. Reverting Phase 2A left the budget
144
+ at 96.8 % — strictly better than the `main` baseline at 100.6 % but
145
+ inside the 90–100 % gap zone the linter rejects.
146
+
147
+ While `RECOVERY_BAND_ENABLED = True`, the linter accepts a branch in
148
+ the gap zone iff:
149
+
150
+ - `total_ext < baseline` (read from `.github/budget-baseline.txt`,
151
+ the chars at last-green `main`), AND
152
+ - every per-rule cap holds (allowlisted entries unchanged), AND
153
+ - top-3 cap holds, AND
154
+ - depth-2 cap holds.
155
+
156
+ A branch passing only the recovery band reports
157
+ `⚠️ WARN (recovery band, baseline N)`. The band is a one-way ratchet:
158
+ once a smaller branch lands on `main`, the baseline file must be
159
+ updated to the new total in the same commit. Phase 5 of
160
+ `road-to-structural-optimization` flips `RECOVERY_BAND_ENABLED` to
161
+ `False` and removes both the band and the G3 tolerance — the gate
162
+ collapses to `total < TOTAL_CAP` strict.
163
+
164
+ Exit codes: 0 = pass (or warn, including recovery band), 1 = any cap
165
+ breach or depth violation, 3 = internal error.
166
+
167
+ ## What this contract intentionally does **not** promise
168
+
169
+ - **No claim about runtime cost.** The model treats every context
170
+ as if it were active when its rule fires. The agent may cache or
171
+ short-circuit lazy loads at runtime; the budget is the **upper
172
+ bound**, not the realised cost.
173
+ - **No claim about `type: "auto"` rules.** Auto rules enter the
174
+ agent's context only when their description matches; they have
175
+ their own per-rule LOC targets in Phase 2B (not a global budget).
176
+ - **No claim about commands or skills.** Commands and skills load
177
+ on user invocation. Their token cost is accounted by the
178
+ command-cluster and skill-family contracts, not here.
@@ -93,9 +93,7 @@ directly under `contexts/` (see `contexts/model-recommendations.md`,
93
93
  chars(rule.md) + sum(chars(eager_target.md) for each entry) ≤ rule_cap
94
94
  ```
95
95
 
96
- `rule_cap` is the per-rule budget from
97
- [`road-to-rebalancing.md`](../../agents/roadmaps/road-to-rebalancing.md)
98
- § Target architecture:
96
+ `rule_cap` is the per-rule budget:
99
97
 
100
98
  - Always rule: 2,500
101
99
  - Auto rule: 4,000
@@ -104,4 +104,3 @@ junior (yields). For `complements`, ordering is documentary only.
104
104
 
105
105
  - [`docs/contracts/STABILITY.md`](STABILITY.md) — public-surface stability tiers.
106
106
  - [`docs/contracts/adr-chat-history-split.md`](adr-chat-history-split.md) — ADR pattern for major rule structural changes.
107
- - [`agents/roadmaps/archive/road-to-post-pr29-optimize.md`](../../agents/roadmaps/archive/road-to-post-pr29-optimize.md) § P2.2 — anchor for this matrix.
@@ -64,7 +64,7 @@ which one's Iron Law gets the final say.
64
64
  | Situation | Bands that fire | Winner | Why |
65
65
  |---|---|---|---|
66
66
  | Standing autonomy + roadmap step says "merge to `main`" | 1, 7 | **1** | Hard Floor predates and outranks autonomy; surface the merge, ask. |
67
- | `/commit-in-chunks` on a diff that removes a directory | 1, 5 | **1** | Commit exception authorizes *commits*, not *bulk deletions*. Confirm diff this turn. |
67
+ | `/commit:in-chunks` on a diff that removes a directory | 1, 5 | **1** | Commit exception authorizes *commits*, not *bulk deletions*. Confirm diff this turn. |
68
68
  | User asks "improve this" with no metric named | 4, 7 | **4** | Vague-request trigger fires before any autonomy decision; ask the one clarifying question. |
69
69
  | Editing `app/Auth/PasswordReset.php` mid-feature | 2, 7 | **2** | Security-sensitive surface stops the edit until threat-model is recorded. |
70
70
  | Agent about to claim "ready to merge" with no fresh test output | 5, 6 | **6** | Verification gate fires before the commit/push question is even valid. |
@@ -4,8 +4,7 @@ stability: beta
4
4
 
5
5
  # UI Track — Flow Contract
6
6
 
7
- > Technical contracts for the UI directive sets shipped under
8
- > [`road-to-product-ui-track.md`](../../agents/roadmaps/road-to-product-ui-track.md).
7
+ > Technical contracts for the UI directive sets.
9
8
  > Sibling of [`implement-ticket-flow.md`](implement-ticket-flow.md) — that
10
9
  > doc covers `backend`; this one covers `ui`, `ui-trivial`, and the
11
10
  > `mixed` set that stitches both.
@@ -14,11 +13,10 @@ stability: beta
14
13
  > - **Status:** Phase 1–6 shipped — audit / design / apply / review /
15
14
  > polish handlers live under
16
15
  > [`.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/`](../../.agent-src.uncompressed/templates/scripts/work_engine/directives/ui/).
17
- > Mixed (Phase 4) under `directives/mixed/`. `ui-trivial` (Phase 2 Step 6)
18
- > under `directives/ui_trivial/`. R4 (Visual Review Loop) added the
16
+ > Mixed under `directives/mixed/`. `ui-trivial` under
17
+ > `directives/ui_trivial/`. R4 (Visual Review Loop) added the
19
18
  > a11y gate, the preview envelope, and a polish-termination rewrite
20
- > that splits subjective ceilings from objective a11y blocks — see
21
- > [`road-to-visual-review-loop.md`](../../agents/roadmaps/road-to-visual-review-loop.md).
19
+ > that splits subjective ceilings from objective a11y blocks.
22
20
  > Golden Transcripts GT-U1..U4, U7, U8, U9..U12 plus GT-U5 (mixed
23
21
  > flow), GT-U6A/B (stack dispatch), and R4's GT-U13..U15 (a11y polish,
24
22
  > a11y ceiling, preview render failure) pin happy-path, ambiguity,
@@ -42,8 +40,6 @@ sentinels that release each gate.
42
40
  `SKILL.md` files.
43
41
  - A migration guide for the schema — see
44
42
  [`implement-ticket-flow.md`](implement-ticket-flow.md#state-schema-v1).
45
- - A roadmap — phased delivery lives in
46
- [`road-to-product-ui-track.md`](../../agents/roadmaps/road-to-product-ui-track.md).
47
43
 
48
44
  ## The four directive sets
49
45
 
@@ -323,15 +319,9 @@ suite asserts every `BLOCKED` path has a matching declaration.
323
319
  - [`implement-ticket-flow.md`](implement-ticket-flow.md) — sibling
324
320
  contract for the `backend` set; covers `DeliveryState`, schema v1,
325
321
  hooks, persona policies, replay protocol.
326
- - [`road-to-product-ui-track.md`](../../agents/roadmaps/road-to-product-ui-track.md)
327
- phased delivery and Golden-Transcript matrix.
328
- - [`road-to-product-ui-track-followup.md`](../../agents/roadmaps/archive/road-to-product-ui-track-followup.md)
329
- — pinned GT-U5 (mixed flow), GT-U6A/B (stack dispatch), GT-U7
330
- (trivial happy path), GT-U8 (trivial reclassification).
331
- - [`road-to-visual-review-loop.md`](../../agents/roadmaps/road-to-visual-review-loop.md)
332
- — R4 contract: a11y gate, preview envelope, polish-termination
333
- rewrite. Pinned by GT-U13 (a11y polish), GT-U14 (a11y ceiling),
334
- GT-U15 (preview render failure).
322
+ - [`adr-product-ui-track.md`](adr-product-ui-track.md) — locked
323
+ decisions for the UI track (R3) and the visual-review-loop
324
+ amendment (R4: a11y gate, preview envelope, polish-termination).
335
325
  - [`existing-ui-audit` SKILL](../../.agent-src.uncompressed/skills/existing-ui-audit/SKILL.md)
336
326
  — producer of `state.ui_audit`.
337
327
  - [`ui-audit-gate` rule](../../.agent-src.uncompressed/rules/ui-audit-gate.md)
@@ -67,6 +67,8 @@ those sections.
67
67
  | `ai_council.cost_budget.max_total_usd` | `0.0` | Per-invocation USD ceiling. `0` disables (token caps still apply). |
68
68
  | `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.config/agent-config/council-spend.jsonl` (mode 0600). |
69
69
 
70
+ > **Experimental.** AI Council is not yet validated by external users. API costs apply per consultation.
71
+
70
72
  Council API tokens are installed via `./agent-config keys:install-anthropic`
71
73
  and `./agent-config keys:install-openai` — they prompt on `/dev/tty`, write to
72
74
  `~/.config/agent-config/<provider>.key` with mode `0600`, and never accept env
@@ -115,7 +115,7 @@ Your agent is now:
115
115
  - **Respecting your codebase** — no conflicting patterns
116
116
  - **Following standards** — consistent code quality
117
117
 
118
- This is enforced automatically by 57 rules. No configuration needed.
118
+ This is enforced automatically by 58 rules. No configuration needed.
119
119
 
120
120
  ---
121
121
 
@@ -155,7 +155,7 @@ Your agent now understands slash commands:
155
155
  | `/chat-history-resume` | Recover context after a crashed or switched session |
156
156
  | `/chat-history-clear` | Wipe the chat-history log (with confirmation) |
157
157
 
158
- → [Browse all 69 active commands](../.agent-src/commands/)
158
+ → [Browse all 95 active commands](../.agent-src/commands/)
159
159
 
160
160
  ---
161
161
 
@@ -167,8 +167,9 @@ for every profile), the agent keeps a JSONL log of your conversation in
167
167
  rotates at the size configured in the profile (`128 KB` on `minimal`,
168
168
  `256 KB` on `balanced`, `512 KB` on `full`).
169
169
 
170
- When a chat opens and finds an existing log, the agent runs a
171
- 4-state ownership check and chooses the right flow:
170
+ When a chat opens and finds an existing log, the host agent is
171
+ instructed to run a 4-state ownership check and choose the right
172
+ flow:
172
173
 
173
174
  - **match** — this chat already owns the file. Append silently.
174
175
  - **foreign** — a different session's file. You get 3 options:
@@ -0,0 +1,100 @@
1
+ # asking-and-brevity-examples
2
+
3
+ Companion examples for three always-rules:
4
+ [`ask-when-uncertain`](../../../.agent-src.uncompressed/rules/ask-when-uncertain.md),
5
+ [`no-cheap-questions`](../../../.agent-src.uncompressed/rules/no-cheap-questions.md),
6
+ [`direct-answers`](../../../.agent-src.uncompressed/rules/direct-answers.md).
7
+
8
+ The rules carry the Iron Laws and the obligation surface. This file
9
+ carries the illustrative material (example questions, rationale
10
+ tables, failure-mode catalogs) that does not need to live in the
11
+ always-loaded rule body — extracted to fit the always-rule budget.
12
+
13
+ ## Vague-request triggers — example questions
14
+
15
+ Companion to `ask-when-uncertain` § Vague-request triggers. The rule
16
+ lists the trigger patterns and the "missing info" columns; this file
17
+ adds the example question to ask back at the user.
18
+
19
+ | Pattern | Example clarifying question |
20
+ |---|---|
21
+ | "improve / optimize this" | "Optimize for what — execution speed or readability?" |
22
+ | "add caching" | "Which cache driver, and what invalidates it?" |
23
+ | "make it better / cleaner" | "What specifically feels wrong in the current code?" |
24
+ | "clean up this file" | "Remove unused code, reformat, or restructure?" |
25
+ | "fix this" (without specifying) | "What output/behavior is wrong right now?" |
26
+ | "refactor X" | "Refactor toward what — smaller methods, extract class, or something else?" |
27
+ | "use best practices" | "Best practices for what specifically — testing, naming, structure?" |
28
+ | "handle errors properly" | "For which failure modes, and what should happen on error?" |
29
+ | "add a UI / component / tile / page" when the repo mixes frameworks | "This repo uses {A} and {B} for UI — which one for this?" |
30
+
31
+ ## One-question-per-turn — why serial always wins
32
+
33
+ Companion to `ask-when-uncertain` § How to ask. The rule states the
34
+ Iron Law and the self-check; this file expands the rationale.
35
+
36
+ | Situation | Why serial always wins |
37
+ |---|---|
38
+ | Design / architecture decisions | Answer to Q1 reframes Q2 |
39
+ | Naming / command-syntax / API shape | Later choices depend on it |
40
+ | Scope / PR boundaries | Changes what the other questions even mean |
41
+ | Tool / library selection | Downstream choices branch from it |
42
+ | "Which approach: A vs B vs C" | Each answer opens a different follow-up |
43
+ | Even "independent" yes/no pairs | User still has to parse two contexts |
44
+ | Any question the user has to **think** about, not just pick | Thinking load compounds when stacked |
45
+
46
+ The shorthand: if the user has to *think* about an answer, that
47
+ answer almost always reframes whatever question would have come
48
+ next. Serial preserves the framing; parallel destroys it.
49
+
50
+ ## Cheap-question class catalog — extended examples
51
+
52
+ Companion to `no-cheap-questions` § What counts as cheap. The rule
53
+ lists the classes; this file adds longer-form examples per class.
54
+
55
+ | Class | Pattern · why cheap | Concrete example |
56
+ |---|---|---|
57
+ | **Sequencing** | "Step 2 or 3 next?" when roadmap orders them — answer is in the roadmap | Roadmap says "2.1 then 2.2" → don't ask "should I do 2.2 next?" |
58
+ | **Format-only** | "Table or paragraph?" — no semantic trade-off | User asked for a summary; format is a non-decision |
59
+ | **Commit asks** | "Commit now?" — `commit-policy`: never ask | The commit-policy Iron Law forbids the question |
60
+ | **CI / test asks** | "Run tests now?" — `verify-before-complete` decides | Verification is mandatory before completion claims; not a choice |
61
+ | **Fenced-step re-asks** | "Start Phase 1?" after "plan only" — `scope-control § fenced step` | The fence stands until the user explicitly lifts it |
62
+ | **Iron-Law option** | Option breaches `commit-policy`, `scope-control § git-ops`, or `non-destructive-by-default` — does not exist | Don't surface "force-push to main?" as Option 2 |
63
+ | **Context-derived** | Answer follows from prior turn / standing instruction / roadmap — act, state assumption inline | "Use the same branch?" after user said "stay on this branch" |
64
+ | **Dominant option** | One choice obviously correct; alternatives carry no upside — pick it | "Run the linter or skip it?" when the linter is part of CI |
65
+ | **Re-ask after decline** | Same path after user said no — `scope-control § decline = silence` | User declined a separate branch → don't propose it again on the same task |
66
+
67
+ ## Direct-answers — severity-tiered claim examples
68
+
69
+ Companion to `direct-answers` § Iron Law 2 (no invented facts). The
70
+ rule lists the severity table; this file adds concrete examples and
71
+ hedge-language patterns.
72
+
73
+ | Severity | Examples | Verification action |
74
+ |---|---|---|
75
+ | **High — load-bearing** | "Method `X::y()` exists at `path/to/file.php:142`", "version 12.4.1 added the API", "this test passes" | MUST verify with `view`, `grep`, `codebase-retrieval`, or fresh command output **before** claiming. Too expensive → ask. |
76
+ | **Medium — project-shape** | "This project uses Pest for testing", "controllers live under `app/Http/Controllers`" | Verify if one tool call reaches it; otherwise hedge: *"I'd guess X — not checked"*. |
77
+ | **Low — well-known idioms** | "PHP `array_map` returns a new array", "git tags are immutable", "JS arrays are zero-indexed" | Inference acceptable. Mark as inference if not 100% sure. |
78
+
79
+ Hedge-language patterns:
80
+
81
+ - ✅ "haven't verified X — likely from {known-similar-codebase}"
82
+ - ✅ "guess, not checked — `path/to/file.php:142` is my best read"
83
+ - ❌ "probably" alone — name what's unverified
84
+ - ❌ "vermutlich" without hedge target
85
+
86
+ ## Direct-answers — failure modes the user will call out
87
+
88
+ Companion to `direct-answers` § Failure modes. The rule lists the
89
+ modes; this file adds the trigger phrases and the in-language
90
+ correction pattern.
91
+
92
+ | Failure | User's typical callout | Correct response |
93
+ |---|---|---|
94
+ | Iron Law 1 violation | "skip the flattery", "ohne smalltalk" | drop the opener; deliver substance |
95
+ | Iron Law 2 violation | "have you actually checked?", "wo steht das?" | re-verify with a tool call; correct or retract the claim |
96
+ | Iron Law 3 violation | "kürzer", "less prose", "tldr" | trim to one sentence + the answer |
97
+ | Emoji blacklist hit | "ohne emojis", "no decoration" | re-render plain |
98
+
99
+ Acknowledge once, in the user's language, switch behavior, no
100
+ excuses (mirrors `language-and-tone` § slip handling).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "Shared agent configuration \u2014 skills, rules, commands, guidelines, and templates for AI coding tools",
5
5
  "license": "MIT",
6
6
  "private": false,