pan-wizard 3.35.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 (339) hide show
  1. package/CHANGELOG.md +3645 -0
  2. package/README.md +46 -52
  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 +2 -3
  8. package/agents/pan-document_code.md +1 -2
  9. package/agents/pan-executor.md +25 -0
  10. package/agents/pan-hardener.md +4 -3
  11. package/agents/pan-integration-checker.md +1 -2
  12. package/agents/pan-knowledge.md +1 -2
  13. package/agents/pan-meta-reviewer.md +3 -3
  14. package/agents/pan-optimizer.md +4 -4
  15. package/agents/pan-phase-researcher.md +80 -475
  16. package/agents/pan-plan-checker.md +40 -3
  17. package/agents/pan-planner.md +21 -7
  18. package/agents/pan-previewer.md +3 -2
  19. package/agents/pan-project-researcher.md +72 -493
  20. package/agents/pan-release.md +1 -1
  21. package/agents/pan-reviewer.md +14 -3
  22. package/agents/pan-roadmapper.md +12 -7
  23. package/agents/pan-verifier.md +9 -4
  24. package/bin/install-lib.cjs +134 -14
  25. package/bin/install.js +59 -12
  26. package/commands/pan/army.md +1 -1
  27. package/commands/pan/autodev.md +76 -0
  28. package/commands/pan/cost.md +21 -1
  29. package/commands/pan/exec-phase.md +3 -4
  30. package/commands/pan/focus-auto.md +14 -7
  31. package/commands/pan/focus-design.md +4 -5
  32. package/commands/pan/focus-docs.md +24 -0
  33. package/commands/pan/learn.md +13 -6
  34. package/commands/pan/milestone-audit.md +8 -1
  35. package/commands/pan/milestone-done.md +10 -5
  36. package/commands/pan/milestone-new.md +2 -2
  37. package/commands/pan/new-project.md +15 -12
  38. package/commands/pan/plan-phase.md +15 -9
  39. package/commands/pan/preview.md +1 -1
  40. package/commands/pan/quick.md +1 -1
  41. package/commands/pan/review-deep.md +11 -5
  42. package/commands/pan/settings.md +6 -0
  43. package/commands/pan/verify-phase.md +6 -2
  44. package/docs/AGENTS.md +917 -0
  45. package/docs/ARCHITECTURE.md +1054 -0
  46. package/docs/CLI-REFERENCE.md +4582 -0
  47. package/docs/COMPARISON.md +116 -0
  48. package/docs/DEVELOPMENT.md +490 -0
  49. package/docs/ECOSYSTEM-REVIEW-2026-06.md +107 -0
  50. package/docs/ECOSYSTEM-REVIEW-2026-08.md +349 -0
  51. package/docs/EXAMPLES.md +584 -0
  52. package/docs/FAQ.md +254 -0
  53. package/docs/FIELD-HARVEST-2026-07.md +88 -0
  54. package/docs/FIELD-REPORT-army-2026-06.md +121 -0
  55. package/docs/HOOKS.md +638 -0
  56. package/docs/IMPROVEMENT-TODO.md +246 -0
  57. package/docs/INTERNALS.md +485 -0
  58. package/docs/MIGRATION-v2-to-v3.md +258 -0
  59. package/docs/SECURITY-HARDENING.md +230 -0
  60. package/docs/SKILLS-ENHANCEMENT-PLAN-V2.md +122 -0
  61. package/docs/SKILLS-FULL-TEXT.md +9685 -0
  62. package/docs/SKILLS-REFERENCE.md +1037 -0
  63. package/docs/TROUBLESHOOTING.md +1084 -0
  64. package/docs/USER-GUIDE.md +1437 -0
  65. package/docs/archive/SKILLS-ENHANCEMENT-PLAN.md +230 -0
  66. package/docs/audits/AUDIT-2026-08-e2e-ROADMAP.md +117 -0
  67. package/docs/audits/AUDIT-2026-08-e2e-VERIFICATION.md +693 -0
  68. package/docs/audits/AUDIT-2026-08-e2e.md +1546 -0
  69. package/docs/audits/OUTSTANDING-2026-08.md +275 -0
  70. package/docs/audits/STABILITY-TEST-2026-08.md +640 -0
  71. package/docs/branding/README-brand-draft.md +119 -0
  72. package/docs/branding/handoff/IMPLEMENTATION.md +205 -0
  73. package/docs/branding/handoff/README-brand-draft.md +119 -0
  74. package/docs/branding/handoff/image-prompts.md +46 -0
  75. package/docs/branding/image-prompts.md +46 -0
  76. package/docs/branding/nano-banana-prompts.txt +60 -0
  77. package/docs/context-monitor.md +13 -0
  78. package/docs/decisions/ADR-0001-strategic-feature-prioritization.md +83 -0
  79. package/docs/decisions/ADR-0002-copilot-cli-runtime.md +71 -0
  80. package/docs/decisions/ADR-0003-smart-execution.md +84 -0
  81. package/docs/decisions/ADR-0004-copilot-cli-interaction.md +89 -0
  82. package/docs/decisions/ADR-0005-command-naming.md +80 -0
  83. package/docs/decisions/ADR-0006-focus-commands.md +101 -0
  84. package/docs/decisions/ADR-0007-ship-v1.md +73 -0
  85. package/docs/decisions/ADR-0008-map-codebase-mermaid-togaf.md +80 -0
  86. package/docs/decisions/ADR-0009-production-deployment-checklist.md +68 -0
  87. package/docs/decisions/ADR-0010-standards-integration.md +79 -0
  88. package/docs/decisions/ADR-0011-help-commands-rewrite.md +64 -0
  89. package/docs/decisions/ADR-0012-contributors-attribution-index.md +42 -0
  90. package/docs/decisions/ADR-0013-strategic-feature-additions.md +53 -0
  91. package/docs/decisions/ADR-0014-internal-cleanup-code-quality.md +53 -0
  92. package/docs/decisions/ADR-0015-focus-auto-runner.md +296 -0
  93. package/docs/decisions/ADR-0016-enhanced-doc-sync.md +54 -0
  94. package/docs/decisions/ADR-0017-enhanced-focus-design.md +69 -0
  95. package/docs/decisions/ADR-0018-user-reality-testing.md +84 -0
  96. package/docs/decisions/ADR-0019-end-to-end-user-acceptance-testing.md +113 -0
  97. package/docs/decisions/ADR-0020-ai-drift-prevention.md +55 -0
  98. package/docs/decisions/ADR-0021-codebase-mapper-v2.md +76 -0
  99. package/docs/decisions/ADR-0022-lifecycle-completeness.md +63 -0
  100. package/docs/decisions/ADR-0023-opus-4-7-adoption.md +89 -0
  101. package/docs/decisions/ADR-0024-spec-b-v2-completion.md +137 -0
  102. package/docs/decisions/ADR-0025-behavioral-guardrails-layer.md +129 -0
  103. package/docs/decisions/ADR-0026-self-improvement-loop.md +171 -0
  104. package/docs/decisions/ADR-0027-doc-code-link-graph.md +164 -0
  105. package/docs/decisions/ADR-0028-unified-agents-skills-target.md +46 -0
  106. package/docs/decisions/ADR-0029-experiment-evaluator.md +76 -0
  107. package/docs/decisions/ADR-0030-planning-concurrency.md +37 -0
  108. package/docs/decisions/ADR-0031-focus-auto-backlog-source.md +47 -0
  109. package/docs/decisions/ADR-0032-squad-model.md +64 -0
  110. package/docs/decisions/ADR-0033-army-campaign.md +40 -0
  111. package/docs/decisions/ADR-0034-scheduled-campaigns.md +57 -0
  112. package/docs/decisions/ADR-0035-army-hud-dashboard.md +40 -0
  113. package/docs/decisions/ADR-0036-agentic-memory-architecture.md +106 -0
  114. package/docs/decisions/ADR-0037-pin-security-agents-to-opus.md +51 -0
  115. package/docs/decisions/ADR-0038-skill-aligned-decomposition.md +41 -0
  116. package/docs/decisions/ADR-0039-worktree-as-project-variant.md +37 -0
  117. package/docs/decisions/ADR-0040-memory-injection-defense.md +55 -0
  118. package/docs/decisions/ADR-0041-mcp-dual-era-bridge.md +47 -0
  119. package/docs/decisions/ADR-0042-design-parity-both-flows.md +45 -0
  120. package/docs/decisions/ADR-0043-addressable-planning-roots.md +56 -0
  121. package/docs/decisions/ADR-0044-bound-the-cached-context.md +104 -0
  122. package/docs/decisions/ADR-0045-agent-plugins-bundle.md +76 -0
  123. package/docs/decisions/ADR-0046-subagent-frontmatter-decisions.md +39 -0
  124. package/docs/decisions/ADR-0047-pan-harness.md +76 -0
  125. package/docs/decisions/ADR-0048-one-core-per-project.md +43 -0
  126. package/docs/decisions/ADR-0049-machine-verdicts-and-findings-ledger.md +116 -0
  127. package/docs/specs/ai_drift_prevention_featureai.md +286 -0
  128. package/docs/specs/codebase_mapper_v2_featureai.md +930 -0
  129. package/docs/specs/command_naming_optimization_featureai.md +930 -0
  130. package/docs/specs/comp_analysis_markdown_v1.md +149 -0
  131. package/docs/specs/continuous_autonomous_execution_featureai.md +304 -0
  132. package/docs/specs/contributors_attribution_index_featureai.md +476 -0
  133. package/docs/specs/copilot_cli_interaction_featureai.md +868 -0
  134. package/docs/specs/copilot_cli_runtime_featureai.md +647 -0
  135. package/docs/specs/custom-skills-assessment.md +461 -0
  136. package/docs/specs/deployment_audit_findings_featureai.md +243 -0
  137. package/docs/specs/doc_code_link_graph_featureai.md +253 -0
  138. package/docs/specs/documentation_alignment_cleanup_featureai.md +69 -0
  139. package/docs/specs/e2e_visual_testing_featureai.md +615 -0
  140. package/docs/specs/end_to_end_user_acceptance_testing_featureai.md +810 -0
  141. package/docs/specs/evidence-loop-plan.md +76 -0
  142. package/docs/specs/evidence_loop_featureai.md +497 -0
  143. package/docs/specs/focus-auto-optimize-category.md +449 -0
  144. package/docs/specs/focus-auto-optimize-superplan.md +188 -0
  145. package/docs/specs/focus_auto_runner_featureai.md +1102 -0
  146. package/docs/specs/focus_design_v2_featureai.md +197 -0
  147. package/docs/specs/focus_sync_v2_featureai.md +202 -0
  148. package/docs/specs/git_integration_overhaul_featureai.md +326 -0
  149. package/docs/specs/glm_zai_provider_featureai.md +200 -0
  150. package/docs/specs/googlecli_adoption_featureai.md +661 -0
  151. package/docs/specs/help_commands_rewrite_featureai.md +860 -0
  152. package/docs/specs/industry_analysis_strategic_additions_featureai.md +231 -0
  153. package/docs/specs/industry_comparison_and_feature_gaps_featureai.md +674 -0
  154. package/docs/specs/internal_cleanup_code_quality_featureai.md +486 -0
  155. package/docs/specs/investigations/README.md +31 -0
  156. package/docs/specs/investigations/digests/2026-09-28.md +47 -0
  157. package/docs/specs/investigations/digests/2026-10-08.md +62 -0
  158. package/docs/specs/investigations/digests/2026-10-10.md +61 -0
  159. package/docs/specs/investigations/features/debugger-red-loop-first.md +55 -0
  160. package/docs/specs/investigations/features/harness-cross-host-behaviour.md +93 -0
  161. package/docs/specs/investigations/features/optimize-apply-regression-gate.md +66 -0
  162. package/docs/specs/investigations/features/reviewer-smell-baseline.md +57 -0
  163. package/docs/specs/investigations/features/trace-failure-capture.md +69 -0
  164. package/docs/specs/lifecycle_completeness_featureai.md +754 -0
  165. package/docs/specs/local-first-ci.md +42 -0
  166. package/docs/specs/map_codebase_mermaid_togaf_featureai.md +805 -0
  167. package/docs/specs/market-delta-2026-09-superplan.md +310 -0
  168. package/docs/specs/market-ideas-2026-09.md +131 -0
  169. package/docs/specs/market-ideas-2026-10.md +428 -0
  170. package/docs/specs/market-ideas-ledger.md +177 -0
  171. package/docs/specs/memory-optimization-2026-10.md +285 -0
  172. package/docs/specs/multi-track-planning-roots.md +143 -0
  173. package/docs/specs/multi_model_routing_featureai.md +687 -0
  174. package/docs/specs/multi_model_routing_superplan.md +197 -0
  175. package/docs/specs/opus_47_existing_enhancements_featureai.md +247 -0
  176. package/docs/specs/opus_47_extended_features_featureai.md +363 -0
  177. package/docs/specs/opus_47_extended_features_v2_featureai.md +397 -0
  178. package/docs/specs/pan_focus_commands_featureai.md +2336 -0
  179. package/docs/specs/pan_zcode_mcp_bridge_featureai.md +120 -0
  180. package/docs/specs/product-excellence-superplan.md +315 -0
  181. package/docs/specs/product_excellence_program_2026_q4_featureai.md +365 -0
  182. package/docs/specs/production_deployment_readiness_featureai.md +433 -0
  183. package/docs/specs/production_readiness_ship_v1_featureai.md +698 -0
  184. package/docs/specs/real_test_enforcement_featureai.md +213 -0
  185. package/docs/specs/reality-check-2026-09-superplan.md +362 -0
  186. package/docs/specs/right-sized-ceremony.md +74 -0
  187. package/docs/specs/roadmap_and_competition_2026_q4_featureai.md +390 -0
  188. package/docs/specs/self_improvement_loop_featureai.md +875 -0
  189. package/docs/specs/skill-aligned-decomposition.md +155 -0
  190. package/docs/specs/standards_integration_featureai.md +833 -0
  191. package/docs/specs/testing-system-redesign-2026-09.md +267 -0
  192. package/docs/specs/user_reality_testing_system_featureai.md +788 -0
  193. package/docs/specs/watch-triggers.json +22 -0
  194. package/docs/specs/workflow-integration-redesign.md +742 -0
  195. package/docs/specs/workflow_state_consistency_featureai.md +183 -0
  196. package/hooks/dist/pan-context-monitor.js +9 -2
  197. package/hooks/dist/pan-cost-logger.js +5 -0
  198. package/hooks/dist/pan-guard.js +28 -5
  199. package/hooks/dist/pan-stop-guard.js +9 -9
  200. package/hooks/dist/pan-trace-logger.js +5 -0
  201. package/package.json +10 -2
  202. package/pan-wizard-core/bin/lib/agents-md.cjs +57 -8
  203. package/pan-wizard-core/bin/lib/autodev-report.cjs +180 -0
  204. package/pan-wizard-core/bin/lib/autodev.cjs +642 -0
  205. package/pan-wizard-core/bin/lib/ci.cjs +143 -0
  206. package/pan-wizard-core/bin/lib/commands.cjs +1 -1
  207. package/pan-wizard-core/bin/lib/config.cjs +41 -5
  208. package/pan-wizard-core/bin/lib/constants.cjs +27 -1
  209. package/pan-wizard-core/bin/lib/core.cjs +31 -14
  210. package/pan-wizard-core/bin/lib/cost.cjs +160 -4
  211. package/pan-wizard-core/bin/lib/cross-family.cjs +164 -0
  212. package/pan-wizard-core/bin/lib/debug-cases.cjs +104 -0
  213. package/pan-wizard-core/bin/lib/doc-lint.cjs +5 -3
  214. package/pan-wizard-core/bin/lib/failure-class.cjs +81 -0
  215. package/pan-wizard-core/bin/lib/findings.cjs +148 -9
  216. package/pan-wizard-core/bin/lib/focus.cjs +1 -1
  217. package/pan-wizard-core/bin/lib/git.cjs +1 -1
  218. package/pan-wizard-core/bin/lib/hosts.cjs +88 -0
  219. package/pan-wizard-core/bin/lib/init.cjs +7 -2
  220. package/pan-wizard-core/bin/lib/knowledge.cjs +2 -0
  221. package/pan-wizard-core/bin/lib/merge.cjs +50 -0
  222. package/pan-wizard-core/bin/lib/mutate.cjs +268 -0
  223. package/pan-wizard-core/bin/lib/next-action.cjs +112 -0
  224. package/pan-wizard-core/bin/lib/optimize.cjs +2 -2
  225. package/pan-wizard-core/bin/lib/phase-gate.cjs +15 -9
  226. package/pan-wizard-core/bin/lib/phase-remove.cjs +91 -11
  227. package/pan-wizard-core/bin/lib/phase.cjs +85 -13
  228. package/pan-wizard-core/bin/lib/plan-lint.cjs +310 -0
  229. package/pan-wizard-core/bin/lib/preview.cjs +26 -4
  230. package/pan-wizard-core/bin/lib/requirements-lint.cjs +130 -0
  231. package/pan-wizard-core/bin/lib/research-lint.cjs +268 -0
  232. package/pan-wizard-core/bin/lib/review-deep.cjs +14 -22
  233. package/pan-wizard-core/bin/lib/review-vote.cjs +105 -0
  234. package/pan-wizard-core/bin/lib/roadmap.cjs +1 -0
  235. package/pan-wizard-core/bin/lib/runner.cjs +2 -16
  236. package/pan-wizard-core/bin/lib/sizing.cjs +356 -0
  237. package/pan-wizard-core/bin/lib/squads.cjs +1 -1
  238. package/pan-wizard-core/bin/lib/state-write.cjs +247 -0
  239. package/pan-wizard-core/bin/lib/test-gate.cjs +433 -0
  240. package/pan-wizard-core/bin/lib/uat.cjs +149 -0
  241. package/pan-wizard-core/bin/lib/usage.cjs +104 -0
  242. package/pan-wizard-core/bin/lib/verdict.cjs +26 -3
  243. package/pan-wizard-core/bin/lib/verify-plan-set.cjs +30 -1
  244. package/pan-wizard-core/bin/lib/verify-preflight.cjs +2 -2
  245. package/pan-wizard-core/bin/lib/verify-red.cjs +174 -0
  246. package/pan-wizard-core/bin/lib/verify-retro.cjs +3 -2
  247. package/pan-wizard-core/bin/lib/verify-scope.cjs +143 -2
  248. package/pan-wizard-core/bin/lib/verify.cjs +86 -31
  249. package/pan-wizard-core/bin/lib/worktree.cjs +70 -0
  250. package/pan-wizard-core/bin/pan-tools.cjs +257 -28
  251. package/pan-wizard-core/learnings/universal/autonomous-loop.md +2 -2
  252. package/pan-wizard-core/mcp/orchestrator.cjs +4 -1
  253. package/pan-wizard-core/references/continuation-format.md +3 -3
  254. package/pan-wizard-core/references/design-methodology.md +1 -1
  255. package/pan-wizard-core/references/guardrails.md +1 -1
  256. package/pan-wizard-core/references/handoff-decisions.md +1 -1
  257. package/pan-wizard-core/references/model-profiles.md +2 -3
  258. package/pan-wizard-core/references/questioning.md +24 -0
  259. package/pan-wizard-core/references/ui-brand.md +4 -6
  260. package/pan-wizard-core/references/verdict-contract.md +2 -1
  261. package/pan-wizard-core/templates/config.json +10 -2
  262. package/pan-wizard-core/templates/debug.md +1 -0
  263. package/pan-wizard-core/templates/design.md +5 -4
  264. package/pan-wizard-core/templates/discovery.md +2 -2
  265. package/pan-wizard-core/templates/phase-prompt.md +7 -0
  266. package/pan-wizard-core/templates/requirements.md +9 -0
  267. package/pan-wizard-core/templates/research.md +10 -0
  268. package/pan-wizard-core/templates/summary-complex.md +5 -1
  269. package/pan-wizard-core/templates/summary-minimal.md +4 -0
  270. package/pan-wizard-core/templates/summary-standard.md +5 -1
  271. package/pan-wizard-core/templates/summary.md +8 -1
  272. package/pan-wizard-core/workflows/add-phase.md +4 -6
  273. package/pan-wizard-core/workflows/assumptions.md +19 -1
  274. package/pan-wizard-core/workflows/diagnose-issues.md +2 -0
  275. package/pan-wizard-core/workflows/discuss-phase.md +4 -2
  276. package/pan-wizard-core/workflows/exec-lean.md +69 -0
  277. package/pan-wizard-core/workflows/exec-phase.md +79 -15
  278. package/pan-wizard-core/workflows/execute-plan.md +3 -1
  279. package/{commands/pan → pan-wizard-core/workflows}/focus-doc-audit.md +13 -29
  280. package/{commands/pan → pan-wizard-core/workflows}/focus-drift-walking.md +3 -18
  281. package/{commands/pan → pan-wizard-core/workflows}/focus-exec.md +8 -23
  282. package/{commands/pan → pan-wizard-core/workflows}/focus-plan.md +6 -20
  283. package/{commands/pan → pan-wizard-core/workflows}/focus-scan.md +3 -16
  284. package/{commands/pan → pan-wizard-core/workflows}/focus-sync.md +7 -21
  285. package/pan-wizard-core/workflows/health.md +6 -0
  286. package/pan-wizard-core/workflows/help.md +114 -77
  287. package/pan-wizard-core/workflows/insert-phase.md +4 -6
  288. package/pan-wizard-core/workflows/learn.md +3 -3
  289. package/pan-wizard-core/workflows/milestone-audit.md +2 -2
  290. package/pan-wizard-core/workflows/milestone-new.md +38 -95
  291. package/pan-wizard-core/workflows/new-project.md +96 -258
  292. package/pan-wizard-core/workflows/optimize.md +107 -5
  293. package/pan-wizard-core/workflows/phase-tests.md +10 -0
  294. package/pan-wizard-core/workflows/plan-phase.md +106 -45
  295. package/pan-wizard-core/workflows/profile.md +50 -0
  296. package/pan-wizard-core/workflows/progress.md +10 -0
  297. package/pan-wizard-core/workflows/quick.md +34 -43
  298. package/pan-wizard-core/workflows/remove-phase.md +11 -1
  299. package/pan-wizard-core/workflows/research-phase.md +118 -40
  300. package/pan-wizard-core/workflows/resume-project.md +18 -2
  301. package/pan-wizard-core/workflows/settings.md +33 -19
  302. package/pan-wizard-core/workflows/todo-check.md +6 -2
  303. package/pan-wizard-core/workflows/transition.md +22 -4
  304. package/pan-wizard-core/workflows/uat-walkthrough.md +90 -0
  305. package/pan-wizard-core/workflows/update.md +1 -1
  306. package/pan-wizard-core/workflows/verify-phase.md +39 -46
  307. package/scripts/build-agent-plugin.js +35 -15
  308. package/scripts/build-help.cjs +106 -0
  309. package/scripts/build-plugin.js +10 -1
  310. package/scripts/deprecate-old-versions.js +70 -3
  311. package/scripts/generate-skills-docs.py +1 -1
  312. package/scripts/git-hooks/pre-push +27 -0
  313. package/scripts/install-git-hooks.js +7 -5
  314. package/scripts/install-pre-push.cjs +38 -0
  315. package/scripts/land.cjs +151 -0
  316. package/scripts/local-ci.cjs +501 -0
  317. package/scripts/local-schedule.cjs +277 -0
  318. package/scripts/mutation-probe.cjs +7 -80
  319. package/scripts/prompt-lint.cjs +32 -0
  320. package/scripts/prompt-rules.cjs +156 -0
  321. package/scripts/run-tests.cjs +7 -1
  322. package/scripts/test-quality-lint.cjs +3 -3
  323. package/scripts/test-surface.cjs +175 -6
  324. package/agents/pan-research-synthesizer.md +0 -246
  325. package/commands/pan/audit-deployment.md +0 -386
  326. package/commands/pan/dashboard.md +0 -22
  327. package/commands/pan/discord.md +0 -19
  328. package/commands/pan/mcp-bridge.md +0 -143
  329. package/commands/pan/milestone-cleanup.md +0 -19
  330. package/commands/pan/milestone-gaps.md +0 -35
  331. package/commands/pan/optimize.md +0 -115
  332. package/commands/pan/profile.md +0 -76
  333. package/commands/pan/research-phase.md +0 -189
  334. package/pan-wizard-core/bin/lib/bridge.cjs +0 -269
  335. package/pan-wizard-core/templates/research-project/architecture.md +0 -204
  336. package/pan-wizard-core/templates/research-project/features.md +0 -147
  337. package/pan-wizard-core/templates/research-project/pitfalls.md +0 -200
  338. package/pan-wizard-core/templates/research-project/stack.md +0 -120
  339. package/pan-wizard-core/templates/research-project/summary.md +0 -170
@@ -0,0 +1,310 @@
1
+ # PAN Wizard Work Plan — Market Delta 2026-09
2
+
3
+ **Generated:** 2026-09-10 · **Tree:** main @ `c9c077b` (v3.27.0, clean) · **Source:** a primary-source delta scan run four weeks after [ECOSYSTEM-REVIEW-2026-08.md](../ECOSYSTEM-REVIEW-2026-08.md) (dated `2026-08-12`, §7 delta `2026-08-14`). That review scheduled its own re-run for October; this plan is the interim queue and does not replace it.
4
+
5
+ > **Counts doctrine.** Per CLAUDE.md, this file carries no filesystem-derived counts. The baseline below points at the counts table and at the command that reproduces the suite result. Every finding names the class and the file, never the number.
6
+ >
7
+ > **Point-in-time.** Every "verified" claim below was read from a primary doc on `2026-09-10`. Three of them (Agent Plugins field-level schema, vendor-directory names, Claude Code hook `async` support) are explicitly **unverified** and carry a gate. Re-derive before building: `git rev-parse HEAD && git status --porcelain`.
8
+
9
+ ---
10
+
11
+ ## Baseline
12
+
13
+ | Metric | Value |
14
+ |---|---|
15
+ | Version | `package.json` (3.27.0 at generation) |
16
+ | Suite | `npm run test:all` — fully green at `c9c077b` on `2026-09-10`; totals live in CLAUDE.md's counts table |
17
+ | Open planned moves from the August review | §3.2 native workflows only (§3.3 shipped in v3.26.0; §3.1 closed `2026-08-12`) |
18
+ | Rate table freshness | `RATES_VERIFIED_AT` in `pan-wizard-core/bin/lib/cost.cjs` reads `2026-08-03` — predates Fable 5.1 and the Sonnet 5 price decision |
19
+ | Plugin build | `scripts/build-plugin.js` emits `.claude-plugin/` manifest, commands, agents, hooks, `.mcp.json`, core — **no `workflows/`** (closed by item 3 the same day) |
20
+
21
+ ---
22
+
23
+ ## What the scan found, and where each finding lands
24
+
25
+ | # | Finding (verified `2026-09-10`) | Bearing on PAN | Items |
26
+ |---|---|---|---|
27
+ | F1 | **Agent Plugins 1.0** (published `2026-08-06`; Vercel + Amazon, Cursor, GitHub, Microsoft, OpenAI; Google joined; **Anthropic not a maintainer**). One directory: `plugin.json` + `skills/` (Agent Skills verbatim) + `mcp.json` + reverse-domain vendor dirs. Loaded natively by Copilot CLI / VS Code / Copilot app (GA `2026-08-12`), Codex (0.146–0.147; remote marketplaces 0.153), Cursor, Kiro, ChatGPT. **Antigravity plugins are a declared superset, discovered from `<workspace>/.agents/plugins/<name>/`** — the same `.agents/` tree PAN's unified skills already occupy. | The August review missed it entirely (zero mentions in repo or memory). It collapses ADR-0028 Phase 3's "plugin packaging" plus June's "Codex plugin + Gemini extension remain" into **one emitted bundle serving every runtime except Claude**. | 4a–4f |
28
+ | F2 | `claude-fable-5-1` absent from `DEFAULT_RATES`; the family-prefix fallback bills its cache reads at Fable 5's rate. Fable 5.1 cache reads are 0.025× base (a quarter of Fable 5's 0.1×). Fable 5.1 is Claude Code's default since 2.1.257. `claude-sonnet-5` carries the pre-announced higher price; the introductory price was made permanent and the September rise cancelled. Opus 5/4.8/4.7/4.6, Haiku 4.5, Fable 5 match. | ADR-0044 measured that almost all of PAN's token traffic is cached re-read. On the default model the ledger's dominant line is therefore wrong by roughly the cache-read ratio. | 1, 1b |
29
+ | F3 | `build-plugin.js` never calls `buildNativeWorkflowScripts()`. Claude Code loads a plugin-root `workflows/` directory as `/<plugin>:<meta.name>`. | The plugin ships less than a local install does. Verified by grep. | 3 |
30
+ | F4 | Codex hooks: `async: true` command handlers (≤8 concurrent; cannot block/approve/rewrite) from 0.148 (`2026-08-17`); `mcp_tool` handler type; `Interrupt` event from 0.150. Codex skills path `.agents/skills/` reconfirmed; `.codex/skills` documented as "not the default". `codex mcp-server` deprecated 0.149.1 (not PAN's surface). | PAN's cost and trace loggers are pure observers on the critical path of every subagent stop. | 2 |
31
+ | F5 | Prompt-cache TTL is per bucket: main conversation vs **everything else** (subagents, workflows, forks). Subagents get five minutes **even on a subscription** unless `subagentPromptCacheTtl` (Claude Code ≥2.1.242) or per-agent `experimental.cacheTtl: 5m\|1h` (≥2.1.248) says otherwise. One-hour writes bill 2× base vs 1.25×; break-even after two reads. `/usage` now shows a `Prompt cache (main)` hit line with a `likely cause` (≥2.1.251 / ≥2.1.260). | Every PAN agent runs as a subagent → five-minute bucket. ADR-0044's advice surface (`context-budget` `cache.status`, hygiene `cache-context`) is the natural home for a TTL recommendation. | 6 |
32
+ | F6 | `effort:` frontmatter on subagents/skills was **silently ignored on models with pinned defaults until 2.1.267** (`2026-09-09`). | PAN's per-agent effort tuning only now takes effect there. Nothing to change in PAN; users on older builds need a note. | 9 |
33
+ | F7 | `maxTurns` now yields **partial output flagged resumable** via `SendMessage` (≥2.1.246 / ≥2.1.259). `memory:`, `isolation: worktree`, `skills:` preload remain available and unadopted (August §2). | Turns `maxTurns` into a checkpoint rather than a cutoff — fits PAN's budget-profile step-down. Decision item, not adoption. | 7a, 7b |
34
+ | F8 | `modelPricing` managed setting (≥2.1.243): `{ "<modelId>": { "inputCostPer1MTokens", "outputCostPer1MTokens" } }`. No cache fields. | An optional override source so PAN's ledger agrees with Claude Code's own `/usage` at contracted rates. | 8 |
35
+ | F9 | Gemini CLI 0.54–0.59 were security-only; 0.59 **filters `mcpServers` in restricted/untrusted workspaces (fail-closed)**. Antigravity default model is now `gemini-3.8-flash`. | PAN's Gemini MCP registration is silently absent until the workspace is trusted. | 9 |
36
+ | F10 | OpenCode config shapes PAN writes are still live: top-level `mcp`, `type: "local"`, `command` **array**, `environment`, `enabled`; skills from `.agents/skills/` (plus `.opencode/skills/`, `.claude/skills/`); agents in `.opencode/agents/`; `tools`→`permission`, `maxSteps`→`steps`. SKILL.md fields honored: name, description, license, compatibility, metadata only. | No action. PAN's `compatibility` emission is inside the honored set. | — |
37
+ | F11 | `/skill-doctor` (≥2.1.261) reports unused loaded skills and their context cost; `skillOverrides` can hide or collapse a skill. Measured `2026-09-10`: PAN's command and agent descriptions together are far under the subagent-description warning threshold; **four command bodies exceed the Agent Skills 5k-token body recommendation** (`focus-design`, `focus-auto`, `focus-doc-audit`, `focus-drift-walking`). | The August review's still-open body-budget item, now user-visible through a first-party tool. Still "live testing, not a mechanical split". | 11 (parked), 9 |
38
+ | F12 | Agent Skills spec unchanged (same six fields). MCP: nothing after `2026-07-28`; Tasks moved to the `io.modelcontextprotocol/tasks` extension; Roots/Sampling/Logging deprecated — validates ADR-0041's scope boundary again. | No action. | — |
39
+ | F13 | Competitors: **Spec Kit 1.0.0** (`2026-08-21`) then 1.0.4/1.0.5 in September (workflow slots, extensions, governance presets). BMAD and GSD: no release since May 2026. | Spec Kit is the active one; positioning unchanged from August. | — |
40
+ | F14 | Claude Code misc: `--plugin-dir` accepts a folder of plugins (2.1.265); Workflow tool prompt shrank with `/workflow-authoring` as a bundled skill (≥2.1.248); `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`; `managedMcpServers`. | Dev-loop conveniences. | 12 |
41
+
42
+ **Method notes worth keeping.** The official Claude Code changelog skips 2.1.234–2.1.242 entirely while the docs still cite "before v2.1.238" and "requires v2.1.242" — the gap is editorial, not missing features. `developers.openai.com/codex/*` now 308-redirects to `learn.chatgpt.com/docs/*`; the Codex plugin format doc is `developers.openai.com/plugins/build/plugins`, not the `/codex/plugins` landing page.
43
+
44
+ ---
45
+
46
+ ## Priority classes
47
+
48
+ Per `/superplan`: **P1 WRONG** silent incorrect output · **P2 STABILITY** · **P3 MISSING TESTS** · **P4 FEATURE GAPS** (runtime coverage) · **P5 NEW FEATURES** · **P6 DOCUMENTATION** · **P7 POLISH**. No P0 — the suite is green and the installer works.
49
+
50
+ Sizes: XS 1 · S 2 · M 4 · L 10 · XL 20 points.
51
+
52
+ ---
53
+
54
+ ## Items
55
+
56
+ | ID | Pri | Size | Pts | Title | Files | Gate / verify | Status |
57
+ |---|---|---|---|---|---|---|---|
58
+ | 1 | P1 | S | 2 | Add `claude-fable-5-1` row (input 10 / output 50 / cache_read **0.25** / cache_write 12.5); correct `claude-sonnet-5` to 2 / 10 / 0.20 / 2.50; bump `RATES_VERIFIED_AT` to `2026-09-10` | `pan-wizard-core/bin/lib/cost.cjs`, `tests/cost.test.cjs` | Test pins that a versioned `claude-fable-5-1-…` id resolves to the 5.1 row, **not** via family prefix to Fable 5 (the longest-prefix sort makes this true — pin it so it stays true); test pins Sonnet 5 values; revert-prove both | Done `2026-09-10` — revert-proven: setting the 5.1 read rate back to Fable 5's fails two tests |
59
+ | 1b | P1 | XS | 1 | Bump the installer's recommended flagship from `claude-fable-5` to `claude-fable-5-1` (Claude Code's default) and confirm `detectModelCapabilities` classifies it (substring branch already matches `fable`) | `bin/install.js` (`flagship:`), `bin/install-lib.cjs`, `tests/installer-functions.test.cjs` | Existing capability tests extended with the 5.1 id | Done `2026-09-10` |
60
+ | 2 | P2 | S | 2 | Mark PAN's **observer** Codex hooks `async: true` — cost-logger and trace-logger (SubagentStop). Leave `pan-context-monitor` sync: it returns `additionalContext` the model must read this turn, and async handlers' output is deferred. Decide `pan-check-update` after reading what it emits | `bin/install-lib.cjs` (`mergeCodexHooksConfig`), `tests/codex-install.test.cjs` | Test pins which markers carry `async` and that `removeCodexPanHooks` still strips them. **Gate:** check Claude Code and Copilot hook schemas for an equivalent flag before generalising — unverified this scan | Done `2026-09-10` — Codex only. `pan-check-update` prints nothing, so it is async too; the context monitor stays synchronous. Verified in a fresh five-runtime install |
61
+ | 3 | P4 | S | 2 | Bundle native workflows in the Claude plugin: write `buildNativeWorkflowScripts()` output to `dist/pan-wizard-plugin/workflows/`; update the tree comment at the top of the builder | `scripts/build-plugin.js`, `tests/plugin-marketplace.test.cjs` (or a new plugin-build test) | Test asserts each emitted script is present in the built plugin and its `meta.name` matches the file stem; `/pan-plugin-selftest` gains a probe that `/pan-wizard:<name>` appears in autocomplete (live) | Done `2026-09-10` — with one finding: plugin agents load **scoped** (`pan-wizard:pan-reviewer`, plugins-reference), so the plugin copy of each script has its `agentType` namespaced via `namespaceWorkflowAgentTypes()`; the loose install keeps bare names. The build test resolves every scoped agent inside the bundle. Probe 4 (`AGENT_SCOPE: scoped\|bare`) added to the self-test. Revert-proven: a no-op rewrite fails three tests. See 3b |
62
+ | 4a | P4 | M | 4 | **Agent Plugins spike + ADR-0045.** Read the normative spec (`github.com/agentplugins/agent-plugins-spec`, `/specification`) and the published JSON schema; record `plugin.json` field constraints, `mcp.json` server schema, the vendor-namespace rule, and how bundled files are referenced from `mcp.json` (Claude's `${CLAUDE_PLUGIN_ROOT}` is Claude-specific — if the spec has no plugin-root variable, stdio servers need a relative-path convention or a launcher). Decide: separate builder vs `--format` flag on the existing one | `docs/decisions/ADR-0045-agent-plugins-bundle.md`, `tests/fixtures/agent-plugins/` | ADR Accepted; a fixture `plugin.json` that validates against the pinned schema; the three **unverified** points from the scan resolved in writing | Done `2026-09-10` — ADR-0045 written from the normative spec (`spec/1.0.0.md`) and both schemas pinned under `tests/fixtures/agent-plugins/`. Resolved: `mcp.json` field names and the `${PLUGIN_ROOT}`-in-`args`-only rule; Copilot namespace `com.github.copilot/` (VS Code-verified, CLI how-to shows only the root layout); Codex uses inline `extensions.com.openai`. Still unverified: Antigravity file shapes (its manifest schema is closed and different), Codex agent placement. New finding → 4g: the stdio default cwd is the plugin root |
63
+ | 4b | P4 | L | 10 | **Emit the bundle** to `dist/pan-agent-plugin/`: `plugin.json` (mirrors `pkg.description` — reuse the manifest-mirror test pattern), `skills/pan-*/SKILL.md` via `convertClaudeCommandToUnifiedSkill` + `getUnifiedSkillAdapterHeader` (already spec-conformant), bundled `pan-wizard-core/` with the same internal-learnings strip, `mcp.json` pointing at `pan-wizard-core/mcp/server.cjs`. Skill bodies must reference the **bundled** core by plugin-relative path — the unified-skills path rewrite currently targets `.agents/pan-wizard-core/`; extract the rewrite into a pure install-lib function so the installer and both builders share one | `scripts/build-agent-plugin.js` (or `build-plugin.js`), `bin/install-lib.cjs`, `bin/install.js` (`copyCommandsAsUnifiedSkills` shares the extracted rewrite) | Never fork the skills compiler (ADR-0028's drift class). Bundle builds from a clean checkout with `npm run build:agent-plugin`; the Claude plugin build is byte-identical before/after the extraction | Done `2026-09-10` — `scripts/build-agent-plugin.js`; rewrites extracted to install-lib (`rewriteUnifiedSkillCommandContent`, `rewriteSharedCoreMarkdown`, `rewriteAgentReferenceCopy`, `stripInternalLearningsTopics`) and the installer switched to them; Claude plugin diffed byte-identical against a pre-extraction build; unified-skills pins unchanged. Bundle content uses `{{PAN_PLUGIN_ROOT}}` plus `{{PAN_RUNTIME_HOME}}`/`{{PAN_RUNTIME_DIR}}` for the handful of runtime-config references the conformance suite surfaced |
64
+ | 4c | P4 | M | 4 | **Copilot vendor dir**: agents via `convertClaudeToCopilotAgent` (`*.agent.md`) and hooks via `buildCopilotHooksConfig`, placed where 4a says Copilot reads them (GitHub docs show `agents/`, `hooks.json`, `.mcp.json` at plugin **root** — possibly the still-supported legacy layout — while the changelog names a `com.github.copilot/` namespace; 4a resolves which) | builder, `bin/install-lib.cjs` | Live: `copilot plugin install <path>` from `d:\pantesting`, then a PAN agent and a hook fire | **Built `2026-09-10`, live gate NOT run** — `com.github.copilot/agents/*.agent.md` (via `convertClaudeToCopilotAgent`) and `com.github.copilot/hooks/hooks.json` (flat PascalCase, `${CLAUDE_PLUGIN_ROOT}` paths, the shape VS Code documents) are emitted and conformance-tested (`tests/agent-plugin-vendor.test.cjs`). No Copilot CLI exists on the build machine, so the live install is outstanding |
65
+ | 4d | P4 | M | 4 | **Codex + Antigravity vendor dirs**: Codex agents via `convertClaudeAgentToCodexToml`; Antigravity's superset uses **different filenames** (`mcp_config.json`, `hooks.json`, `agents/`, `rules/` at plugin root) — emit only what 4a verified; Antigravity workspace discovery is `.agents/plugins/<name>/` | builder, `bin/install-lib.cjs` | Live: Codex `/plugin` from a local marketplace; `agy plugin install <path>`; both from `d:\pantesting` | **Codex part built `2026-09-10`, live gate NOT run; Antigravity deferred.** Codex: `hooks/hooks.json` at the documented default location, matcher-group shape, `${PLUGIN_ROOT}` in commands, observers async (Codex plugin reference, read `2026-09-10`); Codex documents no plugin agent component, so none is emitted. Antigravity: its manifest schema is closed and different and its file shapes are unspecified on the docs page — a separate variant, not this bundle, when a primary source exists. No Codex or Antigravity CLI on the build machine |
66
+ | 4e | P3 | M | 4 | **Conformance suite for the emitted bundle**, mirroring `tests/unified-skills-install.test.cjs`: skill `name` equals its directory, closed key set, no angle brackets in frontmatter, every path the skill body references resolves **inside the bundle**, `plugin.json` validates, non-vacuity guard first | `tests/agent-plugin-build.test.cjs` | Revert-prove: delete one referenced core file → exactly the resolving assertion fails | Done `2026-09-10` — `tests/agent-plugin-build.test.cjs`: zero-dep schema-subset validator (reports unknown keywords rather than passing vacuously) over the pinned schemas; skills discovery rules; every root-token reference resolved; install-path leak check; Claude plugin untouched. Revert-proven: dropping the agent reference copies fails the resolving assertion and the non-vacuity guard |
67
+ | 4f | P4 | S | 2 | **Distribution manifests + gate**: repo-side marketplace entries for Copilot (`.github/plugin/marketplace.json`) and Codex (location per 4a — June's note said `.agents/plugins/marketplace.json`); add the bundle build to `scripts/release-check.js`; `marketplace/README.md` gains the non-Claude install commands | `.github/plugin/marketplace.json`, `scripts/release-check.js`, `marketplace/README.md`, `docs/USER-GUIDE.md` | Release gate builds both bundles; docs carry no counts | Done `2026-09-10` — `.agents/plugins/marketplace.json` (Codex repo-scoped, shape from the Codex plugin reference) and `.github/plugin/marketplace.json` (Copilot, shape from docs.github.com; its `version` is pinned to `package.json` by a test, noted in the release steps); release-check gate 8 builds both bundles into temp dirs; DEVELOPMENT.md and marketplace/README.md document the install paths. Neither marketplace has been exercised live |
68
+ | 5a | P5 | L | 10 | **§3.2 — port two more deterministic protocols** to native scripts by the August selection rule (control flow knowable pre-run): the verify-phase wave (fan-out verifiers → merge verdict) and the milestone gap analysis. `transition.md` is **split, not ported**. Claude-only, additive; markdown stays the portable path | `bin/install-lib.cjs` (`buildNativeWorkflowScripts`), `scripts/build-plugin.js` (via item 3) | Per script: parses, no `import()`/fs/shell, `meta.phases` titles equal the `phase()` calls, no `Date.now()`/`Math.random()` (the runtime throws on them) | Done `2026-09-10` — **with corrected candidates.** Reading the workflows against the selection rule showed `verify-phase` and `milestone-gaps` are single-agent judgment protocols (no fan-out), so they stay markdown. The two that qualify were ported: `pan-exec-waves` (exec-phase's wave dispatch; refuses checkpoint phases; honours `parallelization`; halts before the next wave on failure; verifier closes) and `pan-diagnose-issues` (one debugger per failed UAT truth, root cause only, written back). All four scripts now carry `// twin:` lines. USER-GUIDE gained a native-workflows section (none existed) |
69
+ | 5b | P3 | M | 4 | **Drift test pinning script ⇄ markdown pairs** (the squad-roster pattern): each native script names its markdown twin; the test asserts the twin exists and that the script's phase list is a subset of the twin's numbered steps | `tests/native-workflows-drift.test.cjs` | Revert-prove by renaming a phase | Done `2026-09-10` — twin exists; roster parity (every spawned agent is named by the twin and shipped); phases agree both ways; meta literal-only and first; module-body parse; forbidden/resume-breaking constructs; null-filtered fan-outs; plugin scoping total over the set |
70
+ | 5c | P5 | M | 4 | **Behavioral gate**: run the ported protocol against a deployed install under PanLoop and compare chain completion to the markdown path (oracle-diffing) | `d:\pantesting`, PanLoop harness | Ship only if completion is ≥ the markdown path's | **Blocked `2026-09-10`: the PanLoop harness no longer exists on disk** (`D:\panwiz_recursiontest` is gone; only its transcript directory survives; `experiments/panloop*` are April experiment workspaces, not the harness). The scripts ship behind the static gate only. **Harness built the same day (ADR-0047, `harness/`):** scenarios `native-exec-waves-chain` and its oracle `markdown-exec-phase-chain` (tier 2, seed `two-plan-phase`) encode this gate; running them spends Claude usage and needs `--max-usd`, so the run is the user's call: `node harness/src/run.cjs --tier 2 --max-usd 20 --repeat 5 --scenario native-exec-waves-chain --scenario markdown-exec-phase-chain` |
71
+ | 6 | P5 | M | 4 | **Cache-TTL advice** in ADR-0044's surfaces: `context-budget` `cache.status` and hygiene `cache-context` recommend `subagentPromptCacheTtl: "1h"` when the ledger shows repeated cache **writes** of the same block within an hour (break-even is two reads). Optionally emit `experimental.cacheTtl: 1h` on long-running agents (executor, verifier) — it is documented frontmatter, so ADR-0028's "unverified frontmatter waits" rule is satisfied by the docs; still confirm on a live 2.1.248+ build | `pan-wizard-core/bin/lib/context-budget.cjs`, `pan-wizard-core/bin/lib/hygiene.cjs`, `agents/*.md`, `bin/install-lib.cjs` (frontmatter strip for non-Claude runtimes) | Advice text names the setting and the 2×-vs-1.25× write cost; non-Claude emitters strip the field | Done `2026-09-10` — as a **measured recommendation, not emitted frontmatter** (ADR-0046 D5): `assessCacheTtl()` in `context-budget.cjs` counts cache writes that followed a 5–60 min idle gap (suspect rows excluded), surfaced as `cache.ttl`; hygiene raises an `info`, never-fixable `cache-context` finding when it recurs. No `experimental.cacheTtl` emitted, so nothing to strip |
72
+ | 7a | P5 | S | 2 | **Decision spike**: `maxTurns` as a budget checkpoint on research/verify agents (partial + resume), `memory: project` vs PAN's own learnings store (likely decline), `isolation: worktree` vs `worktree.cjs` army isolation (overlap). Write the decision into the ADR-0045 successor or a short ADR-0046 | `docs/decisions/` | A written yes/no per field with the reason | Done `2026-09-10` — ADR-0046: `maxTurns` declined (revisit when a native workflow owns orchestration), `memory` declined (`.planning/memory/` + learnings already exist), `isolation: worktree` declined (`worktree.cjs` owns isolation; executors must commit where the orchestrator reads), `skills:` preload declined, `experimental.cacheTtl` → recommendation (item 6), `fork` declined |
73
+ | 7b | P5 | M | 4 | Adopt whatever 7a accepts, with `budget` profile wiring in `resolveEffortInternal`'s neighbourhood and non-Claude frontmatter stripping | `agents/*.md`, `pan-wizard-core/bin/lib/core.cjs`, `bin/install-lib.cjs` | PanLoop before/after on one phase chain | Closed `2026-09-10` — **no adoption, by decision** (7a accepted none of the fields for the shipped agents). Nothing to wire or strip |
74
+ | 8 | P7 | S | 2 | `resolveRate` accepts Claude Code's `modelPricing` shape as an override source (input/output only; keep family cache multipliers) | `pan-wizard-core/bin/lib/cost.cjs`, `tests/cost.test.cjs` | Precedence pinned: `cost.rates` config > `modelPricing` > `DEFAULT_RATES` | Done `2026-09-10` — `effectiveRates()` layers managed `modelPricing` (read from the per-OS managed-settings directory plus `managed-settings.d/` drop-ins; `PAN_MANAGED_SETTINGS_DIR` redirects) beneath `cost.rates`; cache rates derived from the family's multipliers; `models check` reports `managed_model_pricing`. Module-surface fixture regenerated for the four new exports |
75
+ | 9 | P6 | S | 2 | TROUBLESHOOTING "Models and Cost" / "Context and Sessions": effort frontmatter ignored before Claude Code 2.1.267 on pinned-default models; Gemini ≥0.59 drops `mcpServers` in untrusted workspaces (trust the workspace, then PAN's `pan` server appears); `/skill-doctor` lists PAN skills and `skillOverrides` can hide them; `/usage`'s prompt-cache line is how to check PAN's caching | `docs/TROUBLESHOOTING.md` | doc-lint clean (no noun-phrase counts; backtick version strings) | Done `2026-09-10` — five entries added. The model-version drift lint rejected the first draft's version-pinned model names in a live doc; reworded by capability |
76
+ | 10 | P6 | XS | 1 | Cross-reference this plan from `docs/IMPROVEMENT-TODO.md` and as a §8 pointer in the August review | `docs/IMPROVEMENT-TODO.md`, `docs/ECOSYSTEM-REVIEW-2026-08.md` | doc-lint clean | Done `2026-09-10` |
77
+ | 11 | P7 | L | 10 | **Body budget** for the four oversized command bodies — behavioural, needs live testing of a split, not a size check (August §3.1 note). `/skill-doctor` is now the measuring instrument | `commands/pan/focus-*.md` | Parked until a live-testing session is scheduled | Parked |
78
+ | 12 | P7 | XS | 1 | `marketplace/README.md`: document `--plugin-dir <folder-of-plugins>` as the no-marketplace dev loop (Claude Code ≥2.1.265) | `marketplace/README.md` | — | Done `2026-09-10` |
79
+ | 13 | P7 | XS | 1 | New model ids seen in the wild without a primary price source (`gemini-3.7-flash`, `gemini-3.8-flash`, `gpt-6`, Astra, MAI-Code): **do not add rates**; `pan-tools models check`'s staleness flag governs. Add only with a pricing-page citation in the commit | `pan-wizard-core/bin/lib/cost.cjs` | Blocked on sources | Blocked |
80
+ | 3b | P4 | S | 2 | **Found while doing 3.** Plugin command markdown refers to agents by bare name (`pan-planner`) while plugin agents load scoped (`pan-wizard:pan-planner`). The model may still match bare prose names by description; that is a guess until measured. Run probe 4a of `/pan-plugin-selftest` on a live install; if bare names do not resolve, the plugin content rewrite needs a scoped-name pass for agent mentions | `scripts/build-plugin.js`, `bin/install-lib.cjs` | Live probe first; no code until measured | **Blocked on an interactive Claude Code session** — probe 4 runs inside `/pan-plugin-selftest` on a live plugin install; a non-interactive run would spend the user's session and permissions, so it is the user's call. **Encoded as harness scenario `plugin-agent-scope` (tier 1, one model turn):** `node harness/src/run.cjs --tier 1 --max-usd 1 --scenario plugin-agent-scope` |
81
+ | 14 | P3 | S | 2 | **Found while doing 3.** `tests/installer-functions.test.cjs`, `tests/plugin-marketplace.test.cjs` and `scripts/plugin-path.js` all rebuild `dist/pan-wizard-plugin/` in place. Under `node --test` file-level parallelism one file's `rmSync` can race another's writes (seen `2026-09-10` in a targeted parallel run as an ENOENT mid-copy and a `trim` of undefined in plugin-path; both files pass when run alone, and `npm run test:all` has not shown it). Fix: build into a per-process output directory (env override on `OUT`) or serialise the builders with a lock | `scripts/build-plugin.js`, the two test files | Reproduce with a parallel targeted run before, confirm clean after | Done `2026-09-10` — `PAN_PLUGIN_OUT` override + refuse-to-wipe guard; tests build via `helpers.buildPluginInto()`; the two files pass together on two consecutive parallel runs |
82
+ | 4g | P4 | M | 4 | **Found in 4a (ADR-0045 D6).** The spec makes the PLUGIN ROOT the default working directory of a stdio server, and `server.cjs` resolves the project as `opts.cwd \|\| PAN_PROJECT_ROOT \|\| process.cwd()` — so under any Agent Plugins client every tool would read `.planning/` from inside the plugin cache and report an empty project, cleanly. Add an optional `cwd` (absolute project root) input to every registry **tool**, honoured per call, falling back to today's resolution; resources stay static (ADR-0041). Prerequisite for 4c/4d live gates | `pan-wizard-core/mcp/server.cjs`, `pan-wizard-core/mcp/tool-registry.cjs`, `tests/pan-zcode-mcp.test.cjs` | A `tools/call` with `cwd` pointing at a temp project returns that project's state while the server runs from another directory | Done `2026-09-10` — `withProjectCwd()` decorates every tool centrally in the registry (copies, not mutation); `validateProjectCwd()` pure shape check; server checks existence, strips `cwd` from the tool input, binds the git executor to the per-call root; resources untouched. Real-engine test: a server started in a default-profile project resolves a budget-profile project's model when `cwd` says so |
83
+
84
+ ---
85
+
86
+ ## Session queue (≈40 points each; P1 first, packaging before behaviour)
87
+
88
+ | Session | Items | Pts | Theme | Exit criterion |
89
+ |---|---|---|---|---|
90
+ | **S1** | 1, 1b, 2, 3, 8, 9, 12 (10 done) | 12 | Correctness and cheap wins | **Done `2026-09-10`.** Full suite green; `models check` verified date bumped; plugin build contains `workflows/` with scoped agent types; Codex hooks.json shows `async` on three observers; fresh five-runtime install verified in the test area. Two follow-ups surfaced (3b, 14) |
91
+ | **S2** | 4a, 4b, 4e (+14 first) | 20 | Agent Plugins core | **Done `2026-09-10`.** ADR-0045 Accepted; `dist/pan-agent-plugin/` builds from clean; conformance suite green and revert-proven; Claude plugin byte-identical; installer's unified-skills path verified on a fresh install. 4g added as the prerequisite for S3's live gates |
92
+ | **S3** | 4g first, then 4c, 4d, 4f, 3b | 16 | Agent Plugins vendor dirs + live gates | **Built `2026-09-10`; live gates outstanding.** 4g done and revert-proven (the bridge takes the project root per call); Copilot namespace and Codex hooks emitted and conformance-tested; both marketplaces and release gate 8 in place. Not done here: the live installs on Copilot CLI, Codex and Antigravity (no such CLI on the build machine) and 3b's interactive probe. **Both are now harness scenarios** (`live-gate-copilot`/`-codex`/`-antigravity`, tier 0, skip with reason where the CLI is absent; `plugin-agent-scope`, tier 1) — run `npm run harness` on a machine that has the CLIs |
93
+ | **S4** | 5a, 5b, 5c | 18 | §3.2 native workflows | **Done `2026-09-10` except 5c.** Two ported scripts (`pan-exec-waves`, `pan-diagnose-issues`) ship behind the static gate and drift pin; the behavioural gate is blocked because the PanLoop harness is gone — it becomes the new harness's first job |
94
+ | **S5** | 6, 7a, 7b | 10 | Cache and budget decisions | **Done `2026-09-10`.** `cache.ttl` recommendation in context-budget and hygiene; ADR-0046 declines every newer frontmatter field with reasons and names `maxTurns`'s revisit trigger; nothing emitted, nothing to strip |
95
+ | Parked | 11, 13 | — | Live-testing and source-blocked | Re-queue when a live session or a pricing page exists |
96
+
97
+ Ordering rationale. S1 fixes what is **wrong today** (a ledger error on the default model) and takes the two-point gaps that need no design. S2–S3 do the packaging **before** S4 because the August review's argument still holds: §3.2 is the only move with behavioural risk, and the bundle is where its output ships. S5 last because both items are decisions that PanLoop must adjudicate, and PanLoop runs need the packaging stable.
98
+
99
+ ---
100
+
101
+ ## What not to do (carried from August, plus three new)
102
+
103
+ - Do not retire the markdown workflows; do not chase a sixth runtime; do not standardise `.planning/`; do not soften PanLoop; do not list on a skills marketplace on quality grounds alone.
104
+ - **Do not fork the skills compiler for the Agent Plugins bundle.** One converter, two call sites — the same rule that governs the MCP bridge.
105
+ - **Do not emit frontmatter the target runtime has not been seen to read.** ADR-0028's rule; `experimental.cacheTtl` and `maxTurns` are documented, but confirm on a live build before default-on.
106
+ - **Do not add a model rate without a primary pricing citation in the commit.** The Sonnet 5 row is what happens when a pre-announced price is written down and the announcement changes.
107
+
108
+ ---
109
+
110
+ ## Sources read for this plan
111
+
112
+ Claude Code: `code.claude.com/docs/en/changelog`, `/sub-agents`, `/prompt-caching`, `/workflows`, `/settings-reference`. Anthropic pricing: `platform.claude.com/docs/en/about-claude/pricing`. Agent Plugins: `github.blog/changelog/2026-08-12-agent-plugins-1-0-in-vs-code-copilot-cli-and-the-copilot-app/`, `agent-plugins.org`, `github.com/agentplugins/agent-plugins-spec`, `docs.github.com/en/copilot/concepts/agents/about-plugins`, `antigravity.google/docs/cli/plugins/`. Codex: `learn.chatgpt.com/docs/changelog`, `codex.danielvaughan.com` (v0.148 hooks, v0.149.1 deprecation). Gemini: `geminicli.com/docs/changelogs/`. OpenCode: `opencode.ai/docs/mcp-servers/`, `/agents/`, `/skills/`. Agent Skills: `agentskills.io/specification`. Competitors: `github.com/github/spec-kit/releases`, `github.com/bmad-code-org/BMAD-METHOD/releases`, `github.com/glittercowboy/get-shit-done/releases`. MCP: `blog.modelcontextprotocol.io/posts/2026-07-28/`.
113
+
114
+
115
+ ---
116
+
117
+ ## Addendum — reality check, `2026-09-10` (evening)
118
+
119
+ First run of the `/reality-check` dev skill (`.claude/commands/reality-check.md`), against `feat/market-delta-2026-09-s1` @ `5684d38` (PR #29 open, all checks green, mergeable). The delta window was zero days, so Phases 2 and 3 re-verified the morning's claims against primary sources instead of scanning anew; Phases 1 and 4 are fresh measurement against a packed install in `d:\pantesting`. The narrative is §9 of [ECOSYSTEM-REVIEW-2026-08.md](../ECOSYSTEM-REVIEW-2026-08.md). Items below carry `R` ids so they do not collide with the plan's own numbering, and the session queue continues at S6. **The step-by-step execution plan for every item is [reality-check-2026-09-superplan.md](reality-check-2026-09-superplan.md)** (generated with `/superplan`; consume with `/execplan`).
120
+
121
+ ### Corrections to this plan
122
+
123
+ - **F2 and item 1b** claimed Fable 5.1 is "Claude Code's default since 2.1.257". The model-config page states: "Neither Fable model is the account-type default on any plan or provider." `default` resolves to Opus 5 (Max, Team Premium, Enterprise, API, Bedrock and Google Cloud) or Sonnet 5 (Pro, Team Standard); the `fable` and `best` aliases resolve to Fable 5.1. The rate row and the flagship bump remain correct — Fable 5.1 is the most capable generally available model and the alias target — but the stated reason was wrong, and it propagated to CHANGELOG `[Unreleased]` and a `cost.cjs` comment (item R1). Source: `code.claude.com/docs/en/model-config`, read `2026-09-10`.
124
+ - **F13** claimed BMAD and GSD had no release since May 2026. BMAD shipped `v6.11.0` (`2026-08-10`) and `v6.12.0` (`2026-09-04`). GSD's original repository (`gsd-build/get-shit-done`) was archived on `2026-06-26`; the project continues as `open-gsd/gsd-core` (`v1.11.0` `2026-08-19`, `v1.12.0` `2026-08-30`, `v1.13.0` `2026-09-06`). Taskmaster is the dormant one (last release `2026-03-31`). Sources: the GitHub releases API for each repository, read `2026-09-10`.
125
+
126
+ ### Baseline (measured this run — reproduce with the commands, never copy the numbers)
127
+
128
+ | Check | Result | Reproduce |
129
+ |---|---|---|
130
+ | Suite | green, no skips | `npm run test:all` |
131
+ | Release gates | all passed | `node scripts/release-check.js` |
132
+ | Harness, model-free tier | every runnable scenario passed; the Codex, Copilot and Antigravity live gates skipped (no CLI on this machine). A concurrent tier-2 run the same evening is RC22 | `npm run harness` |
133
+ | Packed install, five runtimes | clean; every registration file present; OpenCode config at `.opencode/opencode.json` | skill Phase 1.3 |
134
+ | Installed bridge | `initialize` negotiates; every advertised resource reads through the real engine on a bare project; argument validation rejects a malformed `tools/call` | skill Phase 1.3 probe |
135
+ | CI | PR #29: every check green, mergeable | `gh pr view 29 --json statusCheckRollup` |
136
+ | Rate table | every row matches the pricing page; `RATES_VERIFIED_AT` is today | `pan-tools models check` |
137
+ | Context footprint | command and agent descriptions together stay far under the subagent-description warning; the emitted body-budget offenders are the four source offenders plus `pan-army` | skill Phase 4.1 |
138
+
139
+ ### Findings
140
+
141
+ | # | Finding (verified `2026-09-10`) | Phase | Class |
142
+ |---|---|---|---|
143
+ | RC1 | "Fable 5.1 is Claude Code's default" — false per model-config; appears in CHANGELOG `[Unreleased]` (three phrasings), a `cost.cjs` comment, and F2/1b above | 2.3 | P1 WRONG |
144
+ | RC2 | `validate health` exits 0 with `status: broken` (E001 on an uninitialised project); `cmdValidateHealth` passes no exit code and `errors[]` is outside the error family; CLI-REFERENCE says verdict commands set it explicitly; no test | 1.3 | P1 WRONG |
145
+ | RC3 | F13 false for BMAD and GSD (above) | 3.1 | P1 WRONG |
146
+ | RC4 | README describes a "Location — global or local" prompt; the installer prompts for runtime only and defaults to local silently | 1.2 | P6 |
147
+ | RC5 | README's Hook System row embeds a hook count, and it is wrong (six ship) — delete the number | 1.2 | P6 |
148
+ | RC6 | COMPARISON.md ("Last verified: March 2026"): MCP row false; "nobody else" and "no competitor" claims false against gsd-core and Spec Kit; Continue.dev read-only since June 2026; Windsurf is Devin Desktop, Cascade removed `2026-09-08`; Aider dormant; PAN's own rows understated (multi-agent, git, cost, cross-runtime, session, context, plan verification, codebase awareness, the leads list) | 1.2, 3 | P6 |
149
+ | RC7 | README claims weakened by source: bot army framed as five-CLI (Claude Code only); fresh-context spawning code-verified on Claude and prose-adapted elsewhere; plan-checker loop capped at three passes; per-task commits coalesce trivial tasks (P-1605); reviewer-class agents pin a model despite "every agent inherits"; `mode` and `depth` are prompt defaults, not config defaults; abort kill-switch is prompt-enforced; campaign budget advisory unless `budget.enforce` | 1.2 | P6 |
150
+ | RC8 | OpenCode local config path `.opencode/opencode.json` is read by OpenCode's loader (source: `packages/opencode/src/config/config.ts`, the `.opencode` directory branch) but not listed on `opencode.ai/docs/config`; `MCP_REGISTRATION.opencode.why` cites the docs page. No `live-gate-opencode` or `live-gate-gemini` harness scenario exists | 1.3, 2.1 | P4, P3 |
151
+ | RC9 | `resolveRate` returns `null` for `claude-mythos-5-1`, `claude-mythos-5`, `claude-opus-4-5-20251101`, `claude-sonnet-4-5-20250929`; all four are priced on the pricing page today | 2.3, 4.3 | P2 |
152
+ | RC10 | "Zero runtime dependencies" is unpinned — no test or gate asserts `package.json` has no `dependencies` | 1.2 | P3 |
153
+ | RC11 | MCP `SERVER_INFO.version` is a hardcoded `0.1.0`; the package is `3.27.0` | 1.3 | P7 |
154
+ | RC12 | Codex and Copilot marketplaces resolve to `./dist/pan-agent-plugin` with no rebuild-on-resolve (the Claude `command` source has one). `dist/` was stale today (built before the S3 vendor-directory commit); a fresh build carries `com.github.copilot/` and `hooks/` | 2.4 | P4 |
155
+ | RC13 | Stray `nul/` npm-cache directory in the source root (created `2026-08-21`); git prints a warning on every command | 1.4 | P7 |
156
+ | RC14 | TROUBLESHOOTING precision: Gemini's trusted-folders doc says the whole project `.gemini/settings.json` is skipped in untrusted folders (hooks too, not only MCP); Claude Code `2.1.267` adds `maxEffortLevel`, which can clamp PAN's `effort:` frontmatter; Codex `0.154.0` refreshes plugin skills and hooks in live sessions | 2.1 | P6 |
157
+ | RC15 | Copilot CLI `1.0.83`: custom agents accept a `model:` list tried in order plus `model-policy: required` — a fallback-list surface for PAN's model-pinned agents (ADR-0028's live-check gate applies) | 2.1 | P5 |
158
+ | RC16 | Antigravity variant still deferred (ADR-0045): own `$schema`, `mcp_config.json`, also scans `_agents/plugins/`; the live-gate scenario exists and skips. Superpowers documents `agy plugin install <github-url>` of a `.claude-plugin` repository — if Antigravity loads Claude-format plugins, the variant collapses to a marketplace entry (unverified) | 2.1, 3.2 | P4 |
159
+ | RC17 | gsd-core uses `.planning/` with `ROADMAP.md`, `STATE.md`, `PROJECT.md`, `config.json`, `phases/`, `quick/` — the same names PAN uses. A project with both installed has two writers; `validate health` and `hygiene scan` cannot tell a foreign layout from a broken one | 3.2 | P5 |
160
+ | RC18 | Every runtime directory carries its own full `pan-wizard-core` copy (one per selected runtime, plus one more with `--unified-skills`); ADR-0028 Phase 2 already introduced a shared core for unified skills, the per-runtime copies remain. Measure with the skill's Phase 4.2 command | 4.2 | P7 |
161
+ | RC19 | Body budget: the emitted skills over the recommendation are the four source offenders plus `pan-army` (the adapter header pushes it over) — item 11, unchanged, parked | 4.1 | P7 |
162
+ | RC20 | Behavioural claims with no harness scenario: research → plan → checker loop, UAT diagnosis, quick mode, pause and resume, bot army, unified-skills discovery, map-codebase modes. 5c and 3b still await a spend cap | 1.2 | P3 |
163
+ | RC21 | Peer roster: OpenSpec (Fission-AI) is the largest spec-driven project by stars, released steadily in the window, and is absent; Taskmaster is dormant | 3.1 | P6 |
164
+ | RC22 | **Markdown exec-phase chain completed three of five reps** on a deployed `3.27.0` @ `8e776bf` build (concurrent session's tier-2 run `run-20260910-190841-i1aw`, twenty-dollar cap reached): rep 4 exited non-zero with `passed=false`; rep 5 produced no summaries and no source files. The native `pan-exec-waves` chain was budget-starved before step 1 in every rep (pre-`87e53c9` equal split) and is unmeasured. The chain-drop class PanLoop closed at 16/16 is back to a measured three of five here | 1.3 | P2 STABILITY |
165
+ | RC23 | `plugin-agent-scope` (tier 1): two runs, zero spend, seconds each, neither greppable line printed — the model step did not really run, yet the ledger now holds two findings that the two-run rule will promote. A probe that never invoked the model should record `error`, not a finding | 1.3 | P3 |
166
+ | RC24 | **Headless `claude -p` abandons a background Workflow after ten minutes** (`code.claude.com/docs/en/headless`, "Background tasks at exit", read `2026-09-10`): every native-chain rep so far died at ~605 s with `Workflow aborted` and no verification file — including the two the other session's run filed as findings. The chain was never measured; the ceiling was. `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0` lifts it | 1.3 (R19) | P2 STABILITY (harness) |
167
+ | RC25 | The R21 A/B: splitting the oversized command body does not reduce the cost of using it (+7% cost, +40% time, same artefact structure) — the Agent Skills body budget protects activation cost, and a PAN command's activation is its invocation | 4.1 (R21) | P7 (closes item 11) |
168
+ | RC26 | **When `claude -p` aborts a background Workflow, its agents' spend is dropped from `total_cost_usd` along with the partial result**: the five ceiling-killed native reps reported $0.25–$0.58 each while two executors had run to completion; the five completed reps under the lifted ceiling reported $4.19–$5.16, so the accounting is right for a workflow that finishes. The budget cap is blind only to killed workflows. The workflow state file (`~/.claude/projects/<ws>/<session>/workflows/wf_*.json`) carries `totalTokens` and per-agent token counts | 1.3 (R19) | P2 STABILITY (harness) |
169
+
170
+ ### Items
171
+
172
+ | ID | Pri | Size | Pts | Title | Files | Gate / verify | Status |
173
+ |---|---|---|---|---|---|---|---|
174
+ | R1 | P1 | XS | 1 | Reword the Fable default claim to "the model the `fable` and `best` aliases resolve to" — CHANGELOG `[Unreleased]` (three sites), `cost.cjs` comment | `CHANGELOG.md`, `pan-wizard-core/bin/lib/cost.cjs` | `grep -n "Claude Code.*default" CHANGELOG.md pan-wizard-core/bin/lib/cost.cjs` finds nothing near Fable | Done `2026-09-10` (c35c41d) |
175
+ | R2 | P1 | S | 2 | `validate health` sets its exit code explicitly (non-zero on `broken`, as `reconcile` does); consider a distinct `uninitialized` status for E001; a test pins both | `pan-wizard-core/bin/lib/verify.cjs`, `tests/`, `pan-wizard-core/workflows/health.md` (parses JSON, unaffected) | on a bare directory: exit non-zero, JSON unchanged | Done `2026-09-10` (f34423b) |
176
+ | R3 | P1 | XS | 1 | F13 correction — done above; §8 of the August review points here via §9 | this file, `docs/ECOSYSTEM-REVIEW-2026-08.md` | — | Done `2026-09-10` |
177
+ | R4 | P6 | S | 2 | README accuracy pass: remove the location-prompt step; delete the hook count; qualify the Claude-only and capped claims (RC7) | `README.md` | doc-lint clean; a re-run of the skill's Phase 1.2 shows no FALSE row | Done `2026-09-10` (a9df350) |
178
+ | R5 | P6 | M | 4 | COMPARISON.md refresh: peer columns (Continue.dev read-only, Windsurf to Devin Desktop, Aider dormant, Cline 4.x, Cursor 3.0), the understated PAN rows, a direct-peer table (Spec Kit, BMAD, gsd-core, Superpowers, OpenSpec), rewrite "Leads" against gsd-core and Spec Kit | `docs/COMPARISON.md` | every "no competitor" claim carries a dated peer check | Done `2026-09-10` (b9ca497) |
179
+ | R6 | P3 | S | 2 | Harness `live-gate-opencode.json` and `live-gate-gemini.json` (`requires.cli`); cite the loader source in `MCP_REGISTRATION.opencode.why` | `harness/scenarios/`, `bin/install-lib.cjs` | scenarios skip with reason here; pass on a machine with the CLIs | Done `2026-09-10` (5320552) |
180
+ | R7 | P2 | S | 2 | Rate rows for `claude-mythos-5-1`, `claude-mythos-5`, `claude-opus-4-5`, `claude-sonnet-4-5` with the pricing-page citation in the commit; a test that the dated ids resolve | `pan-wizard-core/bin/lib/cost.cjs`, `tests/cost.test.cjs` | `resolveRate` non-null for all four | Done `2026-09-10` (1d42428) |
181
+ | R8 | P3 | XS | 1 | Test: `package.json` has no `dependencies` key (also a release-gate line) | `tests/`, `scripts/release-check.js` | revert-prove by adding a dependency | Done `2026-09-10` (79582dc) |
182
+ | R9 | P7 | XS | 1 | `SERVER_INFO.version` read from the install's `package.json` (fallback to the current literal) | `pan-wizard-core/mcp/server.cjs`, `tests/pan-zcode-mcp.test.cjs` | `initialize` returns the package version on an install | Done `2026-09-10` (ab50f06, 27945f2) |
183
+ | R10 | P4 | S | 2 | Bundle freshness: release gate 8 fails if `dist/pan-agent-plugin/` exists and differs from the fresh build; `marketplace/README.md` says to build before a local Codex or Copilot install | `scripts/release-check.js`, `marketplace/README.md` | a stale `dist/` turns the gate red | Done `2026-09-10` (fecb9d2) |
184
+ | R11 | P7 | XS | 1 | Remove the stray `nul/` directory. Windows reserved name, so use the extended-path form from cmd: `rd /s /q \\?\D:\PanWizard\nul` | repository root | `git status` prints no warning | Done — verified gone `2026-09-22` (see the second addendum's corrections) |
185
+ | R12 | P6 | XS | 1 | TROUBLESHOOTING precision (RC14), written by capability | `docs/TROUBLESHOOTING.md` | model-version-drift lint clean | Done `2026-09-10` (2f36176) |
186
+ | R13 | P5 | S | 2 | Copilot agent `model:` fallback lists for the model-pinned agents | `bin/install-lib.cjs` (`convertClaudeToCopilotAgent`), tests | live check on Copilot CLI at or above `1.0.83` before default-on | Live-probed `2026-09-26` (Copilot CLI 1.0.88): `model-policy: prefer` refused to load → now `preferred`; the list field is `models:`, not `model:` → fixed; Copilot ids are dotted. Still not wired: an `auto` session (every Copilot Free session) ignores agent models, so list fall-through needs a paid plan — harness `copilot-agent-frontmatter` |
187
+ | R14 | P4 | M | 4 | Antigravity: first test whether `agy plugin install` accepts the Claude plugin (Superpowers precedent); if yes, a marketplace entry; if no, the thin variant ADR-0045 deferred | `scripts/build-agent-plugin.js`, `harness/scenarios/live-gate-antigravity.json` | live gate passes | Probe added `2026-09-10` (194565c) — pending `agy` |
188
+ | R15 | P5 | S | 2 | Foreign-layout detection: `hygiene scan` and `validate health` recognise a gsd-core `.planning/` by its marker files and report a foreign planning tree instead of "broken" | `pan-wizard-core/bin/lib/hygiene.cjs`, `verify.cjs`, tests | fixture with a gsd-shaped tree | Done `2026-09-10` (a3c4f28) |
189
+ | R16 | P7 | L | 10 | One core per project: decision and ADR on collapsing the per-runtime `pan-wizard-core` copies onto the shared `.agents/pan-wizard-core/` for local installs (global installs cannot share) — uninstall ref-counting and path rewriting are the cost | ADR, `bin/install.js`, `bin/install-lib.cjs` | decision first | Closed `2026-09-10`: ADR-0048 Accepted with option A (status quo) |
190
+ | R17 | P3 | M | 4 | Harness scenarios for RC20's uncovered behaviours (tiers 1 and 2), plus the pending 5c and 3b runs | `harness/scenarios/` | `--max-usd` provided | Built `2026-09-10` (fc0e16c) — six scenarios, three seeds; runs need a cap |
191
+ | R18 | P6 | XS | 1 | Roster: add OpenSpec, mark Taskmaster dormant, point GSD at `open-gsd/gsd-core` — done in the skill's Appendix B and in §9 | `.claude/commands/reality-check.md` | — | Done `2026-09-10` |
192
+ | R19 | P2 | M | 4 | **Run 5c for real:** `node harness/src/run.cjs --scenario markdown-exec-phase-chain --scenario native-exec-waves-chain --tier 2 --repeat 5 --max-usd 50` (the README's sizing for both chains); read the two failed markdown reps' workspaces under `ws/` for the drop point; compare completion. Recommend the native path only if it completes at least as often | `harness/`, `d:/pantesting/harness-runs/` | native completion at or above markdown, five reps each | Done `2026-09-11`: markdown 5/5 (mean $4.97, 14.4 min), native 5/5 under the lifted ceiling (mean $4.71, 12.3 min); native recommended on Claude Code |
193
+ | R20 | P3 | S | 2 | Probe integrity: a `model` step that spent nothing and returned in seconds records `error` with the runner's stderr, never a finding; find why `plugin-agent-scope` produced no output (plugin not installed into the workspace? `claude -p` refused?) | `harness/src/`, `harness/scenarios/plugin-agent-scope.json` | a zero-spend model step cannot create a finding; revert-prove | Done `2026-09-10` (5eb7ae7) |
194
+ | R22 | P2 | S | 2 | **Lift the headless background-wait ceiling** for every harness model step (`modelEnv()`), persist each model step's full output under `<run>/steps/`, document in `harness/README.md`; withdraw the two native-chain ledger findings the ceiling caused | `harness/src/model.cjs`, `harness/src/run.cjs`, `harness/README.md`, `harness/ledger.jsonl` | a native rep runs past ten minutes and its verifier writes | Done `2026-09-10` (2c5bc94); ledger withdrawal done `2026-09-11` (0264a8a) |
195
+ | R23 | P2 | M | 4 | **Re-run the native chain under the lifted ceiling**, five reps, and draw the markdown-versus-native comparison item 5c was for | `harness/` | five native reps measured; comparison recorded in §9's successor | Done `2026-09-11` (`run-20260910-235141-ITzx9T`): native five of five, verification file every rep, $23.55 total |
196
+ | R24 | P3 | S | 2 | **Account for workflow spend**: after a model step, read the workspace session's `workflows/wf_*.json` (per-agent `tokens`, `model`) and price it with `cost.cjs` rates; add it to the step's `costUsd` and to the budget accounting, and flag `costSource: workflow-state` in the report | `harness/src/run.cjs`, `harness/src/model.cjs` | a killed rep's recorded cost matches its workflow state's token total | Open (P3: only aborted workflows lose their cost, see RC26) |
197
+
198
+ ### Session queue (continues from S5)
199
+
200
+ | Session | Items | Pts | Theme | Exit criterion |
201
+ |---|---|---|---|---|
202
+ | **S6** | R1, R2, R4, R7, R8, R9, R12 | 10 | Truth pass before the next release | CHANGELOG states the right reason; `validate health` exit pinned; README has no false statement; four rate rows cited; zero-dep pinned |
203
+ | **S7** | R5, R6, R10, R15 | 10 | Comparison and gates | COMPARISON refreshed with dated peer checks; OpenCode and Gemini gates exist; a stale bundle cannot pass gate 8; a foreign `.planning/` is recognised |
204
+ | **S8** | R20, then R19, R13, R14, R17 | 16 | Gated on CLIs and spend | R20 first so the next model run cannot file phantom findings; then run where `copilot`, `agy` and a spend cap exist |
205
+ | Decision | R16 | — | Footprint | an ADR either way |
206
+
207
+ Ordering rationale: S6 fixes what is wrong in the tree that PR #29 is about to merge, and costs a session. S7 makes the outward-facing claims true and closes the two harness gaps. S8 waits for machines this one is not.
208
+
209
+ ### What not to do — re-affirmed, with two additions
210
+
211
+ All eight inherited entries hold. Added: **do not describe `.planning/` as unthreatened or unique** (gsd-core shares the layout; the differentiator is depth); **do not write "no competitor" or "nobody else" in an evergreen doc without a dated peer check** (such claims were false today where checked).
212
+
213
+ ### Sources read for this addendum (all `2026-09-10`)
214
+
215
+ Claude Code: `code.claude.com/docs/en/model-config`, `/changelog`, `/sub-agents`, `/workflows`, `/plugins`, `/plugin-marketplaces`, `/hooks`, `/skills`; `raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md`. Anthropic pricing: `platform.claude.com/docs/en/about-claude/pricing`, `/models/overview`, `/about-claude/model-deprecations`. Codex: `github.com/openai/codex/releases`, `learn.chatgpt.com/docs/build-skills`, `/docs/hooks`, `/docs/extend/mcp`, `/docs/config-file/config-reference`, `developers.openai.com/plugins/build/plugins`. Gemini and Antigravity: `github.com/google-gemini/gemini-cli/releases` and PR `#29099`, `geminicli.com/docs/cli/trusted-folders/`, `/docs/hooks/`, `/docs/extensions/reference/`, `antigravity.google/docs/plugins/`, `/docs/cli/plugins/`, `/docs/models/`. OpenCode: `opencode.ai/docs/config/`, `/docs/mcp-servers/`, `/docs/agents/`, `/docs/skills/`, `raw.githubusercontent.com/anomalyco/opencode/dev/packages/opencode/src/config/config.ts`, issue `anomalyco/opencode#3407`. Copilot: `github.com/github/copilot-cli/releases`, `docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating`, `/plugins-marketplace`, `/create-custom-agents-for-cli`, `/use-hooks`, `docs.github.com/en/copilot/reference/copilot-cli-reference/cli-plugin-reference`. Standards: `agent-plugins.org/specification`, `github.com/agentplugins/agent-plugins-spec` (`spec/1.0.0.md`, `schemas/1.0.0/*.json`, `MAINTAINERS.md`), `agentskills.io/specification`, `modelcontextprotocol.io/specification/latest` and `/2026-07-28/changelog`, `blog.modelcontextprotocol.io/posts/mcp-roadmap/`. Peers: GitHub releases API and READMEs for `github/spec-kit`, `bmad-code-org/BMAD-METHOD`, `open-gsd/gsd-core` (and the archived `gsd-build/get-shit-done`), `eyaltoledano/claude-task-master`, `obra/superpowers`, `Fission-AI/OpenSpec`, `ComposioHQ/agent-orchestrator`; `cursor.com/changelog`; `docs.devin.ai/desktop/changelog` and `/release-notes/overview`; Cline `CHANGELOG.md` and releases; `aider.chat/HISTORY.html`; `github.com/continuedev/continue`; `github.blog/changelog` (August and September 2026). Secondary-only material was excluded from every verdict; the peer agent's list of such claims is in the run transcript, not here.
216
+
217
+
218
+ ---
219
+
220
+ ## Addendum — reality check, `2026-09-22` (executed `2026-09-23`)
221
+
222
+ Second run of the `/reality-check` dev skill, against `main` @ `371a76b` (`3.29.0`), reported to chat on `2026-09-22` without `--write`. Its queue, R25–R38, was executed on `2026-09-23` on branch `feat/reality-check-2026-09-22` (uncommitted at the time of writing; the user decides the commits). Every external fact the items encode was re-read from its primary source on `2026-09-23` — and two of the `2026-09-22` readings did not survive that re-read (corrections 3 and 4 below). The narrative is §10 of [ECOSYSTEM-REVIEW-2026-08.md](../ECOSYSTEM-REVIEW-2026-08.md). IDs continue the first addendum's numbering.
223
+
224
+ ### Corrections
225
+
226
+ 1. **The first addendum's baseline row "Rate table — every row matches the pricing page; `RATES_VERIFIED_AT` is today" was true for the Anthropic rows only.** The Gemini rows' cache reads were 2.5× their page (`0.25×` input where Google's context-caching price is `0.1×`), GPT-5.6 Terra's and Luna's cache writes were a fifth low (OpenAI now bills writes at `1.25×` input on its newer families), the bare `gpt-5.6` row carried a `$5/$30` no page listed, and Codex's documented default had no row. §9 of the August review repeats the claim ("the rate rows match the provider pricing page read today"); §10 records the correction there rather than editing the dated section.
227
+ 2. **R11 is done, not open.** The stray `nul/` directory is gone (checked `2026-09-22`).
228
+ 3. **RC29's "Google bills no per-token cache write, so `cache_write = input` is unsupported" is refuted in part.** Google Cloud's context-cache overview bills the tokens that create a cache "at the standard input token price"; the Gemini API pages list only cached-token and storage charges. So `cache_write = input` stands. What cannot be represented is the hourly storage charge, and the rows now say so.
229
+ 4. **The `2026-09-22` scout's GPT-6 prices and Codex default were wrong or stale.** Re-read from the pricing page's raw arrays on `2026-09-23`: GPT-6 Astra `$10/$50`, Sol `$2/$10`, Luna `$0.10/$0.50` (not `$20/$100`, `$4/$20`, `$0.20/$1.00`). GPT-6 Sol and Luna were released on `2026-09-22`, and Codex's configuration docs moved their default example from `gpt-5.6-sol` to `gpt-6-sol` the same day. Lesson kept in the skill's method notes: a scout's number is a lead until a second read of the raw page agrees.
230
+
231
+ ### Findings
232
+
233
+ | # | Finding (verified `2026-09-22`, re-read `2026-09-23`) | Class |
234
+ |---|---|---|
235
+ | RC27 | Gemini CLI hooks never fired. PAN wrote `PostToolUse`, `SubagentStop` and `Stop` into `.gemini/settings.json`; Gemini's `HookEventName` enum has none of them and its registry skips unknown keys with a warning. Only the `SessionStart` update check ever ran | P1 WRONG |
236
+ | RC28 | Claude Code `2.1.280` made Opus 5.5 the default on every plan; `resolveRate` priced it as Opus 5 (cache reads 2.5× high on the model PAN's inherit tier runs on) | P1 WRONG |
237
+ | RC29 | Gemini and OpenAI rows never matched their pricing pages (correction 1) | P1 WRONG |
238
+ | RC30 | `PROVIDER_MODELS.openai` held the literal tier names `'mid'` and `'fast'`; the Google tiers sat on the Gemini 2.5 family, which is limited to past users | P1 WRONG |
239
+ | RC31 | `--unified-skills` left Claude Code with no command surface: the nested commands were swept and Claude does not read `.agents/skills/` | P1 WRONG |
240
+ | RC32 | README called the focus-auto safety harness five-layer; the command defines six. Plus drift-prone inventory counts in README and COMPARISON | P1 WRONG (docs) |
241
+ | RC33 | Release Gate 8 red locally on a stale `dist/pan-agent-plugin` | P2 |
242
+ | RC34 | The calendar staleness rule (then 180 days) cannot see a default-model change | P3 |
243
+ | RC35 | Nothing pinned emitted hook keys against a documented vocabulary, so tests generated from the installer's table agreed with the installer | P3 |
244
+ | RC36 | The flat `.claude/skills/pan-*.md` shims (E-5, v2.10.0) were never loaded: Claude's loader reads `<skills>/<entry>/SKILL.md` only | P7 |
245
+ | RC37 | Weakened README/COMPARISON claims: army gating, fresh context, the merge gate, the Codex install path, per-task commits and plan sizing, the reviewer model pin, undated "unique" and "pioneered", stale Windsurf lines | P6 |
246
+ | RC38 | TROUBLESHOOTING lacked `--bare`, the gated task tools, `AGENTS.md` loading and the default-model change | P6 |
247
+ | RC39 | Inherited status drift (correction 2) | P6 |
248
+ | RC40 | **New, `2026-09-23`.** Copilot CLI also reads hooks from `.claude/settings.json` and `.claude/settings.local.json` (its hooks reference, and PascalCase names since `1.0.6`). In a project with both the Claude and Copilot runtimes installed, PAN's hooks may run twice under Copilot — once from each file. Unverified live | P2 |
249
+ | RC41 | **New.** CLI-REFERENCE says the `AGENTS.md` rules section is "read natively by every runtime"; Gemini CLI reads `GEMINI.md` by default and PAN configures nothing else for it. Unverified against Gemini's context-file docs today | P6 |
250
+ | RC42 | **New.** OpenCode is detected as the `openai` provider by its directory, so R28's `gpt-6-*` ids reach it as bare names; OpenCode's own model ids are `provider/model`. The placeholders were worse; the right OpenCode mapping is unverified | P5 |
251
+ | RC43 | **New.** Codex skips hooks that are not managed until the user trusts them with `/hooks`, keyed on a hash of the hook definition (its hooks reference) — a reinstall that changes PAN's hook commands asks again. Not in TROUBLESHOOTING | P6 |
252
+ | RC44 | **New.** The Claude plugin's `hooks/hooks.json` registers no stop guard, so a plugin install lacks P-1809's boundary protection that a loose install has | P4 |
253
+
254
+ ### Items
255
+
256
+ | ID | Pri | Size | Pts | Title | Files | Gate / verify | Status |
257
+ |---|---|---|---|---|---|---|---|
258
+ | R25 | P1 | XS | 1 | `claude-opus-5-5` row with the `0.05×` cache multiplier | `cost.cjs`, `tests/cost.test.cjs` | dated and `[1m]` ids resolve to the 5.5 row | Done `2026-09-23` — revert-proven (dropping the row fails the default-models test) |
259
+ | R26 | P1 | S | 2 | Gemini rows: cache read `0.1×`, writes at input, 3.x Flash rows | `cost.cjs`, tests | rows cite the page; test | Done `2026-09-23` — every Gemini row pinned at `0.1×`; storage documented as excluded |
260
+ | R27 | P1 | S | 2 | OpenAI rows: Sol and the GPT-6 family; Terra/Luna writes; bare `gpt-5.6` | `cost.cjs`, tests | Codex default resolves exactly | Done `2026-09-23` — the bare id was kept as an alias of Sol (its model page says so) rather than retired |
261
+ | R28 | P1 | S | 2 | Real model ids for the OpenAI and Google routing tiers | `core.cjs`, tests | no tier resolves to a tier name or an unpriced id | Done `2026-09-23` — revert-proven |
262
+ | R29 | P1 | M | 4 | Gemini hook mapping and payload adaptation | `install-lib.cjs`, `install.js`, `hooks/pan-stop-guard.js`, tests, `docs/HOOKS.md` | fixture install; live gate on a Gemini machine | Done `2026-09-23` statically (upgrade and uninstall paths tested, one-shot marker revert-proven). **Live gate outstanding** — no Gemini CLI here |
263
+ | R30 | P3 | S | 2 | Hook-vocabulary fixture test | `tests/fixtures/hook-vocabulary.json`, `tests/hook-vocabulary.test.cjs` | fails on the pre-fix Gemini keys | Done `2026-09-23` — revert-proven |
264
+ | R31 | P3 | S | 2 | Documented-default-ids fixture test | `tests/fixtures/documented-default-models.json`, `tests/documented-default-models.test.cjs` | fails without the Opus 5.5 row | Done `2026-09-23` — revert-proven |
265
+ | R32 | P1 | S | 2 | Claude copy of the unified skills; README and guide wording | `install.js`, tests, harness scenarios, docs | tier-0 assertion; discovery scenario when spend allowed | Done `2026-09-23` — tier-0 scenario `unified-skills-claude` added; the tier-1 discovery run still needs a cap |
266
+ | R33 | P7 | S | 2 | Verify, then convert or remove the flat shims | `install.js`, `install-lib.cjs`, tests | manifest and uninstall paths updated | Done `2026-09-23` — verified dead from the 2.1.280 loader and the docs; removed, with upgrade and uninstall sweeps |
267
+ | R34 | P6 | S | 2 | README and COMPARISON truth pass | `README.md`, `docs/COMPARISON.md` | doc-lint green; no FALSE row | Done `2026-09-23` — contract numbers (loop caps, plan sizing) and "five runtimes" kept; inventory counts removed |
268
+ | R35 | P6 | XS | 1 | TROUBLESHOOTING entries; qualify the todo tool in exec-phase | `docs/TROUBLESHOOTING.md`, `commands/pan/exec-phase.md` | model-version lint green | Done `2026-09-23` |
269
+ | R36 | P6 | XS | 1 | Addendum corrections | this file | — | Done `2026-09-23` (this addendum) |
270
+ | R37 | P7 | XS | 1 | Rebuild `dist/pan-agent-plugin` | `dist/` | Gate 8 green | Done `2026-09-23` |
271
+ | R38 | P2 | XS | 1 | Tighten the staleness rule | `cost.cjs`, `docs/CLI-REFERENCE.md` | — | Done `2026-09-23` — sixty days; R31's fixture carries the default-change case |
272
+ | R39 | P2 | S | 2 | Duplicate hooks when Claude and Copilot share a project (RC40): measure on a Copilot machine, then dedupe (skip the Copilot file's hooks when `.claude/settings.json` carries PAN's, or the reverse) | `bin/install.js`, `hooks/` | a Copilot session in a two-runtime project fires each PAN hook once | Done `2026-09-26` (`3.31.0`): measured on Copilot CLI 1.0.88 — every PAN hook ran twice (once per registration) once repository hooks load; the `.github` copy now defers to a Claude registration of the same script; re-measured: once each. Headless `copilot -p` loads no repository hooks in an untrusted folder (`GITHUB_COPILOT_PROMPT_MODE_REPO_HOOKS`) |
273
+ | R40 | P6 | XS | 1 | Verify Gemini's context-file names, then fix CLI-REFERENCE's "read natively by every runtime" (RC41) | `docs/CLI-REFERENCE.md`, maybe the installer | Gemini docs cited | Done `2026-09-26`: the sentence was already corrected in the 3.30.0 doc audit; verified against gemini-cli `DEFAULT_CONTEXT_FILENAME = 'GEMINI.md'` (AGENTS.md loads only when `context.fileName` names it). Installer unchanged |
274
+ | R41 | P5 | S | 2 | OpenCode model ids for routing (RC42): read OpenCode's model-id docs and map the tiers to `provider/model` for the OpenCode directory | `core.cjs`, tests | an OpenCode project resolves to a documented id | Done `2026-09-26` (`3.31.0`): `OPENCODE_MODELS`, `hostRuntime()` from the install location, provider from OpenCode's configured `model` |
275
+ | R42 | P6 | XS | 1 | TROUBLESHOOTING: Codex's per-hash hook trust (RC43) | `docs/TROUBLESHOOTING.md` | — | Done `2026-09-26` (`3.31.0`): TROUBLESHOOTING entry and the installer's Codex notice |
276
+ | R43 | P4 | S | 2 | Stop guard in the Claude plugin's hooks (RC44) | `scripts/build-plugin.js`, tests | the built plugin registers the guard on `Stop` | Done `2026-09-26` (`3.31.0`) |
277
+ | R44 | P5 | M | 4 | A Gemini context monitor from the transcript's per-message token counts (Gemini records `tokens.input` per message in its JSONL session file) and a sourced context-window table | `hooks/`, `bin/install-lib.cjs` | live Gemini session shows a warning near the limit | Open — needs a Gemini CLI to verify |
278
+
279
+ ### Session queue (continues from S8)
280
+
281
+ | Session | Items | Pts | Theme | Exit criterion |
282
+ |---|---|---|---|---|
283
+ | **S9** | R25, R26, R27, R28, R31, R36, R38 | 11 | Truth on today's defaults | **Done `2026-09-23`.** Every documented default prices at an exact row; no routing tier is a placeholder |
284
+ | **S10** | R29, R30, R32, R33 | 10 | Hooks and the skills surface | **Done `2026-09-23` statically.** Gemini writes only its own event names; Claude has commands under unified skills; the shims are gone |
285
+ | **S11** | R34, R35, R37 | 4 | Docs and the bundle | **Done `2026-09-23`** |
286
+ | **S12** | R40, R42, R43, then R41 | 6 | Small follow-ups found while executing S9–S11 | the four doc and plugin gaps closed |
287
+ | Needs machines | R39, R44, the R29 live gate | — | Copilot and Gemini CLIs | run where the CLIs exist |
288
+
289
+ ### What not to do — re-affirmed
290
+
291
+ All inherited entries hold. One addition, from RC27 and RC35: **do not derive a runtime-integration test from the installer's own table alone** — pin it against the runtime's documented vocabulary as well, or the test agrees with the defect.
292
+
293
+ ### Sources read (all `2026-09-23` unless noted)
294
+
295
+ Anthropic: `platform.claude.com/docs/en/about-claude/pricing` (raw table), `/docs/en/models/overview`; `code.claude.com/docs/en/model-config`, `/hooks`, `/skills`, `/plugins-reference`, `/claude-directory`, `/headless`, `/workflows`; the Claude Code `2.1.280` binary's skill loader. OpenAI: `developers.openai.com/api/docs/pricing` (embedded arrays, Standard tier), `/api/docs/models/gpt-5.6`, `/api/docs/changelog`; `learn.chatgpt.com/docs/config-file/config-basic`, `/config-file/config-sample`, `/agent-configuration/subagents`, `/docs/hooks`; `openai/codex` `codex-rs/config/src/hook_config.rs`, `codex-rs/hooks/src/schema.rs` @ `c44deff7`. Google: `ai.google.dev/gemini-api/docs/pricing`, `/models`, `/deprecations`, `/generate-content/caching`, `/billing`; `docs.cloud.google.com/gemini-enterprise-agent-platform/models/context-cache/context-cache-overview`; `google-gemini/gemini-cli` `packages/core/src/hooks/{types,hookRegistry,hookRunner}.ts`, `packages/core/src/core/client.ts`, `packages/cli/src/config/settingsSchema.ts` @ `62364cb2`; `geminicli.com/docs/hooks/`, `/docs/hooks/reference`, `/docs/cli/skills/`. GitHub: `docs.github.com/en/copilot/reference/hooks-reference`, `github/copilot-cli` `changelog.md`. Agent Skills: `agentskills.io/specification`. Read `2026-09-22`: the Copilot `1.0.85` release body, `openai/codex` `core-plugins/src/marketplace.rs`, Antigravity's plugins page.
296
+
297
+ ## Corrections — reality check `2026-10-11`
298
+
299
+ The open-move ledger of the `2026-10-11` reality check re-verified every status in this plan. These statuses did not survive; the rows above keep their original text as the record, and this list is what is true now.
300
+
301
+ - **Item 5c (native vs markdown oracle) is done**, not blocked: R19 and R23 measured it (5/5 against 5/5, runs `run-20260910-214704-wgJSxr` and `run-20260910-235141-ITzx9T`), and MI-002 records it. The §3.2 move is closed.
302
+ - **Item 11 (body budget) is closed by measurement**, not parked: RC25 says the R21 A/B closes it, and S8 (`3.32.0`) split the bundle's long skills (no bundle `SKILL.md` over 8,000 bytes). Default installs still emit long skill bodies; that is a size note, not this item.
303
+ - **Items 4c and 4d (Copilot and Codex live installs) are done**: `live-gate-copilot` and `live-gate-codex` pass in every full tier-0 run since `2026-09-26`. Antigravity stays deferred (no `agy`).
304
+ - **Item 4f (marketplaces exercised live) is half done**: the Codex gate adds `.agents/plugins/marketplace.json`; Copilot's `.github/plugin/marketplace.json` is still not exercised (the gate installs from a path).
305
+ - **Item 3b's blocker is gone**: `claude plugin eval` reported `AGENT_SCOPE: scoped` live on `2026-09-26`. The follow-up (a scoped-name pass over plugin prose, or a check that bare names resolve) is undecided and unbuilt.
306
+ - **The Gemini live-gate blocker is wrong**: Gemini CLI is installed and `live-gate-gemini` passes. The real blocker for R29 and R44 is auth (a personal login is refused; no `GEMINI_API_KEY`), and R44 has no Gemini path in the context monitor. R39 is done and does not belong in "needs machines".
307
+ - **Item 13 (unpriced ids) is narrower**: R26, R27 and M19 priced most of them; still unpriced are a bare `gpt-6`, `gpt-oss-120b` and `mai-code-1.1-flash`.
308
+ - **Item 5a's sub-item "split `transition.md`"** was dropped without a record; the file is unchanged.
309
+
310
+ The open items carried forward are in the Addendum of `docs/specs/market-ideas-2026-10.md` (R45–R49).
@@ -0,0 +1,131 @@
1
+ # Market ideas — September 2026 (first run of `/market-ideas`)
2
+
3
+ Sized queue from the first live run of the `/market-ideas` dev skill on `2026-09-21`, against `main` @ `371a76b` (`3.29.0`, clean apart from the skill and the ledger it created). The delta window is `2026-09-10` → `2026-09-21`; because this was the first run, the peers were also swept at feature level (`--full`), which the dimension matrix in `docs/COMPARISON.md` had not done. Every idea below has a row in [market-ideas-ledger.md](market-ideas-ledger.md) (`MI-nnn`); this file holds the triage and the queue (`M<n>`). Consume with `/execplan`.
4
+
5
+ Three scouts ran in parallel — host-tool natives, direct peers, new entrants + standards + vendor patterns — and returned tables with primary sources; the verdicts here are the main session's, each PAN status grep-verified against the tree (the commands are in the ledger rows). Numbers appear only as commands; counts live in `CLAUDE.md`.
6
+
7
+ ## Baseline (measured this run — reproduce with the commands, never copy the numbers)
8
+
9
+ | Item | Value | Reproduce |
10
+ |---|---|---|
11
+ | Tree | `main` @ `371a76b`, `3.29.0`; newest tag `v3.29.0` | `git rev-parse --short HEAD && git describe --tags --abbrev=0` |
12
+ | Ledger before this run | seeded with the already-decided rows | `grep -cE "^\| MI-" docs/specs/market-ideas-ledger.md` |
13
+ | Rate table | verified `2026-09-10` | `grep -n RATES_VERIFIED_AT pan-wizard-core/bin/lib/cost.cjs` |
14
+ | Host tools on this machine | Claude Code `2.1.233` only — `stable` is `2.1.267`, `latest` `2.1.278`; Codex, Gemini, OpenCode, Copilot, Antigravity absent | `claude --version`; `npm view @anthropic-ai/claude-code dist-tags` |
15
+ | Scouts | three background agents, ~12–20 minutes each, 85–134 fetches each | run transcript |
16
+
17
+ ## What the scan found
18
+
19
+ **Convergence, restated.** The window moved the market further **onto** PAN's thesis. Three independent peers now ship failure-tier escalation (gsd-core's `dynamic_routing`, Superpowers' tiered fix rounds, GitHub's HydraFusion cascade); Spec Kit's workflows gained a persisted run state with resume; Superpowers rebuilt its executor as a native inline mode and reports subagent-versus-native cost in the plan handoff — the same measurement PAN made on `2026-09-11`; Claude Code made behavioural plugin evals a first-party command; gsd-core added a machine-readable state contract beside its MCP server; and a 27k-star plugin (planning-with-files) built its whole product on re-injecting on-disk plan state after compaction. Moving **away**: host-native memory (Codex memories v2, Copilot import) and host-native worktree sessions on three runtimes make PAN's declined `memory` and its Claude-only army less distinctive. **The publication gap is wider, not narrower:** the official Claude marketplace lists Superpowers; planning-with-files, addyosmani's skills and Superpowers are one `plugin marketplace add` or `npx skills add` away; PAN is on npm only. The `2026-09-10` read ("converged; the gap is publication and positioning") holds, with the mechanism now named: Claude marketplaces accept an `npm` source, so the path costs a second package and a manifest, not hosting.
20
+
21
+ ### Triaged ideas
22
+
23
+ Verdicts: **ADOPT** take as found · **ADAPT** take in PAN's idiom, or use the host primitive and retire the duplicate · **WATCH** not yet, trigger recorded · **SKIP** reason recorded · **SEEN** ledger row holds. PAN status is grep-verified: HAVE · PARTIAL · MISSING · DECLINED.
24
+
25
+ | # | Idea (concept) | Who ships it (version · date) | PAN status (evidence) | Fit / portability | Verdict | Size | Gate | Ledger |
26
+ |---|---|---|---|---|---|---|---|---|
27
+ | 1 | Failure-tier escalation: retry a failed task on a higher tier, capped, recorded | gsd-core `escalate_on_failure`/`max_escalations`/`provider_escalation`; Superpowers v6.4.1 "R≥4 fresh implementer, more capable model"; HydraFusion cascade (`2026-09-04`) | MISSING — `resolveComplexityTier()` is pre-run complexity only; no attempt counter in exec-phase/diagnose | Cost control without lowering the quality floor · all runtimes (core verb + workflow prose) | ADAPT | M | unit tests on `resolve-model --attempt`; harness `uat-diagnose-native` shows an escalation row | MI-029 |
28
+ | 2 | Recognise planning-with-files layouts in `.planning/`; warn when `.planning/` is gitignored with `commit_docs` on | planning-with-files v3.20.4 (`2026-09-19`) | PARTIAL — `FOREIGN_PLANNING_MARKERS` has `gsd` only; no gitignore check anywhere | State discipline · all runtimes | ADAPT | S | fixture tree → health reports the foreign tool; gitignored planning → new info/warning code; tests | MI-028 |
29
+ | 3 | Plugin evals inside the Claude plugin (`evals/<case>/…`, with/without arms, `tool_used` grader) | Claude Code 2.1.269 | MISSING — `build-plugin.js` emits no `evals/` | Behavioural evals · Claude-only additive; unblocks probe 3b | ADOPT | M | `claude plugin eval dist/pan-wizard-plugin --runs 1 --ablation none` green on ≥2.1.269 — **blocked here (2.1.233)** | MI-035 |
30
+ | 4 | Publication path: `dist/pan-wizard-plugin/` as an npm package + `.claude-plugin/marketplace.json` (`source: npm`) + official-marketplace submission; Codex/Copilot manifests off `./dist/`; SKILL.md dirs in git for `npx skills add` | Claude plugin-marketplaces doc (`npm` source; ≥2.1.275 integrity); `anthropics/claude-plugins-official` README (external form); vercel-labs/skills v1.7.0 | MISSING — publishes to npm only; `marketplace/` is a local command source; both repo manifests point at untracked `dist/` | Distribution · all runtimes | ADOPT (decision first) | L | `claude plugin install pan-wizard@<marketplace>` from a clean machine; Codex/Copilot live gates where CLIs exist | MI-025 |
31
+ | 5 | Prerelease dist-tag (`npm publish --tag next` for `-rc`/`-beta` versions) | BMAD `@next`; gsd-core `canary` | MISSING — `release.yml` publishes with no `--tag`; the `3.26.0-rc.*` tags would have become `latest` | Release correctness | ADOPT | XS | workflow conditional; release-check asserts the tag choice from the version | MI-032 |
32
+ | 6 | Honour `modelPricing.multiplier` (≤10) in managed rates | Claude Code 2.1.271 | MISSING — `ratesFromModelPricing()` ignores it | Ledger accuracy | ADOPT | XS | test: multiplier scales input/output and derived cache rates | MI-033 |
33
+ | 7 | Record `cache_creation.ephemeral_1h/5m` in ledger rows; `assessCacheTtl()` uses the real split | Claude transcripts carry it (verified locally `2026-09-21`); headless `--output-format json` too | PARTIAL — only the summed `cache_creation_input_tokens` | Ledger accuracy · Claude transcripts (others when payloads carry it) | ADAPT | S | fixture transcript → rows carry both fields; advice text switches from inferred to measured | MI-034 |
34
+ | 8 | Unrequested-work class in verification ("contradicts, exceeds, or falls outside the stated intent") | Spec Kit `/speckit.converge` | MISSING — no scope-creep check in verifier/reviewer/verify-phase | Verification pillar · all runtimes (prose) | ADAPT | S | verification.md schema gains the class; drift test on the workflow; a harness UAT rep shows the section | MI-030 |
35
+ | 9 | Finding dispositions with recorded reasons (patch / defer / dismissed-because / decision-needed) | BMAD review triage | MISSING — no disposition field on review or verify findings | Verification pillar; feeds `milestone-audit` `tech_debt` | ADAPT | S | template + test; `milestone-audit` reads deferred items | MI-031 |
36
+ | 10 | State re-injection after compaction and at session start (active phase, last step, next action) | planning-with-files; Claude hooks honour `additionalContext` on `SessionStart`/`PreCompact`/`PostCompact`/`Stop`/`SubagentStop`/`PostToolUse`; Codex `PostCompact`; Copilot `preCompact`; Gemini `PreCompress` | MISSING — `HOOK_EVENT_MAP` wires `SessionStart`/`PostToolUse`/`SubagentStop` only | State discipline; attacks the lowest-context drop class (PanLoop finding 0) · Claude + Codex first | ADAPT | M | tier-0: hook emits the block on a fixture tree, nothing outside PAN projects; tier-2: forced compaction mid-phase resumes the right step | MI-036 |
37
+ | 11 | `maxTurns` on exec-waves' executor spawns with scripted re-issue of a partial result | Claude Code 2.1.246/2.1.259; **trigger fired by PAN's own `3.28.0`** | DECLINED for markdown agents (ADR-0046 D1) — the recorded revisit condition is now true | Cost checkpoint inside deterministic orchestration · Claude-only additive | ADAPT | M | native chain still 5/5 with the cap; a partial result is re-issued, never read as finished; ADR-0046 successor note | MI-009 |
38
+ | 12 | Stop guard on Codex `Stop` and Copilot `agentStop` | Codex and Copilot hooks references | PARTIAL — attached only via the `settings.json` path | Portability of the boundary guard | ADAPT | S | fixture installs show the hook on both; removal path strips it | MI-037 |
39
+ | 13 | OpenCode observers via its plugin API (`.opencode/plugins/*.js`) | opencode.ai/docs/plugins | MISSING — `HOOK_EVENT_MAP.opencode = null` | Runtime coverage (cost/context/trace) | ADAPT | M | static tests on the emitted plugin; `live-gate-opencode` skips without the CLI | MI-038 |
40
+ | 14 | Antigravity thin plugin variant (layout now documented) | antigravity.google/docs/plugins (`$schema` v1; `mcp_config.json`, `hooks.json`, `skills/`, `agents/`, `rules/`) | PARTIAL — ADR-0045 deferred it for want of a spec; the spec exists now | Distribution via the shared `.agents/` tree | ADAPT | M | conformance test against the documented layout; `live-gate-antigravity` skips without `agy` | MI-026 |
41
+ | 15 | Copilot `include-custom-instructions: true` on PAN agents | Copilot CLI 1.0.86 (release note) | MISSING — converter emits `model:`/`model-policy` only | Rules layer reaches Copilot agents | ADOPT (behind the R13 probe) | XS | joins MI-024's live probe — blocked without Copilot CLI | MI-024 |
42
+ | 16 | Async observer hooks on Claude (`async: true` on cost/trace/check-update) | Claude hooks reference documents `async`/`asyncRewake` | HAVE on Codex, MISSING on Claude | Turn latency · Claude | ADOPT | XS | settings fixture test; stop-guard and context-monitor stay synchronous | MI-004 |
43
+ | 17 | `contract` semver on state/progress JSON and MCP resource payloads | gsd-core `state.json` | PARTIAL — JSON everywhere, no version field | Consumers gate on MAJOR | ADAPT | XS | test + CLI-REFERENCE line | MI-039 |
44
+ | 18 | User docs for host controls PAN benefits from: `CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS`, `Workflow(...)` permission rule for `-p`, `OTEL_LOG_TOOL_DETAILS`, `/usage` cache line, `--json` plugin install | Claude Code 2.1.269–2.1.278 | MISSING in USER-GUIDE/TROUBLESHOOTING | Documentation | ADOPT | XS | doc-lint + model-version lint clean (capability phrasing) | — |
45
+ | 19 | `omitClaudeMd` for read-only judgment agents | Claude Code 2.1.271 | not emitted | Decision (ADR-0046 line) | WATCH | — | `stable` ≥ 2.1.271 here | MI-040 |
46
+ | 20 | Emit `.claude/skills/` beside/instead of `.claude/commands/` | skills doc ("older format"), `--bare` | commands still load | Path risk → also handed to `/reality-check` | WATCH | — | docs deprecate commands or `--bare` default | MI-041 |
47
+ | 21 | Host-native worktree agents (Claude teams, Codex `--worktree`, Copilot `/worktree`) vs the bot army | three runtimes | army is Claude-only by ADR-0033 | Redundancy candidate | WATCH | — | agent teams GA; a second stable runtime | MI-042 |
48
+ | 22 | Skills over MCP (SEP-2640) | MCP, Final `2026-09-11` | bridge exposes tools/resources | — | WATCH | — | a PAN runtime implements it | MI-043 |
49
+ | 23 | Foreign-CLI second-opinion review | gsd-core lanes; HydraFusion critique | one model, one runtime | — | WATCH | — | two CLIs on the harness machine | MI-044 |
50
+ | 24 | Live-DOM UAT evidence file | gsd-core | conversational UAT | — | WATCH | — | a web-UI harness seed | MI-045 |
51
+ | 25 | Defect register with waive reasons gating ship | gsd-core `WINDOWS.md` | `milestone-audit` scans anti-patterns, returns `tech_debt` | — | WATCH | — | repeated `tech_debt` in the field | MI-046 |
52
+ | 26 | Team/personal/shipped config layers | BMAD | defaults + user-level only | — | WATCH | — | multi-human project | MI-047 |
53
+ | 27 | Slots/overlays on shipped workflows | Spec Kit | `patches` covers survival of local edits | — | WATCH | — | user demand | MI-048 |
54
+ | 28 | Private acceptance criteria + QA driver agent in the harness | Superpowers Quorum | fs/grep + model steps | — | WATCH | — | a multi-turn UAT scenario | MI-049 |
55
+ | 29 | OTel GenAI attribute names on ledger export | semconv-genai (Development); CC `OTEL_LOG_TOOL_DETAILS` | rows carry agent/command | — | WATCH | — | semconv stable | MI-050 |
56
+ | 30 | Gemini `.gemini/agents/*.md` subagents | geminicli.com (experimental) | none emitted | — | WATCH | — | out of experimental | MI-051 |
57
+ | 31 | Codex `agents/openai.yaml` skill metadata | learn.chatgpt.com/docs/build-skills | not emitted | — | WATCH | — | Codex CLI present | MI-052 |
58
+ | 32 | Cross-runtime file-claim layer for parallel agents | concord-mcp | army Claude-only | — | WATCH | — | ADR-0033 revisit | MI-053 |
59
+ | 33 | Browser plan-annotation gate | plannotator | plan-checker + chat review | zero-dep | SKIP | — | — | MI-054 |
60
+ | 34 | Third-party daily pricing feed | codeburn / LiteLLM | dated table + staleness flag | secondary source, network | SKIP | — | — | MI-055 |
61
+ | 35 | Usage telemetry | OpenSpec, Agent Orchestrator | none — by design | privacy | SKIP | — | — | MI-056 |
62
+ | 36 | Auto-copy learnings to a global store | gsd-core | `learn promote` gate | conflicts with the gate | SKIP | — | — | MI-057 |
63
+ | 37 | Control plane / Kanban / cross-CLI stage runner / workflows-as-Actions | Agent Orchestrator, crewplane, gh-aw | different layer | — | SKIP | — | — | MI-058 |
64
+ | 38 | Declarative agent manifests | Oracle Open Agent Spec, A2A | — | not runtime-specific | SKIP | — | — | MI-059 |
65
+ | 39 | Settings-level cache TTL; host-native memory; Codex skill-token cap as a body-budget trigger; Agent Plugins 1.1.0; Agent Skills spec; Gemini→Antigravity audience shift | various | — | — | SEEN | — | ledger rows MI-005, MI-010, MI-015, MI-001, June review hold | — |
66
+
67
+ ### Hand-offs to `/reality-check` (path changes, not ideas)
68
+
69
+ | # | Observation | Source | Why it is reality-check's |
70
+ |---|---|---|---|
71
+ | H1 | PAN writes `PostToolUse` and `SubagentStop` hooks into `.gemini/settings.json`; the Gemini hooks reference lists `BeforeTool`/`AfterTool`/… and no subagent event. `install.js` even comments "Gemini + OpenCode may not implement SubagentStop; we still register" | geminicli.com/docs/hooks · `2026-09-21` | If the event names are wrong, PAN's Gemini observers have never fired — a P1 WRONG candidate to verify on the raw page and, ideally, a live Gemini |
72
+ | H2 | `TodoWrite` is offered only on older models unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` (2.1.268); `commands/pan/exec-phase.md` lists it in `allowed-tools` and the runtime tool maps translate it | Claude Code changelog | An inert tool reference on every current default model |
73
+ | H3 | Subagent results are now framed under a header marking them as subagent output (2.1.277) | Claude Code changelog | Any orchestrator that greps a verdict line from a subagent's return verbatim |
74
+ | H4 | `--bare` skips hooks, skills, commands, agents, plugins and MCP and "will become the default for `-p`" | code.claude.com/docs/en/headless | Harness model steps and army dispatch would lose PAN entirely; the harness needs an explicit non-bare flag or `--add-dir` strategy |
75
+ | H5 | Headless native-workflow runs need a `Workflow(...)` permission rule | code.claude.com/docs/en/workflows | The harness's native chain scenario |
76
+ | H6 | Antigravity scans `.agents/plugins/` for plugin *directories*; PAN drops a `marketplace.json` *file* there for Codex | antigravity.google/docs/plugins | Untested interaction |
77
+ | H7 | Copilot CLI 1.0.85 changed `copilot plugins list --json` to a flat array and removed `--kind/--scope/--mcp/--skill` | github/copilot-cli releases | `live-gate-copilot` assertions |
78
+ | H8 | Codex also reads `.agents/plugins/api_marketplace.json` for API-key logins | search snippet only (secondary) | Verify before writing anything |
79
+ | H9 | This machine runs Claude Code `2.1.233`; `stable` is `2.1.267`, `latest` `2.1.278` | npm dist-tags | User action: `claude update`. Unblocks M4, the `skill-doctor-context-cost` scenario and every "stable ≥" trigger |
80
+ | H10 | New unpriced ids in runtime defaults: `gpt-5.6-sol` (Codex default), `gpt-6-astra` (OpenCode, Copilot), Gemini 3.6/3.7/3.8 Flash, `GPT-OSS-120b`; GPT-5.5 retires on Codex `2026-10-14` | Codex config reference, OpenCode and Copilot release notes, Antigravity models page | MI-023 stays BLOCKED on a pricing page; `models check` governs |
81
+
82
+ **Hand-off outcomes (`/reality-check`, run `2026-09-22`, executed `2026-09-23`).** H1 was real: Gemini skipped three of PAN's four hooks, fixed as R29 with a vocabulary test (R30). H2 and H4 are documented in TROUBLESHOOTING (R35). H3, H5, H7 and H8 were verified and need no change here (Codex reads `.agents/plugins/marketplace.json` before `api_marketplace.json`). H6 is undocumented by Antigravity and stays open. H9 is resolved — the machine now runs Claude Code `2.1.280`. H10 is priced (R26, R27), and the Codex default has since moved to `gpt-6-sol`. Details: the second addendum of `market-delta-2026-09-superplan.md`.
83
+
84
+ ## Priority classes
85
+
86
+ From `/superplan`: **P0 BROKEN** · **P1 WRONG** (silent incorrect output, false docs) · **P2 STABILITY** · **P3 MISSING TESTS** · **P4 FEATURE GAPS** (runtime coverage, distribution) · **P5 NEW FEATURES** · **P6 DOCUMENTATION** · **P7 POLISH**. Sizes XS 1 · S 2 · M 4 · L 10 · XL 20.
87
+
88
+ ## Items
89
+
90
+ | ID | Pri | Size | Pts | Title | Files | Gate / verify | Status |
91
+ |---|---|---|---|---|---|---|---|
92
+ | M1 | P2 | XS | 1 | **Prerelease dist-tag.** `npm publish --tag next` when `package.json` version carries a prerelease suffix; `release-check` asserts the choice; `deprecate-old-versions.js` already handles superseded prereleases | `.github/workflows/release.yml`, `scripts/release-check.js`, `docs/DEVELOPMENT.md` | a dry run with an `-rc.1` version selects `next`; a plain version selects `latest` | Done `2026-09-26` (`3.31.0`): `scripts/npm-dist-tag.js` picks the tag, `release.yml` publishes with it and marks a prerelease Release as one; `tests/npm-dist-tag.test.cjs` |
93
+ | M2 | P2 | XS | 1 | **Honour `modelPricing.multiplier`** (clamp to the documented maximum) in `ratesFromModelPricing()`; derived cache rates scale too; `models check` shows it | `pan-wizard-core/bin/lib/cost.cjs`, `tests/cost.test.cjs` | test with `multiplier: 2` doubles input/output and cache rates; revert-prove | Done `2026-09-26` (`3.31.0`). The multiplier is honoured — and the parser moved to the documented `{ multiplier, overrides: { id: { input, output, cacheRead, cacheWrite } } }` shape: the per-id `inputCostPer1MTokens` shape PAN read is not the documented one, so a real policy file had matched nothing |
94
+ | M3 | P4 | S | 2 | **planning-with-files coexistence.** Add a `planning_with_files` marker set (`.active_plan`, `task_plan.md`, `findings.md`+`progress.md`, dated `YYYY-MM-DD-*` dirs, `sessions/`, `.attestation`) to `FOREIGN_PLANNING_MARKERS`; health/hygiene name the tool; new check: `.planning/` matched by `.gitignore` while `commit_docs` is true → info code with the fix | `pan-wizard-core/bin/lib/constants.cjs`, `foreign-planning.cjs`, `verify.cjs`, `hygiene.cjs`, tests, `docs/CLI-REFERENCE.md` (error family) | fixture tree with a dated plan dir + `.active_plan` → foreign (planning-with-files); fixture with ignored `.planning/` → the new code; `module-surface.json` regenerated if exports change | Done `2026-09-28` (`feat/evidence-loop`): markers re-read upstream at v3.21.0 (adds `ledger-<agent>.jsonl`); planning-with-files is a SHARED tree, not a foreign one: `validate health` I004 + `hygiene` `shared-planning-tree` and PAN keeps checking its own files, `init new-project` proceeds; `I005` flags a gitignored tree with `commit_docs` on |
95
+ | M4 | P4 | M | 4 | **Plugin evals.** `evals/` cases emitted into the Claude plugin from the harness's tier-1 probes: skill discovery (`tool_used`/`regex`), plugin agent scope (the 3b probe as a `tool_used` grader on a scoped agent), next-action (`regex`), exec-phase kickoff (`file_exists`); `build-plugin.js` copies them; `marketplace/README.md` documents `claude plugin eval` | `scripts/build-plugin.js`, `harness/` (shared case sources), `tests/plugin-marketplace.test.cjs`, `marketplace/README.md` | `claude plugin validate` still green; `claude plugin eval dist/pan-wizard-plugin --runs 1 --ablation none` on Claude Code ≥ 2.1.269 | Built `2026-09-26` (`3.31.0`): four cases in `harness/plugin-evals/`, copied to `evals/` by the builder; `claude plugin validate` green; `tests/plugin-evals.test.cjs`. Live run on this Windows machine (2.1.280, `--runs 1 --ablation none`, `$1.30`): help-discovery, progress-routing and plugin-selftest 1.0 (`AGENT_SCOPE: scoped` re-confirmed), todo-capture 0.5 without `Write`. Claude Code refuses any case granted a shell tool here (no sandbox backend), so the `Bash`/`Write` cases need Linux or macOS for a full run |
96
+ | M5 | P4 | L | 10 | **Publication path** (MI-025). Spike (S): decide between a second npm package built from `dist/pan-wizard-plugin/` and a published `dist` branch; check the Agent Plugins bundle's equivalent for Codex/Copilot marketplaces (git-subdir or npm), and what `npx skills add oharms/PanWizard` needs (SKILL.md directories in git — generated, so likely the same published artifact). Build: release step publishes the artifact(s) with provenance; `.claude-plugin/marketplace.json` at the repo root with `source: npm`; `.agents/plugins/marketplace.json` and `.github/plugin/marketplace.json` point at the published artifact; `marketplace/README.md` and `README.md` install one-liners; submit to `anthropics/claude-plugins-official` via its external-plugin form (user action) | `.github/workflows/release.yml`, `scripts/build-plugin.js`, `scripts/build-agent-plugin.js`, `.claude-plugin/marketplace.json`, `.agents/plugins/marketplace.json`, `.github/plugin/marketplace.json`, `marketplace/README.md`, `README.md`, `docs/USER-GUIDE.md`, an ADR | `claude plugin marketplace add oharms/PanWizard && claude plugin install pan-wizard@…` on a clean machine; release gate 8 digest covers the published artifact; Codex/Copilot live gates where CLIs exist | Open — decision first |
97
+ | M6 | P4 | M | 4 | **OpenCode observers** as an OpenCode plugin (`.opencode/plugins/pan-observers.js`) that spawns PAN's cost-logger / trace-logger on `tool.execute.after` and `session.idle` and the context-monitor on `session.compacted`, honouring the same payload contract; `HOOK_EVENT_MAP.opencode` documents the mapping; uninstall removes it | `bin/install.js`, `bin/install-lib.cjs`, `hooks/`, `tests/opencode-install.test.cjs`, `docs/HOOKS.md` | fixture install writes the plugin; payload fixture drives the hooks; `live-gate-opencode` skips with reason here | Open |
98
+ | M7 | P4 | M | 4 | **Antigravity thin variant** (MI-026): `scripts/build-agent-plugin.js --variant antigravity` (or a sibling builder sharing every converter) emitting `plugin.json` (`$schema` v1), `skills/`, `agents/`, `mcp_config.json`, `hooks.json`; conformance test from the documented layout; ADR-0045 amended | `scripts/build-agent-plugin.js`, `tests/agent-plugin-vendor.test.cjs`, `docs/decisions/ADR-0045-agent-plugins-bundle.md`, `harness/scenarios/live-gate-antigravity.json` | builds from clean; every referenced path resolves inside the bundle; live gate skips without `agy` | Open |
99
+ | M8 | P5 | M | 4 | **Failure-tier escalation** (MI-029). `resolve-model <agent> --attempt N` raises the tier by one per failed attempt when `model_profile` allows (budget→mid→reasoning), capped by a new `routing.max_escalations` (default 1), never above the profile's quality tier; exec-phase (fix round after a failed verify) and diagnose-issues pass the attempt; the ledger row records `attempt` and `escalated_from`; `pan-exec-waves` twin updated | `pan-wizard-core/bin/lib/core.cjs`, `config.cjs`, `cost.cjs`, `pan-wizard-core/workflows/exec-phase.md`, `diagnose-issues.md`, `bin/install-lib.cjs` (native script), tests, `docs/USER-GUIDE.md` | unit tests; drift test on the native twin; harness `uat-diagnose-native` rep shows an `escalated_from` row | Done `2026-09-26` (`3.31.0`): `resolve-model --attempt`, MCP `attempt`, `routing.max_escalations`, `exec-phase --gaps-only` = attempt 2. Not done: a ledger `attempt`/`escalated_from` field — the SubagentStop hook cannot see the attempt. The native twin and diagnose-issues spawn without a model (session model), so there is nothing to escalate there |
100
+ | M9 | P5 | M | 4 | **`maxTurns` on exec-waves executor spawns** (MI-009): the native script sets a per-executor turn cap from the phase budget and, on a partial result, re-issues the agent with the partial summary as input instead of reading the artifact as finished; ADR-0046 gains a dated note that D1's trigger fired | `bin/install-lib.cjs` (`buildNativeWorkflowScripts`), `tests/native-workflows-drift.test.cjs`, `docs/decisions/ADR-0046-subagent-frontmatter-decisions.md` | harness `native-exec-waves-chain` still completes 5/5 with the cap; a fixture partial result triggers exactly one re-issue | Blocked `2026-09-26`: the Workflow tool's `agent()` has no per-spawn turn cap, and `maxTurns` in `pan-executor` frontmatter would cap the markdown path too (ADR-0046 D1). ADR-0046 carries the dated check |
101
+ | M10 | P5 | M | 4 | **State re-injection hook** (MI-036): `hooks/pan-state-reinject.js` on Claude `PostCompact` + `SessionStart` (and Codex `PostCompact`) prints an `additionalContext` block — active phase, last completed step, next action from the engine's `next-action` — only when `.planning/` is a PAN tree with an in-progress phase; inert elsewhere (the field finding "hooks scaffold `.planning` in non-PAN projects" must not recur); `build-hooks.js` list; `HOOK_EVENT_MAP` gains the events | `hooks/`, `scripts/build-hooks.js`, `bin/install.js`, `bin/install-lib.cjs`, `tests/hooks-e2e.test.cjs`, `docs/HOOKS.md` | tier-0: fixture tree → block emitted; non-PAN dir → silence, no files created; tier-2: a forced compaction mid-phase resumes the right step | Done `2026-09-26` (`3.31.0`): `hooks/pan-state-reinject.js` on `SessionStart` with the `compact` matcher (Claude settings + plugin, Codex) — not `PostCompact`, whose output both hosts discard |
102
+ | M11 | P5 | S | 2 | **Unrequested-work class** (MI-030): verifier compares the phase's changed files against the plan's declared scope and reports `unrequested` findings (files or behaviour outside intent) in `verification.md`; reviewer prompt gains the same lens | `agents/pan-verifier.md`, `agents/pan-reviewer.md`, `pan-wizard-core/workflows/verify-phase.md`, `pan-wizard-core/templates/` (verification), tests on the template | template section present; workflow drift tests green; a harness UAT rep's verification.md carries the section | Done `2026-09-28` (`feat/evidence-loop`, ADR-0049): `verify scope <phase>` (the mechanical half), verifier Step 7c + `unrequested:` frontmatter, reviewer lens, `unrequested` class in the `pan-verdict` contract |
103
+ | M12 | P5 | S | 2 | **Finding dispositions** (MI-031): review and verify findings carry `disposition: fixed \| deferred \| dismissed (reason) \| decision`; `milestone-audit` counts `deferred` into `tech_debt`; a dismissal without a reason fails the template check | `agents/pan-reviewer.md`, `agents/pan-verifier.md`, templates, `pan-wizard-core/workflows/milestone-audit.md`, tests | template test; milestone-audit fixture with deferred items → `tech_debt` | Done `2026-09-28` (`feat/evidence-loop`, ADR-0049): dispositions live in the findings ledger, not the template; `findings dispose` refuses deferred/dismissed/decision without `--reason`; workflows dispose what they continue past; milestone-audit reads `findings debt` |
104
+ | M13 | P5 | S | 2 | **Cache-write TTL split** (MI-034): cost-logger records `cache_write_1h_tokens`/`cache_write_5m_tokens` when the transcript carries `cache_creation.ephemeral_*`; `cost rebuild` backfills; `assessCacheTtl()` prefers the measured split and says which it used | `hooks/pan-cost-logger.js`, `pan-wizard-core/bin/lib/cost.cjs`, `cost-rebuild.cjs`, `context-budget.cjs`, fixtures, tests | fixture transcript → both fields; advice text names "measured"; rows without the fields unchanged | Done `2026-09-26` (`3.31.0`), plus the one-hour write rate (2x input) on every Anthropic row so the split is priced, not only recorded |
105
+ | M14 | P5 | S | 2 | **Stop guard on Codex and Copilot** (MI-037): register `pan-stop-guard` on Codex `Stop` and Copilot `agentStop` in their hook writers; removal paths strip it | `bin/install.js`, `bin/install-lib.cjs`, `tests/codex-install.test.cjs`, `tests/copilot-*.test.cjs` | fixture installs show the hook; uninstall removes it | Done `2026-09-26` (`3.31.0`), also in the Agent Plugins bundle — confirmed live on Copilot CLI 1.0.88 (blocked once, continued, then stopped). |
106
+ | M15 | P5 | XS | 1 | **Copilot `include-custom-instructions: true`** on emitted agents, behind the same option as R13 until the live probe runs | `bin/install-lib.cjs` (`convertClaudeToCopilotAgent`), tests | field emitted when the option is on; live probe on Copilot CLI ≥ 1.0.86 before default-on | Done `2026-09-26` (`3.31.0`), on by default: live canary probe on Copilot CLI 1.0.88 — an AGENTS.md rule reached the subagent with the field and not without it |
107
+ | M16 | P7 | XS | 1 | **Async observers on Claude**: `async: true` on cost-logger, trace-logger, check-update in `settings.json`; stop-guard and context-monitor stay synchronous; a note in `docs/HOOKS.md` | `bin/install.js`, `tests/`, `docs/HOOKS.md` | settings fixture; MI-022 live check on a current build (an unknown key is ignored on older builds) | Declined `2026-09-28`: `async: true` exists (docs, read that day), but the cost and trace loggers share a read-modify-write cursor file. Overlapping async runs can lose each other's updates, and a lost entry re-reads a transcript from the start (double-counted tokens, the class fixed in 3.29.0). The update check already returns at once. Revisit if the cursor moves to per-transcript files or gains a lock |
108
+ | M17 | P7 | XS | 1 | **`contract` field** on `state`/`progress` JSON and the `pan://state`/`pan://progress` resources (`"1.0"`, additive rule documented) | `pan-wizard-core/bin/lib/state.cjs`, `pan-wizard-core/mcp/tool-registry.cjs`, tests, `docs/CLI-REFERENCE.md` | tests; MCP resource fixture | Done `2026-09-28` (`feat/evidence-loop`): `contract: "1.0"` on state (load), state json, progress json and the resources; the additive rule is in CLI-REFERENCE (Output Contracts) |
109
+ | M18 | P6 | XS | 1 | **User docs** for the host controls in idea 18, written by capability | `docs/USER-GUIDE.md` (native workflows section), `docs/TROUBLESHOOTING.md` | doc-lint and model-version lint clean | Done `2026-09-28` (`feat/evidence-loop`): USER-GUIDE native-workflows section, with each control checked against the official Claude Code docs that day. `OTEL_LOG_TOOL_DETAILS` was not found and is not documented |
110
+
111
+ ## Session queue
112
+
113
+ | Session | Items | Pts | Theme | Exit criterion |
114
+ |---|---|---|---|---|
115
+ | **S1** | M1, M2, M16, M17, M13, M3, M18, then the M5 **spike** | 9 (+2) | Correctness and cheap wins; the publication decision | no prerelease can reach `latest`; multiplier honoured; three observers async; planning-with-files recognised; ledger rows carry the TTL split; an ADR (Proposed) names the publication form |
116
+ | **S2** | M11, M12, M8, M14 | 10 | Verification depth and portable guards | verification.md has the unrequested class and dispositions; escalation rows appear in a diagnose rep; stop guard on four runtimes |
117
+ | **S3** | M9, M10, M4 | 12 | Orchestration continuity on Claude (additive) | native chain 5/5 with turn caps; re-injection block measured after a forced compaction; eval suite runs once `claude update` has happened |
118
+ | **S4** | M5 build, M6, M7, M15 | 19 | Packaging and coverage | plugin installable from a clean machine via the repo marketplace; OpenCode observers and the Antigravity variant build and are conformance-tested; live gates run where CLIs exist |
119
+
120
+ Ordering rationale. S1 fixes what is wrong today (a release path that can mislabel a prerelease, an ignored pricing field) and lands the two-point gaps that need no design, and it ends with the one decision the user must make (M5's hosting form) so S4 is unblocked. S2 before S3 because its items are prose and core-verb changes with fixture gates, while S3 changes what runs inside a live phase and needs the harness. S4 last because the August rule still holds — behavioural moves ship inside packaging that already exists — and because three of its four items wait on machines this one is not.
121
+
122
+ ## What not to do — carried forward and re-affirmed
123
+
124
+ All ten inherited entries hold (retire markdown workflows · sixth runtime · standardise `.planning/` · soften the harness · skills-marketplace listing on quality grounds · fork the skills compiler · unverified frontmatter · rates without a citation · describe `.planning/` as unthreatened · "no competitor" in evergreen docs). Two additions with reasons:
125
+
126
+ - **Do not add usage telemetry, even opt-out command-name pings.** Two peers added it this quarter, one non-anonymous; PAN's ledger is local and that is a stated property (MI-056).
127
+ - **Do not auto-promote learnings to a global store.** gsd-core does; PAN's promote gate and the no-external-harvest rule exist because unreviewed cross-project imports poisoned the store once (MI-057).
128
+
129
+ ## Sources read for this run (all `2026-09-21` unless dated)
130
+
131
+ Claude Code: `raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md` (dates from `registry.npmjs.org/@anthropic-ai/claude-code`), `code.claude.com/docs/en/{hooks,plugin-evals,plugins-reference,plugin-marketplaces,workflows,headless,skills,sub-agents,memory,model-config,costs,prompt-caching,mcp,agents,agent-teams}`. Anthropic official marketplace: `raw.githubusercontent.com/anthropics/claude-plugins-official/main/.claude-plugin/marketplace.json` (parsed raw) and its README. Codex: GitHub releases API `openai/codex` (`per_page=100`), `learn.chatgpt.com/docs/{hooks,config-file/config-reference,agent-configuration/subagents,build-skills,build-plugins,changelog}`. Gemini / Antigravity: releases API `google-gemini/gemini-cli`, `geminicli.com/docs/{hooks,cli/settings,cli/trusted-folders,core/subagents}`, `developers.googleblog.com` (transition post, `2026-05-19`), `antigravity.google/docs/{plugins,hooks,skills,models}`, `antigravity.google/changelog`. OpenCode: releases API `anomalyco/opencode`, `opencode.ai/docs/{config,agents,permissions,plugins,skills}`. Copilot: releases API `github/copilot-cli` (1.0.85–1.0.87), `docs.github.com/en/copilot/reference/{hooks-reference,custom-agents-configuration,copilot-cli-reference/cli-plugin-reference}`, `docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/{plugins-creating,plugins-marketplace,add-custom-instructions}`, `github.blog/changelog` (September 2026), `github.blog` HydraFusion (`2026-09-04`) and Rust-migration (`2026-09-16`) posts. Standards: `agentskills.io/specification` + `agentskills/agentskills` commits; `agent-plugins.org/specification` + `agentplugins/agent-plugins-spec` (`spec/1.1.0.md`, `MAINTAINERS.md`, `FUTURE_CONSIDERATIONS.md`); `modelcontextprotocol.io/extensions/skills/overview`, `/extensions/client-matrix`, `blog.modelcontextprotocol.io/posts/mcp-roadmap/`, SEP commits; `agents.md` + `agentsmd/agents.md` commits; `w3.org/community/ai-agent-memory-interop/`; `datatracker.ietf.org/doc/draft-saihm-memory-protocol/`; `open-telemetry/semantic-conventions-genai`; `oracle/agent-spec` release 26.3.1. Peers (releases API `published_at` + README/docs): `github/spec-kit` (v1.0.6–1.0.9; `docs/reference/{workflows,artifacts,presets,extensions,bundles}.md`, `templates/commands/{analyze,converge}.md`, `docs/upgrade.md`, `docs/concepts/spec-persistence.md`), `bmad-code-org/BMAD-METHOD` (`docs.bmad-method.org/build/{autonomous-development-loops,review-a-change,finish-an-epic}`, `/customize/*`, `/existing-codebases/*`, `/start/install-bmad`), `open-gsd/gsd-core` (v1.14.0; `docs/CONFIGURATION.md`, `docs/features/*.md`, `docs/installer-migrations.md`, `docs/context-monitor.md`, `docs/TESTING-SUITES.md`, `docs/CANARY.md`), `obra/superpowers` (v6.4.1; `skills/subagent-driven-development/SKILL.md`, `skills/executing-plans/SKILL.md`, `skills/diagnosing-superpowers/SKILL.md`), `prime-radiant-inc/superpowers-evals` (Quorum), `Fission-AI/OpenSpec` (v1.13.1; `docs/stores-beta/user-guide.md`, `docs/customization.md`), `eyaltoledano/claude-task-master` (dormant), `Untrivial-ai/agent-orchestrator` (v0.13.0; `docs/{scm-observer,telemetry,STATUS}.md`). Entrants (repo + releases API): `OthmanAdi/planning-with-files` (README via the GitHub contents API; default branch `master`), `backnotprop/plannotator`, `shinpr/claude-code-workflows`, `addyosmani/agent-skills`, `sickn33/agentic-awesome-skills`, `yandy-r/claude-plugins`, `crewplaneai/crewplane`, `sahil87/fab-kit`, `ClawPlays/ospec`, `Get-Concord-AI/concord-mcp`, `uipath/coder_eval`, `Wicked-Sick-Ltd/token-usage`, `getagentseal/codeburn`, `thedotmack/claude-mem`, `Smart-AI-Memory/attune-ai`, `github/gh-aw`, `vercel-labs/skills`. Secondary-only material (star counts, search snippets, the Codex `api_marketplace.json` path) is flagged where used and never carries a verdict.