Skip to content

v5.5.17

Choose a tag to compare

@daiki-beppu daiki-beppu released this 10 Jul 10:50
b931ebe

Added

  • feat(video-description): skill-config に chapters_enabled(既定 true)を追加し、章運用を廃止したチャンネル(BGM / ASMR 等)向けの標準 opt-out を提供した(#1665)。config/skills/video-description.yamlchapters_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 拡張子)を binary macro で 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-origin fallback 案内付きの 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 から textless main.png/jpg を再生成)へ更新した(#1854)。契約テスト test_wf_new_routes_codex_and_single_step_through_thumbnail_contract も新フロー表記をロックするよう追従
  • refactor(repo): GitHub owner daiki-beppu のハードコード残存(fork 運営者に生成物のズレを生む固定参照)を整理した(#1653)。yt-doctorautomation_package fail 時の next_action.cmdautomation_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_releaserelease に統一した(#1772)。対象は video-upload/SKILL.md(完了条件 / Channel Adaptation 表 / release アップロードフロー / コマンドリファレンス)、video-upload/references/posting-checklist.mdchannel-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.yamlimage_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.jsonyt-channel-init が生成する schedule_config.jsoncli/channel_init_templates.py::_render_schedule)の 2 箇所。publish_time(20:00)・auto_schedule_enabled(true)等の他キーは変更なし。既存チャンネルの schedule_config.json には影響しない
  • fix(thumbnail): OpenAI Image provider の既定 qualityhigh から medium に変更した(#1697)。provider を OpenAI に切り替えた際に無自覚に高単価 API を叩くのを防ぐため、highimage_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 / root pnpm-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 syncruff が入るようになり、--extra dev 指定は不要(README / ONBOARDING / flake.nix / CI の該当記述を更新)
  • chore(lint): ruff の selectB(flake8-bugbear)/ RUF を追加した(plan 024)。RUF001/RUF002/RUF003(全角文字の ambiguous-unicode 検知、日本語コードベースでは誤検知のみ)は ignore、RUF043(pytest.raises の正規表現メタ文字警告)は tests/** のみ per-file-ignore。新規追加ルールで検出されたバックログ(B904raise ... from 欠落、B905zip() 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-gate job(PR イベントのみ)としても実行するようにした(plan 024)。従来は client-side lefthook のみで origin/main 不在時は self-skip していたため、CI バックストップを追加して実質 advisory だったゲートを強制力のあるものにした

Removed

  • refactor(cleanup): deprecated 表明済みの単発移行スクリプト yt-fix-timestampsscripts/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_generatorgenerate_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.py Protocol + 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 が trusted Cmd+P を無視して Add to Playlist dialog を開けない問題を修正した。
  • fix(suno-helper): Suno の Lexical Lyrics editor で複数行の段落を改行付きで比較し、空文字クリア時は beforeinput fallback を使うことで、反映済みでも 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-config usage_attribution_linesconfig/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.yamlprompt_template 上書きも引き続き有効
  • fix(veo): smooth_loop の後処理が loop.mp4loop_raw.mp4 の rename を存在チェックなしで行っており、再生成時に前回の loop_raw.mp4 が残存していると FileExistsError でクラッシュ(POSIX では無警告上書き)する問題を修正した(#1748)。rename 前に残存 raw を検出し、generate_loop_videoloop-v{n} 退避と同じ連番方式で loop_raw-v{n}.mp4 へ退避してログに明示する(raw は Veo 生成・課金済みの原本のため削除しない)。/short-loop 経路(short-loop_raw.mp4)と --smooth 単独経路にも同様に適用される。退避ファイルの保持数上限は #1654 のスコープ
  • fix(audio-gen): Suno がダウンロード ZIP 内のファイル名からアポストロフィを除去する(例: Greed's RhythmGreeds 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.pyyt-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" にせず新 action complete_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 を削除し、HttpErrorYouTubeAPIError.from_http_error で変換して re-raise するよう変更(認証切れ・クォータ枯渇が「動画 0 本」として無言で握りつぶされなくなった)。get_recent_videosvideo_listing.py)と get_combined_analyticsstrategic_analytics.py)の直近 N 日フィルタを naive datetime.now() と UTC publishedAt の比較から 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.mdreferences/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.pyplanning.publish_target_at 欠落を warning 止まりとし、error は cover サイズ / タイトル重複 / >35 曲のみ)。streaming/SKILL.mdterraform plan コメントを実リソース構成(tls_private_key / vultr_firewall_group / vultr_firewall_rule×N 含む)に更新。wf-new/references/schema.md に実在するトップレベルキー scene_phrasesyt-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 への言及を実体の /benchmarkyt-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 箇所、実装 Genreprimary / style / context のみ)と signature_template(実キーは append_footer.signature)、変数解決元の誤記(channel-config の objects.swappableworkflow-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-config short.claude/skills/short/config.default.yamlveo セクション / 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.jsonconfig/channel/meta.jsonchannel.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_analyticsbenchmark_collector.py:378-394(現在は collect_playlists の行域)→ benchmark_collector.py::collect_channel、schema_version=3 の生成元 collection_uploader.pyagents/_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.pyconfig/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)の root package.json"type": "module")削除で extensions/shared/ が Node ESM loader に CJS スコープ判定されるようになったこと。extensions/shared/package.jsontype: 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 も登録する(passive FEED_CLIPS の「未知+終端は捨てる」規則は据え置き)。あわせて同レビューの指摘を反映: retryPlaylist の完了待ち中に popup が [1/0] 注入中 を表示し続ける問題へ待機中 progress を追加、queue runner の中断分岐が isEntrySubmittedEntryRunResult を誤って渡していた型不整合をシグネチャ縮小((index) => boolean)で解消、no-op だった resolveQueueFatalInterruptIndex を削除、entry 表示名 fallback(title ?? name)を entryDisplayName に一本化、payload 検証で -0 を非負整数/数として拒否、run mode storage I/O の未処理 rejection に warn fallback を追加、実行中は投入方式ラジオを無効化、RUN_MODE_ORDERRUN_MODES のキーから導出、queue 投入ループの冗長な固定 25ms sleep を除去、content-run-preflightwaitForQueueSlot 既定モックを実装呼び出しへ戻し空 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.mdgenerate_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

Full Changelog: v5.5.16...v5.5.17