Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,30 @@

## Unreleased

### Fixed

- **The Live floor's team tables light up again.** A specialist working a
ticket of a team that did not name one (the pipeline's go-worker doing the
docs team's ticket) was lit at no table at all; it now works at that table,
drawn as lent, and its chair at home says where it went. The execute loop's
generic `worker`/`tester` lines count as the specialist's, not a phantom
at the command center; a start with no end (the split phase's "assigned
go-worker", the test phase's "verification pass") is dropped when the run
moves on instead of lighting that agent for the rest of the run; debug and
latency lines no longer make anyone "speak". Verified against a captured
two-team Studio run.

### Added

- **A floor with more life, and no two tables alike.** Idle agents chat with
a neighbour, scroll a phone, think, stroll a path of their own, and walk to
a shared break room behind the tables — a coffee bar and a foosball table —
where people from every table and the command center's crew meet. Managers
walk their table through the board. Tables applaud a ticket landing, wince
at one failing and turn to a teammate starting; a clicked agent waves back.
Every table has its own habits and its own party programme, every agent a
favourite pastime, and a long wait in a live run no longer puts a whole
table to sleep.
- **A command center and a floor that lives.** On the Live floor the harness's
agents wait inside a glass command center instead of crowding a table; whoever
is on walks out through its sliding door onto a pad, speaks, and walks back.
Expand Down
17 changes: 13 additions & 4 deletions web/src/components/Live/floor/FloorDossier.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ function AgentDossier({
</blockquote>
)}
{held && held.title && <div className="mt-1 truncate text-[10.5px] text-gray-500 dark:text-gray-400" title={held.title}>{held.title}</div>}
{!active && <MoodLine id={agent.id} since={agent.lastAt} running={running} partying={tableParties(team, floorShipped(floor, running))} now={now} />}
{!active && <MoodLine id={agent.id} since={agent.lastAt} running={running} partying={tableParties(team, floorShipped(floor, running))} now={now} table={team.id} manager={isManager} away={agent.away} />}
</section>

{/* Management */}
Expand Down Expand Up @@ -350,8 +350,17 @@ function TicketDossier({

/** A phase agent on the pipeline's stage: what phase, whether speaking, what was said. */
/** What someone idle is up to meanwhile — the same mood the stage draws. */
function MoodLine({ id, since, running, partying, now }: { id: string; since?: number; running: boolean; partying: boolean; now: number }) {
const mood = moodFor({ active: false, running, partying, since: since ?? now, now, seed: seedOf(id) });
function MoodLine({ id, since, running, partying, now, table, manager, away }: { id: string; since?: number; running: boolean; partying: boolean; now: number; table: string; manager?: boolean; away?: string }) {
const raw = moodFor({ active: false, running, partying, since: since ?? now, now, seed: seedOf(id), table: seedOf(table), manager, away: !!away });
// The dossier is open because they were clicked: say what they were up to, not that they are waving.
const mood = table === 'harness' && raw === 'football' ? 'dance' : table === 'harness' && raw === 'present' ? 'think' : raw;
if (mood === 'away') {
return (
<div className="mt-1 text-[10.5px] text-amber-700 dark:text-amber-300" data-testid="dossier-mood">
meanwhile: <span aria-hidden="true">📤</span> away, working at {away}
</div>
);
}
return (
<div className="mt-1 text-[10.5px] text-gray-500 dark:text-gray-400" data-testid="dossier-mood">
meanwhile: <span aria-hidden="true">{MOOD_GLYPH[mood]}</span> {MOOD_LABEL[mood]}
Expand Down Expand Up @@ -383,7 +392,7 @@ function StageDossier({ seat, floor, events, running, now, onSelect }: { seat: F
{seat.lastMessage && (
<blockquote className="mt-1 line-clamp-3 rounded border-l-2 border-brand-400 pl-2 text-[11px] italic text-gray-600 dark:text-gray-300">{seat.lastMessage}</blockquote>
)}
{!active && <MoodLine id={seat.id} since={seat.lastAt} running={running} partying={floorShipped(floor, running)} now={now} />}
{!active && <MoodLine id={seat.id} since={seat.lastAt} running={running} partying={floorShipped(floor, running)} now={now} table="harness" />}
</section>
<section className="rounded-md bg-gray-50 px-2 py-1.5 text-[11px] text-gray-600 dark:bg-gray-800/60 dark:text-gray-300" data-testid="dossier-management">
{seat.id === DISPATCHER_ID
Expand Down
4 changes: 4 additions & 0 deletions web/src/components/Live/floor/RigBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ export default function RigBody({ rig, look, pick, children }: { rig: Rig; look:
<meshStandardMaterial color="#fffbeb" roughness={0.9} />
</mesh>
</group>
<mesh ref={rig.phone} position={[0, -0.41, -0.03]} rotation={[0.3, 0, 0]} visible={false}>
<boxGeometry args={[0.1, 0.02, 0.17]} />
<meshStandardMaterial color="#111827" emissive="#38bdf8" emissiveIntensity={0.5} roughness={0.3} />
</mesh>
<mesh ref={rig.cup} position={[0, -0.42, -0.02]} visible={false}>
<cylinderGeometry args={[0.05, 0.042, 0.1, 12]} />
<meshStandardMaterial color="#f9a8d4" roughness={0.6} />
Expand Down
Loading
Loading