@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
@@ -0,0 +1,117 @@
1
+ ---
2
+ type: "always"
3
+ description: "Agent is never destructive and never endangers production systems — Hard Floor that always asks for production-trunk merges, deploys, pushes, prod data/infra changes, whimsical bulk deletions, and commits containing bulk deletions or infra changes; no autonomy setting, roadmap step, or standing instruction can bypass it"
4
+ alwaysApply: true
5
+ source: package
6
+ ---
7
+
8
+ # Non-Destructive by Default
9
+
10
+ The agent is **never** destructive and **never** endangers user work
11
+ or production systems. This is the universal safety floor — it applies
12
+ in every mode, every conversation, every turn. Autonomy settings, "just
13
+ keep going" directives, roadmap authorizations, and standing
14
+ permissions narrow other rules; **none of them lift this one**.
15
+
16
+ ## The Iron Law
17
+
18
+ ```
19
+ HARD FLOOR OVERRIDES EVERYTHING.
20
+ NO AUTONOMY SETTING, NO ROADMAP STEP, NO STANDING INSTRUCTION,
21
+ NO "JUST KEEP GOING" CAN BYPASS IT.
22
+ ```
23
+
24
+ Triggers below require explicit user confirmation **on this turn** —
25
+ not from a previous turn, not from a roadmap, not from a standing
26
+ autonomy directive (see [`autonomous-execution`](autonomous-execution.md#opt-in-detection--match-by-intent-not-exact-string)
27
+ for the anchor list of recognized phrases):
28
+
29
+ | Trigger | Examples |
30
+ |---|---|
31
+ | **Production-branch merge** | merging into `main`, `master`, `prod`, `production`, `release/*`, or any branch the project marks as deployment trunk |
32
+ | **Deploy / release** | `terraform apply` on prod, `kubectl apply` on prod, deploy scripts, release commands, tag pushes that trigger CI deployment |
33
+ | **Push to remote** | any `git push` (also covered by [`scope-control`](scope-control.md), restated so the floor never weakens) |
34
+ | **Production data / infra** | prod DB writes or migrations, prod config, secrets rotation, IAM / role / policy, DNS, anything in a `prod`-scoped path or pipeline |
35
+ | **Whimsical or unscoped bulk deletion** | `rm -rf <dir>`, `git rm -r`, glob deletions, `DROP TABLE`, `TRUNCATE`, `git reset --hard` past unpushed work — when the deletions are **not required by the current task**. Task-aligned bulk deletions are allowed during WIP — see below. |
36
+ | **Commit containing bulk deletions or infra changes** | a commit whose diff removes a directory, deletes ≥5 unrelated files, or touches Terraform / Pulumi / k8s manifests / Ansible / cloud-config — surface the diff and confirm even when [`commit-policy`](commit-policy.md) otherwise authorizes the commit |
37
+
38
+ Standing "just keep going" + next step crosses the floor → STOP,
39
+ surface what's about to happen (one numbered-options block per
40
+ [`user-interaction`](user-interaction.md)), wait. Other rules still
41
+ apply to every other step.
42
+
43
+ ## Not in scope — deterministic regeneration
44
+
45
+ Output regenerated from a tracked source (compression, code-gen,
46
+ formatter passes, lock-file rebuilds) is not destructive — the source
47
+ of truth makes it reversible. Lives in
48
+ [`autonomous-execution`](autonomous-execution.md#trivial--just-act-do-not-ask)
49
+ § Trivial, not here. Per-file diff approval is theater.
50
+
51
+ ## Bulk deletions during WIP — allowed if task-connected
52
+
53
+ Deletions inside an **active, user-stated task** are allowed in the
54
+ working tree, **even multiple files or multiple folders**. The floor
55
+ moves to the **commit** (row 6 above), not the in-progress edit.
56
+
57
+ **Allowed during WIP (no floor on the edit):**
58
+
59
+ - A roadmap step or current task explicitly names the files / folders to remove
60
+ - Refactor naturally drops deprecated code the user already agreed is dead
61
+ - Cleanup of generated artifacts — `node_modules/`, `dist/`, `.next/`,
62
+ build caches, `vendor/` reinstall — never source code
63
+ - Single-file edits, single-class refactors, deleting **one** file the
64
+ user just named
65
+ - Renames and moves (technically delete + add)
66
+
67
+ **Floor fires on the edit when the deletion is:**
68
+
69
+ - Whimsical — "while I was in there", drive-by cleanup not part of the task
70
+ - Unnamed scope — "delete all the old tests" without a list, glob
71
+ across unrelated files, "clean up the legacy folder" with no inventory
72
+ - ≥5 unrelated files in one operation, outside the current task scope
73
+ - Content destruction — `DROP TABLE`, `TRUNCATE`, `git reset --hard`
74
+ past unpushed work, database wipes (destroys *content*, not just tree)
75
+
76
+ Ambiguous → floor wins. Ask.
77
+
78
+ **The commit of task-aligned bulk deletions still needs its own ask.**
79
+ A roadmap or task authorizes the *edit*; only the user-this-turn
80
+ authorizes the *commit* (row 6). Surface the diff (paths + counts), get
81
+ confirmation, then commit.
82
+
83
+ ## Failure modes
84
+
85
+ - Treating a standing autonomy directive as cover for a Hard-Floor
86
+ action. Standing autonomy never lifts the floor; merging to `main`,
87
+ deploying, pushing, prod-data edits, or whimsical `rm -rf <dir>`
88
+ always ask.
89
+ - Reading a roadmap step that says "deploy to staging" or
90
+ "merge into main" as authorization. The roadmap can sequence the
91
+ work; only the user-this-turn can authorize the floor crossing.
92
+ - Refusing to delete files the user already named because "the floor
93
+ fires on `rm`". It does not — task-aligned WIP deletions are
94
+ allowed, even multi-folder. The floor fires when the deletion is
95
+ whimsical, unscoped, or about to be committed.
96
+ - Committing a diff that removes a directory, deletes ≥5 unrelated
97
+ files, or touches Terraform / k8s manifests / Ansible without
98
+ surfacing the diff first — even when [`commit-policy`](commit-policy.md)
99
+ otherwise authorizes commits (e.g. `/commit-in-chunks`, roadmap
100
+ pre-scan, an explicit "commit this now"). Bulk-deletion / infra
101
+ commits need their own ask, every time.
102
+ - Reading a roadmap step listing files to delete as authorization to
103
+ *commit* the deletion. The step authorizes the *edit*; the commit
104
+ is row 6 of the Hard Floor and needs its own confirmation.
105
+
106
+ ## Cloud Behavior
107
+
108
+ The Hard Floor applies on every surface, including Claude.ai Web,
109
+ Skills API, and any cloud agent. There is no "cloud override" — the
110
+ floor predates and outranks any platform-specific autonomy default.
111
+
112
+ ## See also
113
+
114
+ - [`autonomous-execution`](autonomous-execution.md) — defers to this rule for the floor; covers trivial-vs-blocking and opt-in detection only
115
+ - [`commit-policy`](commit-policy.md) — four commit-exception paths; row 6 of the floor still applies on top of all four
116
+ - [`scope-control`](scope-control.md) — git-ops permission gate; the floor is the never-overridable subset
117
+ - [`user-interaction`](user-interaction.md) — numbered-options Iron Law for the confirmation prompt
@@ -9,10 +9,14 @@ source: package
9
9
 
10
10
  Before **any** push/PR in agent-config: run ALL CI checks locally.
11
11
 
12
+ ## The Iron Law
13
+
12
14
  ```
13
15
  NEVER push without running ALL CI checks locally first.
14
16
  ```
15
17
 
18
+ Every CI pipeline failure is preventable by running these checks before pushing.
19
+
16
20
  ## Required checks
17
21
 
18
22
  ### 1. Sync
@@ -9,8 +9,25 @@ source: package
9
9
 
10
10
  Transformations (merge, refactor, compress, split) must produce output **at least as strong** as input.
11
11
 
12
+ ## Iron Laws — every passage stays, caveman is fine
13
+
14
+ Sections marked **Iron Law** (heading matches `# Iron Law`, `# Iron Laws`,
15
+ `# The Iron Law`, any level, numbered like `Iron Law 1`, `Iron Law 2`)
16
+ are **non-negotiable**, strictest preservation:
17
+
18
+ - [ ] **Heading verbatim** — exact text, exact level. Drop heading → law gone, even if code block survives.
19
+ - [ ] **Fenced code blocks byte-for-byte** — the law itself.
20
+ - [ ] **Negation clauses kept** — `NO X`, `NEVER Y`, `NOT Z` stay. Load-bearing exception denials, not filler.
21
+ - [ ] **Every passage stays** — every paragraph, every list item, every fenced code block from source survives in compressed output, in order. One paragraph → one paragraph; one bullet → one bullet. Dropping whole sentences, merging two paragraphs, skipping a list item is forbidden, even if surviving prose still "makes the point".
22
+ - [ ] **No Iron Law downgrades** — `## Iron Law` MUST NOT become `### Iron Law`, `**Iron Law:**`, or inline prose. Heading level is part of prominence.
23
+
24
+ **Caveman style encouraged for Iron Law bodies** — drop articles ("the", "a"), shorten phrasing, primitive grammar, terse cave-speak. Word count not a budget; structural unit count is. Every paragraph, bullet, code block from source present → compress as hard as you want. Forbidden is **deletion**: rationale paragraph stays, canonical-failure example stays, every "NEVER X" bullet stays.
25
+
26
+ `scripts/check_compression.py` enforces mechanically — any violation is `error`, not warning.
27
+
12
28
  ## Checklist — verify before completing
13
29
 
30
+ - [ ] **Iron Law sections** preserved per rules above — heading, body, fenced blocks, rationale
14
31
  - [ ] Strongest validation step preserved
15
32
  - [ ] Strongest example preserved
16
33
  - [ ] Strongest anti-pattern / "Do NOT" preserved
@@ -21,6 +38,9 @@ Transformations (merge, refactor, compress, split) must produce output **at leas
21
38
 
22
39
  ## Reject if
23
40
 
41
+ - Iron Law heading removed or downgraded
42
+ - Paragraph, list item, or fenced code block dropped from Iron Law section
43
+ - Negation clauses or canonical-failure prose stripped from Iron Law
24
44
  - Validation, example, or anti-pattern removed without replacement
25
45
  - Decision logic weakened
26
46
  - Scope broadened by merging unrelated concerns
@@ -1,28 +1,86 @@
1
1
  ---
2
2
  type: "auto"
3
- description: "Editing checkboxes in agents/roadmaps/*.md — [x], [~], [-], or add/rename/remove phases — must regenerate the roadmap dashboard in the SAME response; a roadmap that hits 0 open items must also be archived in the SAME response"
3
+ description: "Any touch to agents/roadmaps/creating, renaming, deleting, or moving a roadmap file (including into archive/ or skipped/), editing checkboxes ([x], [~], [-]), or adding/renaming/removing phases — must regenerate the roadmap dashboard in the SAME response; a roadmap that hits 0 open items must also be archived in the SAME response"
4
4
  alwaysApply: false
5
5
  source: package
6
6
  ---
7
7
 
8
8
  # Roadmap Progress Sync
9
9
 
10
- ## Rule
10
+ ## Iron Law — dashboard sync
11
11
 
12
- **CRITICAL — ZERO TOLERANCE:** Whenever you change checkbox state in a
13
- roadmap file (`agents/roadmaps/*.md`, module or package equivalents)
14
- you MUST regenerate the dashboard **in the same response** not
15
- later, not batched across sessions, not "at the end of the roadmap".
12
+ ```
13
+ ANY ROADMAP TOUCH REGENERATE THE DASHBOARD, SAME RESPONSE.
14
+ NO EXCEPTIONS. NO "I'LL DO IT AT THE END". NO BATCHING ACROSS TURNS.
15
+ A ROADMAP NOT IN THE DASHBOARD IS A RULE VIOLATION, NOT AN OVERSIGHT.
16
+ ```
17
+
18
+ **Roadmap touch =** create the file, rename it, delete it, move it
19
+ between `roadmaps/` ↔ `archive/` ↔ `skipped/`, add/rename/remove a
20
+ phase, **OR** flip any checkbox (`[ ]` ↔ `[x]` ↔ `[~]` ↔ `[-]`).
16
21
 
17
22
  `agents/roadmaps-progress.md` is the read-only dashboard. Every
18
- unsynced edit makes it lie to the next reader.
23
+ unsynced edit makes it lie to the next reader. Created a roadmap
24
+ without regenerating? The dashboard claims it does not exist. Marked
25
+ 8 steps `[x]` and forgot the regen? The dashboard says 0 done.
26
+
27
+ ## Iron Law — every active roadmap is trackable
28
+
29
+ ```
30
+ EVERY ACTIVE ROADMAP MUST CONTAIN AT LEAST ONE TRACKABLE CHECKBOX
31
+ (`- [ ]`) PER NON-INTRO PHASE. ROADMAPS WITHOUT EXECUTABLE STEPS
32
+ EITHER GET A CHECKLIST OR THE `status: draft` FLAG.
33
+ ```
34
+
35
+ **Active roadmap =** any file in `agents/roadmaps/` (root, not
36
+ `archive/` or `skipped/`) without `status: draft` frontmatter.
37
+
38
+ **Trackable checkbox =** an actionable `- [ ]` line under a `## Phase N`
39
+ or `### Phase N` heading (numeric `Phase 1`, roman `Phase II`, or
40
+ letter-track `Phase A1` — matched by the dashboard's `PHASE_RE`).
41
+ Tables of decisions, ICE matrices, ADR captures, and "block
42
+ sequencing" tables are valid **rationale**, but they do not satisfy
43
+ this rule on their own — they must be paired with at least one
44
+ `## Phase N` section whose checkboxes execute the decision.
45
+ Headings such as `## Phase steps`, `### Sequencing — Phase 1 …`, or
46
+ `## Block A` do **not** count — only the canonical `Phase <id>`
47
+ form parsed by the dashboard.
48
+
49
+ ## Status — binary `ready` (default) vs `draft`
50
+
51
+ ```yaml
52
+ ---
53
+ status: draft # hidden from the dashboard until flipped
54
+ ---
55
+ ```
56
+
57
+ Two values, no synonyms. Anything else — no frontmatter at all,
58
+ `status: ready`, an unknown value — counts as **ready** and lands
59
+ in the dashboard.
60
+
61
+ - **Ready** is the implicit default. New roadmaps are created
62
+ ready unless the user explicitly says draft. Ready roadmaps are
63
+ listed in the dashboard, count towards open/done totals, and
64
+ trip the "completed but not archived" warning when they close.
65
+ - **Draft** hides the file from the dashboard entirely (not
66
+ counted, not listed). Use it while the roadmap is still being
67
+ authored, while waiting for upstream decisions, or as a
68
+ capture-only synthesis that has not yet been promoted to
69
+ executable phases. Flip to ready (or remove the field) the
70
+ moment the roadmap is ready to track.
71
+
72
+ A `## Decisions` or `## Block sequencing` table is **not** a roadmap
73
+ on its own. Either pair it with a `## Phase N: <name>` section whose
74
+ checkboxes execute the decision, or mark the file `status: draft`
75
+ until the executable phases land.
19
76
 
20
77
  **Completion = archival, same response.** When the edit takes a
21
78
  roadmap to `count_open == 0` (every item is `[x]`, `[~]`, or `[-]`),
22
- `git mv` it into `agents/roadmaps/archive/` (or `skipped/` if no
23
- `[x]` at all) **before** regenerating. A 100%-complete roadmap left
24
- in `agents/roadmaps/` is a rule violation. See `roadmap-management`
25
- for the archive vs skipped decision table.
79
+ `git mv` it into `agents/roadmaps/archive/` (or `skipped/` if no `[x]`
80
+ at all) **before** regenerating the dashboard. A 100%-complete
81
+ roadmap left under `agents/roadmaps/` is a rule violation, not an
82
+ optional cleanup. See `roadmap-management` skill for the archive vs
83
+ skipped decision table.
26
84
 
27
85
  ## How to regenerate
28
86
 
@@ -31,7 +89,7 @@ for the archive vs skipped decision table.
31
89
  ```
32
90
 
33
91
  The `./agent-config` wrapper is written into the project root by the
34
- installer and delegates to the master CLI inside
92
+ package installer and delegates to the master CLI inside
35
93
  `node_modules/@event4u/agent-config/` or `vendor/event4u/agent-config/`.
36
94
  No global tooling required.
37
95
 
@@ -39,29 +97,103 @@ No global tooling required.
39
97
 
40
98
  | Edit | Must run, same response |
41
99
  |---|---|
100
+ | **Create a new roadmap file** | regenerate dashboard |
101
+ | **Rename or delete a roadmap file** | regenerate dashboard |
42
102
  | Mark step `[x]`, `[~]`, `[-]`, or unmark back to `[ ]` | regenerate dashboard |
43
103
  | Add, rename, or remove a phase | regenerate dashboard |
44
- | Create a new roadmap file | regenerate dashboard |
45
104
  | **Last `[ ]` flips** — roadmap reaches `count_open == 0` | `git mv` → `archive/` (or `skipped/`) **then** regenerate dashboard |
46
105
  | Move roadmap between `roadmaps/` ↔ `archive/` ↔ `skipped/` | regenerate dashboard |
47
106
 
48
- **Batching:** multiple checkbox edits in one response a **single**
49
- regeneration at the end is enough. If one closes a roadmap, archive
50
- it first, then run the single regen. But the response must not end
51
- without it.
107
+ **Batching rule:** if you edit multiple checkboxes in one response, a
108
+ **single** regeneration at the end of that response is enough but
109
+ the response must not end without it. If one of those edits closes a
110
+ roadmap, archive it first, then run the single regen.
111
+
112
+ ## Autonomous execution — checkbox cadence
113
+
114
+ When executing a roadmap autonomously (multi-turn, no per-step user
115
+ prompt), the user loses progress visibility unless checkboxes flip
116
+ **as work lands**, not in a batch at the end. Iron Law:
117
+
118
+ ```
119
+ EVERY DONE STEP FLIPS [ ] → [x] IN NEXT REPLY THAT ACKNOWLEDGES IT.
120
+ NO "I UPDATE ROADMAP AT END OF PHASE."
121
+ NO "FOUR STEPS DONE, ONE COMMIT, ONE REGEN."
122
+ ```
123
+
124
+ Step counts as completed when:
125
+
126
+ - Code / docs change for that step has been **written and saved** AND
127
+ - Verification cited in the step (project CI command, targeted test, lint) has
128
+ **passed in this response or an earlier one** — fresh output, not memory.
129
+
130
+ Then in the **same reply**: flip the checkbox, regenerate the
131
+ dashboard, commit if commit policy allows.
132
+
133
+ **Forbidden pattern** (canonical failure):
134
+
135
+ > Turn 1: implement Step 1. Turn 2: implement Step 2. Turn 3:
136
+ > implement Step 3. Turn 4: implement Step 4. Turn 5: "all done,
137
+ > let me update the roadmap and commit." → the user spent four turns
138
+ > without dashboard movement.
139
+
140
+ **Required pattern:**
141
+
142
+ > Turn 1: implement Step 1, flip `[x]`, regen, commit.
143
+ > Turn 2: implement Step 2, flip `[x]`, regen, commit. …
144
+
145
+ A reply that lands a verified step without flipping its checkbox
146
+ is a rule violation.
147
+
148
+ **In-progress marker:** when a step takes more than one reply,
149
+ mark it `[~]` the moment work starts on it and regenerate. The
150
+ user sees one row move from `[ ]` to `[~]` to `[x]` instead of
151
+ silent rows. `[~]` is treated as open for `count_open` but moves
152
+ the phase percentage forward in the dashboard.
153
+
154
+ ## Pre-send self-check — MANDATORY
155
+
156
+ Before sending any reply that touched `agents/roadmaps/`, run this
157
+ silent gate:
158
+
159
+ 1. Did this turn create, rename, delete, or move a roadmap file? → regen MUST be in the reply.
160
+ 2. Did this turn flip any checkbox in a roadmap file? → regen MUST be in the reply.
161
+ 3. Did the regen output (`✅ Wrote agents/roadmaps-progress.md · …`) actually appear this turn? → if no, run it now before sending.
162
+ 4. **Autonomous roadmap execution gate** — did this turn complete a roadmap step (code saved + verification passed) without flipping its checkbox? → flip `[x]` (or `[~]` if multi-turn) and regen before sending.
163
+ 5. **Trackable-roadmap gate** — did this turn create or substantially edit a roadmap file? → does it now contain at least one `- [ ]` per non-intro phase, **or** carry `status: draft` in frontmatter? → if neither, add the checklist or the draft flag before sending.
164
+
165
+ Any "yes" + no regen run = rule violation. Rerun before sending.
52
166
 
53
- ## Why this is a rule, not a skill tip
167
+ ## Failure modes
54
168
 
55
- The `roadmap-management` skill documents the command in several
56
- places, but skill body text is easy to miss under procedure pressure.
57
- A rule collapses the constraint into one line the model cannot skip:
58
- "checkbox edit regenerate dashboard same response".
169
+ - **Created the roadmap, marked Phase 1 done across multiple turns,
170
+ never regenerated** dashboard silently lies "this roadmap does
171
+ not exist" to the next reader. Canonical failure of this rule;
172
+ the rule was hardened in response to it.
173
+ - **Regenerated yesterday, edited today, "I'll regen at session
174
+ end"** — session ends from a crash, regen never lands.
175
+ - **Closed a roadmap (last `[ ]` → `[x]`) and regenerated before
176
+ `git mv`** — the closed roadmap reappears in "Open roadmaps".
177
+ - **Edited the dashboard by hand to "fix it quickly"** — next regen
178
+ overwrites the manual edit; no audit trail of why.
179
+ - **Autonomous run, four steps shipped across four turns, dashboard
180
+ flat the whole time, single regen at the end** — user lost
181
+ progress visibility for the entire run. Each completed step must
182
+ flip its checkbox in the reply that ships it.
183
+ - **Decision-only roadmap shipped without checkboxes** — the file
184
+ documents synthesized decisions, ICE matrices, or block sequencing
185
+ but contains zero `- [ ]` items. The dashboard regenerates with
186
+ `0/0 steps` for that file or omits it from the open set entirely.
187
+ The reader thinks no work is planned. Either pair the decisions
188
+ with a `## Phase N` / `## Implementation Checklist` section, or
189
+ mark the file `status: draft` so it is hidden until the executable
190
+ phases land.
59
191
 
60
192
  ## Do NOT
61
193
 
62
194
  - Do NOT edit `agents/roadmaps-progress.md` by hand — always regenerate.
63
- - Do NOT defer regen to "next commit" or "before push" — same response.
64
- - Do NOT rely on CI (`--check` mode) as first line of defence — CI is last-line, not real-time.
65
- - Do NOT skip regen because "only one checkbox changed" — the dashboard aggregates counts and phase percentages that shift on single edits.
66
- - Do NOT leave a 100%-complete roadmap in `agents/roadmaps/` "for review" — archive same response, ask the user afterwards if needed, not before.
67
- - Do NOT regenerate the dashboard before the `git mv` when a roadmap closes — otherwise it reappears in "Open roadmaps".
195
+ - Do NOT defer the regen to "next commit" or "before push" — same response.
196
+ - Do NOT rely on CI (`--check` mode) as the first line of defence — CI is last-line, not real-time.
197
+ - Do NOT skip the regen because "only one checkbox changed" — the dashboard aggregates counts and phase percentages that shift on single edits.
198
+ - Do NOT leave a 100%-complete roadmap in `agents/roadmaps/` "for review" — archive it in the same response, ask the user afterwards if needed, not before.
199
+ - Do NOT regenerate the dashboard before the `git mv` when a roadmap closes — otherwise the completed roadmap reappears in "Open roadmaps".
@@ -42,7 +42,7 @@ When active, every closing output MUST:
42
42
 
43
43
  ## What this rule does NOT do
44
44
 
45
- Infer the mode (Phase-3 router does that). Modify `.agent-settings.yml`
45
+ Infer the mode (Phase-3 router does that). Touch `.agent-settings.yml`
46
46
  (only `/mode` writes). Change the contracts (guideline is source of truth).
47
47
 
48
48
  ## See also
@@ -18,7 +18,11 @@ source: package
18
18
 
19
19
  ## Git operations — permission-gated
20
20
 
21
- The user decides the git shape of the work.
21
+ The user decides the git shape of the work. Never improvise.
22
+
23
+ > **Commit specifics:** see [`commit-policy`](commit-policy.md) — narrower
24
+ > than the general "no git ops without permission" below (never-ask
25
+ > default + roadmap-authorized exception).
22
26
 
23
27
  - NEVER commit, push, merge, rebase, or force-push without explicit user permission.
24
28
  - NEVER create, switch, or delete a branch without explicit user permission.
@@ -26,6 +30,12 @@ The user decides the git shape of the work.
26
30
  - NEVER create, close, reopen, or retarget a pull request without explicit
27
31
  user permission.
28
32
  - NEVER push a tag or create a release without explicit user permission.
33
+ - NEVER include version numbers, releases, deprecation dates,
34
+ release-tied milestones, or git tags in roadmaps, plans, tickets, or
35
+ any planning artifact. Roadmaps plan **work**; releases are a
36
+ separate user decision. Never surface "which release" as a numbered
37
+ option, ADR field, or roadmap entry. If user wants a release pinned
38
+ to a milestone, they say so explicitly.
29
39
  - If a task seems to need a separate branch or PR, STOP and **brief
30
40
  first, ask second**. The brief MUST cover, in order:
31
41
  1. **Why** — what the new branch solves that the current one cannot.
@@ -38,3 +48,34 @@ The user decides the git shape of the work.
38
48
  "Explicit permission" = the user said so this turn or gave a standing
39
49
  instruction they have not revoked. Earlier permission for another op
40
50
  does not carry over.
51
+
52
+ ## Production, infrastructure, bulk-destructive — Hard Floor
53
+
54
+ Subset of the above is **never** autonomous and never auto-permitted
55
+ by a standing autonomy directive. Canonical rule:
56
+ [`non-destructive-by-default`](non-destructive-by-default.md).
57
+ Restated so this file remains the single read for git/scope concerns:
58
+
59
+ - **Production-branch merges** — `main`, `master`, `prod`, `production`, `release/*`, or any deployment-trunk branch. Always ask, even when the roadmap step says "merge".
60
+ - **Deploys / releases** — `terraform apply` / `kubectl apply` on prod, deploy scripts, release commands, tag pushes that trigger CI deployment. Always ask.
61
+ - **Production data / infrastructure** — prod DB writes / migrations, prod config edits, secrets rotation, IAM / role / policy, DNS, anything in a `prod`-scoped path or pipeline. Always ask.
62
+ - **Bulk-destructive ops** — wildcard or directory deletion (`rm -rf <dir>`, `git rm -r`), `DROP TABLE`, `TRUNCATE`, `git reset --hard` past unpushed work, mass class / module / migration deletion. Always ask.
63
+
64
+ A roadmap step or earlier turn does **not** count as authorization for
65
+ these. Authorization is "the user said so on this turn".
66
+
67
+ ## Decline = silence — no re-asking on the same task
68
+
69
+ After a declined proposal (branch switch, PR, tag/release entry,
70
+ worktree, version pinning in a roadmap), do **not** raise it again on
71
+ the same task. Decline stands until user reopens it.
72
+
73
+ Right moment to ask — at most **once**, only when genuinely useful —
74
+ is **before** work starts (writing roadmap, opening ticket), not
75
+ mid-execution. During roadmap execution the branch question is
76
+ settled; do not resurface it step by step.
77
+
78
+ A proposal that "might be sensible" is not enough reason to ask.
79
+ Default: stay on current branch, no release language. Only ask with
80
+ concrete evidence-based reason (e.g. risky migration → spike branch).
81
+ If in doubt, do not ask.
@@ -24,6 +24,5 @@ source: package
24
24
 
25
25
  → Size limits and details: `.augment/guidelines/agent-infra/size-and-scope.md`
26
26
 
27
- → Frontmatter contract (required/optional keys per type):
28
- [`agents/docs/frontmatter-contract.md`](../../../agents/docs/frontmatter-contract.md).
29
- Schemas live in `scripts/schemas/` and are enforced by `python3 scripts/validate_frontmatter.py`.
27
+ → Frontmatter contract: schemas live in `scripts/schemas/` and are enforced by
28
+ `python3 scripts/validate_frontmatter.py`.
@@ -25,10 +25,8 @@ Every skill MUST have: `When to use`, `Procedure`, `Gotcha`, `Output format`, `D
25
25
  ## Frontmatter Contract
26
26
 
27
27
  Every skill's YAML frontmatter MUST validate against `scripts/schemas/skill.schema.json`.
28
- See [`agents/docs/frontmatter-contract.md`](../../../agents/docs/frontmatter-contract.md)
29
- for the human-readable contract across all artefact types. Violations are
30
- reported by `scripts/skill_linter.py` as `schema_<rule>` errors and fail
31
- `python3 scripts/validate_frontmatter.py` and the full CI pipeline.
28
+ Violations are reported by `scripts/skill_linter.py` as `schema_<rule>` errors
29
+ and fail `python3 scripts/validate_frontmatter.py` and the full CI pipeline.
32
30
 
33
31
  ## Description Triggering
34
32
 
@@ -47,10 +45,7 @@ Make descriptions "pushy" — explicit about when to fire:
47
45
  adjectives, drop the second example phrasing, or collapse a list — do
48
46
  **not** drop the trigger vocabulary or the `even if ...` tail.
49
47
 
50
- Source: [`skills/skill-creator` in `anthropics/skills`](https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md)
51
- — description-optimization guidance adopted via
52
- [`agents/roadmaps/archive/road-to-anthropic-alignment.md`](../../../agents/roadmaps/archive/road-to-anthropic-alignment.md)
53
- Phase 2.
48
+ Source: [`skills/skill-creator` in `anthropics/skills`](https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md).
54
49
 
55
50
  **Litmus test:** Read the description cold, without the skill's body. If you
56
51
  cannot name at least two phrasings a user would realistically type that should
@@ -0,0 +1,106 @@
1
+ ---
2
+ type: "always"
3
+ description: "UI work — never write a component, screen, or partial without existing-ui-audit findings populated in state.ui_audit; the audit is the gate, not a suggestion"
4
+ alwaysApply: true
5
+ source: package
6
+ ---
7
+
8
+ # UI-Audit Before Build
9
+
10
+ Defense-in-depth twin of the dispatcher gate in
11
+ [`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py).
12
+ The dispatcher refuses to advance past `refine` without
13
+ `state.ui_audit`; this rule refuses the write even when the agent
14
+ acts outside the dispatcher (free-form edit, "add a tile" request,
15
+ side conversation that bypasses [`/work`](../commands/work.md) or
16
+ [`/implement-ticket`](../commands/implement-ticket.md)).
17
+
18
+ ## The Iron Law
19
+
20
+ ```
21
+ NO NEW COMPONENT, SCREEN, PARTIAL, OR PAGE WITHOUT AUDIT FINDINGS.
22
+ EXISTING-UI-AUDIT RUNS FIRST. ALWAYS.
23
+ ```
24
+
25
+ Skipping the audit is the single biggest source of duplicated
26
+ components and drift from project tokens. The audit is cheap (60 s
27
+ on a primed cache); the cost of skipping is a refactor.
28
+
29
+ ## When this rule activates
30
+
31
+ Before writing or editing any non-trivial UI surface:
32
+
33
+ - New page / screen / route component
34
+ - New Livewire / Flux / Blade / React / Vue / Svelte component or partial
35
+ - Major edit to an existing screen (new section, new state, new layout band)
36
+
37
+ Recognise the trigger from wording even when nobody says "audit":
38
+ "add a dashboard tile", "build a settings panel", "neue Komponente
39
+ für …", "render the orders table", "create the empty state for …".
40
+
41
+ ## Allow-list — when to skip
42
+
43
+ Skip only when **all** hold:
44
+
45
+ - `directive_set == "ui-trivial"` (set by Phase 1's intent classifier).
46
+ - The change is provably bounded: ≤ 1 file, ≤ 5 changed lines, no
47
+ new component, no new state, no new dependency.
48
+
49
+ Any precondition fails at edit time → stop, reclassify as
50
+ `ui-improve`, re-enter the gate. Backend-only edits and
51
+ documentation work were never in scope for this rule.
52
+
53
+ ## What "audit findings" means
54
+
55
+ `state.ui_audit` is a non-empty dict carrying at least one of:
56
+
57
+ - `components_found` — `{path, name, kind, similarity?}` inventory
58
+ entries from [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md).
59
+ - `greenfield: true` plus `greenfield_decision` ∈
60
+ `{scaffold, bare, external_reference}`.
61
+ - Legacy `components` alias — back-compat for the same shape.
62
+
63
+ `null`, `{}`, or a dict without those keys is **not** findings;
64
+ emit `@agent-directive: existing-ui-audit` instead of writing code.
65
+
66
+ ## What to do when the gate fires
67
+
68
+ 1. Stop. Do not open an editor on a component file.
69
+ 2. Run [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md);
70
+ it writes the result to `state.ui_audit`.
71
+ 3. On rebound, the dispatcher enters `design` with the audit as
72
+ defaults in the design-brief halt.
73
+ 4. Greenfield → present the numbered scaffold / bare /
74
+ external-reference halt **before** code; record the pick in
75
+ `state.ui_audit.greenfield_decision`.
76
+
77
+ ## Failure modes
78
+
79
+ - Writing the component first and "thinking about reuse later".
80
+ - Citing a similar-looking component from memory without verifying
81
+ it via the audit.
82
+ - Treating `state.ui_audit = {}` as "audit ran, found nothing" —
83
+ empty dict is rejected on purpose; an audit that finds nothing
84
+ must record either ≥1 `components_found` or the greenfield branch.
85
+ - Bypassing the gate for "just one tile".
86
+
87
+ ## Interactions
88
+
89
+ - [`improve-before-implement`](improve-before-implement.md) — runs
90
+ first when the request is ambiguous; this rule is the next gate.
91
+ - [`ask-when-uncertain`](ask-when-uncertain.md) — "just build it"
92
+ does **not** drop the audit; acknowledge, run audit, continue.
93
+ - [`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py)
94
+ — code-layer twin; this rule covers the cases where the engine
95
+ is not in the loop.
96
+ - [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md) — the
97
+ skill that produces the findings.
98
+
99
+ ## Cloud Behavior
100
+
101
+ On cloud surfaces the engine is not shipped, so `state.ui_audit`
102
+ does not exist. The Iron Law still applies: take the visible
103
+ inventory of files in conversation context as the audit, and
104
+ surface a one-line audit summary in the reply before writing the
105
+ component. The gate is satisfied by an explicit summary, not by
106
+ silently skipping.