哪一格红了:「归属判定 · 只认一个 short」 ——
这是本棒修的**根因**。它不是崩溃,是**什么也不说**:那两个类别的会话从此不出现在看板上、
也不算"在跑" ⇒ 收尾确认会**误判可以派下一棒**。
哪几道防线缺席:
① 缺「**类别是一组**」的概念(旧代码把归属键写死成单值);
② 缺「**按类别选主会话**」的选路(旧代码只有"唯一主会话");
③ 缺「**命名规范覆盖自动唤醒任务**」的检查(唤醒轮名缺第 2 级没人拦)。
修好之后补上的三道闸:
① 归属判据吃**类别集合**(传 str 时与旧版逐字一致);
② 投递经 main_for_topic():**已登记类别严格取该类**、未登记才回落默认;
③ 自测加了 **9 条结构断言 + 8 例多类别比对**(含"两处 by_topic 结构必须同款")。
为什么现在才对:本工作区**本来就有 ≥2 条"主控"会话**,
类别名**早就写在标题里**(主控 · 唤醒机制线 · … / [主控]-[机制线]-接续…)。
也就是说"用前缀分任务类别"是**已经在用的习惯**,只是**程序侧没认**。本棒把它接上,
并把"类别清单"做成 goal.json.topics 一个可由主会话随时改的字段。