Skip to content

Frontier cockpit, fleet inspect, idle recovery, and oracle doctrine - #62

Merged
marcelocantos merged 183 commits into
masterfrom
release/v0.11.0-batch
Aug 3, 2026
Merged

Frontier cockpit, fleet inspect, idle recovery, and oracle doctrine#62
marcelocantos merged 183 commits into
masterfrom
release/v0.11.0-batch

Conversation

@marcelocantos

Copy link
Copy Markdown
Owner

Summary

Bundles ~180 local-master commits since v0.10.0 for the v0.11.0 ship window (squash-only path: one PR for unpushed work + release-prep).

Headlines

  • Frontier cockpit — live table, InstantTip cards, Frontier Graph pack, play-to-spawn
  • Fleet inspect — transcript microcosm, WS multiplex, multi-provider Claude session discovery
  • Fleet ops — auto-reap finished workers, idle nudge + PO recovery, post-restart dual path, portfolios
  • Composer — interject/pop, persisted queue, paste-image hydrate, silent-drop fixes
  • Doctrine/oracles — oracle-first, daily-path achieve, ambient RSI, file→spawn, status language

Release-prep (this PR tip)

  • Fix TestFormatDaemonRestartedAndWorkerIdle for Act: + [silent] product copy (was red vs CI)
  • agents-guide truth-pass: pluggable providers / MCP client steps (T148/T213)
  • STABILITY snapshot line for v0.11.0 window

Version / brew

  • In-source Version = "dev"; release CI injects via -ldflags from tag
  • Planned tag after merge: v0.11.0 (MINOR only)

Test plan

  • Local: go test -tags "sqlite_preupdate_hook sqlite_fts5" ./... green
  • CI green on this PR
  • After merge: gh release create v0.11.0 → release.yml → brew upgrade → jevonsd --version = 0.11.0

Notes

  • Squash collapse of ~180 commits is intentional under squash-only merge strategy
  • Residual: root NOTICE for third-party attribution still missing (pre-existing; no copyleft)

marcelocantos and others added 30 commits August 3, 2026 14:52
Owner direction: collapse keeps full render and CSS-clips; gradient
pocket + bottom chevron tab; no Show more text; assistant border-only
talk bubble. Update design pad and bullseye acceptance.
Replace truncated-source re-markdown previews with CSS max-height clip of
the full marked/HTML body. Add bottom gradient pocket and chevron-only
edge tab (no Show more/less). Assistant bubbles use user geometry with
border only. Hermetic collapse-test rewritten for the clip model; T66/T77
semantics preserved.

Co-Authored-By: Grok <noreply@x.ai>
Collapsed tall bubbles read as a pocket: fade-to-dark scrim flush to the
inner bottom border, chevron tab hard-merged with the outer bottom edge,
timestamp outside under the border. Short messages never get tab/fade.
Hermetic collapse-test covers geometry + dark scrim + short-no-tab.

Co-Authored-By: Grok <noreply@x.ai>
Hang-off expand tab flipped into the bubble (bottom:-1px tongue);
dark scrim height now var(--radius) instead of 2.75rem. Hermetic
geometry asserts updated; clip model unchanged.

Co-Authored-By: Grok <noreply@x.ai>
After e8a96d4 inside-edge tab, chevrons were inverted: collapsed now ▾
(reveal more), expanded ▴. Chevron font-size 10px → 13px; tab chrome
unchanged.
Halve scrim max opacity (0.45 → 0.22); keep radius-height fade-to-dark.
Raise .msg-expand-tab z-index above .msg-clip-fade for user and jevons.
Hermetic collapse-test asserts alpha range and z-order both roles.

Co-Authored-By: Grok <noreply@x.ai>
Restore collapsible medium-tall user/assistant bubbles. The 1.5× ratio
was for preview-vs-full under the old truncated model; against a fixed
14rem clip box it required >21rem, so 14–21rem messages painted full
with no tab. Tall now means fullH > collapsedH + epsilon; probe width
uses the bubble outer box so wrap matches live layout. Hermetic
medium-tall fixtures must tab+clip when non-latest.

Co-Authored-By: Grok <noreply@x.ai>
Pocket tabs blend into #messages ground instead of surface/user-bg.

Co-Authored-By: Grok <noreply@x.ai>
Expand/collapse tabs, route-switch, and bubble mermaid toolbar buttons
use tabindex=-1 so Tab stays composer-first. focusComposer() returns
focus after send, expand click, route-switch, and target-aside auto-close.
Hermetic greps cover wiring; T106 var(--bg) tab background preserved.

Co-Authored-By: Grok <noreply@x.ai>
Queue follow-ups survive full page reload via localStorage
(load/save/serialize/deserialize in send_queue.js). Persist on every
mutation; boot restores and re-renders the strip. Soft reconnect already
left sendQueueState alone — hermetic greps lock that in. Residual:
text-only bodies (images not stored in queue items).
T136 dual-writes purpose=aside into the fleet registry on create, but
T95 maybeCloseTargetAside only closed local AttentionThreads state —
RHS 💡 filing rows lingered after overseer emitted the marker.

Add DELETE /api/asides/{id} (aside-only, refuse work/overseer) and
wire dismissFleetAside from maybeCloseTargetAside so selection returns
to main and the dual-written agent leaves the live tree.
Standing rule: new non-design frontier leaves get a worker under
parent=jevons-po immediately (same operational cycle); skip design-gated
T112/T67/T29-class. Surfaces: persona, AGENTS, agents-guide, FleetStandingBrief.
Hermetic oracles grepping those markers.

Co-Authored-By: Grok <noreply@x.ai>
Pure ComposerKeys.classifyEnterAction policy: Ctrl+Enter → interrupt
send (never Alt); empty Alt+Enter → pop_last from msgHistory; non-empty
Alt+Enter → noop so Firefox Alt+Enter cannot steal immediate-send.
Hermetic composer_keys_test covers chords + index wiring; placeholder
documents the bindings.
Research/decision note at docs/analysis/voice-agent-builder-eval.md:
do not adopt Voice Agent Builder as the primary stack (contact-center
product shape, dual-brain MCP risk, telephony mismatch for car iPad,
same short-session continuity problem). Prefer client→Grok S2S +
ephemeral tokens (T22 shape) when full-duplex resumes. Point
architecture-current Voice section at the note.

Co-Authored-By: Grok <noreply@x.ai>
Specify feeds/ui/mcp over describe, ViewNode vocabulary, MCP endpoint,
and launch|connect transport. Land internal/provider kernel with
reference mock (pulse feed, mock.status surface, mock_ping) and go test
oracles for registration, cursor/no re-ingest, loop-safety, UI action
round-trip, MCP visibility, no per-provider hardcodes, and doc ratchet.

Co-Authored-By: Grok <noreply@x.ai>
ensureFenceNewlines only inserts a blank line when a smushed fence is
already line-terminated (```/```lang followed by newline). Mid-prose
illustrations stay on one line so marked cannot open an empty/broken
block through EOF. Keeps T145 real smush repair (prose:```lang\n…).

Hermetic: markdown_normalize_test.js T146 mid-prose fixtures + existing
T145 cases.

Co-Authored-By: Grok <noreply@x.ai>
Research/decision note at docs/analysis/voice-agent-builder-eval.md:
do not adopt Voice Agent Builder as the primary stack (contact-center
product shape, dual-brain MCP risk, telephony mismatch for car iPad,
same short-session continuity problem). Prefer client→Grok S2S +
ephemeral tokens (T22 shape) when full-duplex resumes. Point
architecture-current Voice section at the note.

Co-Authored-By: Grok <noreply@x.ai>
marcelocantos and others added 28 commits August 3, 2026 23:10
… open-mission short resume

daemon-restarted goes to each parent PO and the overseer with reattached
children summary (name/target/status/phase). Open-mission work agents get
a fire-and-forget T207 brief-or-verify resume (not POs/aside/missionless).
worker-idle remains transition-only to parent PO. Hermetics for emit
targets, eligibility, and post-restart skip of PO.

Co-Authored-By: Grok <noreply@x.ai>
Partition unachieved depends_on graph into connected components; each
component is its own Mermaid diagram, size-1 isolates share an orphans
block, and the ~90% panel packs blocks in a wrap-grid. Rejects one mega
subgraph strip / Mermaid-native TD alone. Hermetics cover component split
and pack=wrap-grid source shape (Go + JS).

Co-Authored-By: Grok <noreply@x.ai>
Owner repro: jevons-po RHS Transcript showed raw **Prefer option 2**
on role=user event/fleet injects wrapped in <user_query>. T217 residual
left user plain; most inspect content is injects — owner-visible failure.

Inspect-only: unwrap user_query, marked-parse MD-shaped/inject user turns
(escape raw HTML first for XSS). Main chat paintBody user path unchanged.
Hermetic: T221 Prefer option 2 list → strong/list; paintBody still non-MD.
Near-duplicate open leaves attach to the existing 🎯 id on
jevons_target_file / RSI filer (force for deliberate split).
agent_start and frontier play refuse second implementers and
set_aside/achieved kickoff (force_engage residual).

Co-Authored-By: Grok <noreply@x.ai>
Ops events (daemon-restarted / worker-idle) instruct POs to prefix
status-only replies with [silent]. notify() drops those so owner chat
is not spammed with "workers fine / no continue needed". Real escalations
omit the marker and still reach the overseer.
Hard-reload was splitting one overseer answer because CoalesceStreamLines
sealed on any non-assistant line (user mid-stream). Stamp stream_id on
assistant/progress wire fragments; coalesce and client join by id; do not
seal open streams on owner user inserts. Hermetics: user-mid-stream one
seal, dual stream_id, stampStreamID, chat_events join-by-id.

Local master only (T104).
Explicit jevons_target_file / RSI filer always allocates a new bullseye
id again (no silent attach by name/acceptance). agent_start second-
implementer refuse stays independent on target_id.

Co-Authored-By: Grok <noreply@x.ai>
Upload stores full-res and generates JPEG thumbs under images/thumbs/.
Journal keeps [image: id] markers; browser hydrate/render uses
/api/images/{id}/thumb (compact previews), not blob: or full-res.
Hermetic: upload → journal marker → history/replay → thumb GET.
Offline or closed chat wire enqueues to the visible send-queue strip;
composer clears only after wire accept or enqueue. transport.send returns
boolean; seed-only empty still no-ops without error.
Progressive hydrate paints .msg.user into the DOM without pushing
msgHistory, so empty Alt+Enter could classify as pop_last then silently
no-op. Resolve last owner from DOM fallback + resync history after
hydrate; hermetics cover the empty-history product path (not only
classifyEnterAction).

UI-only: hard-reload daily; no daemon restart.

Co-Authored-By: Grok <noreply@x.ai>
… latched

Quiet frontier re-render removed every .instant-tip (~8s poll), which felt
like an idle auto-timeout while the mouse sat still on the card. Skip
remount when anyHoverLatched; discardDetachedTips only unmounts non-latched
tips. Hermetics: no hide timer over tip; leave schedules hide; index gate.

Co-Authored-By: Grok <noreply@x.ai>
All 19 agent_lifecycle/kill lifecycle_errors in the ambient RSI window
were "agent is not registered" — double-kill after T165/T195 auto-reap.
Treat already-gone as outcome=ok (already_gone=true) so hygiene kills
no longer accumulate as RSI noise.

Oracle: go test ./internal/mcpserver -run 'AgentKill|CanKill' green.

Co-Authored-By: Grok <noreply@x.ai>
Product model: ONE axis-aligned rect = AABB(card ∪ id+name). Leave rect
dismisses immediately (HIDE_GRACE_MS=0). pointInHitRect is the only
predicate — no multi-element bridge, no grace-after-leave. Hermetics
cover leave-rect 0 grace, above/below rect, host→card stay open.
Product idle/restart bodies use Act: (not Your call) and teach
SilentResponsePrefix; hermetic test was still requiring the old
phrase and broke CI go test ./internal/mcpserver.

Also truth-pass agents-guide MCP/provider wording (T148/T213) and
bump STABILITY snapshot line for the v0.11.0 ship window.
CI cannot resolve replace => ../claudia. Publish path uses
v0.20.1-0.20260803130812-06025ef49a8c (TargetID, Connect*, PromptInFlight).
@marcelocantos
marcelocantos merged commit dee69b0 into master Aug 3, 2026
1 check passed
@marcelocantos
marcelocantos deleted the release/v0.11.0-batch branch August 3, 2026 23:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant