Address review
review.json の open チケット(annotation)を edit.json への実対応 → edit-lint → チケット更新まで型どおりに執行するスキル。「a-0002 と a-0003 に対応して」「open チケット全部に対応して」で発動する。状態機械(open → addressed + response 必須・resolved 不可侵・黙殺禁止)を bin/respond.mjs が原子的に守る QA ループの消費側。From its SKILL.md
npx -y skills add AkariLabs/akari-video --skill address-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
5.9 KB, as published. Nobody here has run it
open チケットへ対応する
Language: Respond in the user's language — 対話・質問・承認確認・レポートはユーザーの使用言語に合わせる(例: 英語で話しかけられたら英語で応答する)。
正典: 非公開の内部契約(akari-video-internal)— review-annotations 契約 §1/§3/§5(状態機械)+
review-session 契約 §6(session 由来の増補フィールド)。
ハードルール
- 状態機械を厳密に守る:
open → addressedは必ずresponse(summary+action+respondedAt)を伴う。resolvedには絶対に書き込まない(人間専用の承認ゲート)。addressedからの再対応もしない。これらはbin/respond.mjsがプログラムとして拒否する (ガードを迂回して review.json を手で書き換えない)。 - 黙殺しない: 対応しない/できないと判断したチケットも必ず
declined+ 理由をsummaryに書いてrespondする。判断に迷う場合も、open のまま放置せずdeclined+ 質問を summary に書く。 [要確認]は明示指名されたときのみ対象:textが[要確認]で始まる annotation は--all-openでは対象外(bin/list.mjsが自動でスキップし、スキップした旨を出力する)。--idsで当該 id を明示したときだけ対象にする。[要確認]はオーナーへの質問であり、 エージェントが勝手に解釈して消化してよいものではない。- edit.json への実装は edit-lint を通してから respond する: 字幕系の指示は captions 規約
(字幕とカット編集 — 隙間の原則・
実発話区間・最短 1.0s)に従う。
node packages/edit-lint/bin/edit-lint.mjs <project> --mediaが PASS してからrespondを打つ(PASS 前に addressed にしない)。 - 判断(編集内容の解釈・実装)はエージェントが行い、bin は機械可能な部分(列挙・状態遷移の 執行)だけを担う。bin に「どう直すか」の判断をさせない。
実行順
-
対象を列挙する。
node skills/address-review/bin/list.mjs <project-root> --ids a-0002,a-0003 node skills/address-review/bin/list.mjs <project-root> --all-open出力には
sourceT/sourceRange/target(cut:<index>等)/text/inputに加え、 session 由来(§6 増補)ならsession(id・recRange・confidence)とstrokes(sessionRef 付き) を人間可読に整形して表示する。--all-openは[要確認]annotation を自動でスキップし、 スキップした id と件数を出力に含める。 -
各チケットについて
textの指示(source 秒・target が入っている)を読み、対応方針を決める。- 対応する場合: edit.json(必要なら captions.json)を編集し、
node packages/edit-lint/bin/edit-lint.mjs <project-root> --mediaを PASS させる。 - 対応しない場合: 理由を明確にする(黙殺しない)。
- 対応する場合: edit.json(必要なら captions.json)を編集し、
-
判断が確定したチケットごとに状態を執行する。
node skills/address-review/bin/respond.mjs <project-root> \ --id a-0002 --action edited --summary "captions.json に c-0009〜c-0013 を追加。edit-lint --media PASS 確認済み。" node skills/address-review/bin/respond.mjs <project-root> \ --id a-0003 --action declined --summary "参照素材が assets/ に無いため見送り。素材が揃ったら再度チケットを切ってください。"respondは対象がopenでなければ(resolved/addressed/ 未知 id いずれも)拒否し、summaryが空でも拒否する。いずれの拒否も review.json を一切変更しない (exit code: 成功 0 / ガード拒否 1 / 入力・実行環境エラー 2)。 -
全 respond 後に対応サマリを 1 枚報告する: 対応 id ごとの action(edited/declined)・ summary の要旨、スキップした
[要確認]id、拒否があればその理由。
オプション
list.mjs --ids <id,id,...>: 指定 id だけを列挙する([要確認]も対象に含まれる)。list.mjs --all-open:status: "open"すべてを列挙し、[要確認]はスキップして報告する。list.mjs --json/respond.mjs --json: 機械可読な出力を stdout に出す。respond.mjs --id --action edited|declined --summary "...": 状態遷移の実行器。respondedAtは実行時刻から自動生成する(ISO8601、上書き不可)。
出力
bin/list.mjs: 対象チケットの一覧(人間可読 or--json)。ファイルへの書き込みはしない。bin/respond.mjs:review.jsonへの原子的な状態遷移(open → addressed+response)。 対象以外の annotation・対象の他フィールドはバイト単位で不変。
実プロジェクトへの適用について
本スキル自体は open チケットへの対応を型どおりに実行する道具である。どの edit.json の変更が 「対応」に当たるかの判断(字幕の正確な範囲、削るべきカット等)はプロジェクトごとに一次情報 (音声・映像・transcript)を確認して行うエージェントの仕事であり、bin が代行しない。