@event4u/agent-config 1.13.0 → 1.15.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 (291) hide show
  1. package/.agent-src/commands/agent-handoff.md +4 -1
  2. package/.agent-src/commands/agent-status.md +3 -0
  3. package/.agent-src/commands/agents-audit.md +4 -0
  4. package/.agent-src/commands/agents-cleanup.md +6 -1
  5. package/.agent-src/commands/agents-prepare.md +3 -0
  6. package/.agent-src/commands/analyze-reference-repo.md +4 -0
  7. package/.agent-src/commands/bug-fix.md +7 -3
  8. package/.agent-src/commands/bug-investigate.md +4 -0
  9. package/.agent-src/commands/chat-history-checkpoint.md +126 -0
  10. package/.agent-src/commands/chat-history-clear.md +6 -1
  11. package/.agent-src/commands/chat-history-resume.md +7 -2
  12. package/.agent-src/commands/chat-history.md +7 -2
  13. package/.agent-src/commands/check-current-md.md +137 -0
  14. package/.agent-src/commands/commit-in-chunks.md +118 -0
  15. package/.agent-src/commands/commit.md +4 -0
  16. package/.agent-src/commands/compress.md +37 -2
  17. package/.agent-src/commands/context-create.md +4 -0
  18. package/.agent-src/commands/context-refactor.md +4 -0
  19. package/.agent-src/commands/copilot-agents-init.md +3 -0
  20. package/.agent-src/commands/copilot-agents-optimize.md +3 -0
  21. package/.agent-src/commands/create-pr-description.md +4 -0
  22. package/.agent-src/commands/create-pr.md +4 -0
  23. package/.agent-src/commands/do-and-judge.md +4 -1
  24. package/.agent-src/commands/do-in-steps.md +3 -0
  25. package/.agent-src/commands/e2e-heal.md +4 -0
  26. package/.agent-src/commands/e2e-plan.md +4 -0
  27. package/.agent-src/commands/estimate-ticket.md +4 -1
  28. package/.agent-src/commands/feature-dev.md +4 -0
  29. package/.agent-src/commands/feature-explore.md +4 -0
  30. package/.agent-src/commands/feature-plan.md +4 -0
  31. package/.agent-src/commands/feature-refactor.md +4 -0
  32. package/.agent-src/commands/feature-roadmap.md +6 -0
  33. package/.agent-src/commands/fix-ci.md +4 -0
  34. package/.agent-src/commands/fix-portability.md +5 -2
  35. package/.agent-src/commands/fix-pr-bot-comments.md +4 -0
  36. package/.agent-src/commands/fix-pr-comments.md +4 -0
  37. package/.agent-src/commands/fix-pr-developer-comments.md +4 -0
  38. package/.agent-src/commands/fix-references.md +3 -0
  39. package/.agent-src/commands/fix-seeder.md +4 -0
  40. package/.agent-src/commands/implement-ticket.md +39 -13
  41. package/.agent-src/commands/jira-ticket.md +4 -0
  42. package/.agent-src/commands/judge.md +3 -0
  43. package/.agent-src/commands/memory-add.md +5 -3
  44. package/.agent-src/commands/memory-full.md +5 -2
  45. package/.agent-src/commands/memory-promote.md +7 -6
  46. package/.agent-src/commands/mode.md +3 -0
  47. package/.agent-src/commands/module-create.md +4 -0
  48. package/.agent-src/commands/module-explore.md +4 -0
  49. package/.agent-src/commands/onboard.md +33 -0
  50. package/.agent-src/commands/optimize-agents.md +4 -0
  51. package/.agent-src/commands/optimize-augmentignore.md +12 -0
  52. package/.agent-src/commands/optimize-rtk-filters.md +3 -0
  53. package/.agent-src/commands/optimize-skills.md +4 -0
  54. package/.agent-src/commands/override-create.md +4 -0
  55. package/.agent-src/commands/override-manage.md +4 -0
  56. package/.agent-src/commands/package-reset.md +3 -0
  57. package/.agent-src/commands/package-test.md +3 -0
  58. package/.agent-src/commands/prepare-for-review.md +4 -0
  59. package/.agent-src/commands/project-analyze.md +4 -0
  60. package/.agent-src/commands/project-health.md +4 -0
  61. package/.agent-src/commands/propose-memory.md +6 -8
  62. package/.agent-src/commands/quality-fix.md +4 -0
  63. package/.agent-src/commands/refine-ticket.md +12 -7
  64. package/.agent-src/commands/review-changes.md +39 -8
  65. package/.agent-src/commands/review-routing.md +4 -0
  66. package/.agent-src/commands/roadmap-create.md +18 -0
  67. package/.agent-src/commands/roadmap-execute.md +14 -1
  68. package/.agent-src/commands/rule-compliance-audit.md +4 -0
  69. package/.agent-src/commands/set-cost-profile.md +11 -0
  70. package/.agent-src/commands/sync-agent-settings.md +12 -0
  71. package/.agent-src/commands/sync-gitignore.md +3 -0
  72. package/.agent-src/commands/tests-create.md +4 -0
  73. package/.agent-src/commands/tests-execute.md +6 -3
  74. package/.agent-src/commands/threat-model.md +4 -0
  75. package/.agent-src/commands/update-form-request-messages.md +4 -0
  76. package/.agent-src/commands/upstream-contribute.md +4 -0
  77. package/.agent-src/commands/work.md +161 -0
  78. package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +2 -6
  79. package/.agent-src/guidelines/agent-infra/layered-settings.md +0 -1
  80. package/.agent-src/guidelines/agent-infra/memory-access.md +0 -7
  81. package/.agent-src/guidelines/agent-infra/role-contracts.md +2 -4
  82. package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +0 -1
  83. package/.agent-src/guidelines/php/patterns/strategy.md +180 -2
  84. package/.agent-src/personas/README.md +0 -1
  85. package/.agent-src/rules/artifact-drafting-protocol.md +7 -2
  86. package/.agent-src/rules/artifact-engagement-recording.md +133 -0
  87. package/.agent-src/rules/ask-when-uncertain.md +18 -13
  88. package/.agent-src/rules/augment-portability.md +64 -37
  89. package/.agent-src/rules/autonomous-execution.md +158 -0
  90. package/.agent-src/rules/chat-history-cadence.md +109 -0
  91. package/.agent-src/rules/chat-history-ownership.md +123 -0
  92. package/.agent-src/rules/chat-history-visibility.md +96 -0
  93. package/.agent-src/rules/cli-output-handling.md +27 -4
  94. package/.agent-src/rules/command-suggestion.md +134 -0
  95. package/.agent-src/rules/commit-policy.md +109 -0
  96. package/.agent-src/rules/direct-answers.md +114 -0
  97. package/.agent-src/rules/docs-sync.md +36 -0
  98. package/.agent-src/rules/downstream-changes.md +10 -9
  99. package/.agent-src/rules/improve-before-implement.md +9 -6
  100. package/.agent-src/rules/language-and-tone.md +85 -6
  101. package/.agent-src/rules/non-destructive-by-default.md +117 -0
  102. package/.agent-src/rules/package-ci-checks.md +4 -0
  103. package/.agent-src/rules/preservation-guard.md +20 -0
  104. package/.agent-src/rules/roadmap-progress-sync.md +159 -27
  105. package/.agent-src/rules/role-mode-adherence.md +1 -1
  106. package/.agent-src/rules/scope-control.md +42 -1
  107. package/.agent-src/rules/size-enforcement.md +2 -3
  108. package/.agent-src/rules/skill-quality.md +3 -8
  109. package/.agent-src/rules/ui-audit-before-build.md +106 -0
  110. package/.agent-src/rules/user-interaction.md +107 -51
  111. package/.agent-src/scripts/update_roadmap_progress.py +73 -9
  112. package/.agent-src/skills/blade-ui/SKILL.md +47 -3
  113. package/.agent-src/skills/command-routing/SKILL.md +32 -0
  114. package/.agent-src/skills/command-writing/SKILL.md +52 -2
  115. package/.agent-src/skills/description-assist/SKILL.md +21 -0
  116. package/.agent-src/skills/estimate-ticket/SKILL.md +0 -1
  117. package/.agent-src/skills/existing-ui-audit/SKILL.md +202 -0
  118. package/.agent-src/skills/fe-design/SKILL.md +78 -61
  119. package/.agent-src/skills/file-editor/SKILL.md +9 -0
  120. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +4 -0
  121. package/.agent-src/skills/flux/SKILL.md +31 -4
  122. package/.agent-src/skills/guideline-writing/SKILL.md +24 -2
  123. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +51 -9
  124. package/.agent-src/skills/livewire/SKILL.md +49 -4
  125. package/.agent-src/skills/md-language-check/SKILL.md +103 -0
  126. package/.agent-src/skills/php-coder/SKILL.md +24 -0
  127. package/.agent-src/skills/react-shadcn-ui/SKILL.md +121 -0
  128. package/.agent-src/skills/refine-prompt/SKILL.md +220 -0
  129. package/.agent-src/skills/refine-ticket/SKILL.md +32 -28
  130. package/.agent-src/skills/roadmap-management/SKILL.md +24 -11
  131. package/.agent-src/skills/rule-writing/SKILL.md +23 -1
  132. package/.agent-src/skills/skill-writing/SKILL.md +3 -5
  133. package/.agent-src/skills/upstream-contribute/SKILL.md +3 -3
  134. package/.agent-src/skills/using-git-worktrees/SKILL.md +3 -1
  135. package/.agent-src/templates/AGENTS.md +24 -6
  136. package/.agent-src/templates/agent-settings.md +149 -0
  137. package/.agent-src/templates/roadmaps.md +11 -4
  138. package/.agent-src/templates/scripts/implement_ticket/__init__.py +63 -26
  139. package/.agent-src/templates/scripts/implement_ticket/__main__.py +8 -2
  140. package/.agent-src/templates/scripts/memory_lookup.py +1 -1
  141. package/.agent-src/templates/scripts/telemetry/__init__.py +42 -0
  142. package/.agent-src/templates/scripts/telemetry/aggregator.py +154 -0
  143. package/.agent-src/templates/scripts/telemetry/boundary.py +171 -0
  144. package/.agent-src/templates/scripts/telemetry/engagement.py +238 -0
  145. package/.agent-src/templates/scripts/telemetry/report_renderer.py +170 -0
  146. package/.agent-src/templates/scripts/telemetry/settings.py +112 -0
  147. package/.agent-src/templates/scripts/telemetry_record.py +166 -0
  148. package/.agent-src/templates/scripts/telemetry_report.py +161 -0
  149. package/.agent-src/templates/scripts/telemetry_status.py +142 -0
  150. package/.agent-src/templates/scripts/work_engine/__init__.py +58 -0
  151. package/.agent-src/templates/scripts/work_engine/__main__.py +9 -0
  152. package/.agent-src/templates/scripts/work_engine/cli.py +195 -0
  153. package/.agent-src/templates/scripts/work_engine/cli_args.py +116 -0
  154. package/.agent-src/templates/scripts/{implement_ticket → work_engine}/delivery_state.py +10 -3
  155. package/.agent-src/templates/scripts/work_engine/directives/__init__.py +33 -0
  156. package/.agent-src/templates/scripts/work_engine/directives/backend/__init__.py +98 -0
  157. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/analyze.py +1 -1
  158. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/implement.py +3 -3
  159. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/memory.py +2 -2
  160. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/plan.py +2 -2
  161. package/.agent-src/templates/scripts/work_engine/directives/backend/refine.py +396 -0
  162. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/report.py +37 -5
  163. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/test.py +2 -2
  164. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/verify.py +2 -2
  165. package/.agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +116 -0
  166. package/.agent-src/templates/scripts/work_engine/directives/mixed/contract.py +254 -0
  167. package/.agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +229 -0
  168. package/.agent-src/templates/scripts/work_engine/directives/mixed/ui.py +231 -0
  169. package/.agent-src/templates/scripts/work_engine/directives/ui/__init__.py +113 -0
  170. package/.agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +44 -0
  171. package/.agent-src/templates/scripts/work_engine/directives/ui/apply.py +241 -0
  172. package/.agent-src/templates/scripts/work_engine/directives/ui/audit.py +414 -0
  173. package/.agent-src/templates/scripts/work_engine/directives/ui/design.py +335 -0
  174. package/.agent-src/templates/scripts/work_engine/directives/ui/polish.py +510 -0
  175. package/.agent-src/templates/scripts/work_engine/directives/ui/review.py +468 -0
  176. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +119 -0
  177. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +37 -0
  178. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +165 -0
  179. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +66 -0
  180. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +62 -0
  181. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +115 -0
  182. package/.agent-src/templates/scripts/work_engine/dispatcher.py +331 -0
  183. package/.agent-src/templates/scripts/work_engine/emitters.py +43 -0
  184. package/.agent-src/templates/scripts/work_engine/errors.py +19 -0
  185. package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +76 -0
  186. package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +54 -0
  187. package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +32 -0
  188. package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +103 -0
  189. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +44 -0
  190. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +42 -0
  191. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +50 -0
  192. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +49 -0
  193. package/.agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +53 -0
  194. package/.agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +50 -0
  195. package/.agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +52 -0
  196. package/.agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +84 -0
  197. package/.agent-src/templates/scripts/work_engine/hooks/context.py +66 -0
  198. package/.agent-src/templates/scripts/work_engine/hooks/events.py +44 -0
  199. package/.agent-src/templates/scripts/work_engine/hooks/exceptions.py +79 -0
  200. package/.agent-src/templates/scripts/work_engine/hooks/registry.py +60 -0
  201. package/.agent-src/templates/scripts/work_engine/hooks/runner.py +73 -0
  202. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +141 -0
  203. package/.agent-src/templates/scripts/work_engine/input_builders.py +163 -0
  204. package/.agent-src/templates/scripts/work_engine/intent/__init__.py +47 -0
  205. package/.agent-src/templates/scripts/work_engine/intent/classify.py +280 -0
  206. package/.agent-src/templates/scripts/work_engine/migration/__init__.py +8 -0
  207. package/.agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +231 -0
  208. package/.agent-src/templates/scripts/{implement_ticket → work_engine}/persona_policy.py +1 -1
  209. package/.agent-src/templates/scripts/work_engine/resolvers/__init__.py +22 -0
  210. package/.agent-src/templates/scripts/work_engine/resolvers/diff.py +106 -0
  211. package/.agent-src/templates/scripts/work_engine/resolvers/file.py +113 -0
  212. package/.agent-src/templates/scripts/work_engine/resolvers/prompt.py +90 -0
  213. package/.agent-src/templates/scripts/work_engine/scoring/__init__.py +14 -0
  214. package/.agent-src/templates/scripts/work_engine/scoring/confidence.py +300 -0
  215. package/.agent-src/templates/scripts/work_engine/stack/__init__.py +31 -0
  216. package/.agent-src/templates/scripts/work_engine/stack/detect.py +187 -0
  217. package/.agent-src/templates/scripts/work_engine/state.py +641 -0
  218. package/.agent-src/templates/scripts/work_engine/state_io.py +202 -0
  219. package/.claude-plugin/marketplace.json +105 -2
  220. package/AGENTS.md +38 -8
  221. package/CHANGELOG.md +609 -0
  222. package/README.md +136 -14
  223. package/config/agent-settings.template.yml +45 -0
  224. package/config/gitignore-block.txt +4 -0
  225. package/docs/MIGRATION.md +122 -0
  226. package/docs/architecture.md +111 -35
  227. package/docs/contracts/STABILITY.md +95 -0
  228. package/docs/contracts/adr-chat-history-split.md +132 -0
  229. package/docs/contracts/adr-command-suggestion.md +146 -0
  230. package/docs/contracts/adr-implement-ticket-runtime.md +122 -0
  231. package/docs/contracts/adr-product-ui-track.md +384 -0
  232. package/docs/contracts/adr-prompt-driven-execution.md +187 -0
  233. package/docs/contracts/agent-memory-contract.md +149 -0
  234. package/docs/contracts/artifact-engagement-flow.md +262 -0
  235. package/docs/contracts/command-clusters.md +126 -0
  236. package/docs/contracts/command-suggestion-flow.md +148 -0
  237. package/docs/contracts/implement-ticket-flow.md +628 -0
  238. package/docs/contracts/linear-ai-rules-inclusion.md +143 -0
  239. package/docs/contracts/linear-ai-three-layers.md +131 -0
  240. package/docs/contracts/rule-interactions.md +107 -0
  241. package/docs/contracts/rule-interactions.yml +142 -0
  242. package/docs/contracts/ui-stack-extension.md +236 -0
  243. package/docs/contracts/ui-track-flow.md +338 -0
  244. package/docs/development.md +1 -1
  245. package/docs/getting-started.md +3 -3
  246. package/docs/installation.md +124 -2
  247. package/docs/migrations/commands-1.15.0.md +112 -0
  248. package/docs/showcase.md +204 -0
  249. package/docs/ui-track-mental-model.md +121 -0
  250. package/package.json +1 -1
  251. package/scripts/agent-config +199 -0
  252. package/scripts/audit_cloud_compatibility.py +288 -0
  253. package/scripts/build_cloud_bundle.py +458 -0
  254. package/scripts/build_linear_digest.py +263 -0
  255. package/scripts/chat_history.py +796 -7
  256. package/scripts/check_compression.py +139 -0
  257. package/scripts/check_iron_law_prominence.py +143 -0
  258. package/scripts/check_md_language.py +159 -0
  259. package/scripts/check_portability.py +38 -0
  260. package/scripts/check_public_links.py +185 -0
  261. package/scripts/check_references.py +1 -0
  262. package/scripts/check_reply_consistency.py +140 -0
  263. package/scripts/command_suggester/__init__.py +51 -0
  264. package/scripts/command_suggester/cooldown.py +132 -0
  265. package/scripts/command_suggester/loader.py +70 -0
  266. package/scripts/command_suggester/match.py +180 -0
  267. package/scripts/command_suggester/rank.py +120 -0
  268. package/scripts/command_suggester/render.py +86 -0
  269. package/scripts/command_suggester/sanitize.py +113 -0
  270. package/scripts/command_suggester/settings.py +125 -0
  271. package/scripts/command_suggester/types.py +78 -0
  272. package/scripts/hooks/augment-chat-history.sh +56 -0
  273. package/scripts/install-hooks.sh +67 -0
  274. package/scripts/install.py +150 -33
  275. package/scripts/lint_marketplace.py +27 -0
  276. package/scripts/lint_no_new_atomic_commands.py +179 -0
  277. package/scripts/lint_rule_interactions.py +149 -0
  278. package/scripts/memory_lookup.py +1 -1
  279. package/scripts/migrate_command_suggestions.py +151 -0
  280. package/scripts/release.py +297 -64
  281. package/scripts/schemas/command.schema.json +41 -0
  282. package/scripts/skill_linter.py +81 -0
  283. package/scripts/sync_agent_settings.py +42 -12
  284. package/scripts/update_counts.py +10 -0
  285. package/templates/consumer-settings/augment-cli-hooks.json +54 -0
  286. package/templates/consumer-settings/claude-settings.json +55 -1
  287. package/.agent-src/rules/chat-history.md +0 -171
  288. package/.agent-src/templates/scripts/implement_ticket/cli.py +0 -171
  289. package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +0 -134
  290. package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +0 -49
  291. package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +0 -140
@@ -30,12 +30,13 @@ the dashboard **in the same response**.
30
30
  `count_open == 0` (pure `[x]`, or `[x]` + `[~]`/`[-]`), `git mv`
31
31
  it into `agents/roadmaps/archive/` **before** regenerating — see
32
32
  the auto-archive decision table under "Check completion status"
33
- below. A 100%-complete roadmap left in `agents/roadmaps/` makes
34
- the next reader think work is still open.
33
+ below. A 100%-complete roadmap left in `agents/roadmaps/` makes the
34
+ next reader think work is still open.
35
35
 
36
- Enforced by [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md).
37
- Batching edits in one response is fine — one final regeneration before
38
- replying is enough. But the response must not end without it.
36
+ This is enforced by the [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md)
37
+ rule. Batching multiple edits in one response is fine — one final
38
+ regeneration before replying is enough. But the response must not end
39
+ without it.
39
40
 
40
41
  ## Procedure: Manage a roadmap
41
42
 
@@ -100,11 +101,13 @@ Every roadmap follows this structure:
100
101
 
101
102
  ## Key rules for roadmaps
102
103
 
103
- ### Checkboxes
104
+ ### Checkboxes — mandatory, not decorative
104
105
 
106
+ - **Every active roadmap MUST contain at least one `- [ ]` per non-intro phase.** Decision tables, ICE matrices, and block-sequencing tables are valid rationale, but they do not satisfy this rule on their own — pair them with a `## Phase N` or `## Implementation Checklist` section whose checkboxes execute the decision. A roadmap without checkboxes is invisible to `agents/roadmaps-progress.md` and violates [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) Iron Law #2.
105
107
  - Every actionable step uses `- [ ]` (unchecked) or `- [x]` (completed).
106
108
  - Mark steps as `[x]` immediately after completing them.
107
109
  - Never remove completed steps — they serve as history.
110
+ - **Status is binary: `ready` (default, implicit) or `draft`.** New roadmaps are created **ready** unless the user explicitly says otherwise — `ready` is implicit and need not be written. A roadmap that is still being authored, awaiting upstream decisions, or capturing options without a worked plan declares `status: draft` in YAML frontmatter at the top of the file. Drafts are hidden from `agents/roadmaps-progress.md` until the flag is removed or flipped to `ready`. There are no other status values; legacy banners (`**Status: directional**`, `Status: capture-only`, `mode: feedback`) are removed.
108
111
 
109
112
  ### Phases
110
113
 
@@ -138,8 +141,15 @@ Every roadmap implicitly includes these gates (run after each step that changes
138
141
  1. Ask the user for goal, context-create, and phases.
139
142
  2. Use the template structure from `.augment/templates/roadmaps.md`.
140
143
  3. Review with the user iteratively until approved.
141
- 4. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
142
- 5. Regenerate the dashboard so the new roadmap is included.
144
+ 4. **Branch & release questions at most once, only if genuinely useful.**
145
+ Default: stay on the current branch, no version numbers in the
146
+ roadmap. Only propose a separate branch when there is concrete,
147
+ evidence-based reason (e.g. risky migration benefits from a spike).
148
+ Never include release versions, deprecation dates, or git tags in
149
+ the roadmap text. If the user declines, do **not** re-propose during
150
+ `roadmap-execute`. Decline = silence. See [`scope-control`](../../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
151
+ 5. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
152
+ 6. Regenerate the dashboard so the new roadmap is included.
143
153
 
144
154
  ### Executing a roadmap
145
155
 
@@ -266,8 +276,10 @@ Command:
266
276
  ./agent-config roadmap:progress-check # CI: fail if stale
267
277
  ```
268
278
 
269
- The `./agent-config` wrapper is written into the project root by the
270
- installer and always works no global tooling or task runner required.
279
+ The `./agent-config` wrapper lives in the project root (written by the
280
+ package installer, gitignored) and delegates to the master CLI inside
281
+ `node_modules/@event4u/agent-config/` or `vendor/event4u/agent-config/`.
282
+ No global tooling required.
271
283
 
272
284
  The dashboard is a **read-only snapshot**. Do not edit it by hand — regenerate it.
273
285
 
@@ -303,4 +315,5 @@ The dashboard is a **read-only snapshot**. Do not edit it by hand — regenerate
303
315
  - Do NOT archive roadmaps with open `[ ]` items without asking the user.
304
316
  - Do NOT delete roadmaps — always move to `archive/` or `skipped/`.
305
317
  - Do NOT use `skipped/` as a dumping ground for partially-finished work — that is what `archive/` with deferred items is for.
306
- - Do NOT assign version numbers, git tags, or release identifiers to phases. Roadmaps plan work; releases and tags are decided by the user separately.
318
+ - Do NOT assign version numbers, git tags, deprecation dates, or release identifiers to phases. Roadmaps plan work; releases and tags are decided by the user separately. Hard rule — see [`scope-control`](../../rules/scope-control.md#git-operations--permission-gated).
319
+ - Do NOT propose a branch switch while executing a roadmap. The branch question is settled at creation time; if the user already declined (or you never asked because it wasn't sensible), stay silent. See [`scope-control`](../../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
@@ -4,6 +4,8 @@ description: "Use when creating or editing a rule in .agent-src.uncompressed/rul
4
4
  source: package
5
5
  ---
6
6
 
7
+ <!-- cloud_safe: degrade -->
8
+
7
9
  # rule-writing
8
10
 
9
11
  ## When to use
@@ -100,7 +102,8 @@ the PR or split by responsibility.
100
102
  → must report **0 FAIL**.
101
103
  * Run `bash scripts/compress.sh --sync` to regenerate `.agent-src/rules/{name}.md`.
102
104
  * Run `python3 scripts/compress.py --generate-tools` to project into `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules`.
103
- * Run the full CI pipeline locally each script directly must exit 0 except for tolerated warnings.
105
+ * Run the full CI pipeline locally (see `Taskfile.yml` in this repo for
106
+ the script list) — must exit 0 except for tolerated warnings.
104
107
 
105
108
  ## Frontmatter shape
106
109
 
@@ -137,6 +140,25 @@ source: package # or project for consumer-local rules
137
140
  * Do NOT skip the linter
138
141
  * Do NOT create a rule when a guideline or skill is the right shape
139
142
 
143
+ ## Cloud Behavior
144
+
145
+ On cloud surfaces (Claude.ai Web, Skills API) the package's
146
+ `scripts/skill_linter.py`, `scripts/compress.py`, and `task` runner
147
+ are not reachable. The skill still applies — with prose-only
148
+ validation:
149
+
150
+ * Emit the full rule file as a copyable Markdown block. Do not
151
+ attempt to write to disk.
152
+ * Self-check the frontmatter against the rules: `type` is `always`
153
+ or `auto`, `description` is trigger-shaped, `alwaysApply` matches
154
+ `type`.
155
+ * Self-check the body: under the size budget (200 lines hard,
156
+ 120 soft), trigger sentence first, no embedded procedures.
157
+ * Tell the user to save under `.agent-src.uncompressed/rules/{name}.md`
158
+ and run `task sync && task lint-skills` locally before committing.
159
+ * Do not call the linter or compressor — they only run on the
160
+ user's machine.
161
+
140
162
  ## Examples
141
163
 
142
164
  Good description (trigger-shaped, names domain + symptoms):
@@ -173,11 +173,9 @@ Present the stub as a numbered-options prompt (per `user-interaction`):
173
173
  ```
174
174
 
175
175
  Nothing is committed without the user's pick. If the user picks *skip*,
176
- record it in the commit message (`Eval stub: deferred`). See
177
- [`road-to-trigger-evals.md`](../../../agents/roadmaps/archive/road-to-trigger-evals.md)
178
- Phase 1 for the runner and expected format; peer examples:
179
- `php-coder/evals/triggers.json`, `eloquent/evals/triggers.json`,
180
- `skill-writing/evals/triggers.json`.
176
+ record it in the commit message (`Eval stub: deferred`). Peer examples
177
+ for the expected format: `php-coder/evals/triggers.json`,
178
+ `eloquent/evals/triggers.json`, `skill-writing/evals/triggers.json`.
181
179
 
182
180
  Rules / commands / guidelines do **not** get eval stubs — only skills
183
181
  route through the top-level catalogue.
@@ -182,10 +182,10 @@ If the contribution originates from a proposal under `agents/proposals/`
182
182
  run the Stage-4 gate before opening the PR:
183
183
 
184
184
  ```bash
185
- python3 scripts/check_proposal.py agents/proposals/{slug}.md
185
+ ./agent-config proposal:check agents/proposals/{slug}.md
186
186
  ```
187
187
 
188
- **Hard refusal rule:** if `check_proposal.py` exits non-zero, STOP —
188
+ **Hard refusal rule:** if `./agent-config proposal:check` exits non-zero, STOP —
189
189
  do not create the branch, do not push, do not open the PR. Surface the
190
190
  findings to the user, ask them to fix the proposal (add evidence,
191
191
  remove TODO markers, complete required sections), then rerun.
@@ -247,7 +247,7 @@ The shared version now replaces the local override.
247
247
  ## Do NOT
248
248
 
249
249
  - **Do NOT create any upstream artifact without explicit user consent** — this is the #1 rule
250
- - **Do NOT open a PR if `check_proposal.py` blocks** — fix the proposal first (step 6b)
250
+ - **Do NOT open a PR if `./agent-config proposal:check` blocks** — fix the proposal first (step 6b)
251
251
  - Do NOT edit `.augment/` in the consumer project — it's managed by the package
252
252
  - Do NOT submit project-specific content without generalizing it first
253
253
  - Do NOT skip the compressed version — both files are mandatory
@@ -68,10 +68,12 @@ Stop at the first match — do not ask if discovered:
68
68
 
69
69
  Ask format:
70
70
 
71
- > 1. `.worktrees/` — project-local, hidden (recommended)
71
+ > 1. `.worktrees/` — project-local, hidden
72
72
  > 2. `worktrees/` — project-local, visible
73
73
  > 3. `~/.config/agent-config/worktrees/<project>/` — global
74
74
 
75
+ **Recommendation: 1 — `.worktrees/`** — project-local keeps the worktree next to the repo (easy cleanup), and the leading dot keeps it out of `ls`. Caveat: pick 3 if multiple repos must share a single worktree root.
76
+
75
77
  ### 3. Verify ignore-safety (project-local only)
76
78
 
77
79
  ```bash
@@ -34,12 +34,30 @@
34
34
 
35
35
  ### Recommended entry flow
36
36
 
37
- For most tickets feature, bug fix, or refactor start with
38
- [`/implement-ticket`](.augment/commands/implement-ticket.md). It drives the
39
- linear flow `refine memory analyze → plan → implement → test → verify →
40
- report` with block-on-ambiguity semantics and no auto-git. Persona comes from
41
- `.agent-settings.yml` (`roles.active_role`). Use `/commit` and `/create-pr`
42
- explicitly after the delivery report.
37
+ Two entrypoints share the same engine and Option-A loop; pick by input shape:
38
+
39
+ | You have | Command | Envelope |
40
+ |---|---|---|
41
+ | Ticket id, URL, or pasted ticket payload | [`/implement-ticket`](.augment/commands/implement-ticket.md) | `input.kind="ticket"` |
42
+ | Free-form goal, no ticket | [`/work`](.augment/commands/work.md) | `input.kind="prompt"` |
43
+
44
+ Both drive the linear flow `refine → memory → analyze → plan → implement →
45
+ test → verify → report` with block-on-ambiguity semantics and no auto-git.
46
+
47
+ `/work` adds a confidence-band gate at `refine`: the
48
+ [`refine-prompt`](.augment/skills/refine-prompt/SKILL.md) skill scores the
49
+ prompt on five dimensions and the engine proceeds **silently** on `high`,
50
+ halts with an **assumptions report** on `medium`, or halts with **one
51
+ clarifying question** on `low` (per the `ask-when-uncertain` Iron Law).
52
+ UI-shaped prompts route through the product UI track (`directive_set`
53
+ `ui` / `ui-trivial` / `mixed`) — `audit → design → apply → review →
54
+ polish` with a hard audit gate before any `apply`.
55
+
56
+ Persona comes from `.agent-settings.yml` (`roles.active_role`). Use
57
+ `/commit` and `/create-pr` explicitly after the delivery report. The two
58
+ flows are mutually exclusive at the state-file level: one
59
+ `.work-state.json` carries one envelope at a time; the engine refuses to
60
+ switch mid-flight.
43
61
 
44
62
  ### Multi-Agent Support
45
63
 
@@ -84,6 +84,15 @@ personal:
84
84
  # Personal preference — each developer decides for themselves.
85
85
  pr_comment_bot_icon: false
86
86
 
87
+ # Autonomous execution — suppress trivial workflow questions (on, off, auto)
88
+ # on = act on the obvious next step; never ask "Step 2 or 3?", "should I commit?", etc.
89
+ # off = ask trivial workflow questions (legacy behavior)
90
+ # auto = behaves like 'off' until the user says "arbeite selbstständig" / "work autonomously"
91
+ # in the conversation, then switches to 'on' for the rest of the chat.
92
+ # Blocking decisions (security, scope expansion, push/merge/branch/PR) are NEVER suppressed.
93
+ # See rules/autonomous-execution.md for the full definition.
94
+ autonomy: auto
95
+
87
96
  # --- Project / team preferences ---
88
97
  project:
89
98
  # Path to the PR template file (relative to project root)
@@ -132,6 +141,74 @@ chat_history:
132
141
  # Overflow behavior: rotate (drop oldest) | compress (summarize)
133
142
  on_overflow: rotate
134
143
 
144
+ # Heartbeat marker visibility: on | off | hybrid
145
+ # on — print marker every reply (~20 tokens/reply, legacy)
146
+ # off — never print (zero tokens, no drift signal)
147
+ # hybrid — print only on drift (missing/foreign/returning); silent otherwise
148
+ # YAML 1.1 booleanizes bare on/off — both are accepted, no quoting needed.
149
+ heartbeat: hybrid
150
+
151
+ # Population path: hook | checkpoint | manual
152
+ # hook — platform fires lifecycle hooks; agent observes only
153
+ # (Claude Code, Augment CLI, Cursor 1.7+, Cline non-Windows,
154
+ # Windsurf, Gemini CLI). scripts/install.py wires hooks.
155
+ # checkpoint — agent invokes /chat-history-checkpoint at phase boundaries
156
+ # (Augment IDE plugin, Cursor < 1.7, Cline on Windows).
157
+ # Cooperative three-gate Iron Law applies.
158
+ # manual — rule is inert (cloud surfaces). Persistence is local-only.
159
+ # Default `checkpoint` is the safest cooperative fallback. HOOK platforms
160
+ # set this to `hook` automatically when scripts/install.py merges the
161
+ # platform's settings file.
162
+ path: checkpoint
163
+
164
+ # --- Work-engine hooks ---
165
+ #
166
+ # Lifecycle hook surface of the `work_engine` Python engine
167
+ # (scripts/work_engine/). Hooks observe, validate, or persist around the
168
+ # six CLI events (before_load, after_load, before_dispatch,
169
+ # after_dispatch, before_save, after_save) and the dispatcher events
170
+ # (before_step, after_step, on_halt). See agents/contexts/
171
+ # work-engine-hooks.md for the full lifecycle and registration contract.
172
+ #
173
+ # Default-off by construction: when the `hooks:` block is absent the
174
+ # registry stays empty and golden-replay flows are byte-stable. Enable
175
+ # the master switch to opt in; per-hook flags then control individual
176
+ # registration.
177
+ hooks:
178
+ # Master switch — when false (default) the registry stays empty
179
+ # regardless of the per-hook fields below.
180
+ enabled: false
181
+
182
+ # TraceHook — emits per-event trace lines on stderr. Useful for
183
+ # debugging engine flow; off by default because it is noisy.
184
+ trace: false
185
+
186
+ # HaltSurfaceAuditHook — defense-in-depth check that every halt
187
+ # surfaced by the dispatcher carries the expected shape. Cheap.
188
+ halt_surface_audit: true
189
+
190
+ # StateShapeValidationHook — re-runs the state schema validator on
191
+ # AFTER_LOAD and BEFORE_SAVE. Cheap, catches drift between the
192
+ # in-memory state and the persisted JSON.
193
+ state_shape_validation: true
194
+
195
+ # DirectiveSetGuardHook — verifies the directive-set resolved by the
196
+ # dispatcher matches the input envelope's intent. Cheap, catches
197
+ # routing drift.
198
+ directive_set_guard: true
199
+
200
+ # Chat-history hooks — populate .agent-chat-history structurally from
201
+ # the engine. Gated by BOTH this block AND the global
202
+ # chat_history.enabled above; either off → no chat-history hook
203
+ # registers. Keep both on for the HOOK path; flip either off to fall
204
+ # back to the cooperative CHECKPOINT path.
205
+ chat_history:
206
+ enabled: true
207
+ # Override path to the chat-history CLI (defaults to
208
+ # scripts/chat_history.py). Only set this when the script lives
209
+ # outside the standard location.
210
+ # script: scripts/chat_history.py
211
+
135
212
  # --- Optional pipelines ---
136
213
  pipelines:
137
214
  # Skill improvement pipeline (true, false)
@@ -193,6 +270,58 @@ onboarding:
193
270
  # Set to true automatically by /onboard at the end. Flip to false
194
271
  # if you want to re-run the flow.
195
272
  onboarded: false
273
+
274
+ # --- Command suggestion (numbered-options shortcut finder) ---
275
+ #
276
+ # When the user's free-form prompt matches an eligible slash command,
277
+ # the agent surfaces a numbered-options block with the recommendation
278
+ # plus an always-present "run as-is" option. The suggestion layer
279
+ # never auto-executes — the user picks. See `rules/command-suggestion.md`.
280
+ commands:
281
+ suggestion:
282
+ # Master switch (true, false). `false` = the layer is silent;
283
+ # explicit `/commands` still work as today.
284
+ enabled: true
285
+ # Minimum match score (0.0–1.0) before a suggestion surfaces.
286
+ confidence_floor: 0.6
287
+ # Cooldown in seconds between re-suggestions of the same
288
+ # (command, evidence) pair. Default 600 = 10m.
289
+ cooldown_seconds: 600
290
+ # Max number of command suggestions before the as-is option.
291
+ # The as-is option is always extra (total rendered = max_options + 1).
292
+ max_options: 4
293
+ # Commands to never suggest. Still work when typed explicitly.
294
+ blocklist: []
295
+
296
+ # --- Telemetry (artefact engagement, default-off) ---
297
+ #
298
+ # Records — at task / phase-step boundaries — which artefacts (skills,
299
+ # rules, commands, guidelines, personas) the agent consulted and
300
+ # applied. Local only, append-only JSONL, never reaches a consumer
301
+ # repo (gitignored). Maintainer-targeted feature; consumers leave it
302
+ # off. See `docs/contracts/artifact-engagement-flow.md` (once Phase 3
303
+ # of road-to-artifact-engagement-telemetry lands).
304
+ telemetry:
305
+ artifact_engagement:
306
+ # Master switch. `false` (default) produces zero file IO and zero
307
+ # token cost. Flip to `true` only as a maintainer; the very first
308
+ # `record` call prints a one-line stderr warning to make accidental
309
+ # enables visible.
310
+ enabled: false
311
+ # `task` = one event per /implement-ticket or /work run.
312
+ # `phase-step` = one event per refine|memory|analyze|plan|implement|test|verify|report step.
313
+ # `tool-call` = one event per tool invocation; expensive, opt-in only.
314
+ granularity: task
315
+ # Which categories the agent records. Both default to `true`;
316
+ # flip individually if a maintainer wants applied-only or
317
+ # consulted-only data.
318
+ record:
319
+ consulted: true
320
+ applied: true
321
+ output:
322
+ # Append-only JSONL log. Path is relative to the project root.
323
+ # Always gitignored (see config/gitignore-block.txt).
324
+ path: .agent-engagement.jsonl
196
325
  ```
197
326
 
198
327
  ## Settings Reference
@@ -213,6 +342,7 @@ lives under `personal:` in YAML.
213
342
  | `personal.minimal_output` | `true`, `false` | `true` | When `true`: short bullet points during work, concise summary at end. When `false`: verbose explanations. |
214
343
  | `personal.play_by_play` | `true`, `false` | `false` | When `true`: share intermediate findings during investigation. When `false`: work silently, report only the conclusion. |
215
344
  | `personal.pr_comment_bot_icon` | `true`, `false` | `false` | Prefix PR comment replies with 🤖 to indicate bot-authored replies. Personal preference — each developer decides. |
345
+ | `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
216
346
  | `project.pr_template` | file path | `.github/pull_request_template.md` | Path to PR template file. Read this instead of searching for it. |
217
347
  | `project.upstream_repo` | `org/repo` | _(empty)_ | Target repository for universal improvement PRs (e.g., `org/agent-config`). |
218
348
  | `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
@@ -222,6 +352,15 @@ lives under `personal:` in YAML.
222
352
  | `chat_history.frequency` | `per_turn`, `per_phase`, `per_tool` | per profile | Logging granularity. Defaults: `minimal`→`per_turn`, `balanced`→`per_phase`, `full`→`per_tool`. |
223
353
  | `chat_history.max_size_kb` | integer | per profile | Max file size before overflow handling. Defaults: `minimal`→`128`, `balanced`→`256`, `full`→`512`. |
224
354
  | `chat_history.on_overflow` | `rotate`, `compress` | per profile | On overflow: `rotate` drops oldest entries; `compress` marks the file for summarization on the next turn. Defaults: `minimal`/`balanced`→`rotate`, `full`→`compress`. |
355
+ | `chat_history.heartbeat` | `on`, `off`, `hybrid` | `hybrid` | Visibility of the `📒 chat-history:` marker. `on` = every reply (~20 tokens), `off` = silent, `hybrid` = print only on drift states (`missing`/`foreign`/`returning`). YAML `on`/`off` accepted bare. |
356
+ | `chat_history.path` | `hook`, `checkpoint`, `manual` | `checkpoint` | Population path. `hook` = platform fires lifecycle hooks; `checkpoint` = agent invokes `/chat-history-checkpoint` at phase boundaries; `manual` = rule inert (cloud). `scripts/install.py` flips this to `hook` when the platform's hook config is deployed. See [`agents/contexts/chat-history-platform-hooks.md`](../../../agents/contexts/chat-history-platform-hooks.md). |
357
+ | `hooks.enabled` | `true`, `false` | `false` | Master switch for the work-engine hook layer. When `false` (default) the registry stays empty and golden replay is byte-stable. See [`agents/contexts/work-engine-hooks.md`](../../../agents/contexts/work-engine-hooks.md). |
358
+ | `hooks.trace` | `true`, `false` | `false` | Emit per-event trace lines on stderr. Useful for debugging; off by default because it is noisy. |
359
+ | `hooks.halt_surface_audit` | `true`, `false` | `true` | Defense-in-depth check that every halt surfaced by the dispatcher carries the expected shape. Cheap. |
360
+ | `hooks.state_shape_validation` | `true`, `false` | `true` | Re-run the state schema validator on `AFTER_LOAD` and `BEFORE_SAVE`. Cheap, catches drift. |
361
+ | `hooks.directive_set_guard` | `true`, `false` | `true` | Verify the dispatcher-resolved directive set matches the input envelope intent. Cheap, catches routing drift. |
362
+ | `hooks.chat_history.enabled` | `true`, `false` | `true` | Register the four chat-history hooks (turn-check, append, halt-append, heartbeat). Gated by **both** this flag AND `chat_history.enabled`; either off → no chat-history hook registers. |
363
+ | `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
225
364
  | `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
226
365
  | `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
227
366
  | `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
@@ -231,6 +370,16 @@ lives under `personal:` in YAML.
231
370
  | `personas.override` | list of persona ids | `[]` | Developer-local override of the team default lens cast. Empty = inherit `personas.default` from `.agent-project-settings.yml`. See [`layered-settings`](../guidelines/agent-infra/layered-settings.md). |
232
371
  | `personas.ignore` | list of persona ids | `[]` | Persona ids dropped from the default cast locally. Ignored personas stay invokable via `--personas=<id>`. |
233
372
  | `onboarding.onboarded` | `true`, `false` | `false` | Whether `/onboard` has run on this project. The `onboarding-gate` rule prompts for `/onboard` when this is `false`. Missing entirely = legacy project, treated as onboarded. |
373
+ | `commands.suggestion.enabled` | `true`, `false` | `true` | Master switch for the command-suggestion layer. `false` = the layer is silent; explicit `/commands` still work. See `rules/command-suggestion.md`. |
374
+ | `commands.suggestion.confidence_floor` | `0.0`–`1.0` | `0.6` | Minimum match score before a suggestion surfaces. Per-command frontmatter (`suggestion.confidence_floor`) overrides this global floor. |
375
+ | `commands.suggestion.cooldown_seconds` | integer | `600` | Cooldown between re-suggestions of the same `(command, evidence)` pair. `600` = 10m. |
376
+ | `commands.suggestion.max_options` | integer | `4` | Max number of command suggestions before the always-present "run as-is" option (total rendered = `max_options + 1`). |
377
+ | `commands.suggestion.blocklist` | list of command names | `[]` | Commands that never appear as a suggestion. They still work when typed explicitly. |
378
+ | `telemetry.artifact_engagement.enabled` | `true`, `false` | `false` | Master switch for the artefact engagement log. Default-off; zero file IO and zero token cost when `false`. Maintainer-targeted; consumers leave it off. |
379
+ | `telemetry.artifact_engagement.granularity` | `task`, `phase-step`, `tool-call` | `task` | Boundary at which events are recorded. `tool-call` is expensive — opt-in only. |
380
+ | `telemetry.artifact_engagement.record.consulted` | `true`, `false` | `true` | When `true`: record artefacts loaded into context. |
381
+ | `telemetry.artifact_engagement.record.applied` | `true`, `false` | `true` | When `true`: record artefacts cited or driving a decision. |
382
+ | `telemetry.artifact_engagement.output.path` | path | `.agent-engagement.jsonl` | Append-only JSONL log path, relative to the project root. Always gitignored. |
234
383
 
235
384
  ### Rename-Map (migration)
236
385
 
@@ -7,7 +7,8 @@ Templates for roadmap files stored in `agents/roadmaps/` or `app/Modules/{Module
7
7
  ## Rules for Roadmaps
8
8
 
9
9
  1. **Be precise and concise.** Aim for 500–1000 lines max. If larger, split into multiple files.
10
- 2. **Use checkboxes** (`- [ ]`) for every actionable step. Mark `[x]` when completed.
10
+ 2. **Checkboxes are mandatory, not decorative.** Every active roadmap MUST contain at least one `- [ ]` per non-intro phase. Decision tables, ICE matrices, and block-sequencing tables capture the *why*; checkboxes capture the *what to do next*. A roadmap without checkboxes is invisible to `agents/roadmaps-progress.md` the dashboard cannot count it, the next reader thinks no work is planned. Enforced by [`roadmap-progress-sync`](../rules/roadmap-progress-sync.md) Iron Law #2.
11
+ - **Status is binary: `ready` (default) or `draft`.** New roadmaps are created **ready** unless the user explicitly says draft — `ready` is implicit and need not be written. Drafts declare it via frontmatter at the top of the file (`---\nstatus: draft\n---`) and are hidden from the dashboard until the flag is removed or flipped to `ready`. Use `draft` while the roadmap is still being authored, while waiting for upstream decisions, or as a capture-only synthesis that has not been promoted to executable phases. There are no other status values; legacy banners like `**Status: directional**` are removed.
11
12
  3. **State the goal first.** One sentence at the top — what is the outcome?
12
13
  4. **List prerequisites** — what must exist or be running before starting.
13
14
  5. **Reference existing code** — point to files, classes, or modules.
@@ -24,11 +25,17 @@ Templates for roadmap files stored in `agents/roadmaps/` or `app/Modules/{Module
24
25
  - `agents/roadmaps/skipped/` — decision against pursuit; typically 0 items `[x]` (superseded, scope rejected)
25
26
 
26
27
  See the `roadmap-management` skill for the exact trigger matrix and user-confirmation flow.
27
-
28
28
  13. **No tags, releases, or version numbers.** Roadmaps describe work, not shipping.
29
29
  Never assign version suffixes to phases (`Phase 1 — v1.8.0`), never write
30
- "Target release: X.Y.Z", never plan git tags. Release and tag decisions
31
- belong to the user and are taken outside the roadmap.
30
+ "Target release: X.Y.Z", never plan git tags or deprecation dates. Release
31
+ and tag decisions belong to the user and are taken outside the roadmap.
32
+ This is enforced by [`scope-control`](../rules/scope-control.md#git-operations--permission-gated).
33
+ 14. **No automatic branch switches mid-roadmap.** Roadmap work runs on the
34
+ branch the user is on. If a separate branch (spike, hotfix, experiment)
35
+ would be genuinely useful, the agent may propose it **once** while
36
+ creating the roadmap — not during execution. Default: stay on the
37
+ current branch. If the user declines, the topic is closed for this
38
+ roadmap. See [`scope-control`](../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
32
39
 
33
40
  ---
34
41
 
@@ -1,40 +1,77 @@
1
- """/implement-ticket orchestrator linear step dispatcher.
2
-
3
- Shipped to consumer projects via the installer. Consumer code imports
4
- ``DeliveryState``, ``dispatch``, and the ``Outcome`` enum from this
5
- package; step implementations land in Phase 2 under
6
- ``.agent-src.uncompressed/skills/implement-ticket/`` and plug into the
7
- ``Step`` protocol exposed here.
8
-
9
- Architectural constraints (from
10
- ``agents/contexts/adr-implement-ticket-runtime.md`` and
11
- ``agents/contexts/implement-ticket-flow.md``):
12
-
13
- - Runtime is Python 3.10+.
14
- - The dispatcher is linear, not a DAG. Eight fixed steps, fixed order.
15
- - ``DeliveryState`` is the only object shared between steps — no
16
- hidden state, no side channels.
17
- - Every step terminates in ``success | blocked | partial``. ``blocked``
18
- and ``partial`` halt the flow and surface numbered questions.
19
- - The dispatcher never calls git, writes commits, or opens PRs.
1
+ """``implement_ticket``deprecated shim, retained for one release.
2
+
3
+ The engine moved to :mod:`work_engine` in R1 Phase 3. This module
4
+ re-exports the public surface so existing imports keep working, but
5
+ emits :class:`DeprecationWarning` on import. The Golden-Transcript
6
+ freeze-guard pins ``./agent-config implement-ticket`` against the
7
+ locked baseline; the shim keeps that path byte-stable while internal
8
+ callers migrate to ``work_engine``.
9
+
10
+ Remove after the next public release of this package.
20
11
  """
21
12
  from __future__ import annotations
22
13
 
23
- from .delivery_state import (
14
+ import sys as _sys
15
+ import warnings as _warnings
16
+
17
+ _warnings.warn(
18
+ "implement_ticket has moved to work_engine; importing implement_ticket "
19
+ "is deprecated and will be removed in a future release. Update imports "
20
+ "to `from work_engine import …`.",
21
+ DeprecationWarning,
22
+ stacklevel=2,
23
+ )
24
+
25
+ # Register submodule aliases so `from implement_ticket.steps.plan import …`
26
+ # and friends keep resolving to the work_engine implementation. The legacy
27
+ # package no longer ships these submodules on disk; sys.modules entries
28
+ # keep dotted-path imports working until the shim is removed.
29
+ import work_engine as _we_pkg # noqa: E402
30
+ import work_engine.cli as _we_cli # noqa: E402
31
+ import work_engine.delivery_state as _we_delivery_state # noqa: E402
32
+ import work_engine.dispatcher as _we_dispatcher # noqa: E402
33
+ import work_engine.persona_policy as _we_persona_policy # noqa: E402
34
+ import work_engine.directives.backend as _we_steps # noqa: E402
35
+ from work_engine.directives.backend import ( # noqa: E402
36
+ analyze as _we_step_analyze,
37
+ implement as _we_step_implement,
38
+ memory as _we_step_memory,
39
+ plan as _we_step_plan,
40
+ refine as _we_step_refine,
41
+ report as _we_step_report,
42
+ test as _we_step_test,
43
+ verify as _we_step_verify,
44
+ )
45
+
46
+ _sys.modules.setdefault("implement_ticket.cli", _we_cli)
47
+ _sys.modules.setdefault("implement_ticket.delivery_state", _we_delivery_state)
48
+ _sys.modules.setdefault("implement_ticket.dispatcher", _we_dispatcher)
49
+ _sys.modules.setdefault("implement_ticket.persona_policy", _we_persona_policy)
50
+ _sys.modules.setdefault("implement_ticket.steps", _we_steps)
51
+ _sys.modules.setdefault("implement_ticket.steps.analyze", _we_step_analyze)
52
+ _sys.modules.setdefault("implement_ticket.steps.implement", _we_step_implement)
53
+ _sys.modules.setdefault("implement_ticket.steps.memory", _we_step_memory)
54
+ _sys.modules.setdefault("implement_ticket.steps.plan", _we_step_plan)
55
+ _sys.modules.setdefault("implement_ticket.steps.refine", _we_step_refine)
56
+ _sys.modules.setdefault("implement_ticket.steps.report", _we_step_report)
57
+ _sys.modules.setdefault("implement_ticket.steps.test", _we_step_test)
58
+ _sys.modules.setdefault("implement_ticket.steps.verify", _we_step_verify)
59
+
60
+ from work_engine import ( # noqa: E402,F401 — re-export for backwards compat
24
61
  AGENT_DIRECTIVE_PREFIX,
62
+ DEFAULT_PERSONA,
63
+ DEFAULT_STATE_FILE,
25
64
  DeliveryState,
26
65
  Outcome,
66
+ PersonaPolicy,
67
+ STEP_ORDER,
27
68
  Step,
28
69
  StepResult,
29
70
  agent_directive,
71
+ dispatch,
30
72
  is_agent_directive,
31
- )
32
- from .cli import DEFAULT_STATE_FILE, main
33
- from .dispatcher import STEP_ORDER, dispatch
34
- from .persona_policy import (
35
- DEFAULT_PERSONA,
36
- PersonaPolicy,
37
73
  known_personas,
74
+ main,
38
75
  resolve_policy,
39
76
  )
40
77
 
@@ -1,9 +1,15 @@
1
- """Module entry point — lets ``python3 -m implement_ticket`` run the CLI."""
1
+ """Deprecated CLI entry point — delegates to :mod:`work_engine`.
2
+
3
+ ``python3 -m implement_ticket`` still works because the Golden-Transcript
4
+ freeze-guard pins that invocation. Internally it forwards to
5
+ ``work_engine.cli.main`` after emitting a ``DeprecationWarning`` from
6
+ the package ``__init__``.
7
+ """
2
8
  from __future__ import annotations
3
9
 
4
10
  import sys
5
11
 
6
- from .cli import main
12
+ from work_engine.cli import main
7
13
 
8
14
  if __name__ == "__main__":
9
15
  sys.exit(main())
@@ -246,7 +246,7 @@ def _apply_conflict_rule(
246
246
  # says retrieval should route through `@event4u/agent-memory`. The package
247
247
  # CLI is purely **semantic** (`memory retrieve <query> --type T …`); the
248
248
  # shared `retrieve(types, keys, …)` API is **key-based**. The hybrid
249
- # resolution agreed in `agents/contexts/agent-memory-contract.md` synthesises
249
+ # resolution agreed in `docs/contracts/agent-memory-contract.md` synthesises
250
250
  # `keys` into a single natural-language query for the package call, while
251
251
  # the file fallback continues to do glob/substring matching on the same
252
252
  # keys. Both legs land in the same `Hit` shape so the conflict rule can
@@ -0,0 +1,42 @@
1
+ """``telemetry`` — artefact engagement recording (default-off).
2
+
3
+ The package owns the local-only engagement log
4
+ (``.agent-engagement.jsonl``) that records, at task boundaries, which
5
+ artefacts (skills, rules, commands, guidelines, personas) the agent
6
+ ``consulted`` (loaded into context) and ``applied`` (cited or directly
7
+ drove a decision).
8
+
9
+ Architectural constraints (from
10
+ ``agents/roadmaps/road-to-artifact-engagement-telemetry.md`` Phase 1):
11
+
12
+ - Default-off. ``telemetry.artifact_engagement.enabled: false`` in
13
+ ``.agent-settings.yml`` produces zero file IO and zero token cost.
14
+ - Local only. No server-side aggregation, no cross-repo sync.
15
+ - ID-only payloads. No paths, no file contents, no prompts, no
16
+ secrets ever reach the log.
17
+ - Append-only JSONL. One event per task / phase-step boundary.
18
+ - Strict schema. Unknown artefact kinds are rejected.
19
+ """
20
+ from __future__ import annotations
21
+
22
+ from .engagement import (
23
+ ALLOWED_BOUNDARY_KINDS,
24
+ ALLOWED_KINDS,
25
+ SCHEMA_VERSION,
26
+ EngagementEvent,
27
+ EngagementSchemaError,
28
+ append_event,
29
+ now_utc_iso,
30
+ parse_event,
31
+ )
32
+
33
+ __all__ = [
34
+ "ALLOWED_BOUNDARY_KINDS",
35
+ "ALLOWED_KINDS",
36
+ "SCHEMA_VERSION",
37
+ "EngagementEvent",
38
+ "EngagementSchemaError",
39
+ "append_event",
40
+ "now_utc_iso",
41
+ "parse_event",
42
+ ]