pmx-canvas 0.8.2 → 0.9.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.
- package/.github/extensions/pmx-canvas/runtime.json +1 -1
- package/.github/extensions/pmx-canvas/tools.json +601 -22
- package/CHANGELOG.md +49 -0
- package/Readme.md +131 -532
- package/dist/canvas/global.css +2724 -476
- package/dist/canvas/index.js +168 -107
- package/dist/canvas/mcp-app.html +2899 -596
- package/dist/json-render/index.js +20 -20
- package/dist/types/client/canvas/BarHint.d.ts +12 -2
- package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
- package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
- package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
- package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
- package/dist/types/client/canvas/CommandBar.d.ts +3 -4
- package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
- package/dist/types/client/canvas/ContextChip.d.ts +3 -0
- package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
- package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
- package/dist/types/client/canvas/EmptyState.d.ts +4 -4
- package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
- package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
- package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
- package/dist/types/client/canvas/HomeView.d.ts +9 -7
- package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
- package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
- package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
- package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
- package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
- package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
- package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
- package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
- package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
- package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
- package/dist/types/client/canvas/canvas-area.d.ts +1 -1
- package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
- package/dist/types/client/canvas/graph-model.d.ts +37 -0
- package/dist/types/client/canvas/memory-layout.d.ts +23 -0
- package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
- package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
- package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
- package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
- package/dist/types/client/icons.d.ts +0 -10
- package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
- package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
- package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
- package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
- package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
- package/dist/types/client/state/boards-store.d.ts +81 -9
- package/dist/types/client/state/canvas-store.d.ts +14 -1
- package/dist/types/client/state/context-chip-store.d.ts +22 -0
- package/dist/types/client/state/context-status-store.d.ts +35 -0
- package/dist/types/client/state/intent-bridge.d.ts +11 -8
- package/dist/types/client/state/knowledge-store.d.ts +22 -0
- package/dist/types/client/state/near-pin-store.d.ts +44 -1
- package/dist/types/client/state/presence-store.d.ts +4 -4
- package/dist/types/client/state/presentation.d.ts +28 -0
- package/dist/types/client/state/relation-store.d.ts +10 -0
- package/dist/types/client/state/session-store.d.ts +41 -2
- package/dist/types/client/state/workspace-settings.d.ts +7 -0
- package/dist/types/client/types.d.ts +13 -1
- package/dist/types/client/utils/keyboard.d.ts +2 -0
- package/dist/types/client/utils/time-ago.d.ts +4 -0
- package/dist/types/mcp/context-uri-template.d.ts +3 -1
- package/dist/types/server/agent-presence.d.ts +10 -3
- package/dist/types/server/ax-context.d.ts +1 -1
- package/dist/types/server/canvas-db.d.ts +30 -7
- package/dist/types/server/canvas-operations.d.ts +24 -2
- package/dist/types/server/canvas-provenance.d.ts +22 -2
- package/dist/types/server/canvas-serialization.d.ts +2 -0
- package/dist/types/server/canvas-state.d.ts +93 -15
- package/dist/types/server/canvas-validation.d.ts +1 -1
- package/dist/types/server/context-brief.d.ts +94 -6
- package/dist/types/server/context-reads.d.ts +33 -7
- package/dist/types/server/edit-summary.d.ts +20 -0
- package/dist/types/server/index.d.ts +71 -10
- package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
- package/dist/types/server/lifecycle-status.d.ts +10 -0
- package/dist/types/server/memory-graph.d.ts +9 -0
- package/dist/types/server/mutation-history.d.ts +2 -0
- package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
- package/dist/types/server/operations/ops/boards.d.ts +2 -1
- package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
- package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
- package/dist/types/server/operations/ops/nodes.d.ts +5 -0
- package/dist/types/server/operations/ops/query.d.ts +23 -0
- package/dist/types/server/operations/registry.d.ts +1 -0
- package/dist/types/server/placement.d.ts +7 -0
- package/dist/types/server/scope-fence.d.ts +2 -1
- package/dist/types/server/spatial-analysis.d.ts +6 -3
- package/dist/types/server/tour-control.d.ts +32 -0
- package/dist/types/server/wiki-links.d.ts +14 -0
- package/dist/types/server/workbench-auth.d.ts +2 -0
- package/dist/types/shared/agent-context.d.ts +2 -0
- package/dist/types/shared/agent-presence.d.ts +15 -12
- package/dist/types/shared/auto-arrange.d.ts +1 -0
- package/dist/types/shared/boards.d.ts +4 -4
- package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
- package/dist/types/shared/knowledge-presets.d.ts +6 -0
- package/dist/types/shared/lifecycle-status.d.ts +24 -0
- package/dist/types/shared/memory-graph.d.ts +53 -0
- package/dist/types/shared/relations.d.ts +68 -0
- package/dist/types/shared/semantic-attention.d.ts +2 -0
- package/dist/types/shared/tour.d.ts +38 -0
- package/dist/types/shared/workspace-settings.d.ts +11 -0
- package/docs/RELEASE.md +21 -3
- package/docs/adr-001-bun-only-runtime.md +7 -1
- package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
- package/docs/api-reference.md +109 -0
- package/docs/ax-host-adapter-contract.md +1 -1
- package/docs/ax-state-contract.md +5 -4
- package/docs/cli.md +153 -15
- package/docs/demos/pmx-canvas-demo.mp4 +0 -0
- package/docs/design/AgentContext.dc.html +3 -3
- package/docs/design/BoardPins.dc.html +37 -22
- package/docs/design/Categories.dc.html +208 -0
- package/docs/design/CategoryEditor.dc.html +33 -0
- package/docs/design/Chrome.dc.html +52 -9
- package/docs/design/ContextChip.dc.html +224 -0
- package/docs/design/ContextChip600.dc.html +136 -0
- package/docs/design/EmptyState.dc.html +45 -0
- package/docs/design/Flows.dc.html +23 -1
- package/docs/design/HeaderMarks.dc.html +183 -0
- package/docs/design/Home.dc.html +19 -1
- package/docs/design/HomeGraph.dc.html +86 -202
- package/docs/design/HomeMap.dc.html +23 -1
- package/docs/design/HomeTeam.dc.html +32 -14
- package/docs/design/Lifecycle.dc.html +22 -0
- package/docs/design/Lifecycle600.dc.html +18 -0
- package/docs/design/LifecycleVariants.dc.html +157 -0
- package/docs/design/LinkAuthorship.dc.html +139 -0
- package/docs/design/LinksChanged.dc.html +203 -0
- package/docs/design/LinksOptions.dc.html +137 -0
- package/docs/design/LinksOptions600.dc.html +134 -0
- package/docs/design/NearPin.dc.html +9 -10
- package/docs/design/Pane600.dc.html +4 -3
- package/docs/design/Relations.dc.html +3 -2
- package/docs/design/Restore.dc.html +152 -0
- package/docs/design/SeeChange.dc.html +267 -0
- package/docs/design/Uses.dc.html +12 -6
- package/docs/design/canvas.json +146 -19
- package/docs/design.md +449 -16
- package/docs/environment.md +0 -1
- package/docs/evals/curation-effect.md +128 -0
- package/docs/http-api.md +459 -37
- package/docs/mcp.md +146 -18
- package/docs/node-types.md +58 -3
- package/docs/plans/design-gaps-2026-10-08.md +53 -0
- package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
- package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
- package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
- package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
- package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
- package/docs/product-context-vision-2026-09.md +17 -1
- package/docs/product-vision-2026-09.md +1082 -43
- package/docs/product-vision-review-2026-09.md +13 -1
- package/docs/screenshots/workbench-live-dark.png +0 -0
- package/docs/screenshots/workbench-live-light.png +0 -0
- package/docs/sdk.md +62 -2
- package/package.json +1 -1
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/plugin.json +1 -1
- package/plugins/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/tools.json +601 -22
- package/skills/pmx-canvas/SKILL.md +216 -42
- package/skills/pmx-canvas/references/full-reference.md +120 -21
- package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
- package/skills/pmx-canvas/references/importing-context.md +132 -0
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
- package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
- package/skills/pmx-canvas-testing/SKILL.md +20 -0
- package/src/cli/agent.ts +2 -0
- package/src/cli/commands/ax.ts +12 -0
- package/src/cli/commands/boards.ts +87 -11
- package/src/cli/commands/edges.ts +28 -0
- package/src/cli/commands/groups.ts +7 -0
- package/src/cli/commands/nodes.ts +1 -0
- package/src/cli/commands/query.ts +34 -2
- package/src/cli/commands/record.ts +199 -48
- package/src/cli/index.ts +6 -1
- package/src/client/App.tsx +177 -70
- package/src/client/canvas/AttentionHistory.tsx +0 -2
- package/src/client/canvas/BarHint.tsx +40 -2
- package/src/client/canvas/BoardCopyDialog.tsx +1 -1
- package/src/client/canvas/BoardFolderDialog.tsx +7 -7
- package/src/client/canvas/BoardLinkDialog.tsx +138 -33
- package/src/client/canvas/BoardPinButton.tsx +33 -0
- package/src/client/canvas/BoardSwitcher.tsx +26 -40
- package/src/client/canvas/CanvasNode.tsx +360 -237
- package/src/client/canvas/CanvasViewport.tsx +45 -7
- package/src/client/canvas/CommandBar.tsx +29 -23
- package/src/client/canvas/CommandPalette.tsx +5 -12
- package/src/client/canvas/ConnectionBanner.tsx +3 -3
- package/src/client/canvas/ContextChip.tsx +296 -0
- package/src/client/canvas/ContextMenu.tsx +63 -5
- package/src/client/canvas/CrossBoardReferences.tsx +60 -0
- package/src/client/canvas/EdgeLayer.tsx +339 -76
- package/src/client/canvas/EmptyState.tsx +33 -18
- package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
- package/src/client/canvas/ExternalWriters.tsx +57 -42
- package/src/client/canvas/HomeGraphView.tsx +942 -0
- package/src/client/canvas/HomeMapView.tsx +641 -0
- package/src/client/canvas/HomeReviewView.tsx +167 -0
- package/src/client/canvas/HomeView.tsx +687 -160
- package/src/client/canvas/IntentLayer.tsx +19 -12
- package/src/client/canvas/KnowledgeDialog.tsx +488 -0
- package/src/client/canvas/LifecycleChrome.tsx +133 -0
- package/src/client/canvas/LifecycleFields.tsx +91 -0
- package/src/client/canvas/LifecyclePanel.tsx +533 -0
- package/src/client/canvas/MemoryInspector.tsx +104 -0
- package/src/client/canvas/Minimap.tsx +3 -3
- package/src/client/canvas/NearPinLayer.tsx +187 -0
- package/src/client/canvas/NodeContextMark.tsx +175 -97
- package/src/client/canvas/Presentation.tsx +23 -57
- package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
- package/src/client/canvas/RelationsPanel.tsx +82 -0
- package/src/client/canvas/SelectionBar.tsx +3 -6
- package/src/client/canvas/SessionPanel.tsx +90 -50
- package/src/client/canvas/SessionReceipt.tsx +311 -39
- package/src/client/canvas/ShortcutOverlay.tsx +1 -1
- package/src/client/canvas/SnapshotPanel.tsx +27 -36
- package/src/client/canvas/ToolRail.tsx +367 -192
- package/src/client/canvas/TopBar.tsx +354 -124
- package/src/client/canvas/canvas-area.ts +10 -3
- package/src/client/canvas/graph-geometry.ts +195 -0
- package/src/client/canvas/graph-model.ts +254 -0
- package/src/client/canvas/memory-layout.ts +106 -0
- package/src/client/canvas/use-chrome-height.ts +20 -0
- package/src/client/canvas/use-focus-trap.ts +31 -5
- package/src/client/canvas/use-memory-graph.ts +58 -0
- package/src/client/canvas/use-node-drag.ts +2 -1
- package/src/client/canvas/use-pan-zoom.ts +64 -7
- package/src/client/icons.tsx +0 -63
- package/src/client/mcp-app/style.css +0 -6
- package/src/client/nodes/AxStepControls.tsx +74 -50
- package/src/client/nodes/BoardNode.tsx +5 -1
- package/src/client/nodes/ContextNode.tsx +18 -11
- package/src/client/nodes/ExtAppFrame.tsx +0 -1
- package/src/client/nodes/FileNode.tsx +46 -42
- package/src/client/nodes/HtmlNode.tsx +32 -0
- package/src/client/nodes/ImageNode.tsx +1 -1
- package/src/client/nodes/InlineFormatBar.tsx +6 -9
- package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
- package/src/client/nodes/MarkdownNode.tsx +377 -109
- package/src/client/nodes/McpAppNode.tsx +50 -20
- package/src/client/nodes/MdFormatBar.tsx +21 -18
- package/src/client/nodes/PromptNode.tsx +1 -1
- package/src/client/nodes/ResponseNode.tsx +1 -1
- package/src/client/nodes/viewer-runtime-state.ts +54 -22
- package/src/client/state/attention-bridge.ts +64 -15
- package/src/client/state/boards-store.ts +193 -39
- package/src/client/state/canvas-store.ts +99 -12
- package/src/client/state/context-chip-store.ts +70 -0
- package/src/client/state/context-status-store.ts +53 -0
- package/src/client/state/intent-bridge.ts +51 -30
- package/src/client/state/knowledge-store.ts +43 -0
- package/src/client/state/near-pin-store.ts +115 -6
- package/src/client/state/presence-store.ts +7 -10
- package/src/client/state/presentation.ts +91 -0
- package/src/client/state/relation-store.ts +81 -0
- package/src/client/state/session-store.ts +144 -18
- package/src/client/state/sse-bridge.ts +206 -29
- package/src/client/state/workspace-settings.ts +11 -0
- package/src/client/theme/global.css +2724 -476
- package/src/client/types.ts +12 -0
- package/src/client/utils/keyboard.ts +10 -0
- package/src/client/utils/time-ago.ts +14 -0
- package/src/json-render/renderer/index.tsx +31 -0
- package/src/mcp/canvas-app.ts +12 -2
- package/src/mcp/context-uri-template.ts +7 -4
- package/src/mcp/server.ts +63 -41
- package/src/mcp/workbench-app.ts +39 -6
- package/src/server/agent-presence.ts +128 -28
- package/src/server/ax-context.ts +27 -13
- package/src/server/board-export.ts +12 -1
- package/src/server/canvas-db.ts +331 -42
- package/src/server/canvas-operations.ts +195 -83
- package/src/server/canvas-provenance.ts +53 -22
- package/src/server/canvas-serialization.ts +2 -0
- package/src/server/canvas-state.ts +950 -122
- package/src/server/canvas-validation.ts +9 -2
- package/src/server/context-brief.ts +345 -38
- package/src/server/context-reads.ts +178 -30
- package/src/server/demo-state.json +355 -24
- package/src/server/edit-summary.ts +74 -0
- package/src/server/html-surface.ts +8 -1
- package/src/server/index.ts +181 -11
- package/src/server/knowledge-lifecycle.ts +304 -0
- package/src/server/lifecycle-status.ts +232 -0
- package/src/server/memory-graph.ts +166 -0
- package/src/server/mutation-history.ts +18 -6
- package/src/server/operations/composites.ts +32 -11
- package/src/server/operations/http.ts +7 -2
- package/src/server/operations/index.ts +4 -0
- package/src/server/operations/mcp.ts +26 -1
- package/src/server/operations/ops/ax-presence.ts +1 -1
- package/src/server/operations/ops/ax-read.ts +57 -6
- package/src/server/operations/ops/ax-timeline.ts +28 -2
- package/src/server/operations/ops/backup.ts +5 -3
- package/src/server/operations/ops/batch.ts +35 -4
- package/src/server/operations/ops/boards.ts +188 -47
- package/src/server/operations/ops/canvas-wire.ts +31 -1
- package/src/server/operations/ops/edges.ts +36 -2
- package/src/server/operations/ops/groups.ts +6 -1
- package/src/server/operations/ops/lifecycle.ts +262 -0
- package/src/server/operations/ops/memory-graph.ts +45 -0
- package/src/server/operations/ops/nodes.ts +107 -24
- package/src/server/operations/ops/query.ts +281 -68
- package/src/server/operations/ops/snapshots.ts +73 -1
- package/src/server/operations/ops/validate.ts +5 -1
- package/src/server/operations/ops/viewport.ts +97 -3
- package/src/server/operations/registry.ts +74 -25
- package/src/server/placement.ts +29 -0
- package/src/server/scope-fence.ts +78 -6
- package/src/server/server.ts +115 -16
- package/src/server/spatial-analysis.ts +48 -23
- package/src/server/tour-control.ts +82 -0
- package/src/server/wiki-links.ts +137 -0
- package/src/server/workbench-auth.ts +11 -0
- package/src/shared/agent-context.ts +3 -0
- package/src/shared/agent-presence.ts +15 -15
- package/src/shared/auto-arrange.ts +2 -0
- package/src/shared/boards.ts +4 -4
- package/src/shared/knowledge-lifecycle.ts +22 -0
- package/src/shared/knowledge-presets.ts +80 -0
- package/src/shared/lifecycle-status.ts +26 -0
- package/src/shared/memory-graph.ts +74 -0
- package/src/shared/relations.ts +98 -0
- package/src/shared/semantic-attention.ts +15 -1
- package/src/shared/tour.ts +23 -5
- package/src/shared/workspace-settings.ts +13 -0
- package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
- package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
- package/dist/types/client/canvas/kind-colors.d.ts +0 -3
- package/dist/types/server/agent-context.d.ts +0 -22
- package/src/client/canvas/ContextPinBar.tsx +0 -25
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
# Wave 2: connected memory
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented and stabilized with the Wave 3 foundation. Not released.
|
|
4
|
+
|
|
5
|
+
Build on the local wave-1 stabilization batch. SQLite remains authoritative; Home is a view,
|
|
6
|
+
not a board, and folders are independent of the many-to-many link graph. The exported
|
|
7
|
+
HomeMap/HomeGraph artboards supply the visual model; newer neutral-folder decisions override
|
|
8
|
+
their category hues, synthetic Home and derived levels.
|
|
9
|
+
|
|
10
|
+
## Contract
|
|
11
|
+
|
|
12
|
+
- Resolve Markdown `[[Board]]`, `[[Board#Card]]` and optional `|label` aliases on save.
|
|
13
|
+
Store durable, board-qualified targets separately from the authored text. Preserve unchanged
|
|
14
|
+
bindings across renames, never guess an ambiguous title, and keep deleted targets visibly broken.
|
|
15
|
+
Code spans and fenced code do not create links. Unresolved board links offer explicit creation.
|
|
16
|
+
- Extend native edges with an optional target board ID. The source remains on the active board;
|
|
17
|
+
this does not permit writes on another board. Qualify both ends in the graph, including when
|
|
18
|
+
two boards contain the same card ID. Preserve edges in snapshots, undo and persistence.
|
|
19
|
+
- Project boards, cards, membership, portals, wiki links, native edges and previous-board chains
|
|
20
|
+
once on the server. Home Graph, Map, board backlinks and agent graph reads consume it.
|
|
21
|
+
Summaries count as seen, not full reads. Missing targets are explicit and unlinked boards remain visible.
|
|
22
|
+
- Home Map groups boards in neutral folder regions; human-dragged positions persist in SQLite.
|
|
23
|
+
Map and Graph use the existing workspace board pins. Graph supports focus and bounded depth,
|
|
24
|
+
search/type/context filters and direct board/card navigation without switching boards on read.
|
|
25
|
+
- Existing qualified library search stays. The brief discovers linked boards from the same
|
|
26
|
+
projection; wave 3 adds richer kinds, reasons, downstream review and lifecycle.
|
|
27
|
+
|
|
28
|
+
## Build and verify
|
|
29
|
+
|
|
30
|
+
1. Durable links/edge persistence and one projection across HTTP, SDK, MCP and CLI.
|
|
31
|
+
Verify renamed, duplicate-ID, ambiguous, missing, inactive-board and restart cases.
|
|
32
|
+
2. Home Map/Graph and wiki navigation to the drawings, with responsive controls.
|
|
33
|
+
Verify human gestures and agent exploration against the same disposable library.
|
|
34
|
+
3. Update public contracts and bundled skills; run unit/client/type/lint/build/browser gates,
|
|
35
|
+
inspect rendered states at 600, 1024 and 1920 pixels and in all nine themes, then review.
|
|
36
|
+
|
|
37
|
+
No release or deployment is part of this work. Stabilization changes and unrelated board artifacts
|
|
38
|
+
must be preserved; wave 3 follows this checkpoint as a separate batch.
|
|
39
|
+
|
|
40
|
+
## Original Wave 2 checkpoint (before the Wave 3 foundation)
|
|
41
|
+
|
|
42
|
+
- `bun run test`: 1,418 passed; `bun run test:client`: 276 passed.
|
|
43
|
+
- `DISPLAY=:88 bash scripts/run-playwright.sh --headed`: 248 passed on the final bundle,
|
|
44
|
+
including the 600, 1024 and 1920 px reference projects and all-nine-theme coverage.
|
|
45
|
+
- Build, typecheck and `git diff --check` pass. Lint has no errors; 64 warnings and 12 infos remain.
|
|
46
|
+
- Live human gestures exercised create/edit/Save, wiki creation and navigation, remote-card
|
|
47
|
+
connection, delete/Undo/Redo, Map drag/reload, Graph discovery/pin/unpin and receipt See change/Undo.
|
|
48
|
+
Source and rich-editor drafts and selections survive agent relation changes and missing/restored
|
|
49
|
+
targets; delayed file-backed previews cannot overwrite a subsequently saved draft.
|
|
50
|
+
- Real CLI graph and stdio MCP exploration match the same library without moving the human's
|
|
51
|
+
active board. Read accounting preserves captured revisions and never acknowledges omitted links.
|
|
52
|
+
- Adversarial review findings were reproduced and fixed; Oracle's final focused follow-up found
|
|
53
|
+
no blocker. Inspected live screenshots are in `.amp/in/artifacts/w2-final-human/`.
|
|
54
|
+
|
|
55
|
+
This checks the orb's real local stack, not a released package or a native host installation.
|
|
56
|
+
|
|
57
|
+
## Combined stabilization
|
|
58
|
+
|
|
59
|
+
The later foundation exposed reconnect attribution, native save-lineage, board ownership,
|
|
60
|
+
inactive-board scope and catalog replay races. Their fixes are implemented and documented
|
|
61
|
+
in the public contracts. Oracle's final focused follow-up found no remaining race blocker.
|
|
62
|
+
The final unit/client gates pass (1,437/302), and the clean full headed run passes all 266
|
|
63
|
+
cases, including the 600, 1024 and 1920 px reference projects and all-nine-theme coverage.
|
|
64
|
+
Real browser restore/late-ACK and catalog replay probes also pass. The previous full run
|
|
65
|
+
had 264 passes and two failures: its race-test interceptors did not match the new
|
|
66
|
+
board-qualified state URL. Correcting that harness, without a product change, made both
|
|
67
|
+
isolated cases and the subsequent full run pass. Earlier failure evidence is retained.
|
|
68
|
+
`bun run test:coverage` passes with 64.71% lines and 72.10% functions, above the CI floors;
|
|
69
|
+
the fresh-workspace CLI E2E flow passes with headed browser verification. Build, typecheck,
|
|
70
|
+
bundled-skill checks and diff-check pass. Lint has zero errors (64 warnings and 12 infos);
|
|
71
|
+
`CLAUDE.md` and `AGENTS.md` match.
|
|
72
|
+
Live human gestures cover wiki creation/navigation, Map drag/reload, Graph context/details,
|
|
73
|
+
narrow scrolling, daemon reconnect and restored unsaved drafts. Real CLI and stdio MCP
|
|
74
|
+
exploration preserve the active board; lifecycle retain/retire/restore preserves content,
|
|
75
|
+
validation and attributed audit history. Inspected screenshots are in
|
|
76
|
+
`.amp/in/artifacts/w3-final-human/`. Native Copilot/WebKit, native Windows and registry-installed
|
|
77
|
+
execution remain separate unverified surfaces; absent skill mirrors were skipped, not validated.
|
|
78
|
+
|
|
79
|
+
## Remaining Wave 3 stabilization (2026-10-11)
|
|
80
|
+
|
|
81
|
+
The remaining relationship and lifecycle work starts from the published foundation, with
|
|
82
|
+
`fb3554bddd0565d94a8747c79b30866f4d1c434b` verified as an ancestor. The owner requested
|
|
83
|
+
adversarial self-review instead of Oracle. This batch is unreleased at 0.8.2. Commit and push
|
|
84
|
+
are authorized after stabilization; release, tagging, publishing and deployment are not.
|
|
85
|
+
|
|
86
|
+
Reproduced findings and fixes include lost authored provenance, lifecycle-only changes omitted
|
|
87
|
+
from incremental briefs, stale review drafts acquiring new source preconditions, duplicate
|
|
88
|
+
source entries masking an unavailable observation, and a Markdown due footer below the visible
|
|
89
|
+
card. Live browser inspection also found a scrolling relation legend and Fit placing cards under
|
|
90
|
+
the new controls. Each has a failing reproduction and a passing focused check. A full preliminary
|
|
91
|
+
headed run passed 267 cases and failed the packed-consumer selector: its whole-card text matched
|
|
92
|
+
the new source warning as well as the target card. Targeting the card title fixed that harness.
|
|
93
|
+
|
|
94
|
+
Owner portal feedback caught the preset selector resetting to “Vocabulary…”. The final legend
|
|
95
|
+
keeps all four preset names across reload, reports “Custom vocabulary” after a kind edit, and
|
|
96
|
+
uses the `Uses` drawing's 24 px selector, rounded count chips and one highlight per vocabulary.
|
|
97
|
+
The reset reproduction failed; the corrected headed relation case passes.
|
|
98
|
+
|
|
99
|
+
The latest serial gates pass 1,443 unit and 302 client tests, typecheck, build and lint (zero
|
|
100
|
+
errors, 64 warnings, 12 infos). Unit coverage is 64.68% lines and 72.16% functions, above the CI
|
|
101
|
+
floors. The final full headed suite passes 268 cases; fresh-workspace CLI E2E passes with
|
|
102
|
+
headed browser verification. Bundled-skill checks pass and the guidance twins match. Agent-skill
|
|
103
|
+
mirrors are absent, so that check skipped rather than validated. The post-debt serial run is
|
|
104
|
+
`/tmp/pmx-w3-post-debt.gM8WHG`; its CLI workspace is `/tmp/pmx-canvas-e2e.IyKnoE`.
|
|
105
|
+
|
|
106
|
+
Published foundation CI had failures despite the preceding local passes. Review of
|
|
107
|
+
[that run](https://github.com/pskoett/pmx-canvas/actions/runs/38153215292) found Windows subprocess
|
|
108
|
+
imports using URL pathnames instead of filesystem paths, plus test-order contamination: an MCP
|
|
109
|
+
case replaced the shared intent emitter and then disabled it. The local ordered reproduction
|
|
110
|
+
failed in `/tmp/pmx-w3-ci-order-red.FpSrwd`; the same three cases pass in
|
|
111
|
+
`/tmp/pmx-w3-ci-order-green.QSzLU1` after reading the public workbench event stream instead.
|
|
112
|
+
The subprocess imports now use `fileURLToPath`. No assertions were removed and no retries added.
|
|
113
|
+
These are test-harness fixes, not a native Windows UI verification claim.
|
|
114
|
+
|
|
115
|
+
Live human-style browser gestures cover source editing/Save, relation reason and vocabulary
|
|
116
|
+
editing, preset adoption, category editing, folder inheritance, evidence review, retirement/Undo,
|
|
117
|
+
and explicit recipe handoff. Real stdio MCP and CLI checks cover stale-source rejection,
|
|
118
|
+
qualified briefs and search, retired pinned-resource exclusion, restore preserving validation,
|
|
119
|
+
and relation round-tripping. A second real MCP client reads the human's pinned source and recipe
|
|
120
|
+
steering after restart. Recipe requests do not execute tools or renew validation.
|
|
121
|
+
|
|
122
|
+
Inspected captures in `.amp/in/artifacts/w3-acceptance/` cover 600/1024/1920 px and all nine themes.
|
|
123
|
+
Failed-run evidence remains in separate `/tmp/pmx-w3-*` directories, including `draft-repro`,
|
|
124
|
+
`duplicate-red`, `legend-red`, `footer-red`, `fit-red`, `preset-red` and the preliminary full run.
|
|
125
|
+
The [maintainability review](plan-009-tech-debt-backlog.md#wave-3-maintainability-review-2026-10-11)
|
|
126
|
+
removed repeated request-local qualification/layout reads. Its measured scaling costs and future
|
|
127
|
+
frame-host, move/audit, journal and runtime boundaries are now checkpoints in the vision.
|
|
128
|
+
These are Chromium/source and local-packed-consumer checks, not native Copilot/WebKit, native
|
|
129
|
+
Windows or registry-install verification. No tag, publish, deploy or version bump is authorized.
|
|
130
|
+
After push, the owner still needs to E2E-test the complete change since 0.8.2 from the updated
|
|
131
|
+
checkout. Running the unchanged registry package at 0.8.2 does not exercise these changes.
|
|
132
|
+
|
|
133
|
+
## Home acceptance integration (2026-10-12)
|
|
134
|
+
|
|
135
|
+
The combined batch starts from `0fbc593ac99a7ba34ed6cc59ccc0c49e14ccc606`, with the requested
|
|
136
|
+
foundation verified as an ancestor. The frozen parent source patch was integrated exactly
|
|
137
|
+
(SHA256 `2046aaa21b8e4f326e7da5c99dd7d9042f8ff7802bd871d9dc432b5cc74428f5`), preserving the
|
|
138
|
+
separately owned HomeMemory/layout/live-update changes. Generated bundles, declarations and
|
|
139
|
+
tool catalogs are rebuilt here. The unrelated SDLC artifact is not part of delivery.
|
|
140
|
+
|
|
141
|
+
Graph now uses live view-local forces, folder outlines and board/card clusters, with counted
|
|
142
|
+
filters, focus/depth, display controls and individual connection reasons. Map preserves saved
|
|
143
|
+
board positions inside collapsible folder regions. Agent edits refresh the projection without
|
|
144
|
+
resetting the human's camera, selection or dragged particles. Board-only controls and native
|
|
145
|
+
paste are unavailable while browsing memory. The parent acceptance fixes add navigation-only
|
|
146
|
+
folder trees, actionable review summaries, safe unused-category deletion, compact settings,
|
|
147
|
+
one-note reviews and ring/hover/legend/Fit corrections. Read, content, validation and relevance
|
|
148
|
+
remain separate clocks.
|
|
149
|
+
|
|
150
|
+
Adversarial self-review and live transport checks found two additional bugs: the advertised
|
|
151
|
+
MCP board-portal type was rejected by a duplicated enum, and the library context chip omitted
|
|
152
|
+
the pinned active board. Both have red/green regressions, retained in
|
|
153
|
+
`/tmp/pmx-combined-portal-{red.89FSEL,green.OSHgsr}` and
|
|
154
|
+
`/tmp/pmx-combined-chip-{red.jZHY9I,green.805Bqn}`. The earlier library/paste regressions are
|
|
155
|
+
retained in `/tmp/pmx-home-live-red.hjJURq` and `/tmp/pmx-home-paste-red.2qNf8V`.
|
|
156
|
+
The [integration debt review](plan-009-tech-debt-backlog.md#home-acceptance-integration-review-2026-10-12)
|
|
157
|
+
and vision record explicit per-tab editor ownership and measured scaling as future checkpoints.
|
|
158
|
+
|
|
159
|
+
Live human gestures on disposable data include Graph drag, force controls and pinning, Map
|
|
160
|
+
collapse, Open board, source editing/Save, review confirmation and Not now, and category
|
|
161
|
+
creation/deletion. Real stdio MCP reads the human's board pin, edits a card, and creates portal
|
|
162
|
+
and wiki connections while Graph stays open with the same camera/selection. The observed DOM
|
|
163
|
+
contains both new link kinds and the updated title (`/tmp/pmx-combined-mcp-observed.kO6Ywo`).
|
|
164
|
+
Review evidence records actor human with content/reviewed revision 24. An aborted graph read
|
|
165
|
+
shows Retry; a successful retry restores 114 board/card nodes. The first scratch selector wait
|
|
166
|
+
timed out, but the inspected error capture and the actual Retry click/recovery succeeded.
|
|
167
|
+
|
|
168
|
+
Inspected renders in `.amp/in/artifacts/combined-acceptance/` include Map/Graph at 600, 1024
|
|
169
|
+
and 1920 px in all nine themes, narrow selected details, collapsed Map, graph failure, category
|
|
170
|
+
scrolling, folder settings and Review. All 54 matrix captures have DPR 2 and no body horizontal
|
|
171
|
+
overflow. Two agent-browser motion recordings failed encoder backlog; their failed files remain
|
|
172
|
+
in `/tmp/pmx-combined-recording-failed*.webm`, not presented as successful video evidence.
|
|
173
|
+
|
|
174
|
+
This is not full Relations/Flows/Uses sketch parity: the inline edge editor, amber lineage
|
|
175
|
+
strokes, pair/cycle badges and lineage actions remain unimplemented as documented in design.md.
|
|
176
|
+
Dense fit-zoom Graph labels still need selection/local focus for detail; this fixture is not a
|
|
177
|
+
large-library capacity claim. The owner's Amp embedded-portal pill-opening report is unverified,
|
|
178
|
+
distinct from the fixed pin count and from the passing Chromium test-host interaction. Native
|
|
179
|
+
Copilot/WebKit, native Windows UI and registry-installed execution remain unverified. Portal
|
|
180
|
+
creation was exercised through MCP/HTTP, not an expansion of generic CLI/typed-SDK add data.
|
|
181
|
+
No release, tag, publish, deployment or version bump is authorized; the owner still needs to
|
|
182
|
+
test the complete changes since 0.8.2 after the approved commit/push.
|
|
183
|
+
|
|
184
|
+
Final serial local gates: `bun run test` passes 1,444; `bun run test:client` passes 306;
|
|
185
|
+
coverage passes at 64.71% lines / 72.23% functions. Build, typecheck, bundled-skill checks,
|
|
186
|
+
guidance-twin comparison and diff-check pass. Lint has zero errors, 63 warnings and 12 infos.
|
|
187
|
+
Absent agent-skill mirrors explicitly skip. The demo generator leaves its fixture unchanged.
|
|
188
|
+
`DISPLAY=:88 PMX_PLAYWRIGHT_DB_PATH=<fresh-db> bash scripts/run-playwright.sh --headed`
|
|
189
|
+
passes all 276 cases. `DISPLAY=:88 PMX_E2E_HEADED=1 PMX_CANVAS_E2E_KEEP_WORKDIR=1 bun run test:e2e-cli`
|
|
190
|
+
passes in `/tmp/pmx-canvas-e2e.bQukul`. Logs are in `/tmp/pmx-combined-final-gates.ijVDni`,
|
|
191
|
+
`/tmp/pmx-combined-final-headed.nIX7dJ` and `/tmp/pmx-combined-delivery-gates.VFWQ4K`.
|
|
192
|
+
After the full browser run, only tool-description prose changed; regenerated catalogs/build,
|
|
193
|
+
typecheck/lint and 47 focused MCP/skill checks passed again before the CLI gate.
|
|
194
|
+
|
|
195
|
+
The additional live two-board vocabulary control sets Platform overview to Dependencies and
|
|
196
|
+
Research index to Flow through the UI. Both retain their own selection after switching and
|
|
197
|
+
reloading; the other 11 boards' vocabularies remain unchanged. Evidence is in
|
|
198
|
+
`/tmp/pmx-combined-vocabulary.SSw0oL` and the inspected vocabulary captures. The full-browser
|
|
199
|
+
context pill opens, but that is not an Amp embedded-portal verification. A scratch Graph click
|
|
200
|
+
ran before Home's asynchronous navigation finished; waiting for Library view before clicking
|
|
201
|
+
completed normally. The inspected final Graph has 114 nodes at DPR 2 with no body horizontal
|
|
202
|
+
overflow; its long sidebar scrolls to the force controls. Board captures retain the existing
|
|
203
|
+
camera, so Fit is still needed when a stored card sits under floating controls.
|
|
204
|
+
|
|
205
|
+
### Cross-platform startup finding after the combined push
|
|
206
|
+
|
|
207
|
+
The combined commit was pushed as
|
|
208
|
+
[11dc3117](https://github.com/pskoett/pmx-canvas/commit/11dc311732d8c12acc86dda12b269539df8fa5b3).
|
|
209
|
+
[Its CI run](https://github.com/pskoett/pmx-canvas/actions/runs/38213111457) passed Linux,
|
|
210
|
+
CLI E2E and browser E2E, but both macOS and Windows failed the same concurrent pre-folder
|
|
211
|
+
opening test at `openCanvasDb`'s `PRAGMA journal_mode=WAL`: an immediate `SQLITE_BUSY`
|
|
212
|
+
despite `busy_timeout=5000`. macOS reported 1,443 passes and one failure; Windows reported
|
|
213
|
+
1,422 passes, 21 existing skips and one failure. Full failed job logs remain in
|
|
214
|
+
`/tmp/pmx-combined-ci.fLBUAO/{macos,windows}-failed.log`.
|
|
215
|
+
|
|
216
|
+
SQLite documents both [busy-handler bypass](https://www.sqlite.org/c3ref/busy_handler.html)
|
|
217
|
+
and [WAL open/close contention](https://www.sqlite.org/wal.html#sometimes_queries_return_sqlite_busy_in_wal_mode).
|
|
218
|
+
The fix retries only journal negotiation within the existing five-second budget, restores
|
|
219
|
+
the usual busy timeout after success, and closes the connection on terminal initialization
|
|
220
|
+
failure. Other errors still propagate immediately; arbitrary content writes are not retried.
|
|
221
|
+
No test assertion, platform skip or CI retry policy is weakened.
|
|
222
|
+
|
|
223
|
+
Thirty natural Linux repetitions passed before and after, so they are not claimed as a local
|
|
224
|
+
reproduction of the platform race. A disposable fault-injection probe of the exact immediate
|
|
225
|
+
BUSY fails before (`/tmp/pmx-wal-probe-red.QJ9JfP`) and passes after
|
|
226
|
+
(`/tmp/pmx-wal-probe-green.UwfjJ3`). Its negative controls retain a bounded permanent-BUSY
|
|
227
|
+
failure (about five seconds) and immediate corruption failure. The real concurrent/contended
|
|
228
|
+
open regression remains unchanged in the permanent suite; the injected probe is validation
|
|
229
|
+
evidence, not a mock-based replacement for the native-platform gate.
|
|
230
|
+
|
|
231
|
+
The follow-up headed run also exposed a synchronization race in the file-backed suspended-save
|
|
232
|
+
test. Its trace shows the canonical-content poll arriving at 140508.771 ms, before the test
|
|
233
|
+
registered `waitForResponse` at 140536.895 ms; subsequent incremental polls correctly omitted
|
|
234
|
+
the already-delivered change. The listener now registers before the peer save. The 409 refusal,
|
|
235
|
+
preserved draft, unchanged canonical file and deliberate subsequent-save assertions are intact.
|
|
236
|
+
The failed trace, videos and screenshots remain under
|
|
237
|
+
`/tmp/pmx-wal-final-gates.vWZ0g3/results/boards.pw.ts-save-and-boar-33e76-its-draft-file-backed-true--desktop`.
|
|
238
|
+
|
|
239
|
+
Final local follow-up gates ran serially: build/typecheck, lint (0 errors, 63 warnings,
|
|
240
|
+
12 infos), 1,444 unit tests, 306 client tests, unit coverage at 64.70% lines / 72.23%
|
|
241
|
+
functions, and fresh-workspace headed CLI E2E all passed. That first browser attempt finished
|
|
242
|
+
with 275 passes and the one listener failure above. After the test correction, typecheck and
|
|
243
|
+
lint passed again, both suspended-save variants passed ten repetitions each (20 cases), and
|
|
244
|
+
the fresh full headed run passed all 276 cases at the configured reference widths. There were
|
|
245
|
+
no browser retries in either local full run. Evidence is retained in
|
|
246
|
+
`/tmp/pmx-wal-final-gates.vWZ0g3`, `/tmp/pmx-wal-corrected-gates.UL7xSE`, and the CLI workspace
|
|
247
|
+
`/tmp/pmx-canvas-e2e.dfySJW`. The client bundle did not change in this follow-up; the combined
|
|
248
|
+
human, real-transport and inspected visual evidence above remains applicable. Native-platform
|
|
249
|
+
CI is still a separate gate, not implied by these Linux results. No release or version change.
|
|
250
|
+
|
|
251
|
+
### Delivered checkpoint, 2026-10-12
|
|
252
|
+
|
|
253
|
+
The [stabilization follow-up](https://github.com/pskoett/pmx-canvas/commit/fd63c3c611e680864d444532ca3ef7bb79cd171e)
|
|
254
|
+
is pushed on top of the combined implementation. Its
|
|
255
|
+
[CI run](https://github.com/pskoett/pmx-canvas/actions/runs/38218734543) completed successfully
|
|
256
|
+
across all five jobs: Linux, macOS, Windows, browser E2E and CLI E2E. macOS reports
|
|
257
|
+
1,444 passes and zero failures; Windows reports 1,423 passes, 21 existing skips and zero
|
|
258
|
+
failures. The unchanged concurrent/contended-open regression passes on both platforms.
|
|
259
|
+
Browser CI reports 276 passes with no flaky/retry report. This closes the native-platform
|
|
260
|
+
startup gate above; it does not erase the initial failed runs or their red/green evidence.
|
|
261
|
+
|
|
262
|
+
A focused read-only Oracle review of the follow-up found no blockers in the startup-only
|
|
263
|
+
retry or save-test synchronization. The owner portal runs this build, with all 11 boards
|
|
264
|
+
preserved; restart checks retain the active board, card contents/geometry, edges and camera.
|
|
265
|
+
The owner's step-by-step acceptance guide now records the delivered build and green CI,
|
|
266
|
+
without marking manual tests passed or replacing the owner's notes.
|
|
267
|
+
|
|
268
|
+
This is ready for owner acceptance, not a claim of full sketch parity or release approval.
|
|
269
|
+
The embedded Amp pill-opening, dense Fit-label limits, Relations/Flows/Uses gaps and native
|
|
270
|
+
host/UI/registry-install boundaries above remain explicit. Version is still 0.8.2; no release,
|
|
271
|
+
tag, publication, deployment or version bump was performed. Staged maintenance remains in
|
|
272
|
+
the vision and debt backlog.
|
|
273
|
+
|
|
274
|
+
### Guest cursor polling latency, 2026-10-12
|
|
275
|
+
|
|
276
|
+
The owner's slow guest-cursor report exposed a PMX transport delay: orb pages select the
|
|
277
|
+
proxy-safe polling path, but that path paused two seconds after every response. Human cursor
|
|
278
|
+
POSTs already throttle at 80 ms and server presence emits coalesce at 16 ms. Neither the
|
|
279
|
+
cursor styling nor the shared board database needed to change.
|
|
280
|
+
|
|
281
|
+
Direct HTTP clients now request a bounded long poll on the existing event ring. A caught-up
|
|
282
|
+
request waits at most 1000 ms, wakes when an event arrives, and cleans up on timeout, abort
|
|
283
|
+
or server stop. An 80 ms client pause bounds busy-stream request rate. Snapshot/ring recovery
|
|
284
|
+
and SSE are preserved; hosted MCP-app tool polling retains its two-second cadence. No new
|
|
285
|
+
presence channel or host-specific styling was added. Self-review covered event ordering,
|
|
286
|
+
waiter cleanup, client generations and the hosted/direct transport distinction.
|
|
287
|
+
|
|
288
|
+
The starting checkout contains the requested
|
|
289
|
+
[docs baseline](https://github.com/pskoett/pmx-canvas/commit/175031013ef6bc31b94cec16d5def56661e866b6)
|
|
290
|
+
and the newer docs-only
|
|
291
|
+
[checkpoint](https://github.com/pskoett/pmx-canvas/commit/3b7a570a98bd6f32b8a50386c04bfc81db2a76e6).
|
|
292
|
+
The same two headed Chromium clients moved the pointer through the real orb portal in both
|
|
293
|
+
directions, one workbench inside a cross-origin iframe, on a disposable one-card board.
|
|
294
|
+
Three 100-point sweeps per direction and build produced:
|
|
295
|
+
|
|
296
|
+
| Observed measure | Unchanged baseline | Fixed build |
|
|
297
|
+
| --- | --- | --- |
|
|
298
|
+
| Remote target updates during movement | 0.47–0.48/s | 11.24–11.54/s |
|
|
299
|
+
| Median target-update gap | 1999–2001 ms | 84 ms |
|
|
300
|
+
| Estimated median rendered lag, including interpolation | 848–934 ms | 213–217 ms |
|
|
301
|
+
| Estimated p95 rendered lag | 1898–2000 ms | 262–266 ms |
|
|
302
|
+
| Receiver animation cadence | about 60 frames/s | about 60 frames/s |
|
|
303
|
+
| Own-cursor count | 0 | 0 |
|
|
304
|
+
|
|
305
|
+
Lag estimates match rendered cursor x positions to a monotonic input sweep, not a network
|
|
306
|
+
round-trip measurement. The final fixed idle client completed eight polls over six seconds.
|
|
307
|
+
Before/after recordings were inspected. An earlier fixed capture needed dense 100 ms frame
|
|
308
|
+
samples and decoded positions to contradict a coarse automated description of pauses.
|
|
309
|
+
The final-build capture also shows continuous movement rather than the baseline's two-second
|
|
310
|
+
jumps. Two final recording attempts at 60 and 30 fps overloaded the encoder and were retained
|
|
311
|
+
as failures; the inspected recording uses 15 fps. Final recordings are
|
|
312
|
+
`.amp/in/artifacts/cursor-latency/before-final.webm` and `after-final.webm`.
|
|
313
|
+
|
|
314
|
+
The public HTTP long-poll regression and two-client rendered-coordinate regression both
|
|
315
|
+
failed on unchanged code, then passed with the fix. The existing two-tab grab/lock/yield
|
|
316
|
+
case also passed with SSE forced as a control. Red evidence is retained under
|
|
317
|
+
`/tmp/pmx-cursor-red.RjuzlZ`; focused green build/typecheck, HTTP and headed evidence under
|
|
318
|
+
`/tmp/pmx-cursor-green.GqytFB`. Repeated portal measurements, served-bundle hashes, input and
|
|
319
|
+
render samples and video-frame analysis are in `/tmp/pmx-cursor-comparison.oZBHTD`.
|
|
320
|
+
Earlier failed recordings/navigation and invalid duplicate-tab or throttled measurements
|
|
321
|
+
were retained separately, not counted as successful runs. The final measurement harness
|
|
322
|
+
selects the agent-browser-owned targets, closes extra test tabs and rejects low frame/input
|
|
323
|
+
cadence or duplicate own cursors.
|
|
324
|
+
|
|
325
|
+
The first full headed run passed 276 cases but timed out in dark HTML refresh continuity.
|
|
326
|
+
Its trace places the stranded poll at 296926.670 ms, between disabling interception at
|
|
327
|
+
296924.232 ms and reenabling it at 296938.877 ms. Ten unchanged focused reruns passed;
|
|
328
|
+
those did not explain or erase the failure. A standalone headed Chromium + Node HTTP
|
|
329
|
+
probe, with no PMX code, reproduced the interception failure: toggling an unrelated route
|
|
330
|
+
stranded fetch 22 before it reached the server (21 requests received and completed).
|
|
331
|
+
Keeping the route installed let completions progress from 234 to 279 over the final
|
|
332
|
+
observation window. The test now installs its route once, preserves every per-revision
|
|
333
|
+
hold, painted-content assertion and screenshot, and uses the existing context cleanup.
|
|
334
|
+
All 12 repeated HTML/JSON-render dark/light cases passed after that harness correction.
|
|
335
|
+
No viewer or product timeout workaround was added. The initial full-run trace/video is
|
|
336
|
+
retained in `/tmp/pmx-cursor-gates.qGwgtE`; the isolated reproduction and unchanged reruns
|
|
337
|
+
are in `/tmp/pmx-cursor-refresh-investigation.SJzGeg`.
|
|
338
|
+
|
|
339
|
+
The next full headed run passed 276 cases and failed one receipt Undo/Unpin assertion in
|
|
340
|
+
strict mode: bare `[data-node-id]` matched both the card and a transient command-bar chip.
|
|
341
|
+
The card still showed the expected `After B` text. Five card assertions in that case now
|
|
342
|
+
explicitly target `.canvas-node`; the unseen-human-edit and pin-set checks are unchanged.
|
|
343
|
+
Ten consecutive headed repetitions passed. This second failed run, including the DOM trace
|
|
344
|
+
and screenshot, remains in `/tmp/pmx-cursor-final-gates.T08vva`.
|
|
345
|
+
|
|
346
|
+
The third full headed run passed 276 cases and failed the rich-relation hover handoff
|
|
347
|
+
assertion. The trace shows 184 ms between starting the blank-canvas pointer move and reading
|
|
348
|
+
the class, beyond the intentional 120 ms hover grace; the two requested animation frames
|
|
349
|
+
alone took 115 ms. That test now drives real pointer events with controlled 50 ms crossings
|
|
350
|
+
and a 500 ms blank-canvas control, then resumes normal time. Three repetitions passed,
|
|
351
|
+
removing the grace in a test-only served bundle failed at the short-crossing assertion,
|
|
352
|
+
and three more repetitions passed after removing the mutation. The probe asserted a unique
|
|
353
|
+
bundle replacement and a loaded runtime marker; no mutation code remains in the tests.
|
|
354
|
+
No hover/store/CSS production code changed. The real-time cursor measurements above use no
|
|
355
|
+
controlled clock. The third failed run is retained in `/tmp/pmx-cursor-delivery-gates.ozvSAA`;
|
|
356
|
+
hover red/green evidence is in `/tmp/pmx-cursor-hover-clock.Z1UYwU`.
|
|
357
|
+
|
|
358
|
+
The fourth full run passed 274 cases and exposed two product races plus a ghost-test sampling
|
|
359
|
+
gap, retained in `/tmp/pmx-cursor-final-browser.7Mdqdq`:
|
|
360
|
+
|
|
361
|
+
- A painted shortcut overlay could miss immediate Escape while the App keyboard effect still
|
|
362
|
+
closed over its previous state. The keyboard subscription now updates at layout commit.
|
|
363
|
+
- An earlier same-tab Fit camera echo arrived during a newer Fit animation and cancelled it.
|
|
364
|
+
Viewport writes now carry the existing tab identity; only the originating tab ignores that
|
|
365
|
+
echo. Peer tabs and explicit agent commands still apply the camera. This is echo metadata,
|
|
366
|
+
not an authorization mechanism.
|
|
367
|
+
- The ghost test's best rAF sample was 30.5px from the target, and it did not observe the
|
|
368
|
+
`animationend` endpoint before removal. It now also samples that endpoint in capture phase.
|
|
369
|
+
Position/size thresholds and normal frame samples remain; no ghost rendering or timing changed.
|
|
370
|
+
|
|
371
|
+
The keyboard and camera interleavings both failed deterministically before their fixes. The
|
|
372
|
+
camera case rendered a 250px card instead of completing the newer zoom to 312.5px. Afterwards,
|
|
373
|
+
18 headed checks passed: three each of the two regressions, original Graph and attachment
|
|
374
|
+
cases, ghost settling and two-client cursor motion. The camera regression also checks a peer
|
|
375
|
+
receives both zooms and an agent command still overrides both tabs. Evidence is retained in
|
|
376
|
+
`/tmp/pmx-cursor-races.S1FpCT`.
|
|
377
|
+
|
|
378
|
+
An intermediate measurement repeated the sweeps after the keyboard/camera fixes.
|
|
379
|
+
Its portal-served bundle hash matched that built bundle; six sweeps and an additional recording
|
|
380
|
+
control maintained about 60 receiver frames/s. Those measurements, hash and failed encodes are
|
|
381
|
+
also in `/tmp/pmx-cursor-races.S1FpCT`.
|
|
382
|
+
|
|
383
|
+
The next serial gates in `/tmp/pmx-cursor-stabilized.T2t2MW` passed build/typecheck, lint
|
|
384
|
+
(0 errors, existing 63 warnings/12 infos), 1,445 unit tests, 306 client tests, coverage
|
|
385
|
+
(64.69% lines / 72.29% functions, both floors met) and fresh-workspace headed CLI E2E
|
|
386
|
+
(`/tmp/pmx-canvas-e2e.bf3lLB`). The full headed browser gate finished **278 passed, 1 failed**.
|
|
387
|
+
The failure was `canvas-app.pw.ts`'s curated structured notes / AX host-context case, so that
|
|
388
|
+
run did **not** establish stability.
|
|
389
|
+
|
|
390
|
+
Its trace confirmed a hosted pin-ordering race: poll `since=1378` starts at
|
|
391
|
+
187162 ms, before Clear all's POST at 187168 ms. The poll returns old pin event 1380, restoring
|
|
392
|
+
the cleared pin in the UI; the intended re-pin at 189205 ms consequently submits `nodeIds:[]`.
|
|
393
|
+
Focus reaches the host, but the pinned card is absent. Pin code and hosted two-second polling
|
|
394
|
+
were not changed here; this was not reproduced against a separate baseline build and is not
|
|
395
|
+
claimed conclusively pre-existing. The trace, failure screenshot and video remain with that
|
|
396
|
+
run; the blocker was reported to the parent orb before further changes.
|
|
397
|
+
|
|
398
|
+
The pin revision fence now covers local writes as well as incoming frames. Poll replies that
|
|
399
|
+
cross a local write or a newer authoritative read skip only their stale pin frames, then read
|
|
400
|
+
the canonical server pin set from the existing event snapshot, without replaying its other
|
|
401
|
+
frames. This costs a snapshot read on pin reconciliation rather than adding a new endpoint.
|
|
402
|
+
The agent-facing pinned-context brief is not authoritative for membership: it filters retired
|
|
403
|
+
cards. Pending writes reconcile after completion, including refused and normalized requests.
|
|
404
|
+
Board changes invalidate old-board continuations. This adds no
|
|
405
|
+
server clock, changes no 20-pin limit and does not suppress later peer or agent writes.
|
|
406
|
+
Both delayed incremental-poll and snapshot regressions failed before the fix
|
|
407
|
+
(`/tmp/pmx-pin-order-red.ahE6cW`), then passed alongside the original hosted-context and restore
|
|
408
|
+
cases (`/tmp/pmx-pin-order-green.K53uol`, four headed passes). Self-review also reproduced and
|
|
409
|
+
fixed an old-board pending-write leak (`/tmp/pmx-pin-board-red.1q5kkz`): a previous board's
|
|
410
|
+
late acknowledgement must not block canonical normalization or release the new board's
|
|
411
|
+
pending Clear all. No test timeout or pin assertion was relaxed.
|
|
412
|
+
|
|
413
|
+
The following full run (`/tmp/pmx-cursor-pin-gates.h4HfvL`) finished 280 passed / 1 failed:
|
|
414
|
+
the camera regression completed both tabs' zoom and agent-override assertions, then its
|
|
415
|
+
`route.fetch` was closed during fixture teardown. The route now drains with
|
|
416
|
+
`unrouteAll({behavior:'wait'})` before the fixture closes; errors are not suppressed.
|
|
417
|
+
During that run, self-review found the filtered-brief/raw-membership distinction above.
|
|
418
|
+
Its built bundles and pre-correction patch are retained separately from the end-of-run
|
|
419
|
+
source. The retired-pin regression failed against that intermediate bundle
|
|
420
|
+
(`/tmp/pmx-pin-retired-red.Qm0kPq`), so that run is not counted as final-build verification.
|
|
421
|
+
|
|
422
|
+
**Final serial gates passed** in `/tmp/pmx-cursor-delivery-final.mwP76f`: build/typecheck,
|
|
423
|
+
lint (0 errors, existing 63 warnings/12 infos), 1,445 unit, 307 client, coverage (64.64% lines /
|
|
424
|
+
72.25% functions), fresh-workspace headed CLI E2E (`/tmp/pmx-canvas-e2e.5XOntZ`), 12 repeated
|
|
425
|
+
headed pin/camera regressions and all **282 headed browser cases**, including 600/1024/1920
|
|
426
|
+
reference widths. These execute real HTTP and stdio MCP paths as well as human UI gestures.
|
|
427
|
+
The table's final six portal sweeps, idle control and served hash are in
|
|
428
|
+
`/tmp/pmx-cursor-live-final.gi4axw`; the served index SHA256 matches the final build
|
|
429
|
+
`a5f5a1c1f73d43c3254c79601cc9e303c63d839983e1f569f82f0d45c95b229d`.
|
|
430
|
+
The inspected final clip shows continuous movement, without blanking or two-second stalls.
|
|
431
|
+
A live-check setup attempt used the wrong supervised port and inconsistent browser launch
|
|
432
|
+
flags, leaving blank tabs; it was corrected before these measurements, not counted as a run.
|
|
433
|
+
|
|
434
|
+
This demonstrates the PMX-side delay and its fix through an orb portal, not the exact Amp
|
|
435
|
+
embedded container. Native Copilot/WebKit, Windows UI and registry installation were not
|
|
436
|
+
exercised for this batch. The owner's live SQLite content was not used or modified. The
|
|
437
|
+
owner subsequently authorized a combined commit/push from the parent orb after validation;
|
|
438
|
+
this orb hands back source and evidence only. No release, tag or version change is authorized.
|
|
439
|
+
|
|
440
|
+
### Combined acceptance follow-up, 2026-10-12
|
|
441
|
+
|
|
442
|
+
The parent orb integrated that frozen patch with the owner's card/relation star removal.
|
|
443
|
+
Authorship remains in hints, including bare lines; pins, read marks and the session lens
|
|
444
|
+
are unchanged. Star regressions failed before the removal and passed afterwards. Headed
|
|
445
|
+
600/1024/1440/1920 width and nine-theme inspections retained the hints. Card corner resizing
|
|
446
|
+
persisted after reload in a disposable database; test 01 means resizing the browser or pane,
|
|
447
|
+
not the card. The live acceptance board has a focused agent review card and relation.
|
|
448
|
+
|
|
449
|
+
The first combined full headed run passed 281 cases and failed attention history. Its trace
|
|
450
|
+
shows pin POST at 231783 ms, an incremental pin frame captured at 231792 ms, and canonical
|
|
451
|
+
snapshot reads at 231796/231817 ms. Revision fencing skipped the older frame correctly but
|
|
452
|
+
canonical reconciliation did not update the semantic attention reducer, so the card stayed
|
|
453
|
+
pinned while its Context updated notice/history disappeared. This is a product regression,
|
|
454
|
+
not a weakened selector or timeout. Feeding only the accepted canonical pin frame into the
|
|
455
|
+
existing attention reducer fixes it without replaying other snapshot frames. The extended
|
|
456
|
+
existing attention test holds the incremental frame: it failed before the fix, then passed
|
|
457
|
+
five consecutive headed repetitions, including later near-pin history. First-failure evidence
|
|
458
|
+
is retained in `/tmp/pmx-combined-acceptance-final`, red proof in `/tmp/pmx-attention-red`,
|
|
459
|
+
and focused green in `/tmp/pmx-attention-green`.
|
|
460
|
+
|
|
461
|
+
Final combined serial gates passed in `/tmp/pmx-combined-acceptance-corrected`: build,
|
|
462
|
+
typecheck, lint (0 errors, 63 existing warnings/12 infos), 1,445 unit, 307 client,
|
|
463
|
+
coverage (64.67% lines/72.25% functions), fresh headed CLI E2E with real HTTP/stdio MCP,
|
|
464
|
+
and all 282 headed browser cases. Agent-skill mirror validation skipped absent trees;
|
|
465
|
+
that skip is not a validation claim. The preceding 281-pass/1-fail run remains recorded.
|
|
466
|
+
The initial CLI invocation used the wrong headed environment key; its successful result is
|
|
467
|
+
not counted as headed proof. The final invocation uses `PMX_E2E_HEADED=1` explicitly.
|
|
468
|
+
|
|
469
|
+
### Owner rehearsal fixes and shared Home relation presets, 2026-10-13
|
|
470
|
+
|
|
471
|
+
The medium rehearsal orb found five numbered failures: 01 toolbar crowding with two sessions;
|
|
472
|
+
07 inert expanded Markdown wiki links; 11 narrow Graph Updates/filter/search overlap;
|
|
473
|
+
14 blank Medium cadence acceptance; and 19 HTML replacement errors displacing healthy paint
|
|
474
|
+
and graph data/spec updates leaving stale charts. Its frozen 15-file patch fixes those
|
|
475
|
+
contracts. It passed 1,445 unit and 307 client cases, headed CLI and 288 headed browser cases
|
|
476
|
+
before the final localized Graph-search CSS correction; nine targeted width/chrome cases
|
|
477
|
+
verify that final worker state. Those counts do not certify the parent's combined changes.
|
|
478
|
+
Intermittent Plex loading and a Flow Start failure passed unchanged focused repetitions and
|
|
479
|
+
the quiet full run, but their causes remain unconfirmed, not diagnosed away.
|
|
480
|
+
|
|
481
|
+
The owner's clarification moves editable relation templates into Home, shared like Categories.
|
|
482
|
+
Explicit application copies a saved template onto a selected board without rewriting edges;
|
|
483
|
+
later template edits/deletion do not retroactively change existing boards. The board dropdown
|
|
484
|
+
filters All relations plus kinds actually present, not preset names or Custom vocabulary.
|
|
485
|
+
The obsolete per-board editor is removed. The same public registry exposes template CRUD
|
|
486
|
+
through HTTP, SDK, CLI and MCP; existing scope fences protect workspace writes. The catalog
|
|
487
|
+
persists in the workspace database's existing meta store, including deleted starter templates.
|
|
488
|
+
|
|
489
|
+
The kept public-operation regression failed before the new operations and passed afterwards.
|
|
490
|
+
It verifies restart persistence without changing cards/connections. Existing transport/fence
|
|
491
|
+
tests now cover the two actions. The browser contract covers Home creation, reload, application,
|
|
492
|
+
deletion, two asymmetric boards, unchanged edges and clearing a vanished kind filter.
|
|
493
|
+
Its first run reached all feature assertions but failed test cleanup on an invented DELETE
|
|
494
|
+
edge URL; the trace proves 404. Cleanup now uses the documented DELETE body. This was a test
|
|
495
|
+
error, not a product refusal, and the failed attempt remains in
|
|
496
|
+
`/tmp/pmx-home-relations-gates/first-focused-failure`.
|
|
497
|
+
|
|
498
|
+
Rendered inspection caught Home's new button clipping at 390 px (right edge 394.17).
|
|
499
|
+
The same executed boundary check failed before toolbar wrapping and passed afterwards
|
|
500
|
+
(right edge 187.61). The browser contract retains that width boundary. Narrow dialog controls
|
|
501
|
+
fit horizontally and remain reachable by scrolling; screenshots are inspected in
|
|
502
|
+
`.amp/in/artifacts/home-relations/`. The owner portal's old bundle stays unchanged while the
|
|
503
|
+
combined tree is built and tested in an isolated local worktree with a separate database.
|
|
504
|
+
|
|
505
|
+
The main vision, context extension, historical review, design contract, public API references
|
|
506
|
+
and acceptance instructions are aligned with this model. Owner results/notes and the live
|
|
507
|
+
review fixture are preserved, not reset. Owner acceptance, curation evaluation, full sketch
|
|
508
|
+
parity and native-host checks remain separate. No release/tag/publish or version bump.
|
|
509
|
+
|
|
510
|
+
The first parent combined full headed gate passed 288 cases and failed JSON-viewer recovery
|
|
511
|
+
in srcdoc mode. Its trace shows interception removed at 886609.9 ms, a poll started at
|
|
512
|
+
886612.1 ms without completion, and an accepted recovery PATCH at 886615.6 ms. This matches
|
|
513
|
+
the independently reproduced Chromium/Playwright interception-lifetime stall documented
|
|
514
|
+
above. Both HTML/JSON recovery tests now install one route before navigation and toggle
|
|
515
|
+
replacement failure without removing that route; exact retry counts, healthy-paint and
|
|
516
|
+
recovery assertions remain unchanged. The first failure is retained in
|
|
517
|
+
`/tmp/pmx-home-relations-gates/first-full-failure`, not counted as a pass.
|
|
518
|
+
|
|
519
|
+
Final combined serial gates pass in `/tmp/pmx-home-relations-gates`: build/typecheck,
|
|
520
|
+
lint (0 errors, existing 63 warnings/12 infos), **1,446 unit**, **307 client**, coverage
|
|
521
|
+
(64.68% lines / 72.31% functions), fresh headed CLI E2E with real HTTP/stdio MCP,
|
|
522
|
+
72 focused server/transport/fence cases, five final focused UI cases, and all **289 headed
|
|
523
|
+
browser cases**, including 600/1024/1920 reference widths. The final full run includes the
|
|
524
|
+
390 px Home wrapping and final Graph-sidebar correction. Main source and the tested isolated
|
|
525
|
+
worktree match byte-for-byte; generated bundles/catalogs are copied from that tested build.
|
|
526
|
+
The preceding CI run passed four jobs but Windows was cancelled. CI for this delivery and
|
|
527
|
+
the owner's requested fresh numbered rehearsal remain separate from these local gates.
|
|
528
|
+
|
|
529
|
+
### Fresh rehearsal 07: document save before wiki creation, 2026-10-13
|
|
530
|
+
|
|
531
|
+
The exact `f5032c5` delivery subsequently passed all five jobs in
|
|
532
|
+
[CI 38408653667](https://github.com/pskoett/pmx-canvas/actions/runs/38408653667).
|
|
533
|
+
Fresh manual rehearsal still reproduced a wiki-creation failure twice: expanded Source Save,
|
|
534
|
+
Back to document, click an unresolved link, then Create. Rich-editor blur normalized the
|
|
535
|
+
Markdown and PATCHed revision 23; the dialog's captured pre-normalization content then PATCHed
|
|
536
|
+
the same revision 23. The first write advanced the revision, so the second correctly refused
|
|
537
|
+
binding after creating the board. Waiting in Document did not prevent a later blur save.
|
|
538
|
+
|
|
539
|
+
The parent regression reproduces that refusal on unchanged product code. The narrow fix
|
|
540
|
+
finishes the expanded document's blur save queue before opening a wiki dialog or navigating.
|
|
541
|
+
It stops if the board incarnation changes or the save leaves a dirty/refused draft. The
|
|
542
|
+
dialog's source capture and server revision guard are unchanged; a real peer write after
|
|
543
|
+
the dialog opens remains refused and its content is preserved.
|
|
544
|
+
|
|
545
|
+
Local follow-up gates pass in `/tmp/pmx-wiki-blur-gates`: build/typecheck/lint (0 errors,
|
|
546
|
+
63 existing warnings/12 infos), 1,446 unit, 307 client, all 40 boards/Markdown sanitize and
|
|
547
|
+
native Save/ACK/ABA cases, two inline Markdown cases and five repeated wiki cases. The
|
|
548
|
+
unchanged-product red trace and inspected before/after media are in
|
|
549
|
+
`.amp/in/artifacts/wiki-blur/`. A separate headed real-pointer flow created and opened the
|
|
550
|
+
new board; an independent API read confirmed the source's durable board-ID binding. The
|
|
551
|
+
clip holds the last captured frame for two seconds so the actual destination is readable.
|
|
552
|
+
|
|
553
|
+
At this checkpoint the follow-up is local/uncommitted, with tested index SHA256
|
|
554
|
+
`3c003e08ebd8782c28db46c2cd5c2e777cae1cc23be0afbd9a7138799aa2c233`.
|
|
555
|
+
The owner daemon remains on `f5032c5` while the medium orb completes its full numbered pass.
|
|
556
|
+
Source-only retest handoff precedes combined integration, commit/push and live refresh;
|
|
557
|
+
no current owner results, notes or live database were changed by this isolated validation.
|
|
558
|
+
The medium orb's corrected 390 px evidence establishes the Updates/filter overlap with the
|
|
559
|
+
sidebar **open**, not closed. Two pinned boards and one external writer also push the context
|
|
560
|
+
chip's right edge to 429.09 px in a 390 px viewport. Required 600/1024 controls pass separately.
|
|
561
|
+
|
|
562
|
+
The extended existing browser regression reproduces both defects: an ordinary filter click
|
|
563
|
+
is intercepted by Updates, and with only the positioning fix the context edge remains
|
|
564
|
+
429.09 px. The local follow-up positions Updates from the measured memory-stage top, so
|
|
565
|
+
wrapped tabs and counts cannot invalidate a fixed header offset. The existing content-based
|
|
566
|
+
compact step now includes external-writer text, preserving avatars, activity access and an
|
|
567
|
+
accessible label. No owner daemon refresh or guide-result reset accompanies these tests.
|
|
568
|
+
First-failure traces and logs are retained in `/tmp/pmx-responsive-gates`.
|
|
569
|
+
|
|
570
|
+
Final same-source serial gates pass in `/tmp/pmx-responsive-gates`: build/typecheck/lint
|
|
571
|
+
(0 errors, existing 63 warnings/12 infos), **1,446 unit**, **307 client**, coverage
|
|
572
|
+
(64.66% lines / 72.31% functions), and all **289 headed browser cases**, including the
|
|
573
|
+
600/1024/1920 reference projects. The fresh CLI/HTTP/stdio MCP gate also passes with explicit
|
|
574
|
+
`DISPLAY=:88 PMX_E2E_HEADED=1 bash scripts/e2e-cli-coverage.sh`. An earlier invocation omitted
|
|
575
|
+
that flag; its log is retained separately and is not the headed proof.
|
|
576
|
+
|
|
577
|
+
Inspected final media in `.amp/in/artifacts/narrow-chrome/` shows open/closed populated Graph
|
|
578
|
+
at 390 px, all nine themes, and 600/1024/1920 layouts. Real-pointer recording exercises
|
|
579
|
+
filter open/close, search, context, external activity and Updates. Executed measurements keep
|
|
580
|
+
the context chip inside the viewport (right edge 376 px), and the collapsed Updates trigger
|
|
581
|
+
below Filters and clear of search. Open overlay panels intentionally cover the canvas;
|
|
582
|
+
the narrow graph remains cramped with its sidebar open, and dense Fit labels need local
|
|
583
|
+
focus. These checks do not establish touch, native-host or full sketch-parity acceptance.
|
|
584
|
+
|
|
585
|
+
The medium orb independently built the frozen five-file source/test patch against clean
|
|
586
|
+
`f5032c5` in a disposable checkout. Its served index matches the parent tested build:
|
|
587
|
+
SHA256 `a42b09b475b9dad7afda0fc68f0cdec49dd43c9bd57d54b381a1efa2525ac2e0`.
|
|
588
|
+
Manual retests pass trailing-newline creation with durable source binding, refusal after a
|
|
589
|
+
genuine peer edit, and populated Graph interactions at 390/600/760/390. Its read-only live
|
|
590
|
+
preservation comparison confirms unchanged layouts for all 11 boards (96 cards, 63 edges),
|
|
591
|
+
including guide results/notes, pins, cameras and tours. Categories, folders and shared presets
|
|
592
|
+
also match. Read inspection advanced `lastReadAt` on three guide cards, not their content or
|
|
593
|
+
evidence validation. No further check depends on the old live bundle. Disposable cleanup and
|
|
594
|
+
the qualified numbered report remain separate; no owner acceptance results are inferred.
|