bug-investigation
ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Playwright MCP を使ってブラウザを起動し、実際の画面スクリーンショットを根拠にした UI/UX レビューを行う際の標準手順。UX Review・UI Review v2 エージェントが読み込む。
Issue 対応が完了し PR を作成した後に、実装精度を高めるための振り返りを行う。 実装中に踏んだ罠・判断のブレ・チェック漏れを特定し、instructions.md・SKILL.md・copilot-instructions.md への具体的な改善提案に落とし込む。「ふりかえり」「振り返り」「retro」「改善案」などのキーワードで起動する。
Add a new API resource end-to-end: types, composables, components, and pages. Use when adding a new backend resource, endpoint, or CRUD page set to the Nuxt frontend.
| name | bug-investigation |
| description | ランタイム動作の不具合(再生制御、状態遷移、イベントタイミングなど)を調査・修正する際の標準手順。 外部 API や非同期イベントが絡む不具合に使う。コードを読むだけで確証が出ない場面に適用する。 |
外部 API(YouTube IFrame API など)の動的挙動はコード静的解析だけで確証を得ようとしない。
仮説が 2〜3 出た時点でログを仕込み、実動作で確認する。
仮説に対応する console.log を追加する。ポイント:
// 例
function onSongEnd(source: string) {
console.log(`[DEBUG][onSongEnd] source=${source} songId=${player.currentSong?.id}`)
// ...
}
// 呼び出し元で
onSongEnd('ENDED event')
onSongEnd('time tracking')
以下の条件では迷わずユーザーに委ねる:
委ねるときに渡す情報はシンプルに:
1. 何をトリガーにするか(例:キューに3曲入れて再生し、曲終端にシーク)
2. 何のログを見るか(例:[DEBUG][onSongEnd] が何回出るか)
3. 期待値(例:1回だけ出るはず。2回出たら二重呼び出しが確定)
コンソール出力のテキストをコピペしてもらうのが最も確実。
ログから「何が何回起きたか」が分かったら原因を確定し、修正する。
同じ操作で確認。ログが期待回数になっていれば完了。
// Pinia ストア取得
const pinia = window.__VUE_DEVTOOLS_KIT_APP_RECORDS__?.[0]?.app?.config?.globalProperties?.$pinia
const queue = pinia.state.value.queue
const player = pinia.state.value.player
// YouTube プレイヤー操作
const yt = window.YT.get('yt-player')
yt.getCurrentTime() // 現在時刻
yt.seekTo(seconds, true) // シーク
// Pinia ストアを JS から直接操作(UI が邪魔なとき)
pinia.state.value.queue.isOpen = false
mcp_playwright_browser_evaluate の使い方// NG: run_code では const / var が使えない
// OK: evaluate の function キーに文字列で渡す
evaluate({ function: "() => { const p = window.YT.get('yt-player'); return p.getCurrentTime() }" })
loadVideoById() 呼び出し直後に ENDED イベントが発火することがある(動画切り替え時)