Skip to content

軌道修正C-7反証(8)(9)是正: G-EDIT-TRIM-Eの検証を恒真式から実測ベースへ作り直し - #101

Merged
github-actions[bot] merged 1 commit into
mainfrom
claude/checkin-v9yb0x
Aug 12, 2026
Merged

github-actions[bot] merged 1 commit into
mainfrom
claude/checkin-v9yb0x

Conversation

@rahiseko-alt

Copy link
Copy Markdown
Owner

概要

G-EDIT-TRIM(無音・言い淀みの自動カット)に残っていた軌道修正チェックリストC-7の反証14件のうち、未処理だった5件について調査した結果、重要な事実が判明しました。

G-EDIT-TRIM-B/C が凍結しているMFCC+DTW検証方法は、このリポジトリの全履歴・全ブランチのどこにも実装されたことがありません(全オブジェクトを走査して確認。criteria本文の数値「10.022」等はroadmap散文1箇所にしか存在せず、コード・fixture・evidenceのいずれにもありません)。同様に G-EDIT-TRIM-E も一度も実行されたことがありませんでした(verifyCmdが無く、テストにも一切登場しない)。

反証(1)(2)(3)(B/Cのマッチャー新規実装・fixture再合成)は想定より大きな作業のため、今回は反証(8)(9)(TRIM-Eの全面作り直し)を完結させ、(1)(2)(3)は次回セッションへ申し送ります。

このPRでやったこと

反証(8)(恒真式)

旧verifyは、焼き込みに使った .ass の表示中央フレームをOCRで読む方式でした。しかし .ass は remapWords(検証対象そのもの)の出力から生成され、ffmpegが焼くのも同じ .ass のため、remapWords がどう間違っても両辺に同じ誤りが乗ります。実測: 字幕を一律+0.5秒ずらした偽物が旧条件を4行中4行合格しました。

反証(9)(karaoke既定との矛盾)

出荷既定のkaraokeスタイルは1語ごとにDialogueイベントを出しますが、テキストは常に行全体(現在語だけ色変え)で次のイベントでも出続けます。旧条件「表示終了+0.2秒後は読めない」は、正しい実装でも4行中2行が不合格になっていました。さらに最後の行は常にクリップ終端で終わるため、+0.2秒後のフレームがどのスタイルでも存在しません(反証の指摘には無かった追加欠陥)。

是正

比較相手を .ass から出力音声そのものへ変更しました。発話開始時刻は remapWords からも keep スパンの再計算からも導かず、出力音声のRMSエンベロープ(10ms窓・ピーク比5%閾値・150ms結合ギャップ)から独立に測ります。「表示終了+0.2秒後は読めない」条件はkaraokeで原理的に成立しないため廃止し、受入事実を「字幕の表示開始が実際の発声時刻と一致する」の1つに絞りました(AGENTS.md「1葉=1事実」)。

新テスト video-shorts/tests/trim-caption-sync-check.mjs を新設(9 PASS/0 FAIL)、package.json のtestチェーンへ登録しました。

basis-reviewerに2回通しました

1回目のレビューで、

  • 凍結メモに書いた「探り済み」の記録(do-nothing fakeを当てた結果)が実測と食い違っていた(「4語中3語不合格」と書いたが実際は4語中4語)
  • 許容誤差±0.3秒(旧ASR比較時代の値をそのまま流用)では、字幕が一律+0.10〜+0.29秒ずれる偽物を検出できない(偽の緑)

の2件の反証を受けました。両方を実測しながら是正(記録を実測値へ訂正、許容誤差をRMS法自体の実測誤差0.038秒の約2.1倍である±0.08秒へ締め、その攻撃を検出する対照Cを追加)し、2回目のレビューで反証なしを確認しています。

G-EDIT-TRIM-E はcriteria再凍結のみに留め、done 化はしていません(本人採点の禁止。independent-verifierまたはCIでの実行結果を見てから次回判断します)。

docs/failures.md に、調査エージェントの要約をそのまま「探り済み」の証拠として転記してしまった今回の失敗と教訓を追記しました。

スコープ外(次回セッションへ申し送り)

  • 反証(1)(2)(3):G-EDIT-TRIM-B/C の検証をMFCC+DTWでPython+numpy新規実装し、calibration.flac/calibration.json を再合成する必要があります(影響範囲・espeak-ngの再現性確認・CI追加要件はmeta.nextに詳細を記録済み)。
  • G-EDIT-MOSAIC-UI(凍結中)・STAGE-2(frozen)には一切触れていません。

テスト

pnpm -r --if-present typecheck   # OK
pnpm -r --if-present lint        # OK
pnpm -r test                     # 全件PASS(新テスト含む)
pnpm -r --if-present build       # OK
pnpm audit --audit-level moderate  # No known vulnerabilities
node scripts/verify-roadmap-evidence.mjs   # OK
BASE_REF=origin/main node scripts/verify-criteria-freeze.mjs   # OK
BASE_REF=origin/main node scripts/verify-done-gate.mjs         # 対象外(新規doneなし)

Generated by Claude Code

着手前の調査で、G-EDIT-TRIM-B/Cが凍結しているMFCC+DTW検証はこのリポジトリの全履歴・
全ブランチのどこにも実装されたことが無いと判明した(全オブジェクトを走査して確認。
criteria本文の数値はroadmap散文1箇所にしか存在せず、コード・fixture・evidenceの
いずれにも無い)。同様にG-EDIT-TRIM-Eも一度も実行されたことが無かった(verifyCmd無し、
テストにも一切登場しない)。反証(1)(2)(3)はマッチャーの新規実装とfixture再合成を要する
大規模作業と判明したため、まず反証(8)(9)(TRIM-Eの全面作り直し)を完結させ、(1)(2)(3)は
次回セッションへ申し送る。

反証(8)(恒真式): 旧verifyは.assの表示中央フレームをOCRするが、.assはremapWords(検証
対象そのもの)の出力から生成されffmpegが焼くのも同じ.assのため、remapWordsがどう間違って
も両辺に同じ誤りが乗る。実測: 字幕を一律+0.5秒ずらした偽物が旧条件を4行中4行合格した。

反証(9)(karaoke既定との矛盾): 出荷既定のkaraokeスタイルは1語ごとにDialogueイベントを
出すがテキストは常に行全体(現在語だけ色変え)で次のイベントでも出続けるため、旧条件
「表示終了+0.2秒後は読めない」は正しい実装でも4行中2行が不合格になっていた。さらに
最後の行は常にクリップ終端で終わるため+0.2秒後のフレームがどのスタイルでも存在しない。

是正: 比較相手を.assから出力音声そのものへ変更した。発話開始時刻はremapWordsからも
keepスパンの再計算からも導かず、出力音声のRMSエンベロープ(10ms窓・ピーク比5%閾値・
150ms結合ギャップ)から独立に測る。「表示終了+0.2秒後は読めない」条件はkaraokeで原理的に
成立しないため廃止し、受入事実を1つに絞った(AGENTS.md「1葉=1事実」)。新テスト
video-shorts/tests/trim-caption-sync-check.mjsを新設し、package.jsonのtestチェーンへ登録。

basis-reviewerに2回通した。1回目で(a)「探り済み」の記録(do-nothing fakeを当てた結果)が
実測と食い違う(4語中3語→実際は4語中4語不合格)、(b)許容誤差±0.3秒(旧ASR比較時代の値の
そのまま流用)では字幕が一律+0.10〜+0.29秒ずれる偽物を検出できない(偽の緑)、の2件の
反証を受けた。両方を実測しながら是正: 記録を実測値へ訂正、許容誤差をRMS法自体の実測
誤差(0.038秒・決定的で3回とも同一値)の約2.1倍である±0.08秒へ締め、その攻撃を検出する
対照Cを追加。2回目のレビューで反証なしを確認した。TRIM-Eはcriteria再凍結のみに留め、
done化はしていない(本人採点の禁止。independent-verifierまたはCIでの実行結果を見てから
次回判断する)。

docs/failures.mdに、調査エージェントの要約をそのまま「探り済み」の証拠として転記した
今回の失敗と教訓を追記した。meta.next/meta.handoffをこのセッションの内容へ更新した。

Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2680fb4a-85ae-49ea-8132-d6297a9e27f2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@rahiseko-alt
rahiseko-alt marked this pull request as ready for review August 12, 2026 12:43
@github-actions
github-actions Bot merged commit 0e9b187 into main Aug 12, 2026
14 checks passed
@github-actions
github-actions Bot deleted the claude/checkin-v9yb0x branch August 12, 2026 12:43
rahiseko-alt pushed a commit that referenced this pull request Aug 12, 2026
meta.next/handoffの是正コミットが「C-7は全件[x]済み」と案内する一方、GOAL.detail
本体のC-7チェックリスト項目は[ ]未チェックのまま旧い「未処理5件」の記述が残って
いた。(8)(9)(PR #101)・(1)(2)(3)(PR #102)の反映を記録し[x]へ更新した。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y
github-actions Bot pushed a commit that referenced this pull request Aug 12, 2026
* 軌道修正C-7 反証(1)(2)(3)是正: TRIM校正素材の作り直しとB/Cのsubsequence DTW再実装

反証(2)(3)是正のためcalibration.flac/jsonを作り直した(index6をあのー→なんか、
index7をこんにちは→はいへ差し替え)。語4つがすべて異なる語になり、フィラー最長が
語最短を上回るため単純な長さヒューリスティックでは分離できない構成にした。

反証(1)(等長窓スライドDTWがフィラー音声の75〜90%残置を検出できない構造上の欠陥)
是正のため、G-EDIT-TRIM-B/Cの照合方法を開始・終了位置自由のsubsequence DTWへ
全面作り直した(video-shorts/tests/trim-filler-match-check.py、numpyのみで実装)。
判定対象の出力音声はvideo-shorts/tests/trim-filler-audio-helper.mjsが本物の
buildTrimFiltersを呼んで作る。

TRIM-A/DはSHA・数値参照の追随更新のみ。関連するmeta.basisChangesを4件追記。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y

* basis-reviewer指摘の3件を是正: TRIM-Bの範囲を実測どおりに絞り、TRIM-Cへ語脱落の実行記録を追加

反証1(sufficient): TRIM-Bのcriteria.textが「75%以上の残置も含めて含まれていない」と無条件に
書いていたが、verifyが実測していたのは0%と75%/90%(2区間のみ)だけだった。フィラー4区間×
25〜70%を実測すると検出境界が50〜65%の間でフィラーごとに揺れ、非単調な区間もあると判明。
受入事実を「65%以上は必ず検出される(4区間×3水準で実測)。25〜64%は対象外」へ絞った。

反証2(probed): TRIM-Cに「語が丸ごと消えた壊れた実装」を実際に落とせることを示す実行記録が
無かった。trim-filler-match-check.pyへ語4区間それぞれを丸ごと欠落させる対照テストを追加。

反証3(sufficient): G-EDIT-CAPTION-Dのdetailが「index1/7はこんにちは」という、今回のfixture
変更で誤りになった記述のまま残っていた。index1のみに修正。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y

* basis-reviewer2回目指摘の是正: fixture作り直しに伴う総尺11.402812秒の記述漏れを解消

G-EDIT-TRIM-E.criteria[0].verifyとG-EDITOR.detail(素材TV/素材Qの定義)が、
2026-08-12のcalibration.flac/json作り直し後もPR-1時点の実測長11.402812秒を
参照したままだった。実測値11.052517秒へ更新し、素材Qの連結式(5×11.052517=
55.262585秒)・末尾無音の長さ(4.737415秒)も追随して直した。日付つきの過去の
是正記録(2026-08-11 C-14等)はそのまま残し、旧値がいつの値だったか明記した。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y

* basis-reviewer3回目指摘の是正: meta.next/handoffの更新漏れとコメント残骸を解消

meta.next/meta.handoff.done[0]が、既に完了した(1)(2)(3)是正をまだこれからの
作業として案内し続けていた(3コミット分の更新漏れ)。本セッションの実施内容・
トラブル・次回申し送りへ更新した。trim-plan-check.mjs:47の旧尺コメント(11.403)
も新尺(11.053)へ修正した。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y

* basis-reviewer4回目指摘の是正: GOAL.detailのC-7チェックリスト項目をmeta.nextと整合させる

meta.next/handoffの是正コミットが「C-7は全件[x]済み」と案内する一方、GOAL.detail
本体のC-7チェックリスト項目は[ ]未チェックのまま旧い「未処理5件」の記述が残って
いた。(8)(9)(PR #101)・(1)(2)(3)(PR #102)の反映を記録し[x]へ更新した。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MAUag1h71G7iuEjp4hz9Y

---------

Co-authored-by: Claude <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.

2 participants