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
package/docs/design.md CHANGED
@@ -21,6 +21,33 @@ contract and the schedule.
21
21
  3. Apply the [Principles](#principles), above all the fixed meaning colours.
22
22
  4. Meet the [Definition of done](#definition-of-done-for-any-design-work) before calling it done.
23
23
 
24
+ ## Plugin logo
25
+
26
+ The plugin uses the existing Focus Field brand mark, matching the canvas favicon:
27
+ blue (`#4BBCFF`) concentric rounded squares on Harbor navy (`#081524`). The source is
28
+ [`PluginLogo.svg`](design/PluginLogo.svg), exported at 512 × 512 to
29
+ [`plugin-logo.png`](design/plugin-logo.png). The plugin build copies that PNG to the
30
+ marketplace-required `assets/preview.png` path referenced by `extensions.com.github.copilot.logo`.
31
+ README screenshots remain unchanged. This packages existing branding; it does not change canvas
32
+ styling or establish which image the Copilot plugin-list row displays.
33
+
34
+ To regenerate the PNG from the repository root with the existing Playwright installation:
35
+
36
+ ```bash
37
+ bun -e '
38
+ import { chromium } from "@playwright/test";
39
+ const browser = await chromium.launch({ headless: false });
40
+ try {
41
+ const page = await browser.newPage({ viewport: { width: 512, height: 512 }, deviceScaleFactor: 1 });
42
+ await page.setContent(`<body style="margin:0">${await Bun.file("docs/design/PluginLogo.svg").text()}</body>`);
43
+ await page.locator("svg").screenshot({ path: "docs/design/plugin-logo.png", omitBackground: true });
44
+ } finally {
45
+ await browser.close();
46
+ }
47
+ '
48
+ bun run build:plugin
49
+ ```
50
+
24
51
  ## Token system
25
52
 
26
53
  Drawn on [`TokenSystem.dc.html`](design/TokenSystem.dc.html); per-theme meaning colours on
@@ -87,8 +114,8 @@ Components reference tokens only. Raw colour values live only in the theme files
87
114
  - Tints are derived — `color-mix(in srgb, var(--c-pin) 12%, transparent)` — so the 22 alpha
88
115
  copies, `--c-warn-alt` and `--c-glow-accent` go.
89
116
  - `--c-thinking` becomes `--c-agent`.
90
- - **Kinds carry no colour.** Type icons use `--c-muted`; the glyph tells the kind, plus the kind
91
- word on zoomed-out tiles (Zoom board). Minimap rects and group-chip kind dots are neutral, and
117
+ - **Kinds carry no colour.** Type icons use `--c-muted`; the glyph tells the kind.
118
+ Minimap rects and group-chip kind dots are neutral, and
92
119
  only meaning colours mark them (pinned, agent at work). `KIND_COLOR`, `--kind-accent` and
93
120
  `--c-purple` go. Nine kind hues cannot all stay clear of ten meaning colours in nine themes,
94
121
  and every hue a kind borrows is one a meaning loses.
@@ -121,6 +148,7 @@ the same change.
121
148
  | [`Themes.dc.html`](design/Themes.dc.html) | Meaning colours across all nine themes, proposed names | 0 |
122
149
  | [`Chrome.dc.html`](design/Chrome.dc.html) | Rail at 690 px, node header (expand and context pin always visible, the rest under ⋯), bounded reference footer, section headings, floating chrome | 0 |
123
150
  | [`EmptyState.dc.html`](design/EmptyState.dc.html) | Empty board: Drop files here, Paste a link, Start a note with collaboration guidance, then a separate agent-first path | 0 |
151
+ | [`GuestName.dc.html`](design/GuestName.dc.html) | Optional Your name button, existing text dialog and named collaborator cursor. Self-reported names only; sharing stays in Amp. | 5, Amp collaboration |
124
152
  | [`Context.dc.html`](design/Context.dc.html) | Nodes in context: every state, the count chip, the command bar | 0–1 |
125
153
  | [`NearPin.dc.html`](design/NearPin.dc.html) | Near a pin: the dotted “near” chip on a pinned node's unpinned neighbours, tethers on hover, the moment of change, combinations, 600 px; ships with the brief carrying neighbours (title + summary, reason “near <pin>”) | 1 |
126
154
  | [`ContextChip.dc.html`](design/ContextChip.dc.html), [`ContextChip600.dc.html`](design/ContextChip600.dc.html) | The one context chip (decided with the maintainer 2026-10-07: placement, near muted, quiet empty state, agent-pin dots, “N in context” at 600 px): top bar, right, replacing the floating ContextPinBar and the ContextBudget meter; at rest for cards, near, boards, agent-only pins, nothing pinned; opened into Cards (full, × unpin, clear all), Near (derived, title + summary, no ×, Pin to promote) and Boards (read state, × unpin). **A pinned board travels as a map** (decided 2026-10-07): folder, README summary, each pinned card's title + summary, links and backlinks; the agent pulls a card or board in full itself, so the chip shows no full / summary / not-sent state. **A cost, not a budget** (decided with the maintainer 2026-10-08): the chip shows what the brief costs as ≈ tokens, with no meter, share or clipped state; when the host reports its agent's token usage the panel names that count too (“Copilot’s whole context holds 42.8k tokens”). The brief's size limit stays internal as a page size. At rest it is the summary, always visible and right-aligned in the top bar at every width; the details open only on click. At ≤ 760 px the summary is “N in context” with no token text, and the bar gives way in this order: session id and counts; Export, Present, zoom and fit fold into ⋯; agent chip to its avatar, Start agent session to its icon; the board name truncates — the dot, board pin, summary and ⋯ never collapse. Harbor and Daylight, 600 px. Supersedes the chip wording on Context, NearPin and BoardPins | 1 (slices 4b, 5b) |
@@ -141,7 +169,7 @@ the same change.
141
169
  | [`Flows.dc.html`](design/Flows.dc.html) | Data lineage with staleness, what a finding rests on, opening a group | 3, 5 |
142
170
  | [`Uses.dc.html`](design/Uses.dc.html) | One relation layer for research, dependencies, decisions and agent flows | 3 |
143
171
  | [`Types1.dc.html`](design/Types1.dc.html)–[`Types3.dc.html`](design/Types3.dc.html) | Every node type, today vs proposed | 0, 4 |
144
- | [`Zoom.dc.html`](design/Zoom.dc.html) | Fit-all readability when frames are unmounted | 4 |
172
+ | [`Zoom.dc.html`](design/Zoom.dc.html) | Native spatial scaling at every zoom, maintainer override 2026-10-25 | 4 |
145
173
  | [`Pane600.dc.html`](design/Pane600.dc.html) | Home and a board at the narrow end, 600 px | all |
146
174
  | [`Vision.dc.html`](design/Vision.dc.html) | How each design area maps to the vision, and the open decisions | — |
147
175
 
@@ -154,6 +182,17 @@ With the beta on, the existing Start agent session action sits below that guidan
154
182
  The existing panel, type and colour tokens stay; actions form one readable column, and
155
183
  short windows scroll the guide rather than cutting off either starting path.
156
184
 
185
+ **Guest name entry (2026-10-31).** A neutral 28px initial button at the end of the top bar
186
+ opens the existing text prompt, with its existing 440px maximum width, padding and actions.
187
+ The caption explains that a name is self-reported and grants no access. Entry is optional;
188
+ Cancel and Escape keep the current name. Save trims the name to the existing 40-character
189
+ presence limit and remembers it in this browser, without changing the tab's presence ID.
190
+ The existing cursor tags identify collaborators. No people panel or sharing controls are
191
+ added. The button remains visible when the bar folds at narrow widths, including Home;
192
+ MCP-hosted workbenches and agent-view tabs do not report human presence or offer this control.
193
+ The drawing refines the minimal dialog option, retaining actual text-prompt geometry rather
194
+ than the generated concept's smaller panel. Amp controls access to the port, not one board.
195
+
157
196
  **Canvas mouse gestures (owner decision, 2026-10-19).** Right-click on empty canvas
158
197
  opens the existing creation menu on release. Holding the right button and moving more
159
198
  than 5 screen pixels pans; releasing after a drag never opens a menu, even when the
@@ -320,8 +359,9 @@ Standalone viewers and HTML/artifact viewers retain their existing load path; no
320
359
  working set (README and pinned cards in full, on every board); there is no separate card
321
360
  pin, which would only send the portal's summary while this board is open. Every other
322
361
  card keeps its card pin.
323
- - **Relations are the edge layer, not node types.** Design work adds no node type;
324
- the vision's own `ask` node (move 3) is separate.
362
+ - **Relations are the edge layer, not node types.** Design work adds no node type.
363
+ The general `ask` node is deferred by the Wave 5 decision below; ordinary planning questions
364
+ and alternatives use existing cards.
325
365
  - **Any size, from a side pane to a full window.** The workbench lives in narrow agent-host
326
366
  panes, the resizable side browser in the Claude desktop app, and full browser windows. Every
327
367
  drawing shows the narrow end (600 px) and a full window before it is built, and the build
@@ -362,23 +402,79 @@ vision's target designs, not screenshots of the shipped workbench. The Wave-3
362
402
  foundation does not implement every interaction pictured in them. It provides
363
403
  per-board vocabularies, semantic inks, separate endpoint slots, authored reasons,
364
404
  evidence/source/use queries, downstream review qualification and view-only
365
- highlights. Parallel-pair count badges, cycle/affected counts, the compact inline
366
- edge editor, amber stale-lineage strokes and the Show lineage / Show on canvas
367
- actions are not implemented. The current editor is a context menu with text
368
- dialogs; source changes appear as review-due card footers, not recoloured edges.
369
- Group drill-in with breadcrumbs and outside endpoint stubs belongs to Wave 5.
405
+ highlights. Wave 5 adds parallel-pair counts, dependency cycle/affected counts,
406
+ the compact inline edge editor and Show lineage / Show on canvas. A cycle count
407
+ means cyclic dependency clusters, not every illustrated route through a graph.
408
+ Source warnings reuse lifecycle qualification and appear as amber glyphs and words
409
+ beside the semantic label, rather than replacing the relation ink with amber.
410
+ Group drill-in adds breadcrumbs and outside endpoint stubs on the same board.
411
+ The boundary is neutral, reserving blue for context pins; hidden viewers stay mounted
412
+ so navigation does not discard drafts. These are scoped deviations from the older
413
+ drawings' blue boundary and amber relation strokes, not new relation meanings.
370
414
  The sketches' suggested-link Accept/Dismiss treatment was superseded by the
371
415
  2026-10-10 direct-edit decision recorded above; it is not a pending acceptance
372
416
  workflow. A demo of existing features must not be used to claim full sketch parity.
373
417
 
418
+ **Wave 5 decision, 2026-10-27.** The owner reaffirmed Uses' Agent flow, Dependencies and
419
+ Decision drawings; Flows remains the reference for group navigation. Humans and agents author ordinary cards and
420
+ relations, showing work deliberately rather than automatically creating a card for every task.
421
+ Illustrated loops describe a plan; they do not execute it. Planning works without Sessions.
422
+ An explicitly linked session-task card presents the existing record's live state; starting a
423
+ session does not convert the plan. Native-agent approvals stay in the host, PMX session controls
424
+ remain separate, and explicit/automatic ghost feedback is unchanged. The general `ask` card
425
+ is deferred.
426
+
427
+ Agents also use the existing pen, text and whole-mark eraser layer for questions and
428
+ emphasis. This adds no new visual controls or mark style. Humans can answer in their
429
+ external agent host's composer; PMX's composer and Sessions are optional.
430
+
431
+ **Work-card authoring, selected 2026-10-27:** [WorkCards](design/WorkCards.dc.html)
432
+ adds option A's in-card editor to the approved Uses work steps. Title, work state,
433
+ detail and optional progress are authored node data. Edit grows the card locally;
434
+ Save/Cancel do not persist that temporary geometry. Drafts, refused saves and pending
435
+ saves survive opening and closing focus mode. Generic phase/tool status cards
436
+ remain unchanged.
437
+
438
+ **Read-only live cards, selected 2026-10-27:** the same WorkCards artboard adds a
439
+ **Show on board** action to task rows, becoming **Show card** when presented. A live
440
+ card shows task state, detail and attribution with a **Read-only** caption, no Edit,
441
+ progress or approval controls. Missing references show **Task unavailable**. Ordinary
442
+ plans are not converted, ending a session preserves cards, and deleting a card does not cancel work.
443
+ Existing selective board copies detach the live reference and task attribution, producing
444
+ an independent authored card. They do not copy tasks or create cross-board live links.
445
+
446
+ **Move to new board** is the agreed label for multi-selection and the group's **⋯** menu:
447
+ move the cards, preserve identity/history/relations and leave a portal. No reverse move or
448
+ inline-board operation in this wave. Opening a group within the current board is navigation
449
+ only, with breadcrumbs and outside endpoints, not a new board. These decisions supersede the
450
+ earlier automatic work-card and make/inline-board wording. Implementation and technical
451
+ checkpoints live in [plan 020](plans/plan-020-wave-5-work-planning.md).
452
+ [WorkCards](design/WorkCards.dc.html) now draws name, preview, refusal and interrupted-reply
453
+ states using the existing modal shell. Preview names pins, README, live owners and the
454
+ Undo/snapshot boundary. Save or cancel local card drafts before moving. A late reply never
455
+ overrides newer navigation; a retry uses the original request ID.
456
+
457
+ **Amp plugin added to Wave 5, 2026-10-27.** The owner added the native Canvas plugin
458
+ described in [this discussion](https://ampcode.com/threads/T-01a17d25-69d9-7693-986a-f3991de6a346).
459
+ It hosts Canvas through Amp's Portal and connects context, steering, creation, sharing and
460
+ collaboration to Amp threads. Jev optionally ranks context, chooses output representation and
461
+ prioritizes review; the integration works without it. Amp retains execution, credentials and
462
+ native permissions. The owner simplified sharing to **use Amp's existing sharing; let the guest
463
+ enter their name**. Add identification through existing canvas presence, not a separate guest
464
+ permission system, share server or custom expiry/revocation. A name is self-reported and grants
465
+ no additional access. Participation follows Amp's existing access model; do not promise anonymous
466
+ or board-only access that it does not provide. General hosted accounts and organization roles
467
+ remain later work. Draw the missing name-entry and identified-guest states here before UI
468
+ implementation; packaging, reliability gates and acceptance are in plan 020, Slice 4.
469
+
374
470
  | Wave | Vision | Function (build) | Design (proposal boards) | Done when |
375
471
  |---|---|---|---|---|
376
472
  | **0. Foundation**: shipped in 0.8.0; remaining foundation gaps ship with plan 019 step 3 | Moves 5, 9, 10 | Bundle Plex; controls inherit the font; type/radius/shadow tokens; meaning tokens per theme; theme renames (`dark` → Harbor, `light` → Daylight, neutral; no aliases); pin style that survives selection and attention; violet header bar replaces amber halos and focus fields | Today / Proposed, Tokens, Themes, Rail and node header, Nodes in context | No control renders in a fallback font; token test passes for all nine themes; reference cases pass at 600, 1024 and 1920 px; demo board regenerated |
377
473
  | **1. Context made visible** — its curation evaluation moved to the end of the plan (2026-10-19) | Part 1 bet, moves 0a, 2, 7 | Surface `context_reads` (already recorded since 0.7.0: who read, which nodes were delivered) per node and per board as read / not read / changed since read, using revisions; who pinned; activity lens and session receipt from presence activity and revisions; board pins (`board_pins`, tiered brief, `canvas_board pin/unpin`) and Home's pinned-boards section | What the agent did with context, Nodes in context, Board pins, Home (Folders) | From the board alone, a person can answer "did the agent read what I pinned, and is its copy current?" The evaluation in `docs/evals/` reads the same data |
378
474
  | **2. Connected memory views** — implemented, verification gates apply | Moves 0, 14 | One board/card projection for Home, links/backlinks, brief discovery and `canvas://graph{?focus,depth}`; saved wiki ID bindings, direct cross-board card edges, previous-board chains, persisted Map positions | Home Map, Home Graph (deviations below) | Map and Graph are generated from the library; orphans visible; works at 600 px and in a full window |
379
475
  | **3. Relations layer** | Moves 0, 1, 13 | Edge `reason` and an open `kind` with a per-board vocabulary; relations carried in the brief's text form; "derived from" with staleness from provenance and recipes; relation queries for the inspector | Relations, Lineage, One relation layer | Hovering a node explains each link; a changed source turns downstream nodes amber; the agent's brief includes relations |
380
- | **4. Frame host and viewers** | Moves 5, 9 | One frame host passing the full theme tokens; json-render defaults to the canvas theme with an opt-out for design experiments; zoomed-out cards for unmounted frames | Node types 1–3, Zoomed out | No viewer draws its own background; 20 portals mount no more frames than none; fit-all is readable |
381
- | **5. Agent output and groups as pages** | Moves 3, 0 | Work items, gates and asks as nodes; make board / inline board; opening a group keeps its outside links | One relation layer (agent flow), Lineage (open a group) | Agent output is styled by the same shell and tokens; a group opened as a board shows its outside stubs |
476
+ | **4. Frame host and viewers** | Moves 5, 9 | One frame host passing the full theme tokens; json-render defaults to the canvas theme with an opt-out for design experiments; native proportional canvas at every zoom | Node types 1–3, Zoom | Viewers use the canvas palette and fill their authored space; approaching a viewer mounts it automatically and retains its state when panning away; no alternate grid or lifetime preview cap |
477
+ | **5. Work planning, group navigation and Amp integration** | Moves 3, 0; native Amp plugin | Deliberate work cards and relations; optional live task views; Move to new board with a portal; group drill-in; Amp Portal/context/steering plugin with optional Jev; native Amp sharing plus guest names; no reverse move | Uses (agent flow, dependencies, decisions), Flows (open a group), Relations; move/plugin states to be drawn | Human and agent can plan without Sessions; loops stay inert; drill-in keeps outside stubs; moves preserve identity/audit; native Amp sharing and guest identification pass; shared shell/tokens and plan 020 checks pass |
382
478
  | **Later: hosted version** | Part 4 (moved from Part 3, 2026-10-19) | Read-only link, comments, second writer, accounts and roles; org → team → personal scopes with configurable categories and per-user pins; built once for the ChatGPT Sites and later Cloudflare editions | HomeTeam is the earlier two-root look ahead; updated scope/category drawings are required before building, retaining explicit publication and locked cards for unreadable boards | Exports and shared views inherit the tokens; a viewer sees the same meaning colours; nothing personal reaches a wider audience without explicit publication |
383
479
 
384
480
  **Folders and portals (decided 2026-10-06).** Home uses folders as the visible hierarchy (where a
@@ -486,6 +582,13 @@ scroll references instead of moving the canvas. No graph data is collapsed or re
486
582
  Reading expanded Markdown, closing it or following a link without input preserves
487
583
  the exact source and revision. Pending real edits still finish before navigation.
488
584
 
585
+ **Expanded-editor refusals (2026-10-31).** The existing attention toast, history
586
+ panel and Updates tab render inside the expanded dialog so they remain in its
587
+ keyboard focus loop, above its content and below blocking dialogs. Their placement,
588
+ dimensions and palette stay unchanged. Opening history dismisses the toast, and
589
+ queued notices stay in history without covering the open panel. Closing history
590
+ returns focus to Updates; reopening it never closes the editor or discards its draft.
591
+
489
592
  **Owner-guide fixes (2026-10-20).** The same reference list follows cards into focus
490
593
  mode, above the provenance strip, capped at 132 screen pixels there. It retains every
491
594
  target without displacing the document. A refused Markdown save keeps the reader and
@@ -630,6 +733,171 @@ curation evaluation after its remaining features. Local categories and lifecycle
630
733
  without a model; Jev-style classification is optional longer-term assistance, not a dependency
631
734
  of Wave 3 or the org/team/personal structure.
632
735
 
736
+ ## 0.11 implementation notes
737
+
738
+ Chrome §9–10 and Types1–3 drive the section-heading, header, typography and viewer
739
+ pass. Fit and focus reserve a 44 px screen-space top lane. JSON viewers inherit the
740
+ named canvas palette; only duplicate root titles disappear. Mermaid renders inline.
741
+ File-header metadata may clip within its own text container, but Reload and AX
742
+ evidence actions and their hover/focus hints stay outside that clip (Types1).
743
+ The maintainer's 2026-10-25 decision supersedes the earlier reading-flow footer:
744
+ **Set as README** lives only in the card's ⋯ menu, becoming **Remove as README**
745
+ for the current README. The agent normally assigns it; this menu is the human override.
746
+ The designated card keeps a quiet, always-visible **README** word in its header,
747
+ including heading-display Markdown. It uses neutral metadata ink, not pin blue or
748
+ selection styling; the title yields before this identifier truncates.
749
+ Ordinary Markdown keeps its visible **Edit** action; heading display has no footer.
750
+ Chrome and Types1 reflect this decision. The menu takes keyboard focus, supports
751
+ arrows and Tab, and restores the opener on activation or Escape.
752
+ **Present** explains saved tours versus group-derived stops on hover and keyboard
753
+ focus, with an accessible description. The narrow ⋯ menu shows the same explanation
754
+ in flow below Present rather than clipping a floating tooltip. Chrome records the
755
+ owner's exact copy; no tour behavior changes. Its saved-tour instruction says
756
+ **ask your agent to define the stops**, not that a visual human tour editor exists.
757
+ During presentation, **Back** and **Next** sit beside **Exit presentation** at
758
+ the top-right, following the existing shared server cursor. The owner's final
759
+ placement decision puts instructions only in each button's hover/focus tooltip:
760
+ Previous stop (← / ↑), Next stop (→ / ↓ / Space), Exit presentation (Esc).
761
+ There is no lower-left instruction panel. Unavailable end buttons remain focusable
762
+ for their descriptions. Node/rectangle fitting reserves the controls' measured
763
+ height; explicit camera targets and deterministic recordings remain unchanged.
764
+ HTML primitives put **Copy JSON** in the card's ⋯ menu, not their inner header;
765
+ **Copy prompt** is removed. JSON comes from the current mounted document, including
766
+ unsaved interactive edits, through the nonce-bound sandbox bridge. Unloaded or
767
+ replaced documents and denied clipboard access report failure, not stale data or
768
+ success. Raw HTML and the custom presentation primitive have no JSON-export menu
769
+ action. Primitive-specific Copy diff, Copy SVG and similar controls stay in place.
770
+ The maintainer's 2026-10-25 correction rejects the experimental CSS zoom, content
771
+ enlargement and alternate overview. The original world matrix scales cards,
772
+ embedded contents, groups and connections proportionally at every zoom. Only title
773
+ text grows, up to 1.2× inside a fixed 22 px header line. Header controls, padding and
774
+ body space stay fixed in world pixels; enlarging the whole header would resize the
775
+ iframe viewport and reflow charts while zooming. Card bodies never counter-scale.
776
+ All cards share the same stacking and input boundary. A separate
777
+ ext-app portal was rejected in review because it covered higher cards, bypassed
778
+ pan gestures, and disappeared during presentation. The common world also owns
779
+ clipping when a dock resizes the canvas. Headed Linux WebKit reproduced CSS zoom
780
+ shrinking the iframe's internal layout and retaining stale dimensions through
781
+ zoom transitions. Restoring the matrix keeps inner widths stable in the same probe.
782
+ Native WKWebView compositor health remains unverified, not established by that result.
783
+ Automatic previews mount on first approach at any scale, then retain their
784
+ documents to preserve arbitrary app state. The rejected lifetime cap starved later
785
+ board regions. Memory now grows with visited viewers. Visible viewers start loading
786
+ automatically without a shared bootstrap queue or per-card clicks. A slow document
787
+ does not hold another card's loading slot.
788
+ Each loading replacement temporarily coexists with its painted document.
789
+
790
+ The demo gives ordinary standalone charts the full authored card height instead
791
+ of imposing a smaller plot-height cap. Compact chart types keep compact cards:
792
+ the 36 px sparkline sits in a 120 px card, four dot-plot rows in 240 px, three bullet
793
+ rows in 260 px, and the slopegraph in 300 px. These are demo authoring choices,
794
+ not enforced sizes on user cards. Explicit chart `height` still caps content,
795
+ independently of `nodeHeight`. Dashboard and form stacks explicitly use stretch
796
+ alignment; the catalog's start-aligned default is unchanged, as are compact action
797
+ buttons. Work-item controls must fit their authored cards without accidental
798
+ overflow or truncated status. Enlarging the demo to 440×300 did not meet that
799
+ requirement and is not acceptance evidence. The card body now scrolls only its
800
+ content when needed; step controls and Edit share one fixed footer row. The full
801
+ status word takes priority over the title. Steering input and send button wrap
802
+ together. Expanded documents keep their sticky footer. The demo returns to a
803
+ 240 px height, with 360 and 440 px widths exercised in both Chromium and WebKit.
804
+ Bodies still shrink proportionally.
805
+
806
+ Static exports use the same embedded chart layout and named palettes, retain
807
+ heading display, and match the live 37 px card header. Fonts and shared palette
808
+ CSS are embedded for offline use. Saved positions, sizes and specs are unchanged;
809
+ live work controls are intentionally absent. Export is a separate acceptance
810
+ surface, not established by live canvas checks. Close slopegraph labels separate
811
+ without moving data endpoints; short same-ink leaders retain their association
812
+ (Types3). An explicitly overcrowded chart still requires adequate authored height.
813
+
814
+ Relation labels keep their curve midpoint when clear. Otherwise the pill and its
815
+ hit area move together to nearby open space, avoiding cards, group headers,
816
+ connection handles and earlier labels. A dashed leader in the relation's ink
817
+ ties it back to the curve. Card positions, curve routing and stacking do not
818
+ change. Font measurements determine pill width. Dense boards can still require
819
+ panning to a displaced label; labels remain hidden below the existing 35% floor.
820
+
821
+ `ViewerHost` owns preview admission, without a second positioning or recovery path.
822
+ `RefreshingViewerFrame` owns document loading, the painted replacement handoff and
823
+ Retry. HTML readiness and the ext-app protocol use that host; JSON additionally
824
+ restores its viewer-local state before promotion. The ext-app adapter no longer
825
+ has a separate paint/recovery ladder. Document preparation failures do not fall
826
+ back to another transport that the embedding probe already rejected.
827
+ Ext-app protocol bootstrap runs once after initialization, or after the loaded
828
+ document's bounded notification-only bootstrap interval. The host waits for
829
+ input/result delivery and paint before declaring it ready; bootstrap errors use
830
+ the same Retry as other loading failures.
831
+ Webpages show cached text until an explicit live-preview request; Mermaid
832
+ and native board thumbnails render inline. Mermaid's inline
833
+ and standalone/export renderers share their palette, serialization and sanitizer.
834
+ Inline rendering uses Mermaid's strict security mode and DOMPurify, including
835
+ sanitized `foreignObject` labels, instead of the old diagram iframe sandbox.
836
+ Mermaid is the exception to the static-import rule: the SPA loads it on the first
837
+ diagram, using hashed chunks from the same server. A six-Markdown-card cold-boot
838
+ probe requested only the entry and its small shared chunk, not Mermaid's 3.46 MB.
839
+ With Bun 1.4.4, headed Chromium 145, 4× CPU throttling and five alternating fresh
840
+ contexts per variant, the baseline median was 1,423.9 ms and the candidate median
841
+ 1,349.1 ms to six populated cards plus two animation frames. Ranges overlap
842
+ (1,277.3–1,484.7 ms versus 1,315.2–1,510.1 ms), so this is not a speedup claim.
843
+ The baseline is 0.10.0 rebuilt with the same compiler; both variants use current
844
+ CSS and local intercepted responses, not a network or native-host benchmark.
845
+ Reproduce with `DISPLAY=:99 node scripts/benchmark-canvas-boot.mjs <disposable-server-url> <baseline-index.js>`.
846
+ The populated-board check uses `scripts/benchmark-populated-canvas.mjs`, the same
847
+ 70-card fixture and 18% camera, headed Chromium 145 at 1440×900, and three cold-cache
848
+ loads plus three warm reloads per build, with other browsers and tests stopped.
849
+ All 33 visible viewers rendered. The final comparison found baseline 0.10.0 at
850
+ 6.71–7.67 s cold and 7.17–7.32 s warm; the candidate took 7.59–8.19 s cold and
851
+ 8.00–8.39 s warm. This remains a loading cost, not an orb-only explanation or a
852
+ speedup. Main-page long tasks totalled 4.43–4.87 s on the candidate versus
853
+ 3.46–4.20 s on baseline. Each chart document contains about 1.49 MB decoded
854
+ (baseline 1.47 MB). Parent Resource Timing alone misses baseline iframe bytes
855
+ and can duplicate candidate navigation bytes; do not compare or sum those totals.
856
+ The script records frame resources separately. Removing the provisional four-document queue produced overlapping
857
+ completion ranges and a later first viewer; the simpler independent loading path
858
+ avoids cross-card blocking, not a claimed performance win. Warm-load aborted
859
+ presence requests are recorded separately from viewer failures; no viewer failed.
860
+ At the default 52% camera there are no visible iframe viewers. The candidate's
861
+ board appeared in 0.67–0.70 s cold and 0.52–0.65 s warm versus baseline's
862
+ 1.08–1.32 s and 1.06–1.36 s. That measures deferred offscreen work, not faster
863
+ viewer rendering. Local document responses were 2–6 ms. Portal-URL checks use
864
+ Amp's local hairpin forwarding inside this orb, so they do not measure external
865
+ portal transport or the user's connection. These are instrumented local readiness
866
+ timings, not native paint latency. Linux WebKit's full fit-all load exceeded this orb's memory limit
867
+ on both baseline and candidate; narrower populated-row checks are separate evidence.
868
+ The self-contained MCP App cannot fetch those chunks: its document includes
869
+ Mermaid and grows from about 1.32 MB to 4.78 MB uncompressed. This is an introduced delivery
870
+ cost, not eliminated debt or measured native performance. Keeping one renderer
871
+ and an offline-capable MCP document is the tradeoff; native boot remains unmeasured.
872
+ The bundle audit found one Mermaid core, one shared renderer and one DOMPurify,
873
+ not an embedded copy of the standalone viewer. The old standalone Mermaid bundle
874
+ already weighed 3,492,157 bytes; moving its renderer inline brings that dependency
875
+ tree into the self-contained MCP host. The dependency graph contains different
876
+ major versions of `marked`, `layout-base` and `cose-base` required by Mermaid's
877
+ renderers; forcing aliases would not be a safe deduplication. Inspect the graph
878
+ with `bun build src/client/mcp-app/index.tsx --target=browser --format=iife --minify --metafile=/tmp/mcp-meta.json --outfile=/tmp/mcp.js`.
879
+ Removing the payload from MCP startup requires a different script-delivery/CSP
880
+ contract or a reduced diagram catalog, rather than deleting a duplicate host.
881
+ Static export checks separately cover all twelve graph variants, compact plots,
882
+ all nine named themes and 600, 1024 and 1920 px widths in headed Chromium.
883
+ The populated 70-card export matches live saved geometry and renders offline
884
+ without HTTP(S) requests; bounded Linux WebKit checks cover the compact chart
885
+ section and dashboard. Linked boards and live MCP apps retain honest unavailable
886
+ placeholders. Arbitrary user HTML can still contain external requests.
887
+
888
+ There is no threshold-triggered grid or list. Zoom's revised drawing keeps the
889
+ same positions, sizes, groups, connections and native content at every scale.
890
+ Fit-all is for orientation; zoom or expand to read details. The earlier overview's
891
+ scrolling and overlay-clearance fixes are superseded by its complete removal.
892
+
893
+ Visual audit: Harbor headings use the drawing's 20 px semibold `#e6eef7` on
894
+ `#081524` (15.69:1). The initial dim capture had the existing relation-focus
895
+ highlight active, which applies 0.35 opacity to unrelated cards; Escape clears
896
+ that view state. A neighboring card outside a 600 px viewport is spatially
897
+ clipped, not internally truncated: focusing it restores the complete title.
898
+ Expanded pin hints remain while their button has keyboard `:focus-visible`, even
899
+ after pointer movement; Tab away dismisses the hint after its fade transition.
900
+
633
901
  ## Definition of done for any design work
634
902
 
635
903
  1. It is drawn in the proposal canvas first, at 600 px and at full-window width.
@@ -0,0 +1,38 @@
1
+ # Eval: does each AGENTS.md section change what agents do?
2
+
3
+ Run 2026-10-26. Rerun it whenever a section is added or questioned; delete sections that change
4
+ nothing, rewrite sections that change behaviour in the wrong direction.
5
+
6
+ ## Method
7
+
8
+ 1. Copy `AGENTS.md` into neutrally named directories: the full file (control) and one copy per
9
+ treatment with a single `##` section removed.
10
+ 2. Start three subagents per variant. Each reads only its copy and writes the work plan it would
11
+ follow for two fixed requests, without implementing:
12
+ - "Wiki aliases inside fenced code blocks get turned into links on Markdown cards. Fix it."
13
+ - "Add a lastSavedAt field to GET /health."
14
+ 3. Score each plan on observable choices: skills named, plan mode, subagents, and the core
15
+ verification steps (failing test first, `pmx_canvas_health`, live check, docs and changelog).
16
+
17
+ Plans, not implementations: this measures what the instructions steer, which is what a section
18
+ can change. Subagents may also see the real repository guidance, which would shrink differences.
19
+
20
+ ## Results (n = 3 per variant)
21
+
22
+ | Variant | Pipeline skills named | Plan mode (request 1 / 2) | Plans using a subagent | Core verification |
23
+ |---|---|---|---|---|
24
+ | Full file | 3/3 | 2/3 · 3/3 | 5/6 | 3/3 |
25
+ | Without Agent Skill Pipeline | 0/3 | 3/3 · 3/3 | 3/6 | 3/3 |
26
+ | Without Workflow Orchestration | 3/3 | 0/3 · 0/3 | 1/6 | 3/3 |
27
+
28
+ `bun run acceptance` appeared in 2/3, 0/3 and 2/3 plans respectively; with n = 3 that is not
29
+ distinguishable from noise.
30
+
31
+ ## Decisions
32
+
33
+ - **Workflow Orchestration: deleted.** Its only effect was plan mode and subagents for a one-file
34
+ fix and a one-field change, which Amp's own guidance and Core Principles 1 and 4 already govern.
35
+ Verification was identical without it.
36
+ - **Agent Skill Pipeline: kept, corrected.** Removing it drops the owner's pipeline skills from
37
+ every plan, so it is load-bearing. It wrongly said the skills exist only in gitignored local
38
+ trees; they are global user skills, available in every orb.