kasiopeiya

restore-toggles

編集ツールに剥がされた `<details>` トグルを、git 差分を見て消えたタグだけ戻す。本文の文字は変えない。「restore-toggles」「トグルを復元して」と指示されたとき。

kasiopeiya 0 Updated 3w ago
GitHub

Install

npx skillscat add kasiopeiya/claude-dev-template/restore-toggles

Install via the SkillsCat registry.

SKILL.md

Restore Toggles(剥がれたトグルを戻す)

直前のコミットと作業ツリーを見比べ、消えた <details> のタグだけを元の位置に戻す。本文の文字は1文字も変えない。

対象は文書中のすべてのトグルで、summary の中身は問わない。 剥がすツールはタグを見て落とすのであって、中身を読んで選んでいるわけではないからである。

なぜこれが要るか

Markdown を見た目のまま編集するエディタ(VSCode 拡張の Markdown for Humans など)は、保存のたびに文書を内部モデルへ変換して書き戻す。そのモデルに生 HTML のノードが無いと、<details> と <summary> のタグが落ち、summary の文字列だけが地の文の段落として残る。

手動起動なのは、復元と検出が別の仕事だから。 呼ぶのは「剥がれたと気づいた人」であり、気づく仕組みは CI 側が受け持つ。

前提

正しい形が git のどこかに残っていることが前提である。残っていなければこのスキルは使えない。

  • まだコミットしていない:HEAD
  • すでにコミットしてしまった:git log -S '<details>' -- <path> で正しい版を探す

手順

1. 対象ファイルを決める

引数があればそのファイル。無ければ git diff --name-only -- '*.md' の結果を対象にする。1件も無ければ、その旨を伝えて終わる。

2. 比較元のトグルを洗い出す

git show <比較元>:<path> で元の中身を取り、<details> から </details> までのブロックをすべて拾う。ブロックごとに summary の文字列と本文を控える。控えた summary は後でそのまま書き戻すので、文字を変えたり揃えたりしない。

3. 作業ツリーの状態で分類する

比較元のブロック1つずつについて、作業ツリーの状態を次の4つに振り分ける。判定に使うのはブロックの有無だけで、summary が何と書いてあるかは見ない。

作業ツリーの状態 判定 すること
<details> があり、比較元と同じ 無事 何もしない
summary の文字列が地の文の行として残っている 剥がれ その行を起点にタグを戻す
ブロックごと消えている 消失 復元しない。 報告だけする
比較元に無い新しい箇所にトグルが無い 対象外 復元しない。 規約違反の疑いとして報告する

消失を復元しないのは、本文まで消えているとき「エディタが落としたのか、人が消したのか」を区別できないからである。区別できないものを戻すと、人が消したはずの文章が黙って復活する。

4. タグを戻す

剥がれと判定した箇所だけを直す。地の文として残っている行を <summary>◯◯</summary> に置き換え、その前に <details>、ブロックの末尾に </details> を入れる。

ブロックの末尾は比較元から取る。作業ツリーの見た目から推測してはならない。

[!IMPORTANT]
(AI・必須) 挿入してよいのは <details> ・ </details> ・ <summary> 行の3行と、その前後に必要な空行だけである。summary の文字列は比較元をそのまま使い、本文の文字は1文字も変えない。整形も、表記ゆれの修正も、削除テストの適用もしない。上記の4分類のどれにも当てはまらない状態を見つけたら、復元せず「対象外」として報告する。

本文が比較元と違っていても、それは同じ保存で人が書き換えた結果なので、作業ツリーの本文をそのまま残す。

5. 検証する

復元を始める前に、対象ファイルをスクラッチパッドへ退避しておく。 退避した版と復元後を diff で比べ、増えた行がタグ行と空行だけであることを確かめる。他の行が1行でも動いていたら、その変更を取り消してから報告する。

git diff では確かめられない。作業ツリーには剥がれ以外の変更も混ざっているためである。

報告

復元した箇所・しなかった箇所を、ファイルと行番号で挙げる。しなかった箇所は理由(消失/対象外)を書き、消失した箇所には git show <比較元>:<path> で本文を取り出せることを添える。

使用方法

/restore-toggles
/restore-toggles samples/docs/design/cicd-design.md

Categories