LearnNewsExamplesServices
Frontmatter
id15316
titleFM cockpit mailbox pane + Fleet read seam — the delivered S1 view half (split from #15270)
stateClosed
labels
enhancementai
assigneesneo-opus-vega
createdAt12:19 AM
updatedAt6:47 AM
githubUrlhttps://github.com/neomjs/neo/issues/15316
authorneo-opus-vega
commentsCount2
parentIssue15270
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt6:47 AM

FM cockpit mailbox pane + Fleet read seam — the delivered S1 view half (split from #15270)

Closed Backlog/active-chunk-6 enhancementai
neo-opus-vega
neo-opus-vega commented on 12:19 AM

Context

The truthful partial leaf of #15270, split at review. PR #15312's Cycle-1 review (RA-1 scope correction) established that #15270's first AC — the drilled resident's active inbox via #15269 — cannot be honestly closed by this PR, because the last mile is an authentication boundary, not a wiring gap.

The falsifier (V-B-A'd from both sides, independently):

  • dispatchFleetRequest receives no request-bound identity — zero hits for identity / RequestContext / auth / token.
  • fleetBridgeServer is loopback-only but unauthenticated, and emits Access-Control-Allow-Origin: *.
  • installFleetBridge sends only Content-Type; no viewer credential crosses the browser→Fleet boundary.
  • The local-bearer MCP precedent authenticates possession without resolving an identity, so it does not supply the missing viewer fact.

Loopback locality is not a viewer identity. #15269's landed RA-2 contract is explicit: no binding ⇒ no admission claim. Binding a fixed viewer, or trusting caller-supplied text, would turn local reachability into ambient CAN_READ_INBOX_OF authority — the caller-authored-provenance shape #15269 and #15309 both exist to kill, rebuilt one layer lower and blessed by a green test.

This ticket captures exactly the scope PR #15312 delivers. #15270 stays open owning the last mile.

The Problem

The S1 view half is built and the Body↔Brain read seam exists, but nothing may claim an admitted production read until an authenticated Fleet viewer ingress exists. Without a split, either the PR overclaims its close-target or finished, reviewed work sits unlanded behind a security boundary that is not its own.

The Architectural Reality

  • View: apps/agentos/view/fleet/MailboxPane.mjs + its AgentDetail tab host — renders, never fetches.
  • Read seam: FleetControlBridge.fleetMailboxMirror() over the injected mailboxMirrorSource DI slot, mirroring the activitySource precedent. The bridge routes; it never imports MailboxService and never authors an admission fact.
  • The source stays deliberately unwired: the verb degrades through the adapter's own pure half, so the not-wired envelope is shape-identical to a live one and reads as honestly unavailable rather than as an empty inbox.
  • Admission remains the Memory Core primitive's fail-closed CAN_READ_INBOX_OF gate, decided one layer down (#15269, merged).

Acceptance Criteria

  • AgentDetail grows the countless Mailbox tab; the pane renders flat-chrono with thread-collapse from one adapter snapshot.
  • Four honest states (unobserved / denied / degraded / empty), never a fabricated success; the degrade line names no cause it cannot know.
  • Subject possession: a snapshot cannot survive a re-seat onto a different resident; a same-subject refresh keeps it.
  • Generation safety: a stale in-flight read cannot land on a later subject (proven by resolving the earlier read LAST).
  • Fail-closed envelope validation: an unrecognized payload degrades to unobserved, never a fabricated empty inbox.
  • Bounded paging: both edges are real controls carrying their offset; disabled-not-hidden at the range edge; the pane requests, the owner reads.
  • Wall-clock freshness: the mailbox chip ages off the owner clock; a fresh mailbox cannot stay fresh while its snapshot rots.
  • Accessible view-only controls: display-state affordances are native buttons with named state; keyboard-activated in the NL e2e.
  • Structural absence of mailbox mutations: no mark-read, no reply, no data-entry element anywhere in the vdom.
  • The NL proof may drive the injected Fleet seam and must NOT claim a real admitted Memory Core read.

Out of Scope

The authenticated last mile — owned by #15270 and its successor boundary: authenticated Fleet viewer ingress → per-request RequestContext binding → mailboxMirrorSource wiring → end-to-end admitted read. Also out: dock-liftability, chat/actionable evolution (v13.3), archive browsing.

Related

Parent: #15270 (stays open; owns the last mile) · Epic #14560 · #15269 (merged; the Brain half) · D#15249 (graduated record) · #15254 (registry) · PR #15312.

Sweeps: latest-open checked 2026-07-16T22:18Z (latest #15315) — no equivalent; mailbox pane read seam all-state search surfaces only the parent epic. Reviewer-directed split, not self-triage.