본문으로 건너뛰기
cccskills
무료GitHub에 공개

audit

過去の判断を疑う場面で、一次資料と経緯ログから全体像を組み直し、文脈不足を分析して知識を正しい場所に置き直す長いプロセス。過去のdecisionとの食い違い、同じtagで3度目の方針変更、同じバグの2回目、「前に決めなかったっけ?」「また同じ話してる」「グルグル回ってない?」などで発動。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm스타 4(GitHub 4 + cccskills 0)

실행 점수 미검증

설치 방법 보기

포함된 파일(2)

  • SKILL.md23.6 KB
  • references/precedent-format.md9.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

audit

過去判断の正当性を疑い、一次資料 + 経緯 log で全体像を再構成し、文脈不足を分析した上で、再発防止の知識を正しい場所に pin する 1 サイクル。retract / supersede の直接実行は audit 範囲外で、decision 改訂提案として material に書き、ユーザー裁定経路へ降ろす。

「長いけどここまでしないと一生同じところでグルグルする」が本 skill の存在理由。各ステップは「飛ばさない」ことを優先する。

役割範囲

項目内容
配置skills/audit/SKILL.md
発動セッションmain / orch (思考の発端側)
対象過去 decision / 設計判断 / 同 tag の方針推移 (1 audit = 1 主題)
種別自律発動スキル
重さ長プロセス (1 audit ≈ 1 セッション内、複数ターン消費)

適用範囲

このスキルは初回 load 時に発動するが、トリガー判定は本セッション内のすべての後続ターンに適用される。以降のターンで T-A1〜T-A5 / T-B1〜T-B3 に該当する出来事が起きたら、明示的に skill を再発動せずとも本書の起動時確認フロー (§ 起動時確認フロー) に自動で入る。

ただし「同主題 24h 以内 audit 済」(T-C2) を確認したうえで、重複 audit は走らせず前回 material を参照する。判定方法は § 重複防止 を参照。

decisionのretract / supersedeは、本スキルを経由せずに直接提案しない。改訂はdecision改訂提案としてmaterialに書き、ユーザー裁定の経路へ降ろす。

トリガー

T-A: 自発トリガー (claude 側状況認識)

#トリガー量の目安判定根拠
T-A1過去 decision を引用して新規 decision 出した直後、引用元と整合か怪しいと感じた1 回でも引用整合性
T-A2同一 tag で 3 件目の方針変更が検知された (supersedes / [議論中] 含む)3 件以上グルグル防止
T-A3議論で「あれ、これ前にも議論したような…」状態1 回でも既決見落とし救済
T-A4同じバグ・症状を 2 回以上目にした (構造問題の疑い)2 件以上構造問題検知
T-A5設計レビューで「この案前回却下した気がする」と感じた1 回でも既決見落とし救済

T-B: ユーザー起点トリガー (発話ニュアンス検知)

#発話例
T-B1「これ前に決めなかったっけ?」「また同じ話してる」「またこの話か」
T-B2「過去の情報・自分の知っている情報と矛盾してない?」
T-B3「グルグル回ってない?」「ちゃんと過去の議論を踏まえてる?」

T-C: 発動しない条件 (誤検知抑制)

#状況理由
T-C1設計議論中で挙動が固まっていない論点に対する自発発動「方針変更」ではなく「探索中」
T-C2同 audit を 24h 以内に同主題で実行済み重複 (前回 material を参照すべき)
T-C3ユーザーが「audit はいい、進めて」と明示拒否した直後明示否認尊重
T-C4スコープが他 topic 管轄の仕組みのバグ観察であるaudit の対象外 (委譲先 skill は無い)
T-C5単発の新事実で decision/habit/tag-notes の前提が消えたとわかっている (再発や構造的パターンの疑いが無い)個別の撤回判断に留まるため forget skill の責務

起動時確認フロー

自発発動時 (T-A 系)

冒頭で以下を必ず提示し、ユーザー承認を取ってから本体プロセスへ入る:

[audit] 過去判断の正当性を疑う状況を観察:
- 発端: (T-A1〜T-A5 のどれが立ったか + 観察内容を 1-2 行)
- 想定対象: (audit 対象の decision / 設計テーマ / 同一 tag の方針推移の要約)
- 想定所要: 本セッション内で約 N ターン

audit を始めていい?
- A: 始める
- B: 後で / 今は不要
- C: スコープ調整して (対象を絞る・広げる)

A/B/C 形式で明示。B 選択時は何も記録せず終了 (空 audit 抑制)。C 選択時はスコープ調整→再確認→A。

ユーザー起点 (T-B 系)

確認スキップで Step 1 (発端の明文化) から入る。発端の明文化時にユーザー発話を原文引用する。

重複防止

Step 2 (スコープ確定) の前に必ず以下を実行:

search(keyword=主題キーワード, tags=["audit"], entity_type="material", limit=5)
  • 24h 以内に同主題の audit material が hit → T-C2 重複と判定し、ユーザーに前回 material を提示して新規 audit は走らせない
  • 同 tag の note 末尾に #audited-YYYY-MM-DD ハッシュタグマーカーがあれば、その日付が 24h 以内かもチェック
  • 該当なし → Step 2 へ進行

長プロセス手順 (7 ステップ)

Step 1: 発端の明文化

何が audit のきっかけか、claude が認識した状況・ユーザーが表明した疑問を原文で記録する。後のステップで「想定 vs 実態のズレ」を測る基準線になる。

  • 自発発動 → T-A 番号 + claude 観察内容
  • ユーザー起点 → T-B 番号 + ユーザー発話の原文引用

Step 2: 対象スコープの確定

audit する主題 (decision 1 件 / 設計テーマ / 同 tag の方針推移) を 1 つに絞る。複数主題は別 audit に分割。

  • スコープ単位の例: D#XXXX 単体, domain:calm × tag:HintService の方針推移, topic#464 内の P2 関連 decision 群
  • スコープ広すぎ防止: 「1 audit = 1 主題」原則。複数論点が絡む場合は親 audit + 子 audit の分割を提案

Step 3: 一次リソース取得

対象主題に関連する一次資料を集める。順序は固定:

  1. 対象 decision の本文: get_by_ids(items=[{"type":"decision","id":...}])
  2. 対象 decision の supersedes チェーン: get_map(entity_type="decision", entity_id=..., max_depth=3) で前後関係 (relation_type=supersedes フィルタが効くなら活用)
  3. anchor 参照先: 該当 decision を pin している material (search(tags=["anchor", domain_tag])) があれば取得し anchor 対応表の検証先を読む
  4. コード anchor: 「実装済」anchor のコードパスを Read で確認 (variable / function 名で grep 補完)

「最新 decision を静的参照」は不可 (recompose-context の anchor確定手順の「anchorの型」と整合)。

Step 4: 関連 log の一通り読み (経緯把握)

get_logs(entity_type="topic", entity_id=...) + search(keyword=主題キーワード, entity_type="log", tags=[domain_tag]) で経緯 log を取得し時系列で読む。N 件・time-window 上限を設けて爆発を防ぐ:

  • 上限: 直近 30 件 / 90 日 のいずれか狭い方
  • 読む観点: 「誰が・いつ・どんな状況で・なぜ判断を変えたか」「却下案の理由」「再開ループの兆候」

Step 5: 全体像の整理 + 文脈不足の分析

ここが audit のコア成果。Step 3-4 を踏まえて以下を組み立てる:

5-a. 経緯マップ (時系列)

- YYYY-MM-DD: 初出 (D#A) — 動機: ... / 制約: ...
- YYYY-MM-DD: 方針変更 (D#B が D#A を supersede) — 動機: ...
- YYYY-MM-DD: 再変更 (D#C) — 動機: ...
- 現在: D#C が活きている / D#A・D#B は supersede 済 / 議論中: D#?

5-b. 論点の進化

論点が「同じ問い」を繰り返しているか、「新しい問い」が積み上がっているかを判別する。同じ問いの繰り返しが見えたら「グルグル」のサイン。

5-c. 文脈不足の分析 (audit の真の付加価値)

判断がブレた原因を構造で語る。例:

  • 「制約 X (cwd / 環境 / 上位仕様) が議論時点で把握されていなかった」
  • 「同 domain の既決 D#Y を見落とした」
  • 「decision 文面が抽象的で再解釈の余地を残した」
  • 「anchor が古く、検証ができない状態だった」
  • 「議論時点の前提が事実上覆っているのに decision が retract されていない」

「ブレた」だけで終わらせず、次回ブレないために何が必要か (anchor 強化 / tag note 追加 / habit 化 / 単発 decision 追加) まで一段踏み込む。

Step 6: 検証結果の material 化

ここまでの分析を add_material で保存する (フォーマットは § audit material のフォーマット で詳述)。タイトル + content + tags + related を整える。

Step 7: 知識の pin 先選定 + 実行

Step 5-c で出た「次回ブレないための知識」を、§ pin 先判定マトリクス に従って配置する。

  • 自律実行 OK: add_pin / tag note update_tag / material add_material / habit add_habit の追加系
  • ユーザー裁定経由: 既存 tag note の 書き換え (削除側) / habit の 書き換え / decision の retract 提案

実行後、変更内容を audit material の ## 知識の pin 先選定 セクションに記録する (どこに何を pin したかの台帳)。

Step 7 完了後: 完了マーカー

audit 主題に対応する代表 tag の tag note 末尾に #audited-YYYY-MM-DD ハッシュタグマーカーを追記する。24h 重複防止 (T-C2) の判定に使う。この追記で天井 (4,000字) を超える見込みなら拒否される (§ 判定フロー Q2 直後の注記参照) ため、超える見込みなら先に demote_tag_notes で縮めてから追記する。

update_tag(tag="<代表tag>", notes="<既存notes>\n\n#audited-2026-06-22")

複数 tag に跨る audit の場合は、主題を最もよく代表する 1 つの tag にのみマーカーを書く (全 tag に書くと汚染が広がる)。

audit material のフォーマット

タイトル規約

audit: {主題の要約} ({YYYY-MM-DD})

主題が単一 decision なら audit: D#XXXX 正当性検証 (...)、設計テーマなら audit: HintService × consistency_check 分離経緯整理 (...) の形。

tags

必須: audit, reconsider, domain:<domain>, intent:audit

intent:audit は専用 intent タグ。これに紐づく tag note が audit セッション中の振る舞いルール (decision 即時改訂禁止 / 中断時の下書き保存 / pin 先判定マトリクス遵守 / 完了マーカー) を session に注入する。

source

audit skill 自発発動 (T-AX) / ユーザー起点 (T-BX) — 発端: ...

skill 経由で生成されたことを明示。後で audit material を集計するときに source キーで弾ける。

content セクション構成

## 発端
(T-A* / T-B* + 観察内容 or ユーザー原文引用)

## 対象スコープ
- 主題: ...
- 対象 entity: D#X, D#Y, A#Z, ...
- 関連 tag: ...

## 一次リソース
- decisions: D#X (本文要約), ...
- supersedes チェーン: D#X → D#Y → D#Z
- anchor 参照先: M#A (anchor 対応表 N 行目)
- コード: src/services/foo.py:bar

## 関連 log (経緯)
- L#A (YYYY-MM-DD): ...
- L#B (YYYY-MM-DD): ...
(時系列、上限 30 件 or 90 日)

## 全体像
### 経緯マップ
(Step 5-a 形式)

### 論点の進化
(同じ問い / 新しい問い の判別)

## 文脈不足の分析
(Step 5-c の構造分析)

## 検証結果
| 対象 | 判定 | 理由 | 改訂提案 |
|---|---|---|---|
| D#X | 維持 | ... | なし |
| D#Y | 文脈不足のため再表記推奨 | ... | retract→新規 / 本文加筆 / anchor 設定 |
| D#Z | 撤回候補 | ... | retract 提案 (ユーザー裁定) |

## 知識の pin 先選定
- tag note `domain:calm` に追記: ...
- habit 提案: ...
- anchor 追加: M#A の anchor 対応表に N 行追加
- 新規 material: 該当なし (or M#B 作成)

## 完了マーカー
- 対象 tag: `<tag>` に `#audited-YYYY-MM-DD` 追記済

## 残課題
- (次の audit / 議論で扱うべき論点)
- (フォローアップ activity 候補)

related (relations)

  • 対象 activity (本 audit を呼んだ activity)
  • 対象 decision / log
  • 既存 audit material (再 audit の場合は前回 material と related)
  • 対象 topic

サイズ予算

上限なし。audit は長プロセスで詳細記録が価値。audit material は check-in 注入ではなく search hit 経由なので、recompose 統合 material と違ってサイズ予算の継続コストは低い。

中断・再開

1 セッション完走前提だが、中断時は audit material を「下書き」状態で保存し、再開時は前回 material を update_material で更新する。tag note intent:audit にこの方針を注入する。

content 冒頭に **ステータス: 下書き (Step N で中断)** を明記して中断点を残す。

pin 先判定マトリクス

Step 7 の核となる判定。「正しい場所」とは、知識を再利用するときに最も自然に出会える場所。

4 候補の責務

永続化先適用範囲注入契機更新コスト容量
tag note特定 tag を持つ entity に遭遇したときtag が活きるセッションで自動注入update_tag で上書き中
habit全セッション横断、tag 非依存~/.claude/rules配下の自動生成ファイルで配信(trigger_mode='always'は全文、'intelligently'はタイトルのみのマニフェスト)update_habit で上書き、ユーザー承認必要小 (件数制限)
anchor (material 内)特定合意の真偽判定先recompose-context 経由 or 個別 audit で参照recompose-context で再生成・更新大 (material 単位)
material (新規 audit 結果)経緯・調査結果そのものsearch hit / 関連 entity 経由update_material で上書き大
(参考) decision単発の合意事項get_decisions / search hit直接更新不可 (新規 + supersedes)小

判定フロー (claude 内部判定)

Q1: その知識は特定 tag に紐づくか?
  YES → Q2 へ
  NO  → Q3 へ
Q2: その tag の note は既に類似ルールを持つか?
  YES (類似ルール改訂) → tag note (update_tag)、ただし削除/書き換えはユーザー確認
  NO  (純粋追加)         → tag note (update_tag)、自律実行可

  ※ Q2 のどちらの分岐も、書き込み前に「追記後(マージ後)の notes が天井 (4,000字)
    を超えるか」を見積もる。天井は「新しい長さが4,000字を超え、かつ既存より増加して
    いる」書き込みのみを拒否するため、対象タグの notes が現在は天井未満でも、この
    追記で超える見込みなら書き込みは拒否される。超える見込みなら先に `demote_tag_notes`
    で該当セクションを資材へ退避し、返り値の `notes_length.over_budget` が `false` に
    なったことを確認してから書き込む。この見積もりは Step 7 完了後に追記する完了
    マーカー (`#audited-YYYY-MM-DD`) にも同様にかかる (マーカーの追記も notes を
    伸ばす書き込みのため)。
Q3: その知識はセッション横断で常時想起されるべきか?
  YES → habit、ただし新規 habit はユーザー承認必須
  NO  → Q4 へ
Q4: その知識は「合意の真偽判定先」(anchor) か?
  YES → anchor (recompose-context 連携)
  NO  → Q5 へ
Q5: その知識は経緯・調査結果そのものか?
  YES → material (audit material 自体に収まる、別途追加 material 不要)
  NO  → 単発合意 → decision 改訂提案 (ユーザー裁定経由)

自律実行レーン vs ユーザー確認レーン

アクションレーン
tag note への純粋追記 (既存削除なし)自律
tag note の書き換え / 削除ユーザー確認
demote_tag_notes (天井超過タグのnotes縮小、mode="pointer")自律 (退避+ポインタ残しのため)
demote_tag_notes (mode="drop"、ポインタも残さない)ユーザー確認
新規 habitユーザー確認
既存 habit の更新ユーザー確認
material 新規 (audit material 自体)自律
material 更新 (anchor 対応表追加など)確証あれば自律
anchor 新規/更新recompose-context の anchor確定手順
decision retract / supersede 提案ユーザー裁定経由 (audit material に「提案」として記載のみ)
add_pin自律 (純粋追加のため)
remove_pinユーザー確認
完了マーカー (#audited-YYYY-MM-DD の追記)自律 (純粋追加のため)

生成成果物

必須成果物

種別件数内容
audit material1 件§ audit material のフォーマット
log (audit セッションの経緯)1 件recording skill 経由
完了マーカー1 件対象代表 tag note に #audited-YYYY-MM-DD 追記

条件付き成果物

種別条件内容
pin (tag → material)主題の代表 tag が決まり、anchor 化が必要な場合add_pin(source_type="tag", ...)
tag note 更新tag note に書くべき横断ルールが新たに見えた場合update_tag(notes=...)
habit 追加tag 非依存の行動ルールが見えた場合add_habit(...) (ユーザー承認後)
decision 改訂提案既存 decision を retract / supersede すべきと判断した場合audit material 内 ## 検証結果 テーブルに「改訂提案」として記載 (直接 retract はしない)。頻繁に参照されるのに定型節(書式は本スキル同梱の references/precedent-format.md)が無い decision に遭遇した場合は、supersede 再記録時に定型節(特に却下案・検証)付きの reason で書き直すことを提案に含める。単純な retract は却下理由・射程の情報を失うため、頻出参照の decision は supersede を優先する
新規 activity 起票フォローアップ作業が必要な場合add_activity(intent:implement / discuss)

関連 skill との境界

対比表

軸auditrecompose-contextpostmortem
動機過去判断の正当性疑い累積情報の整理completed activity の振り返り
対象スコープdecision / 設計テーマ / 同一 tag 方針推移activity / topic / decision (関連グラフ全体)完了 activity 1 件
入口自発トリガー T-A* / ユーザー T-B*手動 (「/recompose」「整理して」) or hint 誘導手動 (「/postmortem」or activity 指定)
出力audit material + pin 群 + 完了マーカー統合 material + anchor 対応表 + リコンサイル反省ポイント material + 教訓永続化
重さ長 (1 セッション級)中 (整理単位次第)中 (ステップ分解 + 対話)

重なる動作の役割分担

動作第一責務audit との関係
一次リソース取得recompose-contextaudit も実施するが「過去判断の妥当性」の観点で読む (recompose は「最新統合」の観点)
anchor 設定recompose-contextaudit が anchor 不在を発見したら recompose-context の anchor確定手順を使う
経緯 log 整理recompose-context / postmortemaudit は経緯を「ブレの原因分析」目的で読む (postmortem は「行動ステップごとの教訓抽出」)
知識の pin (tag note / habit / anchor)audit (固有)recompose-context は anchor 対応表のみ更新、その他 pin 先選定は audit が担う
decision 改訂提案audit (固有)retract/supersede は audit からの「提案」止まりで、決定はユーザー裁定

起動順序 (典型シナリオ)

  • 「decision 引用時に怪しい」→ audit (自発 T-A1) → audit 中で anchor 不在判明 → recompose-context の anchor確定手順
  • 「topic#X 全体を整理したい」→ recompose-context → 統合中にズレ発見 → audit を提案
  • 「completed activity の振り返り」→ postmortem → 反省ポイントから知識永続化先迷う → audit の判定マトリクス参照 (任意)

HintService との境界

audit skill は HintService (src/services/hint_service.py) とは経路と重さが完全に分離された設計。両者は同じ「過去判断との整合」関心領域だが、相互呼び出しはしない。

軸HintServiceaudit skill
仕組み軽量 hint (info/warn) を hint type 値域から生成長プロセス skill (人間対話 + 思考)
consistency_checktype 値域から削除済audit skill が代替担当
発火経路check_in 同期 / Stop hook 経由 additionalContextdescription トリガー + ユーザー発話
永続化hint type 表現 + tag note 内ハッシュタグマーカー (#audited-YYYY-MM-DD 等の suppress 用途)audit material + 各種 pin
severityinfo/warn のみ (block 不採用)severity 概念なし (skill は手続き)

完了マーカー #audited-YYYY-MM-DD は HintService 側 hint 重複抑制と共通の仕組みを意図しているが、audit skill 自身の 24h 重複防止 (T-C2) の判定にも使う。

Edge Cases

ケース期待挙動
audit 対象 decision が retract 済audit material の ## 検証結果 に「対象は既 retract」と記録し、supersede 先の決定が今も妥当かを副次 audit
対象 topic が他セッションで並行修正中並行修正の log を Step 4 で拾い、現在 in-flight な議論を ## 残課題 に明示
一次リソース (コード) が存在しない (anchor リンク切れ)## 文脈不足の分析 に「anchor が剥がれている」と記録し、anchor確定手順の対象としてマーク
「過去 decision を引用」した直後で実際にはマッチしていた (T-A1 誤検知)Step 1 の発端明文化時点で「マッチ確認済」と書き、Step 2 でスコープなしとして audit 中断 (空 audit)
ユーザーが Step 5 途中で「もういい、わかった」と中断部分的な audit material を「下書き」として保存 (§ 中断・再開)
audit を recompose-context が呼んだ場合recompose 中の発見 (ズレ・矛盾) を発端として audit に降ろす経路は OK。audit 完了後に recompose に戻る
skill 実行中 (他 skill 実行中) に audit トリガー現在 skill 完了まで待ち、終了後に audit 起動。skill 入れ子は禁止
同 decision を 2 回 audit (T-C2 抜け)T-C2 重複検知が漏れた場合は Step 2 (スコープ確定) で前回 material を発見し、重複と判定して ## 残課題 引き継ぎのみで終了
HintService 側で consistency_check 完全削除済なのに過去の hint 残骸が見える残骸を発見したら report_signal(CALM 自身の故障報告、kind の全種定義は report_signal ツールの docstring を正とする)で報告する (audit の範囲外)
完了マーカー追記対象の tag が複数候補ある主題を最もよく代表する 1 つの tag にのみ追記 (全 tag 汚染回避)

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

【必須】現在のアクティビティを完了にする、または完了にせず中断して寝かせる。「/af」「この作業完了」「クローズして」「一旦ここまで」「今日はここで止める」「いったん置いておく」など終える・中断する意図で発動。このスキルを経由せずにupdate_activityでcompleted・pending・snoozed・shelvedにしない。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

【必須】新しいアクティビティを作成してcheck-inする。「/as」「新しい作業始める」「アクティビティ作って」「これやる」など新規作業の開始で発動。このスキルを経由せずにadd_activityを呼ばない(orchの起票はorch skillに従う)。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

【必須】open askを1件ずつ人間に提示し、回答をanswer_askで記録する。「askに答える」「open ask消化して」「溜まってるask片付けたい」などで発動。このスキルを経由せずにanswer_askを呼ばない。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

【必須】add_askでaskを起票する前に、question/contextをテンプレートで組み立てる。離席中・セッション跨ぎでしか答えられない判断が出たときや、「これ聞いといて」「判断委譲しといて」「後で確認して」などで発動。このスキルを経由せずにaskの文面を書かない(メタaskを除く)。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

add_askの応答のsimilar_asksを見て、同型の問いが繰り返され裁定が一貫していると気づいたとき、判例をまとめてメタask(kind="meta")を起票する。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

ask-watch

무료

人間の判断待ちaskの受け箱をMonitorで監視し、判断構造が同じopen askが溜まっていればメタaskを起票する。「ask storeを監視して」「asksを見張って」「open askの滞留をチェックして」などで発動。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isizono/calm42026년 10월 16일 업데이트

isizono의 스킬 모두 보기

이 스킬의 문제 신고