You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Renderer-only CDP observation is insufficient for reconstructing an Electron application. The capture must connect activity across process roles while preserving the distinction between observation and inferred ownership.
External effects are blocked and recorded as attempted/denied by default.
Cancellation and cleanup terminate only owned processes and remove the isolated profile.
Documentation includes reconstruction-oriented main/preload/renderer and deep-link examples.
Capture architecture
Use multiple evidence sources and label their authority rather than flattening them into one inferred stream:
Electron/main-process hooks for application, window, WebContents, session, protocol, shell, updater, and utility-process APIs;
debugger/CDP attachment for renderer targets, frames, console, network, and crash state;
preload instrumentation for contextBridge and IPC boundaries when injection is explicitly enabled;
process-tree observation for OS processes, exits, signals, and stdio;
passive filesystem/network observation where already authorized;
static application-graph correlation as a separate inference layer.
Every normalized event must retain source, capture method, authority, raw Evidence reference, and any loss/attach caveat.
Identity and lifecycle state
Define stable capture-scoped identities for app, session, window, web_contents, frame, renderer_process, utility_process, child_process, preload, and download. Never correlate solely by PID because renderer processes can be reused and IDs can outlive or precede attachment.
Lifecycle events should include both attempted and completed phases, for example window.close_requested versus window.closed, navigation.requested versus did_finish_load, and shell.open_external_attempted versus blocked/completed.
IPC and boundary evidence
Cover ipcMain.on/once/handle, ipcRenderer.send/sendSync/invoke/postMessage, webContents.send, ports/message channels, and contextBridge exposure where observable.
Preserve channel values only when allowed; otherwise retain stable keyed hashes plus shape metadata.
Record direction, sync/async mode, call/result/error phase, sender frame/document identity, receiver registration candidate, and transfer-list metadata.
Do not pair a send with a handler merely because their channel literals match. Report unique, ambiguous, contradicted, and unobserved candidates separately.
Treat dynamic channels, custom wrappers, sandboxed preloads, isolated worlds, and late attachment as explicit limitations.
Interception policy
Classify effects as observe, allow, block, or emulate. Defaults should be conservative:
external navigation, shell opens, downloads, updater mutation, relaunch, OS integration, and non-loopback traffic: block and record;
loopback fixtures and isolated-profile writes: allow only within the active grant;
permission/certificate/dialog handlers: return configured deterministic responses and record both request and decision;
application quit/crash: observe and preserve teardown evidence without restarting unless the scenario explicitly requests it.
An interception must preserve the attempted arguments and synthetic outcome; it must not masquerade as a real external success.
Failure and completeness model
Return typed states such as complete, partial_attach, unsupported_electron, hook_conflict, target_exited, capture_truncated, cancelled, and cleanup_failed. A capture manifest should state which roles and event families were observed, unavailable, blocked, or possibly missed.
Version and fixture matrix
Test supported Electron major ranges and document the compatibility strategy for API drift.
Include context isolation on/off, sandbox on/off, multiple windows, cross-origin frames, renderer reuse/crash, utility processes, custom protocols, deep links before/after ready, and packaged ASAR applications.
Include negative fixtures proving blocked shell/updater/download effects did not occur.
Include a late-attach fixture that produces partial evidence without a false completeness claim.
Capture Electron BrowserWindow/WebContents lifecycle, main/preload/utility processes, navigation/permission/download/crash/external-open events, deep-link delivery, and main/renderer errors.
Part of #64.
Reconstruction requirements
Renderer-only CDP observation is insufficient for reconstructing an Electron application. The capture must connect activity across process roles while preserving the distinction between observation and inferred ownership.
Capture at least:
Evidence model
Safety
Acceptance criteria
Capture architecture
Use multiple evidence sources and label their authority rather than flattening them into one inferred stream:
Every normalized event must retain source, capture method, authority, raw Evidence reference, and any loss/attach caveat.
Identity and lifecycle state
Define stable capture-scoped identities for
app,session,window,web_contents,frame,renderer_process,utility_process,child_process,preload, anddownload. Never correlate solely by PID because renderer processes can be reused and IDs can outlive or precede attachment.Useful edges include:
Lifecycle events should include both attempted and completed phases, for example
window.close_requestedversuswindow.closed,navigation.requestedversusdid_finish_load, andshell.open_external_attemptedversusblocked/completed.IPC and boundary evidence
ipcMain.on/once/handle,ipcRenderer.send/sendSync/invoke/postMessage,webContents.send, ports/message channels, and contextBridge exposure where observable.Interception policy
Classify effects as
observe,allow,block, oremulate. Defaults should be conservative:An interception must preserve the attempted arguments and synthetic outcome; it must not masquerade as a real external success.
Failure and completeness model
Return typed states such as
complete,partial_attach,unsupported_electron,hook_conflict,target_exited,capture_truncated,cancelled, andcleanup_failed. A capture manifest should state which roles and event families were observed, unavailable, blocked, or possibly missed.Version and fixture matrix
Delivery slices