Skip to main content

api-contract-guard

detect-images の応答形・エラーコード・HTTP ステータス・エラー優先順位・部分成功不変条件に後方互換を壊す変更が無いかを検査する。PR 前や API 周辺を変更した後に使う。

Quellinformationen

Repository
misskey-dev/sensitive-detector
Letzte Quellaktivität
26. Juni 2026 um 13:46
Erkannte Sprache von SKILL.md
Japanisch
Sterne
11
Forks
3

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
api-contract-guard
description
detect-images の応答形・エラーコード・HTTP ステータス・エラー優先順位・部分成功不変条件に後方互換を壊す変更が無いかを検査する。PR 前や API 周辺を変更した後に使う。
disable-model-invocation
true
context
fork
allowed-tools
Read, Grep, Glob, Bash
# api-contract-guard — 外部消費者(Misskey 本体)向け API 契約の破壊検出 このサービスの応答は Misskey 本体の `judgePrediction`(`FileInfoService.ts` の `find(x => x.className === 'Sexy' / 'Porn')`)が直接参照する。**形・コード・ステータス・ 部分成功の挙動を壊すと本体が無言で誤動作する。** 現在の差分を正本と突き合わせ、破壊的変更を洗い出す。 エンドポイントは **`POST /v1/detect-images`(multipart/form-data・バッチ)** の 1 本。 複数の正規化済み画像を一括推論し、各パーツの生予測値を順序保持で返す。 ## 差分(自動注入) - 変更ファイル一覧: !`git diff --name-only main...HEAD` - API/契約関連の差分: !`git diff main...HEAD -- apps/server/src packages/core/src README.md` ## 正本(これらを基準に判定する) - 応答型: `packages/core/src/types.ts` - `Prediction` = `{ className:string; probability:number }`(ONNX Runtime 生出力・確率降順。 `PredictionType` を re-export しつつ className を string に緩めた契約)。 - `BatchItemResult` = `{ success:true; predictions: Prediction[] }` | `{ success:false; error:{ code:DetectErrorCode; message:string } }`(パーツ単位の結果)。 - `DetectImageSuccessResult` / `DetectFailedResult` は core 内部の単一推論型(`detectImage`)であり、 **HTTP 応答の形ではない**点に注意。 - **HTTP 応答形**(`apps/server/src/routes/detect-images.ts` / `app.ts`): - 成功(200)= `{ success:true, result:{ results: BatchItemResult[] } }`。 `results` の順序はリクエストパーツ順と一致する。 - リクエスト全体の失敗(4xx)= `{ success:false, error:{ code, message } }`。 - エラーコード: `DetectErrorCode`(7 種)と HTTP ステータス表 `STATUS_BY_CODE` (`apps/server/src/lib/error-mapping.ts`)。7 種 = `AUTHENTICATION_REQUIRED`(401) / `INVALID_REQUEST`(400) / `UNSUPPORTED_MEDIA_TYPE`(415) / `REQUEST_TOO_LARGE`(413) / `IMAGE_DECODE_FAILED`(422) / `MODEL_UNAVAILABLE`(503) / `DETECTION_FAILED`(500)。 - **リクエスト全体の優先順位(先勝ち。`app.ts` のミドルウェア順 + `detect-images.ts`)**: 認証(401) → bodyLimit 超過 413(`maxBodySize`) → 非 multipart 415 → multipart パース失敗 400 → パーツ 0 件 400 → パーツ数超過 413(`maxParts`)。 - **パーツ単位の検査順(`detect-images.ts` 内、各パーツ毎・全体は 200 のまま `results[i].error` に格納)**: 非 File 400 → 非対応 part Content-Type 415 → 空ボディ 400 → サイズ超過 413(`maxBinarySize`) → dimensions 読取失敗 422(`IMAGE_DECODE_FAILED`) → dimensions 上限超過 413 (`maxImageWidth`/`maxImageHeight`/`maxImagePixels`) → 推論。 - 受理する **パーツの** Content-Type: `image/png|jpeg|gif|bmp` (`detect-images.ts` の `ACCEPTED_CONTENT_TYPES`)。リクエスト全体は `multipart/form-data`。 - `README.md` の API 表。 ## 破壊的変更とみなすもの(❌ で報告) - `result.results[]` 構造の変更・`BatchItemResult` のキー改名・`predictions` の形変更・ 確率降順保証の喪失。 - **部分成功不変条件の破壊**: パーツ単位の失敗で全体を 4xx にする、`results` の順序保証の喪失、 パーツ失敗を 200 以外で返す。 - `DetectErrorCode` の削除・改名、`STATUS_BY_CODE` のステータス変更。 - リクエスト全体/パーツ単位いずれかのエラー優先順位の入れ替え。 - `success` フラグの廃止・意味変更、`error.code` 以外での分岐を強要する変更。 - 受理する Content-Type(リクエスト=multipart / パーツ=image/*)の縮小。 ## 報告 各論点を ✅(影響なし) / ⚠️(要確認) / ❌(後方互換破壊) で列挙し、❌ は 「どのファイルのどの変更が・本体の何を壊すか・どう直すか」まで一行で示す。 **新規エンドポイントの追加など既存契約を変えない拡張は ✅**(scope-guard の判断軸に従う)。
Auf GitHub ansehen