LearnNewsExamplesServices
Frontmatter
id13028
titleOS-window drag reintegration: pull a real popup back into a Neo layout
stateClosed
labels
enhancementaiarchitecture
assigneesneo-gpt
createdAtJun 13, 2026, 12:29 AM
updatedAtJun 21, 2026, 2:16 AM
githubUrlhttps://github.com/neomjs/neo/issues/13028
authorneo-fable
commentsCount2
parentIssue13012
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 13, 2026, 4:38 PM
milestoneHarness M2: First Neo Widget

OS-window drag reintegration: pull a real popup back into a Neo layout

Closed v13.1.0/archive-v13-1-0-chunk-1 enhancementaiarchitecture
neo-fable
neo-fable commented on Jun 13, 2026, 12:29 AM

Context

Group B of the infinite-canvas window-choreography gap, split from #13025 per @neo-gpt's intake hold (2026-06-12) — the knowledge capture for the whole lane (what already ships in apps/colors + the agentos prototype: one continuous drag across embodiment states, pane→popup→pane, the component staying one live App-Worker object) lives in #13025's "what already works" section and is not duplicated here. Under Epic #13012, window-manager lane.

The Problem

The shipped choreography's missing inverse entry point: grab the real OS popup window (its native title bar) and drag it over a connected Neo app → it should reintegrate into the layout with live slide-resort, becoming a pane again.

The hard part (operator-named: "not trivial, but possible"): during an OS-titlebar drag the browser receives no pointer events — only window-position changes. Detection must ride the geometry stream, and "drop" must be inferred (there is no mouseup to observe).

The Architectural Reality

  • Web mode: Neo.main.addon.WindowPosition already streams high-frequency geometry updates into Neo.manager.Window (the God View; getWindowAt(x, y) intersection testing) — a window-being-dragged-over-an-app is detectable as position-delta + overlap inference.
  • Shell mode (Electron, decided at #13012): BrowserWindow will-move / move / moved events replace polling — cheaper, never stale; global cursor via the screen API strengthens intent inference.
  • Drop-intent inference is a NEW contract — candidate mechanisms: position settle (dwell-time), drop-zone hover dwell, modifier key. The implementing PR chooses + documents one.
  • The reintegration target flow (popup → pane with slide-resort) ALREADY ships — this leaf builds the detection/entry, then hands off to the existing pipeline.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
Neo.main.addon.WindowPosition (geometry stream) src/main/addon/WindowPosition.mjs (#8164 lineage) stream consumable as drag-intent signal; emission cadence + payload documented as a contract existing consumers unchanged JSDoc + addon docs shipping source
Neo.manager.Window (God View) src/manager/Window.mjs NEW drag-intent inference API (window-over-app detection) + reintegration entry handoff to the shipped popup→pane flow absent detection = no-op (popup stays a window) JSDoc God-View source; #9498
Electron shell move events #13012 Electron decision + build-root leaf will-move/move/moved consumed when the shell is present web mode falls back to position-delta polling shell leaf docs Electron API
Drop-intent inference NEW contract (this leaf) settle/dwell/modifier — mechanism chosen + documented in the implementing PR conservative default: no accidental reintegration PR + JSDoc operator assessment

Rows are altitude-honest; method-level shapes resolve at implementation from the shipping source, Ledger reconciled in the PR.

Acceptance Criteria

  • Dragging the real popup (OS title bar) over a connected Neo app is detected — geometry deltas (web) and/or Electron move events (shell).
  • Drop-intent inference reintegrates the popup as a pane with live slide-resort via the existing shipped flow; the mechanism is documented in the PR.
  • No accidental reintegration: moving a popup across an app without drop intent is a no-op (the conservative default).
  • Degradation honesty: whatever web mode cannot detect is explicitly documented, not silently absent.
  • Contract Ledger reconciled against implemented surfaces in the PR.

Out of Scope

  • Group A popup terminal drop (#13025 — independent leaf, claim-ready).
  • Snap/dock zone visuals.
  • The Electron build root itself.

Related

  • Sibling: #13025 (Group A + the lane's canonical knowledge capture). Parent: Epic #13012. Milestone: M2 → M4 arc.
  • Substrate lineage: #8164, #9498, src/manager/Window.mjs, src/main/addon/WindowPosition.mjs.
  • Intake provenance: @neo-gpt's source-level split analysis (#13025 intake hold, 2026-06-12).

Origin Session ID: c4caff26-d818-486b-8663-19b85ac3cc11 Retrieval Hint: "OS window titlebar drag reintegration popup to pane geometry delta drop intent inference no pointer events"

tobiu referenced in commit 91ff528 - "feat(dashboard): infer native popup reintegration (#13028) (#13085)" on Jun 13, 2026, 4:38 PM
tobiu closed this issue on Jun 13, 2026, 4:38 PM