Skip to content

错误码权威注册表(Error Code Registry) ​

📍 单一事实源:本表由 src/app/*/domain/exceptions.py 直出(2026-09-16 生成)。 新模块接入前必查本表;新段从 40436xxx 起顺序分配(守卫脚本 check_error_code_segments.py 已自动化)。 关联:error-codes.md · api-testing

段分配总表(40 段 · 281 码 · 跨模块撞码 1 次已修复) ​

段模块码数
40001xxxoauth(历史通用段)1
40101xxxoauth12
40201xxxadmin63
40301xxxuser12
40401xxxhonor6
40402xxxzepp5
40403xxxdevice11
40404xxxxiaomi2
40405xxxshoes6
40406xxxtraining4
40407xxxgoal11
40408xxxwallet6
40409xxxpoints5
40410xxxcoupon4
40411xxxcart5
40412xxxmall14
40413xxxgroup_buy5
40414xxxdistribution7
40415xxxfavorite2
40416xxxreview7
40417xxxsuunto2
40418xxxsport10
40419xxxupload6
40420xxxfeed3
40421xxxfollow4
40422xxxranking + stats(⚠️ 共享段 — 见下方说明)3
40423xxxrecipe4
40424xxxfood4
40425xxxboohee3
40426xxxrd(研发日志/归集)9
40427xxxhealth_archive(健康档案聚合)3
40428xxxsimulation(Dev 仿真数据)5
40429xxxdefault_template(默认数据模板)5
40430xxxdebug_workbench(调试工作台)9
40431xxxhoneypot(蜜罐 — 后台访问异常检测)2
40432xxxwatchtower(瞭望塔 — 后台守护监视)2
40433xxxthoth(知识库 — 2026-09-24 由 kb 改名,端点与表名不变)3
40434xxxsysmap(系统地图向导 — 2026-09-24 立项,vendor Archify 校验/渲染)3
40435xxxqingmu_band(青沐手环 — 活手环增量/管理面)1
40436xxxcity(行政区划 + 用户城市绑定 — 2026-09-30 由 40431 重分配)5
40437xxxapp_storage(前端 APP COS 直传 — 预签名 URL;2026-09-30 曾误用 40432 → 重分配 40437)9
40438xxxrhythmind_report(APP AI 运动报告 — Celery CLI 模式)9

⚠️ 40426 曾发生跨模块撞码(2026-09-20 审查发现):simulation 模块设计时误用 40426, 与 rd 的 40426001..005 逐码重号且语义不同(40426002 在 rd 是 PROJECT_NOT_FOUND、 在 simulation 曾是 UNAUTHORIZED)。 根因:查段占用时用了 grep ... | head -25 —— 被截断在 40425,没看到 40426 已被占用。 教训:查段占用必须全量扫描,不能用截断输出下结论。 正确查法:grep -rhoE '"404[0-9]{2}[0-9]{3}"' src/app/ | cut -c1-6 | sort -u 处置:simulation 已迁至 40428xxx。

⚠️ 40422xxx 是 ranking 与 stats 的事实共享段(2026-09-20 审查确认,非本轮引入): 两域的 PARAM_INVALID / UNAUTHORIZED / NOT_FOUND 逐码重号且语义完全相同 (40422001/002/004)。

为什么暂不处置:与 40426 那次不同 —— 那次是语义冲突(同一码在两域含义不同, 前端按码分支会走错逻辑);这次语义一致,前端对同一个码的处理行为相同,实际无危害。

遗留风险:将来任一方新增码时会真冲突(目前两域各自只用到 001/002/004,未交叉)。 建议:下一次动 stats 或 ranking 的错误码时,顺手把一方迁到空段。 ⚠️ 原文建议的 40429xxx 已于 2026-09-20 被 default_template 占用(见下)—— 请改用 40430xxx(当前最高已用段是 40429,40430 起为空)。 分配前务必按下方全量扫描法复核,不要照抄本行。 注:stats/CLAUDE.md 登记的就是 40422 —— 两个模块都以为这段是自己的。

同模块别名(合法 — 有意复用,非撞段) ​

码别名说明
40101003oauth.SMS_CODE_WRONG / CAPTCHA_WRONG验证码错误统一码
40201004admin.NOT_FOUND / PERMISSION_DENIEDEnum 别名(RBAC→403 靠 http_status 覆盖)
40201102admin.USER_ALREADY_BOUND / USER_ALREADY_BANNEDuser 域双语义
40201103admin.USER_BAN_FAILED / USER_ONLINE_KICK_REQUIRED封禁失败双因
40201302admin.ORDER_REFUND_FAILED / ORDER_STATUS_NOT_ALLOWED退款状态共用
40201402admin.WITHDRAWAL_ALREADY_PROCESSED / STATUS_NOT_ALLOWED审批状态共用
40201501admin.LOGIN_FAILED / REVIEW_NOT_FOUND历史双占用(P2-A 记录)

历史撞段与迁移记录(2026-09-16 治理) ​

跨模块撞码 13 组已全部迁移(「后迁者迁出」原则):

旧码迁出方新码保留方
40301001oauth.USER_BANNED(霸占 user 段)40101013user.PARAM_INVALID
40405001/2suunto(2 码)40417001/2shoes
40413xxxsport(10 码)40418xxxgroup_buy
40413xxxfeed(3 码)40420xxxgroup_buy
40414xxxupload(6 码)40419xxxdistribution
40414xxxfollow(4 码)40421xxxdistribution

分模块全量码表 ​

admin(63 码) ​

码枚举名
40201001PARAM_INVALID
40201002UNAUTHORIZED
40201003FORBIDDEN
40201004NOT_FOUND
40201005CONFLICT
40201006USER_BANNED
40201007INTERNAL_ERROR
40201004PERMISSION_DENIED
40201101USER_NOT_FOUND
40201102USER_ALREADY_BOUND
40201103USER_BAN_FAILED
40201102USER_ALREADY_BANNED
40201103USER_ONLINE_KICK_REQUIRED
40201104USER_HAS_PENDING_ORDERS
40201105USER_DELETION_INCOMPLETE
40201201CONTENT_NOT_FOUND
40201202CONTENT_ALREADY_PUBLISHED
40201203CONTENT_NOT_PUBLISHED
40201204CONTENT_HAS_COMMENTS
40201205CONTENT_ALREADY_FEATURED
40201206CONTENT_TAG_CONFLICT
40201207CONTENT_CATEGORY_DEPTH_EXCEEDED
40201208COMMENT_NOT_FOUND
40201301ORDER_NOT_FOUND
40201302ORDER_REFUND_FAILED
40201302ORDER_STATUS_NOT_ALLOWED
40201303ORDER_REFUND_CONFLICT
40201304ORDER_REFUND_AMOUNT_EXCEEDED
40201305ORDER_REFUND_BALANCE_INSUFFICIENT
40201306ORDER_SHIPPED_ADDRESS_LOCKED
40201307ORDER_PARTIAL_REFUND_UNSUPPORTED
40201308ORDER_PAYMENT_MISMATCH
40201309ORDER_REFUND_WINDOW_EXCEEDED
40201310ORDER_ADJUST_AMOUNT_INVALID
40201401WITHDRAWAL_NOT_FOUND
40201402WITHDRAWAL_ALREADY_PROCESSED
40201402WITHDRAWAL_STATUS_NOT_ALLOWED
40201403WITHDRAWAL_DUPLICATE_PAYOUT
40201404WITHDRAWAL_CHANNEL_FAILURE
40201405WITHDRAWAL_BANK_INFO_MISMATCH
40201406WITHDRAWAL_PAYOUT_CAP_EXCEEDED
40201501LOGIN_FAILED
40201501REVIEW_NOT_FOUND
40201502REVIEW_ALREADY_REVIEWED
40201502LOGIN_RATE_LIMITED
40201503REVIEW_APPEAL_ALREADY_HANDLED
40201504REVIEW_APPEAL_TIMEOUT
40201601INTERPRET_REPORT_NOT_FOUND
40201602INTERPRET_HEALTH_DATA_MISSING
40201603INTERPRET_BODY_COMPOSITION_MISSING
40201604INTERPRET_ALREADY_WRITTEN
40201701RELEASE_VERSION_NOT_FOUND
40201702RELEASE_ROLLOUT_CONFLICT
40201703RELEASE_ROLLBACK_TARGET_NOT_FOUND
40201704RELEASE_ROLLOUT_PERCENTAGE_INVALID
40201706RELEASE_ALREADY_ROLLED_BACK
40201721CHANNEL_NOT_FOUND
40201722CHANNEL_SWITCH_FAILED
40201723CHANNEL_ALREADY_CLOSED
40201741CONFIG_KEY_NOT_FOUND
40201742CONFIG_VALUE_INVALID
40201743CONFIG_DICTIONARY_NOT_FOUND
40201744CONFIG_DICTIONARY_DUPLICATE
40201761AUDIT_LOG_QUERY_FAILED

cart(5 码) ​

码枚举名
40411001PARAM_INVALID
40411002UNAUTHORIZED
40411004NOT_FOUND
40411005PRODUCT_OFF_SHELF
40411006CART_ITEM_NOT_FOUND

coupon(4 码) ​

码枚举名
40410001PARAM_INVALID
40410002UNAUTHORIZED
40410004NOT_FOUND
40410005ALREADY_RECEIVED

device(11 码) ​

码枚举名
40403001PARAM_INVALID
40403002UNAUTHORIZED
40403004NOT_FOUND
40403005BINDING_NOT_FOUND
40403006VENDOR_REVIEWING
40403007VENDOR_METHOD_NOT_SUPPORTED
40403008SHARE_IMAGE_FAILED
40403009RECORD_NO_TRACK
40403010RECORD_DELETE_FAILED(运动记录删除失败 — 存储抖动 502 可重试)
40403011RECORD_NOT_DELETABLE(设备同步记录不可删 — Q22 防同步复活)

distribution(7 码) ​

码枚举名
40414001PARAM_INVALID
40414002UNAUTHORIZED
40414004NOT_FOUND
40414005WITHDRAW_MIN_AMOUNT
40414006WITHDRAW_INSUFFICIENT
40414007WITHDRAW_PENDING_EXISTS
40414008TEAM_ALREADY_BOUND

favorite(2 码) ​

码枚举名
40415001PARAM_INVALID
40415002UNAUTHORIZED

feed(3 码) ​

码枚举名
40420001PARAM_INVALID
40420002UNAUTHORIZED
40420004NOT_FOUND

follow(4 码) ​

码枚举名
40421001PARAM_INVALID
40421002UNAUTHORIZED
40421004NOT_FOUND
40421005SELF_FOLLOW

goal(11 码) ​

码枚举名
40407001PARAM_INVALID
40407002UNAUTHORIZED
40407004NOT_FOUND
40407005PERIOD_INVALID
40407006TARGET_REQUIRED
40407008PROGRESS_MANUAL_DISABLED
40407009FAMILY_NOT_JOINED
40407010FAMILY_FORBIDDEN
40407011MILESTONE_LIMIT
40407012MILESTONE_DUPLICATE
40407013MILESTONE_NOT_FOUND

group_buy(5 码) ​

码枚举名
40413001PARAM_INVALID
40413002UNAUTHORIZED
40413004NOT_FOUND
40413005GROUP_BUY_REACHED
40413006ALREADY_JOINED

honor(6 码) ​

码枚举名
40401001PARAM_INVALID
40401006SESSION_EXPIRED
40401007USER_NOT_FOUND
40401008TOKEN_EXCHANGE_FAILED
40401009ADOPT_SOURCE_MISSING
40401005UNCONFIGURED

mall(14 码) ​

码枚举名
40412001PARAM_INVALID
40412002UNAUTHORIZED
40412004NOT_FOUND
40412005PRODUCT_OFF_SHELF
40412006FORBIDDEN
40412007ILLEGAL_STATE
40412008GROUP_BUY_NOT_FOUND
40412009GROUP_BUY_NOT_REACHED
40412010GROUP_BUY_NOT_JOINED
40412011POINTS_INSUFFICIENT
40412012USER_BANNED
40412014PAYMENT_UNAVAILABLE
40412015PARTIAL_OFF_SHELF
40412016GROUP_BUY_ITEM_INVALID

oauth(13 码) ​

码枚举名
40101001SMS_CODE_NOT_FOUND
40101003SMS_CODE_WRONG
40101003CAPTCHA_WRONG
40101004CAPTCHA_EXPIRED
40101005RATE_LIMITED
40101006SMS_SEND_FAILED
40101007WECHAT_BIND_FAILED
40101008AGREEMENT_NOT_ACCEPTED
40101010WECHAT_LOGIN_FAILED
40101011TOKEN_INVALID
40101012TOKEN_REPLAYED
40101013USER_BANNED
40001001PARAM_INVALID

points(5 码) ​

码枚举名
40409001PARAM_INVALID
40409002UNAUTHORIZED
40409004NOT_FOUND
40409005SIGNIN_ALREADY
40409006POINTS_INSUFFICIENT

review(7 码) ​

码枚举名
40416001PARAM_INVALID
40416002UNAUTHORIZED
40416003FORBIDDEN
40416004NOT_FOUND
40416005ORDER_NOT_PAID
40416006PRODUCT_NOT_IN_ORDER
40416007ALREADY_REVIEWED

shoes(6 码) ​

码枚举名
40405001PARAM_INVALID
40405002UNAUTHORIZED
40405004NOT_FOUND
40405005ALREADY_RETIRED
40405006COMPARE_SELECT_TWO
40405007COMPARE_NOT_YOURS

sport(10 码) ​

码枚举名
40418001PARAM_INVALID
40418002UNAUTHORIZED
40418004NOT_FOUND
40418005CHECKIN_ALREADY
40418006NOT_GROUP_MEMBER
40418007GROUP_OWNER_QUIT
40418008GROUP_OWNER_ONLY
40418009GROUP_LIMIT
40418010ALREADY_IN_GROUP
40418011USER_BANNED

suunto(2 码) ​

码枚举名
40417001INVALID_SIGNATURE
40417002NOTIFICATION_INVALID

training(4 码) ​

码枚举名
40406001PARAM_INVALID
40406002UNAUTHORIZED
40406004NOT_FOUND
40406005PLAN_ARCHIVED

upload(6 码) ​

码枚举名
40419001PARAM_INVALID
40419002UNAUTHORIZED
40419003NO_FILE
40419004UNSUPPORTED_MIME
40419005FILE_TOO_LARGE
40419006RECORD_NOT_FOUND

user(12 码) ​

码枚举名
40301001PARAM_INVALID
40301002UNAUTHORIZED
40301004NOT_FOUND
40301005BINDING_CONFLICT
40301006POINTS_INSUFFICIENT
40301007REDEEM_PACKAGE_INVALID
40301008INVITER_INVALID
40301009MEMBER_CAP_EXCEEDED
40301010PROFILE_INCOMPLETE
40301011PLAN_OPTION_INVALID
40301012DELETE_BLOCKED
40301013AGE_INVALID

wallet(6 码) ​

码枚举名
40408001PARAM_INVALID
40408002UNAUTHORIZED
40408004NOT_FOUND
40408005WALLET_FROZEN
40408006INSUFFICIENT_BALANCE
40408007PAYMENT_DISABLED

xiaomi(2 码) ​

码枚举名
40404001INVALID_SIGNATURE
40404002NOTIFICATION_INVALID

zepp(5 码) ​

码枚举名
40402001PARAM_INVALID
40402002UNAUTHORIZED
40402006SESSION_EXPIRED
40402005UNCONFIGURED
40402010WEBHOOK_BODY_MISSING

health_archive(3 码) ​

码枚举名说明
40427001PARAM_INVALID请求参数非法(未知 action / 阈值不合法)→ 400
40427002UNAUTHORIZED未登录 / token 无效 → 401
40427004NOT_FOUND资源不存在 → 404(预留 — 当前无使用点)

simulation(5 码) ​

码枚举名说明
40428001PARAM_INVALID请求参数非法(未知 action / 天数越界)→ 400
40428002UNAUTHORIZED未登录 / token 无效 → 401
40428003DISABLED仿真被禁用(开关关 或 非 dev 库)→ 403
40428004NOT_FOUND目标用户不存在 → 404
40428005PROFILE_INCOMPLETE四维不全 —— 无可信输入,拒绝生成 → 400

📌 simulation 是 Dev 专用工具:DISABLED(40428003)在生产环境必然触发 —— 这是设计(双守卫 fail-closed),不是故障。

default_template(5 码) ​

码枚举名说明
40429001PARAM_INVALID请求参数非法(未知运动类型等)→ 400
40429002UNAUTHORIZED未登录 / token 无效 → 401
40429003DISABLED模板被禁用(开关关 或 Dev 库跳过)→ 403
40429004NOT_FOUND目标用户画像不存在 → 404
40429005PROFILE_INCOMPLETE四维不全 —— 无可信输入,拒绝生成 → 400

📌 default_template 与 simulation 判据相反(模板只在非 dev 库生成,Dev 已有仿真); 且本模块无 HTTP 路由 —— 上述码目前只有 ClearDefaultTemplateUseCase(显式调用) 会抛 DISABLED(40429003)。注册链路上的生成用例承诺预期路径不抛(静默跳过 + 留痕)。

app_storage(9 码 · 2026-09-30,段号 40437) ​

前端 APP COS 直传(方案 D:预签名 URL + 4 道护栏)—— 路径 /api/v1/app-storage/*。

码枚举名说明
40432001UNAUTHORIZED未登录 / token 无效 → 401
40432002PARAM_INVALID请求参数非法(预留 — 当前无使用点)
40432004QUOTA_EXCEEDED配额超限(每日 5000 次 / 500MB)→ 429
40432010PATH_TAMPERINGobjectKey 前缀不匹配当前用户(防越权)→ 400
40432011OBJECT_NOT_FOUNDCOS 对象不存在(HeadObject 404)→ 404
40432012SIZE_MIME_MISMATCH上报 size/mime 与 COS 头部不一致(或超 50MB)→ 400 / 413
40432013MIME_FORBIDDENMIME 不在白名单 → 400
40432015BIZ_INVALIDbiz 字段非法(不在 avatar/post/report/screenshot/nutrition)→ 400
40432030DELETE_FAILEDCOS DeleteObject 失败 → 500

📌 段号 40437 —— 原规划 40432 与 main 上 watchtower 撞段(2026-09-30 rebase 时发现,撞车形态⑤:查段占用未基于远端)→ 重分配。 📌 本模块零 CAM 配置(预签名 URL 用后端既有 COS 密钥签名)—— 曾按 STS 临时凭证实现 (40432xxx 段内预留 STS_ASSUME_ROLE_FAILED),方案切换后该码已删除。

rhythmind_report(9 码 · 2026-10-08) ​

APP AI 运动报告生成(Celery CLI 模式)—— 路径 /api/v1/rhythmind/*。

码枚举名说明
40438001UNAUTHORIZED未登录 / token 无效 → 401
40438002PARAM_INVALID请求参数非法(预留 — 当前无使用点)
40438004QUOTA_EXCEEDED每日生成次数超限(10 次/用户/日)→ 429
40438010UNSUPPORTED_FORMAT文件格式不支持(非 fit/tcx/华为 json)→ 422
40438011PARSE_FAILED数据解析失败(损坏/无有效数据)→ 422
40438012SCHEMA_INVALID未过统一 schema 校验(时长过短/无量化数据)→ 422
40438020JOB_NOT_FOUND任务不存在或非本人(防枚举)→ 404
40438021LLM_FAILED智谱调用失败(润色有降级,此码=致命态)→ 503
40438030REPORT_NOT_READY报告尚未生成完成 → 409

📌 段号 40438 基于远端 registry(40 段时点)分配。另 40438022 RENDER_FAILED / 40438031 STORAGE_FAILED / 40438013 MIME_FORBIDDEN / 40438015 BIZ_INVALID 为 实施中未启用的枚举(守卫按「声明段」检查,不逐码)。