SIGN IN SIGN UP

fix(ci): restore file-size budget, deflake codepoint test, retry asset uploads

CI has been red since 9ebbe3c and the weekly snapshot build lost its
binaries on 2026-08-02. Three independent causes.

1. File-size budget. The last seven commits pushed three files past the
   400-line ceiling. Rather than raise the baselines, the growth moved to
   where it belongs:

   - repos/search.js 424 → 340: the shared column projection, filter
     predicate block, and param builder now live in repos/search-sql.js.
     They are the surface all four search variants must agree on, so a
     schema or filter change lands in one file instead of four.
   - apple-symbols/sync.js 409 → 336: the Swift worker (spawn plus the
     length-prefixed frame protocol) moved to symbol-worker.js, matching
     the pattern already used for codepoint-stamp.js and snapshot-meta.js.
   - storage/database.js 446 → 400: the +40 was real logic in a file whose
     exemption exists specifically because it is a *thin delegation*
     facade. The root-by-id memo moved into repos/roots.js (next to the
     statement it memoizes, and self-invalidating on upsertRoot) and page
     tombstoning into storage/tombstones.js. The facade keeps one-line
     pass-throughs. Baseline ratcheted 406 → 400 and its rationale now
     says outright that bodied logic does not belong there.

2. codepoint-stamp-skip flake. "does not skip while any public symbol
   lacks a codepoint" passed appPath: '/nonexistent' on the assumption
   that no SF Symbols.app means no font resolves. But resolveSymbolFontPath
   falls back to DEFAULT_APP_PATH, so on any machine that HAS the app —
   developer Macs, and macOS runners — the test resolved real paths and
   spawned the actual Swift worker: 5001 ms against a 5000 ms timeout. It
   now injects fontPath + spawn and asserts the unstamped symbol was
   really requested. 4.09 s → 130 ms, and no longer environment-dependent.

3. Release asset uploads had no retry. The binaries job died on a
   transient undici "Headers Timeout Error" and a 70-minute snapshot build
   shipped without binaries. Both upload paths now use `gh release upload
   --clobber` in a 5-attempt backoff loop; --clobber makes a retry after a
   partial upload idempotent. Creating the release stays on the pinned
   action — only the byte-pushing moved.

Full suite green: 2508 pass, 11 skip, 0 fail.
G
Gigi committed
a1901ee055d31addc78ce0237529f93ccc92c064
Parent: 5a7ead5