这个包里有什么
================

1. 给mimikko作者的反馈.md        主文档，可直接贴给作者（含逐帧调用链、注册方式、触发链、bci）
2. diag-cme.log.gz               完整现场日志（解压后 122 MB / 1,448,628 行），由字节码探针产出
3. cme-关键日志-崩溃前后.txt      只要看关键的：崩溃前 30 秒起的完整日志（约 9.5 MB）
4. cme-fix-修复说明.md            我们引擎侧补丁的说明（我们这边的处理方式，供参考）

怎么读这份日志
==============

日志每行格式：[时间戳] #序号 类型 内容
类型含义：
  CME-NEW  ConcurrentModificationException 被构造的瞬间（含线程与栈）
  ITR-BAD  ArrayList 迭代器即将抛 CME：被遍历的是哪张表（list=0x… 身份）+ expected/modCount + 读点栈
  REPO     ObjectRepository 的 add/remove（附调用者栈，最多 12 帧）
  ITER     CombatEngine.advanceInner 里每个 iterator() 调用点（id=…#iterN + 被遍历表的身份）
  ENTER/EXIT  CombatEngine 关键方法进出

想快速定位，直接搜这几行：
  grep "ITR-BAD"     → 1 条，就是抛点（含表身份）
  grep "CME-NEW"     → 1 条，CME 构造瞬间
  grep "REPO"        → 88889 条，崩溃前 0.013 秒有 9 条密集 add
  grep "0xa9e1cc"    → 该表的所有出现（含它被两次遍历的 ITER 记录）

关键时间点（崩溃发生在 13:14:01.319）
====================================
  13:14:01.297   本帧开始遍历那张表（ITER #iter3 / #iter4，list=0xa9e1cc）
  13:14:01.305-318  9 次 ObjectRepository.add 爆发（来自 mimikko 的 addFleet2 连刷增援）
  13:14:01.319   ITR-BAD：expected=1255 modCount=1260 ⇒ CME 抛出

要核对的几件事
==============
  1) 被改的表 identityHashCode 是 0xa9e1cc，它在 ITER 行里对应 advanceInner 的 #iter3 与 #iter4；
  2) 那 9 条 REPO add 的调用栈里，有 3 条含 Mimikko_mqh_missionhullmod$…background_render.addFleet2；
  3) 其中一条完整栈显示：spawnShipOrWing → … → FleetMember.instantiateForCombat
     → BDeck.applyEffectsAfterShipCreation → Ship.addListener → ObjectRepository.add；
  4) 该插件是经 addLayeredRenderingPlugin 注册的（渲染遍历驱动），因此 advance 与遍历同帧交叠。

环境
====
  Starsector 0.98a-RC8（中文汉化版） / Java 27（Zulu 27+35） / 128 个 mod 同时启用
  探针以 -javaagent 方式挂载，只记录、不改变游戏任何行为。