Skip to main content

scope-guard

sensitive-detector に機能を足す時の判断軸と、生予測値サービスとしての不変条件。コードを書く・レビューする・新機能を検討する時に常に適用する。

소스 정보

저장소
misskey-dev/sensitive-detector
최근 소스 활동
2026년 6월 26일 12:55
감지된 SKILL.md 언어
일본어
스타
11
포크
3

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
scope-guard
description
sensitive-detector に機能を足す時の判断軸と、生予測値サービスとしての不変条件。コードを書く・レビューする・新機能を検討する時に常に適用する。
user-invocable
false
# scope-guard — sensitive-detector のスコープ判断と不変条件 このサービスは Misskey の `AiService.detectSensitive`(ONNX Runtime 推論)を HTTP サイドカーに切り出したもの。切り出して嬉しいのは **ネイティブ ML スタック (onnxruntime-node、モデルのメモリ常駐、glibc 依存)の隔離** だけ。 ## 機能を足してよいかの判断軸(エンドポイント数は不変条件ではない) 新機能・新エンドポイントを検討する時は、まず次を問う: 1. **ネイティブ ML スタックの隔離に必要か?** 必要なら足してよい(例: 将来の detect-file 構想、 モデル情報の公開など)。「`/v1/detect-images` 1 本のみ」は *現状の数* であって固定ルールではない。 2. **「正規化済み入力 → 推論 → 生予測値」に徹しているか?** 3. **正規化・しきい値・集約を持ち込んでいないか?** 「便利そう」「ついでに」で 2 / 3 を侵すものは足さない。 ## 守る不変条件(数とは無関係に常に成立させる) - 返すのは **推論の生予測値だけ**。`sensitive` / `porn` のしきい値判定・フレーム集約・ per-user ポリシーは **Misskey 本体(`FileInfoService.ts` の `judgePrediction`)に残す**。ここには入れない。 - 受け取るのは **299×299 の正規化済み PNG**。画像正規化(sharp の resize/rotate/flatten/PNG 変換)と 動画・APNG のフレーム抽出(ffmpeg)は本体に残す。**sharp / fluent-ffmpeg / ffmpeg を依存に足さない。** - **物理パス入力・mediaDir・ディレクトリトラバーサル防御・JSON 入力スキーマ** は持ち込まない (入力は画像バイナリ本体)。 - 予測値の形は ONNX モデルの生出力(全クラス・確率降順)。`predictions[].className` は本体が `find(x => x.className === 'Sexy')` で引ける契約([packages/core/src/types.ts](../../../packages/core/src/types.ts) の `Prediction`)。 - **HTTP 応答はバッチ形**。成功は `{ success:true, result:{ results: BatchItemResult[] } }` (パーツ順保持)。`BatchItemResult` はパーツ毎に `{ success:true, predictions }` か `{ success:false, error:{ code, message } }`。**パーツ単位の失敗で全体を 4xx にしない(部分成功は常に 200)**。 - **エラーは throw せず** `{ success:false, error:{ code } }` を返す([packages/core/src/errors.ts](../../../packages/core/src/errors.ts))。 `code` は `DetectErrorCode` の 7 種のみ。`message` は診断用で API 契約上の意味を持たない。 - リクエスト全体のエラー優先順位(先勝ち): **認証(401) → bodyLimit 413 → 非 multipart 415 → multipart パース失敗/パーツ 0 件 400 → パーツ数超過 413**。認証と bodyLimit は手前のミドルウェアで処理済み。 パーツ単位の検査(非対応 Content-Type 415 / 空 400 / サイズ・dimensions 超過 413 / decode 失敗 422 / 推論)は `results[i].error` に格納し全体は 200。詳細な突合は `/api-contract-guard`。 ## 迷ったら [README.md](../../../README.md) の「Misskey 本体との統合」節(本体に残す責務 = 正規化・フレーム抽出・ `judgePrediction`・集約)を確認する。そこに隔離済みのもの・本体に残すものは v1 では着手しない。 契約(応答形・エラーコード)に触れる変更は `/api-contract-guard` で後方互換を確認する。 ネイティブ依存を上げる変更は `/native-deps-guard` で互換を確認する。
GitHub에서 보기