@event4u/agent-config 8.10.0 → 8.12.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 (226) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +1 -0
  3. package/CHANGELOG.md +67 -149
  4. package/README.md +6 -6
  5. package/dist/agent-src/commands/challenge-me/vision.md +121 -32
  6. package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
  7. package/dist/agent-src/commands/commit/in-chunks.md +1 -1
  8. package/dist/agent-src/commands/commit.md +2 -1
  9. package/dist/agent-src/commands/cost/report.md +2 -1
  10. package/dist/agent-src/commands/feature/dev.md +4 -4
  11. package/dist/agent-src/commands/humanize.md +101 -0
  12. package/dist/agent-src/commands/jira-ticket.md +2 -2
  13. package/dist/agent-src/commands/memory/load.md +15 -0
  14. package/dist/agent-src/commands/optimize/project.md +12 -0
  15. package/dist/agent-src/commands/roadmap/create.md +12 -11
  16. package/dist/agent-src/commands/tests/create.md +1 -1
  17. package/dist/agent-src/commands/worktree/cleanup.md +22 -17
  18. package/dist/agent-src/commands/worktree/create.md +3 -1
  19. package/dist/agent-src/commands/worktree/status.md +12 -0
  20. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
  21. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
  22. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -3
  23. package/dist/agent-src/contexts/execution/roadmap-ci-steps-mechanics.md +117 -0
  24. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +111 -85
  25. package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
  26. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
  27. package/dist/agent-src/rules/architecture.md +6 -51
  28. package/dist/agent-src/rules/autonomous-execution.md +7 -37
  29. package/dist/agent-src/rules/broken-access-control.md +7 -45
  30. package/dist/agent-src/rules/code-comment-discipline.md +64 -0
  31. package/dist/agent-src/rules/context-hygiene.md +14 -0
  32. package/dist/agent-src/rules/decision-revisit-gate.md +9 -77
  33. package/dist/agent-src/rules/delegation-policy.md +10 -8
  34. package/dist/agent-src/rules/design-fidelity.md +4 -0
  35. package/dist/agent-src/rules/git-history-discipline.md +4 -79
  36. package/dist/agent-src/rules/improve-before-implement.md +7 -66
  37. package/dist/agent-src/rules/legal-safety-floor.md +11 -55
  38. package/dist/agent-src/rules/no-roadmap-references.md +13 -77
  39. package/dist/agent-src/rules/persona-governance.md +5 -47
  40. package/dist/agent-src/rules/provider-lifecycle-discipline.md +6 -32
  41. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +21 -104
  42. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
  43. package/dist/agent-src/rules/think-before-action.md +10 -0
  44. package/dist/agent-src/rules/untrusted-input-defense.md +3 -75
  45. package/dist/agent-src/rules/verify-before-complete.md +12 -0
  46. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +96 -12
  47. package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
  48. package/dist/agent-src/skills/api-design/SKILL.md +7 -5
  49. package/dist/agent-src/skills/api-testing/SKILL.md +1 -1
  50. package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
  51. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  52. package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
  53. package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
  54. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
  55. package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
  56. package/dist/agent-src/skills/decision-review/SKILL.md +86 -0
  57. package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
  58. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
  59. package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
  60. package/dist/agent-src/skills/design-review/SKILL.md +23 -2
  61. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +2 -0
  62. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
  63. package/dist/agent-src/skills/fe-design/SKILL.md +7 -9
  64. package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
  65. package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
  66. package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
  67. package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
  68. package/dist/agent-src/skills/laravel/SKILL.md +14 -1
  69. package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
  70. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
  71. package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
  72. package/dist/agent-src/skills/mcp/SKILL.md +1 -1
  73. package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
  74. package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
  75. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +58 -1
  76. package/dist/agent-src/skills/performance/SKILL.md +1 -1
  77. package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
  78. package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
  79. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
  80. package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
  81. package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
  82. package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
  83. package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
  84. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
  85. package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
  86. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
  87. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
  88. package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
  89. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
  90. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +27 -20
  91. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
  92. package/dist/agent-src/templates/agent-settings.md +3 -2
  93. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
  94. package/dist/agent-src/templates/contexts/knowledge-card.md +12 -0
  95. package/dist/agent-src/templates/roadmaps.md +14 -0
  96. package/dist/cli/commands/recordTriggerEval.js +4 -14
  97. package/dist/cli/commands/recordTriggerEval.js.map +1 -1
  98. package/dist/discovery/deprecation-report.md +1 -1
  99. package/dist/discovery/discovery-manifest.json +157 -88
  100. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  101. package/dist/discovery/discovery-manifest.summary.md +6 -6
  102. package/dist/discovery/orphan-report.md +1 -1
  103. package/dist/discovery/packs.json +13 -10
  104. package/dist/discovery/trust-report.md +3 -3
  105. package/dist/discovery/workspaces.json +14 -9
  106. package/dist/install/install.mjs +12 -7
  107. package/dist/mcp/registry-manifest.json +4 -4
  108. package/dist/router.json +1 -1
  109. package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
  110. package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
  111. package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
  112. package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
  113. package/dist/scripts/condense.js +12 -2
  114. package/dist/scripts/condense.js.map +1 -1
  115. package/dist/server/schemas/settings.js +5 -2
  116. package/dist/server/schemas/settings.js.map +1 -1
  117. package/docs/CLAIMS.md +54 -5
  118. package/docs/architecture.md +4 -4
  119. package/docs/archive/CHANGELOG-pre-8.12.0.md +304 -0
  120. package/docs/benchmark.md +90 -0
  121. package/docs/catalog.md +8 -5
  122. package/docs/command-flows.md +2 -1
  123. package/docs/contracts/ai-council-config.md +97 -0
  124. package/docs/contracts/command-clusters.md +1 -0
  125. package/docs/contracts/evidence-based-pruning.md +1 -0
  126. package/docs/contracts/hook-architecture-v1.md +25 -0
  127. package/docs/contracts/kernel-membership.md +35 -0
  128. package/docs/contracts/measurement-baseline.md +1 -0
  129. package/docs/contracts/persona-schema.md +49 -0
  130. package/docs/contracts/provider-lifecycle.md +29 -4
  131. package/docs/contracts/release-sizing.md +22 -0
  132. package/docs/contracts/write-engine.md +38 -1
  133. package/docs/customization.md +12 -0
  134. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
  135. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
  136. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
  137. package/docs/decisions/ADR-028-root-layout.md +1 -1
  138. package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
  139. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
  140. package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
  141. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
  142. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
  143. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
  144. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
  145. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
  146. package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
  147. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
  148. package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
  149. package/docs/decisions/ADR-120-council-chairman-mode.md +70 -0
  150. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +90 -0
  151. package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
  152. package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
  153. package/docs/decisions/INDEX.md +13 -9
  154. package/docs/design/council-vs-solo-baseline.md +92 -0
  155. package/docs/design/cross-model-parity-eval.md +82 -0
  156. package/docs/design/length-neutral-judge-rerun.md +92 -0
  157. package/docs/design/utilization-window-criteria.md +51 -0
  158. package/docs/featured-skills.md +2 -2
  159. package/docs/getting-started-by-role.md +1 -1
  160. package/docs/getting-started.md +2 -2
  161. package/docs/governance-advantage.md +1 -1
  162. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +68 -0
  163. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
  164. package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
  165. package/docs/guidelines/agent-infra/untrusted-input-spotlighting.md +80 -3
  166. package/docs/guidelines/code-clarity.md +191 -1
  167. package/docs/guidelines/design-antipatterns.md +20 -0
  168. package/docs/guidelines/php/php-coding-patterns.md +12 -2
  169. package/docs/maintainers/branch-protection.md +87 -0
  170. package/docs/maintainers/system-map.md +85 -0
  171. package/docs/proof.md +32 -15
  172. package/docs/wedge/production-validator/production-validator.md +27 -0
  173. package/package.json +1 -1
  174. package/src/config/agent-settings.template.yml +38 -9
  175. package/src/scripts/_cli/cmd_doctor.ts +129 -1
  176. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
  177. package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
  178. package/src/scripts/_lib/knowledge_global.ts +50 -2
  179. package/src/scripts/_lib/knowledge_global_promote.ts +150 -0
  180. package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
  181. package/src/scripts/_lib/lexical_index.ts +15 -2
  182. package/src/scripts/_lib/orchestration_record.ts +14 -0
  183. package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
  184. package/src/scripts/ai_council/chairman.ts +90 -0
  185. package/src/scripts/ai_council/clients.ts +18 -3
  186. package/src/scripts/ai_council/config.ts +157 -0
  187. package/src/scripts/ai_council/debate_gates.ts +89 -0
  188. package/src/scripts/ai_council/orchestrator.ts +252 -2
  189. package/src/scripts/ai_council/prompts.ts +121 -11
  190. package/src/scripts/ai_council/replay.ts +17 -0
  191. package/src/scripts/ai_council/stance_tally.ts +184 -0
  192. package/src/scripts/ai_tells_rules.ts +433 -0
  193. package/src/scripts/bench_humanizer_eval.ts +240 -0
  194. package/src/scripts/bench_persona_placebo.ts +308 -0
  195. package/src/scripts/bench_quality_rerun.ts +357 -0
  196. package/src/scripts/build_discovery_manifest.ts +6 -0
  197. package/src/scripts/build_proof.ts +30 -9
  198. package/src/scripts/check_artefact_count_messaging.ts +56 -0
  199. package/src/scripts/check_claims.ts +40 -0
  200. package/src/scripts/check_knowledge_cards.ts +33 -4
  201. package/src/scripts/check_portability.ts +1 -0
  202. package/src/scripts/check_rule_invariants.ts +10 -3
  203. package/src/scripts/complexity_report.ts +776 -0
  204. package/src/scripts/condense.ts +16 -2
  205. package/src/scripts/consumer_matrix.ts +292 -14
  206. package/src/scripts/council_cli.ts +203 -1
  207. package/src/scripts/detect_ai_tells.ts +312 -0
  208. package/src/scripts/explain_run.ts +593 -0
  209. package/src/scripts/install.ts +12 -0
  210. package/src/scripts/knowledge_global_cli.ts +235 -46
  211. package/src/scripts/lint_framework_leakage.ts +88 -7
  212. package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
  213. package/src/scripts/lint_knowledge_scale.ts +30 -0
  214. package/src/scripts/lint_originality_shingles.ts +210 -0
  215. package/src/scripts/orchestration_record.ts +1 -0
  216. package/src/scripts/rule_backlinks.ts +0 -0
  217. package/src/scripts/schemas/agent-settings.schema.json +11 -0
  218. package/src/scripts/self_review_gate.ts +41 -15
  219. package/src/scripts/skill_eval_coverage.ts +71 -3
  220. package/src/scripts/skill_linter.ts +1 -0
  221. package/src/scripts/trigger_eval_rotation.ts +344 -0
  222. package/src/scripts/update_counts.ts +5 -17
  223. package/src/scripts/worktree_cleanup_check.ts +263 -0
  224. package/src/server/schemas/settings.ts +8 -3
  225. package/src/scripts/analysis_freshness.ts +0 -362
  226. package/src/scripts/export_replay_corpus.ts +0 -208
@@ -0,0 +1,117 @@
1
+ # Roadmap CI-Steps — Mechanics
2
+
3
+ Migrated body of the [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md)
4
+ rule (per P4 of `road-to-kernel-and-router.md`). Loaded by
5
+ [`roadmap-process-loop § 5` step 0](roadmap-process-loop.md#5-step-loop) and by
6
+ the rule's routing line. The Iron Law stays in the rule; this file carries the
7
+ pattern table, carve-outs, linter contract, inline-skip mechanics, and failure
8
+ modes.
9
+
10
+ ## Forbidden step patterns (authoring + execution)
11
+
12
+ A step is **CI-shaped** when its text matches any of the patterns
13
+ below. Case-insensitive. Pattern matching is line-bounded — the
14
+ literal must appear inside the step's `- [ ]` line or its immediate
15
+ inline note (the next indented `<!-- … -->` or `(…)` annotation).
16
+
17
+ | Pattern | Example |
18
+ |---|---|
19
+ | `task ci` | `Run task ci before the boundary` |
20
+ | `task ci-strict` | `task ci-strict release gate` |
21
+ | `task ci-fast` | `task ci-fast smoke` |
22
+ | `make test` | `Run make test on phase boundary` |
23
+ | `make ci` | `make ci pre-merge` |
24
+ | `npm run check` / `pnpm run check` / `yarn check` | `npm run check before commit` |
25
+ | `composer test` | `composer test on every phase` |
26
+ | `vendor/bin/phpunit` (whole-suite, no path arg) | `vendor/bin/phpunit` |
27
+ | `php artisan test` (no `--filter`) | `php artisan test` |
28
+
29
+ Targeted commands (`vendor/bin/phpstan analyse <module-path>` such as
30
+ `vendor/bin/phpstan analyse app/Modules/X` in Laravel,
31
+ `php artisan test --filter=…`, `npm run lint -- --fix path/`) are
32
+ **not** CI-shaped — they are narrow verifications, allowed regardless
33
+ of the setting.
34
+
35
+ ## Carve-outs — when CI-shaped steps are still allowed
36
+
37
+ 1. **New CI gate / smoke test / test file landed by this roadmap.**
38
+ Once-locally execution is mandatory under
39
+ [`verify-before-complete`](../../rules/verify-before-complete.md) carve-out
40
+ (see `templates/agent-settings.md` § `quality.local_auto_run`).
41
+ Mark the step with `<!-- carve-out: new-gate-verification -->`
42
+ on the same line; the linter and the execution loop both honour
43
+ the marker and let the step run.
44
+ 2. **`quality.local_auto_run: true`.** Setting opt-in restores the
45
+ pre-policy behaviour — the linter no-ops and the execution loop
46
+ runs CI steps unmodified.
47
+ 3. **Acceptance-criteria block at end of roadmap.** Final-gate prose
48
+ like "All quality gates pass (`task ci`)" inside an
49
+ `## Acceptance criteria` section is documentation, not an
50
+ executable step (no `- [ ]` checkbox in front of the literal).
51
+ Linter ignores; execution loop never reaches it as a step.
52
+
53
+ ## Authoring — linter blocks at write-time
54
+
55
+ `task lint-roadmap-ci-steps` (wired into `task ci-fast` /
56
+ `lint-roadmap-complexity` cadence) scans `agents/roadmaps/*.md` and
57
+ per-module roadmap dirs resolved via
58
+ `scripts/_lib/agent_settings.ts::enumerate_modules()`
59
+ (`{module_path}/{modules.agent_folder}/roadmaps/*.md`; Laravel shape:
60
+ `app/Modules/*/agents/roadmaps/*.md`). Exit code:
61
+
62
+ - `0` — no CI-shaped steps, or setting is `true`, or every match is
63
+ carve-out-marked.
64
+ - `1` — at least one CI-shaped step in an active (non-archived,
65
+ non-skipped) roadmap with `quality.local_auto_run: false` and no
66
+ carve-out marker. Linter prints the file, line, matched literal,
67
+ and suggested rewording.
68
+
69
+ Archive (`agents/roadmaps/archive/`) and skipped
70
+ (`agents/roadmaps/skipped/`) are out of scope — they record history,
71
+ not future work.
72
+
73
+ ## Execution — process-loop skips inline
74
+
75
+ Wrappers `/roadmap:process-step|phase|full` honour the policy at the
76
+ top of [`roadmap-process-loop § 5`](roadmap-process-loop.md#5-step-loop):
77
+
78
+ 1. Before running a step, match its text against the patterns above.
79
+ 2. If CI-shaped **and** `quality.local_auto_run: false` **and** no
80
+ carve-out marker → flip the checkbox to `[-]` (cancelled), append
81
+ a one-line reason as inline note, regenerate the dashboard,
82
+ continue to the next step. **Never** run the gate.
83
+ 3. If CI-shaped **and** `quality.local_auto_run: true` → run the
84
+ step normally.
85
+ 4. If carve-out-marked → run the step regardless of the setting.
86
+
87
+ The `[-]` reason format is fixed:
88
+ `<!-- skipped: quality.local_auto_run=false → remote CI is the gate -->`.
89
+ Per [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) the flip and
90
+ the dashboard regen happen in the **same reply** that decides to
91
+ skip; saving skips for the archive commit is a rule violation.
92
+
93
+ ## Failure modes
94
+
95
+ - Authoring `- [ ] Run task ci` while `local_auto_run: false` — linter
96
+ fails the PR.
97
+ - Executing a CI-shaped step without the inline-skip flip — Iron Law
98
+ violation; the loop never reaches the gate.
99
+ - Adding a carve-out marker to bypass the gate for an *existing*
100
+ pipeline run — abuse; the marker is reserved for **new** gates
101
+ introduced by the same roadmap.
102
+ - Hiding the literal inside a fenced bash block to dodge the linter —
103
+ the linter matches inside fenced blocks too (see
104
+ `scripts/lint_roadmap_ci_steps.ts`).
105
+
106
+ ## See also
107
+
108
+ - [`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md) — the
109
+ Iron Law + trigger surface this file backs.
110
+ - [`verify-before-complete`](../../rules/verify-before-complete.md) — the
111
+ Iron Law the policy narrows; carve-out cites it.
112
+ - [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md) — inline flip
113
+ + dashboard regen contract.
114
+ - `templates/agent-settings.md` § `quality.local_auto_run` — source
115
+ of the toggle and its carve-out wording.
116
+ - [`roadmap-process-loop`](roadmap-process-loop.md) — § 5 owns the
117
+ inline-skip step gate.
@@ -30,22 +30,23 @@ roadmaps with open work that is blocked-for-later — parked, not active).
30
30
 
31
31
  ### Live merge-state before any "in-flight / merged / handled" claim
32
32
 
33
- Selection reasoning that **excludes** a roadmap — or a pre-run summary,
34
- decision, or user-facing message that **describes** one — as *in-flight*,
35
- *handled by an open PR*, *already merged*, or *not yet merged* → verify **live
36
- at claim time** (`gh pr view <n> --json state,mergedAt` / `gh pr list --search
37
- "<slug>"`). Never infer merge state from:
38
-
39
- - **dashboard open-count** — lags: a completed roadmap archives in the
40
- **merging** PR, so it can read "open" on `main` while its PR is already
41
- merged, or read "open" seconds before a merge you never re-checked;
42
- - **session memory** ("opened a PR for this earlier") or an **earlier fetch** —
43
- a merge can land between fetch and message.
44
-
45
- Stale merge-state claim ships an unnecessary message about work already done —
46
- the failure this prevents. The [`direct-answers`](../../rules/direct-answers.md)
47
- Iron-Law-2 live-state rule (git/PR state never from memory), applied to
48
- roadmap selection.
33
+ When selection reasoning would **exclude** a roadmap — or a pre-run summary,
34
+ decision, or any user-facing message would **describe** one — as *in-flight*,
35
+ *handled by an open PR*, *already merged*, or *not yet merged*, verify that
36
+ claim **live at the moment of the claim** (`gh pr view <n> --json state,mergedAt`
37
+ or `gh pr list --search "<slug>"`). Never infer merge state from:
38
+
39
+ - the **dashboard's open-count** — it lags: a completed roadmap is archived in
40
+ the **merging** PR, so a roadmap can still read "open" on `main` while its PR
41
+ is already merged (archive not yet on your checkout), or read "open" seconds
42
+ before a merge you never re-checked;
43
+ - **session memory** ("I opened a PR for this earlier") or an **earlier fetch** —
44
+ a merge can land between your fetch and your message.
45
+
46
+ A stale merge-state claim ships an unnecessary user-facing message about work
47
+ that is already done — the exact failure this clause prevents. This is the
48
+ [`direct-answers`](../../rules/direct-answers.md) Iron-Law-2 live-state rule
49
+ (git/PR state never from memory), applied to roadmap selection.
49
50
 
50
51
  ## 2. Pre-run summary — gate or inline note
51
52
 
@@ -90,7 +91,7 @@ does not fire.
90
91
 
91
92
  ## 3. Pre-scan — execution contract or commit-step ask
92
93
 
93
- Read `execution.mode` from roadmap's frontmatter
94
+ Read `execution.mode` from the roadmap's frontmatter
94
95
  (`autonomous` | `phase-checkpoints` | `interactive`; absent =
95
96
  `interactive`).
96
97
 
@@ -101,17 +102,17 @@ its four-class pre-scan over every open step:
101
102
  1. commit-shaped steps (patterns below),
102
103
  2. git-shape needs (branch / push / PR / delivery),
103
104
  3. artifact-authoring steps (new or materially rewritten skill / rule /
104
- command / guideline — feeds batched drafting-protocol research
105
+ command / guideline — feeds the batched drafting-protocol research
105
106
  pass, run at contract time against current artifact state),
106
107
  4. open questions / ambiguity markers (incl. `ask-when-uncertain`
107
108
  vague-trigger patterns).
108
109
 
109
- Surface contract summary; user's single **Accept** activates all run
110
- grants (branch, chunked commits, push to run's own feature branch
111
- only, PR-open, batched artifact drafting, council auto-enable) —
112
- cached for run, never re-asked. Contract never lifts a Hard Floor or
113
- any safety floor; boundaries + per-mode gate table live in contract
114
- context.
110
+ Surface the contract summary; the user's single **Accept** activates
111
+ all run grants (branch, chunked commits, push to the run's own feature
112
+ branch only, PR-open, batched artifact drafting, council auto-enable) —
113
+ cached for the run, never re-asked. The contract never lifts a Hard
114
+ Floor or any safety floor; boundaries + per-mode gate table live in the
115
+ contract context.
115
116
 
116
117
  **`mode: interactive` (or field absent)** → legacy commit-step scan
117
118
  only: lines matching `commit:` / `git commit` / `Commit phase`.
@@ -135,11 +136,11 @@ Read both keys from `.agent-settings.yml` once and cache for the whole
135
136
  run. Do **not** re-read inside the step loop.
136
137
 
137
138
  **`roadmap.quality_cadence`** — when to run the quality pipeline.
138
- Only relevant when `quality.local_auto_run` is `true`; `false` or
139
- missing (default) → local pipeline runs suppressed at EVERY cadence —
140
- remote CI is the gate, run-end report states *"quality gates delegated
141
- to remote CI"* instead of a pass claim (new-gate carve-out steps still
142
- run once).
139
+ Only relevant when `quality.local_auto_run` is `true`; when it is
140
+ `false` or missing (the default), local pipeline runs are suppressed at
141
+ EVERY cadence — remote CI is the gate, and the run-end report states
142
+ *"quality gates delegated to remote CI"* instead of a pass claim
143
+ (new-gate carve-out steps still run once).
143
144
 
144
145
  | Value | Pipeline runs (`local_auto_run: true` only) |
145
146
  |---|---|
@@ -183,7 +184,8 @@ For each open step in the working set (scope-bound — see wrapper):
183
184
  on the same line, regenerate the dashboard, continue to the next
184
185
  step. Never run the gate. Carve-out marker present → run normally
185
186
  (new gate must be verified once locally). Setting `true` → run
186
- normally.
187
+ normally. Full pattern table, carve-outs, linter contract, failure
188
+ modes: [`roadmap-ci-steps-mechanics`](roadmap-ci-steps-mechanics.md).
187
189
  1. **Bundled read — one parallel tool-call block.** The step
188
190
  description, the immediately-relevant code files, and any
189
191
  guideline/context the step cites are **independent** reads and
@@ -201,17 +203,18 @@ For each open step in the working set (scope-bound — see wrapper):
201
203
  2. Analyze the codebase for what the step requires.
202
204
  3. Decide and act — implement. **No "should I implement this?" prompt.**
203
205
  4. **Open question handling:**
204
- - **Council on** (toggled manually, or auto-enabled for run by
205
- accepted execution contract — § 3) → invoke per
206
+ - **Council on** (toggled manually, or auto-enabled for the run by
207
+ an accepted execution contract — § 3) → invoke per
206
208
  [`ai-council`](../../skills/ai-council/SKILL.md), integrate
207
- convergence, proceed. Token spend was opted in (contract summary
208
- named members). `high_impact` / `user_required` classifications
209
- still escalate to user per
209
+ convergence, proceed. Token spend was opted in (the contract
210
+ summary named the members). `high_impact` / `user_required`
211
+ classifications still escalate to the user per
210
212
  [`ask-when-uncertain`](../../rules/ask-when-uncertain.md).
211
213
  - **Council off / not configured** → halt, surface once, wait.
212
- Resume on next turn. Execution contract cannot enable a council
213
- with no configured members — contract summary says so upfront,
214
- and in-run ambiguity halts (never silent guessing).
214
+ Resume on next turn. An execution contract cannot enable a
215
+ council that has no configured members — the contract summary
216
+ says so upfront, and in-run ambiguity halts (never silent
217
+ guessing).
215
218
  5. **Atomic flip — same reply, every step.**
216
219
  Flip the checkbox in `agents/roadmaps/<file>.md`: `[x]` done ·
217
220
  `[~]` partial · `[-]` skipped. **Non-skippable, non-batchable**
@@ -228,19 +231,36 @@ For each open step in the working set (scope-bound — see wrapper):
228
231
  git status --porcelain -- agents/roadmaps/<file>.md
229
232
  ```
230
233
 
231
- (`git status --porcelain`, not `git diff` — roadmap file still
232
- **untracked** (e.g. fresh worktree) is invisible to `git diff`,
233
- would false-halt; `--porcelain` reports both `M` and `??`.)
234
+ (`git status --porcelain`, not `git diff` — a roadmap file that is
235
+ still **untracked**, e.g. in a fresh worktree, is invisible to
236
+ `git diff` and would false-halt; `--porcelain` reports both `M`
237
+ and `??`.)
234
238
 
235
239
  Empty output → Iron Law 2 was violated this iteration: the step
236
240
  landed work but no checkbox flipped. **Halt loudly**, surface
237
241
  "step <N> landed without checkbox flip — flip then resume", and
238
242
  stop the run. Do not auto-fix; the user resumes on the next turn.
239
243
 
240
- Deterministic counterpart to the rule's pre-send self-check —
241
- catches a forgotten flip per step, not only at run end. Runs in
242
- every scope (`process-step`, `process-phase`, `process-full`);
243
- cost is one `git diff` per step.
244
+ This guard is the deterministic counterpart to the rule's
245
+ pre-send self-check — it catches a forgotten flip per step, not
246
+ only at run end. It runs in every scope (`process-step`,
247
+ `process-phase`, `process-full`); the cost is one `git diff` per
248
+ step.
249
+
250
+ **`verify:` gate (when a step carries one).** If the step declares a
251
+ named `verify:` command (roadmap step-field convention, see
252
+ [`templates/roadmaps.md`](../../templates/roadmaps.md)), a `[x]` flip
253
+ additionally requires a **fresh green run of that exact command this
254
+ iteration** — its passing output present in this reply or an earlier
255
+ one this run. Flipping a `verify:`-bearing step to `[x]` without that
256
+ fresh green run is the same class of violation as a forgotten flip:
257
+ **halt loudly** ("step \<N\> flipped without its `verify:` run —
258
+ \`<cmd>\`"), do not auto-fix. This is a check on existing output, not a
259
+ new loop or a new script — the agent runs the step's own command, the
260
+ same way `think-before-action`'s `step → verify:` planning already
261
+ asks. Steps with no `verify:` field are governed by the flip-guard
262
+ above unchanged (agent-decidable exit/acceptance criteria remain the
263
+ default; `verify:` is the opt-in machine-checkable tightening).
244
264
 
245
265
  6. **Dashboard regen — cadence-gated.** Run
246
266
  `./agent-config roadmap:progress` when due per
@@ -265,36 +285,38 @@ For each open step in the working set (scope-bound — see wrapper):
265
285
  - Test failure or quality red on `per_step`
266
286
  - Council off + true ambiguity — under an **accepted execution
267
287
  contract** ([§ 3](#3-pre-scan--execution-contract-or-commit-step-ask))
268
- this halt exists only when no council is configured: contract
269
- auto-enables council for run, so in-run open questions resolve
288
+ this halt exists only when no council is configured: the contract
289
+ auto-enables council for the run, so in-run open questions resolve
270
290
  silently (`high_impact` / `user_required` classifications still
271
291
  escalate per [`ask-when-uncertain`](../../rules/ask-when-uncertain.md));
272
292
  with no council configured, true ambiguity halts — never silent
273
293
  guessing.
274
294
 
275
- An accepted execution contract **never lifts a Hard Floor** or any
276
- other halt above — it removes redundant *asks* (git shape, artifact
277
- drafting, council enablement), not safety.
295
+ An accepted execution contract **never lifts a Hard Floor** or any of
296
+ the other halts above — it removes redundant *asks* (git shape,
297
+ artifact drafting, council enablement), not safety.
278
298
 
279
299
  On halt: stop, surface state, do **not** auto-fix outside the failing step.
280
300
 
281
301
  ### Forbidden non-halt reasons — agent-invented cautions
282
302
 
283
- Halt list above is exhaustive. Never stop a `process-full` (or any wrapper) run
284
- for an invented reason not on it. NOT halt conditions — stopping for them
285
- violates the command + user's will:
303
+ The halt list above is **exhaustive**. An agent running `process-full` (or any
304
+ wrapper) must **never** stop the run for a reason it invented that is not on
305
+ that list. In particular these are NOT halt conditions and stopping for them is
306
+ a violation of the command and the user's will:
286
307
 
287
- - "low context / token budget" — keep landing complete steps until context
288
- actually runs out; never announce a boundary-stop by choice.
289
- - "quality would degrade / deserves a fresh focused run later"
290
- - "avoid a PR pile-up" / "let open PRs merge first"
291
- - "this phase is large / deep subsystem"
292
- - "phase-checkpoints, so I'll checkpoint and wait" — under `process-full` a
293
- phase boundary emits a non-blocking status line and the run continues; the
294
- stop-and-wait reading applies only to `process-phase`.
308
+ - "running low on context / token budget" — keep landing complete steps until
309
+ context actually runs out; never announce a boundary-stop by choice.
310
+ - "quality would degrade / this deserves a fresh focused run later"
311
+ - "avoid a PR pile-up" / "let the open PRs merge first"
312
+ - "this phase is large / touches a deep subsystem"
313
+ - "phase-checkpoints mode, so I'll checkpoint and wait" — under `process-full`
314
+ a phase boundary emits a non-blocking status line and the run **continues**;
315
+ the stop-and-wait reading of `phase-checkpoints` applies only to
316
+ `process-phase`.
295
317
 
296
- Genuine inability to continue = one of the five real halt conditions fired —
297
- surface THAT, not a manufactured caution.
318
+ If the work genuinely cannot continue, it will be because one of the five real
319
+ halt conditions fired — surface THAT, not a manufactured caution.
298
320
 
299
321
  ### Non-halt — gating notes, "optional" tags
300
322
 
@@ -324,47 +346,51 @@ execution either way.
324
346
  - **End state under an accepted execution contract** (per-mode table:
325
347
  [`roadmap-execution-contract § 4`](roadmap-execution-contract.md)):
326
348
  all steps `[x]` · quality green per cadence · work committed in
327
- chunks on run's feature branch · pushed to that branch · ONE PR
328
- open (description-only flow) · archival sweep run. **Merge is out
329
- of scope in every mode — always conversational.** Without a
330
- contract (interactive mode), the run ends after the archival check
331
- with no git delivery beyond explicitly authorized commit steps.
349
+ chunks on the run's feature branch · pushed to that branch · ONE PR
350
+ open (description-only flow) · archival sweep run. **Merge is out of
351
+ scope in every mode — always conversational.** Without a contract
352
+ (interactive mode), the run ends after the archival check with no
353
+ git delivery beyond explicitly authorized commit steps.
332
354
  - **If the entire roadmap reached `count_open == 0`** → run the full
333
355
  project quality pipeline. On red → stop, surface failures, do **not**
334
- archive. On green → run **deferred-resolution gate** below before
356
+ archive. On green → run the **deferred-resolution gate** below before
335
357
  archival.
336
358
 
337
359
  ### 6a. Deferred-resolution gate — Iron Law 3
338
360
 
339
- Before any `git mv` to `archive/`, count `[~]` items in closing
340
- roadmap. If `count_deferred > 0`, archival **blocked** per
361
+ Before any `git mv` to `archive/`, count `[~]` items in the closing
362
+ roadmap. If `count_deferred > 0`, archival is **blocked** per
341
363
  [`roadmap-progress-sync § Iron Law 3`](../../rules/roadmap-progress-sync.md).
342
- Loop MUST:
364
+ The loop MUST:
343
365
 
344
366
  1. Enumerate every `[~]` step (phase + text + optional
345
367
  `<!-- deferred: ... -->` annotation).
346
- 2. Surface numbered-options block from
368
+ 2. Surface the numbered-options block from
347
369
  [`roadmap-management § 4b`](../../skills/roadmap-management/SKILL.md) —
348
370
  five choices: follow-up (draft), follow-up (ready + blocked),
349
371
  keep-in-archive (intentional drop), restore to `[ ]`, convert
350
372
  to `[-]` cancelled.
351
- 3. Wait for user. Autonomous mandate (`/work`,
373
+ 3. Wait for the user. The autonomous mandate (`/work`,
352
374
  `/roadmap:process-full`, "decide for me") does **not** lift this
353
375
  gate — Iron Law 3 calls it "the canonical lost-information failure
354
376
  mode this rule exists to prevent."
355
- 4. On picks 1 / 2 → run "Spawn follow-up from deferred items"
377
+ 4. On picks 1 / 2 → run the "Spawn follow-up from deferred items"
356
378
  procedure in [`roadmap-management`](../../skills/roadmap-management/SKILL.md).
357
- On picks 3 / 4 / 5 → apply change, re-evaluate decision table,
358
- archive when gate clears.
359
-
360
- `count_deferred == 0` → archive. **Primary:** `archive_completed_roadmaps --all`
361
- — untracked-safe (`git mv`, or plain `mv` in a pre-first-commit / untracked
362
- consumer), rewrites inbound refs (index when tracked, filesystem when not),
363
- regens dashboard; PR-independent (gap B). **Fallback (script not vendored):**
364
- emit a one-line vendor instruction (`agents:init`), then the manual procedure in
379
+ On picks 3 / 4 / 5 → apply the change, re-evaluate the decision
380
+ table, archive when the gate clears.
381
+
382
+ `count_deferred == 0` → archive. **Primary path:** run the
383
+ `archive_completed_roadmaps --all` sweep — it is untracked-safe (`git mv`,
384
+ or a plain `mv` in a pre-first-commit / untracked consumer), rewrites inbound
385
+ refs (on the index when tracked, on the filesystem when not), and regenerates
386
+ the dashboard. This entry point is **PR-independent** (gap B): it does not need
387
+ `/create-pr` to have run. **Fallback only when that script is not vendored** in
388
+ the consumer: emit a one-line instruction to vendor it (run `agents:init`),
389
+ then apply the manual procedure in
365
390
  [`roadmap-management`](../../skills/roadmap-management/SKILL.md) (mkdir
366
- `archive/`, `mv`, ref-rewrite, regen). NEVER silently `git mv` (fails on
367
- untracked, leaves a completed roadmap rotting).
391
+ `archive/`, `mv`, inbound-ref rewrite, dashboard regen). NEVER silently
392
+ delegate to a bare `git mv` that fails on untracked files and leaves a
393
+ completed roadmap rotting in the active tree.
368
394
 
369
395
  ## Scope deltas — what each wrapper binds
370
396
 
@@ -0,0 +1,65 @@
1
+ # Roadmap Writing — source-derived & capability-adoption roadmaps
2
+
3
+ Conditional procedure for [`roadmap-writing`](../../skills/roadmap-writing/SKILL.md)
4
+ § 8. Split out of the skill body to keep it under the size budget. This fires
5
+ **only** for source-derived or capability-adoption roadmaps; an ordinary
6
+ internally-originated roadmap skips it entirely (§§ 0–7 of the skill are the
7
+ whole job). Pull this when the roadmap originates from an external input or
8
+ adopts capabilities into the suite.
9
+
10
+ ## When this section fires
11
+
12
+ This section fires **only** when the roadmap originates from an
13
+ external input or adopts capabilities into the suite:
14
+
15
+ - a competitive / capability harvest, an external suggestion, or an
16
+ external LLM ideation thread, **or**
17
+ - a decision to integrate/adopt new skills, commands, or a pack, **or**
18
+ - a plan whose design has genuinely contested, not-yet-resolved
19
+ trade-offs.
20
+
21
+ For an ordinary internally-originated roadmap, **skip this section** —
22
+ §§ 0–7 are the whole job. Do not bolt a Provenance block or a
23
+ gap-table onto a plan that needs neither (template rule 19).
24
+
25
+ ## The four extra moves
26
+
27
+ When it fires, add these four moves to the §§ 0–7 procedure:
28
+
29
+ **A. Gap-table before drafting (don't adopt — integrate).** Audit each
30
+ proposed item against the *existing* skill / command / rule surface and
31
+ classify it `KEEP` (verified gap), `FOLD` (into a named existing
32
+ artefact), or `CUT` (already covered). Only `KEEP` items become
33
+ roadmap scope; `FOLD`/`CUT` are recorded so the cut is auditable. A
34
+ negative grep is not proof — open the nearest existing artefacts (per
35
+ [`think-before-action`](../../rules/think-before-action.md) and, for an
36
+ external source, [`external-reference-deep-dive`](../../rules/external-reference-deep-dive.md)).
37
+
38
+ **B. Resolve contested design in the council *first*, then author.**
39
+ The default council flow (`/roadmap:ai-council`) *challenges a finished
40
+ roadmap*. For a contested or source-derived plan, run the council
41
+ **up front** on the design questions (`/council:design`, or the
42
+ [`ai-council`](../../skills/ai-council/SKILL.md) skill), converge, **then** write
43
+ the roadmap encoding the verdicts — so the plan ships already-decided,
44
+ not as open questions in prose. One run, converge; do not relitigate.
45
+
46
+ **C. Encode the decision so it survives.**
47
+ - Inline council convergence under a `## Council notes (<date>, <depth>)`
48
+ block — members + date, **never** a session filepath
49
+ ([`no-roadmap-references`](../../rules/no-roadmap-references.md)).
50
+ - Add a `## Provenance` block — source by a **neutral descriptor**
51
+ (never the raw competitor/tool name,
52
+ [`source-confidentiality`](../../rules/source-confidentiality.md));
53
+ retain the real link as an `ENC1:` token via
54
+ `src/scripts/_lib/link_crypto.ts encrypt --value <url>`.
55
+ - Save the locked decision to memory (project type, "don't relitigate")
56
+ so a future session does not re-derive it.
57
+
58
+ **D. Make "integration, not dump" a testable acceptance criterion.**
59
+ The AC must encode the anti-dump litmus, decidably: visible commands
60
+ within the pack's `size_class` budget; each new visible command reuses
61
+ ≥ 2 existing skills; no new artefact duplicates an existing one;
62
+ governance preflight recorded — `domain-adoption-policy` (does it open a
63
+ new domain?), `persona-governance` (new personas?),
64
+ `framework-neutrality`, `size-enforcement` — with the disposition
65
+ stated in the roadmap.
@@ -0,0 +1,84 @@
1
+ # Subagent Modes — worktree + live-app-judge detail
2
+
3
+ Extended detail for the two heaviest [`subagent-orchestration`](../../skills/subagent-orchestration/SKILL.md)
4
+ modes — `do-in-worktrees` (mode 7) and `do-with-live-app-judge` (mode 8).
5
+ Split out of the skill body to keep it under the size budget; the mode list,
6
+ selection rules, and the six common modes stay inline in the skill. Pull this
7
+ when you actually dispatch one of these two modes.
8
+
9
+ ## Mode 7 — do-in-worktrees
10
+
11
+ Cross-wing or cross-skill chain executed across isolated git
12
+ worktrees — each handoff in the chain runs in its own worktree, so
13
+ the workspace state of one step never leaks into the next. Operationalizes
14
+ the worktree boundary clause in
15
+ [`docs/contracts/cross-wing-handoff.md`](../../../../docs/contracts/cross-wing-handoff.md)
16
+ § 3. State-machine layer only — worktree creation/destruction lives
17
+ in [`using-git-worktrees`](../../skills/using-git-worktrees/SKILL.md) and
18
+ [`finishing-a-development-branch`](../../skills/finishing-a-development-branch/SKILL.md).
19
+
20
+ | When to use | When not | Model pairing |
21
+ |---|---|---|
22
+ | Multi-step cross-wing chain (≥2 senior skills, each ≥30 min) where one step's open files / branch state would confuse the next | Fast iteration where each step < 30 min — worktree overhead exceeds isolation benefit | implementers = same tier per step; judge = one tier up at chain end |
23
+
24
+ **Handoff shape:** initiator-skill emits the typed output declared in
25
+ its `## Output` block → control passes to delegated-skill in a fresh
26
+ worktree → delegated-skill consumes the input shape declared in its
27
+ `## Input` (or `## When the agent should load this`) block. The
28
+ handoff is auditable; `lint_handoffs.ts` validates the chain.
29
+
30
+ **Example chain (W3 launch):** `positioning-strategy` (worktree A) →
31
+ `messaging-architecture` (worktree B, consumes positioning's
32
+ `positioning-statement.md`) → `gtm-launch` (worktree C, consumes
33
+ both prior artifacts). Each worktree carries one branch; the chain
34
+ end produces a single integration PR.
35
+
36
+ **Anti-pattern:** do not use for fast iteration loops where each
37
+ step is under ~30 minutes. The branch-creation, context-switch, and
38
+ worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
39
+ or mode 3 (do-in-steps) for those.
40
+
41
+ **Competitive variant — per-candidate isolation.** When mode 5
42
+ (`do-competitively`) is combined with worktrees, each candidate
43
+ implementer runs in its own worktree (so candidates cannot read each
44
+ other's open files or branch state). Selection rules:
45
+
46
+ - **No auto-merge.** The orchestrator never merges a candidate
47
+ branch. Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md) —
48
+ applies even under standing autonomy. ADR-005 records the reasoning.
49
+ - **Ranked presentation.** Judge ranks candidates (1..N) with a
50
+ one-line justification per rank; user picks the winner.
51
+ - **Loser worktrees stay.** The orchestrator does not delete losing
52
+ worktrees automatically — the user keeps the option to harvest a
53
+ partial idea before cleanup.
54
+
55
+ ## Mode 8 — do-with-live-app-judge (gated — UI-heavy tasks)
56
+
57
+ Implementer ships the change AND starts the dev server; the judge drives
58
+ the RUNNING application (Playwright / browser) against a written rubric —
59
+ it never reads the diff. Catches the class static review misses: wired-but-
60
+ broken flows, dead buttons, state that renders wrong only at runtime.
61
+
62
+ | When to use | When not | Model pairing |
63
+ |---|---|---|
64
+ | UI-heavy change where "looks right in the diff" ≠ "works in the app"; a dev server + browser tooling exist | Backend/logic change (a diff judge is cheaper and sharper); no runnable app surface | implementer = session; judge = same tier, fresh context, browser tools only |
65
+
66
+ Rules:
67
+
68
+ - The judge's rubric is written BEFORE dispatch (what flows to click, what
69
+ must render) — never improvised from the diff it must not read.
70
+ - Record `dispatch_mode: do-with-live-app-judge` + `verdict_changed_outcome`
71
+ on every use. **Adoption gate:** this mode stays experimental until its
72
+ `verdict_changed_outcome` telemetry shows it changes outcomes (caught a
73
+ real issue a diff judge missed); a mode that never flips a verdict is
74
+ cost without value and gets removed.
75
+ - No self-play/"adversarial training" framing — this is one judge, one
76
+ rubric, one running app.
77
+ - **Low-priority future candidate (needs real screenshot tooling — do not
78
+ build speculatively):** the async silent-verifier shape from
79
+ [`design-review`](../../skills/design-review/SKILL.md) § Async-verifier pattern — a
80
+ background verifier that owns UI verification via screenshots, forbids the
81
+ main agent from self-checking, and stays silent on pass — is the natural
82
+ mechanism for this mode's judge once dependable screenshot tooling lands.
83
+ Recorded from road-to-opt-design-polish; gate it behind the same
84
+ `verdict_changed_outcome` adoption evidence above.