@event4u/agent-config 11.0.0 → 12.1.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 (312) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +173 -229
  3. package/agents/templates/.ai-council.yml.example +46 -3
  4. package/dist/agent-src/commands/agent-handoff.md +0 -1
  5. package/dist/agent-src/commands/agent-status.md +0 -1
  6. package/dist/agent-src/commands/agents/audit.md +0 -1
  7. package/dist/agent-src/commands/agents/init.md +0 -1
  8. package/dist/agent-src/commands/agents/optimize.md +0 -1
  9. package/dist/agent-src/commands/agents/user/accept.md +0 -1
  10. package/dist/agent-src/commands/agents/user/delete.md +0 -1
  11. package/dist/agent-src/commands/agents/user/init.md +0 -1
  12. package/dist/agent-src/commands/agents/user/review.md +0 -1
  13. package/dist/agent-src/commands/agents/user/show.md +0 -1
  14. package/dist/agent-src/commands/agents/user/update.md +0 -1
  15. package/dist/agent-src/commands/agents/user.md +0 -1
  16. package/dist/agent-src/commands/agents.md +0 -1
  17. package/dist/agent-src/commands/analytics/prune.md +0 -1
  18. package/dist/agent-src/commands/analytics/show.md +0 -1
  19. package/dist/agent-src/commands/analytics.md +0 -1
  20. package/dist/agent-src/commands/analyze/conformance.md +0 -1
  21. package/dist/agent-src/commands/analyze/decision.md +0 -1
  22. package/dist/agent-src/commands/analyze/inbox.md +0 -1
  23. package/dist/agent-src/commands/analyze/incident.md +0 -1
  24. package/dist/agent-src/commands/analyze/near-miss.md +0 -1
  25. package/dist/agent-src/commands/analyze/postmortem.md +0 -1
  26. package/dist/agent-src/commands/analyze/premortem.md +0 -1
  27. package/dist/agent-src/commands/analyze/reference-repo.md +0 -1
  28. package/dist/agent-src/commands/analyze.md +0 -1
  29. package/dist/agent-src/commands/brand/identity.md +0 -1
  30. package/dist/agent-src/commands/brand/review.md +0 -1
  31. package/dist/agent-src/commands/brand/strategy.md +0 -1
  32. package/dist/agent-src/commands/brand/tokens.md +0 -1
  33. package/dist/agent-src/commands/brand/voice.md +0 -1
  34. package/dist/agent-src/commands/brand.md +0 -1
  35. package/dist/agent-src/commands/bug/fix.md +0 -1
  36. package/dist/agent-src/commands/bug/investigate.md +0 -1
  37. package/dist/agent-src/commands/bug.md +0 -1
  38. package/dist/agent-src/commands/challenge-me/vision.md +0 -1
  39. package/dist/agent-src/commands/challenge-me/with-docs.md +0 -1
  40. package/dist/agent-src/commands/challenge-me.md +0 -1
  41. package/dist/agent-src/commands/chat-history/import.md +0 -1
  42. package/dist/agent-src/commands/chat-history.md +0 -1
  43. package/dist/agent-src/commands/check-current-md.md +0 -1
  44. package/dist/agent-src/commands/commit/in-chunks.md +0 -1
  45. package/dist/agent-src/commands/commit.md +0 -1
  46. package/dist/agent-src/commands/condense.md +0 -1
  47. package/dist/agent-src/commands/context/create.md +0 -1
  48. package/dist/agent-src/commands/context/refactor.md +0 -1
  49. package/dist/agent-src/commands/context.md +0 -1
  50. package/dist/agent-src/commands/contribution-precheck.md +0 -1
  51. package/dist/agent-src/commands/cost/profile.md +0 -1
  52. package/dist/agent-src/commands/cost/report.md +0 -1
  53. package/dist/agent-src/commands/cost.md +0 -1
  54. package/dist/agent-src/commands/council/analysis.md +0 -1
  55. package/dist/agent-src/commands/council/debate.md +0 -1
  56. package/dist/agent-src/commands/council/default.md +0 -1
  57. package/dist/agent-src/commands/council/design.md +0 -1
  58. package/dist/agent-src/commands/council/optimize.md +0 -1
  59. package/dist/agent-src/commands/council/pr.md +0 -1
  60. package/dist/agent-src/commands/council.md +0 -1
  61. package/dist/agent-src/commands/design-system/capture.md +0 -1
  62. package/dist/agent-src/commands/design-system/generate.md +0 -1
  63. package/dist/agent-src/commands/design-system/import.md +0 -1
  64. package/dist/agent-src/commands/design-system.md +0 -1
  65. package/dist/agent-src/commands/estimate-ticket.md +0 -1
  66. package/dist/agent-src/commands/explain-run.md +0 -1
  67. package/dist/agent-src/commands/feature/dev.md +0 -1
  68. package/dist/agent-src/commands/feature/explore.md +0 -1
  69. package/dist/agent-src/commands/feature/plan.md +0 -1
  70. package/dist/agent-src/commands/feature/refactor.md +0 -1
  71. package/dist/agent-src/commands/feature/roadmap.md +0 -1
  72. package/dist/agent-src/commands/feature.md +0 -1
  73. package/dist/agent-src/commands/fix/ci.md +0 -1
  74. package/dist/agent-src/commands/fix/comments.md +0 -1
  75. package/dist/agent-src/commands/fix/portability.md +0 -1
  76. package/dist/agent-src/commands/fix/pr-comments-loop.md +0 -1
  77. package/dist/agent-src/commands/fix/pr-comments.md +0 -1
  78. package/dist/agent-src/commands/fix/quality.md +0 -1
  79. package/dist/agent-src/commands/fix/refs.md +0 -1
  80. package/dist/agent-src/commands/fix/route.md +0 -1
  81. package/dist/agent-src/commands/fix/seeder.md +0 -1
  82. package/dist/agent-src/commands/fix.md +0 -1
  83. package/dist/agent-src/commands/ghostwriter/delete.md +0 -1
  84. package/dist/agent-src/commands/ghostwriter/fetch.md +0 -1
  85. package/dist/agent-src/commands/ghostwriter/list.md +0 -1
  86. package/dist/agent-src/commands/ghostwriter/show.md +0 -1
  87. package/dist/agent-src/commands/ghostwriter/write.md +0 -1
  88. package/dist/agent-src/commands/ghostwriter.md +0 -1
  89. package/dist/agent-src/commands/grill-me.md +0 -1
  90. package/dist/agent-src/commands/humanize.md +0 -1
  91. package/dist/agent-src/commands/image/analyse.md +0 -1
  92. package/dist/agent-src/commands/image/create.md +0 -1
  93. package/dist/agent-src/commands/image/verify.md +0 -1
  94. package/dist/agent-src/commands/image.md +0 -1
  95. package/dist/agent-src/commands/implement-ticket.md +0 -1
  96. package/dist/agent-src/commands/jira-ticket.md +0 -1
  97. package/dist/agent-src/commands/judge/on-diff.md +0 -1
  98. package/dist/agent-src/commands/judge/solo.md +0 -1
  99. package/dist/agent-src/commands/judge/steps.md +0 -1
  100. package/dist/agent-src/commands/judge.md +0 -1
  101. package/dist/agent-src/commands/knowledge/cross-repo.md +0 -1
  102. package/dist/agent-src/commands/knowledge/forget.md +0 -1
  103. package/dist/agent-src/commands/knowledge/ingest.md +0 -1
  104. package/dist/agent-src/commands/knowledge/list.md +0 -1
  105. package/dist/agent-src/commands/knowledge.md +0 -1
  106. package/dist/agent-src/commands/memory/add.md +0 -1
  107. package/dist/agent-src/commands/memory/learn-low-impact.md +0 -1
  108. package/dist/agent-src/commands/memory/load.md +0 -1
  109. package/dist/agent-src/commands/memory/mine-session.md +0 -1
  110. package/dist/agent-src/commands/memory/promote.md +0 -1
  111. package/dist/agent-src/commands/memory/propose.md +0 -1
  112. package/dist/agent-src/commands/memory.md +0 -1
  113. package/dist/agent-src/commands/mission/upgrade.md +0 -1
  114. package/dist/agent-src/commands/mode.md +0 -1
  115. package/dist/agent-src/commands/module/create.md +0 -1
  116. package/dist/agent-src/commands/module/explore.md +0 -1
  117. package/dist/agent-src/commands/module.md +0 -1
  118. package/dist/agent-src/commands/optimize/agents-dir.md +0 -1
  119. package/dist/agent-src/commands/optimize/augmentignore.md +0 -1
  120. package/dist/agent-src/commands/optimize/deep.md +0 -1
  121. package/dist/agent-src/commands/optimize/project.md +0 -1
  122. package/dist/agent-src/commands/optimize/prompt.md +0 -1
  123. package/dist/agent-src/commands/optimize/rtk.md +0 -1
  124. package/dist/agent-src/commands/optimize/skills.md +0 -1
  125. package/dist/agent-src/commands/optimize.md +0 -1
  126. package/dist/agent-src/commands/orchestrate.md +0 -1
  127. package/dist/agent-src/commands/override/create.md +0 -1
  128. package/dist/agent-src/commands/override/manage.md +0 -1
  129. package/dist/agent-src/commands/override.md +0 -1
  130. package/dist/agent-src/commands/package/reset.md +0 -1
  131. package/dist/agent-src/commands/package/test.md +0 -1
  132. package/dist/agent-src/commands/package.md +0 -1
  133. package/dist/agent-src/commands/post-as/ghostwriter.md +0 -1
  134. package/dist/agent-src/commands/post-as/me.md +0 -1
  135. package/dist/agent-src/commands/post-as.md +0 -1
  136. package/dist/agent-src/commands/pr/create/description-only.md +0 -1
  137. package/dist/agent-src/commands/pr/create.md +23 -9
  138. package/dist/agent-src/commands/prediction-pool.md +0 -1
  139. package/dist/agent-src/commands/prepare-for-review.md +0 -1
  140. package/dist/agent-src/commands/profile/activate.md +0 -1
  141. package/dist/agent-src/commands/profile/deactivate.md +0 -1
  142. package/dist/agent-src/commands/profile/show.md +0 -1
  143. package/dist/agent-src/commands/profile.md +0 -1
  144. package/dist/agent-src/commands/project/analyze.md +0 -1
  145. package/dist/agent-src/commands/project/health.md +0 -1
  146. package/dist/agent-src/commands/project.md +0 -1
  147. package/dist/agent-src/commands/refine-ticket.md +0 -1
  148. package/dist/agent-src/commands/research/deep.md +0 -1
  149. package/dist/agent-src/commands/research/report.md +0 -1
  150. package/dist/agent-src/commands/research.md +0 -1
  151. package/dist/agent-src/commands/review/changes.md +0 -1
  152. package/dist/agent-src/commands/review/routing.md +0 -1
  153. package/dist/agent-src/commands/review.md +0 -1
  154. package/dist/agent-src/commands/roadmap/ai-council.md +0 -1
  155. package/dist/agent-src/commands/roadmap/create.md +0 -1
  156. package/dist/agent-src/commands/roadmap/materialize.md +0 -1
  157. package/dist/agent-src/commands/roadmap/next.md +0 -1
  158. package/dist/agent-src/commands/roadmap/process-full.md +0 -1
  159. package/dist/agent-src/commands/roadmap/process-phase.md +0 -1
  160. package/dist/agent-src/commands/roadmap/process-step.md +0 -1
  161. package/dist/agent-src/commands/roadmap.md +0 -1
  162. package/dist/agent-src/commands/rule-compliance-audit.md +0 -1
  163. package/dist/agent-src/commands/security-audit-config.md +0 -1
  164. package/dist/agent-src/commands/skill/preview.md +0 -1
  165. package/dist/agent-src/commands/skill.md +0 -1
  166. package/dist/agent-src/commands/skills/discover.md +0 -1
  167. package/dist/agent-src/commands/skills.md +0 -1
  168. package/dist/agent-src/commands/sync/agent-settings.md +0 -1
  169. package/dist/agent-src/commands/sync/gitignore/fix.md +0 -1
  170. package/dist/agent-src/commands/sync/gitignore.md +0 -1
  171. package/dist/agent-src/commands/sync.md +0 -1
  172. package/dist/agent-src/commands/tdd/green.md +0 -1
  173. package/dist/agent-src/commands/tdd/red.md +0 -1
  174. package/dist/agent-src/commands/tdd/refactor.md +0 -1
  175. package/dist/agent-src/commands/tdd.md +0 -1
  176. package/dist/agent-src/commands/team/adversarial.md +0 -1
  177. package/dist/agent-src/commands/team/delegate.md +0 -1
  178. package/dist/agent-src/commands/team/review.md +0 -1
  179. package/dist/agent-src/commands/team/status.md +0 -1
  180. package/dist/agent-src/commands/team-knowledge/bootstrap.md +0 -1
  181. package/dist/agent-src/commands/team-knowledge/consolidate.md +0 -1
  182. package/dist/agent-src/commands/team-knowledge.md +0 -1
  183. package/dist/agent-src/commands/team.md +0 -1
  184. package/dist/agent-src/commands/tests/create.md +0 -1
  185. package/dist/agent-src/commands/tests/e2e-heal.md +0 -1
  186. package/dist/agent-src/commands/tests/e2e-plan.md +0 -1
  187. package/dist/agent-src/commands/tests/execute.md +0 -1
  188. package/dist/agent-src/commands/tests.md +0 -1
  189. package/dist/agent-src/commands/threat-model.md +0 -1
  190. package/dist/agent-src/commands/update-form-request-messages.md +0 -1
  191. package/dist/agent-src/commands/upstream-contribute.md +0 -1
  192. package/dist/agent-src/commands/video/from-script.md +0 -1
  193. package/dist/agent-src/commands/video/from-song.md +0 -1
  194. package/dist/agent-src/commands/video/scene.md +0 -1
  195. package/dist/agent-src/commands/video/stitch.md +0 -1
  196. package/dist/agent-src/commands/video/storyboard.md +0 -1
  197. package/dist/agent-src/commands/video.md +0 -1
  198. package/dist/agent-src/commands/work.md +0 -1
  199. package/dist/agent-src/commands/worktree/cleanup.md +0 -1
  200. package/dist/agent-src/commands/worktree/create.md +0 -1
  201. package/dist/agent-src/commands/worktree/status.md +0 -1
  202. package/dist/agent-src/commands/worktree/verify.md +0 -1
  203. package/dist/agent-src/commands/worktree.md +0 -1
  204. package/dist/agent-src/contexts/model-recommendations.md +6 -4
  205. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
  206. package/dist/agent-src/scripts/roadmap_gates.ts +30 -2
  207. package/dist/agent-src/scripts/update_roadmap_progress.ts +32 -1
  208. package/dist/agent-src/skills/docx-authoring/SKILL.md +1 -0
  209. package/dist/agent-src/skills/git-workflow/SKILL.md +9 -1
  210. package/dist/agent-src/skills/pdf-tools/SKILL.md +1 -0
  211. package/dist/agent-src/skills/roadmap-writing/SKILL.md +7 -7
  212. package/dist/agent-src/skills/skill-writing/SKILL.md +35 -0
  213. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  214. package/dist/agent-src/templates/roadmaps.md +41 -3
  215. package/dist/cli/commands/commands.candidates.test.js +1 -1
  216. package/dist/cli/commands/commands.candidates.test.js.map +1 -1
  217. package/dist/cli/commands/commands.js +9 -15
  218. package/dist/cli/commands/commands.js.map +1 -1
  219. package/dist/cli/commands/profiles.test.js +7 -7
  220. package/dist/cli/commands/profiles.test.js.map +1 -1
  221. package/dist/cli/discovery/loadManifest.js.map +1 -1
  222. package/dist/cli/main.js +2 -2
  223. package/dist/cli/main.js.map +1 -1
  224. package/dist/cli/registry.js +1 -0
  225. package/dist/cli/registry.js.map +1 -1
  226. package/dist/cli-delegate/chunk-K34QTSD5.js +3895 -0
  227. package/dist/cli-delegate/{chunk-L565YFXH.js → chunk-LKZ5DOYW.js} +557 -297
  228. package/dist/cli-delegate/{chunk-NN4KW4HZ.js → chunk-O52B4F5S.js} +123 -2338
  229. package/dist/cli-delegate/cmd_conformance.js +18 -6
  230. package/dist/cli-delegate/cmd_doctor.js +2 -2
  231. package/dist/cli-delegate/cmd_export.js +1 -1
  232. package/dist/cli-delegate/cmd_handoff.js +1 -1
  233. package/dist/cli-delegate/cmd_prune.js +1 -1
  234. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  235. package/dist/cli-delegate/cmd_sync.js +1 -1
  236. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  237. package/dist/cli-delegate/cmd_validate.js +1 -1
  238. package/dist/discovery/deprecation-report.md +1 -1
  239. package/dist/discovery/discovery-manifest.json +213 -412
  240. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  241. package/dist/discovery/discovery-manifest.summary.md +2 -2
  242. package/dist/discovery/dormancy-report.md +1 -1
  243. package/dist/discovery/orphan-report.md +1 -1
  244. package/dist/discovery/packs.json +3 -3
  245. package/dist/discovery/trust-report.md +1 -1
  246. package/dist/discovery/workspaces.json +3 -3
  247. package/dist/hooks/dispatch.js +2588 -1082
  248. package/dist/install/install.mjs +744 -482
  249. package/dist/mcp/registry-manifest.json +3 -3
  250. package/dist/mcp/server.json +2 -2
  251. package/dist/mcp/server.mjs +159 -15
  252. package/dist/router.json +1 -1
  253. package/dist/scripts/_lib/model_tier.js +9 -0
  254. package/dist/scripts/_lib/model_tier.js.map +1 -1
  255. package/dist/scripts/condense.js +50 -0
  256. package/dist/scripts/condense.js.map +1 -1
  257. package/docs/MIGRATION.md +21 -1
  258. package/docs/contracts/settings-classes.md +41 -0
  259. package/package.json +1 -1
  260. package/src/agent-src/scripts/roadmap_gates.ts +30 -2
  261. package/src/agent-src/scripts/update_roadmap_progress.ts +32 -1
  262. package/src/config/agent-settings.template.yml +34 -0
  263. package/src/config/evaluator-budgets.json +4 -4
  264. package/src/config/gate-coverage.yml +39 -9
  265. package/src/config/gate-violation-baselines.json +9 -3
  266. package/src/config/hook-token-budget.json +7 -1
  267. package/src/config/preamble-payload-budget.json +28 -0
  268. package/src/scripts/_dispatch.bash +52 -5
  269. package/src/scripts/_lib/git_common_dir.ts +173 -0
  270. package/src/scripts/_lib/model_tier.ts +9 -0
  271. package/src/scripts/_lib/release_highlights.ts +108 -7
  272. package/src/scripts/_lib/skill_catalogue.ts +862 -0
  273. package/src/scripts/ai_council/clients.ts +182 -3
  274. package/src/scripts/ai_council/config.ts +16 -1
  275. package/src/scripts/ai_council/low_impact.ts +14 -1
  276. package/src/scripts/ai_council/orchestrator.ts +14 -1
  277. package/src/scripts/ai_council/transport_resolver.ts +32 -2
  278. package/src/scripts/audit_command_surface.ts +21 -15
  279. package/src/scripts/build_catalog_index.ts +1 -1
  280. package/src/scripts/build_discovery_manifest.ts +30 -34
  281. package/src/scripts/capture_skill_catalogue.ts +185 -328
  282. package/src/scripts/check_branch_freshness.ts +217 -62
  283. package/src/scripts/check_release_published.ts +6 -2
  284. package/src/scripts/check_release_trunk_sync.ts +18 -2
  285. package/src/scripts/condense.ts +50 -1
  286. package/src/scripts/dispatch_r2_reviewer.ts +15 -5
  287. package/src/scripts/evidence_report.ts +15 -4
  288. package/src/scripts/gen_discovery_baseline.ts +3 -3
  289. package/src/scripts/hook_manifest.yaml +67 -13
  290. package/src/scripts/hooks/concern_registry.ts +2 -0
  291. package/src/scripts/hooks/orchestration_record_hook.ts +21 -0
  292. package/src/scripts/hooks/subagent_ledger_hook.ts +17 -4
  293. package/src/scripts/hooks/tool_result_bytes_hook.ts +219 -0
  294. package/src/scripts/hot_context_hook.ts +13 -1
  295. package/src/scripts/install.ts +129 -0
  296. package/src/scripts/janitor.ts +77 -2
  297. package/src/scripts/lint_command_tiers.ts +29 -75
  298. package/src/scripts/lint_originality.ts +101 -14
  299. package/src/scripts/lint_plan_risk_register.ts +22 -9
  300. package/src/scripts/lint_roadmap_blockers.ts +109 -6
  301. package/src/scripts/lint_scheduled_deprecations.ts +738 -0
  302. package/src/scripts/migration_status.ts +17 -1
  303. package/src/scripts/probe_review_binding_drift.ts +731 -0
  304. package/src/scripts/release.ts +95 -1
  305. package/src/scripts/schemas/command.schema.json +6 -11
  306. package/src/scripts/schemas/skill.schema.json +12 -2
  307. package/src/scripts/schemas/subagent.schema.json +2 -2
  308. package/src/scripts/session_eol_report.ts +81 -0
  309. package/src/scripts/skill_linter.ts +82 -2
  310. package/src/scripts/workspace_doctor.ts +464 -0
  311. package/src/scripts/worktree_cleanup_check.ts +113 -8
  312. package/dist/cli-delegate/chunk-AYKQGIBG.js +0 -1594
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "discovery": {
3
3
  "artefact_count": 607,
4
- "scanner_version": "1eaf68b6e9c9"
4
+ "scanner_version": "de0a22b4ac4c"
5
5
  },
6
- "generated_at": "2026-08-13",
6
+ "generated_at": "2026-08-16",
7
7
  "package": {
8
8
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including \"zero runtime daemon\".",
9
9
  "homepage": "https://event4u-app.github.io/agent-config",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "11.0.0"
12
+ "version": "12.1.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -9,12 +9,12 @@
9
9
  "transport": {
10
10
  "type": "stdio"
11
11
  },
12
- "version": "11.0.0"
12
+ "version": "12.1.0"
13
13
  }
14
14
  ],
15
15
  "repository": {
16
16
  "source": "github",
17
17
  "url": "https://github.com/event4u-app/agent-config"
18
18
  },
19
- "version": "11.0.0"
19
+ "version": "12.1.0"
20
20
  }
@@ -15262,7 +15262,7 @@ function lint_wing4_boundaries(text) {
15262
15262
  }
15263
15263
  return issues;
15264
15264
  }
15265
- function lint_execution_metadata(execution, frontmatter) {
15265
+ function lint_execution_metadata(execution, frontmatter, body = "") {
15266
15266
  const issues = [];
15267
15267
  const execType = execution.type;
15268
15268
  if (execType !== void 0) {
@@ -15332,6 +15332,15 @@ function lint_execution_metadata(execution, frontmatter) {
15332
15332
  new Issue("error", "invalid_safety_mode", `Invalid safety_mode '${String(safetyMode)}'; must be 'strict'`)
15333
15333
  );
15334
15334
  }
15335
+ if (safetyMode === "strict" && body !== "" && !STRICT_WRITE_GATE_PATTERNS.some((p) => p.test(body)) && !SKILL_REFERENCE_DEFERRAL_PATTERN.test(body)) {
15336
+ issues.push(
15337
+ new Issue(
15338
+ "warning",
15339
+ "strict_mode_missing_write_gate",
15340
+ "execution.safety_mode is 'strict' but the body names no precondition on the write path and defers no write-path steps to the skill's references/ \u2014 state the gate inline (propose-then-confirm, --dry-run) or defer it, per skill-writing \xA7 Action-reference split"
15341
+ )
15342
+ );
15343
+ }
15335
15344
  const timeout = execution.timeout_seconds;
15336
15345
  if (timeout !== void 0) {
15337
15346
  if (typeof timeout !== "number" || !Number.isInteger(timeout) || timeout <= 0) {
@@ -15506,9 +15515,18 @@ function lint_skill(p, text, absPath = null) {
15506
15515
  issues.push(new Issue("warning", "superseded_skill", msg));
15507
15516
  }
15508
15517
  }
15518
+ if (COMPATIBILITY_KEY_PATTERN.test(frontmatter) && !HARNESS_COMPAT_KEY_PATTERN.test(frontmatter)) {
15519
+ issues.push(
15520
+ new Issue(
15521
+ "warning",
15522
+ "deprecated_compatibility_field",
15523
+ "Frontmatter declares the deprecated free-text 'compatibility:' without the structured 'harness_compat:' that supersedes it \u2014 add harness_compat (see skill.schema.json and docs/MIGRATION.md \xA7 Scheduled deprecations); compatibility stays accepted until removal"
15524
+ )
15525
+ );
15526
+ }
15509
15527
  const execution = parseExecutionBlock(frontmatter);
15510
15528
  if (execution !== null) {
15511
- issues.push(...lint_execution_metadata(execution, frontmatter));
15529
+ issues.push(...lint_execution_metadata(execution, frontmatter, text.replace(FRONTMATTER_PATTERN, "")));
15512
15530
  }
15513
15531
  const tierMatch = TIER_PATTERN.exec(frontmatter);
15514
15532
  if (tierMatch && tierMatch[1] === "senior") {
@@ -18030,7 +18048,7 @@ function _isCliEntry7() {
18030
18048
  return false;
18031
18049
  }
18032
18050
  }
18033
- var _HERE4, REQUIRED_PERSONA_SECTIONS_CORE, REQUIRED_PERSONA_SECTIONS_SPECIALIST, VALID_PERSONA_TIERS, PERSONA_LINE_BUDGETS, REQUIRED_USERTYPE_SECTIONS, USERTYPE_LINE_BUDGET, VALID_PERSONA_WINGS, PERSONA_LINE_BUDGETS_BY_WING, REQUIRED_SKILL_SECTIONS, SECTION_ALIASES, RECOMMENDED_SKILL_SECTIONS, CONDITIONAL_SKILL_SECTIONS, RULE_BAD_SIGNS, FRUGALITY_WRITER_SKILLS, FRUGALITY_CHARTER_RELPATH, FRUGALITY_CHARTER_INDEX_RULES, VAGUE_VALIDATION_PATTERNS, TRIGGER_WARNING_PATTERNS, ORDERED_STEP_PATTERN, SECTION_PATTERN, FRONTMATTER_PATTERN, DESCRIPTION_PATTERN, STATUS_PATTERN, REPLACED_BY_PATTERN, TIER_PATTERN, TYPE_PATTERN, SOURCE_PATTERN, SENIOR_RELATED_SKILLS_PATTERN, SENIOR_RELATED_WHEN_PATTERN, SENIOR_RELATED_WHEN_NOT_PATTERN, SENIOR_PROACTIVE_PATTERN, SENIOR_OUTPUT_PATTERN, H1_PATTERN, DOUBLE_BLANK_PATTERN, VALID_RULE_TYPES, VALID_RULE_SOURCES, ROUTER_ALLOWED_TRIGGER_KEYS, KERNEL_RULE_IDS2, VALID_EXECUTION_TYPES, VALID_EXECUTION_HANDLERS, VALID_EXECUTION_SAFETY_MODES, EXTERNAL_EXECUTION_HANDLERS, RUNTIME_REQUIRES_BLOCK_PATTERN, VALID_EXECUTION_FIELDS, WING3_SPINE_SLOTS, CONTEXT_SPINE_INLINE_PATTERN, WING3_SAAS_URL_PATTERN, WING3_VENDOR_BLACKLIST, WING3_STACK_LOCKED_PATTERN, WING3_CHANNEL_TACTIC_PATTERN, WING4_SPINE_SLOTS, WING4_SAAS_URL_PATTERN, WING4_VENDOR_BLACKLIST, WING4_STAGE_AGNOSTIC_PATTERN, Issue, LintResult, _ROLE_CONTRACT_CANDIDATES, _ROLE_CONTRACT_SLUGS_CACHE, _ROLE_CONTRACT_REF_PATTERN, PROCEDURE_HEADING_PATTERN, COMMAND_FRONTMATTER_DELEGATION_KEYS, MD_LINK_PATTERN_G, NAME_PATTERN, DISABLE_MODEL_PATTERN, _INSPECT_VERB_PATTERN, last_changed_scope_reason, last_changed_base_diff_ok, _INTERACTION_NAME_PATTERNS, _INTERACTION_CONTENT_KEYWORDS, _EXEC_FILE_SIGNALS, _EXEC_CONTENT_SIGNALS, _TASK_TYPE_SIGNALS, _VERIFICATION_TOOLS, _FRUGALITY_STANDARDS_PATTERN, _FRUGALITY_CHARTER_LINK_PATTERN, _MD_LINK_PATTERN, _MALICE_CRED_EXFIL, _MALICE_REMOTE_EXEC, _MALICE_FORCE_PUSH, _MALICE_CHMOD_SECRETS, _MALICE_SHELL_INJECT, _MALICE_PATTERNS, _NAG_UPDATE_CHECK, _NAG_STAY_CURRENT, _NAG_SELF_PROMO, _NAG_BEST_SKILL, _NAG_MUST_USE, _NAG_ALWAYS_USE, _NAG_PATTERNS, _OUTPUT_SCHEMA_KEY_PATTERN, _SCHEMA_ARTEFACT_TYPES, ArgError, isCliEntry2;
18051
+ var _HERE4, REQUIRED_PERSONA_SECTIONS_CORE, REQUIRED_PERSONA_SECTIONS_SPECIALIST, VALID_PERSONA_TIERS, PERSONA_LINE_BUDGETS, REQUIRED_USERTYPE_SECTIONS, USERTYPE_LINE_BUDGET, VALID_PERSONA_WINGS, PERSONA_LINE_BUDGETS_BY_WING, REQUIRED_SKILL_SECTIONS, SECTION_ALIASES, RECOMMENDED_SKILL_SECTIONS, CONDITIONAL_SKILL_SECTIONS, RULE_BAD_SIGNS, FRUGALITY_WRITER_SKILLS, FRUGALITY_CHARTER_RELPATH, FRUGALITY_CHARTER_INDEX_RULES, VAGUE_VALIDATION_PATTERNS, TRIGGER_WARNING_PATTERNS, ORDERED_STEP_PATTERN, SECTION_PATTERN, FRONTMATTER_PATTERN, DESCRIPTION_PATTERN, STATUS_PATTERN, REPLACED_BY_PATTERN, TIER_PATTERN, TYPE_PATTERN, SOURCE_PATTERN, SENIOR_RELATED_SKILLS_PATTERN, SENIOR_RELATED_WHEN_PATTERN, SENIOR_RELATED_WHEN_NOT_PATTERN, SENIOR_PROACTIVE_PATTERN, SENIOR_OUTPUT_PATTERN, H1_PATTERN, DOUBLE_BLANK_PATTERN, VALID_RULE_TYPES, VALID_RULE_SOURCES, ROUTER_ALLOWED_TRIGGER_KEYS, KERNEL_RULE_IDS2, VALID_EXECUTION_TYPES, VALID_EXECUTION_HANDLERS, VALID_EXECUTION_SAFETY_MODES, EXTERNAL_EXECUTION_HANDLERS, RUNTIME_REQUIRES_BLOCK_PATTERN, COMPATIBILITY_KEY_PATTERN, HARNESS_COMPAT_KEY_PATTERN, STRICT_WRITE_GATE_PATTERNS, SKILL_REFERENCE_DEFERRAL_PATTERN, VALID_EXECUTION_FIELDS, WING3_SPINE_SLOTS, CONTEXT_SPINE_INLINE_PATTERN, WING3_SAAS_URL_PATTERN, WING3_VENDOR_BLACKLIST, WING3_STACK_LOCKED_PATTERN, WING3_CHANNEL_TACTIC_PATTERN, WING4_SPINE_SLOTS, WING4_SAAS_URL_PATTERN, WING4_VENDOR_BLACKLIST, WING4_STAGE_AGNOSTIC_PATTERN, Issue, LintResult, _ROLE_CONTRACT_CANDIDATES, _ROLE_CONTRACT_SLUGS_CACHE, _ROLE_CONTRACT_REF_PATTERN, PROCEDURE_HEADING_PATTERN, COMMAND_FRONTMATTER_DELEGATION_KEYS, MD_LINK_PATTERN_G, NAME_PATTERN, DISABLE_MODEL_PATTERN, _INSPECT_VERB_PATTERN, last_changed_scope_reason, last_changed_base_diff_ok, _INTERACTION_NAME_PATTERNS, _INTERACTION_CONTENT_KEYWORDS, _EXEC_FILE_SIGNALS, _EXEC_CONTENT_SIGNALS, _TASK_TYPE_SIGNALS, _VERIFICATION_TOOLS, _FRUGALITY_STANDARDS_PATTERN, _FRUGALITY_CHARTER_LINK_PATTERN, _MD_LINK_PATTERN, _MALICE_CRED_EXFIL, _MALICE_REMOTE_EXEC, _MALICE_FORCE_PUSH, _MALICE_CHMOD_SECRETS, _MALICE_SHELL_INJECT, _MALICE_PATTERNS, _NAG_UPDATE_CHECK, _NAG_STAY_CURRENT, _NAG_SELF_PROMO, _NAG_BEST_SKILL, _NAG_MUST_USE, _NAG_ALWAYS_USE, _NAG_PATTERNS, _OUTPUT_SCHEMA_KEY_PATTERN, _SCHEMA_ARTEFACT_TYPES, ArgError, isCliEntry2;
18034
18052
  var init_skill_linter = __esm({
18035
18053
  "src/scripts/skill_linter.ts"() {
18036
18054
  "use strict";
@@ -18171,6 +18189,17 @@ var init_skill_linter = __esm({
18171
18189
  VALID_EXECUTION_SAFETY_MODES = /* @__PURE__ */ new Set(["strict"]);
18172
18190
  EXTERNAL_EXECUTION_HANDLERS = /* @__PURE__ */ new Set(["shell", "php", "node"]);
18173
18191
  RUNTIME_REQUIRES_BLOCK_PATTERN = /^runtime_requires:[ \t]*(\{.*)?$/m;
18192
+ COMPATIBILITY_KEY_PATTERN = /^compatibility:[ \t]*\S/m;
18193
+ HARNESS_COMPAT_KEY_PATTERN = /^harness_compat:[ \t]*\S/m;
18194
+ STRICT_WRITE_GATE_PATTERNS = [
18195
+ /--dry-run/i,
18196
+ /\bnever silent[- ]run/i,
18197
+ /\bpropose,? never\b/i,
18198
+ /\bconfirms? before\b/i,
18199
+ /\bexplicit (?:user )?confirmation\b/i,
18200
+ /\basks? (?:the user )?(?:first|before)\b/i
18201
+ ];
18202
+ SKILL_REFERENCE_DEFERRAL_PATTERN = /\]\(\.{0,2}\/?references\//;
18174
18203
  VALID_EXECUTION_FIELDS = /* @__PURE__ */ new Set([
18175
18204
  "type",
18176
18205
  "handler",
@@ -18880,7 +18909,10 @@ function parse_blockers(raw_text) {
18880
18909
  owner: _blockerField(body, "Owner") ?? "user",
18881
18910
  blocks: _blockerField(body, "Blocks") ?? "(unspecified)",
18882
18911
  todo: _blockerTodo(body),
18883
- resolvedWhen: _blockerField(body, "Resolved when") ?? "(unspecified)"
18912
+ resolvedWhen: _blockerField(body, "Resolved when") ?? "(unspecified)",
18913
+ recommendation: _blockerField(body, "Recommendation") ?? "",
18914
+ ifNothing: _blockerField(body, "If you do nothing") ?? "",
18915
+ question: _blockerField(body, "Question") ?? ""
18884
18916
  });
18885
18917
  }
18886
18918
  }
@@ -18906,7 +18938,10 @@ function parse_blockers(raw_text) {
18906
18938
  owner: "user",
18907
18939
  blocks: "entire roadmap",
18908
18940
  todo: [parts.join(" ")],
18909
- resolvedWhen: "condition described above clears"
18941
+ resolvedWhen: "condition described above clears",
18942
+ recommendation: "",
18943
+ ifNothing: "",
18944
+ question: ""
18910
18945
  });
18911
18946
  }
18912
18947
  return blockers;
@@ -19178,6 +19213,12 @@ function render(roadmaps, bundles = null) {
19178
19213
  lines.push("**Blockers**\n");
19179
19214
  for (const b of openBlockers) {
19180
19215
  lines.push(`- **${b.id}** (owner: ${b.owner}) \u2014 blocks ${b.blocks}`);
19216
+ if (b.recommendation) {
19217
+ lines.push(` - **Recommendation:** ${b.recommendation}`);
19218
+ }
19219
+ if (b.ifNothing) {
19220
+ lines.push(` - **If you do nothing:** ${b.ifNothing}`);
19221
+ }
19181
19222
  lines.push(" - **What to do:**");
19182
19223
  for (const step of b.todo) {
19183
19224
  lines.push(` ${step}`);
@@ -19506,7 +19547,7 @@ var init_update_roadmap_progress = __esm({
19506
19547
  BLOCKER_HEADING_RE = /^###[ \t]+blocker:[ \t]*(.+?)[ \t]*$/gim;
19507
19548
  NEXT_H2_RE = /^##[ \t]+\S/m;
19508
19549
  LEGACY_BLOCKED_UNTIL_RE = /^>[ \t]*Blocked until:?[ \t]*(.+)$/im;
19509
- BLOCKER_FIELD_RE = /^-[ \t]*\*\*(Status|Owner|Blocks|Resolved when|What to do):\*\*/i;
19550
+ BLOCKER_FIELD_RE = /^-[ \t]*\*\*(Status|Owner|Blocks|Resolved when|What to do|Recommendation|If you do nothing|Question):\*\*/i;
19510
19551
  ArgparseExit = class extends Error {
19511
19552
  code;
19512
19553
  constructor(code) {
@@ -25763,6 +25804,7 @@ __export(clients_exports, {
25763
25804
  AnthropicCliClient: () => AnthropicCliClient,
25764
25805
  AnthropicClient: () => AnthropicClient,
25765
25806
  CLI_CALLS_FILENAME: () => CLI_CALLS_FILENAME,
25807
+ CODEX_MEASURED_UNSERVABLE: () => CODEX_MEASURED_UNSERVABLE,
25766
25808
  CliClient: () => CliClient,
25767
25809
  CliClientError: () => CliClientError,
25768
25810
  CouncilResponse: () => CouncilResponse,
@@ -25784,6 +25826,7 @@ __export(clients_exports, {
25784
25826
  KeyGateError: () => KeyGateError,
25785
25827
  MANUAL_END_MARKER: () => MANUAL_END_MARKER,
25786
25828
  ManualClient: () => ManualClient,
25829
+ OPENAI_CLI_VENDOR_DEFAULT: () => OPENAI_CLI_VENDOR_DEFAULT,
25787
25830
  OPENAI_KEY_FILENAME: () => OPENAI_KEY_FILENAME,
25788
25831
  OPENAI_KEY_PATH: () => OPENAI_KEY_PATH,
25789
25832
  OpenAICliClient: () => OpenAICliClient,
@@ -26406,7 +26449,7 @@ function _defaultStdin() {
26406
26449
  }
26407
26450
  };
26408
26451
  }
26409
- var _modelCeilingMemo, ANTHROPIC_KEY_FILENAME, OPENAI_KEY_FILENAME, ANTHROPIC_KEY_PATH, OPENAI_KEY_PATH, DEFAULT_ANTHROPIC_MODEL, DEFAULT_OPENAI_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_XAI_MODEL, DEFAULT_PERPLEXITY_MODEL, DEFAULT_OPENAI_CLI_MODEL, DEFAULT_ANTHROPIC_CLI_MODEL, DEFAULT_GEMINI_CLI_MODEL, XAI_BASE_URL, PERPLEXITY_BASE_URL, DEFAULT_MAX_TOKENS, UNLIMITED_TOKENS_FALLBACK, _REASONING_PREFIXES, KeyGateError, CliClientError, DEFAULT_PROMPT_CACHE_TTL, CouncilResponse, _monotonicSource, ExternalAIClient, AnthropicClient, OpenAIClient, GeminiClient, _OpenAICompatibleClient, XAIClient, PerplexityClient, CLI_CALLS_FILENAME, DEFAULT_CLI_TIMEOUT_SECONDS, SubprocessError, CliClient, AnthropicCliClient, OpenAICliClient, GeminiCliClient, XAICliClient, PerplexityCliClient, MANUAL_END_MARKER, ManualClient, ValueError3, JSONDecodeError;
26452
+ var _modelCeilingMemo, ANTHROPIC_KEY_FILENAME, OPENAI_KEY_FILENAME, ANTHROPIC_KEY_PATH, OPENAI_KEY_PATH, DEFAULT_ANTHROPIC_MODEL, DEFAULT_OPENAI_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_XAI_MODEL, DEFAULT_PERPLEXITY_MODEL, OPENAI_CLI_VENDOR_DEFAULT, CODEX_MEASURED_UNSERVABLE, DEFAULT_OPENAI_CLI_MODEL, DEFAULT_ANTHROPIC_CLI_MODEL, DEFAULT_GEMINI_CLI_MODEL, XAI_BASE_URL, PERPLEXITY_BASE_URL, DEFAULT_MAX_TOKENS, UNLIMITED_TOKENS_FALLBACK, _REASONING_PREFIXES, KeyGateError, CliClientError, DEFAULT_PROMPT_CACHE_TTL, CouncilResponse, _monotonicSource, ExternalAIClient, AnthropicClient, OpenAIClient, GeminiClient, _OpenAICompatibleClient, XAIClient, PerplexityClient, CLI_CALLS_FILENAME, DEFAULT_CLI_TIMEOUT_SECONDS, SubprocessError, CliClient, AnthropicCliClient, OpenAICliClient, GeminiCliClient, XAICliClient, PerplexityCliClient, MANUAL_END_MARKER, ManualClient, ValueError3, JSONDecodeError;
26410
26453
  var init_clients = __esm({
26411
26454
  "src/scripts/ai_council/clients.ts"() {
26412
26455
  "use strict";
@@ -26425,7 +26468,13 @@ var init_clients = __esm({
26425
26468
  DEFAULT_GEMINI_MODEL = "gemini-2.5-pro";
26426
26469
  DEFAULT_XAI_MODEL = "grok-4";
26427
26470
  DEFAULT_PERPLEXITY_MODEL = "sonar-pro";
26428
- DEFAULT_OPENAI_CLI_MODEL = "gpt-5";
26471
+ OPENAI_CLI_VENDOR_DEFAULT = "codex-default";
26472
+ CODEX_MEASURED_UNSERVABLE = /* @__PURE__ */ new Map([
26473
+ ["gpt-4o", "2026-08-15"],
26474
+ ["gpt-5", "2026-08-15"],
26475
+ ["gpt-5.1-codex", "2026-08-15"]
26476
+ ]);
26477
+ DEFAULT_OPENAI_CLI_MODEL = OPENAI_CLI_VENDOR_DEFAULT;
26429
26478
  DEFAULT_ANTHROPIC_CLI_MODEL = "claude-sonnet-4-5";
26430
26479
  DEFAULT_GEMINI_CLI_MODEL = "gemini-2.5-pro";
26431
26480
  XAI_BASE_URL = "https://api.x.ai/v1";
@@ -26648,7 +26697,7 @@ var init_clients = __esm({
26648
26697
  _client;
26649
26698
  constructor(opts = {}) {
26650
26699
  super();
26651
- this.model = opts.model ?? DEFAULT_OPENAI_MODEL;
26700
+ this.model = opts.model === void 0 || opts.model === OPENAI_CLI_VENDOR_DEFAULT ? DEFAULT_OPENAI_MODEL : opts.model;
26652
26701
  if (opts.client !== void 0 && opts.client !== null) {
26653
26702
  this._client = opts.client;
26654
26703
  return;
@@ -26968,6 +27017,19 @@ ${user_prompt}`;
26968
27017
  } catch {
26969
27018
  }
26970
27019
  }
27020
+ /**
27021
+ * Refuse a call this transport cannot serve, BEFORE spawning.
27022
+ *
27023
+ * `null` means "nothing known to be wrong" — deliberately not "verified
27024
+ * servable". No vendor CLI here publishes the set of models its
27025
+ * subscription tier accepts, so an allow-list would be invented and would
27026
+ * reject valid pins the day the vendor adds one. What CAN be stated is the
27027
+ * complement: models this estate has MEASURED being rejected. Subclasses
27028
+ * override; the base transport knows of none.
27029
+ */
27030
+ _preflight_transport() {
27031
+ return null;
27032
+ }
26971
27033
  /** Return text to send on stdin, or `null` to inherit caller's stdin. */
26972
27034
  _stdin_payload(system_prompt, user_prompt) {
26973
27035
  void system_prompt;
@@ -27094,6 +27156,17 @@ ${user_prompt}`;
27094
27156
  });
27095
27157
  }
27096
27158
  }
27159
+ const preflight = this._preflight_transport();
27160
+ if (preflight !== null) {
27161
+ return new CouncilResponse({
27162
+ provider: this.name,
27163
+ model: this.model,
27164
+ text: "",
27165
+ latency_ms: _elapsedMs(t0),
27166
+ error: preflight.code,
27167
+ metadata: { cli: true, transport: this.transport, detail: preflight.detail }
27168
+ });
27169
+ }
27097
27170
  const cmd = this._build_command(system_prompt, user_prompt, max_tokens);
27098
27171
  const stdinPayload = this._stdin_payload(system_prompt, user_prompt);
27099
27172
  let proc;
@@ -27325,7 +27398,23 @@ ${user_prompt}`;
27325
27398
  void system_prompt;
27326
27399
  void user_prompt;
27327
27400
  void max_tokens;
27328
- return [this.binary, "exec", "--json", "--model", this.model, "-"];
27401
+ const modelArgs = this.model === OPENAI_CLI_VENDOR_DEFAULT ? [] : ["--model", this.model];
27402
+ return [this.binary, "exec", "--json", "--skip-git-repo-check", ...modelArgs, "-"];
27403
+ }
27404
+ /**
27405
+ * Refuse a pin this estate has measured the transport rejecting.
27406
+ *
27407
+ * The remedy is named because it is not guessable: removing the `model:`
27408
+ * line is the fix, and "remove a setting" is the last thing an operator
27409
+ * tries when a member is silent.
27410
+ */
27411
+ _preflight_transport() {
27412
+ const measuredOn = CODEX_MEASURED_UNSERVABLE.get(this.model);
27413
+ if (measuredOn === void 0) return null;
27414
+ return {
27415
+ code: "model_unsupported_on_transport",
27416
+ detail: `openai member pins model \`${this.model}\`, which the codex CLI (subscription transport) refused when measured on ${measuredOn}: "The '${this.model}' model is not supported when using Codex with a ChatGPT account." The CLI publishes no list of models it DOES accept, so there is no supported set to offer here \u2014 the one configuration measured to work is no pin at all. Fix: remove the \`model:\` line from the openai member (or set it to \`codex-default\`) to use the CLI's own default. A pinned model is only reachable on the API transport (\`api_key_ref:\` without \`mode: cli\`).`
27417
+ };
27329
27418
  }
27330
27419
  /**
27331
27420
  * System and user prompt travel as ONE stdin payload, because `codex exec`
@@ -27347,6 +27436,7 @@ ${user_prompt}`;
27347
27436
  let text = "";
27348
27437
  let input_tokens = 0;
27349
27438
  let output_tokens = 0;
27439
+ let failure = null;
27350
27440
  const meta = {};
27351
27441
  for (let line of _splitlines6(stdout)) {
27352
27442
  line = line.trim();
@@ -27389,6 +27479,12 @@ ${user_prompt}`;
27389
27479
  text = chunks.join("\n").trim();
27390
27480
  }
27391
27481
  }
27482
+ if (_dictGet(itemObj, "type", void 0) === "agent_message") {
27483
+ const flat = _pyStr3(_dictGet(itemObj, "text", "")).trim();
27484
+ if (flat) {
27485
+ text = flat;
27486
+ }
27487
+ }
27392
27488
  if (_pyTruthy2(_dictGet(itemObj, "id", void 0))) {
27393
27489
  meta["item_id"] = _pyStr3(itemObj["id"]);
27394
27490
  }
@@ -27407,8 +27503,36 @@ ${user_prompt}`;
27407
27503
  if (_pyTruthy2(_dictGet(ev, "session_id", void 0))) {
27408
27504
  meta["session_id"] = _pyStr3(ev["session_id"]);
27409
27505
  }
27506
+ } else if (event_type === "turn.failed") {
27507
+ let err = _dictGet(ev, "error", null);
27508
+ if (!_pyTruthy2(err)) err = {};
27509
+ if (_isPlainObject7(err)) {
27510
+ const raw = _pyStr3(_dictGet(err, "message", ""));
27511
+ if (raw) failure = raw;
27512
+ }
27410
27513
  }
27411
27514
  }
27515
+ if (failure !== null && !text) {
27516
+ const unsupported = /not supported when using Codex/i.test(failure);
27517
+ return new CouncilResponse({
27518
+ provider: this.name,
27519
+ model: this.model,
27520
+ text: "",
27521
+ input_tokens,
27522
+ output_tokens,
27523
+ error: unsupported ? "model_unsupported_on_transport" : "turn_failed",
27524
+ metadata: {
27525
+ ...meta,
27526
+ // The vendor's own sentence, kept because it names the
27527
+ // model and the account type — the two facts an operator
27528
+ // needs and neither of which the error code carries.
27529
+ detail: failure.slice(0, 400),
27530
+ ...unsupported ? {
27531
+ hint: "the codex subscription transport serves no explicitly pinned model measured so far \u2014 remove the `model:` line from the openai member to use the CLI default"
27532
+ } : {}
27533
+ }
27534
+ });
27535
+ }
27412
27536
  return new CouncilResponse({
27413
27537
  provider: this.name,
27414
27538
  model: this.model,
@@ -28799,7 +28923,7 @@ function _build_member(name, cfg, default_mode = "auto", ignored = []) {
28799
28923
  }
28800
28924
  entries.push(entry);
28801
28925
  }
28802
- if (member_enabled && model && !entries.includes(model)) {
28926
+ if (member_enabled && model && model !== OPENAI_CLI_VENDOR_DEFAULT && !entries.includes(model)) {
28803
28927
  throw new CouncilConfigError(
28804
28928
  `members.${name}.model_ladder must include the active \`model\` (${_pyReprStr(model)}); got ${_pyRepr6(entries)}.`
28805
28929
  );
@@ -29037,6 +29161,7 @@ var init_config = __esm({
29037
29161
  "use strict";
29038
29162
  import_yaml5 = __toESM(require_dist(), 1);
29039
29163
  init_user_global_paths();
29164
+ init_clients();
29040
29165
  init_quorum();
29041
29166
  _VALID_PROVIDERS = /* @__PURE__ */ new Set([
29042
29167
  "anthropic",
@@ -29687,6 +29812,9 @@ function classifyCliFailure(raw) {
29687
29812
  if (s === "cli_unsupported" || s === "unsupported" || s === "parse_failed") {
29688
29813
  return "cli_unsupported";
29689
29814
  }
29815
+ if (s.startsWith("model_unservable") || s.includes("is not supported when using codex")) {
29816
+ return "model_unservable";
29817
+ }
29690
29818
  if (s === "timeout") return "timeout";
29691
29819
  if (s === "cli_quota_exhausted" || s === "quota_exhausted") return "quota_exhausted";
29692
29820
  if (/^exit_5\d\d$/.test(s) || s === "server_error" || s === "os") return "server_error";
@@ -35377,6 +35505,13 @@ function handleStart(root, payload, nowIso, sessionId) {
35377
35505
  event: "subagent_start",
35378
35506
  ts: nowIso,
35379
35507
  ref,
35508
+ // Phase 1 Step 4 correction (b): without this the dispatch denominator
35509
+ // is not per-session. Three sessions share one ledger file, so a rate
35510
+ // computed over the file aggregates strangers — the measured window
35511
+ // held 7 starts against 25 stops, one of them an agent type this
35512
+ // session never dispatched. The open record already carried it; the
35513
+ // appended line did not, and the line is what a rate is computed from.
35514
+ session_id: sessionId,
35380
35515
  agent_type: rec.agent_type,
35381
35516
  parent_ref: parentRef,
35382
35517
  depth,
@@ -35384,7 +35519,7 @@ function handleStart(root, payload, nowIso, sessionId) {
35384
35519
  concurrent_open: countOpen(root)
35385
35520
  });
35386
35521
  }
35387
- function handleStop(root, payload, nowIso) {
35522
+ function handleStop(root, payload, nowIso, sessionId) {
35388
35523
  const agentId = str2(payload, "agent_id", "agentId");
35389
35524
  if (agentId === null) {
35390
35525
  appendUnidentified(root, "subagent_stop", nowIso, payload);
@@ -35403,6 +35538,11 @@ function handleStop(root, payload, nowIso) {
35403
35538
  event: "subagent_stop",
35404
35539
  ts: nowIso,
35405
35540
  ref,
35541
+ // The session this stop was OBSERVED in, read from the same envelope
35542
+ // position as the start's — never back-filled from `rec`, which would
35543
+ // relabel a cross-session stop as belonging to the dispatching session
35544
+ // and hide exactly the mismatch this field exists to expose.
35545
+ session_id: sessionId,
35406
35546
  agent_type: rec?.agent_type ?? str2(payload, "agent_type", "agentType", "subagent_type", "subagentType"),
35407
35547
  depth: rec?.depth ?? null,
35408
35548
  depth_basis: rec?.depth_basis ?? null,
@@ -35428,7 +35568,7 @@ function processEnvelope(envelope, consumerRoot) {
35428
35568
  const sessionId = str2(payload, "session_id", "sessionId") ?? str2(envelope, "session_id", "sessionId");
35429
35569
  reapStaleOpenRecords(consumerRoot, nowIso);
35430
35570
  if (event === "subagent_start") handleStart(consumerRoot, payload, nowIso, sessionId);
35431
- else handleStop(consumerRoot, payload, nowIso);
35571
+ else handleStop(consumerRoot, payload, nowIso, sessionId);
35432
35572
  } catch {
35433
35573
  return EXIT_ALLOW4;
35434
35574
  }
@@ -44312,7 +44452,8 @@ ${body}`);
44312
44452
  function _render_quorum_line(q) {
44313
44453
  const verdict = q.status === "concluded" ? "concluded" : "INCONCLUSIVE \u2014 release gate holds";
44314
44454
  const solo = isSoloConcluded(q) ? " \xB7 **solo** \u2014 one voice concluded this pass" : "";
44315
- return `**Quorum:** ${q.present}/${q.total} present, needed ${q.threshold} \u2014 ${verdict}.${solo}`;
44455
+ const degraded = q.present < q.total ? ` \u26A0\uFE0F DEGRADED \u2014 ${String(q.total - q.present)} member(s) did not answer; this is not convergence.` : "";
44456
+ return `**Quorum:** ${q.present}/${q.total} present, needed ${q.threshold} \u2014 ${verdict}.${solo}${degraded}`;
44316
44457
  }
44317
44458
  function _render_absent_members(absent) {
44318
44459
  const lines = ["### Absent Members", ""];
@@ -45673,7 +45814,9 @@ function resolve_low_impact(question_text, plan, clients, price_table = null, no
45673
45814
  const pinned = model_downgrade.model_tier_override?.[member.name];
45674
45815
  const cheapest = member.model_ladder.length > 0 ? member.model_ladder[0] : null;
45675
45816
  const target = pinned && pinned.length > 0 ? pinned : cheapest;
45676
- if (target && target !== client.model) {
45817
+ const unpinned = client.model === OPENAI_CLI_VENDOR_DEFAULT;
45818
+ const overrideWins = pinned !== void 0 && pinned.length > 0;
45819
+ if (target && target !== client.model && (!unpinned || overrideWins)) {
45677
45820
  client.model = target;
45678
45821
  }
45679
45822
  }
@@ -45979,6 +46122,7 @@ var init_low_impact = __esm({
45979
46122
  "src/scripts/ai_council/low_impact.ts"() {
45980
46123
  "use strict";
45981
46124
  init_value_ladder();
46125
+ init_clients();
45982
46126
  init_orchestrator();
45983
46127
  _INPUT_RATIO = 0.6;
45984
46128
  FastPathPlan = class {