# 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/acceptance/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`