Manager policy, active only when a company employs a consultant:
- a task that blows its wall-clock budget or blocks on machine failure
(crashed worker, capability gap — anything except needs_input) is
reassigned to the consultant with the failure context appended
- every objective rollup spawns a consultant review task: verify each
deliverable against acceptance criteria, write milestone-check.md,
verdict per deliverable, fix nothing
Also: employee_role_check widened to include consultant (db + live);
consultant sprite shirt color in the office.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tabs render only when more than one active company exists; objective line
shows the newest in-progress objective above the canvas.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Decomposition now classifies each task kind (build/research/review);
research/review map to matching work_item types, dispatcher dispatches
them alongside task/subtask/defect
- Office: walled research room (bookshelves, reading table, own floor)
bottom-right; generalized room routing (per-room door waypoints);
workers on research-type tasks walk there and read (page-flip anim)
instead of sitting at a desk; break area moved to mid-floor
Verified live: research directive decomposed into 4 research + 1 build
task; worker rendered at the reading table.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- inConf() was x-only, so the break area routed through the conference door
- door crossings now go west-waypoint -> doorway -> target (no wall clipping)
- workers face the viewer at their desk; typing anim/monitor glow computed
from live state in the draw loop instead of waiting for the next poll
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- /office rebuilt Chrono Trigger style: tile map (work floor, walled
conference room with door, break area), 4-direction sprites with walk
cycles; employees path through the door and walk to their desk when
working (typing anim, lit monitor), to the conference room with a "?"
bubble when blocked on an answer, to the water cooler when idle. All
movement derives from polled engine state only.
- Dispatcher now appends completed-sibling task reports to each task body
so decomposed tasks are no longer blind to each other's output (fixes
the "apply the patch task A made" capability block).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- POST /companies/{slug}/work-items/{id}/answer: shareholder answers a
blocked item; answer is appended to the description and the existing
kanban task is rerun (status=ready + updated body), or the item goes
back to ready for fresh dispatch if it was never dispatched
- Dashboard: answer button on blocked work item rows (native prompt)
- /office: pixel-art 2D office view — one desk row per employee, avatar
color by role, LED/typing animation driven only by real engine status,
live event ticker (PRD 12: no fake activity)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>