fabro/apps/fabro-web/app/routes
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
..
run-artifacts Simplify artifact version history 2026-07-28 14:57:05 -04:00
run-detail Merge remote-tracking branch 'origin/main' into codex/pr669-merge-main-3d8cf48 2026-07-28 15:35:42 -04:00
run-files Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
run-sandbox fix(web): allow noVNC iframe storage 2026-06-03 12:01:27 -04:00
runs Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
ask-fabro.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
auth-login.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
automation-detail.tsx Remove top-level automation enabled master gate (#456) 2026-05-29 22:18:14 -04:00
automations-edit.tsx Remove top-level automation enabled master gate (#456) 2026-05-29 22:18:14 -04:00
automations-new.test.tsx Fix workflow slug field to use kebab-case instead of snake_case (#556) 2026-07-07 14:08:32 -04:00
automations-new.tsx Remove top-level automation enabled master gate (#456) 2026-05-29 22:18:14 -04:00
automations.tsx fix(web): distinguish automations empty states 2026-06-03 08:29:24 -04:00
chats-detail.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
chats-layout.tsx feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
chats-new.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
chats-router.test.tsx feat(fabro-web): port /chats/new + /chats/:id from prototype (#289) 2026-05-16 17:10:16 -04:00
insights-editor.test.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
insights-editor.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
insights-new.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
insights.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
playground.tsx feat: chat-driven workflow builder at /playground (#450) 2026-06-09 11:24:56 -04:00
profile-overview.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
profile-sessions.test.tsx refactor(web): simplify profile sessions layout 2026-05-10 14:32:19 -04:00
profile-sessions.tsx feat(web): add secrets management settings page (#327) 2026-05-20 17:50:09 -04:00
profile.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
redirect-home.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
run-artifacts.tsx refactor: simplify artifact ZIP download 2026-08-01 09:09:54 -04:00
run-billing.test.tsx refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
run-billing.tsx refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
run-children.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
run-detail.test.ts fix(web): harden collapsible run docks 2026-07-28 15:24:58 -04:00
run-detail.tsx Merge remote-tracking branch 'origin/main' into codex/pr669-merge-main-3d8cf48 2026-07-28 15:35:42 -04:00
run-events.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
run-files.render.test.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
run-files.test.ts refactor(run-files): extract commit picker options 2026-05-09 15:33:19 -04:00
run-files.tsx feat(web): tell open tabs when a new build ships 2026-07-25 14:45:26 -04:00
run-logs.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
run-overview.test.tsx Keep run graph zoom/pan when switching tabs (#561) 2026-07-08 10:50:02 -04:00
run-overview.tsx refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
run-sandbox.test.tsx Model run sandbox lifecycle explicitly (#431) 2026-05-27 12:48:56 -04:00
run-sandbox.tsx Model run sandbox lifecycle explicitly (#431) 2026-05-27 12:48:56 -04:00
run-settings.tsx refactor(glob): unify workspace path matching 2026-07-25 10:30:19 -04:00
run-source.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
run-stages-chat.test.tsx refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
run-stages-details.test.tsx refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
run-stages.test.ts Simplify stage detail reasoning UI 2026-07-25 11:10:06 -04:00
run-stages.tsx refactor: simplify stage billing reuse 2026-07-28 14:51:47 -04:00
run-terminal.tsx fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
runs.preferences.test.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
runs.test.tsx Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
runs.tsx Clean up size chip rendering and tests 2026-07-28 14:04:58 -04:00
settings-environments-edit.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
settings-environments-new.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
settings-environments.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
settings-general.tsx feat(web): regroup settings nav under General and Administration 2026-05-25 14:56:01 -04:00
settings-index.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
settings-integrations.test.tsx feat(system): report runtime integration status (#416) 2026-05-26 19:27:32 -04:00
settings-integrations.tsx feat(system): report runtime integration status (#416) 2026-05-26 19:27:32 -04:00
settings-live-events.test.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
settings-live-events.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
settings-mcps-edit.test.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-mcps-edit.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-mcps-new.test.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-mcps-new.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-mcps.test.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-mcps.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
settings-models.tsx feat: make model aliases provider-aware 2026-07-23 10:12:25 -04:00
settings-monitoring.test.tsx fix(settings): show scheduler slot usage (#404) 2026-05-25 18:28:18 -04:00
settings-monitoring.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
settings-sandboxes.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
settings-secrets-new.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
settings-secrets.tsx feat(web): add secrets management settings page (#327) 2026-05-20 17:50:09 -04:00
settings-security.tsx refactor: Remove inbound IP allowlisting (#443) 2026-05-27 22:29:08 -04:00
settings-storage.tsx feat(web): drop the Mount point row from storage settings 2026-05-21 11:28:39 -04:00
settings-variables-edit.tsx feat(web): add /settings/variables management UI 2026-05-27 12:14:41 -04:00
settings-variables-new.tsx feat(web): add /settings/variables management UI 2026-05-27 12:14:41 -04:00
settings-variables.tsx refactor(web): give variables row its own value column 2026-05-27 12:21:49 -04:00
settings.tsx feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
setup.test.ts fix(web): generalize GitHub App post-install copy (#418) 2026-05-26 19:27:09 -04:00
setup.tsx fix(web): generalize GitHub App post-install copy (#418) 2026-05-26 19:27:09 -04:00
start.tsx Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00