@event4u/agent-config 1.20.0 → 1.22.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 (268) hide show
  1. package/.agent-src/commands/agents.md +1 -1
  2. package/.agent-src/commands/bug-fix.md +2 -1
  3. package/.agent-src/commands/bug-investigate.md +3 -2
  4. package/.agent-src/commands/challenge-me/vision.md +348 -0
  5. package/.agent-src/commands/challenge-me/with-docs.md +333 -0
  6. package/.agent-src/commands/challenge-me.md +61 -0
  7. package/.agent-src/commands/chat-history/import.md +60 -64
  8. package/.agent-src/commands/compress.md +12 -0
  9. package/.agent-src/commands/context/create.md +2 -2
  10. package/.agent-src/commands/context.md +1 -1
  11. package/.agent-src/commands/copilot-agents.md +1 -1
  12. package/.agent-src/commands/council/default.md +69 -10
  13. package/.agent-src/commands/council.md +1 -1
  14. package/.agent-src/commands/create-pr.md +7 -3
  15. package/.agent-src/commands/e2e-heal.md +1 -1
  16. package/.agent-src/commands/e2e-plan.md +1 -1
  17. package/.agent-src/commands/feature/dev.md +3 -3
  18. package/.agent-src/commands/feature.md +1 -1
  19. package/.agent-src/commands/fix/seeder.md +2 -2
  20. package/.agent-src/commands/fix.md +1 -1
  21. package/.agent-src/commands/grill-me.md +38 -0
  22. package/.agent-src/commands/jira-ticket.md +1 -1
  23. package/.agent-src/commands/judge/steps.md +1 -1
  24. package/.agent-src/commands/judge.md +2 -2
  25. package/.agent-src/commands/memory.md +1 -1
  26. package/.agent-src/commands/mode.md +5 -5
  27. package/.agent-src/commands/module.md +1 -1
  28. package/.agent-src/commands/onboard.md +4 -4
  29. package/.agent-src/commands/optimize/augmentignore.md +1 -1
  30. package/.agent-src/commands/optimize-prompt.md +61 -0
  31. package/.agent-src/commands/optimize.md +1 -1
  32. package/.agent-src/commands/override.md +1 -1
  33. package/.agent-src/commands/review-changes.md +1 -1
  34. package/.agent-src/commands/review-routing.md +1 -1
  35. package/.agent-src/commands/roadmap/ai-council.md +183 -0
  36. package/.agent-src/commands/roadmap/create.md +6 -1
  37. package/.agent-src/commands/roadmap/process-full.md +58 -0
  38. package/.agent-src/commands/roadmap/process-phase.md +69 -0
  39. package/.agent-src/commands/roadmap/process-step.md +57 -0
  40. package/.agent-src/commands/roadmap.md +45 -17
  41. package/.agent-src/commands/set-cost-profile.md +3 -3
  42. package/.agent-src/commands/sync-agent-settings.md +2 -2
  43. package/.agent-src/commands/tests/create.md +2 -2
  44. package/.agent-src/commands/tests.md +1 -1
  45. package/.agent-src/commands/threat-model.md +5 -4
  46. package/.agent-src/contexts/augment-infrastructure.md +1 -1
  47. package/.agent-src/contexts/authority/commit-mechanics.md +14 -1
  48. package/.agent-src/contexts/authority/destructive-mechanics.md +14 -1
  49. package/.agent-src/contexts/authority/scope-mechanics.md +5 -0
  50. package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +76 -0
  51. package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +54 -19
  52. package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +98 -0
  53. package/.agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +93 -0
  54. package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +128 -5
  55. package/.agent-src/contexts/execution/autonomy-mechanics.md +44 -0
  56. package/.agent-src/contexts/execution/roadmap-process-loop.md +125 -0
  57. package/.agent-src/contexts/model-recommendations.md +2 -2
  58. package/.agent-src/contexts/override-system.md +1 -1
  59. package/.agent-src/contexts/skills-and-commands.md +1 -1
  60. package/.agent-src/personas/product-owner.md +2 -2
  61. package/.agent-src/personas/qa.md +1 -1
  62. package/.agent-src/rules/agent-authority.md +5 -6
  63. package/.agent-src/rules/agent-docs.md +11 -53
  64. package/.agent-src/rules/analysis-skill-routing.md +10 -40
  65. package/.agent-src/rules/architecture.md +6 -1
  66. package/.agent-src/rules/artifact-drafting-protocol.md +5 -0
  67. package/.agent-src/rules/artifact-engagement-recording.md +23 -59
  68. package/.agent-src/rules/ask-when-uncertain.md +24 -47
  69. package/.agent-src/rules/augment-portability.md +14 -62
  70. package/.agent-src/rules/augment-source-of-truth.md +10 -1
  71. package/.agent-src/rules/autonomous-execution.md +17 -98
  72. package/.agent-src/rules/capture-learnings.md +9 -80
  73. package/.agent-src/rules/cli-output-handling.md +12 -42
  74. package/.agent-src/rules/command-suggestion-policy.md +25 -73
  75. package/.agent-src/rules/commit-conventions.md +9 -58
  76. package/.agent-src/rules/commit-policy.md +16 -47
  77. package/.agent-src/rules/context-hygiene.md +5 -0
  78. package/.agent-src/rules/direct-answers.md +21 -50
  79. package/.agent-src/rules/docker-commands.md +11 -45
  80. package/.agent-src/rules/docs-sync.md +10 -56
  81. package/.agent-src/rules/downstream-changes.md +5 -0
  82. package/.agent-src/rules/e2e-testing.md +9 -44
  83. package/.agent-src/rules/guidelines.md +13 -75
  84. package/.agent-src/rules/improve-before-implement.md +11 -2
  85. package/.agent-src/rules/invite-challenge.md +71 -0
  86. package/.agent-src/rules/language-and-tone.md +41 -106
  87. package/.agent-src/rules/laravel-translations.md +11 -40
  88. package/.agent-src/rules/markdown-safe-codeblocks.md +4 -0
  89. package/.agent-src/rules/minimal-safe-diff.md +4 -0
  90. package/.agent-src/rules/missing-tool-handling.md +4 -0
  91. package/.agent-src/rules/model-recommendation.md +9 -61
  92. package/.agent-src/rules/no-attribution-footers.md +5 -0
  93. package/.agent-src/rules/no-cheap-questions.md +11 -27
  94. package/.agent-src/rules/no-council-references.md +76 -0
  95. package/.agent-src/rules/no-roadmap-references.md +7 -0
  96. package/.agent-src/rules/non-destructive-by-default.md +13 -43
  97. package/.agent-src/rules/onboarding-gate.md +9 -117
  98. package/.agent-src/rules/package-ci-checks.md +10 -37
  99. package/.agent-src/rules/php-coding.md +10 -55
  100. package/.agent-src/rules/preservation-guard.md +9 -0
  101. package/.agent-src/rules/review-routing-awareness.md +9 -97
  102. package/.agent-src/rules/reviewer-awareness.md +8 -83
  103. package/.agent-src/rules/roadmap-progress-sync.md +7 -170
  104. package/.agent-src/rules/role-mode-adherence.md +6 -2
  105. package/.agent-src/rules/rule-type-governance.md +8 -66
  106. package/.agent-src/rules/runtime-safety.md +5 -0
  107. package/.agent-src/rules/scope-control.md +17 -62
  108. package/.agent-src/rules/security-sensitive-stop.md +7 -1
  109. package/.agent-src/rules/size-enforcement.md +6 -1
  110. package/.agent-src/rules/skill-improvement-trigger.md +9 -49
  111. package/.agent-src/rules/skill-quality.md +7 -113
  112. package/.agent-src/rules/slash-command-routing-policy.md +11 -63
  113. package/.agent-src/rules/think-before-action.md +22 -87
  114. package/.agent-src/rules/token-efficiency.md +10 -74
  115. package/.agent-src/rules/token-optimizer-maintenance.md +68 -0
  116. package/.agent-src/rules/tool-safety.md +4 -0
  117. package/.agent-src/rules/ui-audit-gate.md +25 -61
  118. package/.agent-src/rules/upstream-proposal.md +9 -67
  119. package/.agent-src/rules/user-interaction.md +22 -108
  120. package/.agent-src/rules/verify-before-complete.md +1 -1
  121. package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
  122. package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -1
  123. package/.agent-src/skills/ai-council/SKILL.md +197 -8
  124. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
  125. package/.agent-src/skills/analysis-skill-router/SKILL.md +3 -3
  126. package/.agent-src/skills/artisan-commands/SKILL.md +2 -2
  127. package/.agent-src/skills/authz-review/SKILL.md +1 -1
  128. package/.agent-src/skills/aws-infrastructure/SKILL.md +5 -5
  129. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +8 -8
  130. package/.agent-src/skills/bug-analyzer/SKILL.md +6 -5
  131. package/.agent-src/skills/code-refactoring/SKILL.md +4 -4
  132. package/.agent-src/skills/code-review/SKILL.md +2 -2
  133. package/.agent-src/skills/command-writing/SKILL.md +11 -0
  134. package/.agent-src/skills/composer-packages/SKILL.md +2 -2
  135. package/.agent-src/skills/context-authoring/SKILL.md +11 -0
  136. package/.agent-src/skills/context-document/SKILL.md +1 -1
  137. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +23 -0
  138. package/.agent-src/skills/copilot-config/SKILL.md +1 -1
  139. package/.agent-src/skills/dependency-upgrade/SKILL.md +2 -2
  140. package/.agent-src/skills/devcontainer/SKILL.md +2 -2
  141. package/.agent-src/skills/developer-like-execution/SKILL.md +1 -1
  142. package/.agent-src/skills/docker/SKILL.md +1 -1
  143. package/.agent-src/skills/dto-creator/SKILL.md +1 -1
  144. package/.agent-src/skills/estimate-ticket/SKILL.md +2 -2
  145. package/.agent-src/skills/fe-design/SKILL.md +4 -4
  146. package/.agent-src/skills/feature-planning/SKILL.md +5 -5
  147. package/.agent-src/skills/funnel-analysis/SKILL.md +1 -1
  148. package/.agent-src/skills/laravel/SKILL.md +1 -1
  149. package/.agent-src/skills/laravel-notifications/SKILL.md +5 -5
  150. package/.agent-src/skills/laravel-pennant/SKILL.md +1 -1
  151. package/.agent-src/skills/laravel-pulse/SKILL.md +4 -4
  152. package/.agent-src/skills/laravel-reverb/SKILL.md +2 -2
  153. package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -1
  154. package/.agent-src/skills/migration-creator/SKILL.md +7 -7
  155. package/.agent-src/skills/multi-tenancy/SKILL.md +8 -8
  156. package/.agent-src/skills/performance-analysis/SKILL.md +3 -3
  157. package/.agent-src/skills/pest-testing/SKILL.md +6 -6
  158. package/.agent-src/skills/php-service/SKILL.md +2 -2
  159. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +3 -3
  160. package/.agent-src/skills/project-analysis-react/SKILL.md +1 -1
  161. package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -1
  162. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +2 -2
  163. package/.agent-src/skills/project-analyzer/SKILL.md +4 -4
  164. package/.agent-src/skills/prompt-optimizer/SKILL.md +108 -0
  165. package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
  166. package/.agent-src/skills/roadmap-management/SKILL.md +7 -7
  167. package/.agent-src/skills/rule-writing/SKILL.md +33 -0
  168. package/.agent-src/skills/sentry-integration/SKILL.md +1 -1
  169. package/.agent-src/skills/skill-writing/SKILL.md +14 -0
  170. package/.agent-src/skills/systematic-debugging/SKILL.md +22 -2
  171. package/.agent-src/skills/technical-specification/SKILL.md +58 -1
  172. package/.agent-src/skills/terraform/SKILL.md +2 -2
  173. package/.agent-src/skills/terragrunt/SKILL.md +8 -8
  174. package/.agent-src/skills/test-performance/SKILL.md +5 -5
  175. package/.agent-src/skills/threat-modeling/SKILL.md +3 -2
  176. package/.agent-src/skills/token-optimizer/SKILL.md +110 -0
  177. package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  178. package/.agent-src/templates/AGENTS.md +1 -1
  179. package/.agent-src/templates/agent-settings.md +35 -19
  180. package/.agent-src/templates/command.md +17 -1
  181. package/.agent-src/templates/contexts/tenant-boundaries.md +2 -2
  182. package/.agent-src/templates/contexts.md +1 -1
  183. package/.agent-src/templates/copilot-instructions.md +21 -0
  184. package/.agent-src/templates/copilot-review-instructions.md +76 -0
  185. package/.agent-src/templates/features.md +1 -1
  186. package/.agent-src/templates/roadmaps.md +10 -2
  187. package/.agent-src/templates/rule.md +129 -0
  188. package/.agent-src/templates/skill.md +17 -0
  189. package/.claude-plugin/marketplace.json +12 -2
  190. package/AGENTS.md +32 -5
  191. package/CHANGELOG.md +107 -3
  192. package/README.md +22 -21
  193. package/config/agent-settings.template.yml +66 -10
  194. package/config/gitignore-block.txt +7 -0
  195. package/docs/architecture.md +86 -5
  196. package/docs/catalog.md +16 -6
  197. package/docs/contracts/agent-memory-contract.md +1 -1
  198. package/docs/contracts/command-clusters.md +45 -1
  199. package/docs/contracts/context-paths.md +2 -1
  200. package/docs/contracts/file-ownership-matrix.json +354 -500
  201. package/docs/contracts/iron-law-overrides.txt +25 -0
  202. package/docs/contracts/kernel-membership.md +273 -0
  203. package/docs/contracts/load-context-schema.md +26 -11
  204. package/docs/contracts/pilot/agent-authority.md +24 -0
  205. package/docs/contracts/pilot/direct-answers.md +70 -0
  206. package/docs/contracts/pilot/language-and-tone.md +63 -0
  207. package/docs/contracts/rule-classification.md +170 -0
  208. package/docs/contracts/rule-router.md +153 -0
  209. package/docs/customization.md +17 -6
  210. package/docs/decisions/ADR-001-kernel-swap-deferred.md +109 -0
  211. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +124 -0
  212. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +126 -0
  213. package/docs/decisions/ADR-rule-kernel-and-router.md +122 -0
  214. package/docs/getting-started.md +2 -2
  215. package/docs/guidelines/agent-infra/naming.md +1 -1
  216. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +176 -0
  217. package/docs/guidelines/agent-infra/rule-type-governance.md +73 -0
  218. package/docs/guidelines/agent-infra/size-and-scope.md +13 -2
  219. package/docs/guidelines/agent-infra/skill-quality-checklist.md +119 -0
  220. package/docs/guidelines/augment-portability-patterns.md +68 -0
  221. package/docs/guidelines/php/php-coding-patterns.md +62 -0
  222. package/package.json +1 -1
  223. package/scripts/_p43_bodies.py +235 -0
  224. package/scripts/_p43_compress.py +118 -0
  225. package/scripts/_p4_migrate.py +199 -0
  226. package/scripts/_phase2_shim_helper.py +1 -1
  227. package/scripts/_pilot_council_question.py +57 -0
  228. package/scripts/_pilot_measure.py +53 -0
  229. package/scripts/ai_council/session.py +107 -5
  230. package/scripts/build_linear_digest.py +3 -5
  231. package/scripts/check_always_budget.py +39 -6
  232. package/scripts/check_compressed_paths.py +213 -0
  233. package/scripts/check_compression.py +15 -0
  234. package/scripts/check_context_paths.py +1 -0
  235. package/scripts/check_council_layout.py +105 -0
  236. package/scripts/check_council_references.py +145 -0
  237. package/scripts/check_portability.py +2 -0
  238. package/scripts/check_references.py +2 -0
  239. package/scripts/check_token_optimizer_freshness.py +131 -0
  240. package/scripts/compile_router.py +148 -0
  241. package/scripts/compress.py +219 -11
  242. package/scripts/council_cli.py +132 -11
  243. package/scripts/council_prune.py +81 -0
  244. package/scripts/count_token_optimizer_usage.sh +54 -0
  245. package/scripts/install.sh +44 -2
  246. package/scripts/iron_law_sha.py +98 -0
  247. package/scripts/lint_load_context.py +35 -5
  248. package/scripts/measure_rule_budget.py +314 -0
  249. package/scripts/migrate_command_suggestions.py +2 -2
  250. package/scripts/prototype_lint_contradictions.py +150 -0
  251. package/scripts/schemas/command.schema.json +5 -0
  252. package/scripts/schemas/rule.schema.json +60 -6
  253. package/scripts/schemas/skill.schema.json +5 -0
  254. package/scripts/skill_linter.py +197 -7
  255. package/scripts/smoke_path_resolution.py +93 -0
  256. package/scripts/validate_frontmatter.py +41 -1
  257. package/.agent-src/commands/roadmap/execute.md +0 -109
  258. package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +0 -72
  259. package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +0 -79
  260. package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +0 -87
  261. package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +0 -62
  262. package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +0 -78
  263. package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +0 -85
  264. package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +0 -65
  265. package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +0 -78
  266. package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +0 -53
  267. /package/{docs → .agent-src/contexts}/contracts/artifact-engagement-flow.md +0 -0
  268. /package/{docs → .agent-src/contexts}/contracts/command-suggestion-flow.md +0 -0
@@ -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
 
@@ -27,57 +31,6 @@ PROSE NAMING A "RECOMMENDED" PATH ABOVE OR BEFORE THE OPTIONS BLOCK = NO RECOMME
27
31
  WRONG-LANGUAGE LABEL (`Recommendation:` WHEN USER IS GERMAN, OR VICE VERSA) = NO RECOMMENDATION.
28
32
  ```
29
33
 
30
- The agent has read the code, the contracts, the trade-offs. Refusing
31
- to take a position dumps that work back on the user. Take the
32
- position; be wrong out loud if needed. "Egal, was bevorzugst Du?" /
33
- "no preference" is NEVER acceptable.
34
-
35
- **Position-agnostic — closes the most common slip:** End-of-turn
36
- "Wie weiter?" / "What next?" / "How to proceed?" / "How should we
37
- continue?" blocks with numbered options are **numbered-options
38
- blocks**. Same Iron Law applies — exactly one `Empfehlung: N` /
39
- `Recommendation: N` line, every time. There is no "these are just
40
- follow-up suggestions" exception, no "the user knows better here"
41
- exception, no "I genuinely don't have a preference" exception. If
42
- the agent prints `1. … 2. … 3. …` anywhere in the reply, the
43
- recommendation line is mandatory.
44
-
45
- **Format — non-negotiable:**
46
-
47
- - Options block stays NEUTRAL — no `(recommended)`, no `(rec)`, no `←`, no bold, no checkmark.
48
- - Directly after the options block, ONE line, bolded, in the user's language:
49
- - English: `**Recommendation: N — <option-name>** — <why>. Caveat: <flip-condition>.`
50
- - German: `**Empfehlung: N — <option-name>** — <warum>. Caveat: <flip-bedingung>.`
51
- - Other numbers MAY appear later in the prose, but ONLY as caveats
52
- (`escalate to 3 if …`, `flip to 1 when …`). NEVER as a primary recommendation.
53
- - If the agent genuinely cannot pick (rare — true 50/50 with missing data),
54
- say what data would break the tie and ask for that instead.
55
-
56
- **No trailing open-ended question after numbered options:**
57
-
58
- If the reply contains numbered options, the recommendation line IS
59
- the closer. No `Welcher Pfad?` / `What's it gonna be?` / `Was meinst
60
- Du?` / `Was sagst Du?` / `Welche willst Du?` / `What do you think?`
61
- after the recommendation — that reframes the vote as an opinion poll
62
- and is hedging in disguise. The user picks a number; the agent does
63
- not re-ask. Permitted: a clarifying caveat sentence on the
64
- recommendation line itself (`Caveat: flip to 2 if …`). Forbidden:
65
- any standalone trailing question that re-opens the choice.
66
-
67
- **What does NOT count as a recommendation:**
68
-
69
- - "Both work" / "either is fine" / "depends on what you prefer"
70
- - Listing pros and cons without picking a number
71
- - "I'd lean towards X" without a reason
72
- - Hiding behind "you know the project better"
73
- - Inline `(recommended)` tag with no follow-up `Recommendation: N` line
74
-
75
- **Slip handling — same protocol as [`language-and-tone`](language-and-tone.md#slip-handling).**
76
- User calls out a missing or wrong recommendation → acknowledge once
77
- in the user's language, rewrite the reply with a recommendation,
78
- ship. No "from now on" promises — only the next reply proves
79
- compliance.
80
-
81
34
  ## Iron Law 2 — Pre-Send Self-Check
82
35
 
83
36
  ```
@@ -85,59 +38,20 @@ EVERY REPLY WITH NUMBERED OPTIONS RUNS THE SELF-CHECK. NO EXCEPTIONS.
85
38
  SKIPPING IT IS A RULE VIOLATION, NOT A SLIP.
86
39
  ```
87
40
 
88
- Before emitting any reply that contains numbered options, scan the
89
- **entire drafted reply** top to bottom, including end-of-turn
90
- "Wie weiter?" / "What next?" continuation menus, follow-up
91
- suggestion blocks, and any list of `1. … 2. … 3. …` regardless of
92
- its position or framing:
93
-
94
- 1. Count occurrences of `(recommended)` / `(rec)` / `(empfohlen)` inline next to a numbered option → MUST be **zero**. Found one → rewrite, drop the tag.
95
- 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.
96
- 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.
97
- 4. The number on the recommendation line MUST exist in the option block it follows.
98
- 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.
99
-
100
- Mechanical backstop: `python3 scripts/check_reply_consistency.py --stdin < draft.md`
101
- (non-zero exit on any rule above). Self-scan is the primary gate; the
102
- script is the deterministic safety net for ambiguous cases.
103
-
104
- ### Common failure modes — known, named, no excuses
105
-
106
- - **End-of-turn menu skipped.** Reply answers the question fine, then ends with `1. … 2. … 3. …` and no `Empfehlung:`. Iron Law 1 was violated — these are numbered options, position is irrelevant.
107
- - **Trailing-question hedge.** Reply has options + recommendation, but ends with `Welcher Pfad?` / `What's it gonna be?` / `Was meinst Du?` — the open question reframes the vote as opinion-poll. Banned by Iron Law 1; the recommendation line is the closer.
108
- - **"Genuinely no preference" hedge.** Pick anyway. The agent has more context than the user on the trade-off; refusing to pick dumps the work back. Pick the safest option, name the flip-condition.
109
- - **"User knows the project better" hedge.** Same failure mode, different costume. The user asked for an opinion by virtue of accepting the options block; deliver it.
110
- - **Multi-block reply with one recommendation.** Two options blocks but only one `Empfehlung:` line — the second block is unguarded. Rule 5 of Iron Law 2 closes this.
111
-
112
- ## Numbered Options — Always
113
-
114
- When asking the user a question with predefined choices, **always
115
- present numbered options**. The user should be able to reply with
116
- just a number (e.g., `1`) instead of typing a sentence.
117
-
118
- ### Format
119
-
120
- ```
121
- > 1. First option — brief explanation
122
- > 2. Second option — brief explanation
123
- > 3. Third option — brief explanation
124
-
125
- **Recommendation: 2 — Second option** — <one-sentence reason>. Caveat: <flip-condition>.
126
- ```
127
-
128
- ### Rules
129
-
130
- - **Every question with choices** must use numbered options — no exceptions.
131
- - **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.
132
- - **Keep options short** — one line each, with a brief explanation after the dash.
133
- - **Always include a "skip" or "no change" option** when applicable.
134
- - **Always state a recommendation** — Iron Law 1 above. Per options block, every time, position-agnostic.
135
- - **Use the user's language** for the question and options.
136
- - **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.
137
45
 
138
- ### Examples and "when NOT to use" see mechanics
46
+ ## Mechanics rationale, failure modes, format details, examples
139
47
 
140
- Worked examples (binary choice, multiple choice with skip,
141
- confirmation with context), the "when NOT to use numbered options"
142
- 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
143
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
@@ -4,6 +4,7 @@ description: "ONLY when user explicitly requests adversarial review, devil's adv
4
4
  personas:
5
5
  - critical-challenger
6
6
  source: package
7
+ council_depth: deep
7
8
  ---
8
9
 
9
10
  # Adversarial Review
@@ -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/` |
@@ -43,6 +43,7 @@ prompt that asks them to think on their own merits.
43
43
  THE COUNCIL DOES NOT SEE THE HOST AGENT'S ANALYSIS.
44
44
  THE COUNCIL DOES NOT SEE PRIOR REPLIES.
45
45
  THE COUNCIL SEES THE ARTEFACT + THE NEUTRAL SYSTEM PROMPT. NOTHING ELSE.
46
+ THE HOST AGENT IS THE CONVENER, NEVER A REVIEWER.
46
47
  ```
47
48
 
48
49
  If you find yourself wanting to "frame" the artefact for the council,
@@ -50,6 +51,13 @@ stop. Framing is exactly what kills the second-opinion value. Use the
50
51
  unbiased system prompts in `scripts/ai_council/prompts.py`; do not
51
52
  roll your own.
52
53
 
54
+ The host runs the council and synthesises convergence — it is the
55
+ convener, not a reviewer. The reviewer-ban is structural: the host
56
+ wrote (or framed) the artefact and cannot critique it independently.
57
+ Anonymising the host as "Reviewer C" is worse than excluding it — the
58
+ user is told they got an outside vote when they did not. Externals
59
+ down → surface and skip; never substitute the host as a reviewer.
60
+
53
61
  ### Neutrality — context-handoff
54
62
 
55
63
  External reviewers do better critique when they know **what the
@@ -120,6 +128,27 @@ token counts (from the manual-paste length heuristic or the
120
128
  provider's reply, when available) for observability. Mixed runs
121
129
  (one manual + one api) gate only the api members.
122
130
 
131
+ ## Degradation modes
132
+
133
+ How the council behaves when fewer than two billable members are
134
+ reachable. The orchestrator never silently substitutes — degradation
135
+ is visible to the user.
136
+
137
+ | Reachable | Behaviour | Independence |
138
+ |---|---|---|
139
+ | **2+** | Full fan-out, multi-round debate. Default. | High — cross-provider diversity. |
140
+ | **1** | Single-voice critique with a degraded-run warning. Multi-round mode lets the model see its own anonymised reply, but convergence ≠ correctness. | Low — shared blind spots. |
141
+ | **0** | Council skipped. Surface the failure, proceed without external review. **Never** substitute the host or an unrequested manual pass. | None. |
142
+
143
+ Rejected anti-patterns (council convergence, 2026-05-06): persona
144
+ prompts (same model, same blind spots, more cost), temperature
145
+ spread (noise, not signal), host-as-fallback (Iron Law breach).
146
+ Supported single-provider strategy is **sibling models on the same
147
+ provider** (e.g. Sonnet ↔ Opus, gpt-4o ↔ o1) — different training
148
+ cutoffs / reasoning architectures within one provider family. Cost
149
+ is real (siblings price-tier higher); explicit opt-in per invocation,
150
+ not a default.
151
+
123
152
  ## Procedure
124
153
 
125
154
  1. **Resolve target.** Identify the artefact mode (`prompt`, `roadmap`,
@@ -140,9 +169,103 @@ provider's reply, when available) for observability. Mixed runs
140
169
  into the host agent's voice.
141
170
  6. **Summarise.** Write a `Convergence / Divergence` block listing
142
171
  agreements, disagreements, and unique insights — provider-attributed.
143
- 7. **Translate to options.** Convert actionable council suggestions
144
- into concrete numbered options for the user. The user decides;
145
- the council advises.
172
+ 7. **Critically evaluate** every finding before it leaves the host
173
+ (see *Critical evaluation* below). The host is the convener **and**
174
+ the skeptic — never a reviewer of the artefact itself, but always a
175
+ reviewer of the **council's output**.
176
+ 8. **Translate validated findings to options.** Convert each finding
177
+ the host accepts (or accepts with modification) into a concrete
178
+ numbered option for the user. Tag every option with the host's
179
+ verdict so the user sees the agent's reasoned position, not the
180
+ council's raw output. The user decides; the council advises; the
181
+ host filters.
182
+
183
+ ## Critical evaluation — convener-skeptic stance
184
+
185
+ ```
186
+ COUNCIL CONVERGENCE IS NOT CORRECTNESS.
187
+ DO NOT BLINDLY ACCEPT FINDINGS. DO NOT BLINDLY REJECT THEM.
188
+ EVERY FINDING GETS A REASONED VERDICT BEFORE IT REACHES THE USER.
189
+ ```
190
+
191
+ The council is **uninformed about the codebase, ADRs, locked
192
+ contracts, prior decisions, and project history** — it sees only the
193
+ artefact + neutrality preamble. That is the source of its diversity
194
+ **and** its blind spots. Convergence between members can mean shared
195
+ generic best-practice priors, not project-specific correctness.
196
+
197
+ The host applies a critical lens to **every finding** (convergence
198
+ **and** divergence) before surfacing it as a numbered option:
199
+
200
+ | Check | Question | Tool |
201
+ |---|---|---|
202
+ | **Codebase fit** | Does the finding match the actual code, files, signatures, conventions? | `view` / `codebase-retrieval` / `grep` |
203
+ | **Locked-decision conflict** | Does it contradict an ADR, kernel rule, contract under `docs/contracts/`, or `docs/decisions/`? | `view` |
204
+ | **Already addressed** | Is it a generic best-practice already covered by an existing rule, skill, or test? | `view` / `grep` |
205
+ | **Cost / benefit** | Is the change worth the diff size, churn, and review cost vs. the marginal benefit? | reasoning |
206
+ | **Hallucination** | Does the finding cite a file, function, or behavior that does not exist? | `view` |
207
+
208
+ Each finding receives one of three verdicts:
209
+
210
+ - **`accept`** — codebase fits, no locked-decision conflict, benefit clears cost. Surface as a normal numbered option.
211
+ - **`accept-with-modification`** — core insight valid, but the proposed shape needs adjusting (wrong file, contradicts ADR detail, scope creep). Surface with the **modified** patch and a one-line note.
212
+ - **`reject`** — finding is wrong (hallucinated reference, contradicts a locked decision, already addressed, generic noise). Surface as a **Rejected by host** entry with a one-line reason. Still visible — the user can override.
213
+
214
+ The verdict is the host's **own** reasoning, not the council's.
215
+ Pretending convergence equals correctness, or paraphrasing council
216
+ output as host analysis, both breach the [`direct-answers`](../../rules/direct-answers.md)
217
+ no-invented-facts rule. When the host cannot reach a confident
218
+ verdict on a finding (mixed evidence, ambiguous scope), it surfaces
219
+ the finding as `needs-input` with the open question — the user
220
+ decides, the host does not guess.
221
+
222
+ ### What this is NOT
223
+
224
+ - **Not a re-review by the host.** The host did not write the artefact independently and cannot critique it independently — that boundary still holds.
225
+ - **Not a vote against the council.** Rejecting a finding requires evidence (file, line, contract reference), not preference.
226
+ - **Not silent filtering.** Every finding reaches the user with its verdict and reason. The user can pick a `reject` option and override the host.
227
+
228
+ ## Output path convention
229
+
230
+ Council artefacts (questions, responses, sessions) are **dev-time
231
+ scratch** — gitignored in both the package repo and consumer repos
232
+ and auto-pruned after `ai_council.session_retention_days` (default
233
+ 7). They inform a decision; they are not the durable contract. The
234
+ durable contract lives in the roadmap / ADR / skill body that cites
235
+ the council's convergence inline.
236
+
237
+ **Linking to a specific council file is forbidden by
238
+ [`no-council-references`](../../rules/no-council-references.md)** —
239
+ gitignored, not in the cloned repo, gone after the retention window.
240
+ Inline the convergence with date + members instead.
241
+
242
+ Three directories, three modes:
243
+
244
+ | Mode | Path | Format |
245
+ |---|---|---|
246
+ | **Topic-anchored question** (paired with a roadmap or ADR) | `agents/council-questions/<topic-slug>.md` | Markdown |
247
+ | **Topic-anchored response** (paired with the question above) | `agents/council-responses/<topic-slug>.json` | JSON from `council:run --output` |
248
+ | **Ad-hoc session** (no durable artefact yet) | `agents/council-sessions/<UTC-timestamp>.json` | JSON from `council:run --output` |
249
+
250
+ `<topic-slug>` is kebab-case and **must match** the corresponding
251
+ roadmap / ADR slug if one exists (e.g. `path-fixes` mirrors the
252
+ matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
253
+
254
+ ### Forbidden
255
+
256
+ - Files at `agents/` root (e.g. `agents/council-question-foo.md`).
257
+ - Dot-prefix scratch (e.g. `agents/.council-question-foo.md`).
258
+ - Any other directory below `agents/` (e.g. `agents/scratch/`,
259
+ `agents/tmp/`).
260
+ - Cross-references from any artefact to specific council files —
261
+ see [`no-council-references`](../../rules/no-council-references.md).
262
+ Inline the convergence summary instead, with date and member list
263
+ for traceability (`Council (claude-sonnet-4-5 + gpt-4o, YYYY-MM-DD)
264
+ reviewed N candidate strategies; converged on …`).
265
+
266
+ `scripts/check_council_layout.py` is the mechanical check for the
267
+ output path convention — wire it into the package's CI pipeline so
268
+ violations break the build.
146
269
 
147
270
  ## Output format
148
271
 
@@ -153,16 +276,26 @@ Every council reply MUST contain, in this order:
153
276
  containing the member's verbatim output.
154
277
  3. **Convergence / Divergence summary** — bullet list, every claim
155
278
  attributed by provider name.
156
- 4. **User-facing options** — numbered block per `user-interaction`,
157
- with "discard council input" always present as an option.
158
-
159
- The host agent NEVER ships council output as its own reasoning.
160
- Provider attribution stays visible in every render.
279
+ 4. **Host verdict per finding** — one row per finding with `accept`
280
+ / `accept-with-modification` / `reject` / `needs-input` plus a
281
+ one-line reason citing host evidence (file:line, ADR, contract).
282
+ See *Critical evaluation* above.
283
+ 5. **User-facing options** numbered block per `user-interaction`,
284
+ carrying the host verdict in each option, with "discard council
285
+ input" always present as an option.
286
+
287
+ The host agent NEVER ships council output as its own reasoning, and
288
+ NEVER ships the host verdict as council output. Provider attribution
289
+ stays visible in the per-member sections; host verdicts stay
290
+ attributed to the host.
161
291
 
162
292
  ## Do NOT
163
293
 
164
294
  - Do NOT paraphrase council output into the host agent's voice — strip
165
295
  attribution and you've stripped the value.
296
+ - Do NOT surface council findings to the user without a host verdict
297
+ — convergence ≠ correctness, and the user deserves the agent's
298
+ reasoned filter, not a raw forward.
166
299
  - Do NOT pre-warm the council with the host agent's analysis or
167
300
  identity — that primes the reviewer and collapses diversity.
168
301
  - Do NOT silently truncate a too-large bundle — surface the size and
@@ -194,6 +327,9 @@ Real failure modes seen in the wild:
194
327
  | Silently truncate a too-large bundle. | Misleads the reviewer into thinking they saw the whole thing. | Bundler raises `BundleTooLarge`; surface and ask for narrower scope. |
195
328
  | Reuse the same SDK client across calls without re-loading the key. | Leaks the key in long-lived process state. | Each invocation builds fresh clients from `load_*_key()`. |
196
329
  | Auto-spend tokens under `personal.autonomy: on`. | Autonomy ≠ permission to spend money. | Always ask before consultation, even under autonomy. |
330
+ | Forward council convergence to the user as numbered options without a host verdict. | Convergence ≠ correctness; the council never saw the codebase. | Apply the *Critical evaluation* lens; tag every finding `accept` / `accept-with-modification` / `reject` / `needs-input` with one-line reason. |
331
+ | Reject a finding on preference, not evidence. | "I don't like this" is not a verdict. | Cite the file, line, ADR, or contract that justifies the rejection — or surface as `needs-input`. |
332
+ | Paraphrase council output into the host's own analysis to defend a verdict. | Strips attribution, breaches `direct-answers` no-invented-facts. | Verdict cites host evidence (file:line); council output stays attributed in the per-member sections. |
197
333
 
198
334
  ## Redaction expectations
199
335
 
@@ -294,8 +430,46 @@ prompt as `<original artefact> + <prior round, anonymised>` so each
294
430
  member can refine, agree, or push back on the previous critique
295
431
  without seeing which provider produced which point.
296
432
 
433
+ The default round count comes from `ai_council.min_rounds` in
434
+ `.agent-settings.yml` (default `2` so members critique each other
435
+ at least once before convergence). The host agent does **not** ask
436
+ "how many rounds?" when the requested count is `<= min_rounds` —
437
+ the settings owner already made that decision. Ask only when a
438
+ genuinely complex artefact justifies more depth than the default.
439
+
440
+ ### Deep-reasoning tier (`council_depth: deep`)
441
+
442
+ Architecture review, refactoring proposals, and bug-diagnosis runs
443
+ benefit from an extra critique round. The deep tier is opt-in per
444
+ artefact:
445
+
446
+ 1. The consuming **rule, skill, or command** declares
447
+ `council_depth: deep` in its frontmatter. The schema accepts
448
+ **only `deep`** — `standard` is the implicit default and is
449
+ rejected by the linter (every frontmatter byte costs context
450
+ window; see `scripts/schemas/{rule,skill,command}.schema.json`).
451
+ To return an artefact to default depth, **delete the key**.
452
+ 2. The **host agent** reads that frontmatter when it dispatches the
453
+ council and passes `--depth deep` to `council_cli`. If multiple
454
+ active artefacts disagree, **deep wins** (max policy).
455
+ 3. The **CLI** floors the round count at
456
+ `max(ai_council.deep_min_rounds, ai_council.min_rounds)` —
457
+ defaults to `3` and `2` respectively. Lowering `deep_min_rounds`
458
+ below `min_rounds` has no effect (defensive max).
459
+
460
+ The CLI itself has no knowledge of frontmatter; the contract is the
461
+ flag. Resolution chain (highest priority first):
462
+
463
+ ```
464
+ --rounds N → explicit, any value (user override)
465
+ --depth deep → max(deep_min_rounds, min_rounds)
466
+ (no flag) → min_rounds (default 2)
467
+ ```
468
+
297
469
  | Property | Behaviour |
298
470
  |---|---|
471
+ | Default count | `ai_council.min_rounds` (default `2`). Override per-invocation with `rounds:N` (or `--rounds N` to the CLI). |
472
+ | Deep floor | `ai_council.deep_min_rounds` (default `3`). Activated by `council_depth: deep` in artefact frontmatter (host translates to `--depth deep`) or explicit `--depth deep` on the CLI. Floored at `min_rounds`. |
299
473
  | Anonymisation | Provider/model identity is stripped. Reviewers are labelled `Reviewer A / B / C…` in input order. |
300
474
  | Errored prior responses | Skipped — they reveal nothing useful and can leak provider error formats. |
301
475
  | Cost budget | Accumulates across rounds. A round-2 call that breaches the cap fires `on_overrun` exactly like a round-1 breach. |
@@ -322,6 +496,21 @@ Round 2: artefact + anonymised round 1 critiques
322
496
  | **total** | | $0.0594 |
323
497
  ```
324
498
 
499
+ ### Manual-mode parity
500
+
501
+ The orchestrator drives rounds the same way for `api` and `manual`
502
+ transports. One round = one full pass over every enabled member,
503
+ top-to-bottom, then `_augment_for_next_round()` folds the
504
+ anonymised critiques into the round-N+1 user prompt. For manual
505
+ mode this means: emit the round-1 block for member A → user
506
+ pastes A's reply → next member B → user pastes B's reply → host
507
+ agent consolidates round 1 → emit the round-2 block (now carrying
508
+ the anonymised round-1 critiques) for member A → … and so on
509
+ until the configured round count is reached. ManualClient's
510
+ internal "more feedback" follow-up loop (1 / 2 / 3 menu) is
511
+ **inside** a single member's chat thread and is orthogonal to the
512
+ orchestrator-level rounds.
513
+
325
514
  ## See also
326
515
 
327
516
  - `/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