Skip to main content

api-contract-guard

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

来源信息

仓库
misskey-dev/sensitive-detector
最近来源活动
2026年6月26日 13:46
检测到的 SKILL.md 语言
日语
星标
11
分支
3

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
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 の判断軸に従う)。
在 GitHub 查看