Garry Tan and Claude Fable 5
e426293017
fix(server): one lone-surrogate sanitizer, one sanitizeReplacer, one startTunnel
...
Three copies of the surrogate sanitizer existed with two algorithms
(sanitize.ts regex vs a hand-rolled charCodeAt walk in server.ts — verified
byte-identical across 11 edge cases before converging) plus two identical
sanitizeReplacer definitions each wrapping a different copy. sanitize.ts is
now the single source of truth; the runs-INSIDE-JSON.stringify egress
invariant is unchanged at every call site and its pin tests were adapted to
the new import shape without losing intent.
The ngrok tunnel-start sequence existed three times in server.ts — the
/tunnel/start route and the BROWSE_TUNNEL=1 autostart were line-for-line
equivalent (a comment admitted 'Same cleanup as /tunnel/start's error path').
One startTunnel() now owns the ephemeral loopback bind, the pre-send egress
receipt, the state-file RMW via tmpStatePath(), and the ordered error-path
cleanup; callers keep their distinct response surfaces. The
BROWSE_TUNNEL_LOCAL_ONLY test path shares nothing (no ngrok, different state
field) and deliberately stays separate.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-14 21:12:21 -07:00
..
2026-08-14 21:00:17 -07:00
2026-03-26 11:15:24 -06:00
2026-03-28 08:35:24 -06:00
2026-04-07 00:23:36 -07:00
2026-05-07 20:14:59 -07:00
2026-05-09 08:06:47 -07:00
2026-05-13 12:22:30 -04:00
2026-06-18 10:45:05 -07:00
2026-05-24 01:43:51 -07:00
2026-04-28 20:08:04 -07:00
2026-05-14 21:55:29 -07:00
2026-04-28 20:08:04 -07:00
2026-05-14 21:46:50 -07:00
2026-04-16 13:49:04 -07:00
2026-03-20 12:22:11 -07:00
2026-04-28 20:08:04 -07:00
2026-04-28 20:08:04 -07:00
2026-05-27 16:09:38 -07:00
2026-04-28 20:08:04 -07:00
2026-05-27 16:09:38 -07:00
2026-05-01 07:21:28 -07:00
2026-05-21 21:21:07 -07:00
2026-05-24 01:43:51 -07:00
2026-08-14 21:00:17 -07:00
2026-04-07 00:23:36 -07:00
2026-05-13 12:22:30 -04:00
2026-08-14 21:00:17 -07:00
2026-03-23 22:15:23 -07:00
2026-04-17 00:45:13 -07:00
2026-05-07 20:14:59 -07:00
2026-04-08 00:41:55 -07:00
2026-05-09 08:06:47 -07:00
2026-05-09 08:06:47 -07:00
2026-08-14 21:12:21 -07:00
2026-04-18 23:25:33 +08:00
2026-04-10 17:13:15 -10:00
2026-08-14 09:28:56 -07:00
2026-03-26 11:15:24 -06:00
2026-05-09 08:06:47 -07:00
2026-05-20 07:35:01 -07:00
2026-05-25 10:57:15 -07:00
2026-04-21 21:58:27 -07:00
2026-07-10 11:21:19 -07:00
2026-05-13 13:37:31 -04:00
2026-04-07 00:23:36 -07:00
2026-04-06 00:47:04 -07:00
2026-05-27 16:09:38 -07:00
2026-05-27 16:09:38 -07:00
2026-08-14 09:28:56 -07:00
2026-04-28 00:57:28 -07:00
2026-04-06 00:47:04 -07:00
2026-04-20 13:20:30 +08:00
2026-03-20 12:22:11 -07:00
2026-05-07 20:14:59 -07:00
2026-05-07 20:14:59 -07:00
2026-05-20 07:35:01 -07:00
2026-05-24 01:43:51 -07:00
2026-05-20 06:56:41 -07:00
2026-05-30 14:57:07 -07:00
2026-05-14 21:46:50 -07:00
2026-05-20 07:35:01 -07:00
2026-08-14 21:00:17 -07:00
2026-04-23 10:23:40 -07:00
2026-08-14 21:00:17 -07:00
2026-08-14 21:00:17 -07:00
2026-05-20 06:56:41 -07:00
2026-08-14 21:00:17 -07:00
2026-04-23 10:23:40 -07:00
2026-04-20 22:18:37 +08:00
2026-05-20 07:35:01 -07:00
2026-08-14 21:00:17 -07:00
2026-08-14 21:00:17 -07:00
2026-08-14 09:28:56 -07:00
2026-08-14 21:00:18 -07:00
2026-08-14 21:00:18 -07:00
2026-05-09 08:06:47 -07:00
2026-05-13 12:22:30 -04:00
2026-05-07 20:14:59 -07:00
2026-05-24 01:43:51 -07:00
2026-08-14 21:12:21 -07:00
2026-05-09 08:06:47 -07:00
2026-08-14 21:00:17 -07:00
2026-08-14 15:59:19 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-14 21:55:29 -07:00
2026-04-07 00:23:36 -07:00
2026-05-07 20:14:59 -07:00
2026-05-27 16:09:38 -07:00
2026-08-14 21:00:17 -07:00
2026-03-28 08:35:24 -06:00
2026-06-18 10:45:05 -07:00
2026-08-14 21:00:17 -07:00
2026-08-14 21:00:17 -07:00
2026-04-25 22:52:15 -07:00
2026-05-27 16:09:38 -07:00
2026-04-28 20:08:04 -07:00
2026-05-09 08:06:47 -07:00
2026-04-28 20:08:04 -07:00
2026-05-24 01:43:51 -07:00
2026-04-25 22:52:15 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-05-24 01:43:51 -07:00
2026-08-14 21:00:17 -07:00
2026-03-13 00:31:41 -07:00
2026-05-14 21:55:29 -07:00
2026-06-09 21:02:30 -07:00
2026-05-11 12:16:26 -07:00
2026-03-26 11:15:24 -06:00
2026-04-17 00:45:13 -07:00
2026-04-04 10:17:05 -07:00
2026-05-07 20:14:59 -07:00