chore(clean): 测试数据三本账清完(库 / 磁盘 / 七牛桶)+ 100 条问题全部核销

一、dev-clean-e2e.py:加「在用组织保护」后执行
  · 先算「仍被存活任务引用的组织」并保留 —— 当前演示态就挂在其中一个
    「E2E 24数控1班」上,删了它演示态就坏(保留 3 个,演示态完好:
    任务 1449 / 名册 3 人 / 组织 43 都在)
  · 已执行 --apply --demo-tasks --orphan-files:
    49 个 e2e 租户 + 147 个测试组织 + 84 个【演示·旧】任务,
    共 3714 行 / 27 个文件(业务表按 information_schema 动态枚举,不写死清单)

二、dev-clean-qiniu.py(新增):清真实桶里本项目前缀的测试对象
  · 只动 xiaotutongxue/ 前缀;默认 dry-run;删前核实库中零引用、
    数量异常(>5000)直接停
  · 已执行:2036 个对象 / 116 MB 全部删除,删后复验 0 个(F-93「删库不删桶」)
  · 签名按官方文档逐字核对 —— 踩了两个 401 才对:旧 QBox 格式(一个换行 +
    "QBox " 前缀)不对,是「两个换行 + Qiniu 前缀」;batch 的 Body 必须进
    签名串(列举无 Body 能过、批删全 401 —— 同一签名函数一好一坏,线索在 Body)
  · 列举在 rsf.qiniuapi.com,不在 rs(打错 host 报「Bad method: list」)

三、xt-minio 容器已删(F-2)—— 代码早已不用 S3,deploy 里也没有它

四、文档核销与记录
  · docs/08:F-3/4/7/10(小节)与 F-14/26/29/30/31/38/51/57/64/65/71/72/93
    (表格行)全部标「已闭环」;F-5 补执行记录;F-28 备案维持两级(→D-11);
    变更记录补两行 —— **F-1~F-100 至此无未决项**,剩余全部等外部输入
  · docs/01:新增 E4「国标职业库数据来源待客户确认」(F-34,字典页如实显示 0 项)
  · 交接摘要:新增 §一·三十一(17 项决策执行记录)
  · AGENTS.md:清理一节写清三个工具与「在用组织保护」

验证:python scripts/verify-all.py --with-e2e →
      通过 8 / 失败 0 / 跳过 0(37 个 E2E 脚本 / 1577 条断言 / 0 失败,291s;
      prodguard 9/9;test profile 能起)
This commit is contained in:
2026-09-30 12:38:55 +08:00
parent f89cd998ef
commit 4a5790d900
6 changed files with 301 additions and 30 deletions
+44
View File
@@ -2420,3 +2420,47 @@ CI/CD 与 test/prod 环境 → 压测 → 用户手册与客服话术 → 缩略
都是 F-84/F-96 的同类,**第三次出现**。
2. **自己加的防御性限额也要过一遍真实场景的量级**(F-100)——
否则它与它要防的东西一样,都是事故。
---
## §一·三十一 17 项决策全部执行完毕(2026-09-30 下午)
> 客户对 100 条问题逐项拍板后("都按照你的建议来"),A/B/C/D 四组 17 项一次做完。
> **至此 F-1~F-100 没有未决项**;剩下的全部等外部输入(OCR 选型 / 小程序类目 /
> `union_id` / 真机 / 二期时点 / 国标职业库数据)。
### 一、A 组:契约口径修正(V2.6,全部经客户确认)
| 处 | 改了什么 |
|---|---|
| §2.7 | `notifyBizType` 5/6 对调修正(**5 催报 / 6 导出完成**,F-30);`auditAction` 补全 7 个动作(**撤回=7**,F-7) |
| §3.6 / §9.5 | `collect_file.source` 改为建表口径「**谁传的**」(1 本人/2 班主任代传/3 管理员代传/4 整理器,F-38/39) |
| §9.5 / §9.6 / §9.9 | 上传凭证改为「**上传前置检查**(预检/秒传/压缩建议,非安全边界)」;`process` 改为「有原始件时的重新规范化」;OCR 标注一期缓做(F-3/71/72) |
| §11.4 / §12.1 | 撤回约束补「状态 2 可撤(撤的是初审)」;`validation/run` 改**同步**并返回统计(F-51) |
| **新增 §17** | **实现补充与偏差记录**:41 个 §4 未列接口按六类分组(清单由 `--extra` 生成,声明"手抄件会过期")+ **12 条已确认偏离 D-1~D-12**(含租户域名、`biz_type` 落库字符串、§14 路径、归档可删、通知两级、OCR 缓做)—— F-4/10/26/65 一次收口 |
### 二、B 组:补代码(每项都带 E2E)
| 项 | 实现 | 验证 |
|---|---|---|
| 规则模板 FORM 可套用(F-57/64) | `FormSchemaService.saveRawVersion`(版本化保存只有一份);顺带**存模板也存表单**(此前两头各缺一半) | `e2e-m7-taskconfig` **75/75** |
| 已归档任务可删(F-14) | `DELETE /tasks/{id}` 支持 status=3:**子表级联物理删**(14 张表,清掉大头)+ **任务行软删占住 `task_code`**(编码是文件目录名,复用会混两批文件 —— 第一版物理删被 E2E 抓到重号后改的)+ 尽力删文件 + 留痕 | 新增 `e2e-m1-task-delete` **21/21**(含"删除后新建不重号"回归) |
| 催报分钟级限流(F-29) | 10 次/分钟/任务,超限 `42901` 且说清等多久;Redis 不可用时放行不瘫痪 | `e2e-m5-urge` **42/42** |
| 学生微信登录留痕(F-31) | 新增 `WechatLoginLogger`:小程序登录 + H5 回调/打桩登录都写 `sys_login_log`(`login_type=2`,与 DDL 注释对齐) | `e2e-m3-h5-auth` **24/24** |
| 三个纯函数最小单测(F-9) | `IdentityNormalizerTest` + `FileProcessServiceTest`(每条断言都对应一个踩过的坑) | `mvn test` **12/12** |
### 三、C/D 组:备案与清环境
- **备案**:通知降级链一期维持两级(F-28 → §17.2 D-11);国标职业库待客户提供(`docs/01` 新增 **E4**,F-34)。
- **xt-minio 容器已删**(F-2,代码早已不用 S3)。
- **本地测试数据已清**(F-5):49 个 e2e 租户 + 147 个测试组织 + 84 个【演示·旧】任务,
共 3714 行 / 27 个文件;清理工具先算「仍被存活任务引用的组织」并保留(3 个)——
**演示态完好**(任务 1449 / 名册 3 人 / 组织 43 都在)。
- **七牛桶已清空本项目前缀**(F-93):`xiaotutongxue/` 下 **2036 个对象 / 116 MB**,
删前核实库中**零引用**、删后复验 **0 个**。新增 `scripts/dev-clean-qiniu.py`
(默认 dry-run;签名按官方文档逐字核对 —— 踩了两个 401:旧 QBox 格式、batch 的 Body 没进签名串)。
### 四、终验与提交
- `verify-all --with-e2e` → 见提交信息里的最终数字(37 个 E2E 脚本全绿)。
- E2E 总数 36 → **37**(新增 `e2e-m1-task-delete.py`),断言数相应增加。