Skip to content

Studio: the Live view is a 3D team floor, and the pipeline fills the seats a team lacks - #37

Merged
piotrlaczkowski merged 2 commits into
mainfrom
claude/teams-page-pipeline-composition-d6v8vx
Sep 10, 2026
Merged

piotrlaczkowski merged 2 commits into
mainfrom
claude/teams-page-pipeline-composition-d6v8vx

Conversation

@piotrlaczkowski

Copy link
Copy Markdown
Contributor

What

The Live page's centre is no longer a log. It is a floor: one table per team with the manager at the head and the team's board on the wall behind them, members at monitors that light up when they work, tickets on the table threaded to whoever holds them, contract conduits with packets between tables (amber when a consumer waits), gate-colored rims. Several people can work at once, each unmistakably (lit monitor, rising code, a pool of light, a breathing ring, a pop-out naming the ticket and what they just said); idle people glance at whoever is working. The pipeline's own phase agents (planner, splitter, architect…) stand on a stage at the back under a screen naming the current phase.

The floor moves with the run: a dispatch arc when a manager sends someone onto a ticket, a spark on a handoff, a drop when a ticket appears, a burst when one finishes or fails. Every change slides into a feed in a reserved side column. Clicking a person or a ticket opens its dossier (status, manager or reports, tickets, recent log lines; every name a link) and the camera glides to it. Orbit, zoom, follow the worker, spin.

  • three.js via react-three-fiber, lazy-loaded as its own chunk only where WebGL exists; a flat SVG map draws the same model otherwise or on request, with the same dossier and feed; both honor reduced motion.
  • Everything drawn comes from a pure floor model (floorModel.ts) derived from the org chart, the board, the log and the composition, so the stages stay renderers and the derivation stays tested. A lone team gets its own table with every ticket.
  • The phase rail is a journey track; the five side tabs became one activity column with the log by default. The squads and tasks polls settle together so the floor never flashes a crew table before its teams arrive.

Seats the pipeline fills: when a pipeline needs a seat a team did not name (a test phase, no tester), composer.FillSeats records who takes it and where they came from (seats with source, gaps in words). The composition, the preselect preview, the run setup panel, the charter log, the Teams page and the floor all show it — the borrowed tester sits at the team's table, drawn as such.

Verification

  • go test ./..., -race on composer/orchestrator/server, coverage floor, go vet, gofmt, golangci-lint (only the pre-existing autoresearch gosec finding).
  • Web: lint (0 errors), typecheck, 272 vitest tests, production build.
  • Visual smoke test in headless Chromium with WebGL against a two-team demo and a one-team demo, driven by a scripted run stream: 3D scene, map fallback, dossiers, feed, stage, follow mode, dark theme; no console errors beyond the optional self-hosted fonts.

Docs

docs/studio.md (The Live floor), docs/squads.md (seats the pipeline fills), docs/changelog.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_011RfCkcsbJZgHoQLzwkqFUL


Generated by Claude Code

…seats a team lacks

The Live page's centre is no longer a log. It is a floor: one table per
team with the manager at the head and the team's board on the wall behind
them, members at monitors that light up when they work, tickets on the
table threaded to whoever holds them, contract conduits with packets
between tables (amber when a consumer waits), gate-colored rims. The floor
moves with the run — a dispatch arc when a manager sends someone onto a
ticket, a spark on a handoff, a drop when a ticket appears, a burst when
one finishes or fails, idle people glancing at the worker — and every
change slides into a feed at the edge. Clicking a person or a ticket opens
its dossier (status, manager or reports, tickets, recent log lines; every
name a link) and the camera glides to it. Orbit, zoom, follow, spin.

The scene is three.js via react-three-fiber, lazy-loaded as its own chunk
only where WebGL exists; a flat SVG map draws the same model otherwise or
on request, with the same dossier and feed. Both honor reduced motion.
Everything drawn comes from a pure floor model (floorModel.ts) derived
from the org chart, the board, the log and the composition, so the stages
stay renderers and the derivation stays tested. A lone team gets its own
table with every ticket, not a "pipeline crew" island.

Around the floor: the phase rail is a journey track with progress and the
five side tabs became one activity column with the log by default; the
squads and tasks polls settle together so the floor never flashes a crew
table before its teams arrive.

Seats the pipeline fills: when a pipeline needs a seat a team did not name
(a test phase, no tester), composer.FillSeats records who takes it and
where they came from (`seats` with `source`, `gaps` in words). The
composition, the preselect preview, the run setup panel, the charter log,
the Teams page and the floor all show it — the borrowed tester sits at
the team's table, drawn as such.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011RfCkcsbJZgHoQLzwkqFUL
@piotrlaczkowski
piotrlaczkowski merged commit aef8eba into main Sep 10, 2026
7 checks passed
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.

2 participants