DAMA 独立回查 dama-recheck-workbench-entity-isolation-20260922 的 §4b/§5 两处待办: 1. POST /api/cma/tenant/switch 审计行原来不可归属: - user_id=None → 改为注入会话用户(user=Depends(require_auth_401)) - target_type/target_id 从 system_config/None 对齐为 entity/<entity_id>, 与 /auth/switch-entity 的 switch_entity 共用目标维度 ⇒ 按账套可过滤,零 DDL - action 字面 switch_tenant_state 保留不合并(与会话级 switch_entity 语义不同), 口径登记 docs/audit-and-notification-caliber-20260922.md 2. /api/cma/notifications/logs 增加 policy/note 口径字段,前端发送记录表 empty-text 提示同一口径 —— 避免「B2 上线后 e1/e2 均 0 条」被当成页面故障 (现库 8 行历史记录全为 alert_id IS NULL 的 OKR 复盘提醒,无账套归属) 回归:tests/test_workbench_entity_isolation_20260922.py 22/22;全量 1370 passed;前端 vite build 通过
单 project-20260921-deploy-dirtyguard-rootfix(任总 2026-09-21 10:28「根治」)。 问题:开发区 /root/cma-management → /srv/hermes/shared/cma-management 既是编辑区又是部署源, deploy.sh [0] 对任何 tracked modified 即 exit 1,多 agent 并行下反复自锁: - 2026-09-18 frontend/package.json(corepack 生成物) - 2026-09-21 10:09 batch5 在途 6 文件(放行卡住) - 2026-09-21 11:07 构建又写出 frontend/components.d.ts 改动: - deploy.sh:部署内容 = 已提交的 origin/main(独立部署检出 /srv/hermes/shared/cma-deploy: fetch -> checkout --detach -f -> clean -fdx);[0] 降级为告警(不再 exit); 新增 1.1 部署树自检(部署树必须无 tracked 修改)、1.2 运行时资产单源接线(.env/venv/node_modules)、 1d 后端可导入自检、运行树幂等切换(unit 改写前备份 + 一行回滚,cma-runtime-unit-switch 可抽取块); 保留 [1b] 鉴权面审计闸门(B 类缺口即中止)与 构建->铺站->重启->冒烟 全流程; 新增 drill 模式(离线演练:www 必须在 /var/www 之外、systemctl/nginx 必须是 PATH 桩、迁移只 --check)。 - deploy/cma-deploy-dirty-guard.sh:宿主前置闸门降级为告警(仅仓库不可用时失败关闭),不再写开发区。 - deploy/gitea-cma-deploy-hook.sh:[0] 段文案/语义同步(gate-trail 留痕链原样保留)。 - deploy/install-host-deploy-hook.sh:宿主组件安装/升级(备份 + md5 校验 + --check)。 演练证据(26/26 PASS):脏区旧版 [0] exit=1 / 新版整链 exit=0;开发区在途改动逐字节保留; 构造 B 类缺口时 [1b] 中止且未铺站;真机 drill 零生产影响。 未 push(发布须任总放行)。