Context
Documented limitation (see comments at the broker/recover ownership check in app-server-broker.mjs and handleCancel in codex-companion.mjs): for a DETACHED review, the job stores reviewThreadId while the broker may have keyed activeThreadIds on the source thread during the review/start round-trip window — so an ownership-scoped broker/recover can no-op (owned:false). The native inline /codex-plus:review path is unaffected.
Proposal
Persist/forward sourceThreadId end-to-end (job schema + progress normalization + cancel) OR seed the broker's activeThreadIds with the union of source + review thread ids from the start of the round-trip.
Context
Documented limitation (see comments at the
broker/recoverownership check inapp-server-broker.mjsandhandleCancelincodex-companion.mjs): for a DETACHED review, the job storesreviewThreadIdwhile the broker may have keyedactiveThreadIdson the source thread during thereview/startround-trip window — so an ownership-scopedbroker/recovercan no-op (owned:false). The native inline/codex-plus:reviewpath is unaffected.Proposal
Persist/forward
sourceThreadIdend-to-end (job schema + progress normalization + cancel) OR seed the broker'sactiveThreadIdswith the union of source + review thread ids from the start of the round-trip.