Files
sub2api-cn-relay-manager/docs/REAL_HOST_ARTIFACT_RETENTION.md

288 lines
11 KiB
Markdown
Raw Normal View History

# Real-Host Artifact 保留/归档/清理清单
日期2026-05-22
项目:`sub2api-cn-relay-manager`
## 用途
本清单用于给 `artifacts/real-host-acceptance/` 下的历史目录做统一分层:
1. 保留为最终证据
2. 归档保留,但日常不必继续关注
3. 可清理的中间试错记录
判断原则:
-`docs/SOURCE_OF_TRUTH.md``docs/PRODUCTION_CLOSURE_BOARD.md` 的当前真相为准
- 优先看目录内 `21-summary.json``05-import.json``03-import.body.json``07-access-status.json`
- 只把“latest-head / fresh-host / current-code”直接相关的证据放进“最终证据”
- 纯预跑、空目录、只到 preflight、已被后续更完整证据覆盖的目录放入“可清理”
## Security 分层(新增硬规则)
### A. `safe` artifact可入库
满足以下条件时,才允许留在 `artifacts/real-host-acceptance/` 并被文档直接引用:
- 不包含完整 upstream / managed / user API key
- 不包含完整 bearer token
- 不包含 Redis cache key 原文
- 不包含可直接执行的明文 SQL 凭据操作
- headers 已去掉 `Authorization` / `Cookie` / `Set-Cookie` / `x-api-key`
- 身份类字段user_id / admin_user_id / managed_user_email已改为 hash 或摘要
### B. `debug` artifact本地敏感
以下材料只能作本地短时调试使用,不得视为主证据入库:
- 明文 SQL例如 subscription access prep 原始语句)
- 带完整 key/token 的 runtime context
- 未脱敏 headers / raw body
- Redis cache key 原文
### C. 解释规则
- 文档中的“最终证据”默认指 `safe` artifact
- 若某目录只能在 `debug` 模式下复现价值,则应迁出主视图或只保留摘要版(例如 `21-summary.json` / `99-semantic-summary.json`
### D. 历史目录迁移脚本
当历史 `artifacts/real-host-acceptance/` 目录里仍残留旧版敏感材料时,使用:
```bash
python3 scripts/migrate_historical_artifacts.py artifacts/real-host-acceptance
```
默认行为:
- 原地把可安全化文件改写成 `safe` 版本
- 把明文敏感文件移动到 sibling 目录:
- `artifacts/real-host-acceptance-sensitive/`
- 为旧的 `05-subscription-access-prep.sql` 生成:
- `05-subscription-access-prep.summary.json`
- 为旧的 `07-redis-targeted-invalidation.txt` 生成:
- `07-redis-targeted-invalidation.json`
当前脚本会处理的典型历史文件:
- `00-local-key-source.json`
- `01-runtime-context.json`
- `00-context.json`
- `05-subscription-access-prep.sql`
- `07-redis-targeted-invalidation.txt`
- `08-subscription-group-state.json`
- `*.headers.txt`
- `00-managed-key.txt`
- `00-raw-user-key.txt`
脚本不会替你决定“最终证据 / 归档 / 清理”的业务分类;它只负责把旧目录先迁移到可安全审阅的形态。
- 第二轮迁移已补覆盖复杂 JSON 快照:
- `summary.json`
- `99-summary.json`
- `99-semantic-summary.json`
- `05a-batch-detail-pre-access.json`
- `07-access-status.json`
- `10-batch-detail.json`
- 对这类文件,脚本会递归处理常见敏感字段,并额外解析:
- `DetailsJSON`
- `details_json`
- `probe_summary_json`
这三类 JSON-in-string 字段,先反序列化再脱敏后写回。
- 当前仍需人工关注的残留主要是非标准手工文本快照,例如:
- `00-managed-key-corrected.txt`
- 其他不在固定命名集合中的手工 probe 文本
这些不影响“标准 artifact 已安全化”的结论,但不能直接把主目录视为 100% 无人工遗留。
## 1. 可保留为最终证据
这些目录应长期保留,属于当前 Gate=`APPROVED` 的核心证据。
### 当前主链路最终证据
- `20260521_191418_remote43_minimax_key_import`
- `subscription` 主链路最终成功样本
- `21-summary.json` 已到 `batch_status=succeeded``provider_status=active`
- host `/v1/chat/completions` 与 upstream `/chat/completions` 都是 `200`
- `20260521_201509_remote43_deepseek_key_import`
- `subscription` 主链路最终成功样本
- `21-summary.json` 已到 `batch_status=succeeded``provider_status=active`
- host `/v1/chat/completions` 与 upstream `/chat/completions` 都是 `200`
- `20260521_210403`
- latest-head `self_service` 标准 fresh-host 验收最终成功样本
- `05-import.json` = `succeeded/self_service_ready/active`
- `07-access-status.json` = `latest_access_status=fully_ready`
### 当前根因/能力校准证据
- `20260520_222713_crm18100_live_model_mapping_validation`
- 证明 `model_mapping` 真实落盘与 live runtime 一致
- 属于“为什么不再回退 GPT 默认模型”的关键证据
- `20260521_142211_crm18100_deepseek_completion_split`
- 证明 host completion 失败与 upstream completion 成功可以分离
-`host_compatibility_gap``upstream_key_quota_issue` 分流逻辑的重要根因样本
- `20260521_222212_remote43_minimax-m2-7-official_key_import`
- 官方 MiniMax 模板的真实 live 样本
- 不是通过样本,但它是“模板链路通、上游 quota/429 阻断”的最终证据
- 对后续官方 provider 验收矩阵有持续价值
## 2. 可归档但不必继续关注
这些目录有参考价值,但已经不是当前真相的第一证据。建议保留压缩包或移到归档区,不需要日常留在主视图里。
### 早期 OpenAI / host-scope 里程碑样本
- `20260517_openai_platform_fix_retest`
- `20260518_reconcile_hostscope_self_service`
- `20260518_reconcile_hostscope_subscription`
- `20260518_redeploy_matrix`
- `20260521_210306`
说明:
- 这些目录证明过某一阶段的 self-service / subscription / host-scope 语义曾经打通
- 但都已被 `20260521_191418_*``20260521_201509_*``20260521_210403` 覆盖
### 已定位问题、但已被后续最终修复覆盖的关键失败样本
- `20260520_173133_remote43_deepseek_key_import`
- `20260520_203533_remote43_deepseek_key_import`
- `20260520_203818_remote43_deepseek_key_import`
- `20260520_203913_remote43_minimax_key_import`
- `20260521_011544_remote43_minimax_key_import`
- `20260521_011717_remote43_deepseek_key_import`
- `20260521_064109_remote43_minimax_key_import`
- `20260521_064203_remote43_deepseek_key_import`
- `20260521_064403_remote43_deepseek_key_import`
- `20260521_064454_remote43_minimax_key_import`
- `20260521_110159_remote43_deepseek_key_import`
- `20260521_110229_remote43_minimax_key_import`
- `20260521_172436_remote43_deepseek_key_import`
- `20260521_172437_remote43_minimax_key_import`
- `20260521_172646_remote43_minimax_key_import`
- `20260521_172709_remote43_deepseek_key_import`
- `20260521_182844_remote43_minimax_key_import`
- `20260521_190809_remote43_minimax_key_import`
- `20260521_191026_remote43_minimax_key_import`
- `20260521_200932_remote43_deepseek_key_import`
说明:
- 这些目录记录了“模型列表成功但 completion 失败”“quota 问题”“probe 假失败”“ready 语义修正前后”的完整演进
- 若后续要回顾 debug 过程,它们有价值
- 但对当前上线结论已不是必需证据
### 旧版 full-flow 但已失败/半成功的早期验收目录
- `20260517192934_openai_group_bound_closure`
- `20260517_062209_fixed`
- `20260517_080506_post_fix`
- `20260517_081533_post_decode_fix`
- `20260517_082153_post_account_type_fix`
- `20260517_104007_subscription_after_fix`
- `20260517_104113_subscription_skip_rollback`
- `20260517_live_openai_retest`
- `20260517_live_openai_subscription_retest`
- `20260517_openai_group_balance_retest`
- `20260517_openai_keep_scene`
- `20260518_redeploy_self_service`
- `20260518_redeploy_self_service_keep`
- `20260518_self_service_reaccept_v6`
- `20260518_subscription_reaccept_v6`
- `20260519_self_service_reaccept_current`
- `20260521_202654`
- `20260521_203020`
- `20260521_203229`
- `auto_a5f5185f_minimax_self_service`
说明:
- 这些目录大多是完整流程快照包含导入、access、provider-status、reconcile、rollback
- 虽然最终失败或半成功,但对复盘“问题怎么一步步收口”仍有价值
## 3. 可以清理掉的中间试错记录
这些目录主要是:
- 空目录
- 只到 create-host / preflight / runtime-context
- 明显被后续同主题目录完全覆盖
- 手工临时试验目录,且已有更完整自动化目录替代
### 空目录或只有极少预跑内容
- `20260516_170617`
- `20260517_000027`
- `20260518_redeploy_subscription_keep`
- `20260519_111543_remote43_local_minimax_key_import`
- `20260521_195330_remote43_deepseek_key_import`
- `20260521_221921_remote43_minimax-m2-7-official_key_import`
### 仅 preflight / install-pack / preview未形成有效验收结论
- `20260516_155350`
- `20260516_170410`
- `20260516_170421`
- `20260516_170607`
- `20260516_170725`
- `20260516_171131`
- `20260517_000418`
- `20260517_061947_postfix`
- `20260517_062722_after_account_fix`
- `20260517_102113_subscription_probe`
- `20260517_live_openai_subscription_nokey`
- `20260520_115443_remote43_deepseek_key_import`
- `20260520_115505_remote43_deepseek_key_import`
- `20260520_115549_remote43_deepseek_key_import`
- `20260520_123159_remote43_deepseek_key_import`
- `20260520_172725_remote43_deepseek_key_import`
- `20260520_173010_remote43_deepseek_key_import`
- `20260520_184240_remote43_deepseek_key_import`
- `20260520_185332_remote43_deepseek_key_import`
- `20260520_194731_remote43_deepseek_key_import`
- `20260520_194818_remote43_deepseek_key_import`
- `20260520_194946_remote43_deepseek_key_import`
- `20260520_195110_remote43_deepseek_key_import`
- `20260521_011452_remote43_minimax_key_import`
- `20260521_171701_remote43_deepseek_key_import`
- `20260521_172212_remote43_deepseek_key_import`
- `20260521_172213_remote43_minimax_key_import`
- `20260521_172337_remote43_deepseek_key_import`
- `20260521_172338_remote43_minimax_key_import`
- `20260521_182744_remote43_minimax_key_import`
- `20260521_190534_remote43_minimax_key_import`
- `20260521_190941_remote43_minimax_key_import`
- `20260521_195348_remote43_deepseek_key_import`
- `20260521_195413_remote43_deepseek_key_import`
- `20260521_195635_remote43_deepseek_key_import`
- `20260521_200014_remote43_deepseek_key_import`
- `20260521_200217_remote43_deepseek_key_import`
- `20260521_200733_remote43_deepseek_key_import`
- `20260521_204702`
- `20260521_221940_remote43_minimax-m2-7-official_key_import`
- `20260521_222052_remote43_minimax-m2-7-official_key_import`
- `auto_4431135c_openai_subscription`
### 手工临时 reaccept 目录,已被后续自动化 remote43 目录覆盖
- `20260520_115732_remote43_deepseek_manual_reaccept`
- `20260520_115820_remote43_deepseek_manual_reaccept`
- `20260520_120656_remote43_deepseek_manual_reaccept`
- `20260520_120819_host18080_deepseek_manual_reaccept`
- `20260520_121447_host18091_deepseek_manual_reaccept`
- `20260520_121640_host18091_deepseek_manual_reaccept`
- `20260520_121936_crm18092_host18091_deepseek_manual_reaccept`
## 建议执行方式
### 低风险做法
1. 先保留“最终证据”原样不动
2. 把“可归档”目录打包移动到归档区,例如:
- `artifacts/real-host-acceptance-archive/`
3. 把“可清理”目录删除
### 不建议的做法
- 不要只按时间删除最新之前的所有目录
- 不要删除 `20260521_191418_remote43_minimax_key_import`
- 不要删除 `20260521_201509_remote43_deepseek_key_import`
- 不要删除 `20260521_210403`
- 不要删除 `20260520_222713_crm18100_live_model_mapping_validation`
- 不要删除 `20260521_142211_crm18100_deepseek_completion_split`
- 不要删除 `20260521_222212_remote43_minimax-m2-7-official_key_import`