@event4u/agent-config 8.10.0 → 8.11.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 (192) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +148 -0
  3. package/README.md +5 -5
  4. package/dist/agent-src/commands/challenge-me/vision.md +121 -32
  5. package/dist/agent-src/commands/challenge-me/with-docs.md +21 -8
  6. package/dist/agent-src/commands/commit/in-chunks.md +1 -1
  7. package/dist/agent-src/commands/commit.md +2 -1
  8. package/dist/agent-src/commands/cost/report.md +2 -1
  9. package/dist/agent-src/commands/feature/dev.md +4 -4
  10. package/dist/agent-src/commands/humanize.md +101 -0
  11. package/dist/agent-src/commands/jira-ticket.md +2 -2
  12. package/dist/agent-src/commands/memory/load.md +15 -0
  13. package/dist/agent-src/commands/optimize/project.md +12 -0
  14. package/dist/agent-src/commands/roadmap/create.md +12 -11
  15. package/dist/agent-src/commands/tests/create.md +1 -1
  16. package/dist/agent-src/commands/worktree/cleanup.md +22 -17
  17. package/dist/agent-src/commands/worktree/create.md +3 -1
  18. package/dist/agent-src/commands/worktree/status.md +12 -0
  19. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +66 -0
  20. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +1 -0
  21. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -3
  22. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +14 -0
  23. package/dist/agent-src/contexts/execution/roadmap-writing-source-derived.md +65 -0
  24. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +84 -0
  25. package/dist/agent-src/rules/autonomous-execution.md +7 -37
  26. package/dist/agent-src/rules/broken-access-control.md +7 -45
  27. package/dist/agent-src/rules/code-comment-discipline.md +148 -0
  28. package/dist/agent-src/rules/context-hygiene.md +14 -0
  29. package/dist/agent-src/rules/delegation-policy.md +10 -8
  30. package/dist/agent-src/rules/design-fidelity.md +4 -0
  31. package/dist/agent-src/rules/git-history-discipline.md +4 -79
  32. package/dist/agent-src/rules/legal-safety-floor.md +11 -55
  33. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -56
  34. package/dist/agent-src/rules/think-before-action.md +10 -0
  35. package/dist/agent-src/rules/verify-before-complete.md +12 -0
  36. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +13 -12
  37. package/dist/agent-src/skills/ai-council/SKILL.md +19 -9
  38. package/dist/agent-src/skills/api-design/SKILL.md +7 -5
  39. package/dist/agent-src/skills/api-testing/SKILL.md +1 -1
  40. package/dist/agent-src/skills/authz-review/SKILL.md +59 -2
  41. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  42. package/dist/agent-src/skills/bug-analyzer/SKILL.md +19 -16
  43. package/dist/agent-src/skills/code-refactoring/SKILL.md +9 -9
  44. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -0
  45. package/dist/agent-src/skills/data-flow-mapper/SKILL.md +1 -1
  46. package/dist/agent-src/skills/defense-in-depth/SKILL.md +2 -2
  47. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +7 -7
  48. package/dist/agent-src/skills/design-intelligence/SKILL.md +8 -8
  49. package/dist/agent-src/skills/design-review/SKILL.md +23 -2
  50. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +2 -0
  51. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -0
  52. package/dist/agent-src/skills/fe-design/SKILL.md +7 -9
  53. package/dist/agent-src/skills/git-workflow/SKILL.md +86 -0
  54. package/dist/agent-src/skills/humanizer/SKILL.md +147 -0
  55. package/dist/agent-src/skills/humanizer/data/patterns.md +190 -0
  56. package/dist/agent-src/skills/humanizer/evals/triggers.json +17 -0
  57. package/dist/agent-src/skills/laravel/SKILL.md +14 -1
  58. package/dist/agent-src/skills/launch-readiness/SKILL.md +20 -19
  59. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +126 -0
  60. package/dist/agent-src/skills/logging-monitoring/SKILL.md +1 -1
  61. package/dist/agent-src/skills/mcp/SKILL.md +1 -1
  62. package/dist/agent-src/skills/memory-consolidation/SKILL.md +14 -1
  63. package/dist/agent-src/skills/migration-architect/SKILL.md +2 -1
  64. package/dist/agent-src/skills/performance/SKILL.md +1 -1
  65. package/dist/agent-src/skills/php-debugging/SKILL.md +17 -0
  66. package/dist/agent-src/skills/readme-writing/SKILL.md +2 -0
  67. package/dist/agent-src/skills/readme-writing-package/SKILL.md +2 -0
  68. package/dist/agent-src/skills/release-comms/SKILL.md +2 -0
  69. package/dist/agent-src/skills/roadmap-writing/SKILL.md +22 -51
  70. package/dist/agent-src/skills/security-audit/SKILL.md +6 -9
  71. package/dist/agent-src/skills/sentry-integration/SKILL.md +2 -2
  72. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +8 -0
  73. package/dist/agent-src/skills/source-discovery/SKILL.md +26 -24
  74. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +55 -46
  75. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +42 -0
  76. package/dist/agent-src/skills/systematic-debugging/SKILL.md +10 -0
  77. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +10 -0
  78. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +27 -20
  79. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +38 -0
  80. package/dist/agent-src/templates/agent-settings.md +3 -2
  81. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +15 -1
  82. package/dist/agent-src/templates/roadmaps.md +14 -0
  83. package/dist/cli/commands/recordTriggerEval.js +4 -14
  84. package/dist/cli/commands/recordTriggerEval.js.map +1 -1
  85. package/dist/discovery/deprecation-report.md +1 -1
  86. package/dist/discovery/discovery-manifest.json +147 -78
  87. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  88. package/dist/discovery/discovery-manifest.summary.md +6 -6
  89. package/dist/discovery/orphan-report.md +1 -1
  90. package/dist/discovery/packs.json +13 -10
  91. package/dist/discovery/trust-report.md +3 -3
  92. package/dist/discovery/workspaces.json +14 -9
  93. package/dist/install/install.mjs +12 -7
  94. package/dist/mcp/registry-manifest.json +4 -4
  95. package/dist/router.json +1 -1
  96. package/dist/scripts/_lib/claude_settings_hooks.js +8 -0
  97. package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -1
  98. package/dist/scripts/_lib/trigger_eval_floors.js +24 -0
  99. package/dist/scripts/_lib/trigger_eval_floors.js.map +1 -0
  100. package/dist/scripts/condense.js +12 -2
  101. package/dist/scripts/condense.js.map +1 -1
  102. package/dist/server/schemas/settings.js +5 -2
  103. package/dist/server/schemas/settings.js.map +1 -1
  104. package/docs/CLAIMS.md +24 -3
  105. package/docs/architecture.md +3 -3
  106. package/docs/benchmark.md +51 -0
  107. package/docs/catalog.md +8 -5
  108. package/docs/command-flows.md +2 -1
  109. package/docs/contracts/ai-council-config.md +92 -0
  110. package/docs/contracts/command-clusters.md +1 -0
  111. package/docs/contracts/evidence-based-pruning.md +1 -0
  112. package/docs/contracts/hook-architecture-v1.md +25 -0
  113. package/docs/contracts/kernel-membership.md +35 -0
  114. package/docs/contracts/measurement-baseline.md +1 -0
  115. package/docs/contracts/release-sizing.md +22 -0
  116. package/docs/contracts/write-engine.md +38 -1
  117. package/docs/customization.md +12 -0
  118. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -0
  119. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +11 -0
  120. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +1 -1
  121. package/docs/decisions/ADR-028-root-layout.md +1 -1
  122. package/docs/decisions/ADR-038-canonical-settings-path.md +10 -0
  123. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +29 -5
  124. package/docs/decisions/ADR-093-ai-council-config-user-global.md +1 -1
  125. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +7 -0
  126. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +2 -2
  127. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +1 -1
  128. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +11 -0
  129. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +11 -1
  130. package/docs/decisions/ADR-117-subagents-auto-default-on.md +2 -1
  131. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +162 -0
  132. package/docs/decisions/ADR-119-global-knowledge-default-on.md +104 -0
  133. package/docs/decisions/ADR-200-python-to-typescript-migration.md +11 -1
  134. package/docs/decisions/ADR-rule-kernel-and-router.md +11 -0
  135. package/docs/decisions/INDEX.md +11 -9
  136. package/docs/design/cross-model-parity-eval.md +82 -0
  137. package/docs/design/length-neutral-judge-rerun.md +92 -0
  138. package/docs/featured-skills.md +2 -2
  139. package/docs/getting-started-by-role.md +1 -1
  140. package/docs/getting-started.md +2 -2
  141. package/docs/governance-advantage.md +1 -1
  142. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +80 -5
  143. package/docs/guidelines/code-clarity.md +106 -1
  144. package/docs/guidelines/design-antipatterns.md +20 -0
  145. package/docs/guidelines/php/php-coding-patterns.md +12 -2
  146. package/docs/proof.md +20 -14
  147. package/docs/wedge/production-validator/production-validator.md +27 -0
  148. package/package.json +1 -1
  149. package/src/config/agent-settings.template.yml +29 -9
  150. package/src/scripts/_cli/cmd_doctor.ts +34 -1
  151. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +87 -0
  152. package/src/scripts/_lib/claude_settings_hooks.ts +8 -0
  153. package/src/scripts/_lib/knowledge_global.ts +6 -2
  154. package/src/scripts/_lib/knowledge_global_redaction.ts +42 -4
  155. package/src/scripts/_lib/lexical_index.ts +15 -2
  156. package/src/scripts/_lib/orchestration_record.ts +14 -0
  157. package/src/scripts/_lib/trigger_eval_floors.ts +31 -0
  158. package/src/scripts/ai_council/chairman.ts +90 -0
  159. package/src/scripts/ai_council/clients.ts +18 -3
  160. package/src/scripts/ai_council/config.ts +157 -0
  161. package/src/scripts/ai_council/debate_gates.ts +89 -0
  162. package/src/scripts/ai_council/orchestrator.ts +65 -2
  163. package/src/scripts/ai_council/prompts.ts +121 -11
  164. package/src/scripts/ai_council/replay.ts +17 -0
  165. package/src/scripts/ai_council/stance_tally.ts +184 -0
  166. package/src/scripts/ai_tells_rules.ts +433 -0
  167. package/src/scripts/bench_humanizer_eval.ts +240 -0
  168. package/src/scripts/build_discovery_manifest.ts +6 -0
  169. package/src/scripts/build_proof.ts +21 -9
  170. package/src/scripts/check_claims.ts +40 -0
  171. package/src/scripts/check_rule_invariants.ts +10 -3
  172. package/src/scripts/condense.ts +16 -2
  173. package/src/scripts/consumer_matrix.ts +41 -2
  174. package/src/scripts/council_cli.ts +147 -0
  175. package/src/scripts/detect_ai_tells.ts +312 -0
  176. package/src/scripts/install.ts +12 -0
  177. package/src/scripts/knowledge_global_cli.ts +1 -1
  178. package/src/scripts/lint_framework_leakage.ts +88 -7
  179. package/src/scripts/lint_framework_leakage_allowlist.json +59 -572
  180. package/src/scripts/lint_knowledge_scale.ts +30 -0
  181. package/src/scripts/lint_originality_shingles.ts +210 -0
  182. package/src/scripts/orchestration_record.ts +1 -0
  183. package/src/scripts/schemas/agent-settings.schema.json +11 -0
  184. package/src/scripts/self_review_gate.ts +41 -15
  185. package/src/scripts/skill_eval_coverage.ts +71 -3
  186. package/src/scripts/skill_linter.ts +1 -0
  187. package/src/scripts/trigger_eval_rotation.ts +344 -0
  188. package/src/scripts/update_counts.ts +5 -17
  189. package/src/scripts/worktree_cleanup_check.ts +263 -0
  190. package/src/server/schemas/settings.ts +8 -3
  191. package/src/scripts/analysis_freshness.ts +0 -362
  192. package/src/scripts/export_replay_corpus.ts +0 -208
@@ -67,7 +67,7 @@ User Input → Controller → Validation → Service → DB/File/External
67
67
  | Category | What to look for |
68
68
  |---|---|
69
69
  | **SQL Injection** | Raw queries with concatenation, missing parameter binding |
70
- | **XSS** | Unescaped output in Blade (`{!! !!}`), JSON responses with HTML |
70
+ | **XSS** | Unescaped template output (Blade `{!! !!}`, JSX `dangerouslySetInnerHTML`, Jinja `|safe`), JSON responses with HTML |
71
71
  | **CSRF** | Missing middleware, API endpoints without token verification |
72
72
  | **Auth bypass** | Missing policy checks, broken gate logic, `withoutMiddleware()` |
73
73
  | **IDOR** | Direct object access without ownership verification |
@@ -81,14 +81,7 @@ User Input → Controller → Validation → Service → DB/File/External
81
81
 
82
82
  ### 4. Framework-specific checks
83
83
 
84
- **Laravel:**
85
- - `env()` in non-config files (leaks in debug mode)
86
- - Debug mode (`APP_DEBUG=true`) in production
87
- - Missing `$fillable` on models used with `request()->all()`
88
- - `Route::any()` exposing unintended HTTP methods
89
- - Missing rate limiting on login/register/password-reset
90
- - Broadcast channels without proper authorization
91
- - Missing encryption on sensitive cookie/session data
84
+ → Laravel-specific checks: see [`laravel`](../laravel/SKILL.md) § Security audit checks.
92
85
 
93
86
  ### 5. Dependency audit
94
87
 
@@ -99,6 +92,10 @@ User Input → Controller → Validation → Service → DB/File/External
99
92
 
100
93
  ## Output format
101
94
 
95
+ 1. Emit one entry per vulnerability using the field list below; one finding = one block, never merge.
96
+ 2. Category must map to an OWASP Top 10 (or LLM Top 10) bucket; Severity must use Low / Medium / High / Critical with a single Exploitability tag.
97
+ 3. Close with a *Recommended Fix Order* ranked by exploitability × blast radius and tag each line with Confidence.
98
+
102
99
  For each vulnerability:
103
100
 
104
101
  - **Vulnerability:** concise title
@@ -147,7 +147,7 @@ search_events(organizationSlug='my-org', naturalLanguageQuery='count of database
147
147
  - **Skill:** `logging-monitoring` — full monitoring stack (Sentry + Grafana + Loki)
148
148
  - **Skill:** `bug-analyzer` — uses Sentry as input for bug investigation
149
149
  - **Command:** `/bug-investigate` — fetches Sentry details automatically
150
- - **Config:** `config/sentry.php` — Sentry DSN and configuration
150
+ - **Config:** the SDK's config surface (`config/sentry.php` in Laravel, `sentry.client.config.ts` in Next.js) — Sentry DSN and configuration
151
151
 
152
152
 
153
153
  ## Output format
@@ -157,7 +157,7 @@ search_events(organizationSlug='my-org', naturalLanguageQuery='count of database
157
157
 
158
158
  ## Gotcha
159
159
 
160
- - Sentry groups errors by stacktrace — different root → may appear as the same issue. Check multiple events.
160
+ - Sentry groups errors by stacktrace — different root causes may appear as the same issue. Check multiple events.
161
161
  - The model tends to analyze only the latest event — check the "Events" tab for patterns across time.
162
162
  - Don't use Sentry MCP tools for simple lookups — use the Sentry web UI link instead (saves tokens).
163
163
 
@@ -107,6 +107,14 @@ Decide what to create:
107
107
 
108
108
  ### Step 4: Create or Update
109
109
 
110
+ > **Anchor exact commands to the transcript, not the journal.** A session
111
+ > journal is a *lossy summary*; a command, path, or flag reconstructed from it
112
+ > can be subtly wrong. Before writing a concrete step (a command, a file path, a
113
+ > config key) into a rule or skill, confirm it against the anchored source
114
+ > transcript — carry a `transcript:` / session anchor on the mined learning so
115
+ > the exact wording is recoverable, and verify against it rather than trusting
116
+ > the summary.
117
+
110
118
  - **New rule** → create in `.agent-src.uncondensed/rules/`, follow rule conventions
111
119
  - **New skill** → use `skill-writing` skill, create in `.agent-src.uncondensed/skills/`
112
120
  - **Update existing** → use `skill-management` skill
@@ -92,7 +92,7 @@ distinct methods/fields *intended* to be used, OR the source exposes >50 methods
92
92
  and ≥1 is used, OR a prior hallucination on it, OR local types/README are
93
93
  insufficient)** — judged on *intended* use at discovery (still built **before**
94
94
  coding). For a card-worthy dependency named in the task: **local-first**
95
- (`node_modules` / `vendor` README + type defs; the **installed version is ground
95
+ (`node_modules` / `vendor/` README + type defs; the **installed version is ground
96
96
  truth**), then the net (registry → repo host → homepage). **Pin the remote ref to
97
97
  the installed version — never blind `main`.** Reuse
98
98
  [`external-reference-deep-dive`](../../rules/external-reference-deep-dive.md) +
@@ -106,19 +106,21 @@ Resolve and read the actual class fresh (Step 0). In-codebase → local, no card
106
106
 
107
107
  ### E. Global cards — leads only (v2, ADR-100)
108
108
 
109
- When `knowledge.global_sharing.enabled` (user-global, **default off until cross-project reuse measured** — ADR-103), a matching
109
+ When `knowledge.global_sharing.enabled` (user-global, default on), a matching
110
110
  card may exist in the per-user file-first store
111
- (`~/.event4u/agent-config/knowledge/`), promoted from another project. **Lead,
112
- never a build input**:
113
-
114
- - Load **negative facts + pointers** as leads (`trust: durable`).
115
- - Load **positive structure** under **"Assumed (from card · GLOBAL,
116
- unverified)"** — record via `evidence_report.ts add --bucket assumed --origin
117
- global …` and **re-confirm vs the live source this session** before use
118
- (version skew / schema drift). Never "Verified" on the global card alone.
119
- - `public`/`vendor` seen in ≥ `auto_promote_threshold` distinct repos → one-tap
120
- promotion **suggestion** (never silent); `proprietary` is manual-only. Record
121
- sightings via `_lib/knowledge_global_promote.ts record-seen`.
111
+ (`~/.event4u/agent-config/knowledge/`), promoted from another project. It is a
112
+ **lead, never a build input**:
113
+
114
+ - Load its **negative facts + pointers** as usable leads (`trust: durable`).
115
+ - Load any **positive structure** into the Evidence Report under **"Assumed
116
+ (from card · GLOBAL, unverified)"** — record it with
117
+ `evidence_report.ts add --bucket assumed --origin global …` and **re-confirm it
118
+ against the live source this session** before use (version skew / schema drift
119
+ across projects). Never "Verified" on the global card alone.
120
+ - A `public`/`vendor` card seen in ≥ `auto_promote_threshold` distinct repos
121
+ triggers a one-tap promotion **suggestion** (never silent). `proprietary` cards
122
+ are manual-only and never auto-shared. Record sightings via
123
+ `_lib/knowledge_global_promote.ts record-seen`.
122
124
 
123
125
  ## Missing structure → fixed extension workflow
124
126
 
@@ -156,21 +158,21 @@ threshold is met, a thin committed card.
156
158
 
157
159
  ## Evidence v2 — self-building context (heuristics only, never a bypass)
158
160
 
159
- Curated project-intelligence (Class A config digests, Class B observed conventions,
160
- Class C learned lessons) may be loaded to inform *where to look* and *what convention
161
- to expect* — but read **for heuristics only** and **never** bypasses a fresh structural
162
- read. A field/endpoint/column/value is still confirmed against a live source this
163
- session. v2 capture is **write-only into gitignored intake** (agent may *suggest* a
164
- signal, never silently commit); trust and commit are always human-gated. Full model +
165
- the three classes + memory tiers:
161
+ Curated project-intelligence (Class A config digests, Class B observed
162
+ conventions, Class C learned lessons) may be loaded to inform *where to look* and
163
+ *what convention to expect* — but it is read **for heuristics only** and **never**
164
+ bypasses a fresh structural read. A field/endpoint/column/value is still confirmed
165
+ against a live source this session. v2 capture is **write-only into gitignored
166
+ intake** (the agent may *suggest* a signal, never silently commit); trust and
167
+ commit are always human-gated. Full model + the three classes + memory tiers:
166
168
  [`project-intelligence`](../../agent-src/contexts/execution/project-intelligence.md).
167
169
 
168
170
  ## Knowledge capture (`api_shape_learned` / `convention_detected` events)
169
171
 
170
172
  A confirmed API/GraphQL shape (§B) or an observed coding convention with
171
- ≥ 2 supporting locations is worth persisting for the team, distinct
172
- from the per-session Evidence Report above. Append to the knowledge
173
- intake — never write a tracked page mid-task:
173
+ ≥ 2 supporting locations is worth persisting for the team, distinct from
174
+ the per-session Evidence Report above. Append to the knowledge intake —
175
+ never write a tracked page mid-task:
174
176
 
175
177
  ```bash
176
178
  ./scripts-run src/scripts/emit_knowledge_event --type api_shape_learned \
@@ -182,7 +184,7 @@ intake — never write a tracked page mid-task:
182
184
 
183
185
  `/team-knowledge consolidate` turns accumulated events into
184
186
  `agents/knowledge/concepts/` pages as a reviewed batch — see
185
- [`knowledge-pages`](../../templates/contexts/knowledge-pages.md).
187
+ [`knowledge-pages`](../../agent-src/templates/contexts/knowledge-pages.md).
186
188
 
187
189
  ## Gotchas
188
190
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: inherit
3
3
  name: subagent-orchestration
4
- description: "Use when orchestrating implementer/judge subagents — seven modes (do-and-judge ±two-stage, do-in-steps/parallel/worktrees, do-competitively, judge-with-debate) — models from .agent-settings.yml."
4
+ description: "Use when orchestrating implementer/judge subagents — form gate + eight modes (do-and-judge ±two-stage, steps/parallel/worktrees, competitively, debate, live-app-judge)."
5
5
  domain: process
6
6
  workspaces:
7
7
  - agent-config-maintainer
@@ -82,11 +82,46 @@ over-scripted prompts that break on first contingency.
82
82
  - **(d) Pre-declared check-in conditions.** The worker names, at spawn time, the
83
83
  conditions under which it will halt and ask ("if login required", "if
84
84
  multiple candidates found") — so interrupts are predictable, not surprises.
85
+ - **(e) Attach relevant knowledge — read-only (road-to-opt-subagent-harvest
86
+ P3).** Before dispatch, look up the slice's key identifiers via
87
+ `memory_lookup` / the knowledge cards and attach the top hits to the
88
+ worker prompt AS LEADS — labelled per the source-discovery discipline
89
+ (negative facts + pointers durable; positive structure = hypothesis to
90
+ re-confirm, never a build input). The WRITE half stays forbidden: a
91
+ subagent's output is never auto-persisted into memory — promotion is
92
+ always the human-gated flow (ADR-098 floor). Auto-surface, never
93
+ auto-write.
85
94
 
86
95
  When to delegate at all is [`delegation-policy`](../../rules/delegation-policy.md);
87
96
  the spawn boundary is the [`subagent-spawn-contract`](../../contexts/execution/subagent-spawn-contract.md).
88
97
 
89
- ## The seven modes
98
+ ## Form gate — deterministic, BEFORE mode selection
99
+
100
+ With auto-dispatch on by default (ADR-117), mode selection happens without
101
+ a human in the loop — so the FORM is decided by a static table first, and
102
+ only then is the specific mode picked inside that form. Static table only:
103
+ no learned routing, no self-modifying selector (rejected, stays rejected).
104
+
105
+ | Task shape (structural signal) | Form | Modes in the form |
106
+ |---|---|---|
107
+ | ≥ 2 independent, verifiable slices | parallel | `do-in-parallel`, `do-competitively` |
108
+ | Multi-step cross-wing chain needing filesystem isolation | worktrees | `do-in-worktrees` |
109
+ | Ordered steps with declared dependencies | steps | `do-in-steps` |
110
+ | Single change with non-trivial risk / contested spec / decision | judge | `do-and-judge`, `do-and-judge-two-stage`, `judge-with-debate`, `do-with-live-app-judge` |
111
+ | Single slice below the delegability floor, unstructured, or frontier-priced | none | no dispatch — run in-session |
112
+
113
+ Rules:
114
+
115
+ - The gate consumes the SAME structural signals as
116
+ `auto_dispatch.ts::classifyTask` (slice count, dependency declarations,
117
+ size floor) — it never re-interprets the task text on vibes.
118
+ - Ambiguous shape → `none` (in-session), never a speculative spawn — the
119
+ delegation-policy default.
120
+ - Record the outcome in the telemetry line (`dispatch_mode` field, mode id
121
+ or `none`) so the gate's value is measurable inside the ADR-117
122
+ prove-or-drop window.
123
+
124
+ ## The eight modes
90
125
 
91
126
  Each mode has a decision row: when to use, when not, and the expected
92
127
  model pairing. Defaults come from
@@ -178,49 +213,23 @@ migration, public API) where a single judge is too easy to fool.
178
213
 
179
214
  ### 7. do-in-worktrees
180
215
 
181
- Cross-wing or cross-skill chain executed across isolated git
182
- worktrees — each handoff in the chain runs in its own worktree, so
183
- the workspace state of one step never leaks into the next. Operationalizes
184
- the worktree boundary clause in
185
- [`docs/contracts/cross-wing-handoff.md`](../../../docs/contracts/cross-wing-handoff.md)
186
- § 3. State-machine layer only — worktree creation/destruction lives
187
- in [`using-git-worktrees`](../using-git-worktrees/SKILL.md) and
188
- [`finishing-a-development-branch`](../finishing-a-development-branch/SKILL.md).
216
+ Cross-wing or cross-skill chain executed across isolated git worktrees —
217
+ each handoff runs in its own worktree so one step's workspace state never
218
+ leaks into the next. Use for a multi-step cross-wing chain (≥2 senior
219
+ skills, each ≥30 min); not for fast iteration under 30 min (overhead
220
+ dominates). Full handoff shape, example chain, competitive per-candidate
221
+ isolation, and the no-auto-merge Hard Floor →
222
+ [`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 7.
189
223
 
190
- | When to use | When not | Model pairing |
191
- |---|---|---|
192
- | 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 |
193
-
194
- **Handoff shape:** initiator-skill emits the typed output declared in
195
- its `## Output` block → control passes to delegated-skill in a fresh
196
- worktree → delegated-skill consumes the input shape declared in its
197
- `## Input` (or `## When the agent should load this`) block. The
198
- handoff is auditable; `lint_handoffs.ts` validates the chain.
199
-
200
- **Example chain (W3 launch):** `positioning-strategy` (worktree A) →
201
- `messaging-architecture` (worktree B, consumes positioning's
202
- `positioning-statement.md`) → `gtm-launch` (worktree C, consumes
203
- both prior artifacts). Each worktree carries one branch; the chain
204
- end produces a single integration PR.
205
-
206
- **Anti-pattern:** do not use for fast iteration loops where each
207
- step is under ~30 minutes. The branch-creation, context-switch, and
208
- worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
209
- or mode 3 (do-in-steps) for those.
210
-
211
- **Competitive variant — per-candidate isolation.** When mode 5
212
- (`do-competitively`) is combined with worktrees, each candidate
213
- implementer runs in its own worktree (so candidates cannot read each
214
- other's open files or branch state). Selection rules:
215
-
216
- - **No auto-merge.** The orchestrator never merges a candidate
217
- branch. Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md) —
218
- applies even under standing autonomy. ADR-005 records the reasoning.
219
- - **Ranked presentation.** Judge ranks candidates (1..N) with a
220
- one-line justification per rank; user picks the winner.
221
- - **Loser worktrees stay.** The orchestrator does not delete losing
222
- worktrees automatically — the user keeps the option to harvest a
223
- partial idea before cleanup.
224
+ ### 8. do-with-live-app-judge (gated — UI-heavy tasks)
225
+
226
+ Implementer ships the change AND starts the dev server; the judge drives
227
+ the RUNNING app (Playwright / browser) against a written rubric, never
228
+ reading the diff. Use for UI-heavy change where "looks right in the diff"
229
+ ≠ "works in the app"; not for backend/logic (a diff judge is cheaper).
230
+ Experimental until `verdict_changed_outcome` telemetry proves it. Rubric,
231
+ adoption gate, and the async-verifier future candidate →
232
+ [`subagent-modes-detail`](../../agent-src/contexts/execution/subagent-modes-detail.md) § Mode 8.
224
233
 
225
234
  ## Status taxonomy — every subagent return uses one envelope
226
235
 
@@ -256,7 +265,7 @@ Each mode's literal dispatch template lives under
256
265
  matching prompt at dispatch time and substitutes `{{placeholders}}`.
257
266
  Edits to a prompt do not bloat this skill against the 400-line sunset
258
267
  trigger; `tests/test_subagent_prompt_loading.py` confirms each of the
259
- seven modes resolves to a loadable prompt that cites all four taxonomy
268
+ eight modes resolves to a loadable prompt that cites all four taxonomy
260
269
  statuses.
261
270
 
262
271
  ## Procedure
@@ -285,7 +294,7 @@ same context, **stop** and report. Do not improvise.
285
294
 
286
295
  ### 3. Pick the mode
287
296
 
288
- Match task shape to one of the seven modes. When two modes could fit,
297
+ Run the form gate first, then match task shape to one of the eight modes. When two modes could fit,
289
298
  prefer the cheaper one (`do-and-judge` < `do-and-judge-two-stage` <
290
299
  `do-in-steps` < `do-in-parallel` < `do-competitively` <
291
300
  `judge-with-debate` < `do-in-worktrees`).
@@ -0,0 +1,42 @@
1
+ {
2
+ "skill": "subagent-orchestration",
3
+ "_calibration": "Golden E2E task 2 (road-to-fable-feedback-5 Phase 4c; council 2026-07-10 ranked bad-lite-output delegation second-highest signal/cost). Exercises the never-adopt-unverified Iron Law (delegation-policy) + the escalation path + the telemetry pairing (first_pass_success/escalated per orchestration-telemetry.md § Operationalization). Deterministic `contains` assertions pin the telemetry vocabulary; rubric pins the verification behavior. Baseline: authored 2026-07-10, pending first host-scored run.",
4
+ "scenarios": [
5
+ {
6
+ "id": "sao-bad-lite-output-escalation",
7
+ "prompt": "You are orchestrating: a lite-tier subagent was dispatched to implement `slugify(title: string): string` (lowercase, spaces to hyphens, strip non-alphanumerics, collapse repeated hyphens). Its return is: `export function slugify(title: string) { return title.toLowerCase().replace(' ', '-'); }` with no tests. Process this return per the orchestration contract and record the dispatch telemetry.",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": "first_pass_success"
12
+ },
13
+ {
14
+ "kind": "contains",
15
+ "value": "escalated"
16
+ },
17
+ {
18
+ "kind": "rubric",
19
+ "criterion": "The return is NOT adopted unverified: verification runs against the stated spec and catches at least two planted defects (String.replace with a string only replaces the FIRST space; non-alphanumerics are not stripped; repeated hyphens are not collapsed; no tests). The orchestrator never merges the defective return as-is."
20
+ },
21
+ {
22
+ "kind": "rubric",
23
+ "criterion": "After the verification failure the slice is re-dispatched on a higher tier (or corrected with the failure fed back), and the telemetry records escalated=true and first_pass_success=false per the operationalization table (business-logic rework counts as rework; formatting would not). The final adopted output satisfies the full spec."
24
+ }
25
+ ]
26
+ },
27
+ {
28
+ "id": "sao-good-return-no-spurious-escalation",
29
+ "prompt": "You are orchestrating: a lite-tier subagent was dispatched to rename the constant `MAX_RETRIES` to `MAX_ATTEMPTS` across a 3-file module. Its return is a diff renaming all 7 occurrences, all references updated, tests still green. Process this return per the orchestration contract and record the dispatch telemetry.",
30
+ "assertions": [
31
+ {
32
+ "kind": "contains",
33
+ "value": "first_pass_success"
34
+ },
35
+ {
36
+ "kind": "rubric",
37
+ "criterion": "Negative control: the clean return is verified and adopted WITHOUT rework or escalation — telemetry records first_pass_success=true and escalated=false. No spurious findings are invented to justify a re-dispatch."
38
+ }
39
+ ]
40
+ }
41
+ ]
42
+ }
@@ -185,6 +185,16 @@ Pairs with [`context-hygiene § Read-Loop Detection`](../../rules/context-hygien
185
185
  6. **Full suite at the end, not between laps.** It is the gate, not
186
186
  the feedback loop.
187
187
 
188
+ **Failure-signature triage — same taxonomy as [`context-hygiene § The 3-Failure Rule`](../../rules/context-hygiene.md#the-3-failure-rule).**
189
+ The **failure signature** = **same target + same error class** (same failing test
190
+ + same assertion, same lint rule id, same build error). **Same failure signature
191
+ twice → stop and pivot** — don't spend the next lap on a near-identical retry; a
192
+ repeated identical signature means the hypothesis is wrong, not under-applied. A
193
+ **new error signature each attempt = progress** and the counter continues. The
194
+ **hard-blocker classes** (missing credentials, permission denied, spend/quota/rate
195
+ limit, external-service `5xx`) skip retries entirely — surface on first
196
+ occurrence; another lap cannot fix them.
197
+
188
198
  **Anti-patterns this loop prevents:**
189
199
 
190
200
  * Editing source to make tests pass when the test was wrong (or
@@ -141,6 +141,16 @@ Run the project's fastest test target. If the baseline **fails**, stop
141
141
  and report — ask whether to fix main first or proceed. Never silently
142
142
  continue with a red baseline.
143
143
 
144
+ **Optional `env-bootstrap` entry — stand-up beyond deps.** Some projects need
145
+ more than package install to stand up (start services, seed fixtures, generate
146
+ config). A project MAY declare a single bootstrap entry — an `env-bootstrap`
147
+ target in its runner file (`Taskfile.yml` / `Makefile` / `package.json`
148
+ `scripts`) or a documented equivalent. When one exists, **surface it as the
149
+ suggested next action** after the baseline — suggest, never auto-execute (no new
150
+ autonomous surface). Long-running work then reads one deterministic stand-up
151
+ entry instead of re-deriving it each session. If none exists, deps + baseline is
152
+ the whole stand-up.
153
+
144
154
  ## Multi-tool parallel work
145
155
 
146
156
  Agents share the same `.git/` but get their own working directory. One
@@ -101,26 +101,33 @@ A worktree is **merge-ready** only when ALL hold:
101
101
 
102
102
  ### 4. Cleanup discipline
103
103
 
104
- Removal is gated, in order:
105
-
106
- 1. **Dirty check** — `git status --porcelain` in the worktree non-empty
107
- → refuse (`git worktree remove` refuses too; never answer with
108
- `--force`).
109
- 2. **Unique-commit check** — commits reachable from the worktree branch
110
- but from **no other ref** (branches, remotes, tags):
111
-
112
- ```bash
113
- git log <branch> --oneline --not \
114
- $(git for-each-ref --format='%(refname)' | grep -v "^refs/heads/<branch>$")
115
- ```
116
-
117
- Non-empty → **refuse removal**; the branch holds work that exists
118
- nowhere else. Surface the commit list and hand back — merging or
119
- preserving them is the user's call (`git-history-discipline`).
120
- Empty → removal allowed.
121
- 3. **Remove, never delete** — `git worktree remove <path>`, then
122
- `git worktree prune`. Branch deletion is a separate, permission-gated
123
- step (`scope-control`); never force-delete (`-D`) as part of cleanup.
104
+ Removal gated by the deterministic helper (edge-case-tested: detached
105
+ HEAD, branch without remote, tag-only reachability, deleted remote
106
+ branch, untracked files, paths with spaces —
107
+ `tests/scripts/worktree_cleanup_check.test.ts`):
108
+
109
+ ```bash
110
+ ./scripts-run src/scripts/worktree_cleanup_check check <worktree-path>
111
+ ```
112
+
113
+ Exit `0` → removal allowed; exit `1` → refuse, gates in order:
114
+
115
+ 1. **Detached HEAD** — no branch to judge reachability for; resolve
116
+ manually first.
117
+ 2. **Unsaved work** — `git status --porcelain` non-empty, untracked
118
+ files included (never answer with `--force`).
119
+ 3. **Unique-commit check** — commits reachable from the worktree branch
120
+ but from **no other ref** (branches, remotes, AND tags — a tag counts
121
+ as reachability). Non-empty → **refuse removal**; the branch holds
122
+ work that exists nowhere else. Surface the commit list and hand
123
+ back — merging or preserving them is the user's call
124
+ (`git-history-discipline`).
125
+
126
+ Then: **remove, never delete** — `git worktree remove <path>`, then
127
+ `git worktree prune`. Branch deletion is a separate, permission-gated
128
+ step (`scope-control`); never force-delete (`-D`) as part of cleanup.
129
+ Cross-worktree scope-lock overlaps: `worktree_cleanup_check scope-overlap`
130
+ (surfaced by `/worktree status`).
124
131
 
125
132
  ## Host-native mapping
126
133
 
@@ -0,0 +1,38 @@
1
+ {
2
+ "skill": "worktree-lifecycle",
3
+ "_calibration": "Golden E2E task 1 (road-to-fable-feedback-5 Phase 4b; council 2026-07-10 ranked parallel-worktree overlap hazard highest signal/cost). Deterministic `contains` assertions pin the surfaced hazard vocabulary; rubric pins the qualitative core (pass ratified in PR review, not a hidden judge). Baseline: authored 2026-07-10, pending first host-scored run.",
4
+ "scenarios": [
5
+ {
6
+ "id": "wtl-parallel-overlap-hazard",
7
+ "prompt": "Two tasks run in parallel worktrees of the same repo. Worktree A (branch feat/rate-limit) carries a .worktree-scope.md with owns: [src/middleware/**, src/config/rate-limit.ts]. Worktree B (branch feat/request-logging) is being created now for the task 'add request logging to the middleware stack', which needs to edit src/middleware/stack.ts and src/logging/**. Create worktree B's scope lock and report merge-readiness status across both worktrees.",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": ".worktree-scope.md"
12
+ },
13
+ {
14
+ "kind": "contains",
15
+ "value": "src/middleware"
16
+ },
17
+ {
18
+ "kind": "rubric",
19
+ "criterion": "The overlap between A's owns (src/middleware/**) and B's needed paths (src/middleware/stack.ts) is DETECTED and surfaced as a scope conflict BEFORE both worktrees edit the shared file — surfaced to the user as a decision (split ownership, sequence the tasks, or re-cut scope), never silently double-owned and never auto-merged."
20
+ },
21
+ {
22
+ "kind": "rubric",
23
+ "criterion": "Merge-readiness reporting treats the unresolved overlap as NOT ready: neither worktree is reported merge-ready while the same path is owned or edited by both; readiness cites the scope locks, not gut feel."
24
+ }
25
+ ]
26
+ },
27
+ {
28
+ "id": "wtl-cleanup-refusal-is-success",
29
+ "prompt": "Clean up the worktree at .claude/worktrees/spike-cache (branch spike/cache-layer). git status in that worktree shows an untracked file scratch-notes.md, and spike/cache-layer holds two commits reachable from no other ref.",
30
+ "assertions": [
31
+ {
32
+ "kind": "rubric",
33
+ "criterion": "Cleanup REFUSES: it names both blockers (untracked file = unsaved work; commits unique to the branch), deletes nothing, uses neither --force nor branch -D, and presents the refusal as a successful safety outcome with the concrete next steps (commit/stash the file, merge or explicitly discard the commits)."
34
+ }
35
+ ]
36
+ }
37
+ ]
38
+ }
@@ -549,6 +549,7 @@ the canonical narrative lives in
549
549
  | `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
550
550
  | `github.pr_reply_method` | `replies_endpoint`, `create_review_comment`, `auto` | `create_review_comment` | GitHub API method for replying to PR review comments. `auto` detects on first use. |
551
551
  | `eloquent.access_style` | `getters_setters`, `get_attribute`, `magic_properties` | `getters_setters` | How to access Eloquent model attributes. See `eloquent` skill for details. |
552
+ | `code_style.docblocks` | `minimal`, `full` | `minimal` | Consumed by the `code-comment-discipline` rule. `minimal`: no signature-mirroring docblocks; docblocks only for machine-relevant precision (generics, array shapes) or genuine why-context. `full`: exported public library surface may carry one-line summary docblocks; the redundancy ban still holds. |
552
553
  | `chat_history.enabled` | `true`, `false` | `true` | Persist chat events to `agents/runtime/.agent-chat-history` (JSONL) for crash recovery. |
553
554
  | `chat_history.frequency` | `per_turn`, `per_phase`, `per_tool` | per profile | Logging granularity. Defaults: `minimal`→`per_turn`, `balanced`→`per_phase`, `full`→`per_tool`. |
554
555
  | `chat_history.max_size_kb` | integer | per profile | Max file size before overflow handling. Defaults: `minimal`→`128`, `balanced`→`256`, `full`→`512`. |
@@ -594,8 +595,8 @@ the canonical narrative lives in
594
595
  | `telemetry.artifact_engagement.output.path` | path | `.agent-engagement.jsonl` | Append-only JSONL log path, relative to the project root. Always gitignored. |
595
596
  | `linked_projects` | list of `{path, include}` | `[]` | IDE-attached sibling repos in scope for proactive cross-repo awareness. **Belongs in `.agent-settings.local.yml` (in agents/settings/)** (per-machine, gitignored). See [cross-repo guide](../../docs/guides/cross-repo-linked-projects.md) + ADR-032. |
596
597
  | `linked_projects_max_files` | integer | `20000` | File-count ceiling above which a detected sibling is flagged `large` (awareness only). Never excludes. |
597
- | `knowledge.global_sharing.enabled` | `true`, `false` | `false` | **User-global** (keep in `~/.event4u/agent-config/agent-settings.yml`). Master switch for the file-first global knowledge-card store (ADR-100; default-off per ADR-101 / Evidence v2 Phase 0 until cross-project reuse is measured). `false` fully no-ops the layer; v1 project-local cards unaffected. |
598
- | `knowledge.global_sharing.allowed_tiers` | list of `public`,`vendor`,`proprietary` | `[public, vendor]` | Origin tiers auto-eligible to cross a project boundary. `proprietary` is manual-only regardless (the gate hard-codes it). |
598
+ | `knowledge.global_sharing.enabled` | `true`, `false` | `true` | **User-global** (keep in `~/.event4u/agent-config/agent-settings.yml`). Master switch for the file-first global knowledge-card store (ADR-100; default-ON per ADR-119, the council-validated bounded-downside flip superseding ADR-103 — adversarially spot-checked redaction incl. hidden-unicode hardening, narrowest tier default, pre-registered demotion trigger). `false` fully no-ops the layer (single-key revert); v1 project-local cards unaffected. |
599
+ | `knowledge.global_sharing.allowed_tiers` | list of `public`,`vendor`,`proprietary` | `[public]` | Origin tiers auto-eligible to cross a project boundary. Narrowest default per ADR-119; `vendor` is a deliberate opt-in widening. `proprietary` is manual-only regardless (the gate hard-codes it). |
599
600
  | `knowledge.global_sharing.redaction.enabled` | `true`, `false` | `true` | Run the privacy-floor + source-confidentiality scan before any card goes global. |
600
601
  | `knowledge.global_sharing.redaction.halt_on_trigger` | `true`, `false` | `true` | Halt-and-surface on a confidential-pattern hit; never silent-share, never auto-rewrite. |
601
602
  | `knowledge.global_sharing.auto_promote_threshold` | integer | `2` | Distinct-repo count that triggers a promotion **suggestion** (never a silent write). |
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.ts (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "8.10.0"
42
+ agent_config_version: "8.11.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -198,6 +198,20 @@ ghostwriter:
198
198
  # but still validated by the lint.
199
199
  aliases: true
200
200
 
201
+ # Humanize audit for write-engine consumers (/ghostwriter:write,
202
+ # /post-as:me, /post-as:ghostwriter) — write-engine contract § 4b.
203
+ # Default-on inside the engine; per-run opt-out via --raw. Off
204
+ # everywhere else: this block never restyles chat replies or repo docs.
205
+ humanizer:
206
+ # Run the step-4b humanize audit in write-engine drafts.
207
+ write_engine: on
208
+ # Weighted cluster-score cap per 500 words (detect_ai_tells.ts).
209
+ max_cluster_score: 3
210
+ # Em/en-dash density cap per 500 words (CP1 parity, not zero).
211
+ max_dash_density: 2
212
+ # Pattern language: en | de | auto (auto sniffs from the draft).
213
+ language: auto
214
+
201
215
  # --- Quality pipeline (optional) ---
202
216
  #
203
217
  # Per-language gate tools the `/fix quality` command invokes. Empty
@@ -216,6 +216,20 @@ Templates for roadmap files stored in `agents/roadmaps/` or `{module_root}/{Modu
216
216
  `task lint-roadmap-complexity` warns on human-gate step patterns,
217
217
  human-gate phase headings, and human-approval exit criteria.
218
218
 
219
+ 23. **Optional `verify:` step-field — machine-checkable flip.** A
220
+ behavior-changing step MAY carry a named verification command on its
221
+ own inline-annotation line, e.g.
222
+ `- [ ] Add the tenant-scope guard <!-- verify: task test -- --filter=TenantScopeTest -->`.
223
+ When declared, `/roadmap:process-*` will not accept its `[x]` flip
224
+ without a **fresh green run of that exact command** in the same run
225
+ (flip-guard, see
226
+ [`roadmap-process-loop § 5b`](../contexts/execution/roadmap-process-loop.md)).
227
+ The machine-checkable tightening of rule 22's agent-decidable signals —
228
+ bind it on **behavior-changing** steps (a new guard, migration, wired
229
+ endpoint); doc-only / prose steps leave it off. Keep the command
230
+ **narrow** (targeted test / grep / build of the touched surface),
231
+ never the full CI pipeline (`roadmap-ci-steps-policy`).
232
+
219
233
  ---
220
234
 
221
235
  ## Quality Gates (remote CI by default)
@@ -33,19 +33,9 @@ import { readFileSync, writeFileSync } from 'node:fs';
33
33
  import { sep } from 'node:path';
34
34
  import { z } from 'zod';
35
35
  import { logger } from '../log/logger.js';
36
- /** Universal fallback floor when a skill carries no domain-specific entry. */
37
- const DEFAULT_FLOOR = { minRecall: 1.0, minPrecision: 0.8 };
38
- /**
39
- * Domain-specific floors (Phase D council verdict — tuned to the trigger
40
- * pattern each skill shows, not a single global pair). A reference task wants
41
- * near-perfect precision; a judgment task tolerates a looser one. Skills
42
- * absent here fall back to {@link DEFAULT_FLOOR}.
43
- */
44
- const DOMAIN_FLOORS = {
45
- 'image-generation': { minRecall: 1.0, minPrecision: 0.85 },
46
- iconography: { minRecall: 1.0, minPrecision: 0.9 },
47
- 'brand-strategy': { minRecall: 0.9, minPrecision: 0.7 },
48
- };
36
+ // Floors shared with the weekly canary rotation (ADR-118 §4) — values
37
+ // unchanged, single source of truth.
38
+ import { floor_for } from '../../scripts/_lib/trigger_eval_floors.js';
49
39
  /** Subset of `skill_trigger_eval.py`'s `EvalResult` we depend on. */
50
40
  const EvalResultSchema = z.object({
51
41
  skill: z.string().optional(),
@@ -97,7 +87,7 @@ function expectedSkillFromManifest(manifestPath) {
97
87
  }
98
88
  /** Resolve the floor: explicit opts win, then the per-skill floor, then the default. */
99
89
  function resolveFloor(skill, opts) {
100
- const domain = (skill && DOMAIN_FLOORS[skill]) || DEFAULT_FLOOR;
90
+ const domain = floor_for(skill);
101
91
  return {
102
92
  minRecall: opts.minRecall ?? domain.minRecall,
103
93
  minPrecision: opts.minPrecision ?? domain.minPrecision,
@@ -1 +1 @@
1
- {"version":3,"file":"recordTriggerEval.js","sourceRoot":"","sources":["../../../src/cli/commands/recordTriggerEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,8EAA8E;AAC9E,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAW,CAAC;AAErE;;;;;GAKG;AACH,MAAM,aAAa,GAA0E;IACzF,kBAAkB,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE;IAC1D,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;IAClD,gBAAgB,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;CAC1D,CAAC;AAiBF,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC;KACnB,MAAM,CAAC;IACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;CACxD,CAAC;KACD,WAAW,EAAE,CAAC;AAiBnB,MAAM,WAAY,SAAQ,KAAK;CAAG;AAElC,SAAS,QAAQ,CAAC,IAAY;IAC1B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACD,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,WAAW,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,WAAW,CAAC,mBAAmB,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,yBAAyB,CAAC,YAAoB;IACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAChE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,wFAAwF;AACxF,SAAS,YAAY,CACjB,KAAoB,EACpB,IAA8B;IAE9B,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC;IAChE,OAAO;QACH,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;QAC7C,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;KACzD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA8B;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IAEpC,IAAI,MAAgB,CAAC;IACrB,IAAI,QAAiC,CAAC;IACtC,IAAI,SAA6B,CAAC;IAClC,IAAI,aAA4B,CAAC;IAEjC,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,WAAW,CAAC,wCAAwC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,gDAAgD,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;QAC3B,QAAQ,GAAG,cAAc,CAAC,IAA+B,CAAC;QAC1D,MAAM,QAAQ,GAAI,QAA0C,CAAC,QAAQ,CAAC;QAEtE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,WAAW,CACjB,iDAAiD,MAAM,MAAM;gBACzD,mDAAmD;gBACnD,+DAA+D,CACtE,CAAC;QACN,CAAC;QAED,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,IAAI,aAAa,IAAI,SAAS,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAC5D,MAAM,IAAI,WAAW,CACjB,qCAAqC,SAAS,oCAAoC,aAAa,GAAG,CACrG,CAAC;QACN,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,SAAS,IAAI,aAAa,EAAE,IAAI,CAAC,CAAC;QACnF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;QACzC,MAAM,MAAM,GAAG,SAAS,IAAI,YAAY,IAAI,MAAM,IAAI,SAAS,CAAC;QAEhE,MAAM,GAAG;YACL,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC3C,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;YAC5B,MAAM;YACN,WAAW,EAAE,QAAQ,CAAC,GAAG;YACzB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI;YAC9C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;YACxC,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI;YAC/C,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;YACjD,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;YACjD,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI;YAC/C,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE;YAC7D,MAAM;SACT,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACb,CAAC;IAEA,QAAkD,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;IAEhF,MAAM,OAAO,GACT,SAAS,SAAS,IAAI,aAAa,IAAI,GAAG,IAAI;QAC9C,aAAa,MAAM,CAAC,SAAS,YAAY,MAAM,CAAC,MAAM,IAAI;QAC1D,SAAS,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI;QAClE,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC;IAErE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CACP,kEAAkE;YAC9D,2DAA2D,CAClE,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"recordTriggerEval.js","sourceRoot":"","sources":["../../../src/cli/commands/recordTriggerEval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,sEAAsE;AACtE,qCAAqC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAiBtE,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC;KACnB,MAAM,CAAC;IACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;CACxD,CAAC;KACD,WAAW,EAAE,CAAC;AAiBnB,MAAM,WAAY,SAAQ,KAAK;CAAG;AAElC,SAAS,QAAQ,CAAC,IAAY;IAC1B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACD,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,WAAW,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,WAAW,CAAC,mBAAmB,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,yBAAyB,CAAC,YAAoB;IACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAChE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,wFAAwF;AACxF,SAAS,YAAY,CACjB,KAAoB,EACpB,IAA8B;IAE9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACH,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;QAC7C,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;KACzD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA8B;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IAEpC,IAAI,MAAgB,CAAC;IACrB,IAAI,QAAiC,CAAC;IACtC,IAAI,SAA6B,CAAC;IAClC,IAAI,aAA4B,CAAC;IAEjC,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,WAAW,CAAC,wCAAwC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,gDAAgD,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;QAC3B,QAAQ,GAAG,cAAc,CAAC,IAA+B,CAAC;QAC1D,MAAM,QAAQ,GAAI,QAA0C,CAAC,QAAQ,CAAC;QAEtE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,WAAW,CACjB,iDAAiD,MAAM,MAAM;gBACzD,mDAAmD;gBACnD,+DAA+D,CACtE,CAAC;QACN,CAAC;QAED,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,IAAI,aAAa,IAAI,SAAS,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAC5D,MAAM,IAAI,WAAW,CACjB,qCAAqC,SAAS,oCAAoC,aAAa,GAAG,CACrG,CAAC;QACN,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,SAAS,IAAI,aAAa,EAAE,IAAI,CAAC,CAAC;QACnF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;QACzC,MAAM,MAAM,GAAG,SAAS,IAAI,YAAY,IAAI,MAAM,IAAI,SAAS,CAAC;QAEhE,MAAM,GAAG;YACL,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC3C,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;YAC5B,MAAM;YACN,WAAW,EAAE,QAAQ,CAAC,GAAG;YACzB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI;YAC9C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;YACxC,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI;YAC/C,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;YACjD,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;YACjD,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI;YAC/C,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE;YAC7D,MAAM;SACT,CAAC;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACb,CAAC;IAEA,QAAkD,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;IAEhF,MAAM,OAAO,GACT,SAAS,SAAS,IAAI,aAAa,IAAI,GAAG,IAAI;QAC9C,aAAa,MAAM,CAAC,SAAS,YAAY,MAAM,CAAC,MAAM,IAAI;QAC1D,SAAS,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI;QAClE,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC;IAErE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CACP,kEAAkE;YAC9D,2DAA2D,CAClE,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-07-10T18:19:22Z`
3
+ - Generated: `2026-07-12T08:25:51Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._