Skip to main content
← 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, so refresh() 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 open after an error, 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 definition event. 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.ts and studio_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
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 20 MOREPR_LINKED+ 2 MORESESSION_SUMMARIZED

Shipped

10/1/2026, 6:53:13 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape10/1/2026, 6:00:47 PM
skunk-ape linked blocked by #280710/1/2026, 1:00:31 AM
skunk-ape marked as blocked10/1/2026, 1:00:31 AM
skunk-ape unblocked automatically10/1/2026, 12:16:45 PM
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.