Frontier cockpit, fleet inspect, idle recovery, and oracle doctrine - #62
Merged
Conversation
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>
… 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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Release-prep (this PR tip)
TestFormatDaemonRestartedAndWorkerIdleforAct:+[silent]product copy (was red vs CI)Version / brew
Version = "dev"; release CI injects via-ldflagsfrom tagTest plan
go test -tags "sqlite_preupdate_hook sqlite_fts5" ./...greengh release create v0.11.0→ release.yml → brew upgrade →jevonsd --version= 0.11.0Notes