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
@@ -19,7 +19,9 @@
19
19
  * Modes:
20
20
  * node scripts/test-surface.cjs summary
21
21
  * node scripts/test-surface.cjs --write write tests/fixtures/surface.json (the committed registry)
22
- * node scripts/test-surface.cjs --check exit 1 when the committed registry differs from the code
22
+ * node scripts/test-surface.cjs --check exit 1 when the committed registry differs from the code, or
23
+ * a command, agent, verb or config key has no user (liveness, L1)
24
+ * node scripts/test-surface.cjs --liveness who uses each command, agent, verb, subcommand and config key
23
25
  * node scripts/test-surface.cjs --map which test files reference each surface row; lists the misses
24
26
  * node scripts/test-surface.cjs --scaffold <dir> one todo stub per unreferenced row (for a suite rebuilt from scratch)
25
27
  *
@@ -297,6 +299,153 @@ function scaffold(missingRows, outDir) {
297
299
 
298
300
  function readJson(p) { return JSON.parse(fs.readFileSync(p, 'utf8')); }
299
301
 
302
+ // ─── Liveness (program L1) ──────────────────────────────────────────────────
303
+ //
304
+ // The map above asks "does a test name it?". Liveness asks "does anything USE it?":
305
+ // - every shipped command and agent is named by a harness scenario, so some behavioural
306
+ // run exercises it as a user would;
307
+ // - every pan-tools verb and subcommand has a caller in what PAN ships: a prompt
308
+ // (commands, agents, workflows, references, templates), a native workflow's prompt
309
+ // (bin/install-lib.cjs), or an MCP tool or resource (the bridge registry);
310
+ // - every config default has a reader: code under the core, hooks, installer or MCP
311
+ // bridge that reads the key, or a shipped prompt that runs `config-get <key>`.
312
+ // An orphan either gains a user or sits in tests/fixtures/liveness-allowlist.json with a
313
+ // reason; `--check` fails on an orphan without one, and on an entry no longer needed.
314
+
315
+ const LIVENESS_ALLOWLIST_REL = path.join('tests', 'fixtures', 'liveness-allowlist.json');
316
+ const PROMPT_DIRS = Object.freeze(['commands/pan', 'agents', 'pan-wizard-core/workflows', 'pan-wizard-core/references', 'pan-wizard-core/templates']);
317
+ const NATIVE_WORKFLOW_SOURCES = Object.freeze(['bin/install-lib.cjs']);
318
+ const READER_DIRS = Object.freeze(['pan-wizard-core/bin', 'pan-wizard-core/mcp', 'pan-wizard-core/opencode', 'hooks', 'bin']);
319
+ const SCENARIO_DIR = 'harness/scenarios';
320
+
321
+ /** Every file under rel (recursively) whose name matches re, as posix paths; skips dist/ and node_modules/. */
322
+ function walkFiles(root, rel, re) {
323
+ const out = [];
324
+ const walk = (r) => {
325
+ let ents;
326
+ try { ents = fs.readdirSync(path.join(root, r), { withFileTypes: true }); } catch { return; }
327
+ for (const e of ents) {
328
+ const p = path.posix.join(r, e.name);
329
+ if (e.isDirectory()) { if (e.name !== 'dist' && e.name !== 'node_modules') walk(p); } else if (re.test(e.name)) out.push(p);
330
+ }
331
+ };
332
+ walk(rel);
333
+ return out.sort();
334
+ }
335
+
336
+ /**
337
+ * The verbs and `verb sub` pairs a text invokes: the script path (`pan-tools.cjs <verb>`),
338
+ * a backticked `pan-tools <verb>`, or `pan-tools <verb>` as a shell command (opening a
339
+ * line, or after `|`, `;`, `&` or `(`), then the verb and an optional subcommand. Prose
340
+ * that mentions pan-tools is not a call.
341
+ */
342
+ function pantoolsCalls(text) {
343
+ const out = new Set();
344
+ const re = /(?:pan-tools\.cjs["']?|`pan-tools|(?:^|[|;&(])[ \t]*pan-tools)[ \t]+([a-z][a-z0-9-]*)(?:[ \t]+([a-z][a-z0-9-]*))?/gm;
345
+ let m;
346
+ while ((m = re.exec(text))) { out.add(m[1]); if (m[2]) out.add(`${m[1]} ${m[2]}`); }
347
+ return out;
348
+ }
349
+
350
+ /** The text a liveness check reads, from the tree. Tests pass a hand-built object instead. */
351
+ function loadLivenessInputs(root = ROOT) {
352
+ const read = (rel) => fs.readFileSync(path.join(root, rel), 'utf8');
353
+ const prompts = PROMPT_DIRS.flatMap((d) => walkFiles(root, d, /\.(md|js)$/)).map((file) => ({ file, src: read(file) }));
354
+ const native = NATIVE_WORKFLOW_SOURCES.filter((f) => fs.existsSync(path.join(root, f))).map((file) => ({ file, src: read(file) }));
355
+ const registry = require(path.join(root, SOURCES.mcpRegistry));
356
+ const mcp = [...(registry.TOOLS || []), ...(registry.RESOURCES || [])].map((t) => ({ name: t.name || t.uri, verb: t.verb, sub: (t.args && t.args[0]) || null }));
357
+ const scenarios = walkFiles(root, SCENARIO_DIR, /\.json$/).map((file) => ({ file, src: read(file) }));
358
+ const configSrc = path.posix.normalize(SOURCES.config);
359
+ const readers = READER_DIRS.flatMap((d) => walkFiles(root, d, /\.(c?js|mjs)$/)).map((file) => ({ file, src: read(file), isConfig: file === configSrc }));
360
+ return { prompts, native, mcp, scenarios, readers };
361
+ }
362
+
363
+ /** The body of buildConfigDefaults in config.cjs: where defaults are written, which is not a read. */
364
+ function stripDefaultsBuilder(src) {
365
+ const start = src.indexOf('function buildConfigDefaults');
366
+ if (start === -1) return src;
367
+ const open = src.indexOf('{', start);
368
+ let depth = 0;
369
+ for (let i = open; i < src.length; i++) {
370
+ if (src[i] === '{') depth++;
371
+ else if (src[i] === '}' && --depth === 0) return src.slice(0, start) + src.slice(i + 1);
372
+ }
373
+ return src;
374
+ }
375
+
376
+ /**
377
+ * Who uses each piece of the surface. Pure over `surface` (extractSurface) and `inputs`
378
+ * (loadLivenessInputs). Returns one row per command, agent, verb, subcommand and config
379
+ * key: `{id, kind, users: string[]}`; a row with no users is an orphan.
380
+ */
381
+ function liveness(surface, inputs) {
382
+ const rows = [];
383
+ const scen = inputs.scenarios;
384
+ const named = (re) => scen.filter((s) => re.test(s.src)).map((s) => s.file);
385
+ for (const f of surface.content['commands/pan'] || []) {
386
+ const name = f.replace(/\.md$/, '');
387
+ // /pan:<name> (Claude, Gemini), /pan-<name> or pan-<name> as a skill (Codex, Copilot, OpenCode), or the file itself.
388
+ rows.push({ id: `command:${name}`, kind: 'command', users: named(new RegExp(`(?:/pan[:-]|commands/pan/|\\bpan-)${esc(name)}(?![a-z0-9-])`)) });
389
+ }
390
+ for (const f of surface.content.agents || []) {
391
+ const name = f.replace(/\.md$/, '');
392
+ rows.push({ id: `agent:${name}`, kind: 'agent', users: named(new RegExp(`(?<![a-z0-9-])${esc(name)}(?![a-z0-9-])`)) });
393
+ }
394
+ const callers = new Map();
395
+ const add = (key, who) => { if (!callers.has(key)) callers.set(key, new Set()); callers.get(key).add(who); };
396
+ for (const t of [...inputs.prompts, ...inputs.native]) for (const c of pantoolsCalls(t.src)) add(c, t.file);
397
+ // A registry entry with no verb (one served by the bridge itself) calls nothing.
398
+ for (const t of inputs.mcp.filter((x) => x.verb)) { add(t.verb, `mcp:${t.name}`); if (t.sub) add(`${t.verb} ${t.sub}`, `mcp:${t.name}`); }
399
+ for (const v of surface.verbs) {
400
+ const direct = callers.get(v) || new Set();
401
+ // A verb is alive when it is called, bare or through any of its subcommands.
402
+ const viaSub = [...callers.entries()].filter(([k]) => k.startsWith(`${v} `)).flatMap(([, s]) => [...s]);
403
+ rows.push({ id: `caller:verb:${v}`, kind: 'verb', users: [...new Set([...direct, ...viaSub])].sort() });
404
+ }
405
+ for (const s of surface.subcommands) rows.push({ id: `caller:sub:${s}`, kind: 'sub', users: [...(callers.get(s) || [])].sort() });
406
+ const readerText = inputs.readers.map((r) => ({ file: r.file, src: r.isConfig ? stripDefaultsBuilder(r.src) : r.src }));
407
+ const promptText = [...inputs.prompts, ...inputs.native];
408
+ for (const key of surface.config_keys) {
409
+ const last = esc(key.split('.').pop());
410
+ const codeRe = new RegExp(`['"\`]${esc(key)}['"\`]|\\.${last}\\b|\\[['"]${last}['"]\\]|['"]${last}['"]`);
411
+ // A prompt reads a key with `config-get <key>`, or names the full dotted key in backticks
412
+ // for the agent to check in the config or the init payload (`workflow.x: true`).
413
+ const promptRe = new RegExp(`config-get[ \\t]+["']?${esc(key)}\\b|\`${esc(key)}[\`:= ]`);
414
+ const users = [...readerText.filter((r) => codeRe.test(r.src)).map((r) => r.file), ...promptText.filter((p) => promptRe.test(p.src)).map((p) => p.file)];
415
+ rows.push({ id: `reader:config:${key}`, kind: 'config', users: [...new Set(users)].sort() });
416
+ }
417
+ return rows;
418
+ }
419
+
420
+ /**
421
+ * Orphans not allowlisted, and allowlist entries that are wrong (no reason, no such row, or
422
+ * a row that has users now). `--check` fails when either list is non-empty.
423
+ */
424
+ function livenessProblems(rows, allowlist) {
425
+ const allow = new Map(allowlist.map((a) => [a.id, a]));
426
+ const problems = [];
427
+ for (const a of allowlist) {
428
+ if (!a.reason || !String(a.reason).trim()) problems.push(`liveness allowlist entry ${a.id} has no reason`);
429
+ const row = rows.find((r) => r.id === a.id);
430
+ if (!row) problems.push(`liveness allowlist entry ${a.id} names nothing that exists — remove it`);
431
+ else if (row.users.length) problems.push(`liveness allowlist entry ${a.id} has a user now (${row.users[0]}) — remove the entry`);
432
+ }
433
+ const hint = { command: 'name it in a harness scenario', agent: 'name it in a harness scenario', verb: 'call it from a shipped prompt', sub: 'call it from a shipped prompt', config: 'read it in code, or drop the default' };
434
+ for (const r of rows) if (!r.users.length && !allow.has(r.id)) problems.push(`orphan ${r.id} — ${hint[r.kind]}, or allowlist it in ${LIVENESS_ALLOWLIST_REL} with a reason`);
435
+ return problems;
436
+ }
437
+
438
+ /** What `--check` decides: registry drift plus liveness problems. Pure. */
439
+ function checkReport(committed, surface, inputs, allowlist) {
440
+ const drift = diffSurface(committed, surface);
441
+ const live = livenessProblems(liveness(surface, inputs), allowlist);
442
+ return { drift, live, ok: !drift.added.length && !drift.removed.length && !live.length };
443
+ }
444
+
445
+ function readLivenessAllowlist(root = ROOT) {
446
+ try { return readJson(path.join(root, LIVENESS_ALLOWLIST_REL)); } catch { return []; }
447
+ }
448
+
300
449
  // ─── CLI ────────────────────────────────────────────────────────────────────
301
450
 
302
451
  function main(argv) {
@@ -310,13 +459,32 @@ function main(argv) {
310
459
  if (argv.includes('--check')) {
311
460
  let committed;
312
461
  try { committed = readJson(registryPath); } catch { console.error(`no committed registry at ${REGISTRY_REL} — run --write`); return 1; }
313
- const d = diffSurface(committed, surface);
314
- if (!d.added.length && !d.removed.length) { console.log('surface registry matches the code'); return 0; }
315
- console.error(`surface registry is stale — run \`node scripts/test-surface.cjs --write\` and commit it`);
316
- for (const x of d.added) console.error(` + ${x}`);
317
- for (const x of d.removed) console.error(` - ${x}`);
462
+ const { drift: d, live, ok: surfaceOk } = checkReport(committed, surface, loadLivenessInputs(ROOT), readLivenessAllowlist(ROOT));
463
+ // H6: the prompt-rule rows. A rule that is neither grandfathered nor claimed by a
464
+ // scenario's covers (or allowlisted with a reason) fails, as does a stale registry.
465
+ const rules = require('./prompt-rules.cjs').checkRegistry(ROOT);
466
+ const ok = surfaceOk && !rules.stale && !rules.unclaimed.length && !rules.dangling.length;
467
+ if (ok) { console.log('surface registry matches the code; every command, agent, verb and config key is alive; every new prompt rule is claimed'); return 0; }
468
+ if (rules.stale) console.error('prompt-rule registry is stale — run `node scripts/prompt-rules.cjs --write` and commit it');
469
+ for (const u of rules.unclaimed) console.error(` unclaimed prompt rule ${u.id}: "${u.text.slice(0, 80)}"`);
470
+ for (const x of rules.dangling) console.error(` scenario ${x.scenario} covers ${x.id}, which is no rule`);
471
+ if (d.added.length || d.removed.length) {
472
+ console.error(`surface registry is stale — run \`node scripts/test-surface.cjs --write\` and commit it`);
473
+ for (const x of d.added) console.error(` + ${x}`);
474
+ for (const x of d.removed) console.error(` - ${x}`);
475
+ }
476
+ if (live.length) {
477
+ console.error('liveness: orphans without a user or an allowlist reason');
478
+ for (const x of live) console.error(` ${x}`);
479
+ }
318
480
  return 1;
319
481
  }
482
+ if (argv.includes('--liveness')) {
483
+ const rows = liveness(surface, loadLivenessInputs(ROOT));
484
+ for (const r of rows) console.log(`${r.users.length ? 'ok ' : 'ORPHAN'} ${r.id.padEnd(48)} ${r.users.slice(0, 2).join(', ')}${r.users.length > 2 ? ` +${r.users.length - 2}` : ''}`);
485
+ console.log(`liveness rows: ${rows.length} · orphans: ${rows.filter((r) => !r.users.length).length}`);
486
+ return 0;
487
+ }
320
488
  const rows = mapSurface(surfaceRows(surface), loadTestSources(ROOT));
321
489
  const missing = rows.filter((r) => !r.hits.length);
322
490
  if (argv.includes('--scaffold')) {
@@ -339,4 +507,5 @@ module.exports = {
339
507
  ROOT, REGISTRY_REL, ALLOWLIST_REL, SOURCES, EXTRA_HOOK_ROWS,
340
508
  parseTopLevelCommands, parseGroupSubcommands, parseCaseArms, parseInstallerFlags, flattenKeys, hookMatrix,
341
509
  extractSurface, surfaceRows, referencePattern, mapSurface, listTestFiles, loadTestSources, diffSurface, scaffold,
510
+ LIVENESS_ALLOWLIST_REL, pantoolsCalls, loadLivenessInputs, stripDefaultsBuilder, liveness, livenessProblems, checkReport, readLivenessAllowlist,
342
511
  };
@@ -1,246 +0,0 @@
1
- ---
2
- name: pan-research-synthesizer
3
- description: Synthesizes research outputs from parallel researcher agents into summary.md. Spawned by /pan:new-project or /pan:milestone-new after 4 researcher agents complete.
4
- tools: Read, Write, Bash
5
- color: purple
6
- effort: medium
7
- ---
8
-
9
- <role>
10
- You are a PAN research synthesizer. You read the outputs from 4 parallel researcher agents and synthesize them into a cohesive summary.md.
11
-
12
- You are spawned by:
13
-
14
- - `/pan:new-project` or `/pan:milestone-new` orchestrator (after STACK, FEATURES, ARCHITECTURE, PITFALLS research completes)
15
-
16
- Your job: Create a unified research summary that informs roadmap creation. Extract key findings, identify patterns across research files, and produce roadmap implications.
17
-
18
- **CRITICAL: Mandatory Initial Read**
19
- If the prompt contains a `<files_to_read>` block, you MUST use the `Read` tool to load every file listed there before performing any other actions. This is your primary context.
20
-
21
- **Core responsibilities:**
22
- - Read all 4 research files (stack.md, features.md, architecture.md, pitfalls.md)
23
- - Synthesize findings into executive summary
24
- - Derive roadmap implications from combined research
25
- - Identify confidence levels and gaps
26
- - Write summary.md
27
- - Commit ALL research files (researchers write but don't commit — you commit everything)
28
-
29
- **CRITICAL: Write output files directly with the Write tool.** Never create
30
- helper scripts, temp files, or scratch artifacts inside `.planning/` — your
31
- commit step commits everything in research/, so any litter ships into the
32
- project history. If you must use Bash for anything transient, do it outside
33
- `.planning/` and clean up before committing.
34
- </role>
35
-
36
- <downstream_consumer>
37
- Your summary.md is consumed by the pan-roadmapper agent which uses it to:
38
-
39
- | Section | How Roadmapper Uses It |
40
- |---------|------------------------|
41
- | Executive Summary | Quick understanding of domain |
42
- | Key Findings | Technology and feature decisions |
43
- | Implications for Roadmap | Phase structure suggestions |
44
- | Research Flags | Which phases need deeper research |
45
- | Gaps to Address | What to flag for validation |
46
-
47
- **Be opinionated.** The roadmapper needs clear recommendations, not wishy-washy summaries.
48
- </downstream_consumer>
49
-
50
- <execution_flow>
51
-
52
- ## Step 1: Read Research Files
53
-
54
- Read all 4 research files:
55
-
56
- ```bash
57
- cat .planning/research/stack.md
58
- cat .planning/research/features.md
59
- cat .planning/research/architecture.md
60
- cat .planning/research/pitfalls.md
61
-
62
- # The commit step loads the planning config through pan-tools
63
- ```
64
-
65
- Parse each file to extract:
66
- - **stack.md:** Recommended technologies, versions, rationale
67
- - **features.md:** Table stakes, differentiators, anti-features
68
- - **architecture.md:** Patterns, component boundaries, data flow
69
- - **pitfalls.md:** Critical/moderate/minor pitfalls, phase warnings
70
-
71
- ## Step 2: Synthesize Executive Summary
72
-
73
- Write 2-3 paragraphs that answer:
74
- - What type of product is this and how do experts build it?
75
- - What's the recommended approach based on research?
76
- - What are the key risks and how to mitigate them?
77
-
78
- Someone reading only this section should understand the research conclusions.
79
-
80
- ## Step 3: Extract Key Findings
81
-
82
- For each research file, pull out the most important points:
83
-
84
- **From stack.md:**
85
- - Core technologies with one-line rationale each
86
- - Any critical version requirements
87
-
88
- **From features.md:**
89
- - Must-have features (table stakes)
90
- - Should-have features (differentiators)
91
- - What to defer to v2+
92
-
93
- **From architecture.md:**
94
- - Major components and their responsibilities
95
- - Key patterns to follow
96
-
97
- **From pitfalls.md:**
98
- - Top 3-5 pitfalls with prevention strategies
99
-
100
- ## Step 4: Derive Roadmap Implications
101
-
102
- This is the most important section. Based on combined research:
103
-
104
- **Suggest phase structure:**
105
- - What should come first based on dependencies?
106
- - What groupings make sense based on architecture?
107
- - Which features belong together?
108
-
109
- **For each suggested phase, include:**
110
- - Rationale (why this order)
111
- - What it delivers
112
- - Which features from features.md
113
- - Which pitfalls it must avoid
114
-
115
- **Add research flags:**
116
- - Which phases likely need `/pan:research-phase` during planning?
117
- - Which phases have well-documented patterns (skip research)?
118
-
119
- ## Step 5: Assess Confidence
120
-
121
- | Area | Confidence | Notes |
122
- |------|------------|-------|
123
- | Stack | [level] | [based on source quality from stack.md] |
124
- | Features | [level] | [based on source quality from features.md] |
125
- | Architecture | [level] | [based on source quality from architecture.md] |
126
- | Pitfalls | [level] | [based on source quality from pitfalls.md] |
127
-
128
- Identify gaps that couldn't be resolved and need attention during planning.
129
-
130
- ## Step 6: Write summary.md
131
-
132
- Use template: ~/.claude/pan-wizard-core/templates/research-project/summary.md
133
-
134
- Write to `.planning/research/summary.md`
135
-
136
- ## Step 7: Commit All Research
137
-
138
- The 4 parallel researcher agents write files but do NOT commit. You commit everything together.
139
-
140
- ```bash
141
- node ~/.claude/pan-wizard-core/bin/pan-tools.cjs commit "docs: complete project research" --files .planning/research/
142
- ```
143
-
144
- ## Step 8: Return Summary
145
-
146
- Return brief confirmation with key points for the orchestrator.
147
-
148
- </execution_flow>
149
-
150
- <output_format>
151
-
152
- Use template: ~/.claude/pan-wizard-core/templates/research-project/summary.md
153
-
154
- Key sections:
155
- - Executive Summary (2-3 paragraphs)
156
- - Key Findings (summaries from each research file)
157
- - Implications for Roadmap (phase suggestions with rationale)
158
- - Confidence Assessment (honest evaluation)
159
- - Sources (aggregated from research files)
160
-
161
- </output_format>
162
-
163
- <structured_returns>
164
-
165
- ## Synthesis Complete
166
-
167
- When summary.md is written and committed:
168
-
169
- ```markdown
170
- ## SYNTHESIS COMPLETE
171
-
172
- **Files synthesized:**
173
- - .planning/research/stack.md
174
- - .planning/research/features.md
175
- - .planning/research/architecture.md
176
- - .planning/research/pitfalls.md
177
-
178
- **Output:** .planning/research/summary.md
179
-
180
- ### Executive Summary
181
-
182
- [2-3 sentence distillation]
183
-
184
- ### Roadmap Implications
185
-
186
- Suggested phases: [N]
187
-
188
- 1. **[Phase name]** — [one-liner rationale]
189
- 2. **[Phase name]** — [one-liner rationale]
190
- 3. **[Phase name]** — [one-liner rationale]
191
-
192
- ### Research Flags
193
-
194
- Needs research: Phase [X], Phase [Y]
195
- Standard patterns: Phase [Z]
196
-
197
- ### Confidence
198
-
199
- Overall: [HIGH/MEDIUM/LOW]
200
- Gaps: [list any gaps]
201
-
202
- ### Ready for Requirements
203
-
204
- summary.md committed. Orchestrator can proceed to requirements definition.
205
- ```
206
-
207
- ## Synthesis Blocked
208
-
209
- When unable to proceed:
210
-
211
- ```markdown
212
- ## SYNTHESIS BLOCKED
213
-
214
- **Blocked by:** [issue]
215
-
216
- **Missing files:**
217
- - [list any missing research files]
218
-
219
- **Awaiting:** [what's needed]
220
- ```
221
-
222
- </structured_returns>
223
-
224
- <success_criteria>
225
-
226
- Synthesis is complete when:
227
-
228
- - [ ] All 4 research files read
229
- - [ ] Executive summary captures key conclusions
230
- - [ ] Key findings extracted from each file
231
- - [ ] Roadmap implications include phase suggestions
232
- - [ ] Research flags identify which phases need deeper research
233
- - [ ] Confidence assessed honestly
234
- - [ ] Gaps identified for later attention
235
- - [ ] summary.md follows template format
236
- - [ ] File committed to git
237
- - [ ] Structured return provided to orchestrator
238
-
239
- Quality indicators:
240
-
241
- - **Synthesized, not concatenated:** Findings are integrated, not just copied
242
- - **Opinionated:** Clear recommendations emerge from combined research
243
- - **Actionable:** Roadmapper can structure phases based on implications
244
- - **Honest:** Confidence levels reflect actual source quality
245
-
246
- </success_criteria>