@event4u/agent-config 1.19.0 → 1.21.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 (297) hide show
  1. package/.agent-src/commands/agent-handoff.md +14 -10
  2. package/.agent-src/commands/agents.md +1 -1
  3. package/.agent-src/commands/bug-fix.md +1 -1
  4. package/.agent-src/commands/bug-investigate.md +2 -2
  5. package/.agent-src/commands/chat-history/import.md +166 -0
  6. package/.agent-src/commands/chat-history/learn.md +178 -0
  7. package/.agent-src/commands/chat-history/show.md +17 -18
  8. package/.agent-src/commands/chat-history.md +26 -25
  9. package/.agent-src/commands/compress.md +12 -0
  10. package/.agent-src/commands/context/create.md +2 -2
  11. package/.agent-src/commands/context.md +1 -1
  12. package/.agent-src/commands/copilot-agents.md +1 -1
  13. package/.agent-src/commands/council/default.md +21 -12
  14. package/.agent-src/commands/council.md +1 -1
  15. package/.agent-src/commands/create-pr.md +28 -8
  16. package/.agent-src/commands/e2e-heal.md +1 -1
  17. package/.agent-src/commands/e2e-plan.md +1 -1
  18. package/.agent-src/commands/feature/dev.md +3 -3
  19. package/.agent-src/commands/feature.md +1 -1
  20. package/.agent-src/commands/fix/seeder.md +2 -2
  21. package/.agent-src/commands/fix.md +1 -1
  22. package/.agent-src/commands/jira-ticket.md +1 -1
  23. package/.agent-src/commands/judge.md +2 -2
  24. package/.agent-src/commands/memory.md +1 -1
  25. package/.agent-src/commands/mode.md +5 -5
  26. package/.agent-src/commands/module.md +1 -1
  27. package/.agent-src/commands/onboard.md +4 -4
  28. package/.agent-src/commands/optimize/augmentignore.md +1 -1
  29. package/.agent-src/commands/optimize-prompt.md +61 -0
  30. package/.agent-src/commands/optimize.md +1 -1
  31. package/.agent-src/commands/override.md +1 -1
  32. package/.agent-src/commands/review-changes.md +1 -1
  33. package/.agent-src/commands/review-routing.md +1 -1
  34. package/.agent-src/commands/roadmap.md +1 -1
  35. package/.agent-src/commands/set-cost-profile.md +3 -3
  36. package/.agent-src/commands/sync-agent-settings.md +2 -2
  37. package/.agent-src/commands/sync-gitignore.md +1 -1
  38. package/.agent-src/commands/tests/create.md +2 -2
  39. package/.agent-src/commands/tests.md +1 -1
  40. package/.agent-src/commands/threat-model.md +4 -4
  41. package/.agent-src/contexts/authority/commit-mechanics.md +14 -1
  42. package/.agent-src/contexts/authority/destructive-mechanics.md +14 -1
  43. package/.agent-src/contexts/authority/scope-mechanics.md +5 -0
  44. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +76 -0
  45. package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +76 -0
  46. package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +4 -4
  47. package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +98 -0
  48. package/.agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +93 -0
  49. package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +125 -9
  50. package/.agent-src/contexts/execution/autonomy-mechanics.md +44 -0
  51. package/.agent-src/contexts/model-recommendations.md +2 -2
  52. package/.agent-src/contexts/override-system.md +1 -1
  53. package/.agent-src/personas/product-owner.md +2 -2
  54. package/.agent-src/personas/qa.md +1 -1
  55. package/.agent-src/rules/agent-authority.md +5 -6
  56. package/.agent-src/rules/agent-docs.md +11 -53
  57. package/.agent-src/rules/analysis-skill-routing.md +10 -40
  58. package/.agent-src/rules/architecture.md +6 -1
  59. package/.agent-src/rules/artifact-drafting-protocol.md +5 -0
  60. package/.agent-src/rules/artifact-engagement-recording.md +23 -59
  61. package/.agent-src/rules/ask-when-uncertain.md +24 -47
  62. package/.agent-src/rules/augment-portability.md +14 -62
  63. package/.agent-src/rules/augment-source-of-truth.md +10 -1
  64. package/.agent-src/rules/autonomous-execution.md +17 -98
  65. package/.agent-src/rules/capture-learnings.md +9 -80
  66. package/.agent-src/rules/cli-output-handling.md +12 -42
  67. package/.agent-src/rules/command-suggestion-policy.md +25 -73
  68. package/.agent-src/rules/commit-conventions.md +9 -58
  69. package/.agent-src/rules/commit-policy.md +16 -47
  70. package/.agent-src/rules/context-hygiene.md +5 -0
  71. package/.agent-src/rules/direct-answers.md +21 -42
  72. package/.agent-src/rules/docker-commands.md +11 -45
  73. package/.agent-src/rules/docs-sync.md +10 -56
  74. package/.agent-src/rules/downstream-changes.md +5 -0
  75. package/.agent-src/rules/e2e-testing.md +9 -44
  76. package/.agent-src/rules/guidelines.md +13 -75
  77. package/.agent-src/rules/improve-before-implement.md +10 -2
  78. package/.agent-src/rules/language-and-tone.md +35 -69
  79. package/.agent-src/rules/laravel-translations.md +11 -40
  80. package/.agent-src/rules/markdown-safe-codeblocks.md +4 -0
  81. package/.agent-src/rules/minimal-safe-diff.md +4 -0
  82. package/.agent-src/rules/missing-tool-handling.md +4 -0
  83. package/.agent-src/rules/model-recommendation.md +9 -61
  84. package/.agent-src/rules/no-attribution-footers.md +53 -0
  85. package/.agent-src/rules/no-cheap-questions.md +11 -27
  86. package/.agent-src/rules/no-council-references.md +76 -0
  87. package/.agent-src/rules/no-roadmap-references.md +8 -1
  88. package/.agent-src/rules/non-destructive-by-default.md +13 -43
  89. package/.agent-src/rules/onboarding-gate.md +9 -117
  90. package/.agent-src/rules/package-ci-checks.md +10 -37
  91. package/.agent-src/rules/php-coding.md +10 -55
  92. package/.agent-src/rules/preservation-guard.md +9 -0
  93. package/.agent-src/rules/review-routing-awareness.md +9 -97
  94. package/.agent-src/rules/reviewer-awareness.md +8 -83
  95. package/.agent-src/rules/roadmap-progress-sync.md +7 -170
  96. package/.agent-src/rules/role-mode-adherence.md +6 -2
  97. package/.agent-src/rules/rule-type-governance.md +8 -66
  98. package/.agent-src/rules/runtime-safety.md +5 -0
  99. package/.agent-src/rules/scope-control.md +17 -62
  100. package/.agent-src/rules/security-sensitive-stop.md +7 -1
  101. package/.agent-src/rules/size-enforcement.md +6 -1
  102. package/.agent-src/rules/skill-improvement-trigger.md +9 -49
  103. package/.agent-src/rules/skill-quality.md +7 -64
  104. package/.agent-src/rules/slash-command-routing-policy.md +11 -63
  105. package/.agent-src/rules/think-before-action.md +22 -87
  106. package/.agent-src/rules/token-efficiency.md +10 -74
  107. package/.agent-src/rules/token-optimizer-maintenance.md +68 -0
  108. package/.agent-src/rules/tool-safety.md +4 -0
  109. package/.agent-src/rules/ui-audit-gate.md +25 -61
  110. package/.agent-src/rules/upstream-proposal.md +9 -67
  111. package/.agent-src/rules/user-interaction.md +25 -95
  112. package/.agent-src/rules/verify-before-complete.md +1 -1
  113. package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -1
  114. package/.agent-src/skills/ai-council/SKILL.md +69 -5
  115. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
  116. package/.agent-src/skills/analysis-skill-router/SKILL.md +3 -3
  117. package/.agent-src/skills/artisan-commands/SKILL.md +2 -2
  118. package/.agent-src/skills/authz-review/SKILL.md +1 -1
  119. package/.agent-src/skills/aws-infrastructure/SKILL.md +5 -5
  120. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +8 -8
  121. package/.agent-src/skills/bug-analyzer/SKILL.md +5 -5
  122. package/.agent-src/skills/code-refactoring/SKILL.md +4 -4
  123. package/.agent-src/skills/code-review/SKILL.md +2 -2
  124. package/.agent-src/skills/command-writing/SKILL.md +11 -0
  125. package/.agent-src/skills/composer-packages/SKILL.md +2 -2
  126. package/.agent-src/skills/context-authoring/SKILL.md +11 -0
  127. package/.agent-src/skills/context-document/SKILL.md +1 -1
  128. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +23 -0
  129. package/.agent-src/skills/copilot-config/SKILL.md +1 -1
  130. package/.agent-src/skills/dcf-modeling/SKILL.md +89 -0
  131. package/.agent-src/skills/dependency-upgrade/SKILL.md +2 -2
  132. package/.agent-src/skills/devcontainer/SKILL.md +2 -2
  133. package/.agent-src/skills/developer-like-execution/SKILL.md +1 -1
  134. package/.agent-src/skills/docker/SKILL.md +1 -1
  135. package/.agent-src/skills/dto-creator/SKILL.md +1 -1
  136. package/.agent-src/skills/estimate-ticket/SKILL.md +2 -2
  137. package/.agent-src/skills/fe-design/SKILL.md +4 -4
  138. package/.agent-src/skills/feature-planning/SKILL.md +5 -5
  139. package/.agent-src/skills/funnel-analysis/SKILL.md +100 -0
  140. package/.agent-src/skills/laravel/SKILL.md +1 -1
  141. package/.agent-src/skills/laravel-notifications/SKILL.md +5 -5
  142. package/.agent-src/skills/laravel-pennant/SKILL.md +1 -1
  143. package/.agent-src/skills/laravel-pulse/SKILL.md +4 -4
  144. package/.agent-src/skills/laravel-reverb/SKILL.md +2 -2
  145. package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -1
  146. package/.agent-src/skills/md-language-check/SKILL.md +1 -1
  147. package/.agent-src/skills/migration-creator/SKILL.md +7 -7
  148. package/.agent-src/skills/multi-tenancy/SKILL.md +8 -8
  149. package/.agent-src/skills/okr-tree-modeling/SKILL.md +93 -0
  150. package/.agent-src/skills/performance-analysis/SKILL.md +3 -3
  151. package/.agent-src/skills/pest-testing/SKILL.md +6 -6
  152. package/.agent-src/skills/php-service/SKILL.md +2 -2
  153. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
  154. package/.agent-src/skills/project-analysis-react/SKILL.md +1 -1
  155. package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
  156. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
  157. package/.agent-src/skills/project-analyzer/SKILL.md +4 -4
  158. package/.agent-src/skills/prompt-optimizer/SKILL.md +108 -0
  159. package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
  160. package/.agent-src/skills/rice-prioritization/SKILL.md +100 -0
  161. package/.agent-src/skills/rule-writing/SKILL.md +33 -0
  162. package/.agent-src/skills/sentry-integration/SKILL.md +1 -1
  163. package/.agent-src/skills/skill-writing/SKILL.md +14 -0
  164. package/.agent-src/skills/subagent-orchestration/SKILL.md +34 -2
  165. package/.agent-src/skills/terraform/SKILL.md +2 -2
  166. package/.agent-src/skills/terragrunt/SKILL.md +8 -8
  167. package/.agent-src/skills/test-performance/SKILL.md +5 -5
  168. package/.agent-src/skills/threat-modeling/SKILL.md +2 -2
  169. package/.agent-src/skills/token-optimizer/SKILL.md +110 -0
  170. package/.agent-src/skills/unit-economics-modeling/SKILL.md +104 -0
  171. package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  172. package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -0
  173. package/.agent-src/templates/AGENTS.md +1 -1
  174. package/.agent-src/templates/agent-settings.md +25 -41
  175. package/.agent-src/templates/contexts/tenant-boundaries.md +2 -2
  176. package/.agent-src/templates/contexts.md +1 -1
  177. package/.agent-src/templates/copilot-instructions.md +21 -0
  178. package/.agent-src/templates/copilot-review-instructions.md +76 -0
  179. package/.agent-src/templates/features.md +1 -1
  180. package/.agent-src/templates/rule.md +127 -0
  181. package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +7 -5
  182. package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -4
  183. package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -4
  184. package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +7 -51
  185. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +1 -2
  186. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +1 -2
  187. package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +2 -3
  188. package/.agent-src/templates/skill.md +30 -1
  189. package/.claude-plugin/marketplace.json +11 -4
  190. package/AGENTS.md +71 -3
  191. package/CHANGELOG.md +180 -3
  192. package/README.md +24 -23
  193. package/config/agent-settings.template.yml +63 -23
  194. package/config/gitignore-block.txt +11 -4
  195. package/docs/architecture.md +84 -3
  196. package/docs/catalog.md +23 -11
  197. package/docs/contracts/adr-chat-history-split.md +10 -1
  198. package/docs/contracts/agent-memory-contract.md +1 -1
  199. package/docs/contracts/command-clusters.md +1 -1
  200. package/docs/contracts/context-paths.md +2 -1
  201. package/docs/contracts/cross-wing-handoff.md +133 -0
  202. package/docs/contracts/file-ownership-matrix.json +678 -609
  203. package/docs/contracts/hook-architecture-v1.md +8 -1
  204. package/docs/contracts/iron-law-overrides.txt +25 -0
  205. package/docs/contracts/kernel-membership.md +273 -0
  206. package/docs/contracts/load-context-schema.md +26 -11
  207. package/docs/contracts/memory-visibility-v1.md +8 -24
  208. package/docs/contracts/pilot/agent-authority.md +24 -0
  209. package/docs/contracts/pilot/direct-answers.md +70 -0
  210. package/docs/contracts/pilot/language-and-tone.md +63 -0
  211. package/docs/contracts/rule-classification.md +170 -0
  212. package/docs/contracts/rule-router.md +153 -0
  213. package/docs/customization.md +18 -7
  214. package/docs/decisions/ADR-001-kernel-swap-deferred.md +109 -0
  215. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +124 -0
  216. package/docs/decisions/ADR-rule-kernel-and-router.md +122 -0
  217. package/docs/getting-started.md +19 -27
  218. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  219. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +176 -0
  220. package/docs/guidelines/agent-infra/rule-type-governance.md +73 -0
  221. package/docs/guidelines/agent-infra/size-and-scope.md +13 -2
  222. package/docs/guidelines/agent-infra/skill-quality-checklist.md +119 -0
  223. package/docs/guidelines/augment-portability-patterns.md +68 -0
  224. package/docs/guidelines/php/php-coding-patterns.md +62 -0
  225. package/docs/hook-payload-capture.md +221 -0
  226. package/docs/migrations/commands-1.15.0.md +17 -12
  227. package/docs/skills-catalog.md +5 -4
  228. package/llms.txt +4 -3
  229. package/package.json +1 -1
  230. package/scripts/_p43_bodies.py +235 -0
  231. package/scripts/_p43_compress.py +118 -0
  232. package/scripts/_p4_migrate.py +199 -0
  233. package/scripts/_pilot_council_question.py +57 -0
  234. package/scripts/_pilot_measure.py +53 -0
  235. package/scripts/agent-config +1 -1
  236. package/scripts/ai_council/_default_prices.py +4 -4
  237. package/scripts/ai_council/clients.py +1 -1
  238. package/scripts/ai_council/modes.py +3 -4
  239. package/scripts/ai_council/pricing.py +10 -9
  240. package/scripts/ai_council/session.py +107 -5
  241. package/scripts/build_linear_digest.py +3 -5
  242. package/scripts/build_rule_trigger_matrix.py +1 -9
  243. package/scripts/chat_history.py +952 -596
  244. package/scripts/check_always_budget.py +39 -6
  245. package/scripts/check_compressed_paths.py +213 -0
  246. package/scripts/check_compression.py +15 -0
  247. package/scripts/check_context_paths.py +1 -0
  248. package/scripts/check_council_layout.py +105 -0
  249. package/scripts/check_council_references.py +145 -0
  250. package/scripts/check_portability.py +2 -0
  251. package/scripts/check_references.py +14 -2
  252. package/scripts/check_token_optimizer_freshness.py +131 -0
  253. package/scripts/compile_router.py +148 -0
  254. package/scripts/compress.py +219 -11
  255. package/scripts/council_cli.py +63 -9
  256. package/scripts/council_prune.py +81 -0
  257. package/scripts/count_token_optimizer_usage.sh +54 -0
  258. package/scripts/hook_manifest.yaml +33 -0
  259. package/scripts/hooks/augment-chat-history.sh +10 -0
  260. package/scripts/hooks/cowork-dispatcher.sh +98 -0
  261. package/scripts/hooks/dispatch_hook.py +35 -0
  262. package/scripts/hooks_status.py +12 -1
  263. package/scripts/install-hooks.sh +2 -2
  264. package/scripts/install.sh +81 -2
  265. package/scripts/iron_law_sha.py +98 -0
  266. package/scripts/lint_handoffs.py +214 -0
  267. package/scripts/lint_hook_manifest.py +2 -1
  268. package/scripts/lint_load_context.py +35 -5
  269. package/scripts/measure_rule_budget.py +314 -0
  270. package/scripts/prototype_lint_contradictions.py +150 -0
  271. package/scripts/redact_hook_capture.py +148 -0
  272. package/scripts/schemas/rule.schema.json +55 -6
  273. package/scripts/schemas/skill.schema.json +5 -0
  274. package/scripts/skill_linter.py +359 -7
  275. package/scripts/smoke_path_resolution.py +93 -0
  276. package/scripts/update_prices.py +3 -3
  277. package/scripts/validate_frontmatter.py +41 -1
  278. package/.agent-src/commands/chat-history/checkpoint.md +0 -126
  279. package/.agent-src/commands/chat-history/clear.md +0 -103
  280. package/.agent-src/commands/chat-history/resume.md +0 -183
  281. package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +0 -72
  282. package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +0 -79
  283. package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +0 -87
  284. package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +0 -62
  285. package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +0 -78
  286. package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +0 -85
  287. package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +0 -65
  288. package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +0 -78
  289. package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +0 -53
  290. package/.agent-src/rules/chat-history-cadence.md +0 -143
  291. package/.agent-src/rules/chat-history-ownership.md +0 -124
  292. package/.agent-src/rules/chat-history-visibility.md +0 -97
  293. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +0 -50
  294. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +0 -49
  295. package/scripts/check_phase_coupling.py +0 -148
  296. /package/{docs → .agent-src/contexts}/contracts/artifact-engagement-flow.md +0 -0
  297. /package/{docs → .agent-src/contexts}/contracts/command-suggestion-flow.md +0 -0
@@ -1,22 +1,28 @@
1
1
  ---
2
2
  type: "auto"
3
3
  tier: "2b"
4
- description: "Writing or editing UI — components, screens, partials, layouts, design tokens — require existing-ui-audit findings in state.ui_audit before non-trivial UI change; gate, not suggestion"
5
4
  alwaysApply: false
5
+ description: "Writing or editing UI — components, screens, partials, layouts, design tokens — require existing-ui-audit findings in state.ui_audit before non-trivial UI change; gate, not suggestion"
6
6
  source: package
7
- load_context:
8
- - .agent-src.uncompressed/contexts/communication/rules-auto/ui-audit-gate-mechanics.md
7
+ triggers:
8
+ - path_prefix: "resources/views/"
9
+ - path_prefix: "resources/js/"
10
+ - keyword: "component"
11
+ - keyword: "design token"
12
+ routes_to:
13
+ - "skill:existing-ui-audit"
9
14
  ---
10
15
 
11
- # UI-Audit Before Build
16
+ # UI Audit Gate
12
17
 
13
18
  Defense-in-depth twin of the dispatcher gate in
14
19
  [`directives/ui/audit.py`](../templates/scripts/work_engine/directives/ui/audit.py).
15
- The dispatcher refuses to advance past `refine` without
16
- `state.ui_audit`; this rule refuses the write even when the agent
17
- acts outside the dispatcher (free-form edit, "add a tile" request,
18
- side conversation that bypasses [`/work`](../commands/work.md) or
19
- [`/implement-ticket`](../commands/implement-ticket.md)).
20
+ The dispatcher refuses to advance past `refine` without `state.ui_audit`;
21
+ this rule refuses the write even when the agent acts outside the dispatcher.
22
+
23
+ Body migrated to [`skill:existing-ui-audit`](../skills/existing-ui-audit/SKILL.md)
24
+ (per P4 of `road-to-kernel-and-router.md`). Trigger-set above activates this
25
+ routing under the `balanced` and `full` profiles.
20
26
 
21
27
  ## The Iron Law
22
28
 
@@ -25,45 +31,6 @@ NO NEW COMPONENT, SCREEN, PARTIAL, OR PAGE WITHOUT AUDIT FINDINGS.
25
31
  EXISTING-UI-AUDIT RUNS FIRST. ALWAYS.
26
32
  ```
27
33
 
28
- Skipping the audit is the single biggest source of duplicated
29
- components and drift from project tokens. The audit is cheap (60 s
30
- on a primed cache); the cost of skipping is a refactor.
31
-
32
- ## When this rule activates
33
-
34
- Before writing or editing any non-trivial UI surface:
35
-
36
- - New page / screen / route component
37
- - New Livewire / Flux / Blade / React / Vue / Svelte component or partial
38
- - Major edit to an existing screen (new section, new state, new layout band)
39
-
40
- Recognise the trigger from wording even when nobody says "audit":
41
- "add a dashboard tile", "build a settings panel", "neue Komponente
42
- für …", "render the orders table", "create the empty state for …".
43
-
44
- ## Allow-list — when to skip
45
-
46
- Skip only when **all** hold:
47
-
48
- - `directive_set == "ui-trivial"` (set by Phase 1's intent classifier).
49
- - The change is provably bounded: ≤ 1 file, ≤ 5 changed lines, no
50
- new component, no new state, no new dependency.
51
-
52
- Any precondition fails at edit time → stop, reclassify as
53
- `ui-improve`, re-enter the gate. Backend-only edits and
54
- documentation work were never in scope for this rule.
55
-
56
- ## What to do when the gate fires
57
-
58
- 1. Stop. Do not open an editor on a component file.
59
- 2. Run [`existing-ui-audit`](../skills/existing-ui-audit/SKILL.md);
60
- it writes the result to `state.ui_audit`.
61
- 3. On rebound, the dispatcher enters `design` with the audit as
62
- defaults in the design-brief halt.
63
- 4. Greenfield → present the numbered scaffold / bare /
64
- external-reference halt **before** code; record the pick in
65
- `state.ui_audit.greenfield_decision`.
66
-
67
34
  ## What "audit findings" means
68
35
 
69
36
  `state.ui_audit` is a non-empty dict carrying at least one of:
@@ -71,23 +38,20 @@ documentation work were never in scope for this rule.
71
38
  - `components_found` — inventory entries from `existing-ui-audit`.
72
39
  - `greenfield: true` plus `greenfield_decision` ∈
73
40
  `{scaffold, bare, external_reference}`.
74
- - Legacy `components` alias — back-compat for the same shape.
41
+ - Legacy `components` alias — back-compat.
42
+
43
+ `null` or `{}` is **not** findings; empty dict is rejected on purpose.
75
44
 
76
- `null`, `{}`, or a dict without those keys is **not** findings —
77
- the empty dict is rejected on purpose. An audit that finds nothing
78
- must record either ≥1 `components_found` or the greenfield branch.
45
+ ## Allow-list `ui-trivial`
46
+
47
+ Skip only when **all** hold:
48
+
49
+ - `directive_set == "ui-trivial"`.
50
+ - ≤ 1 file, ≤ 5 changed lines, no new component, no new state.
79
51
 
80
52
  ## Failure modes
81
53
 
82
54
  - Writing the component first and "thinking about reuse later".
83
- - Citing a similar-looking component from memory without verifying.
55
+ - Citing a similar-looking component from memory without verifying via the audit.
84
56
  - Treating `state.ui_audit = {}` as "audit ran, found nothing".
85
57
  - Bypassing the gate for "just one tile".
86
-
87
- ## Lookup material — see mechanics
88
-
89
- The full failure-mode catalog, cross-rule interactions, and the
90
- cloud-surface adaptation live in
91
- [`contexts/communication/rules-auto/ui-audit-gate-mechanics.md`](../contexts/communication/rules-auto/ui-audit-gate-mechanics.md).
92
- Pull it whenever the gate fires or the agent is unsure whether a
93
- recorded `state.ui_audit` qualifies.
@@ -2,76 +2,18 @@
2
2
  type: "auto"
3
3
  tier: "2a"
4
4
  description: "After creating or significantly improving a skill, rule, guideline, or command — ask if it should be contributed upstream to the shared package"
5
- alwaysApply: false
6
5
  source: package
6
+ triggers:
7
+ - phrase: "after creating"
8
+ - phrase: "after improving"
9
+ - keyword: "upstream"
10
+ routes_to:
11
+ - "skill:upstream-contribute"
7
12
  ---
8
13
 
9
14
  # Upstream Proposal
10
15
 
11
- ## When to activate
16
+ **Iron Law.** After creating or significantly improving a skill / rule / guideline / command, ask whether to upstream it.
12
17
 
13
- After the agent **creates or significantly improves** any of these in a consumer project:
14
-
15
- - Skill (new or major update)
16
- - Rule (new or major update)
17
- - Guideline (new or major update)
18
- - Command (new or major update)
19
-
20
- **Also activate when:**
21
-
22
- - A project-specific skill/rule could be **generalized** to benefit all consumers
23
- - An override was created that improves on the shared version
24
- - A learning was captured that produced a high-quality new artifact
25
-
26
- **Do NOT activate when:**
27
-
28
- - Working inside the agent-config package itself (no self-referential proposals)
29
- - The change is a trivial fix (typo, formatting)
30
- - The user already declined upstream for this exact item in this conversation
31
-
32
- ## Consent check
33
-
34
- **⛔ MANDATORY: Always ask the user. Never skip this step.**
35
-
36
- After completing the creation/improvement, evaluate:
37
-
38
- 1. **Is this universal?** Could other projects benefit from this?
39
- 2. **Is this generalizable?** Even if project-specific, can it be abstracted?
40
- 3. **Is this high-quality?** Does it pass the promotion gate from `capture-learnings`?
41
-
42
- If ANY of these is YES → propose to the user:
43
-
44
- ### For universal content (directly applicable):
45
-
46
- ```
47
- > 🔄 The [skill/rule/guideline] `{name}` you just created could benefit all projects
48
- > using the shared agent-config package.
49
- >
50
- > 1. Yes — contribute upstream via PR
51
- > 2. No — keep project-local only
52
- ```
53
-
54
- ### For project-specific content (needs generalization):
55
-
56
- ```
57
- > 🔄 The [skill/rule/guideline] `{name}` is project-specific, but I could generalize
58
- > it for the shared package. [Brief explanation of what would change]
59
- >
60
- > 1. Yes — generalize and contribute upstream
61
- > 2. No — keep project-local only
62
- ```
63
-
64
- ## After user response
65
-
66
- - **User picks 1** → invoke `upstream-contribute` skill (which has its own consent gate for repo access)
67
- - **User picks 2** → stop. Do NOT ask again for this item.
68
- - **Max 1 proposal per created artifact** — never nag.
69
-
70
- ## Important
71
-
72
- - **Consent is non-negotiable** — the user decides, always.
73
- - **Do NOT batch proposals** — ask for each artifact separately.
74
- - **Do NOT interrupt flow** — only propose AFTER the creation/improvement is complete.
75
- - **Do NOT propose for trivial changes** — formatting, typos, comment updates.
76
- - **Respect "no"** — if the user declines, do not revisit unless they bring it up.
77
- - **Token efficiency** — this rule costs zero tokens when not triggered (auto type).
18
+ Body migrated to `skill:upstream-contribute` (per P4 of `road-to-kernel-and-router.md`).
19
+ Trigger-set above activates this routing under the `balanced` and `full` profiles.
@@ -5,14 +5,18 @@ description: "Asking the user a question, presenting options, or summarizing pro
5
5
  alwaysApply: false
6
6
  source: package
7
7
  load_context:
8
- - .agent-src.uncompressed/contexts/communication/rules-auto/user-interaction-mechanics.md
8
+ - ../contexts/communication/rules-auto/user-interaction-mechanics.md
9
+ triggers:
10
+ - intent: "ask user a question"
11
+ - intent: "numbered options"
12
+ - intent: "summarizing progress"
9
13
  ---
10
14
 
11
15
  # User Interaction
12
16
 
13
- Two Iron Laws govern every reply that contains numbered options. They
14
- override conversation momentum, brevity, and the urge to defer to the
15
- user. **Missing a recommendation is a rule violation, not a slip.**
17
+ Two Iron Laws govern every reply that contains numbered options.
18
+ They override conversation momentum, brevity, and the urge to defer
19
+ to the user. **Missing a recommendation is a rule violation, not a slip.**
16
20
 
17
21
  ## Iron Law 1 — Single-Source Recommendation
18
22
 
@@ -22,48 +26,11 @@ THE OPTION BLOCK STAYS NEUTRAL. THE RECOMMENDATION LINE IS THE ONLY SOURCE OF TR
22
26
  DRIFT BETWEEN OPTION-BLOCK AND PROSE IS STRUCTURALLY IMPOSSIBLE WHEN THE TAG DOES NOT EXIST.
23
27
  MISSING RECOMMENDATION = RULE VIOLATION, NOT A SLIP.
24
28
  POSITION-AGNOSTIC. END-OF-TURN MENUS COUNT. NEXT-STEP LISTS COUNT. NO EXCEPTIONS.
29
+ THE RECOMMENDATION LINE LIVES DIRECTLY UNDER THE OPTIONS BLOCK. NOWHERE ELSE.
30
+ PROSE NAMING A "RECOMMENDED" PATH ABOVE OR BEFORE THE OPTIONS BLOCK = NO RECOMMENDATION.
31
+ WRONG-LANGUAGE LABEL (`Recommendation:` WHEN USER IS GERMAN, OR VICE VERSA) = NO RECOMMENDATION.
25
32
  ```
26
33
 
27
- The agent has read the code, the contracts, the trade-offs. Refusing
28
- to take a position dumps that work back on the user. Take the
29
- position; be wrong out loud if needed. "Egal, was bevorzugst Du?" /
30
- "no preference" is NEVER acceptable.
31
-
32
- **Position-agnostic — closes the most common slip:** End-of-turn
33
- "Wie weiter?" / "What next?" / "How to proceed?" / "How should we
34
- continue?" blocks with numbered options are **numbered-options
35
- blocks**. Same Iron Law applies — exactly one `Empfehlung: N` /
36
- `Recommendation: N` line, every time. There is no "these are just
37
- follow-up suggestions" exception, no "the user knows better here"
38
- exception, no "I genuinely don't have a preference" exception. If
39
- the agent prints `1. … 2. … 3. …` anywhere in the reply, the
40
- recommendation line is mandatory.
41
-
42
- **Format — non-negotiable:**
43
-
44
- - Options block stays NEUTRAL — no `(recommended)`, no `(rec)`, no `←`, no bold, no checkmark.
45
- - Directly after the options block, ONE line, bolded, in the user's language:
46
- - English: `**Recommendation: N — <option-name>** — <why>. Caveat: <flip-condition>.`
47
- - German: `**Empfehlung: N — <option-name>** — <warum>. Caveat: <flip-bedingung>.`
48
- - Other numbers MAY appear later in the prose, but ONLY as caveats
49
- (`escalate to 3 if …`, `flip to 1 when …`). NEVER as a primary recommendation.
50
- - If the agent genuinely cannot pick (rare — true 50/50 with missing data),
51
- say what data would break the tie and ask for that instead.
52
-
53
- **What does NOT count as a recommendation:**
54
-
55
- - "Both work" / "either is fine" / "depends on what you prefer"
56
- - Listing pros and cons without picking a number
57
- - "I'd lean towards X" without a reason
58
- - Hiding behind "you know the project better"
59
- - Inline `(recommended)` tag with no follow-up `Recommendation: N` line
60
-
61
- **Slip handling — same protocol as [`language-and-tone`](language-and-tone.md#slip-handling).**
62
- User calls out a missing or wrong recommendation → acknowledge once
63
- in the user's language, rewrite the reply with a recommendation,
64
- ship. No "from now on" promises — only the next reply proves
65
- compliance.
66
-
67
34
  ## Iron Law 2 — Pre-Send Self-Check
68
35
 
69
36
  ```
@@ -71,57 +38,20 @@ EVERY REPLY WITH NUMBERED OPTIONS RUNS THE SELF-CHECK. NO EXCEPTIONS.
71
38
  SKIPPING IT IS A RULE VIOLATION, NOT A SLIP.
72
39
  ```
73
40
 
74
- Before emitting any reply that contains numbered options, scan the
75
- **entire drafted reply** top to bottom, including end-of-turn
76
- "Wie weiter?" / "What next?" continuation menus, follow-up
77
- suggestion blocks, and any list of `1. … 2. … 3. …` regardless of
78
- its position or framing:
79
-
80
- 1. Count occurrences of `(recommended)` / `(rec)` / `(empfohlen)` inline next to a numbered option → MUST be **zero**. Found one → rewrite, drop the tag.
81
- 2. Count `1\.\s` / `2\.\s` / `3\.\s` patterns inside blockquotes or top-level prose → if **any** numbered-option block exists anywhere in the reply, the recommendation line is mandatory.
82
- 3. Count distinct `Recommendation:\s*N` / `Empfehlung:\s*N` lines (case-insensitive) → MUST be **exactly one per options block**. Zero → add one. Two or more distinct numbers → rewrite, pick one.
83
- 4. The number on the recommendation line MUST exist in the option block it follows.
84
- 5. If the reply has multiple options blocks (e.g. a clarification block AND an end-of-turn menu), each block gets its own `Recommendation: N` line directly underneath.
85
-
86
- Mechanical backstop: `python3 scripts/check_reply_consistency.py --stdin < draft.md`
87
- (non-zero exit on any rule above). Self-scan is the primary gate; the
88
- script is the deterministic safety net for ambiguous cases.
89
-
90
- Common failure modes (end-of-turn menu skipped, "no preference"
91
- hedges, multi-block reply with one recommendation) and the named
92
- slip catalog live in
93
- [`contexts/communication/rules-auto/user-interaction-mechanics.md`](../contexts/communication/rules-auto/user-interaction-mechanics.md)
94
- § Common failure modes.
95
-
96
- ## Numbered Options — Always
97
-
98
- When asking the user a question with predefined choices, **always
99
- present numbered options**. The user should be able to reply with
100
- just a number (e.g., `1`) instead of typing a sentence.
101
-
102
- ### Format
103
-
104
- ```
105
- > 1. First option — brief explanation
106
- > 2. Second option — brief explanation
107
- > 3. Third option — brief explanation
108
-
109
- **Recommendation: 2 — Second option** — <one-sentence reason>. Caveat: <flip-condition>.
110
- ```
111
-
112
- ### Rules
113
-
114
- - **Every question with choices** must use numbered options — no exceptions.
115
- - **Every numbered list with `1. … 2. … 3. …`** is a numbered-options block, regardless of position. End-of-turn "Wie weiter?" / "What next?" / "How to proceed?" menus, mid-reply continuation prompts, and clarification blocks all count.
116
- - **Keep options short** — one line each, with a brief explanation after the dash.
117
- - **Always include a "skip" or "no change" option** when applicable.
118
- - **Always state a recommendation** — Iron Law 1 above. Per options block, every time, position-agnostic.
119
- - **Use the user's language** for the question and options.
120
- - **Accept both** the number and a natural language answer (e.g., "1" or "the first one").
41
+ Mechanical backstop:
42
+ `python3 scripts/check_reply_consistency.py --stdin < draft.md`
43
+ (non-zero exit on any rule below). Self-scan is the primary gate;
44
+ the script is the deterministic safety net.
121
45
 
122
- ### Examples and "when NOT to use" see mechanics
46
+ ## Mechanics rationale, failure modes, format details, examples
123
47
 
124
- Worked examples (binary choice, multiple choice with skip,
125
- confirmation with context), the "when NOT to use numbered options"
126
- catalog, progress indicators, and summary-table patterns live in
48
+ The "why take a position", position-agnostic clause, format
49
+ specification (neutral block + bolded recommendation line + caveat),
50
+ no-trailing-open-question rule, "what does NOT count" catalog, full
51
+ five-step pre-send self-check, named failure-mode catalog (end-of-turn
52
+ menu, trailing-question hedge, no-preference hedge, multi-block reply,
53
+ …), slip-handling protocol, numbered-options rules, format examples,
54
+ progress indicators, and summary-table patterns all live in
127
55
  [`contexts/communication/rules-auto/user-interaction-mechanics.md`](../contexts/communication/rules-auto/user-interaction-mechanics.md).
56
+ The rule above is the obligation surface; the mechanics file is the
57
+ lookup material.
@@ -5,7 +5,7 @@ description: "Verify before completion — run tests and quality tools before cl
5
5
  alwaysApply: true
6
6
  source: package
7
7
  load_context:
8
- - .agent-src.uncompressed/contexts/execution/verification-mechanics.md
8
+ - ../contexts/execution/verification-mechanics.md
9
9
  ---
10
10
 
11
11
  # Verify Before Completion
@@ -187,7 +187,7 @@ After completing a significant code change, run this mental checklist:
187
187
  | New API endpoint | OpenAPI annotations, `AGENTS.md` API section |
188
188
  | New module created | Create `app/Modules/{Module}/agents/` |
189
189
  | Service/repository signature changed | Check if referenced in `agents/docs/services-and-repos.md` |
190
- | New environment variable | `.env.example`, `AGENTS.md` environment section |
190
+ | New environment variable | `.env.example`, `AGENTS.md` env section |
191
191
  | Docker/compose change | `agents/docs/docker.md`, `Makefile` documentation |
192
192
  | New Artisan command | `AGENTS.md` commands section |
193
193
  | New pattern/convention introduced | Relevant guideline in `.augment/guidelines/` |
@@ -82,12 +82,11 @@ travel changes.
82
82
  |---|---|---|---|---|
83
83
  | `api` | `AnthropicClient` / `OpenAIClient` | yes | provider SDK + key from `~/.config/agent-config/<provider>.key` | shipped |
84
84
  | `manual` | `ManualClient` | no | `stdout` (prompt block) + `stdin` (user pastes the web-UI reply, terminated by a line containing only `END`) | shipped (Phase 2b) |
85
- | `playwright` | `PlaywrightClient` | no | persistent-profile browser at the provider's chat URL via DOM adapter | reserved (Phase 2c — capture-only) |
86
85
 
87
86
  Resolution lives in `scripts/ai_council/modes.py`:
88
87
  `resolve_mode(name, invocation_mode, member_settings, global_mode)`
89
88
  with precedence **invocation flag > per-member setting > global
90
- setting > default (`api`)**. Whitespace-and-case insensitive; empty
89
+ setting > default (`manual`)**. Whitespace-and-case insensitive; empty
91
90
  strings fall through; unknown values raise `InvalidModeError` with
92
91
  the offending settings path (`ai_council.mode`,
93
92
  `ai_council.members.<name>.mode`, or `/council mode=`).
@@ -113,8 +112,8 @@ that member and the orchestrator stops the fan-out.
113
112
  ### Cost-gate bypass for non-billable members
114
113
 
115
114
  `ExternalAIClient.billable` is the contract. Clients with
116
- `billable=False` (today: `ManualClient`; future: `PlaywrightClient`)
117
- bypass the cost gate entirely — the orchestrator skips the
115
+ `billable=False` (`ManualClient`) bypass the cost gate entirely —
116
+ the orchestrator skips the
118
117
  projection check, the `on_overrun` callback, and the USD-budget
119
118
  short-circuit for that member, but still records the response's
120
119
  token counts (from the manual-paste length heuristic or the
@@ -145,6 +144,48 @@ provider's reply, when available) for observability. Mixed runs
145
144
  into concrete numbered options for the user. The user decides;
146
145
  the council advises.
147
146
 
147
+ ## Output path convention
148
+
149
+ Council artefacts (questions, responses, sessions) are **dev-time
150
+ scratch** — gitignored in both the package repo and consumer repos
151
+ and auto-pruned after `ai_council.session_retention_days` (default
152
+ 7). They inform a decision; they are not the durable contract. The
153
+ durable contract lives in the roadmap / ADR / skill body that cites
154
+ the council's convergence inline.
155
+
156
+ **Linking to a specific council file is forbidden by
157
+ [`no-council-references`](../../rules/no-council-references.md)** —
158
+ gitignored, not in the cloned repo, gone after the retention window.
159
+ Inline the convergence with date + members instead.
160
+
161
+ Three directories, three modes:
162
+
163
+ | Mode | Path | Format |
164
+ |---|---|---|
165
+ | **Topic-anchored question** (paired with a roadmap or ADR) | `agents/council-questions/<topic-slug>.md` | Markdown |
166
+ | **Topic-anchored response** (paired with the question above) | `agents/council-responses/<topic-slug>.json` | JSON from `council:run --output` |
167
+ | **Ad-hoc session** (no durable artefact yet) | `agents/council-sessions/<UTC-timestamp>.json` | JSON from `council:run --output` |
168
+
169
+ `<topic-slug>` is kebab-case and **must match** the corresponding
170
+ roadmap / ADR slug if one exists (e.g. `path-fixes` mirrors the
171
+ matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
172
+
173
+ ### Forbidden
174
+
175
+ - Files at `agents/` root (e.g. `agents/council-question-foo.md`).
176
+ - Dot-prefix scratch (e.g. `agents/.council-question-foo.md`).
177
+ - Any other directory below `agents/` (e.g. `agents/scratch/`,
178
+ `agents/tmp/`).
179
+ - Cross-references from any artefact to specific council files —
180
+ see [`no-council-references`](../../rules/no-council-references.md).
181
+ Inline the convergence summary instead, with date and member list
182
+ for traceability (`Council (claude-sonnet-4-5 + gpt-4o, YYYY-MM-DD)
183
+ reviewed N candidate strategies; converged on …`).
184
+
185
+ `scripts/check_council_layout.py` is the mechanical check for the
186
+ output path convention — wire it into the package's CI pipeline so
187
+ violations break the build.
188
+
148
189
  ## Output format
149
190
 
150
191
  Every council reply MUST contain, in this order:
@@ -225,7 +266,7 @@ per-invocation caps from `ai_council.cost_budget`:
225
266
  if the callback returns False or is absent, tags the member
226
267
  `daily_budget_exceeded` instead of `cost_budget_exceeded`.
227
268
 
228
- Prices come from `.agent-prices.md` (gitignored, refreshed weekly).
269
+ Prices come from `agents/.agent-prices.md` (gitignored, refreshed weekly).
229
270
  The pricing module bootstraps it from `_default_prices.py` on first
230
271
  use and flags it stale when older than the most recent Monday 00:00
231
272
  UTC.
@@ -295,8 +336,16 @@ prompt as `<original artefact> + <prior round, anonymised>` so each
295
336
  member can refine, agree, or push back on the previous critique
296
337
  without seeing which provider produced which point.
297
338
 
339
+ The default round count comes from `ai_council.min_rounds` in
340
+ `.agent-settings.yml` (default `2` so members critique each other
341
+ at least once before convergence). The host agent does **not** ask
342
+ "how many rounds?" when the requested count is `<= min_rounds` —
343
+ the settings owner already made that decision. Ask only when a
344
+ genuinely complex artefact justifies more depth than the default.
345
+
298
346
  | Property | Behaviour |
299
347
  |---|---|
348
+ | Default count | `ai_council.min_rounds` (default `2`). Override per-invocation with `rounds:N` (or `--rounds N` to the CLI). |
300
349
  | Anonymisation | Provider/model identity is stripped. Reviewers are labelled `Reviewer A / B / C…` in input order. |
301
350
  | Errored prior responses | Skipped — they reveal nothing useful and can leak provider error formats. |
302
351
  | Cost budget | Accumulates across rounds. A round-2 call that breaches the cap fires `on_overrun` exactly like a round-1 breach. |
@@ -323,6 +372,21 @@ Round 2: artefact + anonymised round 1 critiques
323
372
  | **total** | | $0.0594 |
324
373
  ```
325
374
 
375
+ ### Manual-mode parity
376
+
377
+ The orchestrator drives rounds the same way for `api` and `manual`
378
+ transports. One round = one full pass over every enabled member,
379
+ top-to-bottom, then `_augment_for_next_round()` folds the
380
+ anonymised critiques into the round-N+1 user prompt. For manual
381
+ mode this means: emit the round-1 block for member A → user
382
+ pastes A's reply → next member B → user pastes B's reply → host
383
+ agent consolidates round 1 → emit the round-2 block (now carrying
384
+ the anonymised round-1 critiques) for member A → … and so on
385
+ until the configured round count is reached. ManualClient's
386
+ internal "more feedback" follow-up loop (1 / 2 / 3 menu) is
387
+ **inside** a single member's chat thread and is orthogonal to the
388
+ orchestrator-level rounds.
389
+
326
390
  ## See also
327
391
 
328
392
  - `/council` command — the user-facing entry point.
@@ -80,7 +80,7 @@ Route to the primary skill. Monitor findings for signals to chain additional ski
80
80
 
81
81
  Merge all specialist findings into ONE prioritized output:
82
82
 
83
- 1. Confirmed root causes (with evidence)
83
+ 1. Confirmed root (with evidence)
84
84
  2. Contributing factors
85
85
  3. Risks not yet proven but worth checking
86
86
  4. Concrete fixes (ordered by priority)
@@ -106,18 +106,18 @@ Check:
106
106
 
107
107
  **Choose `project-analysis-core` if:** broad discovery needed, framework deep-dive not yet justified.
108
108
 
109
- **Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple causes plausible, main job is explanation not discovery.
109
+ **Choose `project-analysis-hypothesis-driven` if:** problem is concrete, multiple plausible, main job is explanation not discovery.
110
110
 
111
111
  **Choose framework-specific analysis if:** framework is explicit, failure pattern is framework-shaped.
112
112
 
113
- **Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is implementation not investigation.
113
+ **Do NOT route broadly if:** one component or file is enough, fix is obvious and local, task is impl not investigation.
114
114
 
115
115
  ## Examples
116
116
 
117
117
  **"Analyze this whole Laravel project"** → `universal-project-analysis` → chain `project-analysis-laravel`
118
118
  **"Hydration mismatch in Next.js"** → `project-analysis-nextjs` (no full-project needed)
119
119
  **"Bug could be cache, queue, or version mismatch"** → `project-analysis-hypothesis-driven`
120
- **"Change one React component"** → no analysis skill, use implementation skill
120
+ **"Change one React component"** → no analysis skill, use impl skill
121
121
 
122
122
  ## Gotcha
123
123
 
@@ -41,7 +41,7 @@ Do NOT use when:
41
41
  - Destructive? → Add `--force` flag + confirmation.
42
42
  - Scheduled? → Ensure non-interactive, idempotent, loud failures.
43
43
  - Long-running? → Use chunking/cursors, progress bar.
44
- - Production? → Add environment check if needed.
44
+ - Production? → Add env check if needed.
45
45
 
46
46
  ### Step 4: Test
47
47
 
@@ -62,7 +62,7 @@ Do NOT use when:
62
62
 
63
63
  - `$this->info()` is suppressed in quiet mode — use `$this->line()` for critical info.
64
64
  - Always add `--force` for destructive commands — never delete data without confirmation.
65
- - Add environment checks for production commands.
65
+ - Add env checks for production commands.
66
66
 
67
67
  ## Do NOT
68
68
 
@@ -168,4 +168,4 @@ Runtime confirmation (e.g. *"reproduce the cross-tenant read against staging"*,
168
168
  [`data-exposure-review`](../data-exposure-review/SKILL.md),
169
169
  [`judge-security-auditor`](../judge-security-auditor/SKILL.md),
170
170
  [`security`](../security/SKILL.md),
171
- [`security-audit`](../security-audit/SKILL.md) — sibling review / implementation skills.
171
+ [`security-audit`](../security-audit/SKILL.md) — sibling review / impl skills.
@@ -16,9 +16,9 @@ Do NOT use when:
16
16
 
17
17
  ## Procedure: Modify AWS infrastructure
18
18
 
19
- 1. Read the `.aws/` directory (or equivalent) for environment configs and templates.
19
+ 1. Read the `.aws/` directory (or equivalent) for env configs and templates.
20
20
  2. Read CI/CD workflows (e.g., `.github/workflows/`) for the deployment pipeline.
21
- 3. Check the environment-specific vars files.
21
+ 3. Check the env-specific vars files.
22
22
  4. **Read project-level overrides** — check `agents/overrides/skills/aws-infrastructure.md` for project-specific service names, prefixes, and infrastructure details.
23
23
 
24
24
  ## Architecture overview
@@ -38,7 +38,7 @@ Do NOT use when:
38
38
  | **ECS Fargate** | Container orchestration (no EC2 instances) |
39
39
  | **ECR** | Docker image registry |
40
40
  | **EFS** | Shared filesystem (private + public access points) |
41
- | **Secrets Manager** | `.env` file storage per environment |
41
+ | **Secrets Manager** | `.env` file storage per env |
42
42
  | **IAM Roles** | OIDC-based GitHub Actions authentication |
43
43
  | **VPC** | Networking (security groups, subnets) |
44
44
 
@@ -97,7 +97,7 @@ Template variables:
97
97
  ### Authentication
98
98
 
99
99
  - GitHub Actions uses **OIDC** (no long-lived AWS credentials).
100
- - Role ARN is per-environment in the vars file.
100
+ - Role ARN is per-env in the vars file.
101
101
  - `aws-actions/configure-aws-credentials` handles the OIDC exchange.
102
102
 
103
103
  ### Image tagging
@@ -139,7 +139,7 @@ See the `terraform` and `terragrunt` skills for general IaC conventions.
139
139
 
140
140
  ## Gotcha
141
141
 
142
- - Never hardcode AWS credentials — always use Secrets Manager or environment variables.
142
+ - Never hardcode AWS credentials — always use Secrets Manager or env variables.
143
143
  - ECS task definitions are immutable — you create new revisions, not edit existing ones.
144
144
  - gomplate templates use `{{ }}` which conflicts with other template engines — escape carefully.
145
145
 
@@ -56,7 +56,7 @@ Run grep/search for the exact symbol, column, or event name. Enumerate:
56
56
  | DB references | Foreign keys, indexes, views, triggers on the column |
57
57
  | Config / docs | YAML, JSON, Markdown that name the symbol |
58
58
 
59
- ### 3. Inspect indirect dependencies
59
+ ### 3. Inspect indirect deps
60
60
 
61
61
  For each direct dependency, identify second-order fan-out:
62
62
 
@@ -91,7 +91,7 @@ keys=<changed paths + changed symbol>, limit=5)`. Surface:
91
91
  the direct grep had no result.
92
92
 
93
93
  Memory entries are supplementary, never authoritative: a grep miss is
94
- still a grep miss. Do not infer dependencies from memory alone.
94
+ still a grep miss. Do not infer deps from memory alone.
95
95
 
96
96
  ## Validation
97
97
 
@@ -102,8 +102,8 @@ Before finalizing the report, confirm:
102
102
  3. Second-order fan-out is bounded — any runaway chain is flagged, not expanded
103
103
  4. Every `external` reach has at least one named owner hint or an explicit
104
104
  "owner unknown — ask"
105
- 5. You have NOT invented dependencies that grep did not find
106
- 6. You have NOT merged direct and indirect dependencies — they are listed separately
105
+ 5. You have NOT invented deps that grep did not find
106
+ 6. You have NOT merged direct and indirect deps — they are listed separately
107
107
 
108
108
  ## Output format
109
109
 
@@ -143,10 +143,10 @@ Open questions:
143
143
  Required fields (ordered):
144
144
 
145
145
  1. **Skill** and **Change** — one-line edit summary
146
- 2. **Direct dependencies** — grouped by class, each with file:line citations and exact counts
147
- 3. **Indirect dependencies** — 2nd-order only, bounded
146
+ 2. **Direct deps** — grouped by class, each with file:line citations and exact counts
147
+ 3. **Indirect deps** — 2nd-order only, bounded
148
148
  4. **Reach summary** — counts per reach level
149
- 5. **Risk surfaces** — dependencies grouped by risk type
149
+ 5. **Risk surfaces** — deps grouped by risk type
150
150
  6. **Open questions** — unresolved items with grep evidence
151
151
 
152
152
  Runtime confirmation (e.g. *"actually run the test suite to see what breaks"*,
@@ -172,7 +172,7 @@ does not execute code, run tests, or touch the network**.
172
172
  * NEVER return `safe` out of politeness when external reach exists — mark it clearly
173
173
  * NEVER silently fall back to "module-level impact" when grep shows cross-module callers
174
174
  * NEVER claim a dependency without a file:line citation from grep output
175
- * NEVER chase dependencies past 2nd order without explicit scope approval — flag and stop
175
+ * NEVER chase deps past 2nd order without explicit scope approval — flag and stop
176
176
 
177
177
  ## References
178
178