@event4u/agent-config 8.12.0 → 9.0.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 (284) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +164 -0
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/agent-handoff.md +35 -0
  5. package/dist/agent-src/commands/agents/init.md +1 -0
  6. package/dist/agent-src/commands/agents/optimize.md +1 -0
  7. package/dist/agent-src/commands/agents/user/accept.md +3 -2
  8. package/dist/agent-src/commands/agents/user/init.md +5 -4
  9. package/dist/agent-src/commands/agents/user/update.md +3 -2
  10. package/dist/agent-src/commands/agents/user.md +1 -0
  11. package/dist/agent-src/commands/agents.md +1 -0
  12. package/dist/agent-src/commands/analytics/show.md +1 -0
  13. package/dist/agent-src/commands/analytics.md +1 -0
  14. package/dist/agent-src/commands/analyze/decision.md +1 -0
  15. package/dist/agent-src/commands/analyze/incident.md +1 -0
  16. package/dist/agent-src/commands/analyze/near-miss.md +1 -0
  17. package/dist/agent-src/commands/analyze/postmortem.md +1 -0
  18. package/dist/agent-src/commands/analyze/premortem.md +1 -0
  19. package/dist/agent-src/commands/analyze/reference-repo.md +1 -0
  20. package/dist/agent-src/commands/analyze.md +3 -2
  21. package/dist/agent-src/commands/brand/identity.md +6 -5
  22. package/dist/agent-src/commands/brand/review.md +6 -5
  23. package/dist/agent-src/commands/brand/strategy.md +6 -4
  24. package/dist/agent-src/commands/brand/tokens.md +7 -6
  25. package/dist/agent-src/commands/brand/voice.md +5 -4
  26. package/dist/agent-src/commands/brand.md +9 -7
  27. package/dist/agent-src/commands/bug/fix.md +1 -0
  28. package/dist/agent-src/commands/bug/investigate.md +1 -0
  29. package/dist/agent-src/commands/bug.md +2 -1
  30. package/dist/agent-src/commands/challenge-me/vision.md +1 -0
  31. package/dist/agent-src/commands/challenge-me/with-docs.md +1 -0
  32. package/dist/agent-src/commands/challenge-me.md +28 -6
  33. package/dist/agent-src/commands/chat-history.md +1 -0
  34. package/dist/agent-src/commands/check-current-md.md +1 -0
  35. package/dist/agent-src/commands/commit.md +1 -0
  36. package/dist/agent-src/commands/context/create.md +3 -2
  37. package/dist/agent-src/commands/context.md +1 -0
  38. package/dist/agent-src/commands/cost/profile.md +1 -0
  39. package/dist/agent-src/commands/cost.md +2 -1
  40. package/dist/agent-src/commands/council/analysis.md +1 -0
  41. package/dist/agent-src/commands/council/debate.md +1 -0
  42. package/dist/agent-src/commands/council/default.md +21 -20
  43. package/dist/agent-src/commands/council/design.md +1 -0
  44. package/dist/agent-src/commands/council/optimize.md +1 -0
  45. package/dist/agent-src/commands/council/pr.md +1 -0
  46. package/dist/agent-src/commands/council.md +1 -0
  47. package/dist/agent-src/commands/estimate-ticket.md +1 -0
  48. package/dist/agent-src/commands/feature/dev.md +1 -0
  49. package/dist/agent-src/commands/feature/explore.md +1 -0
  50. package/dist/agent-src/commands/feature/plan.md +1 -0
  51. package/dist/agent-src/commands/feature/refactor.md +1 -0
  52. package/dist/agent-src/commands/feature/roadmap.md +1 -0
  53. package/dist/agent-src/commands/feature.md +2 -1
  54. package/dist/agent-src/commands/fix/pr-comments.md +19 -0
  55. package/dist/agent-src/commands/fix.md +2 -1
  56. package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
  57. package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
  58. package/dist/agent-src/commands/ghostwriter/show.md +1 -0
  59. package/dist/agent-src/commands/ghostwriter/write.md +1 -0
  60. package/dist/agent-src/commands/ghostwriter.md +1 -0
  61. package/dist/agent-src/commands/grill-me.md +17 -12
  62. package/dist/agent-src/commands/humanize.md +1 -0
  63. package/dist/agent-src/commands/image/analyse.md +2 -1
  64. package/dist/agent-src/commands/image/create.md +1 -0
  65. package/dist/agent-src/commands/image/verify.md +1 -0
  66. package/dist/agent-src/commands/image.md +16 -12
  67. package/dist/agent-src/commands/implement-ticket.md +1 -0
  68. package/dist/agent-src/commands/judge/on-diff.md +1 -0
  69. package/dist/agent-src/commands/judge/solo.md +1 -0
  70. package/dist/agent-src/commands/judge/steps.md +1 -0
  71. package/dist/agent-src/commands/judge.md +1 -0
  72. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -0
  73. package/dist/agent-src/commands/knowledge/forget.md +1 -0
  74. package/dist/agent-src/commands/knowledge/ingest.md +1 -0
  75. package/dist/agent-src/commands/knowledge/list.md +10 -0
  76. package/dist/agent-src/commands/knowledge.md +1 -0
  77. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -0
  78. package/dist/agent-src/commands/memory/mine-session.md +1 -0
  79. package/dist/agent-src/commands/memory/promote.md +3 -2
  80. package/dist/agent-src/commands/memory.md +1 -0
  81. package/dist/agent-src/commands/mission/upgrade.md +45 -24
  82. package/dist/agent-src/commands/mode.md +1 -0
  83. package/dist/agent-src/commands/module/create.md +1 -0
  84. package/dist/agent-src/commands/module/explore.md +1 -0
  85. package/dist/agent-src/commands/module.md +1 -0
  86. package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
  87. package/dist/agent-src/commands/optimize/project.md +1 -0
  88. package/dist/agent-src/commands/optimize/prompt.md +1 -0
  89. package/dist/agent-src/commands/optimize.md +2 -1
  90. package/dist/agent-src/commands/orchestrate.md +1 -0
  91. package/dist/agent-src/commands/override.md +1 -0
  92. package/dist/agent-src/commands/package.md +2 -1
  93. package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
  94. package/dist/agent-src/commands/post-as/me.md +1 -0
  95. package/dist/agent-src/commands/post-as.md +1 -0
  96. package/dist/agent-src/commands/pr/create/description-only.md +1 -0
  97. package/dist/agent-src/commands/pr/create.md +28 -0
  98. package/dist/agent-src/commands/prediction-pool.md +7 -6
  99. package/dist/agent-src/commands/prepare-for-review.md +1 -0
  100. package/dist/agent-src/commands/profile/activate.md +1 -0
  101. package/dist/agent-src/commands/profile/deactivate.md +1 -0
  102. package/dist/agent-src/commands/profile.md +1 -0
  103. package/dist/agent-src/commands/project.md +2 -1
  104. package/dist/agent-src/commands/refine-ticket.md +7 -0
  105. package/dist/agent-src/commands/research/deep.md +1 -0
  106. package/dist/agent-src/commands/research.md +1 -0
  107. package/dist/agent-src/commands/review/routing.md +1 -0
  108. package/dist/agent-src/commands/review.md +2 -1
  109. package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
  110. package/dist/agent-src/commands/roadmap/materialize.md +1 -0
  111. package/dist/agent-src/commands/roadmap/process-full.md +1 -0
  112. package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
  113. package/dist/agent-src/commands/roadmap/process-step.md +1 -0
  114. package/dist/agent-src/commands/roadmap.md +1 -0
  115. package/dist/agent-src/commands/security-audit-config.md +2 -1
  116. package/dist/agent-src/commands/skill/preview.md +1 -0
  117. package/dist/agent-src/commands/skill.md +1 -0
  118. package/dist/agent-src/commands/skills/discover.md +1 -0
  119. package/dist/agent-src/commands/skills.md +1 -0
  120. package/dist/agent-src/commands/sync/agent-settings.md +1 -0
  121. package/dist/agent-src/commands/sync.md +2 -1
  122. package/dist/agent-src/commands/team/adversarial.md +97 -0
  123. package/dist/agent-src/commands/team/delegate.md +110 -0
  124. package/dist/agent-src/commands/team/review.md +85 -0
  125. package/dist/agent-src/commands/team/status.md +123 -0
  126. package/dist/agent-src/commands/team-knowledge.md +8 -6
  127. package/dist/agent-src/commands/team.md +152 -0
  128. package/dist/agent-src/commands/tests/e2e-heal.md +1 -0
  129. package/dist/agent-src/commands/tests/e2e-plan.md +1 -0
  130. package/dist/agent-src/commands/tests/execute.md +1 -0
  131. package/dist/agent-src/commands/tests.md +2 -1
  132. package/dist/agent-src/commands/update-form-request-messages.md +1 -0
  133. package/dist/agent-src/commands/upstream-contribute.md +1 -0
  134. package/dist/agent-src/commands/video/from-script.md +3 -2
  135. package/dist/agent-src/commands/video/from-song.md +22 -21
  136. package/dist/agent-src/commands/video/scene.md +1 -0
  137. package/dist/agent-src/commands/video/stitch.md +2 -1
  138. package/dist/agent-src/commands/video/storyboard.md +1 -0
  139. package/dist/agent-src/commands/video.md +1 -0
  140. package/dist/agent-src/commands/work.md +1 -0
  141. package/dist/agent-src/commands/worktree/cleanup.md +8 -7
  142. package/dist/agent-src/commands/worktree/create.md +1 -0
  143. package/dist/agent-src/commands/worktree/verify.md +1 -0
  144. package/dist/agent-src/commands/worktree.md +1 -0
  145. package/dist/agent-src/rules/active-remediation.md +12 -36
  146. package/dist/agent-src/rules/artifact-drafting-protocol.md +7 -64
  147. package/dist/agent-src/rules/context-hygiene.md +19 -113
  148. package/dist/agent-src/rules/design-fidelity.md +4 -60
  149. package/dist/agent-src/rules/domain-adoption-policy.md +10 -106
  150. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +12 -60
  151. package/dist/agent-src/rules/improve-before-implement.md +6 -0
  152. package/dist/agent-src/rules/minimal-safe-diff.md +6 -86
  153. package/dist/agent-src/rules/size-enforcement.md +10 -0
  154. package/dist/agent-src/rules/tool-safety.md +17 -3
  155. package/dist/agent-src/skills/agent-security-review/SKILL.md +12 -1
  156. package/dist/agent-src/skills/ai-council/SKILL.md +11 -0
  157. package/dist/agent-src/skills/bug-analyzer/SKILL.md +24 -2
  158. package/dist/agent-src/skills/code-review/SKILL.md +105 -93
  159. package/dist/agent-src/skills/code-review/checklists/backend.md +50 -0
  160. package/dist/agent-src/skills/code-review/checklists/database.md +19 -0
  161. package/dist/agent-src/skills/code-review/checklists/dependency.md +18 -0
  162. package/dist/agent-src/skills/code-review/checklists/docs.md +14 -0
  163. package/dist/agent-src/skills/code-review/checklists/frontend.md +19 -0
  164. package/dist/agent-src/skills/code-review/checklists/infra.md +17 -0
  165. package/dist/agent-src/skills/code-review/checklists/producing-the-review.md +62 -0
  166. package/dist/agent-src/skills/code-review/checklists/test-only.md +13 -0
  167. package/dist/agent-src/skills/code-review/evals/evals.json +53 -15
  168. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -2
  169. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +15 -0
  170. package/dist/agent-src/skills/docker/SKILL.md +10 -0
  171. package/dist/agent-src/skills/docx-authoring/SKILL.md +102 -0
  172. package/dist/agent-src/skills/github-ci/evals/evals.json +25 -0
  173. package/dist/agent-src/skills/humanizer/SKILL.md +79 -3
  174. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +112 -0
  175. package/dist/agent-src/skills/humanizer/references/fixtures.md +70 -0
  176. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +7 -1
  177. package/dist/agent-src/skills/laravel/SKILL.md +10 -0
  178. package/dist/agent-src/skills/launch-readiness/SKILL.md +35 -0
  179. package/dist/agent-src/skills/merge-conflicts/SKILL.md +30 -0
  180. package/dist/agent-src/skills/pdf-tools/SKILL.md +101 -0
  181. package/dist/agent-src/skills/quality-tools/evals/evals.json +15 -0
  182. package/dist/agent-src/skills/security-audit/SKILL.md +29 -0
  183. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +90 -0
  184. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +52 -0
  185. package/dist/agent-src/skills/skill-writing/SKILL.md +79 -0
  186. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +11 -3
  187. package/dist/agent-src/skills/subagent-orchestration/schemas/team-review-status.json +103 -0
  188. package/dist/agent-src/skills/terraform/SKILL.md +10 -0
  189. package/dist/agent-src/skills/test-driven-development/SKILL.md +31 -0
  190. package/dist/agent-src/skills/threat-modeling/SKILL.md +15 -0
  191. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  192. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  193. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  194. package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  195. package/dist/agent-src/templates/scripts/telemetry_record.ts +5 -0
  196. package/dist/discovery/deprecation-report.md +1 -1
  197. package/dist/discovery/discovery-manifest.json +378 -174
  198. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  199. package/dist/discovery/discovery-manifest.summary.md +4 -4
  200. package/dist/discovery/orphan-report.md +1 -1
  201. package/dist/discovery/packs.json +16 -8
  202. package/dist/discovery/trust-report.md +3 -3
  203. package/dist/discovery/workspaces.json +14 -6
  204. package/dist/install/install.mjs +46 -0
  205. package/dist/mcp/registry-manifest.json +3 -3
  206. package/dist/router.json +1 -1
  207. package/dist/scripts/condense.js +5 -0
  208. package/dist/scripts/condense.js.map +1 -1
  209. package/dist/server/schemas/settings.js +11 -0
  210. package/dist/server/schemas/settings.js.map +1 -1
  211. package/docs/CLAIMS.md +9 -2
  212. package/docs/SKILL_CENSUS.md +8 -0
  213. package/docs/architecture.md +3 -3
  214. package/docs/benchmark.md +67 -2
  215. package/docs/catalog.md +10 -4
  216. package/docs/command-flows.md +6 -1
  217. package/docs/contracts/ai-council-config.md +9 -2
  218. package/docs/contracts/ai-team-config.md +224 -0
  219. package/docs/contracts/command-clusters.md +1 -0
  220. package/docs/contracts/prelaunch-diagnostics.md +151 -0
  221. package/docs/contracts/release-pr-gating.md +1 -0
  222. package/docs/decisions/ADR-049-configuration-trust-boundary.md +9 -1
  223. package/docs/featured-skills.md +2 -2
  224. package/docs/getting-started-by-role.md +3 -1
  225. package/docs/getting-started.md +42 -1
  226. package/docs/governance-advantage.md +1 -1
  227. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +45 -0
  228. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +28 -0
  229. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +76 -0
  230. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +90 -0
  231. package/docs/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  232. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  233. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +99 -0
  234. package/docs/guidelines/agent-infra/skill-quality-checklist.md +13 -0
  235. package/docs/guidelines/design-fidelity-mechanics.md +76 -0
  236. package/docs/maintainers/branch-protection.md +18 -0
  237. package/docs/parity/command-frontmatter.md +60 -0
  238. package/docs/proof.md +7 -6
  239. package/package.json +1 -1
  240. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  241. package/src/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  242. package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  243. package/src/agent-src/templates/scripts/telemetry_record.ts +5 -0
  244. package/src/config/agent-settings.template.yml +71 -7
  245. package/src/config/prelaunch-areas.yml +36 -0
  246. package/src/scripts/_cli/cmd_doctor.ts +288 -1
  247. package/src/scripts/_lib/claude_plugin.ts +114 -4
  248. package/src/scripts/_lib/orchestration_record.ts +5 -0
  249. package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
  250. package/src/scripts/ai_team/config.ts +234 -0
  251. package/src/scripts/ai_team/review_gate.ts +636 -0
  252. package/src/scripts/ai_team/team_dispatch.ts +612 -0
  253. package/src/scripts/bench_ab_task_runner.ts +11 -1
  254. package/src/scripts/bench_parity_count.ts +279 -0
  255. package/src/scripts/build_linear_digest.ts +3 -1
  256. package/src/scripts/check_bridge_derivation.ts +172 -0
  257. package/src/scripts/check_consumer_scope_flip.ts +179 -0
  258. package/src/scripts/check_council_config_location.ts +115 -15
  259. package/src/scripts/check_host_loadability.ts +81 -0
  260. package/src/scripts/condense.ts +5 -0
  261. package/src/scripts/hook_manifest.yaml +12 -1
  262. package/src/scripts/install.ts +39 -0
  263. package/src/scripts/lint_handoffs.ts +42 -0
  264. package/src/scripts/lint_skill_descriptions.ts +228 -0
  265. package/src/scripts/lint_skill_descriptions_allowlist.json +1 -0
  266. package/src/scripts/lint_skill_scripts_readonly.ts +145 -0
  267. package/src/scripts/lint_skill_scripts_readonly_allowlist.json +8 -0
  268. package/src/scripts/lint_supported_tools_matrix.ts +35 -0
  269. package/src/scripts/optimize_skill_description.ts +144 -0
  270. package/src/scripts/orchestration_record.ts +2 -1
  271. package/src/scripts/prelaunch_diagnostics.ts +248 -0
  272. package/src/scripts/rule_backlinks.ts +0 -0
  273. package/src/scripts/run_skill_evals.ts +70 -4
  274. package/src/scripts/schemas/command.schema.json +7 -0
  275. package/src/scripts/schemas/evals.schema.json +105 -14
  276. package/src/scripts/schemas/prelaunch-report.schema.json +107 -0
  277. package/src/scripts/schemas/skill.schema.json +18 -1
  278. package/src/scripts/schemas/subagent.schema.json +6 -0
  279. package/src/scripts/skill_linter.ts +43 -3
  280. package/src/scripts/smoke_host_loadability.sh +73 -0
  281. package/src/scripts/team_review_gate_hook.ts +115 -0
  282. package/src/scripts/trigger_eval_grandfather.json +1 -2
  283. package/src/scripts/utilization_report.ts +225 -0
  284. package/src/server/schemas/settings.ts +25 -0
@@ -0,0 +1,76 @@
1
+ # Design Fidelity — Mechanics
2
+
3
+ > Surgical-edit discipline, asset & imagery floor, and the failure-mode catalog for the `design-fidelity` rule
4
+
5
+ _Origin: migrated from `src/rules/design-fidelity.md` per the P4 pattern of `road-to-kernel-and-router.md`. The Iron Law, the `design.fidelity_mode` strictness table, and the fire/not-fire scope stay in the rule; this file carries the illustrative depth._
6
+
7
+ ## Surgical visual edits
8
+
9
+ A request to change one visual thing — a colour, a label, a single element — is
10
+ a **targeted edit**, not a redesign licence. Apply the same
11
+ `minimal-safe-diff` discipline to design work that backend edits have
12
+ always owed.
13
+
14
+ - **Change only the semantic target.** Preserve the surrounding layout,
15
+ spacing, typography, dimensions, content, animation, and interaction states.
16
+ Do not rewrite the component, reflow the section, or "modernise" neighbours
17
+ while you are in there. (fixtures: `daf-edit-preservation`, `daf-unwanted-variations`.)
18
+ - **A broader redesign needs an explicit trigger.** Only phrases like *"new
19
+ direction"*, *"from scratch"*, *"make it feel premium"*, *"rework the flow"*,
20
+ or *"give me variations / options"* license a from-scratch rework. Absent such
21
+ a phrase, a "fix / change / update the X" request is surgical — when unsure
22
+ which, ask (`ask-when-uncertain`). (fixture: `daf-redesign-trigger`.)
23
+ - **Preserve stable anchors.** Where the host exposes DOM/comment metadata, keep
24
+ comment anchors and screen labels intact so the edit stays locatable. Where
25
+ the host has no such surface, preserve stable semantic anchors already present
26
+ in source comments / `data-*` attributes — never strip them, and do not invent
27
+ new ones.
28
+
29
+ ## Asset & imagery discipline
30
+
31
+ Visual artifacts carry **real assets or honest placeholders — never fabricated
32
+ brand evidence**. The design-surface instance of the no-invented-facts floor.
33
+
34
+ - **Copy owned assets through the project's accepted path.** Reference or copy
35
+ project-owned assets (logos, icons, fonts, images) via the target project's
36
+ asset directory/pipeline — never hotlink a design-system's internal URL, never
37
+ bulk-copy a huge source folder. (fixtures: `daf-missing-asset`, `daf-external-asset-url`.)
38
+ - **Real imagery where inspection matters.** On visual pages/decks, use actual
39
+ product / place / object / state imagery where the image IS the proof (a
40
+ product screenshot, a real dashboard state). Decorative atmosphere is not proof
41
+ — never pass a stock-like or invented image off as the real product. An
42
+ invented product screenshot is fabricated evidence. (fixture: `daf-invented-screenshot`.)
43
+ - **Icons follow the iconography floor** — no emoji-as-icon in serious UI, no
44
+ hand-rolled icon when a set exists; see the `iconography` skill § Iconography floor.
45
+ - **Ask before adding material — no unrequested filler.** Never generate copy,
46
+ placeholder sections, or decorative blocks the user did not ask for to "complete"
47
+ a design. Brief silent on a region → surface the gap (`ask-when-uncertain`)
48
+ or leave an honest placeholder; never invent filler to fill space.
49
+
50
+ ## Failure modes
51
+
52
+ - Swapping the prototype's font / typeface because another "reads better".
53
+ - Replacing a specified control (slider, stepper, chip) with a different control.
54
+ - Dropping or adding an element the prototype shows ("+", a send→stop toggle, a warning chip).
55
+ - Restructuring layout or moving sections "because the flow is better".
56
+ - Treating an internal "honesty gate" or "stub" concern as licence to redesign the UI.
57
+ - Re-running a redesign after the user already said "match the prototype".
58
+
59
+ ## How to surface a deviation — do NOT execute it
60
+
61
+ Name what the spec shows, what you would change, and why — as a numbered option
62
+ per `user-interaction`. The user picks. Honesty about **behaviour** (a control
63
+ not yet wired) never licenses changing the **design**: a faithful visual plus a
64
+ labelled "not wired yet" note beats an invented redesign.
65
+
66
+ ## Fixtures
67
+
68
+ Behavioral baseline: the `daf-*` fixtures named above (edit preservation,
69
+ unwanted variations, redesign trigger, missing asset, external asset URL,
70
+ invented screenshot).
71
+
72
+ ## See also
73
+
74
+ - `design-fidelity` (rule) — Iron Law + `design.fidelity_mode` strictness table.
75
+ - `brand-source-of-truth` / `brand-consistency` — same precedence shape, for registered brand tokens.
76
+ - [`design-modes.md`](design-modes.md) — brand vs product register discriminator.
@@ -71,6 +71,24 @@ second-writer race to protect against; flip to `true` when there are
71
71
  concurrent mergers. `required_pull_request_reviews: null` per the
72
72
  bus-factor reality above.
73
73
 
74
+ ## Operating conditions under `strict: false`
75
+
76
+ `strict: false` drops the branches-up-to-date requirement, so three
77
+ conditions become merge-time habits the config cannot enforce:
78
+
79
+ - **The checked commit must not change after green CI.** No post-CI
80
+ amend or force-push on the PR branch — the config already blocks
81
+ force-pushes to `main`; the same discipline applies to the head that
82
+ CI checked: what went green is what merges.
83
+ - **Critical checks must have run on the final head before merge.** A
84
+ human glance at the checks tab on the PR's latest commit — with
85
+ `strict: false` GitHub does not re-run required checks when the base
86
+ moves, so the green you see is only as fresh as the head it ran on.
87
+ - **Auto-merge must not be enabled in a way that merges with pending or
88
+ failed required checks.** Enable auto-merge only once the required
89
+ list is complete and green on the final head — never as a
90
+ fire-and-forget while checks are still queued.
91
+
74
92
  ## Rollback
75
93
 
76
94
  ```bash
@@ -0,0 +1,60 @@
1
+ # Command frontmatter — per-host projection parity
2
+
3
+ > Which command frontmatter fields each host bridge actually consumes, and the
4
+ > deliberate divergences from the official command-authoring field standard.
5
+ > Source of truth for command definitions: `src/domains/<pack>/<name>/command.md`
6
+ > (projected verbatim to `dist/agent-src/commands/` by the condensation
7
+ > pipeline). Schema: [`command.schema.json`](../../src/scripts/schemas/command.schema.json).
8
+ > Roadmap origin: `road-to-ecosystem-harvest-skill-quality-gates` Phase 4 (Source C).
9
+
10
+ ## Projection paths per host
11
+
12
+ | Host | Projection | Frontmatter reaches host? |
13
+ |---|---|---|
14
+ | Claude Code | `.claude/skills/<slug>/SKILL.md` — symlink to the command source; rendered copy (with native `model:`) when `model.auto_switch: auto` and a `model_tier` maps | Yes — full frontmatter, verbatim |
15
+ | Cursor | `.cursor/commands/<slug>.md` — symlink to the command source | Yes — file verbatim; Cursor treats unknown frontmatter as inert |
16
+ | Windsurf | `.windsurf/workflows/<slug>.md` — symlink to the command source | Yes — same inert-passthrough as Cursor |
17
+ | Cline / Gemini / Copilot / Roo / Codex / Continue | Text reference via `AGENTS.md` only (no native command surface) | No — invocation is conversational |
18
+
19
+ ## Field consumption matrix (official-standard fields)
20
+
21
+ | Field | Claude Code | Cursor / Windsurf | Notes |
22
+ |---|---|---|---|
23
+ | `name` | ✅ load rule: must equal the skill directory slug | inert | Path-derived hyphen slug; enforced by `check_host_loadability` |
24
+ | `description` | ✅ routing + display | inert | ≤ 200 chars per schema |
25
+ | `argument-hint` | ✅ rendered next to the slash command | inert | Added Phase 4; set on every command whose body documents an invocation argument (140/183 at introduction) |
26
+ | `disable-model-invocation` | ✅ honored natively | inert (vacuously true — no model-invocation surface) | Schema pins `enum: [true]` — commands are user-invoked by design |
27
+ | `model` | ✅ (rendered copies only) | inert | Never authored by hand: the generator rewrites `model_tier:` → native `model:` at projection time (ADR-034/035) |
28
+
29
+ All other fields (`tier`, `visibility`, `pack`, `cluster`, `intent`,
30
+ `routes_to`, `replaces`, `suggestion`, `workspaces`, `packs`, `trust`,
31
+ `install`, `model_tier`, …) are **suite governance metadata** — consumed by the
32
+ package's own linters, router, discovery manifest, and docs generators, never
33
+ by a host. Hosts that read the file verbatim ignore them; that is the intended
34
+ contract, not drift.
35
+
36
+ ## Deliberate divergences from the official standard
37
+
38
+ 1. **No colon names.** The official examples allow `/cluster:sub` invocation;
39
+ this suite forbids colons in `name:` (Agent-Skills-spec compliance for
40
+ strict consumers like Zed). Claude Code's `/cluster:sub` invocation still
41
+ works — it is path-derived from `commands/<cluster>/<sub>.md`, not from the
42
+ `name:` field.
43
+ 2. **`disable-model-invocation` is locked to `true`.** The standard allows
44
+ model-invocable commands; this suite's commands are always user-invoked
45
+ (`command-suggestion-policy` owns proactive surfacing instead — suggest,
46
+ never invoke).
47
+ 3. **`model` is generated, never authored.** Authors declare the
48
+ vendor-neutral `model_tier:`; the Claude bridge renders a native `model:`
49
+ only when the consumer opted into `model.auto_switch: auto`.
50
+ 4. **`argument-hint` is host-passthrough.** Only Claude Code renders it today;
51
+ it stays in the neutral source (harmless elsewhere) rather than being
52
+ projected host-specifically — per the do-NOT-chase-host-fields rule for the
53
+ neutral tree.
54
+
55
+ ## Verification
56
+
57
+ - `./scripts-run src/scripts/validate_frontmatter` — every command validates
58
+ against the schema (including `argument-hint` shape, ≤ 120 chars).
59
+ - `./scripts-run src/scripts/check_host_loadability --root .` — generated
60
+ `.claude/skills/` entries parse and satisfy the host load rule.
package/docs/proof.md CHANGED
@@ -27,8 +27,9 @@ evidence pointer, or `task check-claims` fails the build.
27
27
  | Claim | Kind | Evidence | Resolves |
28
28
  |---|---|---|---|
29
29
  | The release process is documented as an inheritable runbook + succession doc, and the project's bus-factor (trailing-90-day distinct human reviewers) is tracked and reported truthfully — currently 1, not implied to be more. | qual | `docs/succession.md#trailing 90 days` | ✅ |
30
- | 178 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
30
+ | 183 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
31
31
  | A MEASURED-BUT-NOT-SHIPPED experiment — the thin rule projection reduced eager rule load 78,513 → 13,881 GPT-tokens (whole always-loaded projection 98,529 → 33,897, ~65.6%), but FAILED the quality gate (thin win-rate 36.2% vs required 48%) and does not ship; it un-defers only behind `discipline_profile: essential`. Shipped behavior does NOT include this reduction. Method: `agent-config benchmark` over the pinned token baseline; the baseline is the honest "what the user pays if everything loads eagerly", NOT a synthetic full-corpus strawman (council Q4); quality gate per the Phase-0 paired judge run. | quant | `internal/bench/reports/token-baseline.json#eager_rule_load` | ✅ |
32
+ | The first cross-vendor parity pass (5 orchestration-corpus tasks × 2 vendors × 3 repeats, identical prompts via the council transport, $0.16) measured real per-host finding-count differences — claude-sonnet-4-5 surfaced ~2× the findings of gpt-4o on the multi-file analysis task (median 11 vs 5) while both vendors were identical on the planted hollow-implementation task (2 vs 2) and perfectly silent on the clean-code negative control (0 vs 0, no spurious findings). The per-task `finding_floor` values are calibrated from the cross-host lower envelope and the gate is armed. | quant | `internal/bench/reports/parity-count.json#min over hosts of median` | ✅ |
32
33
  | On a weak host (claude-haiku-4-5) the package produces a significant, placebo-controlled discipline lift on scope/downstream traps; on a strong host the same measurement is a published null — the package transplants discipline a weak model lacks, not model intelligence. | quant | `docs/benchmark.md#weak-host-specific` | ✅ |
33
34
  | The non-coding domain skills (finance/founder/ops/content) are forged on TS/PHP and labeled unvalidated until they pass a sourced domain-truth fixture; no public prose implies proven domain correctness, and the validated count is CI-ratcheted. | qual | `src/scripts/domain_soundness_status.ts#checkRatchet` | ✅ |
34
35
  | The validated non-coding domain-skill count is pinned and CI-ratcheted at a maintainer-set floor (9 of 20 default-surface skills carry a sourced `evals/domain-truth.json` fixture at pin time, 2026-07-11 — 5 deterministic, keys from cited formulas; 4 rubric, criteria matching a named external practice); the floor only rises via a maintainer `--write-floor` after a new sourced fixture lands. | quant | `internal/evals/domain-soundness-floor.json#validated` | ✅ |
@@ -44,10 +45,10 @@ evidence pointer, or `task check-claims` fails the build.
44
45
  | On a deterministic multi-session recall corpus, the memory substrate produces a measured, placebo-controlled recall lift — memory-on 27/27 vs no-memory 10/27 and vs equal-byte placebo 9/27 (claude-haiku-4-5, n=9 tasks x 3 seeds, sign test p=0.031 for BOTH pairings). Scoped honestly: this is the context-value upper bound (perfect retrieval on a one-fact-per-task corpus), not retrieval precision under a large store. | quant | `internal/bench/reports/second-brain-delta.json` | ✅ |
45
46
  | Removing the perfect-retrieval assumption, the substrate's REAL keyword retrieval recalls the needed decision into the top-5 under keyword-overlapping confusers (precision@5 9/9) and the model disambiguates it from the co-injected confusers — retrieval-on 27/27 vs no-memory 5/27 and vs equal-count placebo 5/27 (claude-haiku-4-5, 9 tasks x 3 seeds, sign test p=0.008 both). Named limit: retrieval RECALLS but does not RANK (mean tie-set 3.3, ties broken by store order, not relevance) — the discrimination gap that motivates the SQLite-FTS5 activation path (ADR-116) at larger scale. | quant | `internal/bench/reports/second-brain-retrieval.json` | ✅ |
46
47
  | Every artifact the package ships — source AND the condensed projection that reaches consumers — is machine-scanned in CI for hidden-Unicode, mixed-script-confusable, and instruction-smuggling payloads (the rules-file-backdoor class); a finding blocks the release before `npm publish`, not just the merge. | qual | `.github/workflows/publish-npm.yml#lint_agent_security` | ✅ |
47
- | 271 skills. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
48
+ | 274 skills. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
48
49
  | Removes only its own keys from a shared host config (matched by JSON-pointer + SHA-256), never a neighbour tool's entries. | qual | `docs/contracts/install-layout.md#JSON-pointer` | ✅ |
49
50
 
50
- **20 backed claim(s)** — all evidence pointers resolve in CI.
51
+ **21 backed claim(s)** — all evidence pointers resolve in CI.
51
52
 
52
53
  Artefact counts in public prose (skills, commands, governed rules,
53
54
  guidelines, personas) are **generated from source and CI-drift-checked**:
@@ -76,11 +77,11 @@ shipping theater; the full per-cell data is committed at
76
77
  `internal/bench/reports/persona-placebo.json`.
77
78
 
78
79
  **Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
79
- as good as its measurement. Today **39 of 271** skills carry a behavioural
80
+ as good as its measurement. Today **42 of 274** skills carry a behavioural
80
81
  `evals.json`; the highest-traffic / highest-cost tiers (default-surface +
81
82
  `rich` + routers) are **fully covered (35 of 35)**, the long tail
82
- (4 of 236) is not. We publish that gap rather than imply
83
- "271 evaluated skills": coverage is measured per tier
83
+ (7 of 239) is not. We publish that gap rather than imply
84
+ "274 evaluated skills": coverage is measured per tier
84
85
  (`./scripts-run src/scripts/skill_eval_coverage`), **CI-ratcheted so it can
85
86
  only rise**, and the priority tiers carry a hard **tier floor**: every
86
87
  rich / default-surface / router skill MUST have a behavioural eval or an
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "8.12.0",
3
+ "version": "9.0.0",
4
4
  "description": "Universal AI Agent OS — audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -15,6 +15,10 @@
15
15
  * "boundary_kind": "task" | "phase-step" | "tool-call",
16
16
  * "consulted": {"skills": [...], "rules": [...], ...},
17
17
  * "applied": {"skills": [...], "rules": [...], ...},
18
+ * "loaded": {"skills": [...], "rules": [...], ...} # optional (U1a):
19
+ * what was AVAILABLE/INJECTED at the boundary — the Fired/Loaded
20
+ * denominator. Superset contract: consulted ⊆ loaded. Ids only
21
+ * (same PII-exclusion-by-construction shape as consulted).
18
22
  * "outcomes": ["blocked", "verification_failed", ...] # optional
19
23
  * "tokens_estimate": {"consulted_load": <int>} # optional
20
24
  * }
@@ -127,6 +131,7 @@ export interface EngagementEventInit {
127
131
  boundary_kind: string;
128
132
  consulted?: Record<string, string[]>;
129
133
  applied?: Record<string, string[]>;
134
+ loaded?: Record<string, string[]> | null;
130
135
  outcomes?: string[] | null;
131
136
  tokens_estimate?: Record<string, number> | null;
132
137
  schema_version?: number;
@@ -138,6 +143,7 @@ export class EngagementEvent {
138
143
  boundary_kind: string;
139
144
  consulted: Record<string, string[]>;
140
145
  applied: Record<string, string[]>;
146
+ loaded: Record<string, string[]> | null;
141
147
  outcomes: string[] | null;
142
148
  tokens_estimate: Record<string, number> | null;
143
149
  schema_version: number;
@@ -148,6 +154,7 @@ export class EngagementEvent {
148
154
  this.boundary_kind = init.boundary_kind;
149
155
  this.consulted = init.consulted ?? {};
150
156
  this.applied = init.applied ?? {};
157
+ this.loaded = init.loaded ?? null;
151
158
  this.outcomes = init.outcomes ?? null;
152
159
  this.tokens_estimate = init.tokens_estimate ?? null;
153
160
  this.schema_version = init.schema_version ?? SCHEMA_VERSION;
@@ -171,6 +178,20 @@ export class EngagementEvent {
171
178
  }
172
179
  _validate_artefact_dict('consulted', this.consulted);
173
180
  _validate_artefact_dict('applied', this.applied);
181
+ if (this.loaded !== null) {
182
+ _validate_artefact_dict('loaded', this.loaded);
183
+ for (const [kind, ids] of Object.entries(this.consulted)) {
184
+ const avail = new Set(this.loaded[kind] ?? []);
185
+ for (const art_id of ids) {
186
+ if (!avail.has(art_id)) {
187
+ throw new EngagementSchemaError(
188
+ `consulted.${kind} id '${art_id}' missing from loaded.${kind}; `
189
+ + 'superset contract: consulted \u2286 loaded',
190
+ );
191
+ }
192
+ }
193
+ }
194
+ }
174
195
  if (this.outcomes !== null) {
175
196
  _validate_outcomes(this.outcomes);
176
197
  }
@@ -206,6 +227,12 @@ export class EngagementEvent {
206
227
  consulted: _normalise_artefact_dict(this.consulted),
207
228
  applied: _normalise_artefact_dict(this.applied),
208
229
  };
230
+ if (this.loaded !== null) {
231
+ const norm = _normalise_artefact_dict(this.loaded);
232
+ if (Object.keys(norm).length > 0) {
233
+ out['loaded'] = norm;
234
+ }
235
+ }
209
236
  if (this.outcomes && this.outcomes.length > 0) {
210
237
  out['outcomes'] = [...this.outcomes];
211
238
  }
@@ -310,6 +337,9 @@ export function parse_event(line: string): EngagementEvent {
310
337
  boundary_kind: (r['boundary_kind'] as string) ?? '',
311
338
  consulted: _orEmptyDict(r['consulted']),
312
339
  applied: _orEmptyDict(r['applied']),
340
+ loaded: r['loaded'] === undefined || r['loaded'] === null
341
+ ? null
342
+ : _orEmptyDict(r['loaded']),
313
343
  outcomes: (r['outcomes'] as string[] | null | undefined) ?? null,
314
344
  tokens_estimate: (r['tokens_estimate'] as Record<string, number> | null | undefined) ?? null,
315
345
  schema_version: r['schema_version'] === undefined
@@ -121,15 +121,19 @@ export function render_markdown(aggregate: AggregateResult, opts: RenderOptions
121
121
  lines.push('');
122
122
  continue;
123
123
  }
124
- lines.push('| kind | id | consulted | applied | applied/consulted | last seen |');
125
- lines.push('|---|---|---:|---:|---:|---|');
124
+ const withLoaded = aggregate.loaded_events > 0;
125
+ lines.push(withLoaded
126
+ ? '| kind | id | loaded | consulted | applied | fired/loaded | applied/consulted | last seen |'
127
+ : '| kind | id | consulted | applied | applied/consulted | last seen |');
128
+ lines.push(withLoaded ? '|---|---|---:|---:|---:|---:|---:|---|' : '|---|---|---:|---:|---:|---|');
126
129
  for (const entry of rows) {
127
130
  const s = entry.stat;
128
131
  check_id_redaction(`buckets.${s.kind}.id`, s.artefact_id);
129
- lines.push(
130
- `| ${s.kind} | \`${s.artefact_id}\` | ${s.consulted} | ${s.applied} `
131
- + `| ${_pyFixed(s.applied_ratio, 2)} | \`${s.last_seen_ts}\` |`,
132
- );
132
+ lines.push(withLoaded
133
+ ? `| ${s.kind} | \`${s.artefact_id}\` | ${s.loaded} | ${s.consulted} | ${s.applied} `
134
+ + `| ${_pyFixed(s.fired_ratio, 2)} | ${_pyFixed(s.applied_ratio, 2)} | \`${s.last_seen_ts}\` |`
135
+ : `| ${s.kind} | \`${s.artefact_id}\` | ${s.consulted} | ${s.applied} `
136
+ + `| ${_pyFixed(s.applied_ratio, 2)} | \`${s.last_seen_ts}\` |`);
133
137
  }
134
138
  lines.push('');
135
139
  }
@@ -147,7 +151,9 @@ export function render_json(aggregate: AggregateResult, opts: RenderOptions = {}
147
151
  [BUCKET_BOTTOM]: [],
148
152
  };
149
153
  for (const entry of bucketed) {
150
- (grouped[entry.bucket] as Array<Record<string, unknown>>).push(_stat_to_dict(entry.stat));
154
+ (grouped[entry.bucket] as Array<Record<string, unknown>>).push(
155
+ _stat_to_dict(entry.stat, aggregate.loaded_events > 0),
156
+ );
151
157
  }
152
158
  if (top !== null) {
153
159
  for (const bucket of Object.keys(grouped)) {
@@ -179,9 +185,9 @@ export function render_json(aggregate: AggregateResult, opts: RenderOptions = {}
179
185
  return `${_py_json_dumps_indent2_sorted(payload)}\n`;
180
186
  }
181
187
 
182
- function _stat_to_dict(stat: ArtefactStat): Record<string, unknown> {
188
+ function _stat_to_dict(stat: ArtefactStat, withLoaded = false): Record<string, unknown> {
183
189
  check_id_redaction(`buckets.${stat.kind}.id`, stat.artefact_id);
184
- return {
190
+ const out: Record<string, unknown> = {
185
191
  kind: stat.kind,
186
192
  id: stat.artefact_id,
187
193
  consulted: stat.consulted,
@@ -189,6 +195,13 @@ function _stat_to_dict(stat: ArtefactStat): Record<string, unknown> {
189
195
  applied_ratio: new PyFloat(_pyRound(stat.applied_ratio, 4)),
190
196
  last_seen_ts: stat.last_seen_ts,
191
197
  };
198
+ // U1a: emitted only when the log carries the loaded denominator, so
199
+ // pre-U1a logs render byte-identically to the frozen parity oracle.
200
+ if (withLoaded) {
201
+ out['loaded'] = stat.loaded;
202
+ out['fired_ratio'] = new PyFloat(_pyRound(stat.fired_ratio, 4));
203
+ }
204
+ return out;
192
205
  }
193
206
 
194
207
  // ── Python-parity helpers ───────────────────────────────────────────────
@@ -63,6 +63,7 @@ interface RecordArgs {
63
63
  boundary: string;
64
64
  consulted: string[] | null;
65
65
  applied: string[] | null;
66
+ loaded: string[] | null;
66
67
  outcome: string[] | null;
67
68
  ts: string;
68
69
  payload_file: string | null;
@@ -78,6 +79,7 @@ function _build_event_from_args(args: RecordArgs): EngagementEvent {
78
79
  boundary_kind: args.boundary,
79
80
  consulted: _parse_kv_list(args.consulted ?? []),
80
81
  applied: _parse_kv_list(args.applied ?? []),
82
+ loaded: args.loaded && args.loaded.length > 0 ? _parse_kv_list(args.loaded) : null,
81
83
  outcomes: args.outcome && args.outcome.length > 0 ? [...args.outcome] : null,
82
84
  });
83
85
  }
@@ -101,6 +103,7 @@ function _build_event_from_payload(raw: string): EngagementEvent {
101
103
  boundary_kind: (d['boundary_kind'] as string) ?? '',
102
104
  consulted: _orEmpty(d['consulted']),
103
105
  applied: _orEmpty(d['applied']),
106
+ loaded: d['loaded'] === undefined || d['loaded'] === null ? null : _orEmpty(d['loaded']),
104
107
  outcomes: (d['outcomes'] as string[] | null | undefined) ?? null,
105
108
  tokens_estimate: (d['tokens_estimate'] as Record<string, number> | null | undefined) ?? null,
106
109
  });
@@ -121,6 +124,7 @@ function _parseArgs(argv: string[]): RecordArgs {
121
124
  boundary: 'task',
122
125
  consulted: null,
123
126
  applied: null,
127
+ loaded: null,
124
128
  outcome: null,
125
129
  ts: '',
126
130
  payload_file: null,
@@ -155,6 +159,7 @@ function _parseArgs(argv: string[]): RecordArgs {
155
159
  }
156
160
  a.boundary = v;
157
161
  } else if (tok === '--consulted') (a.consulted ??= []).push(next());
162
+ else if (tok === '--loaded') (a.loaded ??= []).push(next());
158
163
  else if (tok === '--applied') (a.applied ??= []).push(next());
159
164
  else if (tok === '--outcome') {
160
165
  const v = next();
@@ -62,10 +62,15 @@ projection:
62
62
  # rules ALWAYS project (unconditional by definition); untagged rules fail
63
63
  # safe and ship. Example consumer scope:
64
64
  # rule_workspaces: [engineering]
65
- # Default flip to a scoped value is a human release gate — see
66
- # agents/settings/contexts/consumer-scoping-audit-2026-07-07.md.
65
+ # DEFAULT FLIPPED 2026-07-13 (the Phase-1 human gate, maintainer-approved,
66
+ # evidence-gated): the default below lists EVERY consumer workspace, so
67
+ # exactly the exclusively-maintainer specification rules drop from consumer
68
+ # installs (the audited 16-rule lever — see
69
+ # agents/settings/contexts/consumer-scoping-audit-2026-07-07.md) while all
70
+ # domain safety floors and domain rules keep shipping. Narrowing further
71
+ # (e.g. [engineering] only) stays a per-install user choice.
67
72
  # An EMPTY list is inactive (= legacy-all); only a non-empty list scopes.
68
- rule_workspaces: []
73
+ rule_workspaces: [engineering, product, finance, founder, gtm, ops, small-business, construction, legal-review-prep]
69
74
  #
70
75
  # Optional second axis, same semantics per pack ids (packs.yml). When set,
71
76
  # a non-kernel rule also needs a `packs:` intersection to project — e.g.
@@ -622,13 +627,72 @@ worktrees:
622
627
 
623
628
  # --- AI Council (external second-opinion network) ---
624
629
  #
625
- # Configuration moved to `agents/.ai-council.yml` as of the Step-2
626
- # consolidation roadmap. Consumer projects opt in by copying the
627
- # reference file from the package (`agents/.ai-council.yml`) into their
628
- # own `agents/` tree and flipping `enabled: true` per provider.
630
+ # The council config is NOT here and is NOT project-local. It lives ONLY
631
+ # user-global at `~/.event4u/agent-config/settings/.ai-council.yml` — one
632
+ # file, configured once, serving every project / worktree / CWD (ADR-104,
633
+ # superseding ADR-093). The project tree is NEVER searched; a
634
+ # `.ai-council.yml` under any `agents/` tree is ignored. To opt in, copy
635
+ # the shape from `agents/templates/.ai-council.yml.example` to that
636
+ # user-global path and flip `enabled: true` per provider — do NOT drop it
637
+ # into a project's `agents/` tree.
629
638
  #
630
639
  # See `docs/contracts/ai-council-config.md` for the schema.
631
640
 
641
+ # --- AI Team (cross-model strong-pair review — /team family) ---
642
+ #
643
+ # Governs the default-off `/team` capability family: one strong external
644
+ # model (via the codex CLI, subscription-authed) reviews inside the repo —
645
+ # the depth complement to the council's breadth. Schema + validation
646
+ # contract: `docs/contracts/ai-team-config.md`. The loader
647
+ # (`src/scripts/ai_team/config.ts`) rejects unknown keys fail-closed.
648
+ ai_team:
649
+ # Master switch. false (default) = /team commands are never suggested
650
+ # and every invocation refuses with an enable pointer; true = the
651
+ # family is live (individual gates below still apply).
652
+ enabled: false
653
+
654
+ # Model handed to the codex CLI. 'auto' (default) = pass NO --model
655
+ # flag, the codex CLI's own default applies — this tracks the
656
+ # subscription's current strongest model instead of pinning a stale
657
+ # ID. Any other value passes through verbatim as `--model <value>`.
658
+ model: auto
659
+
660
+ # Second opt-in for the ONLY wrapper that delegates write access
661
+ # (/team:delegate → the plugin's native-Codex worker). false (default)
662
+ # = delegate refuses with an enable pointer even when ai_team.enabled
663
+ # is true. Both keys must be true before delegation is reachable.
664
+ allow_delegate: false
665
+
666
+ # Per-day cap on team calls. Team calls count into the EXISTING
667
+ # cli_call_budget openai bucket (~/.event4u/agent-config/cli-calls.json,
668
+ # daily UTC reset) — one subscription, one counter, never a parallel
669
+ # count. This key is the team-side ceiling read against that shared
670
+ # bucket. 0 = block all team calls; raise if you review heavily.
671
+ max_calls_per_day: 50
672
+
673
+ # Suppress the one-line wizard/init recommendation to set up the codex
674
+ # plugin on Claude-Code hosts. Cosmetic only — never changes behavior.
675
+ suppress_setup_hint: false
676
+
677
+ # Managed governance of the codex plugin's Stop-hook Review Gate
678
+ # (road-to-team-mode Phase 4). The gate itself stays upstream's; these
679
+ # keys only govern it. Upstream's own warning: "The review gate can
680
+ # create a long-running Claude/Codex loop and may drain usage limits
681
+ # quickly."
682
+ review_gate:
683
+ # false (default) = byte-identical pre-Phase-4 behavior: no counting,
684
+ # no circuit breaker, our Stop path never touches the gate. true =
685
+ # count consecutive BLOCK verdicts per session and trip the circuit
686
+ # breaker at the bound below.
687
+ managed: false
688
+
689
+ # Circuit-breaker bound: after this many CONSECUTIVE BLOCK verdicts
690
+ # in one session, a visible notice is injected exactly once and the
691
+ # managed layer stops re-blocking — the user decides, never an
692
+ # infinite Claude↔Codex loop. An ALLOW verdict resets the counter.
693
+ # Positive integer.
694
+ max_consecutive_blocks: 3
695
+
632
696
  # --- Onboarding ---
633
697
  #
634
698
  # Tracks whether the initial setup flow (/onboard) has been completed
@@ -0,0 +1,36 @@
1
+ # Pre-launch diagnostic — fixed coverage-area vocabulary
2
+ # (road-to-ecosystem-harvest-prelaunch-diagnostics Phase 1, Source L).
3
+ #
4
+ # The AREA code is the middle segment of the immutable finding-ID grammar
5
+ # `AC-<AREA>-NNN` (docs/contracts/prelaunch-diagnostics.md). Codes are
6
+ # append-only: renaming or re-using a code would re-assign IDs and break
7
+ # every committed baseline. Add new areas at the end; never delete.
8
+ #
9
+ # `launch_gate: true` areas participate in the regression gate's
10
+ # Pass→Finding CI trigger and block a "ready" verdict while Unknown.
11
+ schema_version: prelaunch-areas-v1
12
+ areas:
13
+ auth:
14
+ code: AUTH
15
+ launch_gate: true
16
+ description: Authentication, authorization, tenancy boundaries on the launch surface.
17
+ migrations:
18
+ code: MIG
19
+ launch_gate: true
20
+ description: Schema/data migrations shipped with the launch — reversibility, expand-contract, backfill safety.
21
+ secrets:
22
+ code: SEC
23
+ launch_gate: true
24
+ description: Secrets, tokens, key handling touched by the launch — storage, rotation, exposure paths.
25
+ observability:
26
+ code: OBS
27
+ launch_gate: false
28
+ description: Telemetry proving rollout health — the metric, alert, and pager path for the new surface.
29
+ rollback:
30
+ code: RBK
31
+ launch_gate: true
32
+ description: Rollback contract — trip wires, decision windows, abort paths, named irreversible steps.
33
+ agent-governance:
34
+ code: AGOV
35
+ launch_gate: false
36
+ description: AI/agent surfaces shipped with the launch — tool grants, egress paths, injection exposure.