pan-wizard 3.36.0 → 3.37.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 (314) hide show
  1. package/CHANGELOG.md +3645 -0
  2. package/README.md +36 -48
  3. package/agents/pan-conductor.md +2 -3
  4. package/agents/pan-counterfactual.md +1 -2
  5. package/agents/pan-debugger.md +14 -3
  6. package/agents/pan-design-checker.md +1 -2
  7. package/agents/pan-designer.md +1 -2
  8. package/agents/pan-document_code.md +1 -2
  9. package/agents/pan-hardener.md +2 -3
  10. package/agents/pan-integration-checker.md +1 -2
  11. package/agents/pan-knowledge.md +1 -2
  12. package/agents/pan-meta-reviewer.md +3 -3
  13. package/agents/pan-optimizer.md +4 -4
  14. package/agents/pan-phase-researcher.md +79 -488
  15. package/agents/pan-plan-checker.md +12 -2
  16. package/agents/pan-planner.md +10 -6
  17. package/agents/pan-previewer.md +1 -2
  18. package/agents/pan-project-researcher.md +70 -499
  19. package/agents/pan-release.md +1 -1
  20. package/agents/pan-reviewer.md +9 -3
  21. package/agents/pan-roadmapper.md +12 -7
  22. package/agents/pan-verifier.md +7 -2
  23. package/bin/install-lib.cjs +134 -14
  24. package/bin/install.js +59 -12
  25. package/commands/pan/army.md +1 -1
  26. package/commands/pan/autodev.md +76 -0
  27. package/commands/pan/exec-phase.md +3 -4
  28. package/commands/pan/focus-auto.md +14 -7
  29. package/commands/pan/focus-design.md +4 -5
  30. package/commands/pan/focus-docs.md +24 -0
  31. package/commands/pan/learn.md +13 -6
  32. package/commands/pan/milestone-audit.md +8 -1
  33. package/commands/pan/milestone-done.md +10 -5
  34. package/commands/pan/milestone-new.md +2 -2
  35. package/commands/pan/new-project.md +15 -12
  36. package/commands/pan/plan-phase.md +15 -9
  37. package/commands/pan/quick.md +1 -1
  38. package/commands/pan/review-deep.md +11 -5
  39. package/commands/pan/settings.md +6 -0
  40. package/commands/pan/verify-phase.md +6 -2
  41. package/docs/AGENTS.md +917 -0
  42. package/docs/ARCHITECTURE.md +1054 -0
  43. package/docs/CLI-REFERENCE.md +4582 -0
  44. package/docs/COMPARISON.md +116 -0
  45. package/docs/DEVELOPMENT.md +490 -0
  46. package/docs/ECOSYSTEM-REVIEW-2026-06.md +107 -0
  47. package/docs/ECOSYSTEM-REVIEW-2026-08.md +349 -0
  48. package/docs/EXAMPLES.md +584 -0
  49. package/docs/FAQ.md +254 -0
  50. package/docs/FIELD-HARVEST-2026-07.md +88 -0
  51. package/docs/FIELD-REPORT-army-2026-06.md +121 -0
  52. package/docs/HOOKS.md +638 -0
  53. package/docs/IMPROVEMENT-TODO.md +246 -0
  54. package/docs/INTERNALS.md +485 -0
  55. package/docs/MIGRATION-v2-to-v3.md +258 -0
  56. package/docs/SECURITY-HARDENING.md +230 -0
  57. package/docs/SKILLS-ENHANCEMENT-PLAN-V2.md +122 -0
  58. package/docs/SKILLS-FULL-TEXT.md +9685 -0
  59. package/docs/SKILLS-REFERENCE.md +1037 -0
  60. package/docs/TROUBLESHOOTING.md +1084 -0
  61. package/docs/USER-GUIDE.md +1437 -0
  62. package/docs/archive/SKILLS-ENHANCEMENT-PLAN.md +230 -0
  63. package/docs/audits/AUDIT-2026-08-e2e-ROADMAP.md +117 -0
  64. package/docs/audits/AUDIT-2026-08-e2e-VERIFICATION.md +693 -0
  65. package/docs/audits/AUDIT-2026-08-e2e.md +1546 -0
  66. package/docs/audits/OUTSTANDING-2026-08.md +275 -0
  67. package/docs/audits/STABILITY-TEST-2026-08.md +640 -0
  68. package/docs/branding/README-brand-draft.md +119 -0
  69. package/docs/branding/handoff/IMPLEMENTATION.md +205 -0
  70. package/docs/branding/handoff/README-brand-draft.md +119 -0
  71. package/docs/branding/handoff/image-prompts.md +46 -0
  72. package/docs/branding/image-prompts.md +46 -0
  73. package/docs/branding/nano-banana-prompts.txt +60 -0
  74. package/docs/context-monitor.md +13 -0
  75. package/docs/decisions/ADR-0001-strategic-feature-prioritization.md +83 -0
  76. package/docs/decisions/ADR-0002-copilot-cli-runtime.md +71 -0
  77. package/docs/decisions/ADR-0003-smart-execution.md +84 -0
  78. package/docs/decisions/ADR-0004-copilot-cli-interaction.md +89 -0
  79. package/docs/decisions/ADR-0005-command-naming.md +80 -0
  80. package/docs/decisions/ADR-0006-focus-commands.md +101 -0
  81. package/docs/decisions/ADR-0007-ship-v1.md +73 -0
  82. package/docs/decisions/ADR-0008-map-codebase-mermaid-togaf.md +80 -0
  83. package/docs/decisions/ADR-0009-production-deployment-checklist.md +68 -0
  84. package/docs/decisions/ADR-0010-standards-integration.md +79 -0
  85. package/docs/decisions/ADR-0011-help-commands-rewrite.md +64 -0
  86. package/docs/decisions/ADR-0012-contributors-attribution-index.md +42 -0
  87. package/docs/decisions/ADR-0013-strategic-feature-additions.md +53 -0
  88. package/docs/decisions/ADR-0014-internal-cleanup-code-quality.md +53 -0
  89. package/docs/decisions/ADR-0015-focus-auto-runner.md +296 -0
  90. package/docs/decisions/ADR-0016-enhanced-doc-sync.md +54 -0
  91. package/docs/decisions/ADR-0017-enhanced-focus-design.md +69 -0
  92. package/docs/decisions/ADR-0018-user-reality-testing.md +84 -0
  93. package/docs/decisions/ADR-0019-end-to-end-user-acceptance-testing.md +113 -0
  94. package/docs/decisions/ADR-0020-ai-drift-prevention.md +55 -0
  95. package/docs/decisions/ADR-0021-codebase-mapper-v2.md +76 -0
  96. package/docs/decisions/ADR-0022-lifecycle-completeness.md +63 -0
  97. package/docs/decisions/ADR-0023-opus-4-7-adoption.md +89 -0
  98. package/docs/decisions/ADR-0024-spec-b-v2-completion.md +137 -0
  99. package/docs/decisions/ADR-0025-behavioral-guardrails-layer.md +129 -0
  100. package/docs/decisions/ADR-0026-self-improvement-loop.md +171 -0
  101. package/docs/decisions/ADR-0027-doc-code-link-graph.md +164 -0
  102. package/docs/decisions/ADR-0028-unified-agents-skills-target.md +46 -0
  103. package/docs/decisions/ADR-0029-experiment-evaluator.md +76 -0
  104. package/docs/decisions/ADR-0030-planning-concurrency.md +37 -0
  105. package/docs/decisions/ADR-0031-focus-auto-backlog-source.md +47 -0
  106. package/docs/decisions/ADR-0032-squad-model.md +64 -0
  107. package/docs/decisions/ADR-0033-army-campaign.md +40 -0
  108. package/docs/decisions/ADR-0034-scheduled-campaigns.md +57 -0
  109. package/docs/decisions/ADR-0035-army-hud-dashboard.md +40 -0
  110. package/docs/decisions/ADR-0036-agentic-memory-architecture.md +106 -0
  111. package/docs/decisions/ADR-0037-pin-security-agents-to-opus.md +51 -0
  112. package/docs/decisions/ADR-0038-skill-aligned-decomposition.md +41 -0
  113. package/docs/decisions/ADR-0039-worktree-as-project-variant.md +37 -0
  114. package/docs/decisions/ADR-0040-memory-injection-defense.md +55 -0
  115. package/docs/decisions/ADR-0041-mcp-dual-era-bridge.md +47 -0
  116. package/docs/decisions/ADR-0042-design-parity-both-flows.md +45 -0
  117. package/docs/decisions/ADR-0043-addressable-planning-roots.md +56 -0
  118. package/docs/decisions/ADR-0044-bound-the-cached-context.md +104 -0
  119. package/docs/decisions/ADR-0045-agent-plugins-bundle.md +76 -0
  120. package/docs/decisions/ADR-0046-subagent-frontmatter-decisions.md +39 -0
  121. package/docs/decisions/ADR-0047-pan-harness.md +76 -0
  122. package/docs/decisions/ADR-0048-one-core-per-project.md +43 -0
  123. package/docs/decisions/ADR-0049-machine-verdicts-and-findings-ledger.md +116 -0
  124. package/docs/specs/ai_drift_prevention_featureai.md +286 -0
  125. package/docs/specs/codebase_mapper_v2_featureai.md +930 -0
  126. package/docs/specs/command_naming_optimization_featureai.md +930 -0
  127. package/docs/specs/comp_analysis_markdown_v1.md +149 -0
  128. package/docs/specs/continuous_autonomous_execution_featureai.md +304 -0
  129. package/docs/specs/contributors_attribution_index_featureai.md +476 -0
  130. package/docs/specs/copilot_cli_interaction_featureai.md +868 -0
  131. package/docs/specs/copilot_cli_runtime_featureai.md +647 -0
  132. package/docs/specs/custom-skills-assessment.md +461 -0
  133. package/docs/specs/deployment_audit_findings_featureai.md +243 -0
  134. package/docs/specs/doc_code_link_graph_featureai.md +253 -0
  135. package/docs/specs/documentation_alignment_cleanup_featureai.md +69 -0
  136. package/docs/specs/e2e_visual_testing_featureai.md +615 -0
  137. package/docs/specs/end_to_end_user_acceptance_testing_featureai.md +810 -0
  138. package/docs/specs/evidence-loop-plan.md +76 -0
  139. package/docs/specs/evidence_loop_featureai.md +497 -0
  140. package/docs/specs/focus-auto-optimize-category.md +449 -0
  141. package/docs/specs/focus-auto-optimize-superplan.md +188 -0
  142. package/docs/specs/focus_auto_runner_featureai.md +1102 -0
  143. package/docs/specs/focus_design_v2_featureai.md +197 -0
  144. package/docs/specs/focus_sync_v2_featureai.md +202 -0
  145. package/docs/specs/git_integration_overhaul_featureai.md +326 -0
  146. package/docs/specs/glm_zai_provider_featureai.md +200 -0
  147. package/docs/specs/googlecli_adoption_featureai.md +661 -0
  148. package/docs/specs/help_commands_rewrite_featureai.md +860 -0
  149. package/docs/specs/industry_analysis_strategic_additions_featureai.md +231 -0
  150. package/docs/specs/industry_comparison_and_feature_gaps_featureai.md +674 -0
  151. package/docs/specs/internal_cleanup_code_quality_featureai.md +486 -0
  152. package/docs/specs/investigations/README.md +31 -0
  153. package/docs/specs/investigations/digests/2026-09-28.md +47 -0
  154. package/docs/specs/investigations/digests/2026-10-08.md +62 -0
  155. package/docs/specs/investigations/digests/2026-10-10.md +61 -0
  156. package/docs/specs/investigations/features/debugger-red-loop-first.md +55 -0
  157. package/docs/specs/investigations/features/harness-cross-host-behaviour.md +93 -0
  158. package/docs/specs/investigations/features/optimize-apply-regression-gate.md +66 -0
  159. package/docs/specs/investigations/features/reviewer-smell-baseline.md +57 -0
  160. package/docs/specs/investigations/features/trace-failure-capture.md +69 -0
  161. package/docs/specs/lifecycle_completeness_featureai.md +754 -0
  162. package/docs/specs/local-first-ci.md +42 -0
  163. package/docs/specs/map_codebase_mermaid_togaf_featureai.md +805 -0
  164. package/docs/specs/market-delta-2026-09-superplan.md +310 -0
  165. package/docs/specs/market-ideas-2026-09.md +131 -0
  166. package/docs/specs/market-ideas-2026-10.md +428 -0
  167. package/docs/specs/market-ideas-ledger.md +177 -0
  168. package/docs/specs/memory-optimization-2026-10.md +285 -0
  169. package/docs/specs/multi-track-planning-roots.md +143 -0
  170. package/docs/specs/multi_model_routing_featureai.md +687 -0
  171. package/docs/specs/multi_model_routing_superplan.md +197 -0
  172. package/docs/specs/opus_47_existing_enhancements_featureai.md +247 -0
  173. package/docs/specs/opus_47_extended_features_featureai.md +363 -0
  174. package/docs/specs/opus_47_extended_features_v2_featureai.md +397 -0
  175. package/docs/specs/pan_focus_commands_featureai.md +2336 -0
  176. package/docs/specs/pan_zcode_mcp_bridge_featureai.md +120 -0
  177. package/docs/specs/product-excellence-superplan.md +315 -0
  178. package/docs/specs/product_excellence_program_2026_q4_featureai.md +365 -0
  179. package/docs/specs/production_deployment_readiness_featureai.md +433 -0
  180. package/docs/specs/production_readiness_ship_v1_featureai.md +698 -0
  181. package/docs/specs/real_test_enforcement_featureai.md +213 -0
  182. package/docs/specs/reality-check-2026-09-superplan.md +362 -0
  183. package/docs/specs/right-sized-ceremony.md +74 -0
  184. package/docs/specs/roadmap_and_competition_2026_q4_featureai.md +390 -0
  185. package/docs/specs/self_improvement_loop_featureai.md +875 -0
  186. package/docs/specs/skill-aligned-decomposition.md +155 -0
  187. package/docs/specs/standards_integration_featureai.md +833 -0
  188. package/docs/specs/testing-system-redesign-2026-09.md +267 -0
  189. package/docs/specs/user_reality_testing_system_featureai.md +788 -0
  190. package/docs/specs/watch-triggers.json +22 -0
  191. package/docs/specs/workflow-integration-redesign.md +742 -0
  192. package/docs/specs/workflow_state_consistency_featureai.md +183 -0
  193. package/hooks/dist/pan-context-monitor.js +9 -2
  194. package/hooks/dist/pan-cost-logger.js +5 -0
  195. package/hooks/dist/pan-guard.js +28 -5
  196. package/hooks/dist/pan-stop-guard.js +9 -9
  197. package/hooks/dist/pan-trace-logger.js +5 -0
  198. package/package.json +10 -2
  199. package/pan-wizard-core/bin/lib/agents-md.cjs +57 -8
  200. package/pan-wizard-core/bin/lib/autodev-report.cjs +180 -0
  201. package/pan-wizard-core/bin/lib/autodev.cjs +642 -0
  202. package/pan-wizard-core/bin/lib/ci.cjs +143 -0
  203. package/pan-wizard-core/bin/lib/commands.cjs +1 -1
  204. package/pan-wizard-core/bin/lib/config.cjs +31 -2
  205. package/pan-wizard-core/bin/lib/constants.cjs +27 -1
  206. package/pan-wizard-core/bin/lib/core.cjs +22 -10
  207. package/pan-wizard-core/bin/lib/cost.cjs +14 -4
  208. package/pan-wizard-core/bin/lib/cross-family.cjs +164 -0
  209. package/pan-wizard-core/bin/lib/debug-cases.cjs +104 -0
  210. package/pan-wizard-core/bin/lib/failure-class.cjs +81 -0
  211. package/pan-wizard-core/bin/lib/findings.cjs +34 -4
  212. package/pan-wizard-core/bin/lib/focus.cjs +1 -1
  213. package/pan-wizard-core/bin/lib/hosts.cjs +88 -0
  214. package/pan-wizard-core/bin/lib/init.cjs +7 -2
  215. package/pan-wizard-core/bin/lib/knowledge.cjs +2 -0
  216. package/pan-wizard-core/bin/lib/merge.cjs +50 -0
  217. package/pan-wizard-core/bin/lib/mutate.cjs +16 -5
  218. package/pan-wizard-core/bin/lib/next-action.cjs +112 -0
  219. package/pan-wizard-core/bin/lib/optimize.cjs +2 -2
  220. package/pan-wizard-core/bin/lib/phase.cjs +48 -4
  221. package/pan-wizard-core/bin/lib/plan-lint.cjs +150 -1
  222. package/pan-wizard-core/bin/lib/preview.cjs +23 -4
  223. package/pan-wizard-core/bin/lib/requirements-lint.cjs +130 -0
  224. package/pan-wizard-core/bin/lib/research-lint.cjs +150 -3
  225. package/pan-wizard-core/bin/lib/review-deep.cjs +14 -22
  226. package/pan-wizard-core/bin/lib/review-vote.cjs +105 -0
  227. package/pan-wizard-core/bin/lib/runner.cjs +2 -16
  228. package/pan-wizard-core/bin/lib/sizing.cjs +356 -0
  229. package/pan-wizard-core/bin/lib/squads.cjs +1 -1
  230. package/pan-wizard-core/bin/lib/state-write.cjs +247 -0
  231. package/pan-wizard-core/bin/lib/uat.cjs +149 -0
  232. package/pan-wizard-core/bin/lib/verdict.cjs +26 -3
  233. package/pan-wizard-core/bin/lib/verify-plan-set.cjs +30 -1
  234. package/pan-wizard-core/bin/lib/verify-preflight.cjs +2 -2
  235. package/pan-wizard-core/bin/lib/verify-red.cjs +37 -1
  236. package/pan-wizard-core/bin/lib/verify-retro.cjs +3 -2
  237. package/pan-wizard-core/bin/lib/verify.cjs +59 -4
  238. package/pan-wizard-core/bin/lib/worktree.cjs +70 -0
  239. package/pan-wizard-core/bin/pan-tools.cjs +168 -27
  240. package/pan-wizard-core/learnings/universal/autonomous-loop.md +2 -2
  241. package/pan-wizard-core/references/continuation-format.md +3 -3
  242. package/pan-wizard-core/references/guardrails.md +1 -1
  243. package/pan-wizard-core/references/model-profiles.md +2 -3
  244. package/pan-wizard-core/references/questioning.md +24 -0
  245. package/pan-wizard-core/references/ui-brand.md +4 -6
  246. package/pan-wizard-core/references/verdict-contract.md +2 -1
  247. package/pan-wizard-core/templates/config.json +5 -1
  248. package/pan-wizard-core/templates/debug.md +1 -0
  249. package/pan-wizard-core/templates/discovery.md +2 -2
  250. package/pan-wizard-core/templates/requirements.md +9 -0
  251. package/pan-wizard-core/workflows/add-phase.md +4 -6
  252. package/pan-wizard-core/workflows/assumptions.md +19 -1
  253. package/pan-wizard-core/workflows/diagnose-issues.md +2 -0
  254. package/pan-wizard-core/workflows/discuss-phase.md +4 -2
  255. package/pan-wizard-core/workflows/exec-lean.md +69 -0
  256. package/pan-wizard-core/workflows/exec-phase.md +36 -8
  257. package/{commands/pan → pan-wizard-core/workflows}/focus-doc-audit.md +13 -29
  258. package/{commands/pan → pan-wizard-core/workflows}/focus-drift-walking.md +3 -18
  259. package/{commands/pan → pan-wizard-core/workflows}/focus-exec.md +8 -23
  260. package/{commands/pan → pan-wizard-core/workflows}/focus-plan.md +6 -20
  261. package/{commands/pan → pan-wizard-core/workflows}/focus-scan.md +3 -16
  262. package/{commands/pan → pan-wizard-core/workflows}/focus-sync.md +7 -21
  263. package/pan-wizard-core/workflows/health.md +6 -0
  264. package/pan-wizard-core/workflows/help.md +31 -53
  265. package/pan-wizard-core/workflows/insert-phase.md +4 -6
  266. package/pan-wizard-core/workflows/learn.md +3 -3
  267. package/pan-wizard-core/workflows/milestone-audit.md +2 -2
  268. package/pan-wizard-core/workflows/milestone-new.md +38 -95
  269. package/pan-wizard-core/workflows/new-project.md +96 -258
  270. package/pan-wizard-core/workflows/optimize.md +107 -5
  271. package/pan-wizard-core/workflows/phase-tests.md +10 -0
  272. package/pan-wizard-core/workflows/plan-phase.md +86 -43
  273. package/pan-wizard-core/workflows/profile.md +50 -0
  274. package/pan-wizard-core/workflows/progress.md +10 -0
  275. package/pan-wizard-core/workflows/quick.md +34 -43
  276. package/pan-wizard-core/workflows/research-phase.md +118 -40
  277. package/pan-wizard-core/workflows/resume-project.md +18 -2
  278. package/pan-wizard-core/workflows/settings.md +21 -24
  279. package/pan-wizard-core/workflows/todo-check.md +6 -2
  280. package/pan-wizard-core/workflows/transition.md +22 -4
  281. package/pan-wizard-core/workflows/uat-walkthrough.md +90 -0
  282. package/pan-wizard-core/workflows/update.md +1 -1
  283. package/pan-wizard-core/workflows/verify-phase.md +2 -2
  284. package/scripts/build-agent-plugin.js +35 -15
  285. package/scripts/build-plugin.js +10 -1
  286. package/scripts/deprecate-old-versions.js +70 -3
  287. package/scripts/generate-skills-docs.py +1 -1
  288. package/scripts/git-hooks/pre-push +27 -0
  289. package/scripts/install-git-hooks.js +7 -5
  290. package/scripts/install-pre-push.cjs +38 -0
  291. package/scripts/land.cjs +151 -0
  292. package/scripts/local-ci.cjs +501 -0
  293. package/scripts/local-schedule.cjs +277 -0
  294. package/scripts/prompt-lint.cjs +32 -0
  295. package/scripts/prompt-rules.cjs +156 -0
  296. package/scripts/run-tests.cjs +7 -1
  297. package/scripts/test-quality-lint.cjs +3 -3
  298. package/scripts/test-surface.cjs +9 -2
  299. package/agents/pan-research-synthesizer.md +0 -246
  300. package/commands/pan/audit-deployment.md +0 -386
  301. package/commands/pan/dashboard.md +0 -22
  302. package/commands/pan/discord.md +0 -19
  303. package/commands/pan/mcp-bridge.md +0 -143
  304. package/commands/pan/milestone-cleanup.md +0 -19
  305. package/commands/pan/milestone-gaps.md +0 -35
  306. package/commands/pan/optimize.md +0 -115
  307. package/commands/pan/profile.md +0 -76
  308. package/commands/pan/research-phase.md +0 -189
  309. package/pan-wizard-core/bin/lib/bridge.cjs +0 -269
  310. package/pan-wizard-core/templates/research-project/architecture.md +0 -210
  311. package/pan-wizard-core/templates/research-project/features.md +0 -153
  312. package/pan-wizard-core/templates/research-project/pitfalls.md +0 -206
  313. package/pan-wizard-core/templates/research-project/stack.md +0 -126
  314. package/pan-wizard-core/templates/research-project/summary.md +0 -170
@@ -0,0 +1,107 @@
1
+ # Ecosystem Review & Enhancement Roadmap — June 2026
2
+
3
+ **Date:** 2026-06-10 · **Baseline:** v3.8.0 on `main` · **Status:** Findings + proposed roadmap (not yet scheduled)
4
+
5
+ This document records the June 2026 end-to-end project review combined with a market scan of the five target runtimes, cross-tool standards, and current model capabilities. It is the successor to the April 2026 review that produced `IMPROVEMENT-TODO.md`. Items here are proposals until promoted into the backlog or an ADR.
6
+
7
+ Counts (tests, commands, agents, modules) are deliberately omitted — `CLAUDE.md` is the single source of truth for counts.
8
+
9
+ ---
10
+
11
+ ## 1. Project review findings (internal)
12
+
13
+ The codebase is healthy: the 5-layer architecture is stable, the zero-runtime-dependency posture holds, release gates (`release:check`, `verifyInstall()`, doc-lint) are in place, and the CLAUDE.md count discipline is working (no count drift found). The v3.7 self-improvement loop's manual promote gate and the v3.8 doc–code link graph (ADR-0027) are conservatively scoped and well-tested.
14
+
15
+ Open internal debt (independent of market changes):
16
+
17
+ | Issue | Severity | Detail |
18
+ |---|---|---|
19
+ | ~~Failing git/rollback tests~~ | ~~Medium~~ | **FIXED 2026-06-10.** Root cause was not Windows-specific: with `tag.gpgsign=true` in user-global git config, plain `git tag` becomes sign-or-fail (`fatal: no tag message?`), so every PAN-created tag (rollback snapshots, milestone tags, `git tag create`) silently failed. Product fix: tag-creation sites pass `-c tag.gpgsign=false` (PAN tags are automation markers). Test fix: `makeGitRepo` helper pins signing off locally for hermeticity. Suite fully green for the first time. |
20
+ | Monolithic modules | Medium | `verify.cjs`, `commands.cjs`, `phase.cjs` are large; no compatibility-test harness exists, so decomposition is risky. Already tracked as P2 in `IMPROVEMENT-TODO.md`. |
21
+ | ~~Installer content verification~~ | ~~Low-Med~~ | **FIXED 2026-06-11 (both halves).** verifyInstall(): tracked files (and the dispatcher anchor) must be non-empty — the 0-byte silent-copy case fails verification with a distinct `empty` list (re-hashing was tautological: the manifest hash is computed from the already-broken file). Catch sweep: install-path failures that were silently swallowed now route through `pushInstallWarning` — skills-dir mkdir, stale-skill cleanup, shared-core mkdir, and the internal-learnings strip (a content-policy guarantee: a failed strip would ship source-only content). Probe catches (file-absent checks) and best-effort uninstall cleanup stay silent by design. |
22
+ | Hook build naming | Low | `build:hooks` copies files; esbuild devDep unused. Tracked P2. |
23
+ | ~~Runtime e2e coverage~~ | ~~Medium~~ | **FIXED 2026-06-11.** `tests/scenarios/runtime-roundtrip.test.cjs`: per runtime (plus the `--unified-skills` variant), install into a temp dir, extract the dispatcher path **from the installed command artifact itself**, and execute pan-tools through that exact path. Catches the format-migration class where converted content embeds a path that doesn't resolve — the failure mode unit tests on converters can't see. |
24
+
25
+ ---
26
+
27
+ ## 2. Market changes, Jan–Jun 2026 (external)
28
+
29
+ ### 2.1 Convergence on open standards
30
+
31
+ - **Agent Skills (`SKILL.md`)** became a cross-tool standard (agentskills.io). The neutral directory **`.agents/skills/` is read natively by Claude Code, Codex CLI, Gemini CLI, OpenCode (v1.16+), and Copilot CLI** — all five PAN runtimes. One skills tree can replace most of PAN's five-way command conversion.
32
+ - **AGENTS.md won** as the universal rules file — stewarded by the Agentic AI Foundation under the Linux Foundation (founders incl. Anthropic, OpenAI, Block); read natively by Codex, Copilot, OpenCode (primary), and the Gemini ecosystem. Claude Code still reads only CLAUDE.md; the sanctioned bridge is a CLAUDE.md containing `@AGENTS.md`. Nested AGENTS.md per subdirectory is normative for monorepos.
33
+ - **Plugin packaging everywhere**: Claude Code plugins (`.claude-plugin/`) bundle skills/agents/hooks/MCP/LSP/binaries — and **Copilot CLI consumes the Claude plugin format**. Codex has plugins + marketplaces (`.codex-plugin/plugin.json`, `marketplace.json` under `.agents/plugins/`); Gemini has extensions (`gemini-extension.json`).
34
+ - **Hooks now exist on every runtime**, not just Claude: Codex (`.codex/hooks.json`, Claude-like events/JSON, seconds timeouts), Gemini (`BeforeTool`-style names, settings.json, ms timeouts), Copilot (`.github/hooks/*.json` with **native `bash` + `powershell` dual keys**). The Copilot schema directly solves the recorded "hook commands must be cross-platform" feedback.
35
+ - **MCP**: the spec release of 2025-11-25 added async tasks and extensions; a stateless-core release candidate is locked for 2026-07-28 (no `initialize` handshake, plain load balancers work). Official registry still in preview — do not build distribution on it yet.
36
+
37
+ ### 2.2 Per-runtime changes affecting the installer
38
+
39
+ | Runtime | Change | Impact |
40
+ |---|---|---|
41
+ | **Gemini CLI** | **Stops serving free/AI Pro/Ultra individual users 2026-06-18** (announced 2026-05-19); replaced by **Antigravity CLI** (Go rewrite, `agy`, "Antigravity plugins", `plugin import` migrates Gemini extensions). Enterprise (Gemini Code Assist Standard/Enterprise) keeps Gemini CLI. | `--gemini` audience shrinks to enterprise. Need an Antigravity decision. Antigravity internals are third-party-sourced — verify before building. |
42
+ | **Codex CLI** | Custom prompts (`~/.codex/prompts/`) **officially deprecated → skills** (`.agents/skills/`, repo-shareable). Project agents now exist: `.codex/agents/*.toml` (TOML, `name`/`description`/`developer_instructions` + optional `model`, `sandbox_mode`, `mcp_servers`). Trust gate: untrusted projects silently skip `.codex/` config. Plugins + marketplaces GA. Models: GPT-5.5 (default), GPT-5.4, GPT-5.4-mini; reasoning effort `minimal..xhigh`. | Current PAN Codex output is on a sunset path; need md→TOML agent converter; installer should surface the trust gate. |
43
+ | **Copilot CLI** | GA v1.0 (2026-03-06). Custom agents = `.github/agents/*.agent.md` (frontmatter: `name`, `description` required, `tools`, `model`, `mcp-servers`, `target`). Skills = `/slash` commands from `.github/skills/`, `.claude/skills/`, `.agents/skills/`. Hooks = `.github/hooks/*.json` (12 events, bash/powershell duality, fail-closed preToolUse). Config renamed `.github/copilot/config.json` → **`settings.json`**; **reads `.claude/settings.json`** in the same repo. MCP at `.github/mcp.json`. Models: Claude Opus 4.8/Fable 5 + GPT-5.5 + Gemini, "Auto" routing. Native `/fleet`, `/autopilot`, `/goal`, `/memory`, scheduled tasks. | New native surfaces replace PAN's generic skill-wrapper adapter. Audit the `.claude/settings.json` cross-read for unintended interactions. Cloud coding agent reads `.github/agents/`, `.github/hooks/`, AGENTS.md — PAN content reaches cloud runs. |
44
+ | **OpenCode** | Repo moved to `anomalyco/opencode`. Directories now **plural** (`.opencode/commands/`, `agents/`, `plugins/`, `skills/` — singular is back-compat only). Agent frontmatter `tools`/`maxSteps` **deprecated → `permission`/`steps`**. Native Agent Skills support (also reads `.claude/skills/` and `.agents/skills/`). AGENTS.md primary rules file. | Migrate emitted paths + frontmatter; update repo links. |
45
+ | **Claude Code** | Commands folded into skills (`commands/*.md` = "legacy format"); SKILL.md frontmatter gained `effort`, `allowed-tools`/`disallowed-tools`, `disable-model-invocation`, `context: fork`, `arguments`, skill-scoped `hooks:`, `paths:` activation, dynamic `` !`cmd` `` injection (default shell bash — Windows caution). **Native Workflows** (`.claude/workflows/*.js` — JS orchestration scripts, fan-out subagents, become `/` commands). Hooks grew to ~30 events / 5 handler types incl. exec-form `args: []` (no shell). Subagent frontmatter: `effort`, `maxTurns`, `skills` preload, `memory`, `isolation: worktree`. Plugins: skills-dir plugins (no marketplace needed), dependencies, `userConfig`, `requiredMinimumVersion` managed setting. Agent teams (experimental), Routines (cloud cron, Apr 2026), auto-memory, `.claude/rules/*.md` with path scoping. **Agent SDK billing split eff. 2026-06-15**: `claude -p` / SDK / Actions usage moves to a separate credit pool. | Richest new surface set. `claude -p` billing change affects `runner.cjs` experiments. `requiredMinimumVersion` lets the installer assert a floor. CLAUDE.md at plugin root is NOT loaded as context. |
46
+
47
+ ### 2.3 Competitive landscape
48
+
49
+ Spec-driven/workflow tooling is now an arms race: GitHub Spec Kit (~93k stars), **GSD (~61k — closest PAN analog, but destabilized by a governance collapse; development forked to a community redux)**, BMAD-METHOD (~47k), OpenSpec, Amazon Kiro, Taskmaster (delivered as an **MCP server**, not file installs). "Ralph loops" / context-rot discipline went mainstream — validating PAN's state-discipline thesis. Parallel/cloud agents (Copilot `/fleet` + agents panel, Claude agent teams + Routines, Codex cloud) mean `.planning/` will increasingly face concurrent readers/writers.
50
+
51
+ **Positioning:** sit above runtime-native orchestration as the planning/state/verification layer; move on multi-runtime messaging while GSD is destabilized.
52
+
53
+ ---
54
+
55
+ ## 3. Model alignment (most out-of-date area in the codebase)
56
+
57
+ Current lineup (verified 2026-06): **Claude Fable 5** ($10/$50 per MTok, 1M ctx, adaptive thinking only — explicit `thinking: disabled` is rejected), **Opus 4.8** ($5/$25, default in Claude Code), Opus 4.7/4.6, Sonnet 4.6 ($3/$15), Haiku 4.5 ($1/$5). `budget_tokens` returns 400 on Opus 4.7+; the cost/intelligence dial is **`effort`** (`low`/`medium`/`high`/`xhigh`/`max`). Codex: GPT-5.5/5.4/5.4-mini. Gemini: 3.1 Pro preview + auto-routing. Retirements 2026-06-15: `claude-sonnet-4-20250514`, `claude-opus-4-20250514`.
58
+
59
+ Concrete misalignments found:
60
+
61
+ 1. **Wrong pricing** — `pan-wizard-core/bin/lib/cost.cjs` (DEFAULT_RATES) lists `claude-opus-4-7` at $15/$75; actual is $5/$25 (≈3× overstatement of Opus cost records). Missing `claude-opus-4-8`, `claude-fable-5`, GPT-5.x; `gemini-1.5-pro` is a fossil.
62
+ 2. **Stale capability detection** — `bin/install-lib.cjs` `detectModelCapabilities()` keys on Opus 4.7 and Claude 3.5 Sonnet (retired Oct 2025). `bin/install.js` recommends "upgrade to claude-opus-4-7" (superseded twice).
63
+ 3. **Deprecated thinking controls** — ADR-0023 paths emit `thinking: enabled` + `thinking_budget`; replacement is adaptive thinking + `effort` (now expressible directly in Claude Code skill/agent frontmatter).
64
+ 4. **`model_profile` maps to the wrong dial** — quality/balanced/budget → tier swapping was right in 2025; in 2026 the primary within-model dial is `effort` (official guidance: `low` for subagents/scanners, `high` default, `xhigh` for coding/agentic).
65
+ 5. **Prompts tuned for the wrong model generation** — Opus 4.8/Fable 5 shifts affecting shipped content: under-reach for subagents/file-memory/custom tools unless told *when* to use them; "CRITICAL/MUST" language now overtriggers; "only report high-severity" review prompts depress recall (pan-reviewer); narration verbose by default (remove forced progress-update scaffolding); Fable 5 is explicitly trained to exploit persistent file memory — `.planning/` and the learnings system should lean into this.
66
+
67
+ ---
68
+
69
+ ## 4. Enhancement roadmap (proposed, priority-ordered)
70
+
71
+ ### P0 — Time-critical (June 2026)
72
+
73
+ 1. ~~**Gemini/Antigravity decision before 2026-06-18**~~ — **docs DONE + decision RECORDED 2026-06-10 (defer bespoke runtime; serve via `.agents/skills/`).** Done: `geminiTransitionNotice()` added to `install-lib.cjs` (pure, unit-tested) and printed after every `--gemini` install unless `--skip-warnings`; audience-change notes added to `README.md` (non-interactive install section) and `docs/USER-GUIDE.md` (installation locations). Smoke-tested in a temp dir (notice prints, suppressed by `--skip-warnings`); full scenario suite green. **Decision recorded 2026-06-10: defer the bespoke `--antigravity` sixth runtime; serve Antigravity through the shared `.agents/skills/` tree.** Verification status: official Google sources (Antigravity CLI codelabs, github.com/google-antigravity) confirm the global surface (`~/.gemini/antigravity-cli/` with `settings.json`, `skills/`, `plugins/`; `/plugin`, `/agents`, `/hooks` TUI commands), and the project-level `.agents/skills/` + root `AGENTS.md` read paths are corroborated by the official docs site plus multiple independent guides — this is the same Agent Skills standard PAN's Codex target already writes to, so PAN skills installed into `.agents/skills/` are natively consumable from Antigravity today (the `--gemini` transition notice now says so). What stays unverified at the primary-source level: the plugin bundle internals (`plugin.json`, in-plugin `agents/`/`hooks.json`/`rules/` formats) and `plugin import` of Gemini extensions — the official docs pages are not machine-readable and no primary spec was reachable. Building a full sixth runtime (agents + hooks + plugin packaging) stays blocked on that spec and is the natural shape of the v4.0 unified-target work (items 10–11), where Antigravity becomes a consumer of the standard tree rather than a bespoke conversion target. `--gemini` remains correct for Gemini Code Assist (Standard/Enterprise) customers.
74
+ 2. ~~**Model-table refresh**~~ — **DONE 2026-06-10.** `cost.cjs`: Opus 4.7/4.6 corrected to $5/$25, added `claude-opus-4-8` and `claude-fable-5`, removed retired `gemini-1.5-pro`, reasoning-tier fallback now tracks current Opus pricing. `install-lib.cjs` `detectModelCapabilities()`: added Fable 5 + Opus 4.8; corrected 1M-context flags for Opus 4.6 and Sonnet 4.6 (legacy 4.0–4.5 generations stay 200K). `install.js` upgrade recommendation now points at Opus 4.8/Fable 5. Tests updated/extended in `tests/cost.test.cjs` and `tests/installer-functions.test.cjs`; unit suite green apart from the pre-existing git/rollback Windows-env failures (§1). **Deferrals closed 2026-06-10 (same day):** GPT-5.5 ($5/$30) and Gemini 3.1 Pro ($2/$12, base tier; preview id aliased) added to `DEFAULT_RATES` after pricing was corroborated across the official pricing pages and independent trackers. `pan-tools models check` shipped: `cost.cjs` carries `RATES_VERIFIED_AT` and the command reports `{stale, age_days, ...}` once the table is older than the staleness threshold — re-verify pricing and bump the date when it fires. Documented in `CLI-REFERENCE.md`.
75
+ 3. ~~**Replace `thinking_budget` emission with adaptive/effort**~~ — **DONE 2026-06-10.** All agents that carried `thinking: enabled` + `thinking_budget:` now declare `effort:` instead (mapping: budget 4000 → `medium`, 6000 → `high`, 8000 → `xhigh`), which Claude Code consumes natively in the adaptive-thinking era. `translateThinkingDirective()` emits `{effort}` frontmatter for Claude and effort-scaled prose preambles for the other runtimes (no more token-count promises); legacy `{enabled, budget}` directives still work via a budget→effort mapping. `stripThinkingFrontmatter()` strips `effort` (plus the legacy pair) for non-Claude runtimes and injects the preamble. Tests updated in `opus-47-helpers.test.cjs`, `installer-functions.test.cjs`, and the debugger scenario test; full suite green apart from the pre-existing git/rollback failures (§1). **Note:** per-agent effort *tuning* (e.g. `low` for scanners) remains P1 item 5 — this item only retired the dead API surface with a faithful 1:1 mapping.
76
+ 4. ~~**Document the Agent SDK billing split (effective June 15, 2026)**~~ — **DONE 2026-06-10.** `runner.cjs` now tags captured claude-run metrics with `billing_pool: "agent_sdk"` (`null` for other runtimes) so `/pan:learn` and billing reconciliation can separate experiment spend from interactive spend. Documented in `docs/CLI-REFERENCE.md` (`experiment run --capture-metrics`) and `commands/pan/experiment.md` (run section billing note). Runner, experiment, lifecycle, and doc-lint tests green.
77
+
78
+ ### P1 — Format migrations (v3.9)
79
+
80
+ 5. ~~**Effort-aware model profiles**~~ — **DONE 2026-06-10.** `core.cjs` gained `AGENT_BASE_EFFORT` (all agents, mirroring shipped frontmatter) and `resolveEffortInternal()`: `budget` profile steps effort down one level (floor `low`), `quality`/`balanced` keep base, `config.json → effort_overrides` wins. `resolve-model` CLI now returns an `effort` field. The remaining agents without `effort:` frontmatter got values (planner `xhigh`; executor/roadmapper/optimizer `high`; researchers `medium`; document_code `low`). A drift test pins frontmatter ⇄ `AGENT_BASE_EFFORT` ⇄ `MODEL_PROFILES` key parity. Documented in `CLI-REFERENCE.md` and `commands/pan/profile.md`. Full suite at baseline.
81
+ 6. **Prompt re-tuning pass for Opus 4.8/Fable 5** — **surveyed + applied 2026-06-10; most items were no-ops because PAN didn't have the anti-patterns.** Findings from a full sweep of all shipped agents and workflows:
82
+ - **pan-reviewer → report-everything-filter-downstream: DONE.** Reframed the finder's `FOCUS: report real issues, not style preferences` constraint to a `COVERAGE` constraint — report every finding (incl. uncertain/low-severity) tagged to the right tier; the severity tiers, verdict, and the existing **pan-meta-reviewer** stage (`/pan:review-deep`, which already disputes overstated findings and removes duplicates) are the downstream filter. This is the migration guide's recommended pattern, and PAN already had the two-stage finder→filter architecture, so the change is precise, low-risk, and model-agnostic (helps GPT-5.x/Gemini reviewers too).
83
+ - **Soften CRITICAL/MUST: NO-OP (correctly).** Surveyed every CRITICAL/MUST in the agents (18 in pan-planner alone). They are legitimate correctness invariants — mandatory file reads, user-decision fidelity, requirement-ID integrity, TDD red/green discipline — **not** the tool-over-triggering anti-pattern the guide warns about. A mechanical softening sweep would have weakened genuine guardrails; deliberately not done.
84
+ - **Remove forced progress-update scaffolding: NO-OP.** No "after every N tool calls, summarize" scaffolding exists anywhere.
85
+ - **Silence-defaults / over-narration: NO-OP for the agent layer.** Leaf agents return tightly-structured `<output_format>` reports, not free narration.
86
+ - **Explicit delegate/memory triggers: DEFERRED (lower-confidence).** PAN's leaf agents don't spawn subagents or manage file memory — delegation happens in the orchestration layer (workflows/commands read by the main session), which already encodes explicit delegation logic. Adding "delegate/check-memory more" nudges there is subjective and better done with human review than a mechanical pass. Left for a maintainer.
87
+ 7. ~~**Codex migration**~~ — **DONE 2026-06-10** (verified against live developers.openai.com docs before implementing — notably `$CODEX_HOME/skills` is **no longer a read location**, so the old install target was dead). Skills now install to the shared `.agents/skills/` tree (project root for local, `~/.agents/skills/` for global), with legacy `.codex/skills/pan-*` swept on upgrade and uninstall; manifest stores `../.agents/skills/...` keys relative to the config dir (patch backups skip out-of-tree keys by design). Agents now emit as standalone `.codex/agents/pan-*.toml` via the new pure converter `convertClaudeAgentToCodexToml()` — `name`/`description`/`developer_instructions` plus PAN's `effort` mapped to Codex's native `model_reasoning_effort` (handled before the thinking-strip so effort survives). A `codexTrustNotice()` prints after local installs (project-scoped `.codex/` config loads only once the project is trusted). Tests updated (codex-install, installer-functions, command-discovery, workflow-commands scenarios); live install/uninstall smoke-tested; full suite at baseline.
88
+ 8. ~~**Copilot native surfaces**~~ — **DONE 2026-06-10 (hooks + settings).** Verified against live docs.github.com docs first. Findings: agents already install to `.github/agents/pan-*.agent.md` ✅ and commands already install as `.github/skills/pan-*/SKILL.md` ✅ — no change needed. **Hooks were the real bug:** PAN registered them in `.github/config.json` under a `hooks` key *without* `type: "command"`, but Copilot CLI reads hook config from `.github/hooks/*.json` with a `version: 1` envelope and `type: "command"` entries — so the old hooks almost certainly never fired. Fixed: new pure `buildCopilotHooksConfig()` writes `.github/hooks/pan.json` (cross-platform `command` key, since PAN hooks are `node`-invoked); reinstall migrates PAN hooks out of any legacy `config.json` (preserving foreign hooks); uninstall removes `pan.json`. Tests updated (copilot-install, installer-functions, hook-registration + settings-schema scenarios); live install/upgrade/uninstall smoke-tested; full suite at baseline. **Settings half resolved 2026-06-10** after primary-source verification (docs.github.com CLI configuration-directory reference): the rename is real but user-level — `~/.copilot/config.json` → `~/.copilot/settings.json` (auto-migrated by the CLI; `config.json` is now internal app state) — and the documented repo-level read paths are `.github/copilot/settings.json` + `settings.local.json`. `.github/config.json` is **not** a Copilot read path, and no `.claude/settings.json` cross-read exists. Fixed accordingly: statusline now writes `{type: "command", command}` to `~/.copilot/settings.json` (global) or `.github/copilot/settings.json` (local) — the old write was dead config in the wrong file with the wrong schema; the installer prints a note that Copilot's statusline is experimental (enable via `copilot --experimental`). Attribution reads `settings.json` with `config.json` legacy fallback; reinstall migrates PAN statusline/hooks out of legacy `config.json` (foreign keys preserved); fresh installs no longer create `.github/config.json`; uninstall cleans the new paths (removing the nested `copilot/` dir only if PAN-emptied). Tests updated (copilot-install incl. legacy-migration group, settings-schema scenario); live install/uninstall smoke-tested.
89
+ 9. ~~**OpenCode**~~ — **DONE 2026-06-10.** Commands now install to plural `.opencode/commands/` (agents were already plural); upgrade path removes PAN files from the legacy singular `command/`, uninstall cleans both, manifest keys use `commands/`. Agent converter emits `permission: {tool: allow}` instead of the deprecated `tools: {tool: true}` map. Docs updated (USER-GUIDE format table, ARCHITECTURE runtime table). No `sst/opencode` links existed in the repo (nothing to relink). `steps`/`maxSteps` was never emitted by PAN — no change needed. Smoke-tested live install (plural dir + permission frontmatter confirmed); full suite at baseline.
90
+
91
+ ### P2 — Strategic architecture (v4.0)
92
+
93
+ 10. **Unified `.agents/skills/` build target** — compile commands/workflows/references once into a standard skills tree consumed by all five runtimes; keep per-runtime conversion only for genuinely runtime-specific artifacts (agents, hooks, config). Largest simplification opportunity since the project started. **Promoted to ADR-0028 (2026-06-10); Phases 1–2 shipped same day** — `--unified-skills` opt-in installs the runtime-neutral tree for all five runtimes (proprietary-surface sweep, manifest/uninstall integration), backed by a shared runtime-neutral core at `.agents/pan-wizard-core/` and ref-counted shared-tree uninstall. Before default-on: per-runtime live discovery gates + agent-reference canonicalization. Phase 3 (plugin packaging, AGENTS.md layer) pending; also the recorded delivery path for Antigravity users (item 1).
94
+ 11. **Plugin/marketplace distribution** — **first slice SHIPPED 2026-06-11**: `npm run build:plugin` emits the verified Claude Code plugin layout (manifest, commands, agents, ${CLAUDE_PLUGIN_ROOT}-anchored hooks, core) at dist/pan-wizard-plugin/, alongside loose-file installs. Marketplace publishing gated on live verification of plugin-root expansion inside command markdown; Codex plugin + Gemini extension remain.
95
+ 12. ~~**Native Claude Code workflows**~~ — **first slice SHIPPED 2026-06-11**: hand-authored native scripts for the genuinely deterministic fan-out protocols (pan-review-pipeline, pan-map-codebase) install to `.claude/workflows/`, generated by the pure `buildNativeWorkflowScripts()` builder (syntax-validated in tests, resume-safe — no Date.now/Math.random). Deliberately NOT a markdown→JS transpiler: judgment-heavy protocols stay markdown; more scripts get added case by case when a protocol proves deterministic.
96
+ 13. ~~**Multi-runtime hooks layer**~~ — **SHIPPED 2026-06-11** (port half): Codex gets all four hooks via `.codex/hooks.json` (Claude-compatible PascalCase events, verified developers.openai.com; non-destructive merge alongside user hooks, idempotent reinstall, PAN-only strip on uninstall); Copilot gains cost + trace loggers on `subagentStop` (verified docs.github.com); `HOOK_EVENT_MAP` in install-lib encodes the canonical→per-runtime table; Gemini already carried all four. PAN hooks now instrument every runtime that supports hooks (OpenCode has none). **Deferred:** Claude exec-form `args: []` migration — PAN hooks are `node` invocations with no shell metacharacters, so the Windows bash-ism class doesn't apply to them; revisit only if a hook ever needs shell features.
97
+ 14. ~~**AGENTS.md universal rules layer**~~ — **SHIPPED 2026-06-11** (ADR-0028 Phase 3, first half): local installs upsert one marker-fenced PAN section into the project's AGENTS.md (idempotent across runtimes; user content untouched); Claude installs bridge CLAUDE.md via a fenced `@AGENTS.md` import; uninstall is ref-counted (section stripped only when the last PAN runtime leaves). Nested per-area AGENTS.md deferred until a concrete need appears.
98
+ 15. ~~**Concurrency-harden `.planning/`**~~ — **v1 SHIPPED 2026-06-11 (ADR-0030)**: lock.cjs (withFileLock advisory locking w/ stale-steal + writeFileAtomic temp-rename writes); writeStateMd() is the first adopter. Best-effort semantics — zero behavior change single-agent; strict mode + wider writer adoption are the escalation path.
99
+ 16. **Optional: MCP-server delivery of pan-tools** (stdio now; stateless HTTP after the 2026-07-28 MCP release) — Taskmaster proved the model.
100
+
101
+ ---
102
+
103
+ ## 5. Verification caveats
104
+
105
+ Flagged as secondary-source-only during research (verify before building): Antigravity CLI internals (`agy`, `.antigravity/agents/`, plugin import mechanics); exact GPT-5.2/5.3 shutdown dates; "32 tools support skills" count; AGENTS.md adoption figures; Codex profiles-as-separate-files syntax; Gemini CLI native AGENTS.md fallback.
106
+
107
+ Primary sources used: code.claude.com docs (skills, plugins, hooks, workflows, memory, routines, agent-sdk), platform.claude.com docs (effort, models, managed agents, release notes), developers.openai.com/codex (skills, hooks, subagents, plugins, config-reference, changelog), geminicli.com + google-gemini.github.io docs, developers.googleblog.com (Antigravity transition), opencode.ai docs + changelog, docs.github.com Copilot docs + github/copilot-cli changelog, agents.md, blog.modelcontextprotocol.io, anthropic.com news posts.
@@ -0,0 +1,349 @@
1
+ # Ecosystem Review & Strategic Plan — August 2026
2
+
3
+ **Date:** 2026-08-12 · **Tree:** main @ `be451c8` (v3.25.0, clean) · **Predecessor:** [ECOSYSTEM-REVIEW-2026-06.md](ECOSYSTEM-REVIEW-2026-06.md)
4
+
5
+ > **Scope.** A refresh of the June 2026 review against live sources, plus a planned response. The June review's *structural* conclusions held; what changed is that three items it filed as strategic or optional have become the category's table stakes, and one it ranked "Optional" (item 16, MCP delivery) is now the most under-exploited asset in the repo.
6
+ >
7
+ > **This document carries no counts about code.** Per CLAUDE.md's counts doctrine, every claim with members names the class and gives the command that enumerates it. Measurements are stated as the command that reproduces them, because a number written here is a maintenance debt nothing enforces.
8
+ >
9
+ > **Point-in-time.** Statuses were derived from the tree on 2026-08-12. Re-derive before relying on any of them: `git rev-parse HEAD && git status --porcelain`.
10
+
11
+ ---
12
+
13
+ ## 1. What changed since June
14
+
15
+ | Area | June 2026 position | August 2026 reality | Delta |
16
+ |---|---|---|---|
17
+ | **Agent Skills** | "became a cross-tool standard" | Public spec since 2025-12-18; ~40 platforms; three-tier progressive disclosure is normative; skills marketplaces at six-figure scale (SkillsMP, ClawHub, tonsofskills) | **Hardened into an ecosystem with distribution.** Not just a format anymore |
18
+ | **MCP** | "stateless RC locked for 2026-07-28" | **Shipped final 2026-07-28.** Stateless core, MRTR, header routing, cacheable lists, extensions framework. Tier-1 SDKs near half a billion downloads/month | **Landed.** PAN already tracks it ([ADR-0041](decisions/ADR-0041-mcp-dual-era-bridge.md)) — in the wrong subsystem |
19
+ | **Workflows-as-code** | "Native Workflows (`.claude/workflows/*.js`)" noted as a surface | Documented product with a stable primitive contract (`agent`/`parallel`/`pipeline`/`phase`/`log`/`args`), background execution, resume, plugin distribution, `/config` size guidelines, `ultracode` | **Matured into the answer for deterministic orchestration** |
20
+ | **Plugins** | "first slice shipped, marketplace gated" | Git-based distribution is how teams ship agent tooling; plugins bundle skills+agents+hooks+MCP as one versioned unit; Copilot consumes the Claude format | **The unit of distribution.** PAN builds one and ships it nowhere |
21
+ | **Competitors** | GSD destabilized, arms race | SDD is a mapped category (30+ frameworks). BMAD = 12-agent team sim; Spec Kit = spec-first breadth; GSD = lean Claude-native; Taskmaster = MCP-delivered task graphs | **Positioning still open**, but the delivery channel has consolidated |
22
+
23
+ ### The one-line read
24
+
25
+ The market did not diverge from PAN's thesis — it converged on it. Progressive disclosure, subagents with isolated context, state discipline against context rot, deterministic orchestration, behavioral evals: PAN shipped all five before they were standard. What the market also built, and PAN did not, is the **packaging and distribution layer** around those ideas. PAN's gap is not conceptual. It is that its correct ideas are expressed in a private idiom.
26
+
27
+ ---
28
+
29
+ ## 2. The mapping
30
+
31
+ | PAN construct | 2026 market primitive | Verdict |
32
+ |---|---|---|
33
+ | `commands/pan/*.md` | Agent Skills (`SKILL.md`, 3-tier disclosure) | **Structurally valid, tier-3 skipped.** Compiler emits a flat body; no in-bundle `references/`. See §3.1. **Superseded `2026-09-10`:** tier 3 works via `@` references and the compiler emits `compatibility`; see the correction at the top of §3.1 |
34
+ | `pan-wizard-core/workflows/*.md` | Skill resources (judgment) / `.claude/workflows/*.js` (deterministic) | **Split verdict.** The portable path must stay markdown; the deterministic fan-outs belong in code. See §3.2 |
35
+ | `agents/*.md` | Subagents — genuinely per-runtime, no standard | **Aligned; PAN pioneered it.** Newer frontmatter unadopted (`isolation: worktree`, `skills:` preload, `maxTurns`, `memory`) |
36
+ | `pan-tools` + core modules | **MCP server** | **Built, mis-aimed.** See §3.3 — the single highest-leverage finding here. **Superseded `2026-09-10`:** re-aimed and shipped in v3.26.0 (`pan-wizard-core/mcp/`, registered per runtime); see the IMPLEMENTED note in §3.3 |
37
+ | `hooks/*.js` | Lifecycle hooks | **Aligned.** Every runtime that supports hooks gets PAN's |
38
+ | `references/`, `learnings/` | Skill resources / `rules/*.md` path scoping | **Right pattern, wrong boundary** — progressive disclosure implemented by path reference from outside the bundle |
39
+ | `.planning/` | *No standard exists* | **The moat.** Durable planning state is unstandardized and PAN is furthest along |
40
+ | AGENTS.md section | AGENTS.md (Linux Foundation / AAIF) | **Aligned** |
41
+ | `dist/pan-wizard-plugin/` | Plugin + marketplace | **Built, unpublished.** gitignored, absent from `package.json` `files` |
42
+ | PanLoop harness | Agent behavioral evals | **Ahead of the category.** **Superseded `2026-09-10`:** PanLoop is gone from disk; its in-repo successor is `harness/` (ADR-0047), same verdict |
43
+ | `bridge.cjs` | MCP *client*-side tool use | **Stub** — discovery-only, auto-invocation deferred |
44
+
45
+ ---
46
+
47
+ ## 3. Planned moves
48
+
49
+ Three moves, ordered by leverage per unit of effort. Each states its finding as evidence, the decision, phasing, and the gate that proves it landed. None requires new architecture; all three are completions.
50
+
51
+ ### 3.1 — Finish the skills packaging (Move C in priority, listed first because it is prerequisite plumbing)
52
+
53
+ > **CORRECTED 2026-08-12, after checking the emitted tree instead of reasoning from the compiler source. Most of this section's premise did not survive.** What the plan called gaps are largely conformant already:
54
+ >
55
+ > - **Tier 3 works.** Skill bodies import the shared core with `@` references — root-relative (`@./.agents/pan-wizard-core/…`) for a local install, **absolute** for a global one, where a root-relative path would dangle. Both resolve; verified in both scopes. It is not *bundle-local*, which is a portability limitation, not a broken tier.
56
+ > - **Every hard spec rule already passes** across the whole emitted tree: `name` equals its parent directory (the requirement that actually gates discovery), the charset/hyphen and 64-char rules hold, and every `description` is present, single-line and inside 1024 chars.
57
+ > - **So P1 as written was the wrong call.** Copying the workflow and reference corpus into each of the emitted skill directories would duplicate it many times over to satisfy a shape, while PAN always ships the core alongside the skills. The single-source-of-truth arrangement is *better* here; the honest cost is only that a PAN skill is not a standalone bundle.
58
+ >
59
+ > **The trigger that reverses this, now concrete (found 2026-08-14).** Claude Code v2.1.224 hardened skills synced from claude.ai: their bodies **do not expand `@` files** (nor run `!` commands), and their descriptions are sanitized and labeled. That hardening applies to the claude.ai-sync path, not to local installs — so nothing is broken today. But PAN's entire tier 3 *is* `@` expansion. **Therefore: the moment PAN skills travel by any distribution path that disables `@` expansion, tier 3 goes dark and in-bundle `references/` stops being optional.** That is a sharper condition than "if a marketplace listing happens", and it is worth re-checking whenever a new distribution route is considered. Verify the current behaviour before acting — this is one release note, not a tested claim.
60
+ >
61
+ > **What was actually missing, and is now done:** the optional `compatibility` field (PAN needs Node and a `.planning/` directory — neither inferable from a body), plus a **spec-conformance suite**, which is the durable part. Nothing validated the emitted tree before: the pre-existing checks assert `name:` and `description:` are *present*, while the spec constrains their *values*. The new suite pins the value rules, asserts every `@` reference resolves on disk in both scopes, and leads with a non-vacuity guard — which immediately earned itself by catching that its own fixture was empty, a state in which four of the five assertions would have passed on nothing. `allowed-tools` stays unemitted by design (experimental; ADR-0028's rule is that unverified frontmatter waits for a live per-runtime check) and a test now guards against adding it prematurely.
62
+ >
63
+ > **Still genuinely open:** the body-budget item below (unchanged, and see its own note), and P4.
64
+
65
+ **Original finding (retained for the record).** The unified compiler (`convertClaudeCommandToUnifiedSkill` in `bin/install-lib.cjs`) emits a valid skill: `name`, `description`, `metadata.short-description`, adapter header, body. Two gaps were claimed against the spec:
66
+
67
+ 1. ~~**No tier 3.**~~ **Refuted above.** The emitted skill directory holds only `SKILL.md`, and PAN's progressive disclosure runs through path references into `pan-wizard-core/` from outside the bundle. That was read as a defect; it is a deliberate trade that avoids duplicating the corpus.
68
+ 2. **Body budget exceeded by a known class.** The spec recommends a SKILL.md body under ~5000 tokens. Enumerate the offenders rather than trusting a number here:
69
+
70
+ ```bash
71
+ for f in commands/pan/*.md; do t=$(( $(wc -c < "$f") / 4 )); \
72
+ [ $t -gt 5000 ] && printf "%6d %s\n" "$t" "$f"; done | sort -rn
73
+ ```
74
+
75
+ > **Note added 2026-08-12.** Measure the **emitted skill**, not the source command — the adapter header adds to every body, which pushes at least one command over the line that passes when measured at source. Substitute `.agents/skills/*/SKILL.md` in the loop after a `--unified-skills` install. Also weigh this before acting: the budget is a **recommendation**, the cost it describes is context consumed at activation, and the members are behavioural pipeline prompts. Splitting a multi-phase prompt changes what the agent reads and when, which is not verifiable by a size check — so this one wants live testing, not a mechanical split. It is the reason this item stayed open rather than being executed with the rest of §3.1.
76
+
77
+ As of this writing the loop returns the `focus-*` family only, and the largest member is multiples over budget. (`army.md` sits just under the line — near enough that any edit can push it over, so treat it as in the class for planning purposes even though the check passes today.) Every member is a command ARCHITECTURE.md documents as "self-contained … no workflow" — one that inlined its procedure instead of delegating it. **The design decision that made them self-contained is what put them over budget**, which is why the fix is a file-boundary move rather than a rewrite.
78
+
79
+ 3. Optional frontmatter the compiler never emits: `license`, `compatibility`, `allowed-tools`. `compatibility` is the one that matters — it is where "needs Node ≥18, needs a `.planning/` directory" belongs.
80
+
81
+ **Decision.** Split the oversized class along the boundary the spec already draws: activation-time instructions in `SKILL.md`, procedural detail in the bundle's own `references/`. This is not a rewrite — it is moving prose across a file boundary that PAN's architecture already respects conceptually.
82
+
83
+ **Phasing.**
84
+ - **P1** — Extend the compiler to emit `references/` inside the skill dir, and teach it to place workflow/reference content there instead of relying on an absolute path read. Keep the path-reference fallback for the runtimes that resolve it today.
85
+ - **P2** — Split the enumerated over-budget commands. Verify each stays under budget with the loop above, run as a test.
86
+ - **P3** — Emit `compatibility`; consider `allowed-tools` (experimental — gate on a live check per ADR-0028's own rule).
87
+ - **P4** — Flip `--unified-skills` default-on behind the per-runtime live discovery gates ADR-0028 already specifies. **This is the parked item**; the gates are a testing task, not engineering.
88
+
89
+ **Gate.** A test that walks every emitted skill dir, asserts `SKILL.md` body under budget, asserts `name` matches the parent directory (spec requirement — currently unverified), and asserts referenced resources resolve inside the bundle.
90
+
91
+ **Risk.** Low. Shared-tree failure domain is real but already mitigated by ADR-0028's per-runtime gates and the scenario matrix.
92
+
93
+ ### 3.2 — Scale the native-workflow bridge
94
+
95
+ **Finding, and it is better news than the June review implies.** `buildNativeWorkflowScripts()` already emits scripts that use the **exact current primitive contract** — `export const meta` with `phases`, `phase()`, `parallel()`, `agent()` with `{agentType, label, phase, schema}`, `log()`, `args`, `.filter(Boolean)` on nullable agent results, JSON Schema for inter-stage data. Someone verified this against the real spec. It is correct code against a live contract.
96
+
97
+ What is missing is coverage. Enumerate what exists:
98
+
99
+ ```bash
100
+ # scripts the builder emits, matched on the meta blocks inside its template
101
+ # literals (2-space indent + trailing comma):
102
+ grep -oE "^ name: 'pan-[a-z-]+'," bin/install-lib.cjs
103
+
104
+ # cross-check against the filenames written on install (this one also
105
+ # returns the hooks, so read it as a superset):
106
+ grep -oE "'pan-[a-z-]+\.js'" bin/install-lib.cjs | sort -u
107
+ ```
108
+
109
+ **Two traps worth recording, because both bit while writing this document.** A looser `grep "name: 'pan-…'"` over the whole file also matches the plugin manifest's own name and over-reports. And scoping with `sed -n '/function buildNativeWorkflowScripts/,/^}/p'` *under*-reports, because the emitted scripts are template literals containing lines that begin with `}`, so the range closes early. Use the two commands above, and prefer the filename cross-check as the tiebreaker — the same "an enumerable claim is a maintenance debt" lesson the [outstanding-work ledger](audits/OUTSTANDING-2026-08.md) records, reproduced here in miniature.
110
+
111
+ **Why this matters more than coverage usually does.** PAN has field telemetry, which almost nothing in this category has, and it says prose orchestration drops steps. PanLoop finding 0 measured auto-advance chain completion at 0/3, then 1/5, then 6/7, then 16/16 across the fix chain. The root cause on record: a prose orchestrator "executes the mid-document state bookkeeping of the ~600-line inline transition but drops the final spawn step at its lowest-context moment." The responses were prose reinforcement, then `pan-stop-guard.js` — a hook that *detects the drop after it happens* and blocks the session stop once.
112
+
113
+ That is a correct mitigation and it should stay. But the market moved orchestration into code for precisely this failure mode, and the official framing is explicit about the mechanism: the script holds the loop, the branching, and the intermediate results, so the model's context holds only the final answer. A script cannot skim past step 9. **PAN independently produced the empirical case for a change it has already built the machinery for.**
114
+
115
+ **Decision.** Promote deterministic fan-out protocols to native scripts, case by case, keeping ADR-0028's explicit refusal to build a markdown→JS transpiler. Judgment-heavy protocols stay markdown.
116
+
117
+ **The selection rule** (this is the part worth writing down): a protocol is a script candidate when its control flow is knowable before the run — fixed fan-out width, a barrier that is genuinely a barrier, a loop with a computable termination condition. It stays markdown when the *next step depends on reading the last result*. By that rule the candidates are the wave/fan-out protocols and the merge-and-verdict protocols; `transition.md` is the interesting case — its bookkeeping is deterministic and its decision is not, which argues for splitting it rather than porting it whole.
118
+
119
+ **Hard constraints to design against** (all verified against the live docs):
120
+ - **Claude Code only.** Workflows run in the CLI, Desktop, IDE extensions, `claude -p`, and the Agent SDK — all Claude surfaces. The other four runtimes have no equivalent. **The markdown workflows therefore remain the portable path and cannot be retired.** This move is additive acceleration on one runtime, never a migration.
121
+ - No filesystem or shell access from the script itself; agents do that work. PAN's existing scripts already comply.
122
+ - No module loading — `import()` fails before the run starts.
123
+ - Concurrency and total-agent caps apply; a fan-out of many small agents survives interruption better than one long agent (resume replays from the first unfinished agent onward).
124
+ - Scripts distribute in a plugin from a `workflows/` directory at the plugin root, namespaced `/<plugin>:<name>` — which is what ties this move to 3.3's packaging.
125
+
126
+ **Gate.** Per script: the emitted source parses, declares no forbidden construct, and its `meta.phases` titles match its `phase()` calls. Behaviorally, the honest gate is PanLoop — run the ported protocol against a deployed install and compare chain completion to the markdown path. That is the oracle-diffing doctrine from [stability patterns](../CLAUDE.md), applied to orchestration.
127
+
128
+ **Risk.** Medium, and concentrated in one place: a ported script that diverges from its markdown twin creates two behaviors for one command. Mitigation is the drift test pattern PAN already uses for squad rosters — pin the pair.
129
+
130
+ ### 3.3 — Re-aim the MCP server at PAN itself
131
+
132
+ **This is the finding of the review.** `pan-zcode/mcp/server.cjs` (now `pan-wizard-core/mcp/server.cjs`) is a zero-dependency, dual-era (legacy handshake + 2026-07-28 stateless) JSON-RPC MCP server over stdio. Check its coupling to the beta harness it was written for:
133
+
134
+ ```bash
135
+ grep -in "zcode\|z\.ai\|glm" pan-wizard-core/mcp/server.cjs # comments only
136
+ ```
137
+
138
+ It is **generic in protocol and logic** — the hits are comments plus one path assumption: the server resolved its default engine location by walking up to a root and back down into `pan-wizard-core/`.
139
+
140
+ > **Correction, recorded because an earlier revision of this section got it wrong.** That assumption was described here as "the only real coupling" and "precisely what P1 has to parameterize", implying the extraction was more than a file move. It was not. Once the module sits in `pan-wizard-core/mcp/`, the old two-levels-up form and a sibling-relative form resolve to the **identical** path — in the source tree and in an install alike, because the grandparent of `mcp/` contains `pan-wizard-core/` in both. Check it rather than trusting either claim:
141
+ > ```bash
142
+ > node -e "const p=require('path');const b='/x/pan-wizard-core/mcp';
143
+ > console.log(p.join(b,'..','..','pan-wizard-core','bin','pan-tools.cjs')===p.join(b,'..','bin','pan-tools.cjs'))"
144
+ > ```
145
+ > The real difference is narrower and worth keeping anyway: the old form requires the grandparent to hold a directory *named* `pan-wizard-core`, so it breaks under a vendored or renamed core, while the sibling form depends only on the layout it actually needs. **Net: the extraction is closer to a pure file move than this section originally claimed** — which makes the move cheaper, not harder.
146
+
147
+ Its own header states the thesis better than I can: *"the CLI's JSON contract IS the tool contract, so the PAN engine (pan-wizard-core) is reused byte-for-byte with no refactor."* `handle()` is a pure function over an injected spawn impl, so the protocol layer is unit-testable without stdio or a child process. The security posture is already right: `execFile` with an argv array and no shell, verb chosen from a registry allowlist, every argument validated to a strict shape before it becomes argv.
148
+
149
+ So PAN has a production-shaped MCP server for its own engine, sitting inside an experimental preview subsystem, aimed at a beta harness, gated on a verify spike against that harness — and **not delivered by the main installer at all**:
150
+
151
+ ```bash
152
+ grep -rn "mcpServers\|mcp.json" bin/install.js # returns nothing
153
+ ```
154
+
155
+ **The registry is not a stub — it is a correctly-designed thin slice**, which is better news and required correcting an earlier draft of this section. Enumerate all three of its surfaces; a grep of `pan_*` names in `tool-registry.cjs` alone misses two of them:
156
+
157
+ ```bash
158
+ grep -oE "uri: 'pan://[a-z]+'" pan-wizard-core/mcp/tool-registry.cjs # MCP resources
159
+ grep -oE "name: 'pan_[a-z_]+'" pan-wizard-core/mcp/tool-registry.cjs # spawn-backed tools
160
+ grep -oE "name: 'pan_[a-z_]+'" pan-wizard-core/mcp/native-tools.cjs # in-process tools
161
+ ```
162
+
163
+ What that returns is a design already making the right calls: read-only aggregators are exposed as **resources** (the module's own reasoning: "cheaper, side-effect-free, quota-friendly") while anything actionable is a **tool** carrying accurate `readOnlyHint`/`destructiveHint` annotations; a `FORBIDDEN_VERB` guardrail structurally refuses to ever expose a history-rewriting or force git op ("recovery is revert-only"); every argument is validated against a whitelist regex with a length bound before it can become argv; and the human merge gate is enforced by an out-of-band approval token that an agent-supplied value cannot satisfy.
164
+
165
+ So the correction to make loudly: **the pattern is right and proven; the work is coverage.** PAN's engine is a large documented CLI surface ([CLI-REFERENCE.md](CLI-REFERENCE.md)) and this slice reaches a fraction of it — but every verb added follows a template that already exists rather than inventing one. And Taskmaster proved the delivery model for this category; the June review said so and then ranked it "Optional."
166
+
167
+ **One asset here deserves separate notice, because it connects this move to §3.2.** The native tool `pan_next_action` is a deterministic state machine that answers "what should the agent do next" — plan / execute / verify / request_merge / await_approval / stop — with the safety caps and a regression circuit-breaker enforced *in code*. That is the same problem PanLoop finding 0 is about: a prose orchestrator dropping the next step at its lowest-context moment. **PAN-Z already built the deterministic orchestration graft the main product's measured defect calls for.** It is currently reachable only by a beta harness. Whether it should back the main chain is a genuine design question, not a foregone conclusion — but it should be asked, and §3.2's port list should be drawn up knowing this exists.
168
+
169
+ **Decision.** Promote the MCP bridge from a pan-zcode-internal component to a first-class delivery target of the main installer, and grow the registry to the useful subset of the CLI surface.
170
+
171
+ **Phasing.**
172
+ - **P1 — Extract, don't fork.** Move the protocol layer to a shared location both consumers require. One server, two consumers (main installer, pan-zcode). Forking it is the failure mode: it would create exactly the five-way drift class ADR-0028 exists to end.
173
+ - **P2 — Widen the registry along the existing pattern.** The core read aggregators are already resources, so this is extension rather than groundwork: add the reporting/foresight reads that have no side effects (`preview`, `cost`, `report index`, `validate health`, `links validate`) as resources or read-only tools, then reassess. **Read-before-write remains the safety ordering** — a write verb reachable over MCP is a write reachable by any connected client, and `.planning/` is the source of truth. Any write must arrive behind the same whitelist-regex validation and annotation discipline the registry already enforces, and must respect `FORBIDDEN_VERB`.
174
+ - **P3 — Register it.** `.mcp.json` for Claude Code, `.github/mcp.json` for Copilot, `mcp_servers` in Codex agent TOML — the per-runtime registration table belongs next to `HOOK_EVENT_MAP` in `install-lib.cjs`, which is the established pattern for exactly this shape of problem.
175
+ - **P4 — Ship it in the plugin.** Plugins bundle MCP servers; this is the same versioned unit as 3.1 and 3.2.
176
+
177
+ **Gate.** The existing dual-era suite (`tests/pan-zcode-mcp.test.cjs`) must stay green through the extraction — it is the regression oracle. Then a scenario test that installs, registers, and round-trips `tools/list` + one `tools/call` per registered verb. Per ADR-0041's own rule: **never advertise a protocol version whose method shapes are not actually implemented.**
178
+
179
+ > **IMPLEMENTED 2026-08-12 (P1–P3).** The bridge now lives at `pan-wizard-core/mcp/` and ships to every install; the registry gained the side-effect-free reads; the installer registers the server per runtime. What the work turned up, recorded because it is the durable part:
180
+ >
181
+ > - **Two of the four original MCP resources were DEAD from M1** — `pan://roadmap` and `pan://phases` each named a bare verb that requires a subcommand, so every read returned `Unknown <x> subcommand`. They survived because **every protocol test injects a fake spawn**; no test had ever read a resource through the real engine. Enumerate the surface and read each one before trusting it: `resources/list` proves a URI is *advertised*, not that it *works*.
182
+ > - **The resource/tool rule** now written into `tool-registry.cjs`: a resource must be readable on ANY project, including a bare directory. If "no data yet" is reported as an error, it is a tool. `roadmap analyze` and `preview phases` both exit non-zero without a roadmap, so both are tools. Check with `node pan-tools.cjs <verb> --cwd <empty-dir>; echo $?` before adding a resource.
183
+ > - **`defaultPanToolsPath()` had zero coverage**, so the whole suite would have stayed green had the relocation pointed the default at nothing — the server only spawns the engine at `tools/call` time, so the failure surfaces per-call in a deployed install and never at startup. Now covered and revert-proven.
184
+ > - **A repo-root-relative path in the registration table doubled** (`.github/.github/mcp.json`) because Copilot's config dir already *is* `.github/`. It installed and verified cleanly — a dead config path looks exactly like a live one on disk. Paths in `MCP_REGISTRATION` are **config-dir-relative**, pinned by a test that also covers the rows where `register: false`, so flipping one on later cannot inherit the bug.
185
+ > - **Deliberately not written:** Codex (MCP lives in `config.toml`; PAN is zero-dep with no TOML merge, so it prints a snippet) and Claude *global* (`~/.claude.json` is keyed by every project path the user has opened). Both recorded with rationale in the table rather than left as gaps.
186
+
187
+ **Risk.** Low-to-medium. The protocol code is tested and already handles the hard part. The real risk is scope: an MCP surface is an API, and APIs are forever. Keep the registry deliberately smaller than the CLI, and treat the allowlist as the contract.
188
+
189
+ ---
190
+
191
+ ## 4. What not to do
192
+
193
+ - **Do not retire the markdown workflows.** They are the only portable orchestration path across five runtimes. §3.2 is additive on one of them.
194
+ - **Do not chase a sixth runtime.** June's decision — serve new harnesses through the standard tree — is more correct now than when it was made, because the standard tree got an ecosystem.
195
+ - **Do not standardize `.planning/`.** No standard threatens it. It is the differentiator, and "the planning/state/verification layer above runtime-native orchestration" remains the right position.
196
+ - **Do not soften PanLoop.** A behavioral eval harness that catches what static review misses is rare in this category. It found the case for §3.2 by measurement.
197
+ - **Do not publish to a skills marketplace on quality grounds alone.** These marketplaces index public repos without certifying safety; being listed is distribution, not endorsement. Ship the plugin (a versioned, auditable unit) first.
198
+
199
+ ---
200
+
201
+ ## 5. Verification caveats
202
+
203
+ Primary sources read for this refresh: `code.claude.com/docs/en/workflows` (fetched in full — the primitive contract, constraints, plugin distribution, and permission model in §3.2 come from it directly), `blog.modelcontextprotocol.io` (the `2026-07-28` spec), plus search-level corroboration for Agent Skills adoption scale, the SKILL.md frontmatter/progressive-disclosure spec, plugin/marketplace practice, and the SDD competitive map.
204
+
205
+ Flagged as **secondary-source-only — verify before building on**:
206
+ - Skills-marketplace scale figures (six-figure counts vary wildly by source and are self-reported by the marketplaces).
207
+ - The "~40 platforms" adoption figure, which was already flagged in June's caveats in its earlier form.
208
+ - Exact `allowed-tools` semantics — labelled experimental in the spec; gate on a live check per ADR-0028's frontmatter rule.
209
+ - Per-runtime MCP registration paths in §3.3 P3 — these move, and June's review caught two dead config paths (Copilot hooks, Codex skills) exactly this way. **Verify each against its live docs before writing the installer table.**
210
+
211
+ **Refresh cadence.** The June review aged usefully in two months: nothing it said became wrong, but two "strategic" items became table stakes and one "optional" item became the best asset in the repo. That is the natural period for this document. Re-run it around October 2026.
212
+
213
+ ---
214
+
215
+ ## 7. Two-day delta (checked 2026-08-14)
216
+
217
+ A spot-check two days after §1 was written. Nothing here invalidates the plan; three items are actionable and one closes a risk. **All from the official Claude Code changelog and the Agent Skills spec — but each is a release note rather than a tested claim, so verify before building.**
218
+
219
+ | Finding | Version / source | Bearing on PAN |
220
+ |---|---|---|
221
+ | **Plugin marketplace `command` sources** — "a local command … prints the plugin directory, which is re-resolved each session and applied without a restart; `mode: \"link\"` uses it in place" | Claude Code v2.1.229 | **The most useful thing here.** PAN builds a plugin and ships it nowhere, because publishing was gated on verifying `${CLAUDE_PLUGIN_ROOT}` expansion inside command markdown. A `command` source sidesteps a hosted marketplace entirely: point it at a command that prints `dist/pan-wizard-plugin`, and `mode: "link"` consumes it in place with no copy. That is a real distribution path for dev, teams and CI **today**, and it also gives the gated expansion question a cheap live test bed |
222
+ | Plugins accept `"."` as a `skills` path | v2.1.221 | Small enabler for the same work — a plugin can declare its root as the skills path |
223
+ | **claude.ai-synced skills no longer expand `@` files** | v2.1.224 | Qualifies §3.1's deferral with a concrete trigger — see the note in that section. PAN's tier 3 *is* `@` expansion |
224
+ | MCP client no longer hangs 30s on a malformed protocol-version probe reply | v2.1.226 | **Checked PAN against this failure mode: clean.** `server/discover`, the legacy `initialize` (with and without a version), a modern `params._meta` version, and an unsupported version all answer in well under a millisecond — the last with `-32022` plus `supported`/`requested`. It always answers; there is no hang path. (Note the probe shape: `_meta` lives **inside `params`**. Putting it at the top level silently reads as legacy) |
225
+ | Subagent forking on by default; `subagent_type: "fork"` inherits full conversation **and prompt cache**; non-teammate spawns run in background by default | v2.1.232 | Worth a decision rather than adoption. PAN's quality guarantee is the *opposite* — every agent starts from zero context. Forking trades that for cache reuse, so it suits a cheap same-context follow-up, never the planner/verifier chain. The background-by-default change may also alter how `/pan:exec-phase` waves surface to a user |
226
+ | Self-hosted runners (`claude self-hosted-runner`), plus server-supplied hooks for those sessions | v2.1.224 / v2.1.229 | Relevant to the army/campaign story for teams who cannot send repo contents off-network. Note the boundary: checkouts, artifacts and secrets stay on your infra, but the conversation — prompts, responses, tool results — still goes to Anthropic for inference. Not a data-residency claim PAN should make on its behalf |
227
+ | MCP `Roots`, `Sampling` and `Logging` deprecated in the `2026-07-28` revision | MCP spec | **Retroactively validates ADR-0041's scope boundary**, which declined MRTR on the grounds that the bridge has no sampling/elicitation/roots. The features it chose not to build are the ones being removed |
228
+ | Market position: OpenCode leads open-source agents by stars; the common stack pairs a frontier terminal agent with an open-source one **through the same MCP servers** | Aggregators (secondary) | Independent support for §3.3's premise: MCP is the interoperability layer, so one PAN bridge serves both halves of that stack. Treat the ranking numbers as self-reported |
229
+
230
+ **Acted on immediately:** two spec rules PAN satisfied by construction but not by test — no angle brackets in frontmatter (a prompt-injection vector the spec warns about, and PAN inherits `description` from each command, so a future bracket would open it silently) and the closed set of allowed top-level keys. Both now guarded and revert-proven.
231
+
232
+ **The `command`-source distribution is now built as a test bed** (`marketplace/`, `scripts/plugin-path.js`, and a plugin-only `/pan-plugin-selftest`). See `marketplace/README.md` for the two commands that run it.
233
+
234
+ **ANSWERED 2026-08-14 — `VERDICT: case A`.** Run on Claude Code **2.1.233**, Windows, by installing the plugin from the `command`-source marketplace and running `/pan-plugin-selftest`. Probe 1 returned a real absolute path into the plugin cache with **no placeholder text surviving**; probe 3 confirmed pan-tools runs through that path. **The plugin-root placeholder does expand inside command markdown, PAN's existing content rewrite is correct as it stands, and marketplace publishing is unblocked.**
235
+
236
+ **Probe 2 is the finding worth carrying, and it corrects the probe's own case-B description.** `CLAUDE_PLUGIN_ROOT` is **not** exported into the Bash tool's environment — it read empty. So textual substitution and shell expansion are **not interchangeable**: content must keep using the substituted form, because a shell evaluating `$CLAUDE_PLUGIN_ROOT` at runtime gets an empty string. Case B was written assuming a shell would rescue that path; on this environment it would not, and case B would have behaved as case C. The probe text now carries that caveat so a future run does not inherit the wrong premise.
237
+
238
+ Treat this as one measurement on one version and one platform. Re-run after a Claude Code upgrade rather than assuming it holds.
239
+
240
+ **A second result came free from the same install: the plugin's `.mcp.json` works.** The bridge registered as `pan` and answered a real `tools/call` returning engine JSON — confirming §3.3's P4 end to end, not merely that the file ships in the bundle. Shipped *and* declared *and* reachable.
241
+
242
+ Two constraints found while building it, both from primary docs and both of which a changelog-level reading would have gotten wrong:
243
+
244
+ - **`mode: "link"` is unsupported on Windows** — Claude Code refuses a link-mode plugin there. The changelog line advertises link mode as the interesting part; on this project's own development platform it is unusable. The entry declares `"copy"`, and a test pins it.
245
+ - Command sources need **v2.1.229+**. On v2.1.120–v2.1.228 the install fails with a specific message, and on older versions **the whole marketplace fails to load** — so a user on an older build sees the marketplace break, not just this plugin.
246
+
247
+ Also worth recording about the probe's design: it separates *textual substitution in markdown* from *the environment variable being set*. A probe that merely ran a shell command through the placeholder would pass whenever `CLAUDE_PLUGIN_ROOT` is exported into the tool environment and prove nothing about markdown — a false positive that would have "unblocked" publishing on no evidence. The three outcomes are labelled `case A` / `case B` / `case C`, and case B is the genuinely awkward one: shell invocations in content keep working while `@` file imports do not.
248
+
249
+ ---
250
+
251
+ ## 6. Recommended sequence
252
+
253
+ 3.3 first, then 3.1, then 3.2.
254
+
255
+ 3.3 is the cheapest by a wide margin — the hard part is written and tested, the work is a registry and a registration table — and it opens a distribution channel PAN currently has no presence in. 3.1 is prerequisite plumbing for the plugin that 3.2 and 3.3 both want to ship inside, and its P4 unparks work already done. 3.2 is last not because it matters least — it addresses a measured product defect class — but because it is the only one with genuine behavioral risk, and it is worth doing after the packaging that distributes it exists.
256
+
257
+
258
+ ---
259
+
260
+ ## 8. Four-week delta (checked `2026-09-10`)
261
+
262
+ An interim scan run ahead of the October re-run. Nothing here invalidates the plan; §3.2 is still the only open move. One finding the August pass missed outright: **Agent Plugins**, a vendor-neutral plugin bundle published on `2026-08-06` that Copilot CLI, Codex and Antigravity now load natively (Antigravity from the workspace `.agents/plugins/` tree) — it collapses the remaining per-runtime packaging work into one emitted bundle, with Claude Code keeping its own format. Also found: a stale rate row for the current default Claude model, a Claude plugin build that omits the native workflows, per-bucket prompt-cache TTL controls that leave every subagent on the short lifetime, and async observer hooks on Codex.
263
+
264
+ The findings table and the prioritised, sized queue live in [specs/market-delta-2026-09-superplan.md](specs/market-delta-2026-09-superplan.md). That file also records what remained unverified at scan time (the Agent Plugins field-level schema and vendor-directory names) and gates each item on a primary-source check before building.
265
+
266
+
267
+ ---
268
+
269
+ ## 9. Reality check (run `2026-09-10`, evening — first run of `/reality-check`)
270
+
271
+ A same-day re-verification after the §8 scan, run as the first execution of the new `/reality-check` dev skill against branch `feat/market-delta-2026-09-s1` @ `5684d38` (PR #29 open, every check green, mergeable; the commits since the `v3.27.0` tag are unreleased). The findings table, the sized queue and the sources live in the addendum at the end of [specs/market-delta-2026-09-superplan.md](specs/market-delta-2026-09-superplan.md), and the step-by-step execution plan for every item is [specs/reality-check-2026-09-superplan.md](specs/reality-check-2026-09-superplan.md); this section records what changed in the picture.
272
+
273
+ **What held.** The suite, every release gate and the harness's model-free tier are green on a packed artifact installed into all five runtimes; every MCP resource the installed bridge advertises reads through the real engine on a bare project; the rate rows match the provider pricing page read today; the Agent Plugins bundle keeps its placeholder out of `command`, which the spec now states explicitly. Reproduce with `npm run test:all`, `node scripts/release-check.js`, `npm run harness`, and Phase 1.3 of the skill.
274
+
275
+ **What did not.**
276
+
277
+ | Finding | Evidence | Bearing |
278
+ |---|---|---|
279
+ | **"Fable 5.1 is Claude Code's default" is false.** | `code.claude.com/docs/en/model-config`: "Neither Fable model is the account-type default on any plan or provider"; `default` is Opus 5 or Sonnet 5 by plan; the `fable` and `best` aliases resolve to Fable 5.1 | The S1 rate fix stands (users on the alias were over-billed), but the unreleased CHANGELOG, the `cost.cjs` comment and F2/1b of the plan give a wrong reason. Correct before release — **Done (R1, `2026-09-10`):** the CHANGELOG entry and the `cost.cjs` comment are reworded |
280
+ | **`validate health` exits 0 on `status: broken`.** | `cmdValidateHealth` calls `output()` without an exit code; the health payload's `errors[]` sits outside the error family CLI-REFERENCE defines, and CLI-REFERENCE says verdict commands set the code explicitly. No test pins it | An orchestrator gating on the exit code reads a broken project as healthy — **Fixed (R2, `2026-09-10`):** `verify.cjs` exits 1 on `broken`, pinned by tests |
281
+ | **§8's "BMAD and GSD: no release since May 2026" is false for both.** | BMAD `v6.11.0` (`2026-08-10`) and `v6.12.0` (`2026-09-04`); GSD's upstream repository was archived on `2026-06-26` and the project continues as **`open-gsd/gsd-core`** with releases `v1.11.0` to `v1.13.0` inside the window | gsd-core is PAN's closest peer and was read as dormant. See the convergence note below |
282
+ | **COMPARISON.md is a March snapshot.** | "MCP Support: via host tool" (PAN ships and registers its own server); "nobody else does this" on plan verification and "no competitor offers structured UAT" (gsd-core ships a plan-checker gate and a manual UAT walkthrough; Spec Kit ships cross-artifact analysis); Continue.dev has been read-only since June; Windsurf is Devin Desktop and removed Cascade on `2026-09-08`; Aider's last release predates the window by a year | The false statements are corrected in this run and the date moved; the matrix refresh is queued — **Done (R5, `2026-09-10`):** matrix refreshed and the spec-driven peer table added |
283
+ | **README promises a prompt that does not exist and embeds a hook count.** | The installer prompts for runtime only and defaults to local silently. The Hook System row carries a number, against the counts doctrine, and the number is wrong | Queued — **Done (R4, `2026-09-10`)** |
284
+ | **Several "leads" are Claude-only or capped, and the README does not say so.** | Bot army and fresh-context spawning are code-verified on Claude Code and prose-adapted elsewhere; the plan-checker loop caps at three passes; per-task commits coalesce trivial tasks; reviewer-class agents pin a model despite "every agent inherits"; the abort kill-switch is prompt-enforced | A README accuracy pass, queued — **Done (R4, `2026-09-10`)** |
285
+ | **OpenCode's local config path is live but undocumented.** | PAN writes `.opencode/opencode.json`; the docs page lists only a repo-root `opencode.json`, while the loader source reads `opencode.json` and `.jsonc` inside any `.opencode` directory | Cite the loader, not the docs page, in `MCP_REGISTRATION`; add OpenCode and Gemini live-gate scenarios, which the harness lacks — **Done (R6, `2026-09-10`):** `MCP_REGISTRATION` cites the loader; OpenCode and Gemini live-gate scenarios added |
286
+ | **Four priced models resolve to no rate.** | Both Mythos ids and the dated Opus 4.5 and Sonnet 4.5 ids return `null` from `resolveRate`; all four are on the pricing page today | A primary citation exists, so the "no rate without a source" rule now permits the rows — **Rows added (R7, `2026-09-10`)** |
287
+ | **The Agent Plugins bundle on disk was stale.** | `dist/pan-agent-plugin/` predated the S3 vendor-directory commit; the Codex and Copilot marketplaces resolve to that path with no rebuild-on-resolve, unlike the Claude `command` source | A stale bundle ships silently; gate it — **Gated (R10, `2026-09-10`):** release Gate 8 refuses a stale bundle |
288
+
289
+ **Model-tier evidence from the same evening (a concurrent session's run, not this one's).** The tracked ledger and `d:/pantesting/harness-runs/run-20260910-190841-i1aw` record a five-rep tier-2 run of the markdown exec-phase chain on build `3.27.0` @ `8e776bf` under a twenty-dollar cap: three reps completed, one exited non-zero with `passed=false`, one produced no summaries and no source files. The native `pan-exec-waves` chain got no measurement at all: every rep was budget-starved before its first step by the pre-fix equal split, which `87e53c9` then corrected. Two later tier-1 runs of `plugin-agent-scope` spent nothing, finished in seconds and printed neither greppable line, which reads as a probe wiring fault rather than a product verdict; both stay open in the ledger. **So the chain-drop class that PanLoop closed at 16/16 is measurable again and sits at three of five on this seed and this Claude Code build.** Item 5c, the markdown-versus-native oracle comparison, is now the highest-value spend in the queue (R19).
290
+
291
+ **Item 5c measured (`2026-09-10` into `2026-09-11`).** Both chains, five reps each, on the harness's two-plan seed, Claude Code `2.1.233`, build `7d8696a`/`68f7f86` of this branch. The markdown `/pan:exec-phase` completed **five of five** (mean $4.97 and 14.4 minutes per rep; runs `run-20260910-214704-wgJSxr`). The native `/pan-exec-waves` completed **five of five** with a verification file in every rep (mean $4.71 and 12.3 minutes; run `run-20260910-235141-ITzx9T`) — about 15% faster and a few percent cheaper, and by the August decision rule (ship the native path only if it completes at least as often) **the native path is now the recommended way to run a checkpoint-free phase on Claude Code**. The chain-drop class PanLoop closed at 16/16 reads 10/10 across both paths here; the morning's three-of-five was a budget-starved run. One finding on the way, worth more than the comparison: every native rep before this measurement died at ~605 s with `Workflow aborted`, because headless `claude -p` abandons a background Workflow after ten minutes by default (`code.claude.com/docs/en/headless`, "Background tasks at exit"; lifted with `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`). Interactive sessions never hit it; every harness or CI driver does. The harness now lifts it and persists each model step's output; the finding the ceiling had filed was withdrawn, along with two filed by a probe that never ran. A second: an aborted workflow's agent spend is dropped from `claude -p`'s `total_cost_usd` along with its result, so a budget cap cannot see what a killed workflow cost.
292
+
293
+ **Convergence, restated.** The market kept moving onto PAN's thesis, and one peer now occupies most of the same ground: gsd-core uses a `.planning/` tree with the same core files, a plan-checker gate, a verifier with manual UAT, an MCP server, quality/balanced/budget model profiles, a Claude plugin, and lists more runtimes than PAN targets. Spec Kit (`v1.0.0` on `2026-08-21`, then a steady run of point releases) added declarative workflows with loops and an event dispatcher plus cross-artifact analysis. Superpowers runs a behavioural harness against real tool sessions. Codex and Copilot converged on Agent Plugins; Cursor and Devin Desktop moved to parallel agents in worktrees. So the August read holds with one amendment: **the gap is no longer only packaging, it is publication and positioning.** PAN builds both plugin formats and publishes neither beyond npm, while BMAD, Superpowers and gsd-core are one `plugin install` away on the runtimes' own marketplaces. And the "no competitor does this" language is now false where it was checked.
294
+
295
+ **Where PAN is still ahead, with the evidence that says so.** A behavioural harness that installs from a packed, content-identified artifact and keeps a findings ledger (only Superpowers has a comparable harness, and not in CI); an MCP surface with a code-enforced forbidden-verb list and a nonce-bound human merge gate (gsd-core exposes its engine over MCP; nothing read enforces a merge gate in code); a cost ledger whose rate table tracks cache-read economics (no peer's ledger was found); the learnings store with a lint gate; native Claude Code workflow scripts pinned to their markdown twins; zero runtime dependencies (Spec Kit and BMAD need Python and uv). The bot army is unique and Claude-only.
296
+
297
+ **Roster change.** Add **OpenSpec** (Fission-AI; the largest spec-driven project by stars, releasing steadily through the window). Treat **Taskmaster** as dormant (no release since `2026-03-31`). Read GSD at `open-gsd/gsd-core`.
298
+
299
+ **What not to do — re-affirmed, two additions.** Every entry from §4 and the plan still holds. Added: *do not describe `.planning/` as unthreatened* — the layout is shared with gsd-core, so the differentiator is the depth of what PAN does with it, and hygiene should recognise a foreign layout rather than call it broken; *do not write "no competitor" or "nobody else" in an evergreen doc without a dated peer check* — such claims were false today where checked.
300
+
301
+ **Cadence.** This run replaces the interim; the full October re-run stands. Re-run earlier if gsd-core or Spec Kit ships an MCP or harness change, if a runtime drops a path PAN writes, or if the `fable` and `best` alias target moves.
302
+
303
+ ---
304
+
305
+ ## 10. Reality check (run `2026-09-22`, queue executed `2026-09-23`)
306
+
307
+ The second run of `/reality-check`, against `main` @ `371a76b` (`3.29.0`), reported to chat; its queue was executed the next day on branch `feat/reality-check-2026-09-22`. The findings, the items with their statuses and the sources are the second addendum of [specs/market-delta-2026-09-superplan.md](specs/market-delta-2026-09-superplan.md).
308
+
309
+ **A correction to §9.** §9's "What held" says the rate rows matched the provider pricing page read that day. That held for the Anthropic rows only. The Gemini rows' cache reads were two and a half times their page, OpenAI's newer families had started billing cache writes the rows did not charge, the bare `gpt-5.6` carried a price no page listed, and Codex's documented default had no row. §9 is left as written; this section is the correction.
310
+
311
+ **What changed in the picture.**
312
+
313
+ - **The default Claude model moved under PAN.** Claude Code `2.1.280` made Claude Opus 5.5 the default on every plan on `2026-09-22`, and PAN's inherit tier ran on it at the previous Opus row's price (cache reads two and a half times high). A calendar rule could not have caught it inside twelve days; a fixture of each runtime's documented defaults now does.
314
+ - **Gemini CLI never ran three of PAN's four hooks.** PAN wrote Claude's event names into Gemini's settings from v3.4 on, and Gemini's hook registry skips names outside its own vocabulary with a warning. Every test passed, because each was generated from the installer's own table. Gemini now gets the update check and the stop guard (on its `AfterAgent` event) and nothing it cannot run; a vocabulary fixture pins every runtime's emitted keys against its documentation.
315
+ - **The unified skills tree left Claude Code with no commands.** Every other target runtime reads `.agents/skills/`; Claude does not. The installer now gives Claude its own copy, and the flat skill shims Claude had never loaded are gone.
316
+
317
+ **Cadence.** The October re-run stands. This run adds one trigger to re-run early: a new default model on any target runtime.
318
+
319
+ ## 11. Reality check (run `2026-10-11`)
320
+
321
+ Run on `feat/memory-optimization-2026-10` @ `4994ed5` (`3.34.0`, released `2026-10-10`) plus a same-day doc audit's working tree. Window `2026-09-22` → `2026-10-11`. The suite, every release gate, CI on `main` and harness tier 0 pass; a packed install writes every claimed surface on all five runtimes, and every MCP resource reads cleanly through the real engine on a bare project.
322
+
323
+ | Finding | Bearing | Queue |
324
+ |---|---|---|
325
+ | OpenCode 2 (`@opencode/cli`; 1.19.0 moves users there) normalises PAN's v1 config in memory, and its published schema is still v1, but its plugin loader needs `setup` or `effect`, so PAN's compaction plugin does not load | The one v2 break; keep writing v1 config | R45, R47 — shipped in `3.35.0` (`18efcb5`); the OpenCode 2 load is unit-tested only, live check R51 (§12) |
326
+ | The verifier's test gate is enforced by its prompt only; the recorder warns on a failed gate filed as `passed` and keeps the status | A claim stronger than the code | R46 — shipped in `3.35.0` (`18efcb5`): a failed test gate lowers `passed` to `gaps_found`, and the phase gate refuses it |
327
+ | README and COMPARISON claimed more than the code for the test gate, the MCP caps, UAT, budgets and plugin publication | Fixed the same day | — |
328
+ | Several inherited statuses were wrong (corrections listed in `docs/specs/market-delta-2026-09-superplan.md` and the October queue's Addendum) | Docs, not code | — |
329
+ | Two harness findings (`resume-cost`, `memory-not-loaded`) have never passed a live re-run | Behaviour unproven | R49 |
330
+ | Superpowers v7.0.0 extends its distribution (Claude, Codex-curated and Grok official marketplaces) and its eval lab | Publication remains PAN's gap (MI-025) | — |
331
+
332
+ **Convergence read holds:** the market keeps moving onto PAN's thesis (durable per-plan ledgers, fresh-context implementers, verification gates, explicit model choice, behavioural evals); the gaps are publication and the cost of fresh-context fan-out. **What not to do** adds one entry: do not emit OpenCode v2 config shapes. **Cadence:** re-run around `2026-11-22`, or earlier if OpenCode 2 becomes the default install or a host drops a path PAN writes. **Realigned `2026-10-12`:** the queue is `docs/specs/product_excellence_program_2026_q4_featureai.md` (R45 in W1, R46 by V9/V1); publication is deferred to its Exposure phase.
333
+
334
+ ## 12. Reality check (run `2026-10-19`, delta)
335
+
336
+ Run on `claude/quirky-thompson-2c5aa3` @ `127389f` (`3.36.0`, released `2026-10-19`, plus one unreleased release-workflow fix). Window `2026-10-11` → `2026-10-19`; the same-day `/market-ideas` scan supplied the market read. The suite, every release gate, CI on `main` and harness tier 0 pass. The Antigravity live gate skips because `agy` is not installed. A packed install wrote every claimed surface on all five runtimes, and every MCP resource read cleanly through the real engine on a bare project. The Anthropic and OpenAI rate rows match their pricing pages as read today.
337
+
338
+ | Finding | Bearing | Queue |
339
+ |---|---|---|
340
+ | Claude Code refuses a subagent's write to `summary.md` (and `report.md`, `findings.md`, `analysis.md`); reproduced live on this machine | The research synthesizer and the conductor write such a file, so research synthesis fails at its write step on Claude Code | M44 |
341
+ | §11's first two rows, the product-excellence superplan's release state and several queue statuses describe work as open or unreleased that shipped in `3.35.0` or `3.36.0`; COMPARISON's leading rows omit the code-enforced phase gate and test gate | Docs, not code | R50 |
342
+ | The `3.35.0` changelog says OpenCode 2 loads PAN's plugin, but only a simulated loader has run it. Homebrew Core has installed OpenCode 2 since `2026-09-28`, while the install script and the `opencode-ai` npm package stay on 1.x | A claim stronger than the evidence, on a channel users now reach | R51 |
343
+ | The native `pan-exec-waves` script lacks steps its markdown twin has: the test baseline, the phase budget report, the reviewer and `review scope` | Claude's recommended path gives less than the portable one | R52 |
344
+ | A wall-clock assertion of exactly two seconds failed once under load; the test-quality lint flags only bounds under two seconds | A flaky test the lint was meant to catch | R53 |
345
+ | Claude Code `2.1.302` turns fork mode on by default in `claude -p`, the SDK and the desktop app: main-conversation spawns run in the background, and `run_in_background` is removed. Typed and `general-purpose` spawns still start fresh | The harness's model tiers run `claude -p`, while CI pins an older Claude Code | R54 |
346
+ | Codex `0.163.0` lists its `plugin_hooks` feature flag as removed | Whether the Agent Plugins bundle's hooks fire on Codex needs a fresh check | R55 |
347
+ | Copilot reads `.claude/settings.json` hooks and runs every source | Refuted as a PAN defect: each Copilot hook copy defers to a Claude registration of the same script | — |
348
+
349
+ **Convergence read holds:** peers spent the window on plan and gate integrity, and Anthropic's account of its own code review matches PAN's verify, findings and defect-corpus design. The move the other way is a host default, fork mode in headless Claude Code, which PAN keeps declining (ADR-0046 D6). **What not to do** carries forward unchanged. **Cadence:** a full re-run is still due around `2026-11-22`. The early trigger ("OpenCode 2 becomes the default install") is met for Homebrew users only, so R51 runs now instead of a full re-run. The queue is the `2026-10-19` reality-check Addendum of `docs/specs/market-ideas-2026-10.md`.