v5.5.17
Added
feat(video-description): skill-config にchapters_enabled(既定true)を追加し、章運用を廃止したチャンネル(BGM / ASMR 等)向けの標準 opt-out を提供した(#1665)。config/skills/video-description.yamlでchapters_enabled: falseを設定すると、タイムスタンプ列(チャプター行・テーマ見出し行)の生成・重複トラック名の LLM リネーム・workflow-state.jsonへのtrack_display_names永続化をすべて skip する(構造化メタブロック / Music Time セパレータ / playlist 名 / CTA / hashtag は変わらず生成)。未設定チャンネルは既定trueで挙動不変feat(skills): 2026-05 skills 監査の残件として、skill-config 未適用スキルの直書き値を skill-config 機構へ切り出した(#1669)。(1) analytics-collect / analytics-analyze 双方に直書きされていた鮮度判定しきい値(30 分)をanalytics-collect/config.default.yaml::freshness_minutesに単一ソース化(config/skills/analytics-collect.yamlの上書きが両スキルの判定に効く)。(2)discover-competitors(検索フィルタ既定値・キーワード数ガイドレール)/live-clean(削除対象・保護パターン)/postmortem(症状判定しきい値・仮説マッピング係数)/video-upload(preflight 探索パターン・誇張語 NG リスト)にconfig.default.yamlを新設し、各 SKILL.md の直書き値を config 参照へ書き換えた。yt-discover-competitorsは CLI フラグ既定値をload_skill_config("discover-competitors")経由で解決する(CLI フラグ明示指定 > チャンネル上書き > default)。(3)analytics-reportの#Shorts除外キーワードと KPI カード構成をanalytics-report/config.default.yaml::html.{exclude_title_keywords,kpi_cards}に、metadata-auditの REMOTE チャプター上限(>12)をmetadata-audit/config.default.yaml::chapters.remote_maxに skill-config 化し、metadata_audit.py::audit_remoteが実行時に読むよう変更したchore(repo): リポジトリルートに.gitattributesを追加し、画像 / 音声 / 動画 / アーカイブ / フォント / PDF(計 20 拡張子)をbinarymacro で diff 抑止指定した(#1671)。git diffにバイナリ差分がテキスト表示されなくなるfeat(live-clean):/live-clean tmpとして collections 配下のtmp/残骸クリーンアップモードを追加した(#1671)。find collections -type d -name tmpで検出し、既存の大容量メディア削除と同じ「スキャン → ドライラン → 明示承認 2 択 → 削除 → レポート」フローを適用する。削除はrm -rfを使わず「ファイル単位rm -f→ 空ディレクトリrmdir」の depth-first 方式で、<CHANNEL_DIR>/tmp/(veo-operations//lyria-recovered/は /loop-video・/lyria の管理領域)と symlink は対象外。yt-clean CLI を新設しない棲み分けの根拠を SKILL.md に明記したdocs(skills): 「## 前提」セクション未導入だった 18 skill(automation-release / automation-update / channel-new / channel-research / community-post / discover-competitors / distrokid-helper / ext-install / live-clean / masterup / metadata-audit / setup / suno / suno-lyric / thumbnail-compare / videoup / viewer-voice / wf-new)に skill-authoring-guidelines 準拠の前提存在ガード(確認 → 満たさなければ前工程を案内して停止)を追加した(#1671)。これで全 skill が導入済みになる。設定読み込みゲートを持つ skill ではゲートより後に配置する既存契約(test_skill_config_defaults_have_read_gate_in_skill_docs)を維持docs(skills):/discover-competitorsの SKILL.md に他 skill と同一フォーマット(状況 / 兆候 / 対処)の「障害時ガイダンス」節を追加(#1652)。OAuth 未認証・失効時の再認証手順、YouTube quota 超過(HTTP 429 /quotaExceeded。本スキルは約 660 units/回消費)時のリセット待ち・呼び出し抑制、同一--outputでの再実行時に出力ペア(.md+ 同名.csv)が全体上書きされ部分結果は保持されないこと(途中失敗時はファイル未書き込みで前回出力が残ること)を文書化したfeat(suno-helper): 連続実行に投入方式セレクタ(Serial / Queue)を追加(#1586)。Queue は投入 ACK と clip ID 観測を確認したら生成完了を待たずに次 entry を先行投入し、最大 10 request(20 clip)まで Suno queue を使って全体の実行時間を短縮する。全 entry 投入後に生成完了をまとめて待ってから playlist 追加へ進む。進捗 UI には投入済み・生成未完了を表すsubmitted状態(琥珀色)を追加。選択は chrome.storage.local(sunoRunMode)に永続化し、既定は従来挙動の Serial。中断時は投入方式を resume state に保存し、再開は popup の現在選択ではなく元 run のモードで行う。制約: Queue は per-entry duration guard の自動再生成を行わず(範囲外 clip は playlist 追加時に除外のみ)、bridge の clip ID 観測が必須(未観測は fail-loud で run 停止)feat(suno-helper):/suno-helperを browser use 主経路で操作・監視できるように、SKILL.md に agent primary flow、DOM signal、無限待機回避、handoff 条件を追加。Chrome DevTools MCP は診断・補助・フォールバック扱いに固定し、拡張 overlay / popup にはdata-suno-*とrole="status"の観測 signal を追加した。/wf-newの Suno 後続案内も/suno-helperの browser use 主導フローへ接続する表現に更新(#1382)feat(doctor):yt-doctorに playlist スキル向けのplaylist_config/playlist_create_dry_runチェックを追加(#1504)。config/channel/playlists.jsonの欠落・JSON 破損・playlist_id未設定を channel カテゴリで診断し、PlaylistManager.create_all_playlists(dry_run=True)経路で作成計画を検証する。dry-run は YouTube API への書き込みを行わず、失敗時は human next_action で設定修正手順を示す。feat(collection-serve):yt-collection-serveに unpacked Chrome 拡張名から exact origin lock を自動解決する--allow-extension <name>を追加(#1486)。macOS Chrome profile のSecure Preferences(無ければPreferences)を走査し、extensions.settings[*].pathが絶対パスかつ basename が指定名に一致する拡張 IDからchrome-extension://<id>を組み立て、既存の/auth/token/ write endpoint lock にそのまま適用する。--allow-originとは排他で、検出 0 件・複数 ID 競合・profile root 走査不可・Preferences 読み取り不可・Preferences JSON parse failure は--allow-originfallback 案内付きのConfigErrorで fail-loud する。/suno-helper//distrokid-helper//wf-newのサーバー起動手順と拡張 README も--allow-extension基準へ更新したtest(deps): 2020 年から未更新のjapanize-matplotlibの font 登録が壊れたら検知する回帰テストtests/test_japanize_font_regression.pyを追加した(plan 024)。壊れた場合の症状(日本語ラベルの豆腐化)を matplotlib のGlyph ... missing from font(s)UserWarning で機械検知する
Changed
docs(wf-new): Phase 2c の codex / single_step 分岐に残っていた textless 背景先行の旧フロー記述を、#1611 のテキスト付き thumbnail 先行フロー(テキスト付きthumbnail.jpgを先に生成・承認 → 承認済みthumbnail.jpgから textlessmain.png/jpgを再生成)へ更新した(#1854)。契約テストtest_wf_new_routes_codex_and_single_step_through_thumbnail_contractも新フロー表記をロックするよう追従refactor(repo): GitHub ownerdaiki-beppuのハードコード残存(fork 運営者に生成物のズレを生む固定参照)を整理した(#1653)。yt-doctorのautomation_packagefail 時のnext_action.cmdをautomation_update_refs.UPSTREAM_REPO定数(official upstream 検証と同じ単一ソース)から組み立てるよう変更し、リテラル重複を削減。/automation-updateに Step 1-0、/ext-installに Step 0 を新設し、両スキルのgh/curlコマンドの upstream 参照を導入済みパッケージのUPSTREAM_REPOから実行時導出する形へ置換。定数から導出できない箇所(/setupの bootstrap 用uv add(パッケージ導入前に実行)、prose・doc リンク等)は固定のまま、.claude/CLAUDE.template.mdに新設した「fork 運用者向け」節(§9)に残存ファイル一覧とrgポインタを明記した。サプライチェーン保護の_require_official_upstream/UPSTREAM_REPO自体は変更していないdocs(skills):content_model.typeの docs 表記を実装(ContentModel.type = "release" / "collection"、src/youtube_automation/utils/config/youtube.py)の正に合わせ、single_releaseをreleaseに統一した(#1772)。対象はvideo-upload/SKILL.md(完了条件 / Channel Adaptation 表 / release アップロードフロー / コマンドリファレンス)、video-upload/references/posting-checklist.md、channel-new/references/claude-md-template.md。型名の初出箇所には「release 型(単曲リリース)」の補足を付与し、doc-contract テスト(tests/test_skill_docs_consistency.py)の見出し担保も新表記へ追従。無関係な GitHub release 集約テスト名test_attaches_both_zips_to_single_releaseは誤検知回避のためtest_attaches_both_zips_to_one_gh_releaseにリネームfix(thumbnail):.claude/skills/thumbnail/config.default.yamlのimage_generation.codex.default_prompt_templateを #1611 のテキスト付き thumbnail 先行フローへ更新し、SKILL.md「既定テンプレート」ブロックと完全一致させた(#1680)。#1502 の textless 背景先行テンプレートが出荷 default に残っており、Phase 2 のテキスト付き候補生成で「タイトルテキストを入れるな」と指示する矛盾があった。channel-new の config-template(references/config-template/skills/thumbnail.yaml)も同一テンプレートへ追従。{title}の意味論(サムネに焼く見出し + 短いサブタイトルのみ。動画タイトル全文を渡さない — 全文焼き込み事故の再発防止)を thumbnail / collection-ideate の codex 例と config コメントに明文化し、collection-ideate SKILL.md の「textless 背景先行」コメント(parallel / sequential 両分岐)と Next Step / コスト拒否時の旧フロー記述を現行の thumbnail 先行フローへ修正。SKILL.md 記載テンプレートと config.default.yaml の完全一致はtests/test_thumbnail_skill_assets.py::test_thumbnail_default_config_codex_template_matches_skill_md_blockで機械担保するdocs(distrokid-helper): SKILL.md の前提チェックにconfig/channel/distrokid.json::profile.songwriterの設定確認を追加した(#1745)。schema 上は任意のまま(CLI バリデーション追加なし)、未設定時は plan / build 前に「設定して進める / フォーム手入力を了承して進める」の 2 択を AskUserQuestion で提示する。ステップ 7 のリリース日提案を「申請日から 4 営業日後の最短日をデフォルト提案(営業日 = 土日除外、祝日は考慮しない)」と明文化し、agent ごとの提案ぶれを排除。あわせてdistrokid.jsonに PII(songwriter の本名)が入りうる旨・記入例・.gitignore運用(public リポジトリでは untrack、コミット済みならgit rm --cached、履歴残存時は filter-repo 検討)をreferences/pii-gitignore.mdに単一ソース化し、SKILL.md の Overview と前提チェックから Read 誘導で接続したdocs(suno-lyric):/suno-lyricの名言取得元 iyashitour.com の安全境界を実サイト構造に合わせて更新した(#1728)。英語名言の原文ページは/meigen/配下ではなく/archives/<ID>にあるため、host=iyashitour.com / scheme=https 固定のまま「/meigen/配下のインデックスからリンクで辿った/archives/<ID>への 1 ホップ限定」を許可 path に追加(/archives/<ID>を起点にした更なる遷移は不可)。別 host / private IP /..を含む path / 許可 path 以外の停止規則は従来どおり。SKILL.md の Quote Source Safety 節と config.default.yaml の安全境界コメントを整合させたfeat(channel-new): 新規チャンネル初期化時のデフォルトschedule.cadenceを週 3 回(["tue", "thu", "sat"])から毎日投稿(["sun", "mon", "tue", "wed", "thu", "fri", "sat"])に変更した(#1730)。対象は配布テンプレート.claude/skills/channel-new/references/schedule-template.jsonとyt-channel-initが生成するschedule_config.json(cli/channel_init_templates.py::_render_schedule)の 2 箇所。publish_time(20:00)・auto_schedule_enabled(true)等の他キーは変更なし。既存チャンネルのschedule_config.jsonには影響しないfix(thumbnail): OpenAI Image provider の既定qualityをhighからmediumに変更した(#1697)。provider を OpenAI に切り替えた際に無自覚に高単価 API を叩くのを防ぐため、highはimage_generation.openai.quality: highの明示 opt-in のみとする。src/youtube_automation/utils/image_provider/config.py::_build_openaiのフォールバック既定値と.claude/skills/thumbnail/config.default.yamlの同梱既定値の両方をmediumにし、thumbnail SKILL.md の provider 切替 runbook に quality 既定値と単価差の注記を追記したdocs(live-clean): SKILL.md の障害時ガイダンスに Ctrl+C(SIGINT)中断ケースを追記した(#1696)。削除はファイル単位rm -fで idempotent(workflow-state.jsonは保護対象のため再実行時の安全性検証もそのまま機能)であり、スキル再実行で Step 1 / T1 の再スキャンにより残件から安全に継続できることを文書化。再実行時も承認ゲートを改めて通るdocs(video-upload): SKILL.md の frontmatter description に release 型(単曲リリースアップロード)の発動トリガー語(「楽曲リリースをアップロード」「リリース動画を公開」)と /short-release への棲み分けを追記した(#1692)。従来は collection 型のみ前提に読める記述で、実装は release 型対応済みにもかかわらず発動語が欠けていた。型名表記は実装の正(ContentModel.type = "release"、#1772 の用語統一方針)に合わせたdocs(skills): チャンネル運用系 6 スキル(channel-new / setup / playlist / comments-reply / pinned-comment / community-post)の SKILL.md を 7 観点チェックリストでレビューし、意味・機能を変えない記述改善を適用した(#1678)。channel-new は 3 スキル統合(#1460/#1461/#1499)で 945 行に肥大していた SKILL.md から、方向性検討モード(Step D1〜D5)・再生成モード(Step R1〜R8)・既存チャンネル取り込みモード(取り込み Step 1〜8)の手順詳細をreferences/{direction-mode,regeneration-mode,import-mode}.mdへ逐語切り出しして 553 行に削減(本文には目的・前提・完了条件と Read 誘導のスタブを残置、モード判別・新規開設モード・設定 push モード・TTP 完了条件は本文のまま)。playlist / pinned-comment / comments-reply / community-post に「## 完了条件」を明示(既存の終了記述の再掲)、setup の完了条件記述を見出し化、playlist init の「確認」を dry-run 出力提示 + ユーザー応答に具体化、comments-reply は Phase 4 と承認ゲートの間に割り込んでいた「設定スキーマ」節を Phase 5 の後へ移動し Read / Agent ツール記述に Codex 読み替え注記を追加。sonnet-safe #1517(channel-new Step 7 入口ゲート)の適用済み修正は保持docs(skills): 戦略・リサーチ系 7 スキル(audience-persona-design / channel-research / collection-ideate / viewer-voice / viewing-scene / discover-competitors / community-draft)の SKILL.md を 7 観点チェックリストでレビューし、意味・機能を変えない記述改善を適用した(#1677)。全 7 スキルの冒頭 60 行以内に「## 完了条件」を明示(既存の出力・終了記述の再掲)、「最新ファイル」検出基準を更新時刻順(ls -t)に一意化(audience-persona-design / channel-research / viewing-scene / collection-ideate)、Read / Agent / Task ツール記述に既存定型の Codex 読み替え注記を追加、audience-persona-design Phase 3 の「必要に応じて確認」と community-draft の「interactive に尋ねる」を AskUserQuestion 基準に明確化した。sonnet-safe 群(#1512〜#1524)適用済み修正は保持docs(skills): 基盤・配信系 9 スキル(automation-release / automation-update / ext-install / distrokid-helper / live-clean / streaming / wf-new / wf-next / wf-status)を 7 観点チェックリスト(トリガー明確性 / 手順の決定性 / progressive disclosure / 前提条件と失敗時挙動 / 完了条件 / 確認ポイント / Codex 共用互換)でレビューし、意味・機能を変えない記述改善を適用した(#1706)。wf-new の重複セクション見出し2b. ドキュメント保存を削除(内容は 2c-1 に既存)し references/scene_phrases.md の参照番号を実セクションに一致、automation-release の prepare/publish 判定条件の排他を明示し PR 本文 heredoc のプレースホルダ置換を注記、automation-update の同梱版取得スニペットをuv run pythonに統一、ext-install の Notes 重複記載を「## 前提」への単一ソース化で解消、streaming の前提に失敗時挙動の lead-in を追加、distrokid-helper のタイトルユニーク化実例テーブルに抜粋注記を追加docs(skills): 音楽制作系 7 スキル(suno / suno-lyric / suno-helper / masterup / lyria / videoup / loop-video)を 7 観点チェックリスト(トリガー明確性 / 手順の決定性 / progressive disclosure / 前提条件と失敗時挙動 / 完了条件 / 確認ポイント / Codex 共用互換)でレビューし、意味・機能を変えない記述改善を適用した(#1703)。(1) 7 スキル全てに「完了条件」セクションを冒頭(Overview 直後)へ追加し、後方に散在していた成功基準を先出し(詳細は各 Step を正とする要約でロジック重複なし)。(2) suno-helper の「前提」の拡張ロード済み bullet 重複と loop-video の「前提条件」の ADC bullet 重複を統合。(3) videoup のステップ 4「実行コマンドを案内」を「長時間処理の取り扱い」の background 起動規約と整合する表現へ統一。(4) lyria の Step 3 承認ゲートに確認手段(AskUserQuestion の明示 2 択 + Codex 向けテキスト承認待ち)を明記(承認必須自体は既存要件のまま)。(5) masterup / lyria / videoup / loop-video の「長時間処理の取り扱い」に Codex 等run_in_background非対応環境向けのnohup読み替えを追記。(6) masterup の Step 5.0(opt-in 音質補正)直後に「Step 5 本体: マスター結合の実行」小見出しを追加し誤読を防止docs(skills): 視覚・公開系 8 スキル(thumbnail / thumbnail-compare / short-thumbnail / video-description / video-upload / short / short-release / metadata-audit)の SKILL.md を 7 観点チェックリストでレビューし、意味・機能を変えない記述改善を適用した(#1704)。全 8 スキルの冒頭に既存記述から導出した「完了条件」セクションを追加し、short-thumbnail の前提に失敗時挙動(前工程案内 + 停止)を明記、thumbnail-compare のサブエージェント並列分析に Codex 等サブエージェント非対応環境向けの順次実行読み替えを追記、short / short-release の生成 Step から「長時間処理の取り扱い」の background 必須パターンへの参照を接続、thumbnail に章別の読み順ガイド(progressive disclosure)を追加したdocs(skills): 分析系 8 スキル(analytics-analyze / analytics-collect / analytics-report / benchmark / channel-status / video-analyze / postmortem / alignment-check)の SKILL.md を 7 観点チェックリストでレビューし、意味・機能を変えない記述改善を適用した(#1705)。全 8 スキルの冒頭に「## 完了条件」を明示(既存の出力・終了記述の再掲)、analytics-analyze / analytics-report の「最新ファイル」検出基準を更新時刻順(ls -t)に一意化、analytics-collect の Quick Reference にモード別実行コマンド対応を明記、benchmark / alignment-check の Read / Agent ツール記述に Codex 読み替え注記を追加、alignment-check Phase 5 の「必要に応じて更新」を AskUserQuestion 承認条件に明確化した。sonnet-safe 群(#1512〜#1524)適用済み修正は保持- BREAKING
refactor(repo): ADR-0021 に基づきpackages/(TS core / cli 約 28K 行)と root TS ツールチェーン(package.json/bun.lock/bunfig.toml/tsconfig.json/oxlint.config.ts/oxfmt.config.ts/knip.json/ rootpnpm-lock.yaml)を削除し、本リポジトリを Python 版メンテナンスモードに純化した(#1629)。CI の TS レーン(ts-lint / ts-format-check / ts-typecheck / ts-test / ts-knip)と push トリガーのfeat/ts-rewrite、lefthook pre-commit の oxlint / oxfmt / typecheck、CHANGELOG ゲート(CI / lefthook)のpackages//package.json対象、flake.nix devShell のbunを撤去。CLAUDE.md の「TS レイヤー(packages/)」節は ADR-0021 参照へ置換。tayk の TS 開発は専用の別リポジトリで行う - BREAKING
refactor(channel-new): 旧/channel-directionを削除し、/channel-newの方向性検討モード(Step D1〜D5)へ統合した。新規開設モードでは従来どおり方向性・差別化・ポジショニングを聞かず TTP 対象の転写要素だけを確認し、必要な方向性ブレストは同じ/channel-newの別モードでdocs/channel/channel-direction.mdに保存する。config 生成用の初期値確認は Step 1 から Step 4 へ分離し、再生成モードは方向性検討モードの成果物を入力にする契約へ更新した(#1499) docs(wf-new): workflow-state schema のassets.music_downloaded説明に、Suno 一括 DL 完了とraw_master生成前の中間状態(DL 済み・raw master 未生成)の意味を明記した(#1568)docs(skills): 主要スキル 5 件の前後工程 cross-reference を現行ワークフロー基準で補完(#1670)。/videoupに前工程/masterup(Suno 系)//lyria(Lyria 系)を明記、/thumbnailの Next Step に Lyria チャンネル分岐(/lyria)を追加、/video-descriptionに前工程/videoupへの参照、/metadata-auditの Cross References に前工程/video-uploadを追加し、/analytics-analyzeの When to Use に/wf-next完了(動画公開)から T+7 日後に実行する前提を追記したchore(deps): dev 依存(pytest/ruff)を[project.optional-dependencies].devと[dependency-groups].devの二重宣言から[dependency-groups].devへ一本化した(plan 024)。素のuv syncでruffが入るようになり、--extra dev指定は不要(README / ONBOARDING / flake.nix / CI の該当記述を更新)chore(lint): ruff のselectにB(flake8-bugbear)/RUFを追加した(plan 024)。RUF001/RUF002/RUF003(全角文字の ambiguous-unicode 検知、日本語コードベースでは誤検知のみ)は ignore、RUF043(pytest.raises の正規表現メタ文字警告)はtests/**のみ per-file-ignore。新規追加ルールで検出されたバックログ(B904のraise ... from欠落、B905のzip()strict 未指定、RUF012の mutable class default、RUF013の implicit Optional、RUF005のリスト結合、RUF046/RUF059/RUF015/RUF017/B007/B017等)を機械的に解消したchore(ci): 新規 Any 使用を検知する.lefthook/pre-push/any-usage-gate.shを CI のany-gatejob(PR イベントのみ)としても実行するようにした(plan 024)。従来は client-side lefthook のみでorigin/main不在時は self-skip していたため、CI バックストップを追加して実質 advisory だったゲートを強制力のあるものにした
Removed
refactor(cleanup): deprecated 表明済みの単発移行スクリプトyt-fix-timestamps(scripts/fix_per_theme_timestamps.py、2026-03/04 の特定コレクションをハードコード対象とする一括補修用)を削除した(#1673)。pyproject.tomlの entry point /cli_entrypoints.py/tests/test_fix_per_theme_timestamps.py/tests/test_cli_stdio.pyの参照も併せて除去。masterup SKILL.md が本 CLI を現役手順として記述していた矛盾(Step 5.7 / CLI 対応表 / フォールバック手動手順 / 完了条件)も解消した。現行のタイムスタンプ生成はmetadata_generatorのgenerate_timestamps()系が正chore(deps): import ゼロで宣言のみ残っていた直接依存seabornを削除した(plan 024)。transitive に必要なpandas/matplotlibは引き続き[project] dependenciesに独立宣言済みrefactor(utils): 旧 analytics モノリスの unreachable な残骸(report_generator.py/report_renderer.py/analytics_analyzer.py、計 1,016 行)を削除した(plan 023)。現行の analytics はanalytics_base.pyProtocol +strategic_analytics.py/ctr_analytics.py等の mixin 構成に移行済みで、これら 3 ファイルはどこからも import されていなかった。ctr_analytics.pyの docstring に残っていたanalytics_analyzer._analyze_collection_ctrsへの stale な参照も削除した
Fixed
fix(suno-helper): ユーザー操作によるstoppedを赤いエラー扱いにせず、「停止しました。再実行できます。」と通常状態で表示するようにした。fix(suno-helper): ダウンロード完了済み collection を popup の一覧から消さず、「完了 N/N」として再表示するように戻した。完了済み collection も選択でき、同じテストを再実行できる。fix(suno-helper): playlist 追加前に Lyrics editor など入力欄の focus を外し、Suno が trustedCmd+Pを無視して Add to Playlist dialog を開けない問題を修正した。fix(suno-helper): Suno の Lexical Lyrics editor で複数行の段落を改行付きで比較し、空文字クリア時はbeforeinputfallback を使うことで、反映済みでも paste / clear 失敗として停止する問題を修正した。重複 content script が同じ run を二重実行しない DOM lock も追加した。fix(suno-helper): Chrome が Suno タブへの静的 content script 登録を取りこぼして overlay が表示されない場合、ページ読込完了時に background から bundle を明示再注入して自己復旧するようにした。通常注入済みなら DOM probe でスキップし、重複起動を避ける。fix(suno-helper): Exclude Styles 欄の selector に日本語 UI の placeholder / aria-label(「スタイルを除外」等)を追加し、表示言語が日本語でも欄を検出して値を投入できるようにした(#1840)。fix(suno-helper): Suno 新 Create UI の slider リネーム(Weirdness → Bizarreness / Style Influence → Style influence〈小文字 i〉)で aria-label 完全一致セレクタが不一致となり、slider が視認できてもWeirdness slider not foundで run 全体が中断する問題を修正(#1720)。shared/dom.tsのセレクタを旧新両ラベルにマッチする case-insensitive substring match([role="slider"][aria-label*="weirdness" i], [role="slider"][aria-label*="bizarre" i]/[role="slider"][aria-label*="influence" i])へ tolerant 化し、slider 未検出時も throw(FatalRunError)せずconsole.warn+ skip で run を続行するようにした(値は UI で手動設定でき Create を跨いで永続するため中断に値しない)。skip はサイレントにせず、新設のonSliderSkip通知を GENERATING の progress message に載せて overlay / popup の status([n/total] 生成待ち…(Weirdness slider を skip しました(値は手動設定できます)))で観測可能にした。exclude_styles / vocal_gender の fail-loud 契約は従来どおりdocs(suno):/sunoボーカルモードの pattern 数 → 最終 track 数の計算式(1 pattern = 1 prompt entry = 1 採用曲。必要 pattern 数 ≈ track_count + 数%の試聴落選バッファ)を SKILL.md に明記した(#1726)。インストモード節のceil(N/2)公式と対称の比較表で並記して類推適用の余地を排除し、ceil(track_count / tracks_per_pattern)が誤りであること、pattern_strategy/tracks_per_patternは 1 パターンあたりの再生成回数の設計であって最終採用数には影響しない(採用は常に 1 グループ 1 曲)ことを SKILL.md と config.default.yaml のコメントに明文化した。曲数不足 prompts を fail-loud で止める機械検証は #1785 が扱うfix(utils):metadata_generator.py::generate_localizationsの Usage & Attribution 本文がハードコードされており、skill-configusage_attribution_lines(config/skills/video-description.yaml)の上書きが多言語ローカライズ概要欄に反映されない問題を修正した(#1650)。姉妹メソッドgenerate_complete_collection_metadataと同じ_video_description_config.get("usage_attribution_lines", [])参照に統一。これに伴い、上書きなしのデフォルト時も localizations の本文が旧ハードコード文言(• Original AI composition/• Free for personal & non-commercial use/• For commercial use, check the platform's AI content policy/• Redistribution prohibited)からconfig.default.yamlの文言(• This music is original AI composition/• Free to use for personal & commercial projects/• Attribution appreciated but not required/• Redistribution as-is prohibited)に変わり、デフォルト言語概要欄と同一になるfix(masterup):02-Individual-music/に音源が揃っているのに playlist URL 未指定を理由に「URL を教えてください」と案内して停止する誤導線を SKILL.md から除去した(#1743)。Step 1.6 の title list 取得を「第1引数の URL →workflow-state.json::planning.music.suno_playlist_urlの保存済み URL(再質問しない)→ どちらも無ければ title list の提示 or 混入込み続行の明示確認の 2 択分岐」の解決順序として明記し、引数の解釈・前提・Quick Reference にも URL 省略可であることを明示した。#1530 の fail-loud 突合ゲート契約(silent 続行禁止・混入込み続行はユーザー明示指示のみ)と Step 1.5 の DL 完全性チェック(音源不足時は不足数を提示して停止)は変更なしfix(loop-video): 既定prompt_templateが{motion_clause}の直後に強度断定「— subtle, gentle, barely perceptible, natural.」を必ず付加していたため、motion_targetsで "clearly rolling ocean waves" 等の強い動きを指定してもテンプレ側の弱化文言と自己矛盾し Veo がほぼ静止画を生成していた問題を修正(#1747)。強度断定をテンプレから除去し、動きの強度は motion_targets の文言のみで制御する方式に変更(静かな動きは "subtle steam rising from coffee" のように強度語を対象側に書く)。motion_targets未指定時は従来どおりdefault_prompt(subtle 系の静的シーン向け文言)へフォールバックするため後方互換、チャンネル側config/skills/loop-video.yamlのprompt_template上書きも引き続き有効fix(veo):smooth_loopの後処理がloop.mp4→loop_raw.mp4の rename を存在チェックなしで行っており、再生成時に前回のloop_raw.mp4が残存していると FileExistsError でクラッシュ(POSIX では無警告上書き)する問題を修正した(#1748)。rename 前に残存 raw を検出し、generate_loop_videoのloop-v{n}退避と同じ連番方式でloop_raw-v{n}.mp4へ退避してログに明示する(raw は Veo 生成・課金済みの原本のため削除しない)。/short-loop経路(short-loop_raw.mp4)と--smooth単独経路にも同様に適用される。退避ファイルの保持数上限は #1654 のスコープfix(audio-gen): Suno がダウンロード ZIP 内のファイル名からアポストロフィを除去する(例:Greed's Rhythm→Greeds Rhythm.m4a)ため、suno_downloaded_archive.pyの名前照合が失敗して該当トラックがスキップされ、placed_count < expected_countで ZIP 展開全体がロールバックされる問題を修正した(#1787)。_build_name_to_indexで index 構築後にアポストロフィ('/’)除去版キーをsetdefaultで fallback 登録する(exact match キーを優先、他の記号は Suno 仕様未確認のため除去しない)fix(lyria):yt-generate-lyria-masterのセグメント数算出(_resolve_segment_count)に hard cap(_MAX_SEGMENT_COUNT = 60)を導入した(#1698)。従来はtarget_duration_minの桁ミスで Lyria API リクエスト(= Vertex AI 課金)が無制限に発行され得たが、上限超過時は 60 に clamp して warning を stderr に出力する。上限以内の算出結果は従来どおりfix(scripts):bulk_update_descriptions_from_md.py(yt-bulk-update-desc)がvideos().update(part="snippet")の body を手組みで列挙しており、defaultAudioLanguageを含めていなかったため、このツールを通した全動画で音声言語設定が消えていた問題を修正。defaultLanguage未設定の動画に"en"を注入していた挙動も廃止。bulk_update_synthetic_media.py::build_update_bodyと同じ read-modify-write 方式(build_snippet_update_body)に統一し、mutable 6 キー(title / description / tags / categoryId / defaultLanguage / defaultAudioLanguage)だけを whitelist で保持するfix(suno-helper): queue mode で全 entry 投入後に duration guard を一括実行し、範囲外 clip のみだった entry をENTRY_FAILEDとしてfailedIndicesに保存するようにした(#1762)。対象 entry は「失敗分のみ再実行」導線に載せ、playlist 追加は保留する。部分的に OK clip がある entry は OK clip を accepted としてDONEにし、duration filter 未指定時はDEFAULT_DURATION_FILTERで検査する。fix(suno-helper): queue mode のclipIdsByEntryを投入前後の Set 差分で捕捉し、entry retry 中に遅延観測された clip ID も同じ entry へ帰属させるようにした(#1762)。DOM-only ACK で clip ID が未観測の entry は fatal 停止せず、finalizer の warn +DONE縮退へ到達する。fix(agents):_tracking_io.py::_save_trackingを tmp ファイル +os.replaceによるアトミック書き込みに変更し、アップロード中のクラッシュでupload_tracking.jsonが truncate され resume 情報を喪失する不具合を修正した(plan 020)。_load_trackingは破損 JSON(JSONDecodeError/UnicodeDecodeError)を検出すると*.json.corruptへ退避してからNoneを返し、無言で握りつぶさず証拠を保全するようにしたfix(agents): Complete Collection(_complete_collection_executor.py)と Shorts(short_uploader.py)のアップロード経路でQuotaExhaustedError(HTTP 429・リトライ可能)を通常の例外と区別するようにした(plan 020)。Complete Collection 側は tracking をstatus="failed"にせず新 actioncomplete_collection_quota_exhaustedを返し、resume session URI を温存したまま次回実行に委ねる。Shorts 側はdetails.retryable=True/retry_after_secondsを結果に含めるfix(utils):upload_core.py::_compress_thumbnailが全品質での圧縮に失敗した場合に一時ファイルをリークしていた不具合を修正した(plan 020)。失敗時は temp ファイルを削除してから元ファイルパスを返し、ffmpeg が一度も出力しなかった場合のFileNotFoundErrorも回避するfix(analytics):analytics-collectの uploads playlist 二重取得を解消し、video_listing.pyの例外握りつぶしと TZ 境界ズレを修正(plan 022)。VideoListingMixin.get_all_channel_videosにインスタンスキャッシュ(_all_videos_cache、空リストは非キャッシュ)を導入しrefresh: bool = False引数を追加、strategic_analytics.py/analytics_system.pyからの再呼び出しが同一プロセス内で API を再度叩かないようにした。get_all_channel_videos/get_recent_videosの生except Exceptionを削除し、HttpErrorはYouTubeAPIError.from_http_errorで変換して re-raise するよう変更(認証切れ・クォータ枯渇が「動画 0 本」として無言で握りつぶされなくなった)。get_recent_videos(video_listing.py)とget_combined_analytics(strategic_analytics.py)の直近 N 日フィルタを naivedatetime.now()と UTCpublishedAtの比較からdatetime.now(timezone.utc)の aware 比較へ統一し、JST/UTC の 9 時間ズレによる境界直後動画の取りこぼしを解消したfix(skills): 基盤・配信系 9 スキル(automation-release / automation-update / ext-install / distrokid-helper / live-clean / streaming / wf-new / wf-next / wf-status)の整合性監査で検出した記述ドリフトを実装準拠に修正(#1688)。automation-release/SKILL.mdとreferences/changelog-promotion.mdの旧リポジトリパス/Users/mba/02-yt/automationを実パス/Users/mba/02-yt/00-automationに更新し、実在しないスキル参照(commit-convention//pr/ グローバル/release(~/.claude/skills/release/))を CLAUDE.md の日本語 Conventional Commits 規約参照・一般表現へ差し替え(automation-update も同様)。distrokid-helper/SKILL.mdの verify 検証項目から release_date を error 扱いする記述を修正(実装distrokid_prepare.pyはplanning.publish_target_at欠落を warning 止まりとし、error は cover サイズ / タイトル重複 / >35 曲のみ)。streaming/SKILL.mdのterraform planコメントを実リソース構成(tls_private_key/vultr_firewall_group/vultr_firewall_rule×N含む)に更新。wf-new/references/schema.mdに実在するトップレベルキーscene_phrases(yt-populate-scene-phrasesが投入)の定義を追加し、assets.music_downloadedが初期化時には含まれない遅延追加キーであることを明記。ext-install / live-clean / wf-next / wf-status はドリフト検出なしfix(skills): チャンネル運用系 6 スキル(channel-new / setup / playlist / comments-reply / pinned-comment / community-post)の整合性監査で検出した記述ドリフトを実装準拠に修正(#1675)。setup/SKILL.md:yt-doctorのカテゴリ別チェック構成表を現行実装に合わせて更新(bootstrap 6→7 check にnumbered_duplicates、channel 1→3 check にplaylist_config/playlist_create_dry_run、data 3→4 check にinitial_setup_readinessを追加)し、新規 4 check の対応手順(Steps)を追記。channel-new/SKILL.md: Step 3 の「config 未生成由来の許容 fail」一覧にplaylist_config/playlist_create_dry_run/initial_setup_readinessを追加、Step 9 のyt-benchmark-collect --keep-thumbnailsを非推奨 no-op フラグ(サムネイルは常に保持)のためフラグなし表記へ修正、統合前の旧称「初回モード」6 箇所を現行モード名「新規開設モード」に統一(references/gcp-bootstrap.mdの同表記も含む)。channel-new/references/config-template/skills/thumbnail.yaml: 実在しない CLI 名yt-download-benchmark-thumbnailsへの言及を実体の/benchmark(yt-benchmark-collect)に修正。channel-new/references/directory-structure.md: 正準構造・作成コマンドにyt-setup-dirsが実際に作成するdocs/channel/personas//research/を反映。playlist / comments-reply / pinned-comment / community-post はドリフト検出なしfix(skills): 戦略・リサーチ系 7 スキル(audience-persona-design / channel-research / collection-ideate / viewer-voice / viewing-scene / discover-competitors / community-draft)の整合性監査で検出した記述ドリフトを実装基準で修正(#1674)。channel-research/SKILL.mdの thumbnail スキル参照を現行 SKILL.md に存在しない「TTP Swap モード」からsingle_stepモード(TTP 推奨実装)表記に更新、collection-ideate/SKILL.mdの Phase 1-1 戦略ドキュメントからどこにも生成されないdocs/channel/strategy.mdを除去して実在する/channel-new(方向性検討モード)の方向性決定記録とdocs/channel-research.mdの参照に置換し、設定キーideate.objects(4 箇所)を実装thumbnail_check.pyが読むトップレベルobjectsに統一(references/object-design-examples.md例 2 のideateラッパー付き JSON もトップレベルobjectsの YAML に修正)、discover-competitors/SKILL.mdの seed 抽出元の不存在キーdescriptions.template_noteを実在するdescriptions.perfect_forに修正、community-draft/SKILL.mdの config パス 4 箇所を実ファイル構造community_draft.templates.*に合わせ、不存在キーcontent.json::genre.label(2 箇所、実装Genreはprimary/style/contextのみ)とsignature_template(実キーはappend_footer.signature)、変数解決元の誤記(channel-config のobjects.swappable→workflow-state.json::planning.signature_objects/config/channel/community-draft.json::shared_variables)を実装準拠に修正。audience-persona-design / viewer-voice / viewing-scene はドリフト検出なしfix(skills): 視覚・公開系 8 スキルの整合性監査(#1685)で検出した記述ドリフトを実装準拠に修正。/short: 実在しないyt-upload-shorts --ignore-intervalフラグの記述を削除(bypass は config 側のmin_hours_between_shorts_per_collection調整で行う)、yt-shorts-bulk-update-locは collection パス引数を取らずcollections/live/全件走査であることを明記、loop-mp4 クロップ位置はgenerate-shorts.sh側 env(SHORT_CROP_X)ではなく中央固定であり center 以外は手動 ffmpeg 実行が必要と修正。/short-thumbnail:yt-generate-shorts-loopの Veo 設定は skill-configshort(.claude/skills/short/config.default.yamlのveoセクション /config/skills/short.yaml)を読む実装に合わせて設定表を修正し、yt-generate-imageが生成しない「自動生成short.jpg」と固定解像度 1536x2752 の記述を削除。/video-upload:references/scheduled-publish.mdの関連リンクを_calculate_publish_at/_scheduling_enabledの実体agents/_published_dates.pyに修正fix(skills): 分析系 8 スキル(analytics-analyze / analytics-collect / analytics-report / benchmark / channel-status / video-analyze / postmortem / alignment-check)の整合性監査で検出した記述ドリフトを修正(#1687)。analytics-collect/SKILL.mdの出力例を実装の実ファイル名data/analytics_data_YYYYMMDD_HHMMSS.jsonとconfig/channel/meta.jsonのchannel.name参照に更新、channel-status/SKILL.mdからyt-channel-statusが実装していない「いいね数・コメント数」「制作中コレクション(workflow-state.json)表示」の記述を削除して実出力(再生数・総視聴時間・平均視聴時間)と/wf-statusへの案内に置換、postmortem/SKILL.mdの実装参照 3 件を現行実体に更新(strategic_analytics.py::_collect_top_videos(不存在)→get_combined_analytics、benchmark_collector.py:378-394(現在は collect_playlists の行域)→benchmark_collector.py::collect_channel、schema_version=3 の生成元collection_uploader.py→agents/_tracking_io.py(分離済み))。analytics-analyze / analytics-report / benchmark / video-analyze / alignment-check はドリフト検出なしfix(skills):video-description/SKILL.mdの「ハッシュタグ 13 個」とchannel-new/references/config-generation-rules.mdの「5 個程度」の数値矛盾を解消(#1669、監査 M-10)。実装metadata_generator.pyはconfig/channel/content.json::descriptions.hashtagsをそのまま出力し個数を強制しないため、両ファイルをdescriptions.hashtags単一ソース参照 + 目安 5 個程度(examples / fixtures は 3 個、YouTube がタイトル下に表示するのは先頭 3 個)へ統一したfix(skills):video-analyze/SKILL.mdの「呼び出し側スキル」から、現行/lyriaに実装が存在しないbgm_arc平均読み込み・composition.jsonフェーズ境界・phase.at_minの記述(DJ Engine 時代の phase 設計の残骸)を削除した(#1651)。あわせて.claude/CLAUDE.template.mdの音源生成表・音楽エンジン比較表の/lyria表記を現行実装(プロンプト + API 入力パラメータ設計)に合わせて修正fix(suno-helper): queue 実行の resume payload 境界でsubmittedClipIds/playlistExpectedClipCountを fail-loud に検証し、未完了 clip を保持した再開時に不正な raw payload が playlist 完了待ちへ流れ込まないようにした(#1586)。fix(suno-helper): SKILL.md の進捗 phase 表に queue mode のsubmittedを追記(#1586)。shared/constants の PHASE と skill doc の照合テストtest_suno_helper_phase_table_matches_shared_phase_constantsが新 phase 追加に追従しておらず fail していたfix(extensions): suno-helper の Playwright e2e がSyntaxError: Named export ... not found(CommonJS module)で全滅していた CI 失敗を修正(#1586 ブランチで顕在化)。根本原因は #1629(ADR-0021)の rootpackage.json("type": "module")削除でextensions/shared/が Node ESM loader に CJS スコープ判定されるようになったこと。extensions/shared/package.json(type: module)を新設してスコープを復元した。あわせて #1586 が e2e に追加していた queue runner / completion gate の純ロジックテスト 3 件(page 不使用)をtests/queue-runner.test.ts(vitest)へ移設し、e2e は実ブラウザ layout を要する DOM スモークに限定したfix(suno-helper): reload 後の resume / playlist 再実行で、保存済み clip が照会時点で complete 済みだと完了待ちゲートが永遠に pending 扱いして 10 分の stall timeout まで空回りし偽 ERROR で停止する回帰を修正(#1586 レビュー指摘)。active feed poll(FEED_V3_POLL_RESPONSE)の応答はClipTracker.applyRequestedStatusesで未知+終端 clip も登録する(passiveFEED_CLIPSの「未知+終端は捨てる」規則は据え置き)。あわせて同レビューの指摘を反映:retryPlaylistの完了待ち中に popup が[1/0] 注入中を表示し続ける問題へ待機中 progress を追加、queue runner の中断分岐がisEntrySubmittedへEntryRunResultを誤って渡していた型不整合をシグネチャ縮小((index) => boolean)で解消、no-op だったresolveQueueFatalInterruptIndexを削除、entry 表示名 fallback(title ?? name)をentryDisplayNameに一本化、payload 検証で-0を非負整数/数として拒否、run mode storage I/O の未処理 rejection に warn fallback を追加、実行中は投入方式ラジオを無効化、RUN_MODE_ORDERをRUN_MODESのキーから導出、queue 投入ループの冗長な固定 25ms sleep を除去、content-run-preflightのwaitForQueueSlot既定モックを実装呼び出しへ戻し空 queue 回帰テストの空洞化を解消fix(skills): lifecycle skill の起動文字列をbunx tayk <cmd>からuv run yt-<cmd>へ戻した(#1625)。tayk は次世代版 CLI で現時点では運用未使用(実装は別リポジトリへ分離予定)のため、#965 で置換した表記のままではスキルを読んだ AI 実行者が未実装 subcommand(suno:video-analyze/suno-verify、masterup:suno-audio-cleanup/suno-verify-playlist/fix-timestamps/finalize-master/apply-rain-layers/suno-select-tracksほか)で実行不能になっていた。対象は masterup / suno / suno-lyric / suno-helper / thumbnail / video-upload / video-description / wf-new / wf-next / playlist / analytics-collect / distrokid-helper の SKILL.md・references・config.default.yaml(wf-new が references として同梱するyt-init-collectionの復旧ヒント文言も同様に戻した)。起動文字列のみの置換で、周辺の手順・節構成・TS 実装(packages/)は変更しない。回帰テストは方針を反転し、tayk cutover まで lifecycle skill にtayk表記が入らないことを担保するtests/test_lifecycle_skills_no_tayk.pyへ改称・書き換えたfix(skills): 音楽制作系 7 スキル(suno / suno-lyric / suno-helper / masterup / lyria / videoup / loop-video)の整合性監査で検出した記述ドリフトを修正(#1432)。suno/SKILL.mdの slug 自動実行 argv 例に残っていた["uv", "run", "bunx tayk video-analyze", ...]の混在表記を["bunx", "tayk", "video-analyze", ...]に統一、suno/references/suno-examples.mdから実装に存在しない設定キーbanned_adjective_free_instrumentsへの言及を削除、loop-video/SKILL.mdのgenerate_videos.shバージョン表記(v11.0 → v14)とループ背景の正規化 CRF 表記(20 → 22)を現行実装に合わせたfix(distrokid-helper):ext-v0.2.3リリース前に DistroKid Helper の manifest / popup 表示名へ残っていた(TEST)接尾辞を外し、配布 zip が本番名DistroKid Helperとして表示されるようにした。fix(videoup):generate_videos.shの overlays 経路でoverlays.audio_visualizer.enabledが false/未設定(subscribe_popupのみ有効等)のとき、AUDIO_LABEL="1:a"(生の入力ストリーム指定)を最終 ffmpeg コマンドが常に-map "[${AUDIO_LABEL}]"とブラケットで囲むため-map "[1:a]"という無効な filtergraph ラベル参照になりOutput with label '1:a' does not exist in any defined filter graphで失敗するバグを修正。音声 map を出し分ける方式とし、(1) 音声をフィルタしない場合は生ストリーム指定のままブラケットなしで-map 1:aする(m4a/aac マスターの-c:a copyを温存)、(2) 音声が filter_complex を通る場合(audio_visualizer有効 or loudnorm 統合時)はブラケット付き map + 音声再エンコードを強制する。後者により、filtergraph 出力へ-c:a copyを要求してStreamcopy requested for output stream fed from a complex filtergraphで失敗する潜在バグ(audio_visualizer有効 + m4a/aac マスターの組み合わせ)も解消。下流チャンネルリポジトリで実際に再現(overlays.enabled=true+subscribe_popup.enabled=true+audio_visualizer未設定の組み合わせ)。fix(suno-helper):weirdness/styleInfluenceセレクタに日本語ラベル(ユニーク度/スタイルの影響度)の tolerant match 対応を追加し、setLyricsValueの Lexical 反映確認に行頭・行末の空白差異を吸収する正規化(normalizeLexicalText)を導入した(#1872)
Migration
所要時間の目安: 5〜10 分
local fix 衝突注意:
- suno-helper: queue mode 追加・DOM signal 変更・resume payload 検証強化など大幅改修。local fix があれば sync 時に上書きされる可能性が高い
- channel-new:
/channel-directionを削除し方向性検討モードへ統合、SKILL.md 本文をreferences/{direction-mode,regeneration-mode,import-mode}.mdへ切り出し。/channel-directionを参照する local fix は要更新 - videoup: overlays 音声 map の ffmpeg バグを修正。同箇所を local fix していた場合は要確認
- distrokid-helper: 拡張 manifest/popup の表示名修正のみ、影響小
サマリ:
- BREAKING:
packages/(TS core、約28K 行)と root TS ツールチェーンを削除し、本リポジトリを Python 版メンテナンスモードに純化(ADR-0021、#1629) - BREAKING:
/channel-directionを/channel-newの方向性検討モードへ統合(#1499) - suno-helper に queue mode(並列投入で生成時間短縮)を追加、関連バグ修正多数(#1586, #1762)
- skill-config 機構の適用を6 スキル(discover-competitors / live-clean / postmortem / video-upload / analytics-report / metadata-audit)へ拡大(#1669)
- videoup の ffmpeg フィルタグラフバグ、analytics-collect の重複取得・TZ 境界バグなど計 12 件の Fixed
What's Changed
- fix(suno-helper): 日本語UIの作成ボタンを検出する by @daiki-beppu in #1587
- docs(plans): 第 3 回監査(takt リジェクト多発の原因調査)の記録とプラン 2 本を追加 by @daiki-beppu in #1588
- fix(suno-helper): 日本語UIの曲名欄を検出する by @daiki-beppu in #1593
- [#1486] issue-1486-yt-collection-serve by @daiki-beppu in #1574
- chore(suno-helper): ext-v0.2.2 by @daiki-beppu in #1599
- fix: distrokid-helper の実DOM注入を修正 by @daiki-beppu in #1603
- chore(distrokid-helper): ext-v0.2.3 by @daiki-beppu in #1605
- [#1499] channel-direction を channel-new に統合 by @daiki-beppu in #1575
- [#1501] issue-1501-benchimaaku-deshoot by @daiki-beppu in #1578
- [#1568] issue-1568-wf-new-schema-md-as by @daiki-beppu in #1583
- [#1569] issue-1569-channel-dir-no-docs by @daiki-beppu in #1585
- feat(doctor): playlist 設定診断を追加 (#1504) by @daiki-beppu in #1594
- fix(skills): 音楽制作系 7 スキルの整合性監査と記述ドリフト修正 (#1432) by @daiki-beppu in #1628
- docs(thumbnail): 文字なし背景先行フローへ更新 (#1502) by @daiki-beppu in #1595
- docs(suno): generator-reviewer 品質ゲートを追加 (#1485) by @daiki-beppu in #1596
- [#1614] issue-1614-collection-prefligh by @daiki-beppu in #1617
- feat(suno-helper): Balanced 固定ペーシングへ簡素化 (#1573) by @daiki-beppu in #1598
- docs(adr): 別リポ 0 ベース再出発の ADR-0021 を起票 (#1629) by @daiki-beppu in #1632
- feat(suno-helper): browser use 主導で操作可能にする by @daiki-beppu in #1601
- [#1612] issue-1612-thumbnail-nano-bana by @daiki-beppu in #1618
- [#1611] issue-1611-thumbnail-no-woteki by @daiki-beppu in #1619
- [#1609] issue-1609-wf-new-ga-demo-he-m by @daiki-beppu in #1620
- [#1608] issue-1608-claude-md-ni-wo-sur by @daiki-beppu in #1621
- fix(secrets): disable op read during tests by @daiki-beppu in #1623
- fix(skills): lifecycle skill の起動文字列を uv run yt-* へ戻す (#1625) by @daiki-beppu in #1633
- docs(migration): 移行告知の日付を撤回しイベントベースに書き換え (#1630) by @daiki-beppu in #1642
- refactor(repo): packages/ と TS ツールチェーン・CI レーンを削除し Python メンテナンスモードに純化 (#1629) by @daiki-beppu in #1643
- chore(repo): ADR-0021 TS 純化の残置物 6 件をクリーンアップ (#1645) by @daiki-beppu in #1646
- feat(suno-helper): add queue run mode by @daiki-beppu in #1647
- docs(repo): ONBOARDING.md/development.md の skills_sync.py 旧パス参照を更新 (#1648) by @daiki-beppu in #1763
- docs(skills): video-analyze SKILL.md の /lyria 呼び出し記述の事実誤認を修正 (#1651) by @daiki-beppu in #1765
- docs(skills): discover-competitors に障害時ガイダンス節を追加 (#1652) by @daiki-beppu in #1767
- docs(skills): 主要スキル 5 件の前後工程 cross-reference を現行ワークフロー基準で補完 (#1670) by @daiki-beppu in #1766
- docs(roadmap): roadmap.html を ADR-0021 のイベントベース方針で再生成 (#1644) by @daiki-beppu in #1764
- chore(repo): .gitattributes 追加・live-clean に tmp/ 掃除モード統合・前提セクションを残り 18 skill へ導入 (#1671) by @daiki-beppu in #1768
- refactor(skills): skill-config 未適用スキルの設定切り出し残タスクを解消 (#1669) by @daiki-beppu in #1769
- docs(skills): 分析系 8 スキルの記述ドリフトを実装基準で修正 (#1687) by @daiki-beppu in #1770
- fix(videoup): correct audio label when audio_visualizer overlay is disabled by @moinluck-svg in #1613
- docs(skills): 視覚・公開系 8 スキルの整合性監査で検出した記述ドリフトを実装準拠に修正 (#1685) by @daiki-beppu in #1771
- docs(claude-md): extensions 節をディレクトリ scoped の extensions/CLAUDE.md へ分離 by @daiki-beppu in #1774
- docs(skills): 戦略・リサーチ系 7 スキルの記述ドリフトを実装基準で修正 (#1674) by @daiki-beppu in #1777
- chore(suno-helper): ext-v0.2.4 by @daiki-beppu in #1779
- docs(skills): チャンネル運用系 6 スキルの整合性監査で検出した記述ドリフトを実装準拠に修正 (#1675) by @daiki-beppu in #1778
- fix(skills): 基盤・配信系 9 スキルの整合性監査で検出した記述ドリフトを実装準拠に修正 (#1688) by @daiki-beppu in #1776
- docs(claude-md): 実在しない commit-convention/pr スキル参照を CLAUDE.md 規約記述へ統一 (#1780) by @daiki-beppu in #1781
- docs(plans): 第 4 回監査(Python コア本体)の実装プラン 020-024 を追加 by @daiki-beppu in #1783
- [#1762] issue-1762-suno-helper-queue-m by @daiki-beppu in #1782
- fix(agents): tracking JSON をアトミック書き込み化し QuotaExhaustedError を非終端化・サムネ temp リーク解消 by @daiki-beppu in #1786
- fix(analytics): 全動画リストの instance cache 導入と TZ 境界・例外握りつぶし修正 (plan 022) by @daiki-beppu in #1788
- fix(scripts): bulk_update_desc の snippet 更新を read-modify-write 化し defaultAudioLanguage 消失を防止 by @daiki-beppu in #1789
- chore(dx): ツールチェーン整備 — dev 依存一本化・ruff B/RUF・seaborn 削除・Any-gate CI・CJK 回帰テスト by @daiki-beppu in #1790
- refactor(utils): 旧 analytics モノリス残骸 3 ファイル(1,016行)を削除 by @daiki-beppu in #1791
- docs(plans): reconcile — 全 24 プランを DONE 検証済みに更新 by @daiki-beppu in #1792
- docs(skills): [skill-quality] AI 可読性改善: 分析系 8 スキル (#1705) by @daiki-beppu in #1793
- docs(skills): 視覚・公開系 8 スキルの AI 可読性改善 (#1704) by @daiki-beppu in #1794
- docs(skills): 音楽制作系 7 スキルの AI 可読性を 7 観点チェックリストで改善 (#1703) by @daiki-beppu in #1795
- docs(skills): 基盤・配信系 9 スキルの AI 可読性改善(7 観点レビュー) (#1706) by @daiki-beppu in #1797
- docs(skills): 戦略・リサーチ系 7 スキルの AI 可読性改善 — 完了条件明示・検出基準一意化・Codex 注記 (#1677) by @daiki-beppu in #1800
- docs(audits): スキルオーケストレーション調査 — 全45スキルの連鎖棚卸しと組み替え推奨案 (#1810) by @daiki-beppu in #1820
- docs(skills): チャンネル運用系 6 スキルの AI 可読性改善 — channel-new 3 モード references 切り出し・完了条件明示 (#1678) by @daiki-beppu in #1811
- docs(strategy): 成長レバー × 既存ツールのギャップ分析ドキュメントを作成 (#1802) by @daiki-beppu in #1812
- docs(takt): workflow 使い分けに takt:none ラベルの判定基準を追記 by @daiki-beppu in #1831
- docs(video-upload): frontmatter description に single_release トリガー語を追記 (#1692) by @daiki-beppu in #1834
- fix(lyria): segment 数に hard cap (60) を導入し超過時は clamp + warning (#1698) by @daiki-beppu in #1836
- fix(ci): issue-lint.sh の takt 実行対象判定を現行ラベル体系に更新 (#1832) by @daiki-beppu in #1838
- feat(video-description): chapters_enabled config opt-out を追加 (#1665) by @daiki-beppu in #1844
- refactor(cleanup): deprecated な yt-fix-timestamps を削除し masterup の参照を整理 (#1673) by @daiki-beppu in #1846
- docs(live-clean): SIGINT 中断時のリカバリ手順を障害時ガイダンスに追記 (#1696) by @daiki-beppu in #1835
- fix(audio-gen): Suno ZIP のアポストロフィ除去ファイル名を名前照合で正規化 (#1787) by @daiki-beppu in #1839
- fix(thumbnail): OpenAI Image の既定 quality を medium に変更し runbook に単価注記を追加 (#1697) by @daiki-beppu in #1837
- fix(veo): smooth_loop の loop_raw.mp4 退避を連番化し再生成時の衝突を解消 (#1748) by @daiki-beppu in #1841
- feat(channel-new): 新規チャンネルのデフォルト cadence を毎日投稿に変更 (#1730) by @daiki-beppu in #1842
- fix(loop-video): 既定 prompt_template の強度断定文言を除去し motion_targets で強度制御 (#1747) by @daiki-beppu in #1843
- docs(suno-lyric): 安全境界に /archives/ への 1 ホップ許可を追加し実サイト構造と整合 (#1728) by @daiki-beppu in #1849
- fix(masterup): DL 済み・URL 未指定時の「URL 必須」誤案内を解消し title list 解決順序を明記 (#1743) by @daiki-beppu in #1847
- docs(distrokid-helper): 前提チェックに songwriter 確認とリリース日デフォルト提案基準を明文化 (#1745) by @daiki-beppu in #1851
- fix(metadata): generate_localizations の Usage & Attribution ハードコードを config 参照に統一 (#1650) by @daiki-beppu in #1848
- fix(thumbnail): codex default_prompt_template を #1611 の thumbnail 先行フローに整合 (#1680) by @daiki-beppu in #1852
- docs(suno): ボーカルモードの pattern 数計算式を SKILL.md に明記し ceil(N/2) の誤読を防止 (#1726) by @daiki-beppu in #1850
- docs(skills): content_model.type の表記を実装の正 release に統一 (#1772) by @daiki-beppu in #1855
- fix(suno-helper): slider セレクタを tolerant match 化し未検出は warn-skip で run を継続 (#1720) by @daiki-beppu in #1853
- refactor(repo): GitHub owner ハードコードを UPSTREAM_REPO 単一ソース化し fork 運用者向け節を新設 (#1653) by @daiki-beppu in #1856
- docs(wf-new): Phase 2c の codex 分岐を #1611 の thumbnail 先行フローへ整合 (#1854) by @daiki-beppu in #1858
- fix(suno-helper): 日本語UIの除外スタイル欄を検出する (#1840) by @daiki-beppu in #1845
- chore(release): v5.5.17 by @daiki-beppu in #1871
New Contributors
- @moinluck-svg made their first contribution in #1613
Full Changelog: v5.5.16...v5.5.17