WorkBuddy
8bd1ab804a
fix(organization): 修复创建机构审计缺操作人;补全机构修复的验证并部署 Docker 测试环境
一、机构审计归属缺陷(本轮活栈验收中新发现)
- 现象:audit_logs 中 CREATE_ORGANIZATION 的 operator_id 7/7 为 NULL,
而 DISABLE/ENABLE_ORGANIZATION 均正确记录操作人。审计不可归属 = 无效审计。
- 根因:OrganizationController.create 持有 @AuthenticationPrincipal OperatorPrincipal,
却只把 params 传给 Service,未透传 principal.id() → saveAuditLog(null, ...)。
- 修复:createOrganization(params, operatorId) 签名透传;新增测试断言
createOrganizationRecordsOperatorInAuditLog 长期守卫。
- 复验:新写入的 7 条 CREATE 审计全部带 operator_id,旧 14 条仍为 NULL(前后对照清晰)。
二、补全 rc.22 的验证缺口(此前记为「已修复待验证」)
- 全量回归 757 / 0 / 0 / 3,BUILD SUCCESS,108 个测试类,6:44(基线 741 + 新增 16)。
- 负向注入:ORG_STATUS_ACTIVE 改回 "normal" → 16 例变 3 失败 + 7 错误
(守卫三条断言各自命中 + 服务侧 7 例被 H2 CHK_ORG_STATUS 拦下)。
注入采用「仓库只读挂载 + 容器内副本改写」,工作区哈希前后一致,源码零污染。
- 活栈实测(Docker 全栈):创建/停用/启用均 2xx、非法输入 400、不存在 404、全程零 5xx(15/15)。
- 对已部署栈 pytest tests/e2e → 65 passed。
三、Docker 测试环境部署与工具链固化
- 测试镜像 danyang-match-backend-test 与命名卷 danyang-m2-cache 因 Docker Desktop 重装丢失,
构建定义此前是临时产物 → 落盘为仓库资产 infrastructure/test-toolchain/Dockerfile。
- 本地栈统一使用 docker compose -p danyang(原项目名 infra 与另一项目撞名,
其 --remove-orphans 会误删本项目容器;已确认邻项目数据无丢失,见 known-risks KR-09)。
四、UI 门禁脆弱性修复
- ui-document-baseline-contracts.mjs 解析 docker-compose.staging.yml 时报假红
(「守卫自身失效」);真因是该文件为 CRLF 而守卫正则要求 \n 紧随 container_name 之后
(prod.yml 是 LF 所以此前能过)。解析改为行尾无关,真实断言未削弱。门禁 18/18。
五、文档
- STATUS.md 新增 rc.23 并将 rc.22 由「待验证」订正为「已验证关闭」。
- 实施计划附 B.1、PROGRESS-ASSESSMENT-2026-09-21.md 同步订正。
- known-risks.md:KR-07 解除(Docker 已恢复)、KR-01/KR-06 按复测订正,
新增 KR-08(Docker Hub 域名 DNS 被投毒,改用国内镜像源绕行)与 KR-09(compose 项目名撞名)。
验证状态:全量回归 757/0/0/3 全绿;UI 契约门禁 18/18;对已部署栈 E2E 65/65;
负向注入可变红;工作区哈希未被注入过程污染。
未验证:GitHub Actions 首次真绿(仍未推送,见 KR-06)。
2026-09-22 00:46:10 +08:00
..
2026-09-18 16:37:47 +08:00
2026-09-18 20:25:58 +08:00
2026-09-18 21:15:29 +08:00
2026-09-16 14:37:44 +08:00
2026-09-14 11:44:02 +08:00
2026-09-22 00:46:10 +08:00
2026-09-20 22:30:44 +08:00
2026-09-20 22:30:44 +08:00
2026-09-22 00:46:10 +08:00
2026-09-13 22:09:15 +08:00
2026-09-17 23:25:31 +08:00
2026-09-16 14:37:44 +08:00
2026-09-09 22:05:00 +08:00
2026-09-18 16:37:47 +08:00
2026-09-20 22:30:44 +08:00
2026-09-09 22:05:00 +08:00
2026-09-15 22:29:26 +08:00
2026-09-21 02:05:15 +08:00
2026-09-18 21:34:33 +08:00
2026-09-10 10:58:43 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-14 10:01:41 +08:00
2026-09-14 10:01:41 +08:00
2026-09-16 12:54:39 +08:00
2026-09-16 15:11:38 +08:00
2026-09-16 16:42:48 +08:00
2026-09-16 21:00:52 +08:00
2026-09-16 21:50:56 +08:00
2026-09-16 23:01:13 +08:00
2026-09-17 00:01:53 +08:00
2026-09-18 21:34:33 +08:00
2026-09-17 01:25:12 +08:00
2026-09-17 14:02:00 +08:00
2026-09-17 15:07:52 +08:00
2026-09-17 16:47:10 +08:00
2026-09-17 20:42:09 +08:00
2026-09-17 21:07:25 +08:00
2026-09-17 22:25:10 +08:00
2026-09-17 23:25:31 +08:00
2026-09-18 10:12:34 +08:00
2026-09-18 21:58:58 +08:00
2026-09-18 11:49:18 +08:00
2026-09-18 13:50:19 +08:00
2026-09-18 21:58:58 +08:00
2026-09-22 00:46:10 +08:00
2026-09-22 00:46:10 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 12:54:39 +08:00
2026-09-16 14:37:44 +08:00
2026-09-09 22:05:00 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-19 11:45:27 +08:00
2026-09-16 14:37:44 +08:00
2026-09-16 14:37:44 +08:00
2026-09-18 16:40:09 +08:00
2026-09-18 21:58:58 +08:00