依 L3(靜態分最高的一級)列出:lodog 不改 code 能做的都做了之後,剩下只能改原系統的項目。靜態分最多再 +7.00。lodog 只建議,改不改由系統 owner 決定。
+5.00 分 錯誤回應結構化並寫進文件(靜態:錯誤回應)
2/2 個 tool 沒有寫 4xx/5xx 回應;agent 看不懂錯誤就沒辦法自己修正
- GET /players/{id}
- POST /players/{id}/bonus
貼給 coding agent:
請讓所有錯誤回應用同一個結構 application/problem+json(RFC 9457):type、title、status、detail,另加 errors 陣列指出哪個欄位錯在哪、該怎麼改。然後在 OpenAPI 為每支 API 寫出 400、401、403、404、409、500 中實際會出現的回應,schema 指向共用的 Problem。先從下列沒寫任何錯誤回應的端點開始:
- GET /players/{id}
- POST /players/{id}/bonus
+2.00 分 宣告驗證方式(靜態:Auth 宣告)
securitySchemes:無;2/2 個 tool 沒標 security
- GET /players/{id}
- POST /players/{id}/bonus
貼給 coding agent:
請在 OpenAPI 的 components.securitySchemes 寫出系統實際使用的驗證方式(例如 bearer token、或登入後的 session cookie 用 apiKey in cookie),並在頂層 security 或每支 operation 標上要用哪一個;不需驗證的端點(如登入)明確寫 security: []。讓 agent 光看文件就知道先登入再帶什麼。
靜態分不計、原系統仍建議改
已由 overlay、policy 或 gateway 處理的,或只在動態分看得到的。
· 把會改資料的 GET 改成 POST(靜態:GET 卻會改資料,已拿滿,不再加分)
1 個 GET 的名字是動作;L3 policy 只能擋住它們,改掉才是根本
- GET /players/{id}/resetPassword(reset)
貼給 coding agent:
下列 GET 端點會改資料,但 GET 應該是安全的查詢(爬蟲、預取、agent 都會當它無害)。請把每一個改成 POST(刪除類改 DELETE),路徑和權限檢查維持不變,並同步更新 OpenAPI 文件和所有呼叫端;舊的 GET 路徑回 405,不要繼續執行動作。
- GET /players/{id}/resetPassword(reset)
· 給 agent 真正的機器身份(靜態:Agent 身份,已拿滿,不再加分)
gateway 的身份只是紀錄上的標籤,舊系統看不到;分數已經由 gateway 拿到的話,這項不再加分
貼給 coding agent:
請讓系統支援機器身份:agent 用自己的 service account(OAuth client credentials)取得 token,不共用任何人的帳號。token 帶 sub(agent)與 act(代表的人,RFC 8693);權限依這組身份判斷,可以單獨停用某個 agent;稽核紀錄同時寫下 agent 與代表的人。
· 危險操作支援 dry-run(動態:安全分與 gate)
1 個會改資料的 tool 沒有 dry-run 參數;agent 無法在送出前預覽結果
貼給 coding agent:
請為會改資料的端點(優先是金額、狀態會變的)加上 dryRun=true 參數:照常驗證並計算結果、回傳「會改什麼」,但不寫入資料庫、不發通知、不打外部系統;在 OpenAPI 寫出這個參數與預覽回應。優先處理:
- POST /players/{id}/bonus
· 寫入操作支援 idempotency key(動態:安全分與 gate)
1 個會改資料的 tool 沒看到 idempotency key(文件裡的 query、header 參數或 body 欄位);逾時重試可能重複執行
貼給 coding agent:
請讓會改資料的端點接受 Idempotency-Key(header 或 body 欄位 idempotencyKey):同一個 key 在保存期限內重送,回傳第一次的結果、不重複執行;同 key 不同內容回 409。保存期限至少 24 小時,並寫進 OpenAPI。優先處理金額類端點:
- POST /players/{id}/bonus
公開的 agent 標準(不計分)
- MCP Server Card
/.well-known/mcp/server-card.json:unchecked,沒有給 --origin,未檢查 - OAuth Protected Resource(RFC 9728)
/.well-known/oauth-protected-resource:unchecked,沒有給 --origin,未檢查 - API Catalog(RFC 9727)
/.well-known/api-catalog:unchecked,沒有給 --origin,未檢查