← Back to list
01Issue
BugShippedExtensionsPublic
Assigneesskunk-ape
Relationships
⊘ blocked by #2807#2841 gatorwalk-factory studio: file-watch and page edge cases left from #2806's reviews
Opened by skunk-ape · 9/30/2026· Shipped 10/1/2026
Follow-up to #2806 (the studio server). The verification reviews of #2806 raised these, and none of them blocked. The page is read-only, and reloading it recovers from each one.
Medium
- A replaced definition directory silences its watch. If an agent deletes and recreates a definition's directory (for example
rm -rf factories && mkdir factories) between two relists, the watch set's key is unchanged, sorefresh()does not watch it again. Live reload for that factory stops until the page reloads. Fix: when an event's path is itself a watched directory, or a watch's loop ends, clear the key and refollow (extensions/models/_lib/engine/studio_watch.ts).
Low
- The page does not resync after its event stream reconnects. An edit made while EventSource was reconnecting is missed. On
openafter anerror, reload the list, the definition and the selected scenario (studio/src/app.ts). - A symlinked
scenarios/<factory>inside the repo is served but not watched. The watch skips any directory whose real path it has not confirmed. Watching the resolved directory would cover the in-repo case. - A definition that becomes readable on a relist sends no
definitionevent. An example is one whose refusal is lifted by a change outside the watched directories. The page keeps showing the error until the next event or a reload. - The 3-second relist re-resolves every definition path even when the (name, path) list has not changed. Compare the list first and skip the file-system work when it is the same (
studio_serve.tsandstudio_watch.ts). - Heavy refollow on churn. Every event on a directory that leads to an awaited definition rebuilds every watch. It is correct, but could rebuild only what changed.
02Bog Flow
Shipped
Click a lifecycle step above to view its details.
03Sludge Pulse
Editable. Press Enter to edit.
skunk-ape commented 9/30/2026, 9:39:12 PM
More low findings from the final verification of #2806 (commit 5bf594d), same area:
- Any entry change directly under scenarios/ (even a stray notes.txt or an editor swap file) triggers refollow, which rebuilds every watch. Only refollow for names that are listed factories.
- studio_server.ts reads a file after its realPath check, so a symlink swapped in between could redirect the read. It is the same TOCTOU window readDefinitionFile has; reading with the real path already narrows it.
- When a missing definition falls back to a lexical path, that path can differ from the real paths the watches report if a symlink inside the repo is on the way, so the event is not matched.
- app.ts: the scenario directory label is not cleared when the scenario list fails to load.
- app.ts: the EventSource message handler parses event data without a try/catch.
Sign in to post a ripple.