Issue19228 follow-up to CodeRabbit ancestor refresh finding (2026-10-22). Tested code587227c1360e86faf60e604544d57d0336b8b3ab; new publication top31b509cecc1b55a57b71df4237353589d9cc8ce0 has identical tree. Dependency4cc74410d2b2433b50a1e02c1b725c901941557c. Before top2d6ca9322e / bottom1439b2b34e omit ancestor refresh after both wake-replay descendant loops. Fix adds syncRosterAncestors(state) after both loops. No new option/schema/capability. Regression clears the caller's pending work when a called session's held wake runs: sessionOTHER holds wake while top-level, SESSION later calls it as subagent, OTHER continuation replay clears its own pending work. Gated OTHER model.selected milestone proves parent snapshot is processed after replay without recomputing parent state through a parent event. RED: final test with the2 added calls removed, expected parent pending false sees true. green-fixed.log is same test with both calls restored. Scoped250/250 across17files includes service47,adapter80,provider-opencode package tests. Parent replay22/22 pass (272 total across18files). Both package/server tsc --noEmit pass; targeted lint clean. Two fresh reviews GPT6.1Sol and ClaudeOpus5.5 MERGE. Direct takeRunningWake counterpart test not retained: attempted transcript timed out; same refresh invariant fixed at both call sites. No UI code; empty visual matrix. Runtime transcript is real-app compatibility; causal proof is deterministic red test. Prior main red ownership variants and subscription drain sentinel remain unchanged. Live ownership loss/restart and exact reused-root-held-wake edge not exercised with external provider; adapter regression covers edge. Do not infer fiber release from real UI idle: service tests assert release and after-drain exclusion.