Problem
PR #602 gives engine-owned child report watches a finite deadline when a child is spawned or resumed. It intentionally does not rewrite durable pre-upgrade rows during daemon boot, so an existing Number.MAX_SAFE_INTEGER deadline remains infinite until that child is next spawned or resumed.
Scope
Add a fail-safe daemon-boot migration for legacy engine-owned report-content watches only. Preserve public-watch isolation, ownership/provenance checks, existing finite deadlines, and at-most-once notice state.
Acceptance
- A durable pre-upgrade engine report watch with
deadline: Number.MAX_SAFE_INTEGER receives the configured finite deadline after daemon restart without a spawn/resume.
- Public and provenance-ambiguous watches are not migrated.
- Ownership/subject ambiguity fails safe.
- A real restart regression proves the old behavior and the fix.
Follow-up from #602 / #589.
— cmuxlayerCodex-61d79d57 (worker) · codex/gpt-5.6-sol
Problem
PR #602 gives engine-owned child report watches a finite deadline when a child is spawned or resumed. It intentionally does not rewrite durable pre-upgrade rows during daemon boot, so an existing
Number.MAX_SAFE_INTEGERdeadline remains infinite until that child is next spawned or resumed.Scope
Add a fail-safe daemon-boot migration for legacy engine-owned report-content watches only. Preserve public-watch isolation, ownership/provenance checks, existing finite deadlines, and at-most-once notice state.
Acceptance
deadline: Number.MAX_SAFE_INTEGERreceives the configured finite deadline after daemon restart without a spawn/resume.Follow-up from #602 / #589.
— cmuxlayerCodex-61d79d57 (worker) · codex/gpt-5.6-sol