Repository navigation
chore(upstream): adopt d94708e5 as a whole tree - #2
Conversation
Adopt all pending upstream work (about 837 commits) on top of the fork. The fork history is squashed with no shared ancestry, so this was merged through a bridge on v0.8.35 (63574a7) and squashed onto fork main. 400 generated catalog pages come from upstream; 39 other conflicts were resolved by hand, keeping fork overlay files and the fork's CodeQL hardening where it could coexist with upstream's rewrites. Conflict table, kept fork deltas, dropped hardening, and verification are in docs/DECISIONS.md (2026-10-07). Baseline reviewed_through moves to d94708e. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Restore the fork's assertRemoteMediaBytes in the adopted upstream freezeUrl: downloaded bytes must match the destination extension (SVG still goes through sanitizeSvg, .cube through cube-validate, unknown extensions fail closed). Replace the invalid streaming fixture with valid ISO base media bytes, add HTML-as-.png and #EXTM3U-as-.mp4 rejection tests, and delete the now callerless freeze-publisher module and its test. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nothing imports stripFrameworkMarkup after the upstream adoption; upstream's DOM-based filterExtractedScripts covers the same threat. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The file names an upstream maintainer as owner of the capture-check files; on this fork it would request reviews from a person who does not maintain it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The Before/After capture requirement is upstream's contributor process and fails on every fork PR. Gate the job like the other upstream-process workflows, list catalog-publish, canary-sunset and pr-captures in FORK.md, and add a maintenance test that keeps the gates and the table in sync. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
….file Upstream's fetchMediaVectors downloaded media-vectors.* from a mutable raw.githubusercontent.com path with no timeout, size cap or pair validation, then trusted row.file via resolve(row.file), so a tampered catalog could make any local file the SFX result that freeze copies into the project. - build-copy ships media-vectors.json/.bin in dist/catalog-artifact - installMediaVectors installs from the bundled directory with the same pair and row validation as vectorPairAgrees, refuses absolute or .. row files, writes 0o600 via temp file and rename, and never fetches - resolveBundledMediaFile accepts only relative paths that stay inside the bundled root; the cwd-relative candidate is gone - resolve.mjs uses searchLocalSfxIndex; fetchMediaVectors and the HYPERFRAMES_REGISTRY path are removed - tests: absolute and .. row files rejected, ranking works with fetch forbidden Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The comment claimed the suffixed path was validated at that point; the check runs on the requested destination and suffixed names are chosen later in the exclusive-create loop. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Append the findings, fixes and the two judged-covered items (upload mode, frameworkMarkup) to the 2026-10-07 entry. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The fork's downloadTo rewrite moved writes into normalizeCloudAudio, so existsSync, mkdirSync and writeFileSync were left unused and failed the Preflight lint. Record the lint result and the two pre-existing CI failures that come from upstream in DECISIONS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The upstream render-order test looked for push("n") as raw text, but
the fork wraps scoped composition scripts as JSON string literals, so
the marker was not found in one mode and sorted first. Unescape quotes
before matching and require every marker to be present in both modes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ll the event loop
Exclude '(' from the fragment id class so a long run of 'url(#!' with no
closing paren no longer backtracks quadratically (CodeQL js/polynomial-redos
heygen-com#156). Adds linear-time regression tests and keeps url(#a), url('#a') and
url( "#a" ) rewriting unchanged.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The default root is a predictable name under the shared tmpdir, so a local user could pre-create it to plant cached frames or a symlinked .hf-last-gc (CodeQL js/insecure-temporary-file heygen-com#177). assertPrivateCacheRoot creates the root 0700 and requires a real directory, owned by the caller and closed to group/other on POSIX. The extractor disables caching with its existing warning when the check fails, clean skips the sweep, and the sweep marker is written via exclusive temp file plus rename so it never follows a symlink. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ing it Gemini response bytes were written to disk after only a RIFF header check (CodeQL js/http-to-file-access heygen-com#180). Route them through normalizeCloudAudio like the HeyGen path, injectable for tests, and report a transcode failure as ok:false without leaving a raw file behind. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Nothing but its own tests called it; the catalog cache is filled by installLocalVectors from the bundled package (CodeQL js/http-to-file-access heygen-com#183). Removes it with its options type and timeout constant, ports the media-vector validation tests onto installLocalVectors, and adds a test that installLocalVectors does not touch fetch. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ing it A root left at 0755 by an older umask belongs to this user and nobody else can write to it, so chmod it to 0700 and keep caching. Roots that group or others can write to are still refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The animated-GIF cache sits under the same extract cache root and is used during compile, before the frame cache's ownership check, so a root another local user controlled could still poison or redirect it. Route it through assertPrivateCacheRoot and disable only the GIF cache on failure. Also format the Gemini TTS test and correct DECISIONS (heygen-com#182 is fixed; media vectors install via installMediaVectors). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
💡 Codex Review在 Windows 的一般 Git 設定( AGENTS.md reference: AGENTS.md:L13-L13
AGENTS.md reference: AGENTS.md:L52-L59 Lines 49 to 53 in 77b9b20 這裡新增了 Claude 外掛安裝流程、更新方式及 21 個 skills 的新契約,但主要的繁中 AGENTS.md reference: AGENTS.md:L44-L45 本次 diff 更新了 77 個 AGENTS.md reference: AGENTS.md:L17-L18 ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
💡 Codex Reviewhyperframes/scripts/comment-check-base.mjs Lines 26 to 29 in 1efc522 檢查此 commit 的 在主要支援的 Windows 11 一般 clone 中,只要 AGENTS.md reference: AGENTS.md:L13-L13 這次 diff 共納入 77 個 AGENTS.md reference: AGENTS.md:L18-L18 ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
整樹採用上游
heygen-com/hyperframes63574a7c7..d94708e5(約 837 個 commit),壓成單一 commit。兩邊沒有共同祖先,合併在本機暫時分支上以三方合併算出(基準 v0.8.35)。決策紀錄見docs/DECISIONS.md2026-10-07 條目。草稿 PR:fork 先前的三處安全強化與上游重寫的程式碼衝突,合併時被取代,正在審查並補回後才會轉為可合併:遠端媒體下載的 magic-byte 驗證、上傳檔案的
0o600權限、擷取時巢狀<template>的處理。Verification
pwsh -NoProfile -File tools\dev_check.ps1:WINDOWS DEV CHECK GREENbasename修正讓 render 非 Latin-1 檔名測試通過。tsc --noEmit與上游相同。bun run test、lint、瀏覽器測試。🤖 Generated with Claude Code