Files
lumbridge-code/spikes
Metal AgentandClaude Opus 5 834b73e831 Stop the shell asserting things that are not true
The footer was rebuilt on a real ledger two commits ago. The rest of the shell
was never audited the same way, and a multi-agent pass over it found the same
class of defect everywhere else:

- A sidebar card reading "Buzz · lumbridgecode / connected · signed identity"
  in the success colour. lumbridge-buzz is not a dependency of this binary.
- A saved host "amd-server", and a WORKTREES section with five entries and a
  working selector, backed by a lumbridge-git crate that does not exist.
- A first-run workspace of six panes announcing "Codex · runtime / metal ·
  Tailscale SSH", "Claude Code · UI / MacBook Air · local" and a Pi pane on a
  saved host. Every one of them was a /bin/sh, and the machine names were this
  developer's.
- A declared "Pi · spark-1 · laguna-s-2.1" usage profile with no probe of any
  kind behind it. Declaring a profile promises the gap is real; that one could
  never be filled.
- FOOTER_CENTER = "Codex · ChatGPT subscription · 62% window remaining",
  rendered by the Floem shell. Decision 0013 names that exact form as the thing
  that must never be shown.
- The header's PTY count painted green unconditionally, so "0/5 LIVE PTYS" read
  as success. runtime_rows already had the right rule three hundred lines away.
- A browser panel describing itself as "An isolated system-web-engine surface"
  on the chooser screen where you pick it. There is no web engine in this build.

First run is now three real local shells, and a pane claims a harness when one
has actually been launched into it. The seed mapping stays for when that is
possible.

Also removes the only unsafe block in the shell: a test set LUMBRIDGE_*_PROBE
through the environment, which needs unsafe under edition 2024 and silently
disabled both probes for every other test in the binary. Replaced with
UsageFeedOptions passed to start_with.

Clippy pedantic on the spike goes 79 -> 15 against root CI's -D warnings, so
graduating it into the workspace is not gated on a warning cleanup. The four
remaining too_many_lines are the render split, which the sidebar work needs to
do anyway.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 22:54:24 -07:00
..

Native UI spikes

These disposable applications render the same fixture through GPUI and Floem. They are a decision instrument, not product code. The root workspace excludes this nested workspace so normal Lumbridge CI does not download or compile both UI frameworks.

The GPUI spike uses published gpui 0.2.2. The Floem spike pins upstream commit 778bb5f2aa08429e579ee2e6ac97e84fbf18b618; the crates.io floem 0.2.0 package lags the current API substantially enough that comparing it to current GPUI would not be representative.

Both spikes must preserve the same information architecture:

  • workspace/sidebar and remote host state;
  • two rows of three busy surfaces;
  • local and remote terminal/agent panes;
  • native Markdown editor/preview and browser placeholders;
  • connection, harness, usage, and burn context in the footer.

GPUI also has an integration mode with one real local PTY owned by lumbridge-runtime; the other five surfaces remain deterministic. Floem and the shared model retain the all-deterministic mode for like-for-like framework comparison. GPUI feeds raw output through lumbridge-terminal and sends encoded keyboard input and terminal protocol replies through the bounded runtime actor. Its visual adapter coalesces VT cells into native styled runs, paints cursor shapes, and resizes the engine and PTY from the middle 60% of a responsive one/three/five-panel workspace. Every panel owns separate context and decision regions. Retained-history navigation is wired; text selection and mouse input remain intentionally unfinished.

Build independently:

cargo build --release --manifest-path spikes/gpui-shell/Cargo.toml
cargo build --release --manifest-path spikes/floem-shell/Cargo.toml

Each candidate is an independent Cargo workspace. GPUI pins taffy 0.9.0 while current Floem requires taffy 0.9.2; putting them in one comparison workspace creates an artificial resolver conflict and would let one candidate's dependency decisions distort the other candidate's build.

The comparison records release build time, binary size, startup, idle RSS, six-pane streaming frame time, key-to-present latency, accessibility/IME, window behavior, browser-child integration, packaging, dependency count, and license closure on macOS, Ubuntu, and Omarchy. A build is not adoption: GPUI's complete dependency-license closure remains a hard gate.