fabro/apps/fabro-web/app/lib
Bryan Helmkamp daaca3f479
refactor: simplify artifact ZIP download
Path safety now lives in one place. The NUL-byte and drive-letter rules
move from a server-only helper into the store's own filename validation,
so uploads reject those paths at write time instead of only the ZIP read
path catching them. The download still re-checks, because artifacts
stored before the rule existed can still carry an unsafe path, but it
now skips a bad path rather than failing the whole archive.

Promote is_boundary_stage to RunProjection and drop the three identical
private copies. The ZIP download used a node-name match instead, which
would have dropped artifacts from a working node that happened to be
named "start".

Compress the archive. Entries were Stored while the response was also
excluded from transfer compression, so text artifacts moved at full
size. async_zip gains the deflate feature; async-compression and flate2
were already in the lock file.

Log archive failures unconditionally. The send-succeeded guard meant a
client that had already disconnected left no record at all, which is the
case where the log is the only evidence.

Also: collapse the duplicate 500 arms, drop the dead stage-ID tiebreaker
and the cached order in the selection map, name the accessible label
after the visible one, share the run URL prefix between the two download
href builders, and document the mid-stream truncation behavior in the
OpenAPI description.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 09:09:54 -04:00
..
api-client.test.ts feat: download latest artifacts as zip 2026-07-31 13:23:35 -04:00
api-client.ts refactor: simplify artifact ZIP download 2026-08-01 09:09:54 -04:00
ask-fabro-runtime.test.ts fix: render Ask Fabro session responses 2026-05-22 12:32:59 -04:00
ask-fabro-runtime.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
automation.ts Remove top-level automation enabled master gate (#456) 2026-05-29 22:18:14 -04:00
billing.ts refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
board-cache.ts feat(web): upgrade Children sub-tab to use the runs list view 2026-05-25 12:48:18 -04:00
board-events.test.tsx Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
board-events.ts Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
build-version-contract.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
build-version.test.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
build-version.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
chats-runtime.test.ts feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
chats-runtime.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
chats-script.ts feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
chats-store.test.tsx feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
chats-store.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
chats-types.ts feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
class-names.ts fix(web): harden collapsible run docks 2026-07-28 15:24:58 -04:00
credential-heuristics.test.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
credential-heuristics.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
cross-tab-sse.test.ts fix(web): recover cross-tab SSE coordination after fallback 2026-05-04 15:52:18 -04:00
cross-tab-sse.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
demo-mode.test.tsx feat: wire web UI to real server with demo mode toggle 2026-04-08 04:46:08 -04:00
demo-mode.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
format.ts feat(web): add models table to /settings/models 2026-05-25 15:21:40 -04:00
graph-theme.ts refactor(web): drop light mode, go dark-only 2026-04-20 09:27:08 -04:00
graph-viewport.test.ts Increase LR graph zoom to 400% and remember zoom per direction (#581) 2026-07-21 16:06:25 -04:00
graph-viewport.ts Increase LR graph zoom to 400% and remember zoom per direction (#581) 2026-07-21 16:06:25 -04:00
import-chunk.test.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
import-chunk.ts feat(web): tell open tabs when a new build ships 2026-07-25 14:45:26 -04:00
live-events.test.tsx feat(web): build live events page in settings 2026-05-10 14:05:10 -04:00
live-events.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
mcp-server-cache.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
mcp-transport-kinds.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
model-offerings.test.ts feat: make model aliases provider-aware 2026-07-23 10:12:25 -04:00
model-offerings.ts feat: make model aliases provider-aware 2026-07-23 10:12:25 -04:00
mutations.test.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
mutations.ts Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
pierre-diffs-worker.ts fix(web): virtualize run file diffs consistently 2026-05-05 16:41:39 -04:00
plural.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
principal-display.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
queries.ts fix(timing): simplify live timing projections 2026-07-28 14:20:59 -04:00
query-keys.test.ts fix(timing): simplify live timing projections 2026-07-28 14:20:59 -04:00
query-keys.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
run-actions.test.ts fix: clean up inference observability 2026-07-24 22:50:00 -04:00
run-actions.ts fix(timing): simplify live timing projections 2026-07-28 14:20:59 -04:00
run-events.test.tsx Merge origin/main into feat/parallel-branch-live-status 2026-07-28 17:50:36 -04:00
run-events.ts Merge origin/main into feat/parallel-branch-live-status 2026-07-28 17:50:36 -04:00
run-phases.test.ts fix(web): close run phase on terminal events (#427) 2026-05-27 10:38:32 -04:00
run-phases.ts fix(web): close run phase on terminal events (#427) 2026-05-27 10:38:32 -04:00
run-sandbox-lifecycle.ts Model run sandbox lifecycle explicitly (#431) 2026-05-27 12:48:56 -04:00
run-settings-snapshot.ts refactor: remove compatibility shims (#281) 2026-05-16 15:29:25 -04:00
sandbox-state.ts feat(web): show sandbox status dot on the run overview panel 2026-05-21 11:28:39 -04:00
session-stream.test.ts fix: render Ask Fabro session responses 2026-05-22 12:32:59 -04:00
session-stream.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
sse.ts Runs list view: table layout, server-side sort/pagination, redesigned toolbar (#367) 2026-05-23 14:25:58 -04:00
stage-sidebar.test.ts Merge origin/main into feat/parallel-branch-live-status 2026-07-28 17:50:36 -04:00
stage-sidebar.ts Merge origin/main into feat/parallel-branch-live-status 2026-07-28 17:50:36 -04:00
test-fixtures.ts refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
test-utils.tsx Merge origin/main into feat/parallel-branch-live-status 2026-07-28 17:50:36 -04:00
time.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
unknown.ts refactor(web): narrow event property reads via shared helpers 2026-04-30 22:45:38 -04:00