5fa662be30
retry 强判据必须排在全部分支之前。plan 分支原先排在 delegated 与 autonomous-game-build 之后,两支都能绕开 reject_supervisor_plan_root_retry_without_identity: 一是 plan source 配伪造 parent 会落 delegated 支,直接返回 agent-delegate-retry,强判据根本不执行。二是 binding.source 是 plan 配 autonomous profile 会落 autonomous 支,因 plan 在可信集合内而被原样取回, 复活启动路径 reject_supervisor_plan_autonomous_profile 明令禁止的组合。 两者都要 durable 状态先畸变才可达,但强判据存在的意义正是对畸变状态 fail closed。守卫提到函数开头无条件执行,合法 plan 根 run 对它恒真; plan 分支不再重复读 durable 状态。autonomous 支另加一次 reject_supervisor_plan_autonomous_profile,兜住顶部守卫按 task.source 判定所挡不住的那一种。回归已用变异测试确认去掉任一守卫即变红。 __all_agents__ 身份哨兵改为编译期约束。四个不带 agentId 的 wrapper 会以 哨兵跳过按身份的工具面收窄与原始工具 identity 复核,M1A-2 之后调用点只剩 测试,但将来新增生产调用点漏改是静默拿全量目录而非编译失败。四个 wrapper 与对应 re-export 一并加 cfg(test)。该哨兵已扩散到两个文件,是正在复制的 模式而非单点遗留。 订正 M1A-3 决策条里「agent-background-task 唯一构造点」的错误结论: task_start 与 recovery_scan 各还有一处同形状的空 source 兜底,且 recovery_scan 那条不经过 plan 根强判据。经复核有意不改,理由随条记录。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>