pmx-canvas 0.10.0 → 0.12.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 (343) hide show
  1. package/.github/extensions/pmx-canvas/extension.mjs +3 -1
  2. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  3. package/.github/extensions/pmx-canvas/tools.json +688 -128
  4. package/CHANGELOG.md +69 -0
  5. package/dist/amp-plugin/pmx-canvas/LICENSE +21 -0
  6. package/dist/amp-plugin/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  7. package/dist/amp-plugin/pmx-canvas/index.js +5445 -0
  8. package/dist/amp-plugin/pmx-canvas/runtime.json +3 -0
  9. package/dist/amp-plugin/pmx-canvas/shared-runtime.mjs +194 -0
  10. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/SKILL.md +251 -0
  11. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/evals.json +1086 -0
  12. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/jwt.ts +17 -0
  13. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/login.ts +12 -0
  14. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/middleware.ts +13 -0
  15. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/routes/auth.ts +13 -0
  16. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/investigation-board/src/handlers/users.ts +27 -0
  17. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/mcp.json +36 -0
  18. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/ax-html-control-surface.md +101 -0
  19. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/codex-app-adapter.md +151 -0
  20. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/excalidraw-diagram-authoring.md +150 -0
  21. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/full-reference.md +1785 -0
  22. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/github-copilot-app-adapter.md +223 -0
  23. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/html-primitives.md +139 -0
  24. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/importing-context.md +132 -0
  25. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/installing-pmx-canvas.md +251 -0
  26. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/tours-and-recording.md +111 -0
  27. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/workbench-workflows.md +900 -0
  28. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-orchestration/SKILL.md +141 -0
  29. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-testing/SKILL.md +266 -0
  30. package/dist/amp-plugin/pmx-canvas/start-mcp.mjs +14857 -0
  31. package/dist/amp-plugin/pmx-canvas/tools.json +10963 -0
  32. package/dist/canvas/chunks/abnfDiagram-N423BO3Z-cwtsds5d.js +1 -0
  33. package/dist/canvas/chunks/architecture-TIHT7OUA-x63cwejs.js +1 -0
  34. package/dist/canvas/chunks/architectureDiagram-T3A2C74G-b4xc9tpz.js +36 -0
  35. package/dist/canvas/chunks/blockDiagram-VBNYF7ZC-ahp3yxxs.js +132 -0
  36. package/dist/canvas/chunks/c4Diagram-5PPSVZJV-nappnay7.js +10 -0
  37. package/dist/canvas/chunks/classDiagram-JCYQIIEL-k1j2xc1t.js +1 -0
  38. package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-33x08xf2.js +1 -0
  39. package/dist/canvas/chunks/cose-bilkent-JH36ORCC-a428syda.js +1 -0
  40. package/dist/canvas/chunks/cynefin-VYW2F7L2-8v6jxfz8.js +1 -0
  41. package/dist/canvas/chunks/cynefinDiagram-MW4NZA55-nspsqebj.js +62 -0
  42. package/dist/canvas/chunks/dagre-VZM6K2ZE-8y6177fh.js +4 -0
  43. package/dist/canvas/chunks/diagram-7IWD3JNH-vym028wn.js +30 -0
  44. package/dist/canvas/chunks/diagram-B4RE2ZJO-jddqb8sy.js +3 -0
  45. package/dist/canvas/chunks/diagram-LBJQPF4R-bjwbpkrn.js +24 -0
  46. package/dist/canvas/chunks/diagram-Q27KOJAE-j6ph6hcx.js +24 -0
  47. package/dist/canvas/chunks/diagram-UB23O5K3-p09w8jej.js +41 -0
  48. package/dist/canvas/chunks/ebnfDiagram-BXEA7PRR-j975ycq5.js +1 -0
  49. package/dist/canvas/chunks/erDiagram-JOGREHBK-sxp6hjn8.js +85 -0
  50. package/dist/canvas/chunks/eventmodeling-45OFAUF4-xzfgn6xg.js +1 -0
  51. package/dist/canvas/chunks/flowDiagram-UKHOOZJN-2nsmkskb.js +1 -0
  52. package/dist/canvas/chunks/ganttDiagram-PKOTCBZU-4tv230y2.js +292 -0
  53. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-macbhand.js +1 -0
  54. package/dist/canvas/chunks/gitGraphDiagram-DS77QQ5N-mqgmnw9g.js +106 -0
  55. package/dist/canvas/chunks/index-037z5dz2.js +232 -0
  56. package/dist/canvas/chunks/index-081n3har.js +207 -0
  57. package/dist/canvas/chunks/index-5n03dmb9.js +2 -0
  58. package/dist/canvas/chunks/index-5tv8v1hk.js +1 -0
  59. package/dist/canvas/chunks/index-60pgzdqe.js +157 -0
  60. package/dist/canvas/chunks/index-6ceya556.js +332 -0
  61. package/dist/canvas/chunks/index-8g1vb57n.js +2 -0
  62. package/dist/canvas/chunks/index-8rjes9r6.js +2 -0
  63. package/dist/canvas/chunks/index-9022d1n9.js +16 -0
  64. package/dist/canvas/chunks/index-9b02042t.js +2 -0
  65. package/dist/canvas/chunks/index-ap4q4vez.js +2 -0
  66. package/dist/canvas/chunks/index-dyp2nhd3.js +2 -0
  67. package/dist/canvas/chunks/index-frvta4tm.js +2 -0
  68. package/dist/canvas/chunks/index-gf4e0et4.js +2 -0
  69. package/dist/canvas/chunks/index-h9ycj8n2.js +2 -0
  70. package/dist/canvas/chunks/index-hj99nz1f.js +1 -0
  71. package/dist/canvas/chunks/index-mergmj97.js +2 -0
  72. package/dist/canvas/chunks/index-nwsya6dj.js +301 -0
  73. package/dist/canvas/chunks/index-nz8qbd1p.js +2 -0
  74. package/dist/canvas/chunks/index-qhfrazv3.js +2 -0
  75. package/dist/canvas/chunks/index-v119nznk.js +4 -0
  76. package/dist/canvas/chunks/index-vpt37m3d.js +89 -0
  77. package/dist/canvas/chunks/index-y9ma6azy.js +2 -0
  78. package/dist/canvas/chunks/index-zx0j3a2z.js +179 -0
  79. package/dist/canvas/chunks/info-DKCQHKI2-a0ykzs9z.js +1 -0
  80. package/dist/canvas/chunks/infoDiagram-6WML65LV-qv97qq6a.js +2 -0
  81. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-p9306gh0.js +70 -0
  82. package/dist/canvas/chunks/journeyDiagram-NVQOT4AX-sv67zats.js +139 -0
  83. package/dist/canvas/chunks/kanban-definition-27J2QSJJ-k2pfam6p.js +89 -0
  84. package/dist/canvas/chunks/katex-dmg8k4zm.js +257 -0
  85. package/dist/canvas/chunks/mermaid.core-83r0fdce.js +12 -0
  86. package/dist/canvas/chunks/mindmap-definition-FAOFIHXS-vg2newm1.js +96 -0
  87. package/dist/canvas/chunks/packet-7NZHBO7P-tqnabcdv.js +1 -0
  88. package/dist/canvas/chunks/pegDiagram-VL7TDLO6-k2h7zc5n.js +1 -0
  89. package/dist/canvas/chunks/pie-RZYD4A2V-wke6gyhe.js +1 -0
  90. package/dist/canvas/chunks/pieDiagram-7S7Q4E2Y-hg169p1v.js +39 -0
  91. package/dist/canvas/chunks/quadrantDiagram-CIZ2JOQS-bxtvsq0b.js +7 -0
  92. package/dist/canvas/chunks/radar-I7S5WNFK-w7ka0drw.js +1 -0
  93. package/dist/canvas/chunks/railroad-3IZDKUUU-y3vg318x.js +1 -0
  94. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-6hqvcz3c.js +1 -0
  95. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-vcae260m.js +1 -0
  96. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-0dbyme23.js +1 -0
  97. package/dist/canvas/chunks/railroadDiagram-AXF67PYL-njyhcp4p.js +1 -0
  98. package/dist/canvas/chunks/requirementDiagram-LRYGKXZP-2z6v09gm.js +84 -0
  99. package/dist/canvas/chunks/sankeyDiagram-W5VNT64P-15mzam0e.js +40 -0
  100. package/dist/canvas/chunks/sequenceDiagram-SI44F4Z6-rbshyd2c.js +162 -0
  101. package/dist/canvas/chunks/sizeCapture-X5ZJPWSS-sg26xwts.js +1 -0
  102. package/dist/canvas/chunks/stateDiagram-OKZ733FA-6eahp98e.js +1 -0
  103. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-tty0ggn5.js +1 -0
  104. package/dist/canvas/chunks/swimlanes-SLNWSIFB-ze5db10t.js +1 -0
  105. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-thze75gq.js +8 -0
  106. package/dist/canvas/chunks/timeline-definition-Z64GVDOM-vnp7jyy8.js +120 -0
  107. package/dist/canvas/chunks/treeView-QDETBFTQ-6ysffnm6.js +1 -0
  108. package/dist/canvas/chunks/treemap-6X3UGDF4-m3h9p066.js +1 -0
  109. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-0qrnb7mj.js +34 -0
  110. package/dist/canvas/chunks/wardley-OPB4EBWU-dp37drwx.js +1 -0
  111. package/dist/canvas/chunks/wardleyDiagram-T6FBY63Y-8nxg8wqt.js +78 -0
  112. package/dist/canvas/chunks/xychartDiagram-ELKLHX3M-nj921e7s.js +7 -0
  113. package/dist/canvas/global.css +483 -230
  114. package/dist/canvas/index.js +158 -219
  115. package/dist/canvas/mcp-app.html +4301 -548
  116. package/dist/canvas/mermaid-entry.js +338 -338
  117. package/dist/canvas/surface-theme.css +6 -6
  118. package/dist/json-render/index.css +1 -1
  119. package/dist/json-render/index.js +49 -49
  120. package/dist/types/client/canvas/BarHint.d.ts +5 -3
  121. package/dist/types/client/canvas/BoardMoveDialog.d.ts +2 -0
  122. package/dist/types/client/canvas/CanvasNode.d.ts +0 -11
  123. package/dist/types/client/canvas/EdgeEditor.d.ts +19 -0
  124. package/dist/types/client/canvas/EdgeLayer.d.ts +1 -2
  125. package/dist/types/client/canvas/GroupNavigation.d.ts +2 -0
  126. package/dist/types/client/canvas/TextPrompt.d.ts +4 -0
  127. package/dist/types/client/canvas/auto-fit.d.ts +4 -5
  128. package/dist/types/client/mermaid-entry.d.ts +1 -2
  129. package/dist/types/client/mermaid-render.d.ts +1 -0
  130. package/dist/types/client/nodes/BoardNode.d.ts +1 -1
  131. package/dist/types/client/nodes/ExtAppFrame.d.ts +7 -90
  132. package/dist/types/client/nodes/McpAppNode.d.ts +1 -25
  133. package/dist/types/client/nodes/MermaidNode.d.ts +1 -8
  134. package/dist/types/client/nodes/PromptNode.d.ts +1 -0
  135. package/dist/types/client/nodes/ViewerFrame.d.ts +29 -0
  136. package/dist/types/client/nodes/ViewerHost.d.ts +6 -0
  137. package/dist/types/client/nodes/WorkCard.d.ts +7 -0
  138. package/dist/types/client/nodes/iframe-document-url.d.ts +3 -9
  139. package/dist/types/client/nodes/primitive-copy.d.ts +5 -0
  140. package/dist/types/client/nodes/use-ax-surface-bridge.d.ts +1 -0
  141. package/dist/types/client/nodes/use-iframe-content-height.d.ts +1 -1
  142. package/dist/types/client/nodes/use-surface-frame.d.ts +4 -6
  143. package/dist/types/client/nodes/viewer-runtime-state.d.ts +2 -1
  144. package/dist/types/client/state/canvas-store.d.ts +18 -1
  145. package/dist/types/client/state/human-store.d.ts +2 -0
  146. package/dist/types/client/state/intent-bridge.d.ts +5 -2
  147. package/dist/types/client/state/presentation.d.ts +17 -6
  148. package/dist/types/client/state/relation-store.d.ts +11 -0
  149. package/dist/types/client/types.d.ts +1 -1
  150. package/dist/types/json-render/catalog.d.ts +2 -2
  151. package/dist/types/json-render/server.d.ts +2 -1
  152. package/dist/types/server/agent-presence.d.ts +1 -0
  153. package/dist/types/server/ax-interaction.d.ts +1 -0
  154. package/dist/types/server/ax-state-manager.d.ts +10 -2
  155. package/dist/types/server/board-local.d.ts +4 -0
  156. package/dist/types/server/board-move.d.ts +38 -0
  157. package/dist/types/server/canvas-db.d.ts +12 -2
  158. package/dist/types/server/canvas-operations.d.ts +5 -6
  159. package/dist/types/server/canvas-provenance.d.ts +1 -1
  160. package/dist/types/server/canvas-serialization.d.ts +1 -0
  161. package/dist/types/server/canvas-state.d.ts +86 -20
  162. package/dist/types/server/card-relocation.d.ts +6 -0
  163. package/dist/types/server/context-reads.d.ts +3 -1
  164. package/dist/types/server/human-presence.d.ts +1 -1
  165. package/dist/types/server/index.d.ts +26 -10
  166. package/dist/types/server/intent-registry.d.ts +8 -4
  167. package/dist/types/server/knowledge-lifecycle.d.ts +4 -2
  168. package/dist/types/server/mutation-history.d.ts +7 -5
  169. package/dist/types/server/operations/ops/boards.d.ts +0 -1
  170. package/dist/types/server/operations/registry.d.ts +2 -0
  171. package/dist/types/server/tour-control.d.ts +13 -3
  172. package/dist/types/server/trace-manager.d.ts +1 -0
  173. package/dist/types/shared/ax-kinds.d.ts +6 -0
  174. package/dist/types/shared/ax-surface-protocol.d.ts +8 -9
  175. package/dist/types/shared/human-presence.d.ts +1 -0
  176. package/dist/types/shared/lifecycle-status.d.ts +2 -0
  177. package/dist/types/shared/tour.d.ts +8 -0
  178. package/docs/RELEASE.md +21 -14
  179. package/docs/agent-plugin.md +16 -2
  180. package/docs/amp-plugin.md +271 -0
  181. package/docs/cli.md +42 -3
  182. package/docs/design/Chrome.dc.html +32 -6
  183. package/docs/design/GuestName.dc.html +50 -0
  184. package/docs/design/PluginLogo.svg +7 -0
  185. package/docs/design/Types1.dc.html +3 -2
  186. package/docs/design/Types2.dc.html +1 -1
  187. package/docs/design/Types3.dc.html +1 -1
  188. package/docs/design/WorkCards.dc.html +39 -0
  189. package/docs/design/Zoom.dc.html +37 -60
  190. package/docs/design/canvas.json +17 -1
  191. package/docs/design/plugin-logo.png +0 -0
  192. package/docs/design.md +280 -12
  193. package/docs/evals/agents-md-sections.md +38 -0
  194. package/docs/http-api.md +179 -11
  195. package/docs/mcp.md +69 -9
  196. package/docs/node-types.md +109 -4
  197. package/docs/plans/plan-009-tech-debt-backlog.md +3 -3
  198. package/docs/plans/plan-019-post-0.9-roadmap.md +327 -31
  199. package/docs/plans/plan-020-wave-5-work-planning.md +553 -0
  200. package/docs/product-vision-2026-09.md +42 -17
  201. package/docs/sdk.md +18 -0
  202. package/package.json +7 -4
  203. package/plugins/pmx-canvas/assets/preview.png +0 -0
  204. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +3 -1
  205. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  206. package/plugins/pmx-canvas/plugin.json +2 -2
  207. package/plugins/pmx-canvas/runtime.json +1 -1
  208. package/plugins/pmx-canvas/tools.json +688 -128
  209. package/skills/data-analysis/SKILL.md +13 -26
  210. package/skills/frontend-design/LICENSE.txt +177 -0
  211. package/skills/frontend-design/SKILL.md +3 -0
  212. package/skills/pmx-canvas/SKILL.md +232 -849
  213. package/skills/pmx-canvas/evals/evals.json +26 -3
  214. package/skills/pmx-canvas/references/full-reference.md +89 -24
  215. package/skills/pmx-canvas/references/html-primitives.md +7 -0
  216. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  217. package/skills/pmx-canvas/references/tours-and-recording.md +29 -2
  218. package/skills/pmx-canvas/references/workbench-workflows.md +900 -0
  219. package/skills/pmx-canvas-testing/SKILL.md +7 -5
  220. package/skills/published-consumer-e2e/SKILL.md +25 -8
  221. package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +51 -77
  222. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  223. package/skills/web-artifacts-builder/SKILL.md +6 -0
  224. package/skills/web-artifacts-builder/scripts/init-artifact.sh +2 -2
  225. package/src/cli/commands/apps.ts +1 -0
  226. package/src/cli/commands/boards.ts +30 -0
  227. package/src/client/App.tsx +20 -4
  228. package/src/client/canvas/AttentionHistory.tsx +10 -2
  229. package/src/client/canvas/BarHint.tsx +6 -3
  230. package/src/client/canvas/BoardMoveDialog.tsx +225 -0
  231. package/src/client/canvas/CanvasNode.tsx +79 -49
  232. package/src/client/canvas/CanvasViewport.tsx +42 -14
  233. package/src/client/canvas/ContextMenu.tsx +97 -15
  234. package/src/client/canvas/EdgeEditor.tsx +149 -0
  235. package/src/client/canvas/EdgeLayer.tsx +441 -174
  236. package/src/client/canvas/ExpandedNodeOverlay.tsx +5 -2
  237. package/src/client/canvas/GroupNavigation.tsx +85 -0
  238. package/src/client/canvas/Presentation.tsx +53 -3
  239. package/src/client/canvas/RelationsPanel.tsx +9 -0
  240. package/src/client/canvas/SelectionBar.tsx +21 -0
  241. package/src/client/canvas/SessionPanel.tsx +35 -1
  242. package/src/client/canvas/TextPrompt.tsx +18 -1
  243. package/src/client/canvas/TopBar.tsx +54 -9
  244. package/src/client/canvas/auto-fit.ts +9 -11
  245. package/src/client/canvas/canvas-area.ts +2 -2
  246. package/src/client/canvas/use-focus-trap.ts +6 -1
  247. package/src/client/mermaid-entry.ts +6 -20
  248. package/src/client/mermaid-render.ts +39 -0
  249. package/src/client/nodes/AxStepControls.tsx +45 -69
  250. package/src/client/nodes/BoardNode.tsx +65 -9
  251. package/src/client/nodes/ContextNode.tsx +88 -396
  252. package/src/client/nodes/ExtAppFrame.tsx +302 -1465
  253. package/src/client/nodes/FileNode.tsx +92 -81
  254. package/src/client/nodes/HtmlNode.tsx +8 -36
  255. package/src/client/nodes/LedgerNode.tsx +31 -17
  256. package/src/client/nodes/MarkdownNode.tsx +14 -24
  257. package/src/client/nodes/McpAppNode.tsx +48 -154
  258. package/src/client/nodes/MermaidNode.tsx +80 -69
  259. package/src/client/nodes/PromptNode.tsx +44 -17
  260. package/src/client/nodes/ResponseNode.tsx +8 -6
  261. package/src/client/nodes/StatusNode.tsx +34 -7
  262. package/src/client/nodes/StatusSummary.tsx +16 -3
  263. package/src/client/nodes/TraceNode.tsx +8 -8
  264. package/src/client/nodes/ViewerFrame.tsx +273 -0
  265. package/src/client/nodes/ViewerHost.tsx +41 -0
  266. package/src/client/nodes/WebpageNode.tsx +22 -24
  267. package/src/client/nodes/WorkCard.tsx +175 -0
  268. package/src/client/nodes/iframe-document-url.ts +20 -27
  269. package/src/client/nodes/primitive-copy.ts +97 -0
  270. package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
  271. package/src/client/nodes/use-iframe-content-height.ts +34 -10
  272. package/src/client/nodes/use-surface-frame.ts +22 -11
  273. package/src/client/nodes/viewer-runtime-state.ts +41 -35
  274. package/src/client/state/attention-bridge.ts +5 -0
  275. package/src/client/state/attention-store.ts +1 -0
  276. package/src/client/state/canvas-store.ts +202 -26
  277. package/src/client/state/human-store.ts +22 -2
  278. package/src/client/state/intent-bridge.ts +20 -5
  279. package/src/client/state/presentation.ts +135 -15
  280. package/src/client/state/relation-store.ts +127 -1
  281. package/src/client/state/sse-bridge.ts +18 -19
  282. package/src/client/theme/global.css +483 -230
  283. package/src/client/theme/surface-theme.css +6 -6
  284. package/src/client/types.ts +1 -0
  285. package/src/json-render/charts/tufte-components.tsx +44 -2
  286. package/src/json-render/renderer/index.css +62 -2
  287. package/src/json-render/renderer/index.tsx +31 -7
  288. package/src/json-render/server.ts +3 -2
  289. package/src/mcp/server.ts +13 -3
  290. package/src/server/agent-presence.ts +43 -23
  291. package/src/server/ax-flow-loop.ts +6 -0
  292. package/src/server/ax-gate-ttl.ts +8 -1
  293. package/src/server/ax-interaction.ts +16 -10
  294. package/src/server/ax-state-manager.ts +17 -4
  295. package/src/server/ax-wait.ts +20 -6
  296. package/src/server/board-export.ts +54 -30
  297. package/src/server/board-local.ts +20 -0
  298. package/src/server/board-move.ts +297 -0
  299. package/src/server/canvas-db.ts +249 -158
  300. package/src/server/canvas-geometry.ts +1 -0
  301. package/src/server/canvas-operations.ts +139 -109
  302. package/src/server/canvas-schema.ts +21 -0
  303. package/src/server/canvas-serialization.ts +2 -0
  304. package/src/server/canvas-state.ts +797 -159
  305. package/src/server/card-relocation.ts +53 -0
  306. package/src/server/code-graph.ts +4 -3
  307. package/src/server/context-reads.ts +83 -55
  308. package/src/server/demo-state.json +140 -114
  309. package/src/server/file-watcher.ts +30 -10
  310. package/src/server/html-primitives.ts +3 -9
  311. package/src/server/html-surface.ts +8 -0
  312. package/src/server/human-presence.ts +18 -5
  313. package/src/server/index.ts +54 -24
  314. package/src/server/intent-registry.ts +43 -5
  315. package/src/server/knowledge-lifecycle.ts +32 -9
  316. package/src/server/lifecycle-status.ts +29 -1
  317. package/src/server/mcp-app-runtime.ts +26 -7
  318. package/src/server/mutation-history.ts +37 -8
  319. package/src/server/operations/composites.ts +6 -3
  320. package/src/server/operations/mcp-contracts.ts +32 -2
  321. package/src/server/operations/mcp.ts +36 -9
  322. package/src/server/operations/ops/annotation.ts +22 -1
  323. package/src/server/operations/ops/ax-await.ts +1 -0
  324. package/src/server/operations/ops/ax-timeline.ts +28 -2
  325. package/src/server/operations/ops/batch.ts +25 -11
  326. package/src/server/operations/ops/boards.ts +45 -6
  327. package/src/server/operations/ops/nodes.ts +70 -0
  328. package/src/server/operations/ops/query.ts +32 -3
  329. package/src/server/operations/ops/snapshots.ts +1 -0
  330. package/src/server/operations/ops/viewport.ts +11 -9
  331. package/src/server/operations/registry.ts +49 -4
  332. package/src/server/server.ts +69 -75
  333. package/src/server/tour-control.ts +97 -12
  334. package/src/server/trace-manager.ts +4 -0
  335. package/src/server/web-artifacts/scripts/init-artifact.sh +2 -2
  336. package/src/shared/agent-context.ts +7 -1
  337. package/src/shared/auto-arrange.ts +5 -4
  338. package/src/shared/ax-kinds.ts +13 -0
  339. package/src/shared/ax-surface-protocol.ts +20 -9
  340. package/src/shared/content-height-reporter.ts +4 -3
  341. package/src/shared/human-presence.ts +1 -0
  342. package/src/shared/lifecycle-status.ts +2 -0
  343. package/src/shared/tour.ts +8 -0
@@ -72,7 +72,7 @@ The remaining items were re-analyzed with pros/cons and tiered; the maintainer a
72
72
  |---|---|
73
73
  | Windows web-artifacts | The artifact build pipeline is bash-script-backed (POSIX-only); `tests/unit/web-artifacts.test.ts` self-skips on win32 and docs now state the boundary. Decide: port the build scripts to a cross-platform runner, or keep the documented "build on POSIX, render anywhere" stance. |
74
74
  | Composite parity no longer machine-checked | Since v0.3.0 removed the legacy standalones, the byte-identical composite-vs-legacy guarantee has no head-to-head test — regressions in `buildInput`/`formatResult` reuse surface only via output-shape assertions. Accepted at review; revisit if a composite drifts. |
75
- | Portal-layer ext-app mount (contingency) | If the maintainer sets the WebKit UX bar at "never any visible gap", inline ext-app iframes must render outside the world transform — an architectural change that reopens the parked M3. 0.4.1 shipped the cheaper mimic (post-settle WebKit repaint nudge, `repaint-nudge` trail event) and the 0.4.1 Copilot report confirms the nudge RUNS but residual black tiles still appear (Diamond on first-load settle, Ellipse after restart settle) — the contingency's trigger condition is now met. 0.4.3 Codex hardens the evidence: three ready tiles blank in WebKit with **byte-identical** early/late screenshots while the recovery trail reported initialized/settled — DOM-level recovery completion does not prove compositor paint, so no DOM-side nudge can close this. This portal-layer mount is the designated next Finding N step; scope it as its own project (drag/zoom sync, z-order, clipping, minimap interplay), not a patch-release bolt-on. |
75
+ | Native ext-app paint (Finding N) | **Native acceptance open:** the maintainer rejected CSS zoom after it broke iframe layout and paint in WebKit. The original proportional world transform is restored. A separate portal also failed stacking, input and presentation. The shared loading owner replaces the old recovery ladder, but DOM readiness does not establish native WKWebView compositor health. See [the implementation decision](../design.md#011-implementation-notes). |
76
76
 
77
77
  ## Added post-0.4.0 (2026-08-04 report cycle)
78
78
 
@@ -123,8 +123,8 @@ Logs: `/tmp/pmx-w3-debt-baseline.zPoaEM/log` and `/tmp/pmx-w3-debt-after.iXN2fq/
123
123
  | Priority / boundary | Evidence and disposition |
124
124
  |---|---|
125
125
  | Before larger-library scaling | `lifecycle-status.ts` reads every board and each card's full review history even for one-card requests. `KnowledgeSync` reloads workspace qualifications after board changes. Bound narrow reads to the dependency closure, batch/index review summaries, and separate folder aggregates from card detail when scaling this path. Measure populated review histories and long dependency chains as well as empty history. Avoid a TTL cache: cadence, sessions, retirement and source changes have different invalidation clocks. |
126
- | Wave 4, frame host | `ExtAppFrame.tsx` still owns 1,597 lines of bridge/recovery behavior. Consolidate mount budget, theme delivery and visible fallback with the planned frame host, preserving working draft/refresh behavior. Do not start another recovery ladder or infer native WebKit paint from Chromium tests. |
127
- | Wave 5, groups and agent output | Keep board-qualified relation/provenance identities when moving cards into or out of a board. Review records currently outlive snapshots and are keyed by board + card; define their move semantics before adding make-board/inline-board. Do not clone validation as if a new claim had been checked. |
126
+ | Wave 4, frame host | **Implemented locally in the 0.11 candidate:** `ViewerHost` owns preview admission and `RefreshingViewerFrame` owns loading, painted replacement and Retry. `ExtAppFrame` is the protocol adapter, without its former recovery ladder. Draft/refresh, stacking and gesture regressions are covered. Native WebKit acceptance and the self-contained MCP document's additional Mermaid bytes remain explicit limits, not a second deferred recovery implementation. |
127
+ | Wave 5, groups and work planning | **Scope revised 2026-10-27:** only Move to new board, leaving a portal; no reverse move. Keep board-qualified relation/provenance identities and audit access across the move. Review records outlive snapshots and are keyed by board + card; [plan 020](plan-020-wave-5-work-planning.md) requires atomic persistence/retries, an explicit Undo/snapshot boundary and runtime-binding checks. A move never renews validation. Ordinary planning cards do not require session records. |
128
128
  | Journal and shared/hosted stages | The due evaluator still reads the local `canvasState` singleton. Separate runtime acquisition from qualification when a second runtime needs it, not by speculative package splitting now. Filter authorized sources before summaries, titles and lifecycle reasons are computed. Categories are not permissions. Keep validation audit distinct from an undoable content journal and finish the authoritative mutation-path decision before event sourcing. |
129
129
  | Test maintenance | Large integration files remain (`server-api.test.ts`, `canvas.pw.ts`). Split by owning domain when those domains next change, preserving isolation and race cases. Do not replace human browser or real transport checks with source-string assertions to make the suite cheaper. |
130
130
 
@@ -1,11 +1,17 @@
1
1
  # Plan 019: After 0.9.0
2
2
 
3
- **Status (2026-10-24):** 0.9.3 is released to npm and GitHub, with fresh registry smoke
4
- passing. Step 2, MCP hardening and SDK tour result parity on SDK v1, is implemented
5
- and pushed with the Settings tooltip fix, operation help and schema-size reduction.
6
- The maintainer authorized review, testing and release of 0.10.0; release gates are in progress.
7
- Later version numbers are proposals, not publication approval; every release must pass
3
+ **Status (2026-10-25):** 0.10.0 is released. Step 3 is implemented and pushed,
4
+ with fresh post-push reviews and all five CI jobs passing. The maintainer authorized
5
+ release of 0.11.0; release metadata and publication gates follow the checkpoint below.
6
+ Versions after 0.11 remain proposals, not publication approval; every release must pass
8
7
  the [release gates](../RELEASE.md).
8
+ **Wave 5 planning update (2026-10-27):** the owner settled deliberate work presentation,
9
+ ordinary planning cards independent of Sessions, unchanged ghost feedback, and **Move to new
10
+ board** with a portal. Agents also gain the human pen, text and eraser capabilities for
11
+ questions and emphasis alongside existing board tools. No reverse move or general `ask` card in this wave. See the detailed
12
+ [implementation plan](plan-020-wave-5-work-planning.md); implementation has started with
13
+ annotation parity. Work-card authoring, live-task views, relations/group navigation and
14
+ board moves remain planned.
9
15
  **Sources:** [product vision](../product-vision-2026-09.md) (moves and the 2026-10-19 sequence),
10
16
  [design.md build plan](../design.md#build-plan) (Waves 4, 5, Later),
11
17
  [plan 009](plan-009-tech-debt-backlog.md) (open debt),
@@ -24,8 +30,8 @@ measured; the maintainer carries that risk rather than reinstating an earlier ga
24
30
  |---|---|---|---|---|
25
31
  | 1 | 0.9.3 | Cleanup: tour debt, large-board costs, bounded due evaluator, MCP reconnect, lint | 12, 1 | S–M |
26
32
  | 2 | 0.10 | MCP hardening, operation help and bounded discovery-schema reduction | 6a, 1 | M |
27
- | 3 | 0.11 | One frame host, portal-layer mount, Wave-0 design pass | 5, 9 | M–L |
28
- | 4 | 0.12 | Wave 5: agent output as nodes, make/inline board, group drill-in, relations sketch parity | 3, 0 | L |
33
+ | 3 | 0.11 | One frame host, proportional spatial zoom, Wave-0 design pass | 5, 9 | M–L |
34
+ | 4 | 0.12 | Wave 5: deliberate work planning, Move to new board with a portal, group drill-in, relations sketch parity | 3, 0 | L |
29
35
  | 5 | later | Trust (M half), journal, concurrent boards, binary | 7, 4, 8 | L–XL |
30
36
  | 6 | end | Curation-effect baseline and reruns; skill-prompt benchmark | Part 1 item 4 | S–M |
31
37
 
@@ -269,20 +275,293 @@ Candidates, not automatic scope: `session.start`, composite-input redesign.
269
275
  [Vision moves 5 and 9](../product-vision-2026-09.md#5-keep-every-node-type-unify-how-they-render-m),
270
276
  [design.md Wave 4](../design.md#build-plan).
271
277
 
278
+ **Pre-release checkpoint (2026-10-25):** Peter authorized commit, push, review/test
279
+ and release. The reconciled implementation is on `main` in
280
+ [`e92b885f`](https://github.com/pskoett/pmx-canvas/commit/e92b885f711891ec33a9e704630d71fac048ce62),
281
+ including the explicitly authorized historical 0.10 reports and control-room artifact.
282
+ Fresh post-push Oracle and Claude reviews found no runtime blocker. The first CI
283
+ run exposed seven import-order-dependent Markdown tests: `preact/compat` maps
284
+ `onBlur` to `focusout`, while synthetic blur emitted only one event. The test-only
285
+ repair uses native focus transitions and preserves every assertion. Both local
286
+ orders pass 359 tests; [exact-head CI](https://github.com/pskoett/pmx-canvas/actions/runs/40224062810)
287
+ for [`5a1c2696`](https://github.com/pskoett/pmx-canvas/commit/5a1c269632841091f2f199f7a36a169635d0639b)
288
+ passes all five jobs, including 380 browser cases, Windows and macOS units. Frozen
289
+ install, headed CLI coverage, packed release smoke and pack dry-run also pass.
290
+ No failed checks were waived. Native WKWebView, retained memory and post-repair
291
+ performance remain unverified. The checkpoints below retain earlier evidence and
292
+ delivery state; they do not override this later authorization or CI result.
293
+
294
+ **Historical local implementation checkpoint (before release authorization):** the maintainer's 2026-10-25
295
+ correction removes the third target's alternate grid and experimental CSS zoom.
296
+ The native board and its contents scale proportionally using the original matrix.
297
+ The other visual improvements and Markdown README-menu override remain in scope.
298
+ The shared viewer host replaces the ext-app recovery
299
+ ladder, keeps painted content during replacement, and owns explicit Retry for both
300
+ preparation and loading failures. JSON drafts survive theme and focus changes;
301
+ Mermaid's inline and standalone surfaces share the renderer. Preview mounting is
302
+ automatic at every zoom with no lifetime cap; visited documents remain mounted
303
+ for arbitrary app state. Initial documents load without a shared queue or user gate.
304
+ See [implementation decisions](../design.md#011-implementation-notes).
305
+ Oracle and Claude Code reviewed the combined change and its fixes. Claude and
306
+ the owning thread independently reproduced CSS-zoom sizing errors in Linux
307
+ WebKit26; transforms preserve inner dimensions in that probe and Chromium.
308
+ The earlier complete headed aggregate132 passed all 372 tests on the focus
309
+ and file-tooltip fixes, using Chromium 145.0.7632.6 across all four projects.
310
+ The original aggregate120 remains recorded as 371 pass / 1 fail: deferred modal
311
+ focus restoration dismissed a newly opened relation menu. Both that race and
312
+ the fresh Oracle review's file-header tooltip clipping have red/green regressions.
313
+ Oracle's follow-up accepts the repair. After its quota reset, Claude reviewed
314
+ snapshot137 read-only, verified all 531 source-manifest entries, and reported no
315
+ blockers. Its actionable findings are resolved below; review severity does
316
+ not close introduced debt or establish native-host acceptance. Peter requires new
317
+ Oracle and Claude reviews of the final integrated snapshot after its complete gate.
318
+ Aggregate153 remains 372 pass / 1 clipboard-test failure. Retrying the entire
319
+ clipboard read/parse/assertion, seeded with non-JSON text, fixes that test race
320
+ without changing the expected payload or deadline. Aggregate167 remains 372 pass /
321
+ 1 startup-focus failure. Its trace and deterministic regression identify an older
322
+ buffered layout overwriting a newer camera while the first catalog is delayed.
323
+ The bounded fix passes the original theme/heading browser case at all three widths
324
+ in171. Aggregate174 remains 372 pass / 1 HTML-refresh failure. It exposed the initial
325
+ document's paint acknowledgement being cancelled when a replacement starts. The
326
+ document-owned readiness repair has controlled red/green unit and browser evidence;
327
+ aggregate182 passed all 373 headed cases. Gate182 passed typecheck, 1,515 unit tests
328
+ and 349 client tests. Bounded Oracle/Claude review183 then identified the additional
329
+ lifecycle interleavings below. Their fixes pass gate191 (typecheck, 1,515 unit tests,
330
+ 353 client tests). Aggregate194 remains 374 pass / 2 fail: one forced app click hit
331
+ the loading overlay, and one long poll stalled across the test's `unrouteAll` while
332
+ the node deletion itself returned success. The tests now use ordinary pointer
333
+ actionability and keep interception stable while toggling refusal. Both pass five
334
+ headed repetitions in195. Aggregate196 remains 375 pass / 1 hosted-review failure:
335
+ the test entered evidence before the save's precondition reload finished, and that
336
+ reload correctly cleared the observation. Waiting for the dialog's enabled Save
337
+ control before entering new evidence passes three repetitions in197. The product's
338
+ input-reset behavior is unchanged. Both bounded reviewers confirm a separate,
339
+ pre-existing defect: evidence remains editable during that reload and can be lost.
340
+ `LifecyclePanel.tsx` is unchanged; the harness wait is not a product fix. This test's
341
+ whole-test ceiling was raised from 30 to 60 seconds; assertion deadlines are unchanged.
342
+ Aggregate198 passes all 376 headed cases. Bounded review198 then found that queued
343
+ tour requests can outlive a board activation, and a stalled exit blocks later Present.
344
+ The tour-specific server intent fence below replaces that queue. Build205 and gate207
345
+ pass: typecheck, 1,518 unit tests, 357 client tests and all 378 headed browser cases
346
+ across four projects. The source manifest is unchanged after the run. Fresh complete
347
+ Oracle and Claude reviews209 inspected that passing snapshot independently. Oracle
348
+ requested a generic-viewer theme repair; Claude accepted with a clipboard-permission
349
+ fix recommended. Both accept the bounded repair216, with no required fixes remaining.
350
+ Build213 and nine headed viewer/form cases214 pass. Gate215 passes typecheck,
351
+ 1,518 unit tests, 359 client tests and lint; its full headed aggregate passes all
352
+ 380 cases across four projects (27.7 minutes). The 537-entry source manifest still
353
+ matches after verification. Final portal218/219/221 serves the same built bundle:
354
+ 70 cards, native board and first-stop screenshots at1440/600px, plus a pointer-visible
355
+ Present/Next/Next/Back/Escape recording with settled transitions. The captures and
356
+ full five-frame-per-second contact sheet were inspected. Saved nodes, edges,
357
+ viewport, tour and board/README metadata are unchanged; the unrelated control-room
358
+ artifact is unchanged. Narrow native fit intentionally scales content down rather
359
+ than reflowing it. Resize alone preserves the current camera; invoking Present at
360
+ the new width fits the selected stop. No native-host or performance acceptance is
361
+ inferred from these checks.
362
+ Lint exits zero with
363
+ 54 warnings and 12 informational diagnostics, all with baseline identities;
364
+ the earlier McpAppNode void-union warning is gone.
365
+ The earlier populated-viewer slowdown is not reproduced in benchmark180,
366
+ described below. The self-contained MCP document grows from 1.32 MB to 4.78 MB, and
367
+ visited documents retain arbitrary app state and its memory cost. These remain
368
+ explicit tradeoffs; native WKWebView boot and paint are unverified.
369
+ The approved installed-consumer helper repair now stages complete built asset
370
+ trees; its default no-override installed-package case passes. Populated portal
371
+ workflows, current-state primitive copying, eight-stop presentation navigation
372
+ and standalone offline export have been exercised and visually inspected.
373
+ Native host acceptance remains separate. No commit, push or release is implied.
374
+ The dim heading, neighboring offscreen title and focus tooltip observations
375
+ were traced to existing view states. Overview-overlay clearance is superseded
376
+ by removal of the rejected overview, not claimed solved by tile nonoverlap.
377
+
378
+ **Fresh review dispositions (2026-10-25):**
379
+ - **Complete209 and bounded216:** both reviewers verified all 537 source-manifest
380
+ entries. Only JSON/graph use named-theme messages and retain drafts across theme
381
+ changes. Generic hosted viewers again consume dark/light queries and navigate on
382
+ scheme changes, preserving baseline behavior rather than promising draft retention.
383
+ Shared frames default to no delegated permissions; MCP explicitly keeps its existing
384
+ clipboard policy. Client212 reproduces both regressions, client213 passes all21 cases,
385
+ and headed214 passes all9 generic/JSON cases in src/srcdoc modes. Test213's theme
386
+ override intentionally suppressed server changes; removing that test setup error
387
+ preserves the original rendered-theme assertions. Original red evidence is retained.
388
+ - **Security/platform probes211:** three authored Mermaid CSS break-out cases leave
389
+ the body and toolbar visible in headed Chromium145 and Linux WebKit26; captured
390
+ selectors stay diagram-scoped. This does not establish CSS safety in general.
391
+ Card content already has paint containment. Author CSP `script-src 'none'` leaves
392
+ HTML visible without a fallback after11s because the bridge precedes the meta tag.
393
+ Both engines enumerate all37 canvas custom properties. Claude closes those concrete
394
+ cases and the documented full-build export precondition; native WKWebView remains
395
+ unverified. No speculative renderer or export fallback was added.
396
+ - **Fixed repeated edge layout:** the three paint layers predate this work; repeated
397
+ collision placement was introduced here. One shared scale/font/node/edge computation
398
+ now serves all three layers without rebuilding for pan. In three headed Chromium145
399
+ runs of 60 camera updates over 200 cards/150 labelled edges, text measurements fell
400
+ from 54,000 to zero for pan and 17,400 for zoom. All six final paint geometries match.
401
+ Instrumented frame medians overlap: pan155–172 ms before/140–160 ms after,
402
+ zoom449–468 ms before/407–472 ms after. No smoothness, boot-speed or load-cause claim.
403
+ Reproduce with `scripts/benchmark-edge-navigation.mjs`; profiles140/142 are retained.
404
+ - **28% marked-edge case verified:** the populated file/diff mark clears cards and
405
+ hovered handles, remains in the adjacent row gap, and supports pointer/keyboard menus
406
+ through39→28→60→28% plus real wheel/pan. Its side gap is about11px, smaller than
407
+ the14px mark even before clearance, so below-card placement is necessary. The
408
+ emitted paint/hit regression now includes28%. No handle shrinking or speculative
409
+ hover-dependent placement was added. Probe148 preserves the clone's saved state.
410
+ - **Documented source-build precondition:** exports require built CSS, fonts and
411
+ viewer assets; the package includes them. Missing assets are not a supported mode.
412
+ - **Fixed Copy JSON owner coupling:** explicit expanded ownership replaces reverse
413
+ registration order. Regression144 copies the wrong inline draft before the fix;
414
+ 145 passes expanded-first, later inline re-registration and close-to-inline fallback.
415
+ The card menu remains behind the modal; this removes incidental ordering without
416
+ inventing a new modal copying flow or weakening sandbox reply validation.
417
+ - **Retained Copy JSON behavior:** an unloaded viewer keeps the action and reports
418
+ an honest failure. It never substitutes stale server data or claims success.
419
+ - **Fixed presentation delivery ordering:** missing tour echoes reproduced dead
420
+ buttons in145. The initial HTTP fallback introduced cross-stream ordering races.
421
+ Steps and exits now share one server sequence, catalog epoch and board generation.
422
+ The client separates observed/applied deliveries and local cancellation/remote
423
+ hiding. Regressions154/158/161/163 reproduce stale steps, stale exits and hidden
424
+ echoes. Client163 and all six headed cases164 pass the final repair, including
425
+ both exit/restart orders. Oracle's bounded recheck found no remaining tour issue.
426
+ Actual-portal173 exercises Present, Next and Escape on the served final bundle;
427
+ inspected wide/narrow captures and pointer recording show control clearance.
428
+ Saved nodes, edges, viewport, tour and board/README metadata remain unchanged.
429
+ - **Fixed startup focus:** the layout/catalog buffering path exists in 0.10.0 by
430
+ source comparison. Aggregate167 exposes it when a focus event overtakes the first
431
+ catalog response. Regression170 reproduces the camera reverting from y=96 to y=-47;
432
+ updating the buffered layout's camera on the newer event makes all 27 board-state
433
+ cases pass. The original theme/heading browser test passes unchanged at 600, 1024
434
+ and 1920px in171. No delayed test focus or longer assertion deadline hides the race.
435
+ - **Fixed initial viewer readiness:** aggregate174 exposed a race introduced by the
436
+ shared host. A replacement cancelled the retained document's first paint reply;
437
+ a late load could also use the replacement's token. Readiness now belongs to each
438
+ document, and only the current load can own Retry. Unit176 and controlled headed
439
+ browser177 fail before the repair; unit180 and both src/srcdoc browser180/181 pass.
440
+ Initial-load-before/after-update controls preserve the replacement's failure banner,
441
+ and an old document error cannot redirect Retry to obsolete content. The prior
442
+ 11-case viewer suite179 passes; full integrated acceptance remains separate.
443
+ - **Review183 lifecycle repairs:** Retry now cancels removed entries even when their
444
+ source key is unchanged. The initial tour repair made local Present wait for earlier Exit requests.
445
+ Unit184 reproduces both failures and passes after the fixes; browser187 exercises
446
+ the held-exit restart and all four navigation cases. The exit request race also
447
+ exists in 0.10.0 by source comparison; the readiness leak belongs to the shared host.
448
+ - **Review198 tour request ownership:** both reviewers helped replace the exit wait
449
+ with an atomic server-side document intent fence. Old/duplicate requests emit no
450
+ event, earlier activations cannot affect the current board, and a pending resume
451
+ cannot overtake a newer gesture. Client199 has four red cases before the fix and
452
+ all seven pass after; server199 has two red cases before and all14 pass after.
453
+ Additional capacity, invalid-input, SDK and MCP controls pass in202 (15 cases).
454
+ Headed202 verifies a held-before-execution exit over both HTTP and hosted MCP:
455
+ the restart paints before release, the old exit is superseded, and Next still works.
456
+ Browser199 stalls before restart with the old client. Browser201 reaches the new
457
+ restart but stalls reading Chromium's intercepted response body;202 reads the same
458
+ actual response through route.fetch before fulfilling it. Both attempts are retained.
459
+ The fence is latest-intent-wins within one document, not FIFO or cancellation across
460
+ reloads. Different documents/agents retain arrival-order control. See the
461
+ [public contract](../http-api.md#board-tours); no generic request framework was added.
462
+ Both bounded203 rechecks accept the fence. A current superseded startup now explains
463
+ the missing stop while the catalog is delayed: client/browser204 fail before the
464
+ feedback fix, client205 and headed206/209 pass after. Run205's route-teardown error
465
+ is retained; waiting for pending handlers fixes teardown without changing assertions.
466
+ - **Authored JSON ownership:** readiness and draft ownership have separate lifetimes.
467
+ A retained document may finish painting after a spec change but cannot supply the
468
+ replacement's drafts. Unit185 fails both initial-load orderings before the fix.
469
+ Browser188 passes src/srcdoc with a held initial load; deliberately removing the
470
+ authored-identity check makes both cases copy `Old user draft` into the new spec
471
+ in189. That mutation is removed. Browser187's earlier image-blocking probe instead
472
+ waited for content before the required parent restore; it was a harness error.
473
+ - **Complete connection snapshot:** browser185 reproduces a lost remote tour command
474
+ while the initial catalog HTTP request is held. The shared SSE/poll snapshot now
475
+ sends the catalog before its layout, rather than adding another client event queue.
476
+ The same browser case and the snapshot API test pass in186. This closes the startup
477
+ gap exposed by the new tour identity check, without assuming reordered transport.
478
+ - **Review183 reconciliation:** Claude withdrew hidden-port displacement, hypothetical
479
+ polling reordering and Copy JSON's intentional replacement refusal as defects after
480
+ inspecting the existing profiles, probe148 and supported contracts. Neither reviewer
481
+ found another concrete edge-cache or Copy JSON ownership failure. Zoom layout time
482
+ differs between the profiled bundles; no cause or user-visible slowdown is established.
483
+ - **Populated loading comparison before review183 repairs:** benchmark180 uses identical 70-card states,
484
+ 33 visible viewers at18%, headed Chromium145 at1440×900/2x, and alternating builds
485
+ over three cold-browser/warm-reload pairs each. Server/OS caches are warm; no build
486
+ or test suite runs concurrently. Candidate bundle1f19d305 takes7.55–7.82s cold and
487
+ 7.86–7.94s warm versus0.10.0's7.63–7.99s and7.95–8.09s. All33 viewers report content
488
+ ready, with no missing viewers, page errors or timeouts; states remain identical.
489
+ This does not reproduce run79's earlier candidate slowdown. Small samples and
490
+ instrumented readiness, rather than native paint, do not establish a speedup,
491
+ equivalence or a cause. The four subsequent lifecycle fixes are not measured by
492
+ this comparison. Reproduce with `scripts/benchmark-populated-canvas.mjs`.
493
+
494
+ **Independent Copilot evidence for released0.10.0, not this source:** its final
495
+ report records source330 pass/1 toolbar-resize failure/2 platform skips and
496
+ registry319 pass/11 teardown failures/2 skips. Unchanged targeted reruns pass;
497
+ the original gates remain red and causes unresolved. Current verification overlaps
498
+ the resized multi-agent toolbar and script-only hosted forms. It cannot explain
499
+ those Mac failures without the raw traces, which remain on Copilot's machine.
500
+ Scoped public contracts, documents and persistence pass separately. Native steering
501
+ queued despite installed immediate-mode send sites; Peter observed manual submission
502
+ was required. The original probe arrived about91 minutes later, with manual send
503
+ versus automatic draining unknown. That is not active-run or idle-wake acceptance.
504
+ Fresh extension activation and native WKWebView remain unverified. This report
505
+ does not justify speculative adapter changes or upgrade current native acceptance.
506
+
507
+ **Independent Codex evidence for released0.10.0, not this source:** its final
508
+ addendum records source325 pass/6 fail/2 platform skips and registry329 pass/1 fail/2
509
+ skips. Unchanged isolated passes do not clear either aggregate. The registry footer
510
+ Home failure (`scrollTop: 3019`) repeats an earlier Amp finding. Source failures
511
+ overlap file saves, hosted draft replay, HTML/Mermaid, hosted Clear and wide Home;
512
+ five are teardown timeouts. Concurrent broad runs confound load attribution.
513
+
514
+ - **C01, reproduced platform defect:** macOS foreground PTY Ctrl-C twice retained
515
+ PNGs but exited1 without `recording.json`; normal-duration capture finalized.
516
+ Linux recording checks do not close this. Introduction and root layer are unknown.
517
+ - **C02, guidance/API mismatch:** swept expired intents permit unlinked leaf writes;
518
+ top-level batch linkage rejects standalone but is discarded attached/HTTP.
519
+ Leaf linkage and veto controls work. This is not an established authorization
520
+ bypass. Correcting those skill promises is separate from the UI changes here.
521
+ - **C03, integration limitation:** terminal progress arrived40/40 on the wire but
522
+ 31/40 through SDK1.32.2 callbacks, with nine unknown tokens. SDK cleanup is a
523
+ hypothesis, not an established PMX cause or a durable completion signal.
524
+ - **C04, guidance discoverability:** the main skill needs a response-shape reference
525
+ with direct-tool/help exceptions, not a universal unwrap. No skill edit is implied.
526
+ - **Native scope:** Codex paint/actions, selected inline/expanded drafts and imports
527
+ passed on released code. Configured discovery still shows24 tools/no help versus
528
+ fresh25. Graph Open in tab was unobserved before permission blocked inspection;
529
+ remaining graph/Excalidraw/keyboard checks are incomplete. These results do not
530
+ verify the changed viewer host in native WKWebView. Raw traces remain external.
531
+
532
+ These are separate acceptance findings, not authorization to broaden product fixes
533
+ or weaken the current source gates. Native activation, PTY finalization and aggregate
534
+ reliability remain explicit gaps alongside the current viewer-host limitations.
535
+
536
+ **Inherited 0.10.0 evidence, not 0.11 acceptance:** the [pinned independent audit](https://github.com/pskoett/personalclaude/commit/42b22f863214be48ef8b90b4050323b060ee558f)'s original
537
+ portal aggregate remains 324 pass / 8 fail. Six failures were harness defects; the
538
+ isolated eight-case pass does not replace the aggregate. Footer Home scrolling and
539
+ the lifecycle warning after reload remain unexplained intermittent failures, as
540
+ does the receipt Undo/unpin CI retry. The audit's supplemental portal, renderer,
541
+ nine-theme, extraction, keyboard, minimap and registry-SDLC checks passed. Native
542
+ Amp passed the pin/read/steer/edit/visible-result/ack sequence and negative controls,
543
+ whole-board context, help-guided creation, AX gating and Bun.WebView lifecycle.
544
+ Native reconnect/subscriptions, Copilot/WebKit, idle wake-up, persistent pumps and
545
+ native Skills activation remain unestablished. Existing skill packaging/guidance
546
+ debt and the low KaTeX advisory GHSA-238p-pmpm-9mq7 are outside this UI change.
547
+ No cancellation behavior changes here: aborted MCP requests may suppress final
548
+ responses even when writes already persisted.
549
+
272
550
  - **One frame host** for `html`, `mcp-app`, `json-render`, `graph`, `webpage`, `mermaid`: lazy
273
- mount near the viewport, a live-frame budget, one paint deadline, one visible fallback with
551
+ mount near the viewport, independent loading, one loading deadline, one visible fallback with
274
552
  retry, full theme tokens passed in. Reuse the shared AX bridge. Replaces the recovery
275
553
  machinery in `ExtAppFrame.tsx`. Mermaid renders inline.
276
- - **Portal-layer ext-app mount** ([plan 009](plan-009-tech-debt-backlog.md), contingency whose
277
- trigger is met): render ext-app iframes outside the world transform for WebKit black tiles.
554
+ - **Native spatial scaling** (maintainer override): restore the common world transform.
555
+ No alternate grid, content enlargement or iframe counter-scaling. The historical native
556
+ WKWebView black-tile issue remains unverified; do not infer compositor health from DOM readiness.
278
557
  - **Wave-0 design pass** ([design gaps](design-gaps-2026-10-08.md) suggested order 4): section
279
558
  labels (#2), the 44 px floating-chrome lane and Updates chip (#3), node header fill/title
280
559
  (#7), then the token sweep (#4 type floor, #5 radii/elevation, #6 Harbor drift, #9 raw
281
560
  `rgba()`), then the per-type pass (#8).
282
561
 
283
562
  **Done when**
284
- - design.md's Wave 4 check: no viewer draws its own background; a board with 20 portals mounts
285
- no more frames than one without; fit-all is readable.
563
+ - Viewers inherit the canvas palette and automatically render as their regions become visible.
564
+ Fit-all keeps the same board geometry and proportional contents. Retention costs memory.
286
565
  - Authored drafts, input state, offscreen replacements and the painted-refresh handoff still
287
566
  pass their existing browser cases.
288
567
  - Each design-gap item matches its drawing at 600, 1024 and 1920 px in all nine themes; the
@@ -294,26 +573,43 @@ Candidates, not automatic scope: `session.start`, composite-input redesign.
294
573
  ## Step 4: 0.12 Wave 5 and relations sketch parity
295
574
 
296
575
  [Vision move 3](../product-vision-2026-09.md#3-the-agents-output-moves-onto-the-board-m), move 0's
297
- make board / inline board, [design.md Wave 5](../design.md#build-plan) and the remaining
298
- Relations/Flows/Uses sketch parity.
299
-
300
- **Before building:** decide how board-qualified relations, provenance and review records move
301
- when a card moves into or out of a board (plan 009 "Wave 5, groups and agent output"), and the
302
- move 3 open questions (decision 3).
303
-
304
- - Work items as `status` nodes; gates, elicitations and mode requests as one `ask` node with an
305
- attributed answer (new node type: follow the "Adding New Node Types" checklist in `CLAUDE.md`).
306
- - Make board / inline board; group drill-in with breadcrumbs and outside endpoint stubs.
307
- - Relations sketch parity: inline edge editor, amber stale-lineage strokes, pair/cycle/affected
308
- badges, Show lineage / Show on canvas.
576
+ board extraction, [design.md Wave 5](../design.md#build-plan) and the remaining
577
+ Relations/Flows/Uses sketch parity. The owner reaffirmed the drawings and revised the behavior
578
+ on 2026-10-27. [Plan 020](plan-020-wave-5-work-planning.md) owns implementation slices,
579
+ code ownership, transport parity, move invariants and acceptance cases.
580
+
581
+ - Ordinary cards and relations let humans and agents plan steps, show progress, compare options
582
+ and illustrate loops. Presentation is deliberate, never an automatic card per work item/event.
583
+ - Agents can draw, write questions and erase whole marks through the same annotation layer
584
+ as humans, without Sessions. These supplement existing tools and ghost feedback; a mark
585
+ does not create an approval gate or interpret a human's response automatically.
586
+ - Nodes/edges own the authored plan. Existing session records own running session work; an
587
+ explicitly linked card presents the same live state. Starting a session does not convert plans.
588
+ - Native-agent approvals stay in the host; existing PMX session controls/protections remain.
589
+ Defer the general `ask` card. Keep the policy, host capability, command registry, fleet and
590
+ current explicit/automatic ghost behavior unchanged.
591
+ - **Move to new board** from multi-selection or a group's **⋯** menu moves cards and leaves a
592
+ portal. No reverse move or inline-board operation in this wave.
593
+ - Open a group within the existing board with breadcrumbs and outside endpoint stubs; navigation
594
+ creates no board. Complete inline edge editing, stale-lineage warnings, pair/cycle/affected
595
+ badges and Show lineage / Show on canvas. Intentional flow loops do not execute themselves.
596
+
597
+ **Before the move implementation:** resolve plan 020's engineering checkpoints for historical
598
+ board-qualified references, old snapshots/Undo, runtime-bound cards and atomic multi-board
599
+ persistence. Any restore restriction or unsupported live move needs explicit review; product
600
+ agreement is not approval to drop data or expand into the journal/concurrent-board roadmap.
309
601
 
310
602
  **Done when**
311
- - design.md's Wave 5 check: agent output uses the same shell and tokens; a group opened as a
312
- board shows its outside stubs.
313
- - Moving a card preserves its outside links and audit identity; copying a claim does not
314
- copy its validation.
315
- - A changed source turns downstream edges amber on the board, not only the card footer.
316
- - The `ask` node renders in a live browser board (DOM check), not only in unit tests.
603
+ - Human and agent can author and revise the illustrated plan without Sessions; no implicit
604
+ work records, approvals or loop execution arise from drawing it.
605
+ - Human and agent annotations share rendering, persistence and erase behavior, with transport
606
+ parity and inspected browser coverage for questions, pointing and reciprocal erasing.
607
+ - Explicit live-task views agree with session state, while unrelated planning cards stay ordinary.
608
+ - Group drill-in retains outside connections without changing board count or ownership.
609
+ - Moving cards preserves identity, outside links, pins and audit meaning through interruption,
610
+ retry and restart; it does not renew validation or lose viewer/attachment content.
611
+ - Dependency/source warnings and relation controls match the drawings and semantic tokens in
612
+ the inspected browser cases. The acceptance manifest and public transport docs cover the flow.
317
613
 
318
614
  ## Step 5: later
319
615
 
@@ -367,7 +663,7 @@ before the hosted second writer. Decision 6 must be settled before accounts and
367
663
  |---|---|---|---|
368
664
  | 1 | MCP hardening before the frame host | Steps 2–3 order | **Decided 2026-10-19:** yes, MCP is the agent half. A narrow WebKit fix can still ship as a patch |
369
665
  | 2 | Version numbers and batch size | Every release | One minor per step, as above |
370
- | 3 | Keep the `policy` singleton, `host-capability`, the command registry; ghost intents opt-in? | Step 4 | Decide before Wave 5 |
666
+ | 3 | Session mechanisms and ghost intents | Step 4 | **Decided 2026-10-27:** keep policy, host capability, named commands and fleet behavior; preserve explicit and automatic ghost feedback. Ordinary planning is independent of Sessions; work presentation is deliberate. See plan 020 |
371
667
  | 4 | Gate a release on native Copilot/WebKit, Windows, the Amp context pill or npm-installed execution? | Steps 2–3 | None gates 0.10; revisit for the hosted version |
372
668
  | 5 | File-confinement default | Step 5.1 | Per-board allow-root list |
373
669
  | 6 | Context vision: personal- or team-first wiki, personal-space owner, who publishes, default wiki entry, assistant defaults | Hosted accounts and scopes | Decide before hosted accounts |