@@ -30,19 +30,6 @@ and Shuttle as one thing rather than two that shell to each other.
3030Live runtime couplings (these silently break or no-op without Portolan, and are
3131the real severing work):
3232
33- - ** ` lib/shuttle/waiting_tracker.ex ` ** (and ` sent_files.ex ` , which delegates to
34- its ` default_events_file/0 ` ) — read the Claude Code hook-event stream to derive
35- per-session activity / "waiting" phase and the sent-files trail. ** Shuttle now
36- owns its own stream:** the readers prefer the Shuttle-owned path
37- (` SHUTTLE_EVENTS_FILE ` , else ` $SHUTTLE_DATA_DIR/events.jsonl ` , default
38- ` ~/.shuttle/events.jsonl ` , written by ` ~/loom/hooks/shuttle-hook.sh ` ) and ** fall back**
39- to the legacy Portolan path (` PORTOLAN_EVENTS_FILE ` /
40- ` ~/.portolan/data/events.jsonl ` , written by ` ~/loom/hooks/portolan-hook.sh ` )
41- only when the Shuttle file is absent or empty. So behavior is unchanged until
42- the Shuttle hook is installed (see "Owning the event stream" below), then it
43- transparently switches. The event shape is identical, so the parsers are
44- unchanged. Fully severing means dropping the Portolan fallback once the hook is
45- installed everywhere.
4633- ** UI ` :4004 ` backend (` ui/src/board/FiberDetailModal.ts ` , ` FileViewerPanel.ts ` )** —
4734 ` portolanBase ` defaults to ` http://localhost:4004 ` and the standalone
4835 ` KanbanModal ` never overrides it, so ** Sent-files** , ** Save-to-downloads** , and
@@ -145,25 +132,22 @@ fragile and per-binary; relocating out of Documents is the supported fix.
145132### Owning the event stream — ` ~/loom/hooks/shuttle-hook.sh `
146133
147134Shuttle derives per-session activity (` WaitingTracker ` ) and the sent-files trail
148- (` SentFiles ` ) from a Claude Code hook-event stream. ` ~/loom/hooks/shuttle-hook.sh `
135+ (` SentFiles ` ) from its OWN Claude Code hook-event stream. ` ~/loom/hooks/shuttle-hook.sh `
149136appends one JSON line per hook event to ` $SHUTTLE_EVENTS_FILE ` (default
150- ` ~/.shuttle/events.jsonl ` , dir ` $SHUTTLE_DATA_DIR ` ), in the same shape the legacy
151- ` portolan-hook.sh ` writes, so the daemon no longer depends on Portolan's hook.
152- Until the hook is registered on a machine, the readers fall back to Portolan's
153- ` ~/.portolan/data/events.jsonl ` there, so nothing breaks in the meantime.
154-
155- ** The hook lives in loom, registered by ` loom/setup.sh ` — exactly like
156- portolan-hook.** The reason it can't live in this repo: ` ~/loom ` is the same
157- absolute path on every machine, but the shuttle checkout is not (` ~/dev/shuttle `
158- here, ` ~/Documents/projects/shuttle ` on the clusters), and ` ~/.claude/settings.json `
159- needs a stable absolute ` command ` path. ` loom/setup.sh ` 's Python block registers
160- ` ~/loom/hooks/shuttle-hook.sh ` into ` ~/.claude/settings.json ` across the tracked
161- events (UserPromptSubmit, PreToolUse, Stop, Notification, SessionStart, SessionEnd),
162- * alongside* portolan-hook for now (both fire, write their own files; drop the
163- portolan entries once Portolan is fully retired). To install on a machine: sync
164- loom there, then run ` ~/loom/setup.sh ` . The hook needs ` jq ` on PATH; without it it
165- exits silently and the readers keep using the Portolan fallback. Each host's
166- daemon tails its own host's ` ~/.shuttle/events.jsonl ` .
137+ ` ~/.shuttle/events.jsonl ` , dir ` $SHUTTLE_DATA_DIR ` ). The readers read ONLY this
138+ path — the Portolan fallback was dropped once the hook was live on all three
139+ hosts; Portolan is fully severed here.
140+
141+ ** The hook lives in loom, registered by ` loom/setup.sh ` .** It can't live in this
142+ repo: ` ~/loom ` is the same absolute path on every machine, but the shuttle
143+ checkout is not (` ~/dev/shuttle ` here, ` ~/Documents/projects/shuttle ` on the
144+ clusters), and ` ~/.claude/settings.json ` needs a stable absolute ` command ` path.
145+ ` loom/setup.sh ` 's Python block registers ` ~/loom/hooks/shuttle-hook.sh ` into
146+ ` ~/.claude/settings.json ` across the tracked events (UserPromptSubmit, PreToolUse,
147+ Stop, Notification, SessionStart, SessionEnd). To install on a machine: sync loom
148+ there, then run ` ~/loom/setup.sh ` . The hook needs ` jq ` on PATH; without it it
149+ exits silently (no events → no activity ranking, but the board still serves).
150+ Each host's daemon tails its own host's ` ~/.shuttle/events.jsonl ` .
167151
168152** Connecting to candide and cineca (SSH auth — read this first).** The two
169153remotes authenticate differently, and getting it wrong looks like "the host is
0 commit comments