Repository navigation
conformance(ipc): pinned v44.4.5 entries for the draw.io IPC path — send/on/once, ipcMain.on/once/removeListener, event.reply, senderFrame, webContents.send delivery, IpcRendererEvent, structured-clone throws, contextBridge value rows, navigation-gen #464
Description
Activity
- addedelectron-compatElectron compatibility program areaElectron compatibility program areacompat:tier-1Electron compat Tier 1 (arch 04 §4)Electron compat Tier 1 (arch 04 §4)ready-for-agentFully specified; an AFK agent can take itFully specified; an AFK agent can take it
on Oct 6, 2026 - addedmilestone:first-proofNeeded for the first migration proof (drawio-desktop on macOS, explicit legacy profile)Needed for the first migration proof (drawio-desktop on macOS, explicit legacy profile)
on Oct 6, 2026 Generated by an AI agent (Claude Code, Fable 5.1) on behalf of @0monish, 2026-10-06, under the map's execution doctrine. Statements are labelled FACT / INFERENCE / UNKNOWN by their author; nothing here authorizes implementation.
Doctrine audit findings for this issue
- Duplicate / one-owner (with F04-A5 (Renderer sendSync mechanism on WKWebView (synchronous XHR to a host scheme handler) — measured feasibility #401), PANEL-D8 (sendSync stays a blocking CALL per 02 §5; deferred past draw.io, gated before Zettlr #428), PANEL-P1 (PANEL-P1 (decided 2026-10-07): worker-owned single link (arm B) passes the link-drain gate #418), F06-T2 (feat(native): guarded async dialog broker on macOS (showOpenDialog/showSaveDialog/showMessageBox) parented to host-minted windows, returning paths only under the legacy profile #478)): Synchronous-call emulation is spread over five units with no implementation owner: renderer sendSync mechanism (F04-A5 (Renderer sendSync mechanism on WKWebView (synchronous XHR to a host scheme handler) — measured feasibility #401)), its policy (PANEL-D8 (sendSync stays a blocking CALL per 02 §5; deferred past draw.io, gated before Zettlr #428)), a sendSync conformance entry that must stay red indefinitely (F04-T1 (conformance(ipc): pinned v44.4.5 entries for the draw.io IPC path — send/on/once, ipcMain.on/once/removeListener, event.reply, senderFrame, webContents.send delivery, IpcRendererEvent, structured-clone throws, contextBridge value rows, navigation-gen #464)), main-side blocking transport (PANEL-P1 (PANEL-P1 (decided 2026-10-07): worker-owned single link (arm B) passes the link-drain gate #418)) and the showMessageBoxSync scaffold (F06-T2 (feat(native): guarded async dialog broker on macOS (showOpenDialog/showSaveDialog/showMessageBox) parented to host-minted windows, returning paths only under the legacy profile #478)). Renderer-side blocking (WKWebView sync XHR) and main-side blocking (parked Bun) are different atoms that the plan repeatedly discusses together. → Fix: Two atoms, two owners: (1) main-side blocking CALL = PANEL-P1 (PANEL-P1 (decided 2026-10-07): worker-owned single link (arm B) passes the link-drain gate #418) → new transport ticket (first-proof critical); (2) renderer sendSync = F04-A5 (Renderer sendSync mechanism on WKWebView (synchronous XHR to a host scheme handler) — measured feasibility #401) (Zettlr-gated, next). Move the sendSync entry out of F04-T1 (conformance(ipc): pinned v44.4.5 entries for the draw.io IPC path — send/on/once, ipcMain.on/once/removeListener, event.reply, senderFrame, webContents.send delivery, IpcRendererEvent, structured-clone throws, contextBridge value rows, navigation-gen #464) into the F04-A5 (Renderer sendSync mechanism on WKWebView (synchronous XHR to a host scheme handler) — measured feasibility #401) follow-up.
YAGNI classification:
first-proof— Conformance-first for send/on ordering, event.reply, senderFrame and the contextBridge value table used by the draw.io preload. Park the sendSync entry (0 draw.io sites) and invoke/handle (0 draw.io sites; Zettlr).Disposition: each finding stays open on this issue until its fix is applied to the body or refuted with evidence.
- changed the title
[-]conformance(ipc): pinned entries for invoke/handle, send/on ordering, reply/senderFrame semantics, error envelope and sendSync contract[/-][+]conformance(ipc): pinned v44.4.5 entries for the draw.io IPC path — send/on/once, ipcMain.on/once/removeListener, event.reply, senderFrame, webContents.send delivery, IpcRendererEvent, structured-clone throws, contextBridge value rows, navigation-gen[/+]on Oct 6, 2026 This was generated by AI during triage.
Agent Brief
Category: enhancement
Summary: conformance(ipc): pinned v44.4.5 entries for the draw.io IPC path — send/on/once, ipcMain.on/once/removeListener, event.reply, senderFrame, webContents.send delivery, IpcRendererEvent, structured-clone throws, contextBridge value rows, navigation-generation casesCurrent behavior:
No IPC conformance entries exist; the only Electron cells are the lifecycle corpus, pinned to Electron 44.3.0.Desired behavior:
Land red-until-implemented KEL-74 cells for the draw.io first-proof IPC path. Doc-sentence entries (ipc-renderer.md, ipc-main.md, ipc-main-event.md, ipc-renderer-event.md, context-bridge.md at v44.4.5): (1)ipcRenderer.sendargs reach anipcMain.onlistener by structured clone; (2)sendthrows synchronously for Function, Promise, Symbol, WeakMap, WeakSet; (3)ipcMain.oncefires once andipcMain.removeListenerstops delivery; (4)event.replyreaches the sending frame andwebContents.sendreaches anipcRenderer.onlistener of that WebContents; (5)senderFrame.urlequals the loaded document URL andsenderFrameis null after the frame navigated or was destroyed; (6)IpcRendererEvent.senderis the ipcRenderer instance andportsis an empty list when nothing was transferred; (7) contextBridge rows: functions proxied (argument position, including a callback nested in an object argument, called N times from the preload world), other values copied and frozen, Symbol dropped, Error copied with message. Observed-only entries (no v44.4.5 doc sentence states them, so under the X01-T3 uncited-cell rule they land with expected statusunknown; the recorded-oracle comparison is F04-T20's, next milestone): (8) per-channel order of N sends; (9)webContents.sendwith no renderer listener is dropped, not queued for a later listener; (10) staleevent.replyafter cross-document navigation is dropped without throwing; (11) a hash change during a pending request does not drop the reply; (12) a cancelled renderer-initiated navigation keeps IPC usable; (13) reply with unserializable args throws, and reply after render-frame disposal throws (drop-versus-throw boundary recorded as ▲). Doc-sentence entries are red-until-implemented cells in the X01-T3 representation (expected fail, implementing-ticket key named: entries 1, 3, 4 and 5 F04-T3, entry 2 F04-T11, entries 6 and 7 F04-T4) validated by the X01-T4 manifest owner.Key interfaces:
- KEL-74 cell schema; fixture triplet (main, preload, page) run under Keld;
- X01-T3 pin, citation and red-until-implemented rules;
- X01-T4 shared manifest validator and execution admission.
Acceptance criteria:
- Every doc-sentence entry is a red-until-implemented KEL-74 cell in the X01-T3 representation: expected status fail with its implementing-ticket key, a mapped test that asserts the current behaviour and passes, and a flip to pass in the implementing change; the required gate stays green; no entry is skipped, ignored, retried or silently red
- Every doc-sentence entry quotes the pinned Electron v44.4.5 sentence it asserts with the sentence digest; every entry without a sentence (8–13) is labelled observed-only and carries expected status unknown
- Every cell's oracle revision equals the corpus pin fixed by the X01-T3 pin rule (the v44.4.5 tag commit), the manifest passes the X01-T4 validator, and no cell cites Electron 44.3.0 or the KEL-75 snapshot commit
- The three navigation-generation entries required by the F04-A4 resolution (entries 10, 11, 12) are present
- No entry asserts a timing value or a performance number
- No sendSync, returnValue, invoke/handle or exposeInIsolatedWorld entry is in this set (owned by F04-T15, F04-T14, F04-T5)
- Negative control: Changing a cell's runner assertion from an expected status to skip makes the X01-T4 manifest validator fail
- Negative control: Setting an observed-only entry (for example entry 8) to expect pass without a doc citation makes the X01-T4 validator reject the manifest
- Negative control: Removing the implementing-ticket key from a red-until-implemented entry makes the X01-T4 validator reject the manifest
- Negative control: Deleting the mapped test of entry 5 (senderFrame) makes execution admission fail because the cell names an unregistered test target
Out of scope:
- Implementation; Zettlr-only entries (invoke/handle, sendSync, function-valued returns) which land as the first acceptance criterion of F04-T14, F04-T15 and F04-T16; recorded Electron transcripts and BEHAVIOR_MATCH comparison of observed-only entries 8–13 (F04-T20, after the X01-T1 two-arm harness).
Tracker of record and claim location: see "Ownership and gates" in the issue body.
Parent
Epic #463 · Map #391 · Unit F04 · Kind:
conformance· Tier: Tier 1 · Maturity target: L2 · Size: M · Milestone:first-proofWhat to build
Land red-until-implemented KEL-74 cells for the draw.io first-proof IPC path. Doc-sentence entries (ipc-renderer.md, ipc-main.md, ipc-main-event.md, ipc-renderer-event.md, context-bridge.md at v44.4.5): (1)
ipcRenderer.sendargs reach anipcMain.onlistener by structured clone; (2)sendthrows synchronously for Function, Promise, Symbol, WeakMap, WeakSet; (3)ipcMain.oncefires once andipcMain.removeListenerstops delivery; (4)event.replyreaches the sending frame andwebContents.sendreaches anipcRenderer.onlistener of that WebContents; (5)senderFrame.urlequals the loaded document URL andsenderFrameis null after the frame navigated or was destroyed; (6)IpcRendererEvent.senderis the ipcRenderer instance andportsis an empty list when nothing was transferred; (7) contextBridge rows: functions proxied (argument position, including a callback nested in an object argument, called N times from the preload world), other values copied and frozen, Symbol dropped, Error copied with message. Observed-only entries (no v44.4.5 doc sentence states them, so under the X01-T3 uncited-cell rule they land with expected statusunknown; the recorded-oracle comparison is F04-T20's, next milestone): (8) per-channel order of N sends; (9)webContents.sendwith no renderer listener is dropped, not queued for a later listener; (10) staleevent.replyafter cross-document navigation is dropped without throwing; (11) a hash change during a pending request does not drop the reply; (12) a cancelled renderer-initiated navigation keeps IPC usable; (13) reply with unserializable args throws, and reply after render-frame disposal throws (drop-versus-throw boundary recorded as ▲). Doc-sentence entries are red-until-implemented cells in the X01-T3 representation (expected fail, implementing-ticket key named: entries 1, 3, 4 and 5 F04-T3, entry 2 F04-T11, entries 6 and 7 F04-T4) validated by the X01-T4 manifest owner.Acceptance criteria
Negative controls (each names the one mutation that must fail)
External predecessors (outside this tracker)
Ownership and gates
docs/agents/workflow.md§ Tracker issue (rule lands with docs(agents): record the #517 tracker-of-record rule in root AGENTS.md and the workflow claim protocol #520). Linear reference: KEL-80 (Backlog) carries a link to this issue.The authoritative agent contract is the latest Agent Brief comment on this issue (triage skill); this body is the planning record.
Out of scope
Implementation; Zettlr-only entries (invoke/handle, sendSync, function-valued returns) which land as the first acceptance criterion of F04-T14, F04-T15 and F04-T16; recorded Electron transcripts and BEHAVIOR_MATCH comparison of observed-only entries 8–13 (F04-T20, after the X01-T1 two-arm harness).
Notes
Startable once X01-T3 and X01-T4 land and the KEL-80 reference link exists. Agents cite the #517 owner record as the documented exception to the Linear-only claim protocol in root AGENTS.md and the workflow until the .agents/instructions.md amendment lands (the owner record names that gap itself).
Change log (doctrine-audit repair, 2026-10-07)