- /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}/directives: free-form shareholder message becomes
an objective (reuses manager decomposition), logs directive.received
- Objective rollup now emits a CEO-voiced milestone.update event via one
pool call (plain-text fallback if the LLM call fails)
- _chat_structured retries once on empty/invalid JSON from the pool
(observed empty-content responses breaking protocol extraction)
- Dashboard: per-company shareholder textarea + CEO updates feed; refresh
skips DOM rewrite while a textarea is focused
Verified end-to-end: directive -> 3 tasks -> rework after handoff block ->
rollup -> CEO milestone update; gaswatch index.html now on-brand.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Hermes rejects workspace_kind 'path' (valid: dir/scratch/worktree).
- Dispatch failure now blocks the work item with a dispatch.failed event
instead of retrying the same 400 every tick.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- engine/static/index.html served at /: companies, employees, objectives,
work items, live event feed (5s poll), global pause/resume button.
- Persistent per-company workspace on the Hermes host
(/opt/data/farmhouse/<slug>, created via files API at company creation);
dispatcher passes it as kanban workspace_path so artifacts persist across
tasks instead of dying in scratch dirs.
- hermes_client.mkdir; gaswatch backfilled.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>