之前你看到的只是"方案摘要",完整文档尚未写入磁盘。本次计划 = 全量问题清单(下面就是全部发现,不再省略)+ 落盘动作。
CleanCache.java:17-49:PERSON_LIB_NOS/PERSON_LIST/PERSON_LIST_A/PERSON_LIB_NO_MAP 是不分案件的静态 HashSet/HashMultimap;清洗线程无锁 add(:43-45、:22-28),flush 线程无锁迭代+clear(PersonLibNoService.java:17-35、CleanCache.getPersonList():30-41);DmService.java:599 全局 clear。后果:A 清洗完成把 B 案件累积的人员冲进 A 库、B 的数据反被清空;CME。DmService.java:636-637:FileUtil.del(PathConst.TMP_PATH) 整树删除+重建,其他用户在途上传/解析临时文件蒸发。GlobalCache.java:64-127;触发点 DmService.java:596、TableInfoService.java:67/89、SystemService.java:185-191;读方遍布清洗/治理/AI 链路。后果:CME、半空缓存、模板匹配错乱。/chat/stream 无会话级互斥 — AgentChatServiceImpl.java:288-307:同一会话双标签页/双击并发双流,交错写同一 Agent 记忆槽与工作区文件(研判链路 InsightServiceImpl.java:136,307-333 有双保险,chat 漏了)。GovernController.java:55-65 直接 execAsync 无状态检查;GovernService.java:110 truncate 共享表、:151-153 全清 GOVERN_CONFIG、:360-367 awaitStage 吞异常后后续阶段照常执行。后果:并发两条流水线互删数据、半治理落库。AiSmartCleanService.java:116 先 put 裸 ArrayList,:450 computeIfAbsent 的 synchronizedList 工厂永不生效,判定阶段多虚拟线程并发 add、:457 并发序列化。后果:丢元素/AIOOBE/CME。CaseDataCache.java:68-77 initCache 用 synchronized(bucket),:84-93 initPersonLibNoCache 无锁 put,:135-146,167-170 读无锁,:178 findPersonVal 用读锁。后果:开案初始化期间并发读 multimap → CME/脏读。AgentChatServiceImpl.java:510,529-535 persistAssistantMessage 未走 setSql 原子自增(同文件 3 处已改);另 sendMessage:217-227、deleteMessage:257-264、togglePin:170-177、toggleStar:273-283 同型。后果:计数漂移、状态回跳。GlobalPool.java:19,35-47:所有用户治理任务(单阶段 30-40 分钟)挤同一池,队列 10 万深导致过载表现为无限排队。SseService.java:133 心跳、CaseDataSourceReaper.java:34、AiCleanWatchdog.java:76、ChatAttachmentService.java:384 同一调度线程;reaper/登出关闭案件数据源时,用户 40 分钟后台任务中途夭折。AgentService.java:96,146-165:四维 key 只增不减(仅删专家时 evict),长期运行内存泄漏;computeIfAbsent 内做 DB 查询。SystemConfManager.java:18,41-51。AttachmentDocIndexer.java:80:闸门只限单附件,多用户同时上传时打向嵌入模型无全局上限(正确范式见 FileRecognitionService.java:99-126)。DmService.java:673-679:新清洗写库与删旧数据并发交错。PythonExecutor.java:235-259 无锁读改写 meta;DuckdbSnapshot.java:100-109 Windows 占用时回退原库路径,子进程打不开被 Java 写锁持有的库。AgentChatServiceImpl.requireSession:494-500、InsightServiceImpl.requireSession:531-540 只查存在性,凭 ID 可读写他人案件会话(与 CaseInfoService.assertOwner:260-265 口径不一致)。GovernService.java:153、SystemService.java:190:key 已含案件 ID 却全表清空。LicenseUtil.java:44。DmService.java:860-907:删 file_info 后并发删业务表+Lucene,任一步失败留孤儿。SseService.java:119-128 vs :54-58。:136,238,328-333。AgentService.java:373-384。:313-325。UsageStore.java:43-48。InsightServiceImpl.java:172-176。AgentChatServiceImpl.java:65,332(架构性隐患)。TowerUtils.java:29,50-73。:143-144。:57。CaseContextHolder(ScopedValue)上下文传播、附件 CAS 绑定与孤儿清理(最近已修)、研判流会话锁+DB 状态位、CaseDataSourceRegistry、DuckdbSnapshot 原子替换、SSE 用户级连接管理、Python 沙箱独立目录、雪花 ID 文件名、全部懒加载 DCL、Json OBJECT_MAPPER、CleanFactory 每请求新建 cleaner。
docs/design/concurrency-issues-and-fixes.md:上述全部 29 项逐条展开【位置|现状代码|多用户触发场景|后果|修复方案含代码要点(复用项目既有范式)】+ 附录安全清单 + 修复路线图(P0 全部 → P1 按 8/10/14 优先)+ 并发回归验证建议。