Skip to content

Latest commit

 

History

History
163 lines (136 loc) · 43.6 KB

LESSONS.md

File metadata and controls

163 lines (136 loc) · 43.6 KB

LESSONS

Append-only format:

YYYY-MM-DD / symptom / cause / rule / status

2026-10-17 / CI branches 74.31% < 74.4% on a feature PR / main sat on the threshold so new fail-closed branches dropped below it / keep the 74.4% gate and add adapter/doctor branch tests for uncovered reject paths instead of lowering the number / documented 2026-10-17 / VPD-K001 after catalog review_after 2026-10-10 / in-process tests used wall-clock Date and CLI spawn did not inherit vitest fake timers / pin Date with useCatalogReviewClock and NODE_OPTIONS --import catalogReviewClockPreload.mjs for CLI children; do not lower freshness rules / documented 2026-10-17 / Dependabot undici update_files failed 6x for /apps/download-site with empty GITHUB_REGISTRIES_PROXY / override pinned vulnerable 7.29.0 while miniflare still resolved 7.28.0/7.29.0; no private npm registry is configured / bump the download-site undici override to patched 7.x manually; omit GitHub Packages registries for public npmjs.org / documented 2026-10-17 / CI check/windows-smoke failed on root security:audit after coverage was green / GHSA on MCP SDK 1.30.x, fast-uri 3.1.7, ip-address <=10.7.0, proxy-addr, source-map-js, postcss-selector-parser / bump the production SDK and keep patched overrides; do not lower audit-level / documented

2026-09-25 / HyperFrames 0.8.75 で旧Studio smokeの選択確認が失敗した / studio_select成功後もisCurrentSelectionがfalseで、書き込みschemaは明示handle必須へ変化 / 更新時は実ページが返すschemaを読み、fixtureでhandle指定の文字・色変更、保存、reload、PNG内容まで照合する / Chrome 153の隔離fixtureで確認

2026-09-16 / 同一plan再承認のretryが dispatch already claimed になる / sha256Canonical が created_at を省略し submission intent digest が衝突する / 新規 intent だけ optional の attempt_identity を canonical digest に含め、legacy には default しない。pending/unknown は従来どおり spawn を止め、既存 claim は消さない / 進行中 2026-09-15 / Hypit Phase 1 の check/plan が fixture 配下の改ざん SVML と --package-root を通した / 信頼判定が path 包含だけだった / check/plan は固定ファイル名・固定 workspace・固定 argv に限り、spawn 直前に公式 bytes と activation bytes を照合する。任意 Source 隔離とは呼ばない / 進行中 2026-09-15 / Hypit Phase 1 で grant 環境変数や配列が build を開け、UTF-8 デコード後のハッシュが不正バイトを潰し、check/plan が任意 Source の activation JS を読み込んだ / プロンプト禁止と argv 許可リストを承認や OS 隔離とみなした / Phase 1 の build は無条件拒否。ハッシュは raw bytes。check/plan はピン済み公式 example だけ。子環境から NODE_OPTIONS と資格情報を除く。observation fingerprint を承認に使わない / 進行中 2026-09-10 / Editframe preview was a white page with unstyled caption text at the bottom / ef-timegroup does not autoplay; Playwright screenshotted after 1500ms without customElements.whenDefined or seekForRender / Preview and caption proof must wait for element registration, seek the actual composition time, screenshot the stage, and assert visible caption/video bounds / documented 2026-09-10 / Official Editframe mp4 had video but no Japanese captions / ef-text was not inside the active mode="fixed" clip timegroup, or its duration was snapped to the whole clip / Nest captions inside each clip's fixed group with local offset/duration for the overlap window / documented 2026-09-10 / Editframe local mp4 preview/render painted black and seekForRender failed / HTML src="assets/..." resolved to missing /assets/*, which Vite served as fallback HTML 200; /src/assets and public/media returned Range 206 video/mp4 / Map local media to a real static URL and verify Content-Type plus bytes, never HTTP 200 alone / documented

2026-07-25 / 完成済み r13 正本がランチャーに出ず worktree 削除で消失した / 制作を feature worktree の projects/ だけで完結させ、finalize も durable home へ載せず、後から git worktree remove した / 制作案件は制作前から main の durable projects home に置き、validate で shelf 登録、finalize で完成コピー昇格、ランチャーは durable+worktree を横断表示し、worktree remove 前に正本が durable home にあることを確認する / validate済

2026-07-09 / mcp-agent adapter could not be handed off safely / adapter had no SKILL.md instructions / mcp-agent adapters must include SKILL.md / validate済 2026-07-09 / npm ls reports @emnapi/runtime as extraneous after npm ci / npm 11 keeps optional wasm child packages from platform-skipped lockfile entries / treat as non-blocking only when npm ci, npm audit, build, tests, validate, plan, and dry-run pass; do not add a direct dependency just to silence npm ls / documented 2026-07-10 / generation request id could escape the adapter output directory / request ids and adapter output paths were not enforced at the core boundary / require safe unique request and clip ids, matching request_id, and realpath containment inside runDir / validate済 2026-07-10 / an awaiting Gate 2 run could report success from manifest alone and lose credit counters / resume trusted state without cross-checking QC, run log, and assets / resume must validate all persisted artifacts and recover counters from verified outputs / validate済 2026-07-10 / Gate 3 could be approved from file existence alone / final output had no normalized QC report / write and inspect gate3-qc.json before approval / qa済 2026-07-10 / coverage configuration failed when the workspace path contained an asterisk / Vite config bundling treated the path as multiple inputs / enforce coverage thresholds through stable CLI options in this workspace / documented 2026-07-10 / render and gate silently accepted --dry-run while still performing side effects / CLI flags were parsed globally instead of per command / reject options outside each command allowlist and keep --dry-run run-only / validate済 2026-07-10 / provider CLI diagnostics could expose signed URLs or tokens through pipeline JSON / raw adapter stdout and stderr were used as public issue messages / emit fixed public adapter errors and keep provider output out of CLI responses / validate済 2026-07-10 / CI npm ci rejected a lockfile generated by npm 11 / the npm 11 lockfile omitted transitive packages required by the supported npm 10 installer / pin the package manager and regenerate plus verify package-lock.json with npm 10 before push / validate済 2026-07-10 / CI doctor and media integrity tests failed because ffprobe was unavailable / the workflow assumed native media tools were preinstalled on the runner / install declared native dependencies explicitly before running doctor or QC tests / validate済 2026-07-10 / dialogue character paths could validate as unknown metadata but disappear during run assembly / image paths were not first-class manifest assets / validate, copy, probe, and resume-check images with the same guarded lifecycle as clip and audio assets / validate済 2026-07-10 / a generated run could spend credits before discovering a missing local character image / image copying happened after the generation adapter / pin every local image inside runDir before any credit-bearing adapter call / validate済 2026-07-10 / a Gate 2-approved character could be replaced by another image with identical dimensions and codec / media metadata did not identify file contents / store and recheck SHA-256 for image assets in Gate 2 reports / qa済 2026-07-10 / new empty manifest defaults could invalidate an older awaiting Gate 2 input digest / normalized schema defaults changed stable JSON without changing intent / omit newly introduced empty defaults from persisted digest input / validate済 2026-07-10 / dialogue characters looked like code-driven stand-ins instead of flipbook animation / the template reused one portrait or vector poses instead of real mouth-state images / generate both characters in one consistent ImageGen sheet, cut three mouth states per character, and switch only those real images for the active speaker / validate済 2026-07-10 / SVG character rasterization failed inside build tooling / the homebrew ffmpeg 8.x build ships without librsvg so SVG inputs cannot decode / rasterize SVGs with the Remotion-downloaded chrome-headless-shell (--screenshot with transparent default background) and keep ffmpeg for video-only synthesis / validate済 2026-07-11 / PixVerse V6 image-to-video returned invalid param before credit use / the adapter passed --aspect-ratio even though I2V derives framing from the input image / omit aspect-ratio from the provider CLI call for image-to-video while retaining project-level aspect validation, and add an adapter regression test / validate済 2026-07-22 / PixVerse music-2.6 rejected a 30-second BGM request before task creation / the adapter forwarded the project duration as the provider-reserved --duration-seconds flag / keep music generation on provider auto-duration, treat project duration as an editorial trim target, and cover the generated command with a regression test / validate済 2026-07-22 / 生成済みr7映像6本がGate 2で一斉にfps mismatchになった / 編集manifestを30fpsで手入力し、実ファイルの24fpsをGate 1前に転記していなかった / 生成済み素材を編集専用runへ移すときは全clipのffprobe値からmanifestのfps・解像度・尺を作り、Gate 1前に一括照合する / qa済 2026-07-22 / BGM入り初回レンダーが-32.0 LUFSで存在しても聞こえにくかった / provider音源の実ラウドネスを測らず慣例の小さいvolume値を流用した / ナレーションなしプロモはGate 3前に最終ミックスのLUFSとtrue peakを測り、旧runを残した別runでBGM音量を補正する / qa済 2026-07-11 / doctorがwrapperのnodeやpreflight先頭のnpxだけで外部能力をready判定した / provider/backend実体とhandoff準備を検査していなかった / adapter/backendが非課金setup checkを宣言し、安全に自動確認できないhandoffや認証はmanualとしてready扱いしない / doctor済 2026-07-11 / 掛け合い動画が激しい口パク、不適切な配置、不自然な窓枠で会話らしく見えなかった / キャラクターを単なる矩形素材として置き、発話表現と画面構成を別々に設計した / 激しい口パクと窓枠形式を再利用せず、丸型など自然な切り抜き、吹き出し、話者交代が伝わる控えめな会話アニメーションを一体設計する / rejected 2026-07-11 / 最終動画の尺と形式が正しくても黒画面や長い無音を承認できた / Gate 3がffprobeのメタデータだけを検査していた / ffmpegで1秒以上の黒区間と3秒以上の無音区間を検出し、内容解析失敗時もfail closedにする / qa済 2026-07-11 / a run rendered before a gate3-qc schema upgrade could not be approved afterwards / the stored report lacked fields the new approval validation requires / when gate-3 approval fails on report shape after a core upgrade, use the gate-3 re-render decision to regenerate the report instead of editing it / validate済 2026-07-12 / Fish Audioを利用不可と誤判定した / FISH_API_KEY環境変数だけを確認し、既存のfish-audio-ttsとmacOS Keychain service fish-audio-api-keyを確認しなかった / Fish Audio作業は最初にfish-audio-doctorを実行し、環境変数が空でもKeychain経路と既存helperを確認してから可否判定する / validate済 2026-07-12 / いとぱん・しばの掛け合いに女性の共通ボイスと8fps口パクを流用した / 話者別の性別・声質を固定せず、音声エンベロープを使わずに順番アニメーションしていた / 掛け合いは話者ごとのpersonaとFish reference_idをmanifest生成前に固定し、実音声から6Hz以下の平滑化mouth_levelsを作ってからレンダーする / qa済 2026-07-12 / provider BGMの末尾に0.86秒の無音が残りGate 3を通過した / Gate 3の無音検査は長い事故を止める閾値で、告知動画の締め品質は保証しない / 完成扱いの告知動画は最終ミックスの末尾1秒もsilencedetectで確認し、必要ならprovider生成SEで意図的に締める / qa済 2026-07-12 / storyboard HTMLなしでGate 1からrunへ進められた / reviewが独立コマンドのままでGate 1とrun-logに接続されていなかった / Gate 1承認前に対象runのreview/index.htmlとreview-data.jsonを検査し、run-logにも相対パスを残す / validate済 2026-07-12 / Vitest 4の単独更新でnpm ciと既存カバレッジゲートが壊れた / vitestとcoverage-v8のpeer majorと分岐率が同時に変わった / Vitest本体とcoverage-v8は同じmajorで更新し、npm ciとnpm run checkを通してから公開する / validate済 2026-07-12 / 歩行カットが足踏みに見えて物語の進行を損ねた / 動作語だけで人物の開始位置と終了位置を固定していなかった / 歩行・移動カットは画面内の異なる開始・終了ゾーンと移動距離をプロンプトに明示し、1fpsコンタクトで位置の変化を確認してから採用する / qa済 2026-07-12 / 生成クリップの解像度がプロジェクト契約と異なりGate 2で停止した / 生成元の720pラベルだけを信頼し、実ファイルの幅高さを事前照合していなかった / 新規クリップは組み立て前にffprobeでmanifestの解像度・fpsを照合し、必要なら対象仕様へ正規化してから新runを作る / qa済 2026-07-12 / 朝採りを掲げながら水やり後に収穫する構成で時間帯が曖昧になった / 作業順、光、環境音を別々に更新し、朝という物語上の制約を全レイヤーへ固定していなかった / 時間帯が主題の動画では、カット順・ナレーション・背景光・環境音を同じ時間帯へ明示的にそろえ、代表フレームで連続性を確認する / qa済 2026-07-12 / 直売所の二人が同一人物に見えた / 2人の参照を渡しても帽子・上着・左右位置を生成中の不変条件として明示せず、最終確認も疎だった / 複数キャラのカットは人物ごとに衣装色・帽子形状・髪型・画面位置を固定し、最終レンダ後も2fps以上の密なフレームで重複・交換・同一化を除外する / qa済 2026-07-13 / ユーザーが完成と判断した動画に正本リンクだけを返し、改善の学びを完了成果物として渡せなかった / 個別のQA・LESSONS記録を残せば完成時の振り返りは不要だと取り違えた / 完成宣言の前に、正本・QA・代表フレーム・良かったこと・悪かったこと・次回固定ルールを一つのユーザー向け成果物へ統合する / qa済 2026-07-13 / new character snapshot could be redirected outside the project through a symlinked parent / only an already-existing final destination was checked / validate every destination parent with lstat before mkdir or copy and require real directories inside the project root / validate済 2026-07-14 / generation runのBGMとSFXがGate 2でmissingになった / generation組み立てが画像と生成clipだけをrunDirへ固定し、audioを元pathのまま残していた / generationでも全audioを課金adapter実行前にrunDirへcopyし、asset_count、QC、resumeを同じ契約で検証する / validate済 2026-07-14 / provider尺のままでは字幕とローカルendcardが30秒設計からずれた / 生成可能尺と編集尺を同一視し、generation組み立て後のclip契約を再確認していなかった / Gate 2前に生成clipを編集尺へ物理正規化し、非生成clipを含む最終manifestの合計尺と順序を再検査する / qa済 2026-07-14 / 地名の読みと同音語がTTS・STTで誤認され、最終文が尺を超えた / 表示表記・読み指定・TTS用の自然な言い換えを分けず、完成ミックス後のSTTまで確認していなかった / 固有地名はユーザー確認済みの読みをTTS本文へ固定し、個別音声と完成版の両方をSTT確認し、5秒枠は35モーラ前後を上限にする / qa済 2026-07-14 / loudnorm後のAAC音声が意図せず96kHzになった / loudnorm内部の高い処理レートに任せ、最終エンコードのサンプルレートを固定していなかった / ラウドネス正規化後のAACは-ar 48000を明示し、ffprobeでcodec・sample_rate・channelsを再確認する / qa済 2026-07-15 / 上半身キャラの口形は明確でも本編で字幕に隠れた / 横長素材を従来の全身キャラ用bottom位置へ置き、口元のcaption safe zoneを確認していなかった / 口パク刷新は閉じ・半開き・大開きの同一セリフ連続フレームを最終レンダから抽出し、口元が字幕より上にあることをGate 3前に確認する / qa済 2026-07-15 / EDLの時刻だけを照合すると字幕・章の改変と多数分割のframe丸め誤差を見逃せた / 承認対象をsegmentだけに限定し秒単位clipを個別roundしていた / Gate 2とrender直前は編集manifest全体をdigest拘束し、render側は累積frame境界の差分で各区間を配置する / validate済 2026-07-16 / 左上バッジを収める修正を5回繰り返し、最後は背景楕円を横長に肥大化させて画面全体のバランスを崩した / 座標上の包含とGate成功を見た目の品質と取り違え、文字・形・余白・背景・他要素の重心を原寸静止画で評価せずに毎回フルレンダーした / レイアウト修正は包含だけで合格にせず、階層・整列軸・形と内容の比率・負の余白・背景遮蔽・画面重心を原寸静止画で確認し、初回の目視指摘後はユーザーが静止画を承認するまで動画をレンダーしない / rejectedから恒久ルール化 2026-07-17 / Windows向け記述があってもlauncherとdoctorがnative PowerShellで起動保証できなかった / extensionless CLI、POSIX quoting、生のspawnSync、PATHだけの探索を個別実装していた / 公開入口はnode bin/pipelineへ統一し、子processはcmd shim対応層、doctorはPATHEXT、配布はWindows CIとPowerShell手順を同時に持つ / validate済 2026-07-17 / Windowsで未変更のGate 2成果物が再検査時にstale判定された / FFmpegの診断文に含まれるcontext pointerがWindowsでは0xなしで毎回変化し、保存済みQCとの差分になった / 外部ツールの診断を永続比較へ含める前にOSごとのvolatile pointer表記を正規化し、内容hashは別に検証する / validate済 2026-07-17 / launcher一覧で正常に見える案件が「最新状態に更新」後にpresentation preset非対応で失敗した / 一覧はproject.yamlの読み込みだけでvalidとし、preset能力宣言とRemotion実装も別管理だった / launcherは一覧時にvalidateProjectまで実行してrefreshableを別表示し、backendのpreset宣言と実装registryの一致をCIで強制する / validate済 2026-07-17 / 成果物プレビューの縦型動画が16:9の横長枠で表示された / previewのvideoに一律のaspect-ratio: 16/9を適用していた / videoWidthとvideoHeightの実metadataで各動画を独立判定し、縦型は9:16で中央表示、未読み込みと横型は16:9を維持する / qa済 2026-07-17 / launcherの事前検知を追加してもorbital案件の更新不能は解消しなかった / 完成manifestが要求するpreset実装がGitの到達不能オブジェクトに残り、backend registryと能力宣言へ入っていなかった / 完成案件固有presetも実装・registry・capabilities・有効manifestによるrender smokeを同じ変更単位で揃え、実案件のrefresh成功まで確認する / validate済 2026-07-25 / ランチャー検索に projects/<slug>/dist/<runId>/final.mp4 を貼っても案件がヒットしない / name/slug/runId に対して query の片方向 includes だけだった / 通常検索は部分一致、パス貼り付けは path セグメントと slug/runId の完全一致にして短い slug の誤ヒットを避ける / validate済 2026-07-25 / HyperFramesがBGM+ナレーション同時でoverlapping_clips_same_trackエラー / renderAudioがroleごとにindex+2を付け直しtrackが衝突した / bgm・narration・sfxの全audio要素に一意のdata-track-indexを割り当てる / validate済 2026-07-25 / エンジン制約と誤って話者・モーション不可と説明した / backends/hyperframesジェネレータがspeakers/visual/timelineを出していなかっただけ / 能力欠如を報告する前に当該backendジェネレータの実装を確認し、不足なら実装か明示的な未対応として切り分ける / observed 2026-07-29 / 元Zoom録画と同一の7.48秒無音だけを含む完成動画がGate 3で承認不能になった / Gate 3が出力単体の固定3秒閾値だけを見て元素材から継承された自然な無音と新規音声欠損を区別しない / 単一素材を音声ごと保持する案件では元入力と最終出力の無音区間を同一閾値で比較し、時刻と長さが一致する継承無音は欠損と分けて人へ提示する / documented 2026-07-31 / 640×360レビューで適正だった固定px文字が2560×1440本番との画面比率を一致させられなかった / オーバーレイ寸法をcomposition解像度と独立した固定値で実装した / 文字・余白・線幅は基準解像度に対するcomposition幅で縮放し、レビューと本番の代表フレームを両方確認する / qa済 2026-07-31 / 同一runのreview-previewを並列実行すると一部がrun.lockedで失敗した / preview生成がrun単位のmutation lockを共有する / 同一runのapproval-gated previewは直列実行し、並列化はrunが異なる場合だけにする / qa済 2026-07-31 / 2560×1440 Remotion renderがローカル動画fetchで3回失敗した / Data volumeの空きが3.8〜4.8GBしかなく、fetch再試行を増やしても容量不足を解消できなかった / 高解像度render前に空きを確認し、目安15GiB未満なら再取得可能キャッシュを整理してから開始する / qa済 2026-08-04 / Fish Audio s2-pro 直叩きが 402 で止まり後付けナレが遅延した / API credit と platform free model を混同し、既存 fish-tts-free(s2.1-pro-free)を先に試さなかった / Fish 作業は fish-audio-doctor のあと必ず fish-tts-free を第一経路にし、s2-pro は有料クレジット確認後のみ使う / validate済 2026-08-04 / HyperFrames 後付けタイトルがユーザーから見えない・ダサいと判定された / opacity:0+GSAP と太い縁取りグローで、実画素焼き付けとシネマ明朝設計が不足した / 完成度の高い既存映像への文字載せは薄い明朝・字間・淡いグローの PNG を ffmpeg overlay で焼き、冒頭/セリフ/エンドを別レイヤで管理する / qa済 2026-08-05 / 手組 Gate3 scaffold で gate approve が state.invalid と manifest.clip.src.exists で止まった / approved_input_digest に非 hex 文字列を入れ、run-dir manifest が project 相対 path(edit/・media/)のままだった / Gate3 は dist//assets/* 相対の assembled manifest + final.mp4/gate3-qc/render-report を揃え、digest は sha256 hex のみ。QC は pipeline の inspectGate3Output で再生成してから gate approve / validate未 2026-08-05 / hybrid MV でロケ・季節 NG(外国Lodge・川密着・雪・オーロラ)が still/動画後に発覚し再生成が増えた / 舞台正本と禁止要素を still 生成前に LOCATION-LOCK として固定しなかった / 実在ロケ案件は still 前に LOCATION-LOCK(距離感・季節・禁止物)を書き、prompt と still QA の両方で照合する / validate未 2026-08-07 / street-dialogue で全身ジェスチャ板を mouth_frames に入れると身振りが早送りに見える / 口パク用の既定 mouth_fps=8 のまま体勢差の大きい板を回した / 全身ジェスチャを口差分に混ぜる場合は presentation.mouth_fps を 2〜3 に下げ、大きいポーズ差は caption.pose 側に寄せる / validate済 2026-08-07 / 長いイベント名で street タイトルがはみ出し「松本」が切れた / TitleTag が nowrap 一列固定だった / 長い日本語タイトルは title_lines で折り返し、地名などは title_popup でバッジ化する / validate済 2026-08-07 / 縦長 street 案件で symlink 共有アセットが validate に落ちた / media を project 外へ symlink すると asset root 外と判定される / 共有したい素材も案件内へコピーするか、同一 project root 内に置く / validate済 2026-08-07 / 9:16 photo-first の見出し・字幕が極端に小さく読めない / HyperFrames themedStyles が縦でも 1920×1080 基準 scale を使い ≈0.56 倍に縮小していた / 9:16 は 1080×1920 基準 scale を使い、photo-first 縦向けに headline/caption の専用タイプスケールを持つ / validate済 2026-08-07 / MVの効果ヒット(揺れ・SE)が歌詞表示と重なり意図とずれた / 音声RMSピークや曲の拍だけを優先し、テロップ表示区間の終端を拘束しなかった / 歌詞連動の画面効果は「該当フレーズの表示終了後」または明示した固定秒を先に決め、表示中に次効果を重ねない。QCは終端前後の静止画で確認する / observed 2026-08-07 / 曲に挿したエンジンSFXが一発目からうるさく再ミックスが必要になった / ベッドとリリックヒットを同時に強め、全体バスも高く残した / 環境SEは初回を薄め(ベッド低・バス0.5前後)で出し、リリック必須ヒットだけ相対的に上げ、ユーザー確認後に全体を上げる / observed 2026-08-11 / 長尺アーカイブダイジェストのシーン見出しがダサい・小さく・位置が悪いと差し戻された / チャンキーな HIGHLIGHT バッジや右上固定透かしを先に決め、中央→上部の動きとサイズをユーザー確認前に固定しなかった / アーカイブ切り出しダイジェストでは (1) 下帯焼き込み字幕と被らない位置 (2) ガラス薄板+細いアクセントのエディトリアル見出し (3) 各カット冒頭は中央ポップ→上部定着 (4) シリーズ透かし位置は左上を既定候補として見せ、サイズは一回り大きめから提示する / observed

2026-08-12 / still-heroで生成静止画を前面にしたらキャラが消えた・文字が重なった / SceneStillをAbsoluteFill+zIndex全面にし、TitleTagとTopicCardとCaptionを同時表示した / still-heroでは (1) 静止画は枠内divのみで全面AbsoluteFillを使わない (2) キャラは高いzIndexで下部に大きく出す (3) 大きなTitle/Topicカードを重ねず薄いHeader+静止画下端見出し+下帯テロップに分ける / observed

2026-08-17 / 告知の締め写真に前作の見出しが二重に乗った / 完成済みMP4からタイトル焼き込み済みフレームを切り出して背景にした / 前作映像から背景を取るときは文字のない区間だけを正本にし、焼き込み済みフレームを使わない / observed 2026-08-17 / 案件内Remotion差し替え後にrunがgate.review_changedで止まった / placeholder clipとcaptions空化を同時に行い、承認済みreview digestとずれた / 差し替え後はreviewを取り直し、Gate 1をrevise→再承認してからrunする / observed 2026-09-04 / 手組 Gate3 scaffold の非 hex digest は既存機械検査で止まる / approved_input_digest は src/orchestrator/statePersistence.ts で sha256 hex 64 桁に拘束済み / 手組 state は使わず inspectGate3Output 経由で揃える。LESSONS 2026-08-05 の機械側は validate済 / validate済 2026-09-04 / 実在ロケの LOCATION-LOCK は scene 正本の運用確認に留める / still 前の距離感・季節・禁止物は identity-lock 設計の scene 層で書く / 共有 SKILL への条文昇格は人間承認後。設計メモへ参照を追加 / documented

2026-09-06 / Premiere 26.2のMCP trimでsource outのみ変わりtimeline endが不変、Undoは素材配置を戻した / CEPの構造編集・Undo粒度を実機結果と取り違えた / source範囲とtimeline尺を両方読み戻す。不一致は再送せずコピーから復旧し、承認済み編集をGUIで実施して映像・音声・保存再読込を照合する / Premiere 26.2.0・MCP 1.14.9で実機確認済、premiere-editing Skillへ反映

2026-09-06 / 最新config選択テストがUbuntu CIで同時刻となりcanonicalを選択 / 作成順だけでmtimeの大小を仮定していた / 新旧判定のfixtureはutimesで順序を明示し、実時間やファイルシステムの時刻分解能に依存させない / viewer-launcher回帰テストへ反映 2026-09-08 / AE 2026が名称未設定の編集画面でもエージェントosascriptのDoScriptはtimeoutしresult.jsonが無い / get name成功やCUAの空プロジェクト表示を接続とみなした / AppleScript get nameとDoScriptFileは別。inspectがresult.jsonを返すまで空と確定せずfixtureしない。timeout後は同じDoScriptを再送しない / After Effects 2026 26.2.1、helper inspect 90s timeout、sampleはNSApplication run。設定は未変更 2026-09-08 / スクリプトのファイル書き込み許可をONにしたあとDoScriptFileがresult.jsonを返しinspect/fixture/日本語add-titleが成立した / 画面到達と書き込み許可を接続と切り分けずtimeoutを設定オフと断定できなかった / result.jsonが書けてから接続とする。許可は説明して承認したあとだけ有効化する。sourceは別名outputへ保存しhashで不変を見る / AE 2026 26.2.1、許可ON後に実機確認。exportは未対応 2026-09-10 / HyperFrames Studioの12ツール発見だけでは編集可否を証明できず、0.8.33のset_textは実ブラウザでsignal引数の例外になった / 登録契約とconsumer APIの実行契約、現行ガイドと固定版の選択契約が異なる / 実ブラウザの発見→選択→最小編集→source保存→reload→画像で対応版を決める。0.8.24を互換固定し、Shadow DOM内の実プレビュー準備後にlook/inspectを別callで実行し、書込前は選択を確認する / Chrome 152 native WebMCP・fresh fixtureで実証、docs/reports/hyperframes-studio-webmcp-2026-09-10.md 2026-09-10 / Studioの保存とreloadが成功してもstudio_frameが編集前PNGを返した / PNG形式だけのsmokeでは古いrender cacheを検出できなかった / 保存済みsourceと画像内容は別に確認し、公式settleMsで画像取得のみを有期限再試行する。固定fixtureでは変更色の画素を検査し、画像更新後にreloadを確認する / 旧画像0画素・新画像1566画素で差を実証、検証scriptを強化 2026-09-10 / WebMCPの実機失敗が文書末尾にだけ記されREADMEと冒頭の成功表現が残った / 個別run成功と全体の受入状態を混同した / 最新の受入状態を入口と記録冒頭で統一し、失敗phase・実DOM・process-tree停止証拠も残す / GitHub反映前の再精査で修正、reload後inspectにも失敗例あり 2026-09-10 / Studio inspect がプレビューに data-hf-id があるのに no element matches handle を返した / 配信 HTML は /assets/index-*.js を読み、asHtmlElement が instanceof defaultView.HTMLElement を必須にする。dist/studio/index.js だけの修正は配信面に届かない / 配信バンドルをバージョン+sha256+出現回数で fail-closed パッチし、受け入れは HTML 名前空間・同一 document・isConnected に限る。ツール差し替えと ID 事前付与は使わない / documented 2026-09-10 / HyperFrames の adm-zip に修正版がなく root 全依存 audit が落ちた / 公開 package.json や lock から依存宣言を消すと npm install で戻る / overrides.adm-zip を npm:fflate@0.8.3 にし、installed package.json の name/version と lock の resolved を検査する。ZIP API は in-memory adapter へ CLI import をパッチし、展開は選んだ entry だけにする / documented 2026-09-10 / central-directory の uncompressedSize を小さく偽ると inflate 後の長さ検査の前に大域確保が起きる / 宣言値は攻撃者が書ける / Node zlib inflateRawSync の maxOutputLength で出力上限を課し、CRC と宣言長は成功後に照合する。偽サイズの DEFLATE 回帰を必須にする / documented 2026-09-17 / Editframe render --width/--height が unknown option で即死した / CLIはtimegroup寸法だけを見る / width/heightフラグは渡さず、ルートTimegroupを1080×1920で固定する / documented 2026-09-17 / 9:16 Editframe試作が左上に潰れ、グラデも文字も欠けた / @tailwindcss/vite なしで absolute/inset/flex に依存した / 公式サンプル同等のTailwindプラグインを入れ、重要配置はインラインstyleにする / documented 2026-09-17 / 公式レター切り抜きが左右欠け、同名JPEG差し替えが古い画のまま出た / ef-imageはobject-fitを守らず、ファイル名キャッシュが残る / 切り抜きは別名ファイル+CSS background contain。カバーで左寄せロゴを切らない / documented 2026-09-17 / 9:16告知の下が大きく空き、ユーザーが余白を指摘した / 見出しを中段固定のtop値だけに置き、画面下まで伸ばさなかった / 2026-07-16と同系統。9:16はtop/bottomを固定したflexで埋め、初回QA静止画で下部空きを見てから再レンダーする / recurring・昇格候補 2026-09-17 / ElevenLabs Creative Scribe MCPは全文とspoken_durationだけ返し単語時刻が無い / REST STTのwords配列やtimestamps_granularityをCreative transcribe_audioが公開しない。再実行は二重課金 / 歌詞時計が要るときはScribeテキストを正本照合に使い、時刻はforced alignmentかローカルword timestampsを公式歌詞へ載せる。transcribe_audioは一度だけ / observed 2026-09-17 / Hypitのgrapheme Sequenceを歌詞98塊へ一斉適用したら HyperFrames が capturing frames でタイムアウト / 単位アニメは文字数×塊数でキャプチャが重くなる / タイプ感は clip-right の開きを主にし、graphemeは短い数塊だけ。end-indexは実文字数と一致させる / observed

Fast Edit native parity (2026-09-20)

  • MP4/ffprobe/audio/duration success does not prove timed overlays. Editframe 0.59.47 exports a cloned timegroup; addFrameTask and instance method overrides are not copied. Use the SDK's copied onFrame property and resolve descendants through its element argument. Verify late beats and transition frames, not only time zero.
  • HyperFrames extracted video composition does not preserve every CSS video filter. Bake the common color treatment into local, run-owned source derivatives before native compositing; retain the original Manifest and source audio.
  • Editframe native HTML-in-Canvas capture can retain stale pixels during transparent transitions and produce unstable vertical frames. Use an opaque root and the official foreign-object capture path; compare transition-boundary frames and OCR every caption before claiming parity.

2026-09-24 / 完成済みMVへ追加した導入だけ明るく、正本へ切り替わる6秒で急に暗く見えた / 新しい導入に正本v27の色調・周辺減光・粒子などの仕上げを適用せず、技術QCと離れた代表フレームだけで合格にした / 正本の前後へ映像を加えるときは仕上げ処理を導入にも適用し、完成ファイルの接続直前・直後と連続フレームを目視確認する。音は別に確認し、issue 0を視覚品質の代用にしない / r5の接続前後とGate3 QCで確認・observed、共有ルールへの昇格なし

Isolated v2 verification (2026-10-18)

  • Audit every independent distribution lockfile, including optional dependencies, before publishing. A successful root audit does not cover v2/package-lock.json; alpha.1 was published before its separate audit found SDK/transitive advisories. Pin the patched SDK, resolve a fresh isolated lock, add a required v2 audit lane, re-test MCP and publish a new version without rewriting the old tag/assets.
  • Credential filters for copied legacy data must share one normalization/predicate across the manifest and referenced JSON. Cover snake/kebab/camel/acronym names at nested array/object levels, test dummy values and rejection messages, and hash the inspected bytes before copying. This identifies structured credential fields, not arbitrary secrets in prose.
  • A video with visible captions does not prove soft support. Check that soft output has an extractable subtitle stream and unchanged source pixels; check burn output pixels and the absence of a second default VTT preview track. Apply the shared mode consistently to each renderer.
  • A shared node_modules symlink does not prove a worktree's lockfile is installed. Record expected and actual package versions before classifying a full-check failure; never patch shared dependencies to repair another worktree's result. The v2 branch expects HyperFrames 0.8.75 while the primary checkout's shared installation is 0.8.24.
  • A fetch implementation can normalize or replace Host. For adversarial Host/rebinding tests, use a raw HTTP client so the test actually sends the requested header; assert the server's rejection without weakening its Host check.
  • An installed FFmpeg path is not a capability/readiness result. Check -version and required filters: the minimal build can lack libass, and an existing full build can fail to start after a shared-library upgrade. Keep standard subtitle tracks available, fail burn-in preflight explicitly, and do not repair shared media software as an incidental test action.
  • A registry-selected exact package must be matched against the extracted package name/version, not only npm's reported archive filename. Keep scripts disabled and tar extraction bounded; reject path escapes, links and unsupported extension records before registering any plugin.
  • A provider trace ID is not an idempotency guarantee, and request-level credits may be preliminary. Persist async identity before polling, never repeat ambiguous submissions automatically, retain unknown charges, and distinguish synthetic protocol evidence from actual billing acceptance.
  • Copying legacy JSON through an ordinary object can discard a literal __proto__ data field. Use a data dictionary, verify every copied media/character-lock hash and keep archived native graphs non-executable; neither archived approvals nor source credentials can become v2 authority.
  • Git-ignored compatibility/evidence directories can still match a test runner's file glob. Exclude the independent v2 tree explicitly from the v1 runner and verify discovery; preserve the exported fixture sources rather than deleting them just to make a check pass.

Applying a source release locally (2026-10-18)

  • A merged PR/tag is not proof that the primary local runtime was updated. Check the actual checkout, dependency identity, build and normal entry before reporting deployment. Preserve dirty source with a private backup and a reviewed three-way merge; retain existing runtimes before replacing repository-local dependencies. Never include private projects or credentials in the release.

  • Related dependency families must be tested together: Remotion runtime modules, React/React DOM, and Vitest/coverage. Old green PR checks on a branch behind main do not prove the combined current runtime. Record one disposition for every queued PR, and close replacement requests only after verified target versions land.

  • A primary checkout can contain nested worktree copies that a test glob discovers despite Git ignore. The deployment audit found 1,981 candidate files, including .work and .claude/worktrees copies. Exclude those source-copy roots explicitly, verify both normal/coverage discovery with a real nested fixture, and preserve the working data instead of deleting copies to make checks pass.

  • 2026-10-18 / Sandboxed npm pack failed while writing the default home cache / npm suggested changing cache ownership even though the task only needed a writable cache / Use a task-owned temporary npm cache, keep user/global configuration unchanged, and check pack exit status before parsing metadata or starting an install / verified with the source-only alpha package

  • 2026-10-18 / Forge 8 passed old source tests but would fail packaging / The packager switched hooks from callbacks to a single options object; the old test repeated the obsolete call contract / Test the installed upstream hook runner during major upgrades, then migrate to the options/Promise contract and check platform branches before merge / regression reproduced and fixed

2026-10-19: 動画ツール更新の互換確認

  • 依存の版だけでなく、独立v2プラグインのpeer指定、実CLIのhelp、ローカルSDKの入口を照合する。SDK分割・CLI引数変更・native bridge化は合成fixtureのcheck/plan/renderで確認し、既存Productionを自動変換しない。
  • 分割されたruntimeは入口ファイルだけでなく実行chunkも計画へ結び付ける。固定ハッシュは公式ソースとコンパイラを確認してから更新し、改変拒否の検証を維持する。
  • Chrome WebMCPの引数契約は実ブラウザと公式APIで確認する。Chrome 155ではRegisteredToolとオブジェクトを渡し、入力をJSON文字列化しない。
  • packは対象パッケージの実ディレクトリで実行し、JSONのname/version/filesを照合する。--prefixやJSON配列の仮定だけで公開対象を判定しない。
  • durable projects/にも過去のworktreeやテストが保存されうる。rootの通常/coverage両runnerで制作ディレクトリを明示除外し、アーカイブを削除せず検索契約をfixtureで検証する。

2026-10-19: 制作ガイドの音声QA

  • FFmpegのvolumedetectは完全な無音PCMでも約-91dBの有限値を返す。有限の音量値だけで音声ありと判定せず、実際に復号したPCMも検査する。計測と聴音記録は別に残し、未視聴・未聴音をQA完了にしない。無音ナレーションを実書き出しする回帰テストで確認する。

  • 品質検査の採取位置は、元素材の先頭だけでなく実際の再生区間と対応づける。ループは素材の先頭へ折り返す時刻を含め、音声は予定された遅い開始位置も含む試写全体を確認する。

  • ソフト字幕は画像の目視だけで存在を確認できない。字幕を維持する計画では実MP4の字幕ストリームも必須検査し、欠落した書き出しをQA通過にしない。

  • ループの検査は映像だけで終えず、音声も素材末尾から先頭へ折り返して採取する。素材長と同じoffsetと末尾付近のoffsetを実メディアで検証する。

  • 観察レポートは、観察を記録した画像・音声の実ファイルとハッシュを保持する。同じ出力の再測定で新しい証拠を作っても、旧パスの観察と混在させない。

  • 証拠ファイルだけでなく、必要な証拠の一覧を含むレポート全体も生成時のハッシュで固定する。現在ポインタ・明示指定の過去レポート・選択後の再利用・観察付き品質レビューの各入口で改変を検出し、項目削除で確認数を減らせないことを検証する。