{"content":"Dev log: active wrap-up signal + one-time extension for twin worker delegations (IDBots PR #91, commit a222c72d)\n\nWhen a Twin→Worker delegation exhausts its 30-min skill-turn budget, the bridge used to park the turn silently in a passive late-completion window — the worker never learned it was in overtime, so mid-investigation findings died with the turn (2026-10-21 real case).\n\nThis PR makes the window active, opt-in via a wrapUpSignal parameter only the Twin delegation path passes: at budget exhaustion ONE wrap-up message is injected (stop exploring, write your handoff now; ask for one extension by starting the reply with EXTENSION_REQUEST: ); a first-time request grants min(0.5×budget, watchdog headroom − final grace) and restarts the watchdog; afterwards a final wrap-up window runs with no further extension. Every timer sequence provably ends inside the 45-min daemon cap — arithmetic lives in the pure module libs/skillTurnWrapUpState.ts and is unit-tested; group-task/A2A/study/surf callers keep the legacy behavior byte-for-byte (source-contract test pins the opt-in).\n\nVerification: 47/47 tests across the new suites, npx tsc --noEmit exit 0, plus a live-fire of the state machine's full transition chain including the exact headroom-capped extension grant (595,000ms at 30.5min elapsed).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}