@event4u/agent-config 1.17.0 → 1.19.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 (158) hide show
  1. package/.agent-src/commands/council/default.md +74 -76
  2. package/.agent-src/commands/feature/roadmap.md +22 -0
  3. package/.agent-src/commands/roadmap/create.md +38 -6
  4. package/.agent-src/commands/roadmap/execute.md +36 -9
  5. package/.agent-src/rules/agent-authority.md +1 -0
  6. package/.agent-src/rules/agent-docs.md +1 -0
  7. package/.agent-src/rules/analysis-skill-routing.md +1 -0
  8. package/.agent-src/rules/architecture.md +1 -0
  9. package/.agent-src/rules/artifact-drafting-protocol.md +1 -0
  10. package/.agent-src/rules/artifact-engagement-recording.md +1 -0
  11. package/.agent-src/rules/ask-when-uncertain.md +1 -0
  12. package/.agent-src/rules/augment-portability.md +1 -0
  13. package/.agent-src/rules/augment-source-of-truth.md +1 -0
  14. package/.agent-src/rules/autonomous-execution.md +1 -0
  15. package/.agent-src/rules/capture-learnings.md +1 -0
  16. package/.agent-src/rules/chat-history-cadence.md +34 -0
  17. package/.agent-src/rules/chat-history-ownership.md +1 -0
  18. package/.agent-src/rules/chat-history-visibility.md +1 -0
  19. package/.agent-src/rules/cli-output-handling.md +2 -2
  20. package/.agent-src/rules/command-suggestion-policy.md +1 -0
  21. package/.agent-src/rules/commit-conventions.md +1 -0
  22. package/.agent-src/rules/commit-policy.md +1 -0
  23. package/.agent-src/rules/context-hygiene.md +28 -0
  24. package/.agent-src/rules/direct-answers.md +18 -26
  25. package/.agent-src/rules/docker-commands.md +1 -0
  26. package/.agent-src/rules/docs-sync.md +1 -0
  27. package/.agent-src/rules/downstream-changes.md +1 -0
  28. package/.agent-src/rules/e2e-testing.md +1 -0
  29. package/.agent-src/rules/guidelines.md +1 -0
  30. package/.agent-src/rules/improve-before-implement.md +1 -0
  31. package/.agent-src/rules/language-and-tone.md +1 -0
  32. package/.agent-src/rules/laravel-translations.md +1 -0
  33. package/.agent-src/rules/markdown-safe-codeblocks.md +1 -0
  34. package/.agent-src/rules/minimal-safe-diff.md +1 -0
  35. package/.agent-src/rules/missing-tool-handling.md +1 -0
  36. package/.agent-src/rules/model-recommendation.md +1 -0
  37. package/.agent-src/rules/no-cheap-questions.md +15 -21
  38. package/.agent-src/rules/no-roadmap-references.md +1 -0
  39. package/.agent-src/rules/non-destructive-by-default.md +1 -0
  40. package/.agent-src/rules/onboarding-gate.md +33 -0
  41. package/.agent-src/rules/package-ci-checks.md +1 -0
  42. package/.agent-src/rules/php-coding.md +1 -0
  43. package/.agent-src/rules/preservation-guard.md +1 -0
  44. package/.agent-src/rules/review-routing-awareness.md +1 -0
  45. package/.agent-src/rules/reviewer-awareness.md +1 -0
  46. package/.agent-src/rules/roadmap-progress-sync.md +49 -0
  47. package/.agent-src/rules/role-mode-adherence.md +2 -2
  48. package/.agent-src/rules/rule-type-governance.md +29 -0
  49. package/.agent-src/rules/runtime-safety.md +1 -0
  50. package/.agent-src/rules/scope-control.md +1 -0
  51. package/.agent-src/rules/security-sensitive-stop.md +1 -0
  52. package/.agent-src/rules/size-enforcement.md +1 -0
  53. package/.agent-src/rules/skill-improvement-trigger.md +1 -0
  54. package/.agent-src/rules/skill-quality.md +1 -0
  55. package/.agent-src/rules/slash-command-routing-policy.md +39 -0
  56. package/.agent-src/rules/think-before-action.md +1 -0
  57. package/.agent-src/rules/token-efficiency.md +1 -0
  58. package/.agent-src/rules/tool-safety.md +1 -0
  59. package/.agent-src/rules/ui-audit-gate.md +1 -0
  60. package/.agent-src/rules/upstream-proposal.md +1 -0
  61. package/.agent-src/rules/user-interaction.md +1 -0
  62. package/.agent-src/rules/verify-before-complete.md +1 -0
  63. package/.agent-src/skills/roadmap-management/SKILL.md +29 -4
  64. package/.agent-src/skills/verify-completion-evidence/SKILL.md +8 -1
  65. package/.agent-src/templates/agent-settings.md +16 -0
  66. package/.agent-src/templates/roadmaps.md +12 -3
  67. package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +9 -0
  68. package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +4 -0
  69. package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +4 -0
  70. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +163 -0
  71. package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +111 -0
  72. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +36 -0
  73. package/.agent-src/templates/scripts/work_engine/scoring/decision_trace.py +141 -0
  74. package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +125 -0
  75. package/.claude-plugin/marketplace.json +1 -1
  76. package/CHANGELOG.md +97 -0
  77. package/README.md +20 -20
  78. package/config/agent-settings.template.yml +23 -0
  79. package/docs/architecture.md +1 -1
  80. package/docs/catalog.md +5 -2
  81. package/docs/contracts/adr-settings-sync-engine.md +127 -0
  82. package/docs/contracts/decision-trace-v1.md +146 -0
  83. package/docs/contracts/file-ownership-matrix.json +7 -0
  84. package/docs/contracts/hook-architecture-v1.md +213 -0
  85. package/docs/contracts/load-context-budget-model.md +80 -0
  86. package/docs/contracts/load-context-schema.md +20 -0
  87. package/docs/contracts/memory-visibility-v1.md +138 -0
  88. package/docs/contracts/one-off-script-lifecycle.md +109 -0
  89. package/docs/contracts/roadmap-complexity-standard.md +137 -0
  90. package/docs/contracts/rule-interactions.yml +22 -0
  91. package/docs/customization.md +1 -0
  92. package/docs/development.md +4 -1
  93. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
  94. package/docs/guidelines/agent-infra/direct-answers-demos.md +145 -0
  95. package/docs/guidelines/agent-infra/layered-settings.md +32 -13
  96. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
  97. package/package.json +1 -1
  98. package/scripts/agent-config +64 -0
  99. package/scripts/ai_council/bundler.py +3 -3
  100. package/scripts/ai_council/clients.py +24 -8
  101. package/scripts/ai_council/one_off_archive/2026-05/README.md +67 -0
  102. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +206 -0
  103. package/scripts/ai_council/{_one_off_roundtrip.py → one_off_archive/2026-05/_one_off_roundtrip.py} +13 -8
  104. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +180 -0
  105. package/scripts/ai_council/session.py +92 -0
  106. package/scripts/build_rule_trigger_matrix.py +360 -0
  107. package/scripts/capture_showcase_session.py +361 -0
  108. package/scripts/chat_history.py +11 -1
  109. package/scripts/check_always_budget.py +46 -2
  110. package/scripts/check_one_off_location.py +81 -0
  111. package/scripts/check_references.py +6 -0
  112. package/scripts/compress.py +5 -2
  113. package/scripts/context_hygiene_hook.py +181 -0
  114. package/scripts/council_cli.py +357 -0
  115. package/scripts/hook_manifest.yaml +184 -0
  116. package/scripts/hooks/__init__.py +1 -0
  117. package/scripts/hooks/augment-context-hygiene.sh +55 -0
  118. package/scripts/hooks/augment-dispatcher.sh +72 -0
  119. package/scripts/hooks/augment-onboarding-gate.sh +55 -0
  120. package/scripts/hooks/cline-dispatcher.sh +86 -0
  121. package/scripts/hooks/cursor-dispatcher.sh +76 -0
  122. package/scripts/hooks/dispatch_hook.py +348 -0
  123. package/scripts/hooks/envelope.py +98 -0
  124. package/scripts/hooks/gemini-dispatcher.sh +117 -0
  125. package/scripts/hooks/state_io.py +122 -0
  126. package/scripts/hooks/windsurf-dispatcher.sh +123 -0
  127. package/scripts/hooks_status.py +146 -0
  128. package/scripts/install.py +728 -51
  129. package/scripts/install.sh +1 -1
  130. package/scripts/lint_examples.py +98 -0
  131. package/scripts/lint_hook_manifest.py +216 -0
  132. package/scripts/lint_one_off_age.py +184 -0
  133. package/scripts/lint_roadmap_complexity.py +127 -0
  134. package/scripts/lint_rule_tiers.py +78 -0
  135. package/scripts/lint_showcase_sessions.py +148 -0
  136. package/scripts/minimal_safe_diff_hook.py +245 -0
  137. package/scripts/onboarding_gate_hook.py +142 -0
  138. package/scripts/readme_linter.py +12 -3
  139. package/scripts/roadmap_progress_hook.py +5 -0
  140. package/scripts/schemas/rule.schema.json +5 -0
  141. package/scripts/sync_agent_settings.py +32 -129
  142. package/scripts/sync_yaml_rt.py +734 -0
  143. package/scripts/verify_before_complete_hook.py +216 -0
  144. /package/scripts/ai_council/{_one_off_2a4_acceptance.py → one_off_archive/2026-05/_one_off_2a4_acceptance.py} +0 -0
  145. /package/scripts/ai_council/{_one_off_context_layer_v1_estimate.py → one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py} +0 -0
  146. /package/scripts/ai_council/{_one_off_context_layer_v1_review.py → one_off_archive/2026-05/_one_off_context_layer_v1_review.py} +0 -0
  147. /package/scripts/ai_council/{_one_off_followups_review.py → one_off_archive/2026-05/_one_off_followups_review.py} +0 -0
  148. /package/scripts/ai_council/{_one_off_nondestructive_inline_audit.py → one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py} +0 -0
  149. /package/scripts/{_one_off_phase4_dispatch_latency.py → ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py} +0 -0
  150. /package/scripts/{_one_off_phase6_trigger_jaccard.py → ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py} +0 -0
  151. /package/scripts/ai_council/{_one_off_phase_2a_budget_rebalance.py → one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py} +0 -0
  152. /package/scripts/ai_council/{_one_off_phase_2a_post_revert.py → one_off_archive/2026-05/_one_off_phase_2a_post_revert.py} +0 -0
  153. /package/scripts/ai_council/{_one_off_rebalancing_audit.py → one_off_archive/2026-05/_one_off_rebalancing_audit.py} +0 -0
  154. /package/scripts/ai_council/{_one_off_rule_hardening_v1.py → one_off_archive/2026-05/_one_off_rule_hardening_v1.py} +0 -0
  155. /package/scripts/ai_council/{_one_off_structural_open_questions.py → one_off_archive/2026-05/_one_off_structural_open_questions.py} +0 -0
  156. /package/scripts/ai_council/{_one_off_structural_optimization.py → one_off_archive/2026-05/_one_off_structural_optimization.py} +0 -0
  157. /package/scripts/ai_council/{_one_off_structural_v3_gaps.py → one_off_archive/2026-05/_one_off_structural_v3_gaps.py} +0 -0
  158. /package/scripts/ai_council/{_one_off_structural_v3_review.py → one_off_archive/2026-05/_one_off_structural_v3_review.py} +0 -0
@@ -0,0 +1,125 @@
1
+ """Producer-side helpers for the memory-visibility line.
2
+
3
+ Implements the v1 line shape from
4
+ ``docs/contracts/memory-visibility-v1.md``:
5
+
6
+ 🧠 Memory: <hits>/<asks> · ids=[<comma-separated-ids>]
7
+
8
+ The semantics matched to the work-engine model:
9
+
10
+ * The ``memory`` step retrieves across the four allowed memory types
11
+ (``MEMORY_TYPES`` in ``directives.backend.memory``). Each type is
12
+ one ``ask`` from the visibility-line perspective.
13
+ * ``hits`` counts distinct types that returned at least one entry.
14
+ * ``ids`` is the deduped list of returned entry ids preserving the
15
+ retrieval order encoded in ``state.memory``.
16
+
17
+ Privacy floor: this module never emits entry bodies, summaries,
18
+ ``path``/``source`` fields, or anything beyond ``id`` and ``type``.
19
+ The privacy regression test (``tests/contracts/test_memory_
20
+ visibility_redaction.py``) keeps this guarantee enforced.
21
+ """
22
+ from __future__ import annotations
23
+
24
+ from typing import Any, Iterable
25
+
26
+ ICON = "\U0001F9E0" # 🧠
27
+ DEFAULT_MAX_INLINE_IDS = 5
28
+ DEFAULT_ASKED_TYPES = (
29
+ "domain-invariants",
30
+ "architecture-decisions",
31
+ "incident-learnings",
32
+ "historical-patterns",
33
+ )
34
+
35
+
36
+ def summarise_visibility(
37
+ memory: Any,
38
+ *,
39
+ asked_types: Iterable[str] = DEFAULT_ASKED_TYPES,
40
+ ) -> dict[str, Any]:
41
+ """Reduce ``state.memory`` into the visibility-line slice.
42
+
43
+ ``memory`` is the list of hit dicts produced by
44
+ ``directives.backend.memory``. Returns ``{"asks", "hits", "ids"}``
45
+ with privacy-safe values only.
46
+ """
47
+ asked = tuple(asked_types)
48
+ if not memory or not isinstance(memory, list):
49
+ return {"asks": 0, "hits": 0, "ids": []}
50
+ asks = len(asked)
51
+ seen_types: set[str] = set()
52
+ ids: list[str] = []
53
+ seen_ids: set[str] = set()
54
+ for entry in memory:
55
+ if not isinstance(entry, dict):
56
+ continue
57
+ type_value = entry.get("type")
58
+ if isinstance(type_value, str):
59
+ seen_types.add(type_value)
60
+ entry_id = entry.get("id") or entry.get("rule_id")
61
+ if not isinstance(entry_id, (str, int)):
62
+ continue
63
+ sid = str(entry_id)
64
+ if sid in seen_ids:
65
+ continue
66
+ seen_ids.add(sid)
67
+ ids.append(sid)
68
+ hits = len(seen_types) if seen_types else (1 if ids else 0)
69
+ return {"asks": asks, "hits": hits, "ids": ids}
70
+
71
+
72
+ def format_line(
73
+ summary: dict[str, Any],
74
+ *,
75
+ max_inline_ids: int = DEFAULT_MAX_INLINE_IDS,
76
+ ) -> str | None:
77
+ """Render the visibility line; return ``None`` when ``asks == 0``.
78
+
79
+ Cap inline ids at ``max_inline_ids`` and append ``…+N`` when the
80
+ list is longer. Returning ``None`` enforces the contract clause
81
+ "If ``asks == 0``, the engine MUST suppress the line entirely".
82
+ """
83
+ asks = int(summary.get("asks", 0) or 0)
84
+ if asks <= 0:
85
+ return None
86
+ hits = int(summary.get("hits", 0) or 0)
87
+ raw_ids = summary.get("ids") or []
88
+ ids = [str(i) for i in raw_ids if isinstance(i, (str, int))]
89
+ if max_inline_ids < 0:
90
+ max_inline_ids = 0
91
+ inline = ids[:max_inline_ids]
92
+ overflow = len(ids) - len(inline)
93
+ rendered_ids = ", ".join(inline)
94
+ if overflow > 0:
95
+ suffix = ", " if rendered_ids else ""
96
+ rendered_ids = f"{rendered_ids}{suffix}\u2026+{overflow}"
97
+ return f"{ICON} Memory: {hits}/{asks} \u00b7 ids=[{rendered_ids}]"
98
+
99
+
100
+ def should_emit(
101
+ summary: dict[str, Any],
102
+ *,
103
+ cost_profile: str = "standard",
104
+ visibility_off: bool = False,
105
+ ) -> bool:
106
+ """Apply the cadence + opt-out gates from the contract."""
107
+ if visibility_off:
108
+ return False
109
+ asks = int(summary.get("asks", 0) or 0)
110
+ if asks <= 0:
111
+ return False
112
+ profile = (cost_profile or "standard").strip().lower()
113
+ if profile == "lean":
114
+ return asks >= 3
115
+ return True
116
+
117
+
118
+ __all__ = [
119
+ "DEFAULT_ASKED_TYPES",
120
+ "DEFAULT_MAX_INLINE_IDS",
121
+ "ICON",
122
+ "format_line",
123
+ "should_emit",
124
+ "summarise_visibility",
125
+ ]
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "1.17.0"
9
+ "version": "1.19.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
package/CHANGELOG.md CHANGED
@@ -318,6 +318,103 @@ our recommendation order, not its support status.
318
318
  users" tension without removing any path that an existing user
319
319
  might rely on.
320
320
 
321
+ ## [1.19.0](https://github.com/event4u-app/agent-config/compare/1.18.0...1.19.0) (2026-05-05)
322
+
323
+ ### Features
324
+
325
+ * **rules:** treat slash command as operator and prose as target ([f73947e](https://github.com/event4u-app/agent-config/commit/f73947e93bc8121524d811a5f17d548499023751))
326
+ * **ai-council:** auto-prune session folders past retention window ([bbfaa93](https://github.com/event4u-app/agent-config/commit/bbfaa93fd28bc3a84030c30ab9cea429ac68bea5))
327
+ * **settings-sync:** additive sync with verbatim user-line preservation ([f996cf3](https://github.com/event4u-app/agent-config/commit/f996cf3811e924d2ffecbc3d11bac447308efc5a))
328
+ * **roadmap:** add quality_cadence setting to throttle /roadmap execute pipeline runs ([d5ef7bf](https://github.com/event4u-app/agent-config/commit/d5ef7bf85e70c95103c6fc65507f99fdd35050dd))
329
+ * **ci:** add lint_showcase_sessions gate ([c4f48bb](https://github.com/event4u-app/agent-config/commit/c4f48bba05d266899282742320b7f83bc636cc7c))
330
+ * **council:** add CLI entry-point with estimate/run/render subcommands (Phase 6.7) ([f20f599](https://github.com/event4u-app/agent-config/commit/f20f5993dda1325f19f8e26a130ef37f995b5a9d))
331
+ * **taskfile:** modularize Taskfile.yml into taskfiles/ groups (Phase 6.1) ([41cbe46](https://github.com/event4u-app/agent-config/commit/41cbe46d6f9289c98bb3f717dcac74c44154fc21))
332
+ * **hooks:** add verify-before-complete and minimal-safe-diff concerns ([2507aef](https://github.com/event4u-app/agent-config/commit/2507aefcc88857fd120cfd09d5c93555cb89b868))
333
+ * **governance:** one-off-script lifecycle + showcase capture + tier-retrofit archive ([0940f91](https://github.com/event4u-app/agent-config/commit/0940f91d74a759de6601f5367e8fd3e2925f4c51))
334
+ * **work_engine:** decision-trace + memory-visibility hooks, scoring, contracts ([91cb0a5](https://github.com/event4u-app/agent-config/commit/91cb0a547971ff5f9597997bc36607ca6049be89))
335
+ * **rules:** tier frontmatter sweep across all 58 rules + lint + budget rebaseline ([a9c3694](https://github.com/event4u-app/agent-config/commit/a9c3694bb22cbd87574c1ffd53d0cb9b76a60479))
336
+ * **hooks:** per-platform bridges, install integration, hooks:status, smoke ([c33058a](https://github.com/event4u-app/agent-config/commit/c33058a49a20c6d4d21a7933b85ea3b618a6d433))
337
+ * **hooks:** universal dispatcher, manifest, envelope, state I/O ([28c4f8c](https://github.com/event4u-app/agent-config/commit/28c4f8c7f0e7bd50b6403dfeab0dcaa623dd5ca3))
338
+ * add collision check to roadmap creation flow ([19b65d5](https://github.com/event4u-app/agent-config/commit/19b65d5f2500ddb7c8bfcbb7466c33de0d64043c))
339
+
340
+ ### Bug Fixes
341
+
342
+ * **ai-council:** use max_completion_tokens for OpenAI o1 models ([8d9e179](https://github.com/event4u-app/agent-config/commit/8d9e179a36d3ba2c68de09ba426782fd43792b85))
343
+ * **skills/roadmap-management:** drop task-ci literal to satisfy portability lint ([790af5e](https://github.com/event4u-app/agent-config/commit/790af5e61a3af3472027d2eef1d939106c95d6ea))
344
+ * **install.sh:** avoid SIGPIPE race in clean_stale that deleted live files ([08670d6](https://github.com/event4u-app/agent-config/commit/08670d66c6285a84d15e44d00e5cfecc6870a4e7))
345
+ * **roadmaps:** re-anchor relative paths in archived 3a protocol ([e0017de](https://github.com/event4u-app/agent-config/commit/e0017de1b55b43e2c8ea5b3f9b51f077cb68e0e3))
346
+
347
+ ### Performance
348
+
349
+ * **ci:** parallelise test suite — bash xargs -P + pytest-xdist ([2e74b31](https://github.com/event4u-app/agent-config/commit/2e74b3104d0a881832cbebb4dcaddecc865b65c3))
350
+ * **ai-council/bundler:** fix catastrophic regex backtracking in redact() ([0e277e7](https://github.com/event4u-app/agent-config/commit/0e277e7ca36b452cc1cc4d8abdeaaa14e9aebbaf))
351
+
352
+ ### Documentation
353
+
354
+ * **roadmaps:** add chat-history hook-only reduction roadmap ([529f3b7](https://github.com/event4u-app/agent-config/commit/529f3b7c06fae8b560ce0bb436fc701b1418a024))
355
+ * **roadmaps:** add road-to-proof-not-features draft ([4664bd4](https://github.com/event4u-app/agent-config/commit/4664bd42a0e0bd8ff9eddc6d8907ff9a217a8f11))
356
+ * tighten wording in three rules and one command ([14ed864](https://github.com/event4u-app/agent-config/commit/14ed8640f18e3bfc52819bb150066ecc453fb17a))
357
+ * **roadmap:** archive road-to-feedback-consolidation (43/43 done) ([f053c6d](https://github.com/event4u-app/agent-config/commit/f053c6df94620a4cbf89e75ba73a7bb369c9395b))
358
+ * **roadmap:** close Phase 1 — showcase infra shipped, sessions deferred ([49a156b](https://github.com/event4u-app/agent-config/commit/49a156b40eecd728841b2eaef3565850f1020e0a))
359
+ * **roadmap:** close Phase 6 — mark 6.1/6.4/6.5/6.7 complete (89%) ([4b645cf](https://github.com/event4u-app/agent-config/commit/4b645cf9fc9acb7b7bc227f790e00c3efae66790))
360
+ * **readme:** 3-path entry table + tier-coverage drift sentinel (Phase 6.4 + 6.5) ([ae712f0](https://github.com/event4u-app/agent-config/commit/ae712f034e5eb67481175835d7a9eded921ee222))
361
+ * **roadmap:** mark Phase 5 complete (Tier-1 hook concerns shipped) ([433c5d1](https://github.com/event4u-app/agent-config/commit/433c5d1efb352de26671caed0e24a6b1e673eab6))
362
+ * **readme:** trim under 500-line linter ceiling ([2c3b496](https://github.com/event4u-app/agent-config/commit/2c3b496552cdd73b02e7b08d5c231a9f86e326c3))
363
+ * **agents:** roadmap progress, ownership matrix, agents index sync ([2368e37](https://github.com/event4u-app/agent-config/commit/2368e37aee886125997bfda4299599ebea9a14ec))
364
+ * add feedback consolidation roadmap and regenerate dashboard ([96fce45](https://github.com/event4u-app/agent-config/commit/96fce45055b2da367b8a45536c7a5bdcd1e03d84))
365
+
366
+ ### Refactoring
367
+
368
+ * **hooks:** concerns share atomic-write state I/O + dispatcher-friendly stdin ([5cac705](https://github.com/event4u-app/agent-config/commit/5cac705edfd46ad8d27ffd0008bdf4723317a4eb))
369
+
370
+ ### Tests
371
+
372
+ * **hooks:** parity tests for tier-1 hook concerns ([540468c](https://github.com/event4u-app/agent-config/commit/540468cd150447d6b588d3015865660a555e4f8d))
373
+
374
+ ### Chores
375
+
376
+ * **tools:** regenerate .windsurfrules with slash-command-routing-policy operator/target sections ([7825600](https://github.com/event4u-app/agent-config/commit/78256000a2da9cc313eb272059bb363acbc5290e))
377
+ * **rules:** sync compressed slash-command-routing-policy with operator/target sections ([916357c](https://github.com/event4u-app/agent-config/commit/916357c7d185d717187845478e8318025330d3a9))
378
+ * **rules:** promote verify-before-complete and minimal-safe-diff to tier 2a ([d62fb84](https://github.com/event4u-app/agent-config/commit/d62fb845a14065706c46c4425b261b57ac155c27))
379
+ * ignore .agent-chat-history.session sidecar ([42741c8](https://github.com/event4u-app/agent-config/commit/42741c87f83bf24416eb3916cbced865ae642688))
380
+ * **infra:** wire lint-rule-tiers + lint-hook-manifest + lint-one-off-age tasks; pyproject pytest importlib; .windsurfrules Copilot fallback ([5b88093](https://github.com/event4u-app/agent-config/commit/5b8809398dd332a3ebad3478f7a38cf48ef119e1))
381
+ * **roadmaps:** archive structural-optimization companion artefacts ([928c884](https://github.com/event4u-app/agent-config/commit/928c88469787cd037c54acd0006039ee9b86f9bb))
382
+
383
+ ## [1.18.0](https://github.com/event4u-app/agent-config/compare/1.17.0...1.18.0) (2026-05-04)
384
+
385
+ ### Features
386
+
387
+ * **rules:** mandate hardening tier classification on new and edited rules ([42ff7c1](https://github.com/event4u-app/agent-config/commit/42ff7c1765e931a3e5e487ef83d01ca597a65800))
388
+ * **hooks:** wire Tier 1 hooks on Claude Code for hardening parity ([55ede24](https://github.com/event4u-app/agent-config/commit/55ede24e65b5ab7e827fa3a40b04fe9dab091392))
389
+ * **rules:** enforce placement for agent-authored roadmaps ([1624ede](https://github.com/event4u-app/agent-config/commit/1624ede571bcdd28adb7d8dd4868a92b9dbde646))
390
+ * roadmap complexity standard with shape and tier linters ([bd1bac6](https://github.com/event4u-app/agent-config/commit/bd1bac650013e449e7318c60586b7648dbcc144e))
391
+ * **hardening:** tier-1 hooks for onboarding-gate and context-hygiene ([5d107cd](https://github.com/event4u-app/agent-config/commit/5d107cd6fa1352d609491df12604ae0ddb7d7113))
392
+ * **always-budget:** hard-compress direct-answers and no-cheap-questions ([2cb9b0b](https://github.com/event4u-app/agent-config/commit/2cb9b0be7b3e6486c3689fec75e7672507ca97cb))
393
+ * outcome baselines and pattern-memory demos for foundational rules ([f43ede7](https://github.com/event4u-app/agent-config/commit/f43ede70a59cb7460557e6d76b041562056e78ee))
394
+
395
+ ### Bug Fixes
396
+
397
+ * **check-refs:** treat .augment/state/*.json as runtime-only paths ([3d4c766](https://github.com/event4u-app/agent-config/commit/3d4c76695af38e764facc8630a97e553f5aac67f))
398
+ * **rules:** sync compressed rules with hardening callouts ([89bd072](https://github.com/event4u-app/agent-config/commit/89bd07267d04d6346a1f36df92759c9208777a9a))
399
+
400
+ ### Documentation
401
+
402
+ * **contexts,contracts:** unlink stable artifacts from archived roadmaps ([af4e5c2](https://github.com/event4u-app/agent-config/commit/af4e5c2de6dfb0d2143f48213e04d41c9354deca))
403
+ * **contexts:** lock Tier 2 nudge surface, Tier 3 dispositions, platform parity ([10685a7](https://github.com/event4u-app/agent-config/commit/10685a7f3fceec1b93365cef3531a5e81f55396f))
404
+ * **roadmaps:** relocate budget-v2-matrix to contexts as durable rationale ([33b903a](https://github.com/event4u-app/agent-config/commit/33b903a36feeacffddedde11ff9b1bc3bd5173e3))
405
+
406
+ ### Refactoring
407
+
408
+ * **state:** move hook runtime state from .augment/state/ to agents/state/ ([ef5265e](https://github.com/event4u-app/agent-config/commit/ef5265e1ead67b089c4438efcbd4e94f120c6d3e))
409
+
410
+ ### Chores
411
+
412
+ * **plugin:** restructure marketplace.json to registry shape ([f3e6f24](https://github.com/event4u-app/agent-config/commit/f3e6f2425fefef2cc5fc338d27e8628ab45a4d41))
413
+ * **council:** archive Budget-v2 audit one-off ([00bf46e](https://github.com/event4u-app/agent-config/commit/00bf46e680e3a66bdbddac35e1ec3a08a8aa11f4))
414
+ * **roadmaps:** archive hardening and context-layer-maturity tracks ([21dec26](https://github.com/event4u-app/agent-config/commit/21dec26b7a6455ab95df6704773426e3dd35574f))
415
+ * regenerate dashboards, hashes, and roadmap progress ([06c50a9](https://github.com/event4u-app/agent-config/commit/06c50a9653bf4250a557ba2fe5a39b8609b3df30))
416
+ * archive ai_council one-off scripts and add location guard ([63e6dbd](https://github.com/event4u-app/agent-config/commit/63e6dbdc49749e97621bcaeaa49f81beb5ffc98c))
417
+
321
418
  ## [1.17.0](https://github.com/event4u-app/agent-config/compare/1.16.0...1.17.0) (2026-05-04)
322
419
 
323
420
  ### Features
package/README.md CHANGED
@@ -7,20 +7,22 @@ Give your AI agents an audit-disciplined orchestration contract — testing, Git
7
7
  > Your agent picks up the project's stack, runs tests, prepares PRs, fixes CI — and follows your team's coding standards while doing it. Stack-aware skill sets ship for PHP (Laravel · Symfony · Zend/Laminas), JavaScript (Next.js · React · Node), and cross-stack concerns (API · testing · security · observability).
8
8
 
9
9
  <p align="center">
10
- <strong>129 Skills</strong> · <strong>58 Rules</strong> · <strong>95 Commands</strong> · <strong>48 Guidelines</strong> · <strong>8 AI Tools</strong>
10
+ <strong>129 Skills</strong> · <strong>58 Rules</strong> · <strong>95 Commands</strong> · <strong>51 Guidelines</strong> · <strong>8 AI Tools</strong>
11
11
  </p>
12
12
 
13
13
  ---
14
14
 
15
15
  ## Start here
16
16
 
17
- New to agent-config? 60 seconds, three links:
17
+ Three ways in, depending on what you're doing today:
18
18
 
19
- 1. **[Install](#quickstart)** `composer require` or `npm install`, then run the installer.
20
- 2. **[First command](#2-minute-demo-implement-ticket)** — `/implement-ticket` or `/work` walkthrough.
21
- 3. **[Where the rules live](#documentation)** `.augment/`, `.claude/`, `.cursor/`, and friends.
19
+ | Path | Audience | What it does |
20
+ |---|---|---|
21
+ | **[`/onboard`](.agent-src/commands/onboard.md)** | New user, fresh install | Captures name, IDE, rtk, and cost profile; sets `onboarding.onboarded=true` |
22
+ | **[`task ci`](docs/development.md#ci--verification)** | Contributor working **on** this package | Runs the full sync + lint + test pipeline; must be green before push |
23
+ | **[`task generate-tools`](docs/development.md#tool-generation)** | Multi-agent user / consumer project | Rebuilds `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules` from the source |
22
24
 
23
- ---
25
+ If none of those apply yet — start with the [Quickstart](#quickstart) and pick a path once it's installed.
24
26
 
25
27
  ## Quickstart
26
28
 
@@ -63,6 +65,14 @@ project-locally for all supported AI tools. Task is required for
63
65
  *contributors* who want to rebuild the compressed content locally — see
64
66
  [CONTRIBUTING.md](CONTRIBUTING.md).
65
67
 
68
+ **Verify hook coverage** after installing — every supported platform
69
+ (Augment, Claude, Cursor, Cline, Windsurf, Gemini CLI, Copilot fallback)
70
+ is wired through one universal dispatcher per
71
+ [`hook-architecture-v1`](docs/contracts/hook-architecture-v1.md). Run
72
+ `./agent-config hooks:status` for the matrix (`--strict` for CI,
73
+ `--format json` for tooling). The installer also dry-fires the
74
+ dispatcher per bridge as a post-install smoke test (skip: `--no-smoke`).
75
+
66
76
  ### For individual use (optional)
67
77
 
68
78
  Install directly in your agent for global, cross-project use:
@@ -479,20 +489,10 @@ task lint-skills # Lint skills, rules, commands
479
489
 
480
490
  ## Requirements
481
491
 
482
- **To install the package into a consumer project:**
483
-
484
- - **Bash** — primary installer is `scripts/install`, orchestrating
485
- `scripts/install.sh` (payload sync) and `scripts/install.py` (bridges).
486
- Available on macOS, Linux, and WSL.
487
- - **Python 3.10+** — required for the bridge stage only. Pre-installed
488
- on macOS 12.3+ and all major Linux distros. If missing, the
489
- orchestrator skips bridges and completes the payload sync.
490
- - **Composer or npm** — to pull the package itself.
491
-
492
- **Platform support:** macOS 12.3+, Linux (modern distros), and Windows
493
- (WSL2) are fully supported. Git Bash works but symlinks require
494
- Developer Mode; native PowerShell / cmd is not supported. Contributors
495
- rebuilding `.augment/` locally also need [Task](https://taskfile.dev/).
492
+ - **Bash** — `scripts/install` orchestrates payload sync (`install.sh`) and bridges (`install.py`).
493
+ - **Python 3.10+** — bridge stage only; missing → orchestrator skips bridges.
494
+ - **Composer or npm** — to pull the package.
495
+ - **Platform:** macOS 12.3+, Linux, WSL2. Git Bash needs Developer Mode for symlinks; native PowerShell / cmd unsupported. Contributors rebuilding `.augment/` also need [Task](https://taskfile.dev/).
496
496
 
497
497
  ## License
498
498
 
@@ -121,6 +121,24 @@ pipelines:
121
121
  # want a silent agent; `custom` profile ignores this default entirely.
122
122
  skill_improvement: true
123
123
 
124
+ # --- Roadmap execution ---
125
+ #
126
+ # Controls when /roadmap execute runs the project's quality pipeline
127
+ # (the `task ci` / `make test` / `npm run check` style command).
128
+ # Steps are ALWAYS marked `[x]` and the dashboard is ALWAYS regenerated
129
+ # in the same response — that cadence is governed by `roadmap-progress-sync`
130
+ # and is non-negotiable. This setting only governs *quality tool runs*.
131
+ roadmap:
132
+ # When to run quality tools during /roadmap execute.
133
+ # end_of_roadmap = once, before archiving the completed roadmap (default — fastest, fewest tokens)
134
+ # per_phase = once after every completed phase
135
+ # per_step = after every completed step (legacy verbose; highest token cost)
136
+ # Trade-off: end_of_roadmap saves tokens and time but lets errors compound
137
+ # across phases. Pick per_phase if the work is risky or unfamiliar.
138
+ # Iron Law `verify-before-complete` still applies — fresh quality output
139
+ # is mandatory before any "roadmap complete" claim regardless of cadence.
140
+ quality_cadence: end_of_roadmap
141
+
124
142
  # --- Subagent orchestration ---
125
143
  #
126
144
  # Controls model selection and parallelism for subagent-based workflows
@@ -195,6 +213,11 @@ ai_council:
195
213
  max_calls: 10
196
214
  max_total_usd: 0.50
197
215
 
216
+ # Retention for `agents/council-sessions/` audit folders. Sessions
217
+ # older than this are pruned automatically on the next `save()`.
218
+ # `0` disables pruning (keep forever — disk grows unbounded).
219
+ session_retention_days: 14
220
+
198
221
  # --- Onboarding ---
199
222
  #
200
223
  # Tracks whether the initial setup flow (/onboard) has been completed
@@ -65,7 +65,7 @@ fails on any source-side violation, without producing artifacts.
65
65
  | **Skills** | 129 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
66
66
  | **Rules** | 58 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
67
67
  | **Commands** | 95 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
68
- | **Guidelines** | 48 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
68
+ | **Guidelines** | 51 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
69
69
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
70
70
  | **Contexts** | 5 | Shared knowledge about the system itself |
71
71
 
package/docs/catalog.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **327 public artefacts** shipped by
3
+ Consumer-facing catalog of all **330 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
@@ -301,14 +301,16 @@ are excluded.
301
301
  | command | [`upstream-contribute`](../.agent-src/commands/upstream-contribute.md) | | Contribute a learning, skill, rule, or fix from a consumer project back to the shared agent-config package |
302
302
  | command | [`work`](../.agent-src/commands/work.md) | | Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over the `work_engine` Python engine, confidence-band gated, no auto-git. |
303
303
 
304
- ## Guidelines (48)
304
+ ## Guidelines (51)
305
305
 
306
306
  | kind | name | category | description |
307
307
  |---|---|---|---|
308
308
  | guideline | [`agent-interaction-and-decision-quality`](../docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md) | agent-infra | |
309
+ | guideline | [`ask-when-uncertain-demos`](../docs/guidelines/agent-infra/ask-when-uncertain-demos.md) | agent-infra | |
309
310
  | guideline | [`asking-and-brevity-examples`](../docs/guidelines/agent-infra/asking-and-brevity-examples.md) | agent-infra | |
310
311
  | guideline | [`break-glass-usage`](../docs/guidelines/agent-infra/break-glass-usage.md) | agent-infra | |
311
312
  | guideline | [`developer-judgment`](../docs/guidelines/agent-infra/developer-judgment.md) | agent-infra | |
313
+ | guideline | [`direct-answers-demos`](../docs/guidelines/agent-infra/direct-answers-demos.md) | agent-infra | |
312
314
  | guideline | [`engineering-memory-data-format`](../docs/guidelines/agent-infra/engineering-memory-data-format.md) | agent-infra | |
313
315
  | guideline | [`language-and-tone-examples`](../docs/guidelines/agent-infra/language-and-tone-examples.md) | agent-infra | |
314
316
  | guideline | [`layered-settings`](../docs/guidelines/agent-infra/layered-settings.md) | agent-infra | |
@@ -322,6 +324,7 @@ are excluded.
322
324
  | guideline | [`self-improvement-pipeline`](../docs/guidelines/agent-infra/self-improvement-pipeline.md) | agent-infra | |
323
325
  | guideline | [`size-and-scope`](../docs/guidelines/agent-infra/size-and-scope.md) | agent-infra | |
324
326
  | guideline | [`tool-integration`](../docs/guidelines/agent-infra/tool-integration.md) | agent-infra | |
327
+ | guideline | [`verify-before-complete-demos`](../docs/guidelines/agent-infra/verify-before-complete-demos.md) | agent-infra | |
325
328
  | guideline | [`readme-size-and-splitting`](../docs/guidelines/docs/readme-size-and-splitting.md) | docs | |
326
329
  | guideline | [`playwright`](../docs/guidelines/e2e/playwright.md) | e2e | |
327
330
  | guideline | [`api-design`](../docs/guidelines/php/api-design.md) | php | |
@@ -0,0 +1,127 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # ADR — Settings sync engine: stdlib-only round-trip
6
+
7
+ > **Status:** Decided · 2026-05-04
8
+ > **Context:** Additive Settings Sync roadmap — review round 2
9
+ > (Self-Review + AI Council, Anthropic + OpenAI) flagged the
10
+ > 735-line `scripts/sync_yaml_rt.py` as potential NIH burden vs.
11
+ > adopting `ruamel.yaml` as a third-party dependency.
12
+ > **Builds on:** [`docs/guidelines/agent-infra/layered-settings.md`](../guidelines/agent-infra/layered-settings.md)
13
+ > § Sync rules — defines the additive-merge-with-user-line-preservation
14
+ > contract this engine implements.
15
+
16
+ ## Decision
17
+
18
+ `.agent-settings.yml` synchronization uses a **custom, stdlib-only
19
+ round-trip parser + emitter** in [`scripts/sync_yaml_rt.py`](../../scripts/sync_yaml_rt.py),
20
+ not `ruamel.yaml` or any other third-party YAML library.
21
+
22
+ The engine implements a narrow YAML subset (block-mappings, scalars,
23
+ flow-list values, comments, CRLF/LF) that covers the full surface of
24
+ `.agent-settings.yml` plus its template (`config/agent-settings.template.yml`).
25
+ Out-of-subset YAML — anchors, aliases, multi-document streams, complex
26
+ keys, nested flow mappings — is **not supported** and raises `ValueError`.
27
+
28
+ The merge layer (additive walk, max-index insertion, scalar→section
29
+ guard, healer for legacy `_user._user.foo` corruption, EOL
30
+ normalization) sits on top of the parser and is custom regardless of
31
+ the parser choice.
32
+
33
+ ## Why this was a real question
34
+
35
+ Three options were on the table:
36
+
37
+ 1. **`ruamel.yaml` for parse + emit, custom merge on top.** Rejected.
38
+ 2. **`PyYAML` for parse, custom emitter for round-trip.** Rejected
39
+ earlier in the roadmap — PyYAML's parser drops comments and
40
+ formatting before the merger ever sees them.
41
+ 3. **Custom stdlib-only parser + emitter + merger.** Chosen.
42
+
43
+ ### Why ruamel.yaml does not match the contract
44
+
45
+ The driving requirement from `layered-settings.md` is **verbatim
46
+ user-line preservation** — every byte of every line in the user's
47
+ file is preserved unless that line carries a key the merger is
48
+ explicitly editing. Tests pin this contract by asserting byte-identity
49
+ across two consecutive sync runs (`test_user_block_round_trip_is_idempotent`,
50
+ `test_three_level_idempotent`).
51
+
52
+ `ruamel.yaml` is a round-trip-aware library, not a verbatim one — it
53
+ re-parses into an in-memory model and **re-emits** through its own
54
+ emitter. This re-emit normalizes:
55
+
56
+ | Behavior | ruamel.yaml | Custom engine |
57
+ |---|---|---|
58
+ | User-line bytes (whitespace, quoting, blanks) | re-emitted, may shift | preserved 1:1 |
59
+ | Mixed CRLF/LF in user file | normalized to one EOL (typically platform default) | detected + normalized to the user's predominant EOL |
60
+ | `personal: null` blocking template-section injection | requires custom merge logic regardless | scalar guard in `_merge_into` |
61
+ | Legacy `_user._user.foo.bar` healer (one-off migration) | requires custom logic regardless | `heal_user_block` |
62
+ | Synthetic header rendering for newly-inserted template keys | re-emits the entire file | only renders the new subtree |
63
+ | Unknown user blocks at top level | preserved as data, but indent / quoting may shift on emit | preserved verbatim |
64
+ | 3rd-party dependency in distribution package | +1 (`ruamel.yaml` + transitive `ruamel.yaml.clib`) | 0 |
65
+
66
+ The rows where the libraries diverge are exactly the rows the test
67
+ suite asserts on.
68
+
69
+ ### Cost analysis
70
+
71
+ | Axis | Custom engine | ruamel.yaml |
72
+ |---|---|---|
73
+ | Lines of code | 735 (engine) + 335 (merge/heal) = 1070 | ~400 (parser+emitter saved) + 335 (merge/heal stays) + adapter glue = ~735 |
74
+ | Net code saved | — | ~335 lines |
75
+ | 3rd-party deps | 0 | +2 (`ruamel.yaml`, `ruamel.yaml.clib`) |
76
+ | Runtime YAML surface | narrow (documented subset) | full YAML 1.2 |
77
+ | Verbatim guarantee | yes | no |
78
+ | Performance | irrelevant — cold-path, runs on profile change | irrelevant |
79
+
80
+ The 335-line saving is real but offset by a stronger contract (verbatim)
81
+ and a 0-dep posture. The package is a distribution-layer library
82
+ (`composer.json` `type: library`, `package.json` thin manifest); it
83
+ already restricts itself to stdlib for portability across consumer
84
+ projects, several of which lock Python deps tightly.
85
+
86
+ ## Consequences
87
+
88
+ - **Maintenance:** the engine must keep covering the YAML subset its
89
+ template + user files exercise. Any new template feature (e.g. a
90
+ block-style nested list) is a parser change, not a config change.
91
+ - **Error surface:** YAML outside the subset (anchors, complex keys)
92
+ surfaces as a friendly `ValueError` from `_rt.sync()`, caught by
93
+ `sync_agent_settings.main` and turned into exit code 2 with a
94
+ user-readable message. Documented in
95
+ `tests/test_sync_agent_settings.py::test_malformed_user_yaml_exits_2_with_message`.
96
+ - **Test debt:** `tests/test_sync_round_trip.py` (34 tests) and
97
+ `tests/test_sync_agent_settings.py` (15 tests) are the contract.
98
+ Any parser change must keep those green and is the entry point
99
+ for new fixtures under `tests/fixtures/sync_yaml_rt/`.
100
+
101
+ ## Revisit triggers
102
+
103
+ This decision is revisited (new ADR with successor link) when **any**
104
+ of the following holds:
105
+
106
+ 1. `.agent-settings.yml` schema gains a YAML feature outside the
107
+ supported subset (anchors, multi-doc, complex keys, nested flow
108
+ mappings) — the cost of extending the parser exceeds the cost of
109
+ adopting ruamel.
110
+ 2. The verbatim-preservation contract is relaxed (e.g. consumers
111
+ accept that sync can re-format) — the driver for the custom engine
112
+ is gone.
113
+ 3. The 0-dep posture for Python tooling is dropped at the package level
114
+ — the marginal cost of one more dep collapses.
115
+ 4. A maintenance bug surfaces in the engine that would have been
116
+ prevented by ruamel's mature spec coverage.
117
+
118
+ ## See also
119
+
120
+ - [`docs/guidelines/agent-infra/layered-settings.md`](../guidelines/agent-infra/layered-settings.md)
121
+ § Sync rules — the contract this engine implements.
122
+ - [`scripts/sync_yaml_rt.py`](../../scripts/sync_yaml_rt.py) module
123
+ docstring — the supported YAML subset, listed exhaustively.
124
+ - `tests/test_sync_round_trip.py` — verbatim, scalar-guard, healer,
125
+ CRLF, and synthetic-header pinning.
126
+ - `tests/test_sync_agent_settings.py` — CLI integration, profile
127
+ override, malformed-input exit code.