Skip to content

fix(engine): reuse HyperFrames browser cache#2459

Open
miguel-heygen wants to merge 2 commits into
mainfrom
fix/engine-hyperframes-browser-cache
Open

fix(engine): reuse HyperFrames browser cache#2459
miguel-heygen wants to merge 2 commits into
mainfrom
fix/engine-hyperframes-browser-cache

Conversation

@miguel-heygen

Copy link
Copy Markdown
Collaborator

Summary

  • honor HYPERFRAMES_BROWSER_PATH in the engine browser resolver
  • reuse the HyperFrames-managed headless-shell cache before falling back to Puppeteer
  • sort cached browser versions numerically so Chrome 152 is not outranked by Chrome 99
  • cover explicit-path and managed-cache resolution with regression tests

Verification

  • bun --filter @hyperframes/engine test -- src/services/browserManager.test.ts (29 passed)
  • bun --filter @hyperframes/engine typecheck
  • pre-commit lint, format, fallow, tracked-artifact, and typecheck gates
  • full engine suite: 989 passed; two unrelated VFR tests require a newer FFmpeg than the host provides (fps_mode is unsupported by its FFmpeg 4.2.2)

kapoorsunny pushed a commit to kapoorsunny/hyperframes that referenced this pull request Jul 15, 2026
`hyperframes render` picks up `PRODUCER_HEADLESS_SHELL_PATH` (engine
per-worker launches read it directly, and `render.ts` even propagates
the CLI-resolved executable path into it as a courtesy). But
`hyperframes check` / `snapshot` / `compare` / `grade-compare` all
route through `openSettledCompositionPage` → `ensureBrowser` →
`findFromEnv`, and `findFromEnv` only knew the CLI-native name
`HYPERFRAMES_BROWSER_PATH`.

Field report — #hyperframes-cli-feedback ts=1784095034 (win32/x64,
CLI 0.7.58): the cached `chrome-headless-shell 152.0.7928.2` crashed
with `Failed to launch the browser process: Code: 3221225595`
(`STATUS_STACK_BUFFER_OVERRUN`). Setting `PRODUCER_HEADLESS_SHELL_PATH`
to system Chrome unblocked `render`, but `check` still crashed on the
broken cached shell because it never read that env var.

Docs and deployment manifests (`skills/hyperframes-animation/adapters/
typegpu.md`, `packages/gcp-cloud-run/Dockerfile`, `examples/k8s-jobs/
Dockerfile.example`) all instruct users to set
`PRODUCER_HEADLESS_SHELL_PATH`, so the escape hatch is
documentation-blessed but was silently half-implemented on the CLI
side.

Alias it in `findFromEnv`. Tiebreak matches `render.ts:1479` —
`HYPERFRAMES_BROWSER_PATH` wins when both are set.

This is the CLI side of the symmetry heygen-com#2459 is closing on the engine
(engine gaining `HYPERFRAMES_BROWSER_PATH` honoring); the two make the
alias coherent both directions.

- Sibling to heygen-com#2443 (surfaces `HYPERFRAMES_BROWSER_PATH` on download
  failures).
- Not the same class as heygen-com#2040 (arm64 pin), heygen-com#2078 (SIGTRAP), or heygen-com#2082
  (launch crash rewrap) — those are download / launch fixes; this is
  the env-var alias gap.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant