Skip to content

v7.1.1 — Worker self-poll at pause points (--bg --autopilot AFK wake-gap fix)

Choose a tag to compare

@r-teller r-teller released this 27 May 19:17
· 8 commits to main since this release
f5fc8ab

7.1.1 (2026-05-27)

Worker self-poll at pause points — closes the --bg --autopilot AFK wake-gap (fdev-0wv). In --bg mode (v7.0.0+ default), steering's autopilot crons (--auto-ack, --auto-amend) faithfully write decisions to the dispatch file, but the worker session — idle in claude agents at intent-confirm — never observes those writes without an external poke (peek/reply, attach, falcon poll). The auto-ack-resume guard (PROTOCOL.md Worker Lifecycle Step 3) only fires when the worker takes a turn; it has no mechanism to schedule that turn itself. The documented "full AFK bundle" promise of --autopilot therefore degraded in --bg to "AFK except for the intent-ack wake injection" — exactly the pause point that most benefits from autonomous progression.

Fix. A worker-side convention (NOT a new flag, NOT a schema change). At intent-emission and DAR-response pause points, the worker arms a self-poll CronCreate scoped to the wait condition (intent_acknowledged_utc non-null; or DAR entry's response field non-null), CAPTURING the returned cron ID in session memory. The cron's prompt is delivered to the worker session as a user-message-style notification when it fires; the worker (which holds the captured ID) interprets the prompt, checks state, and on wait-condition-satisfied calls CronDelete(captured_id) and resumes past the pause. durable: false ensures the cron dies with the worker session.

Changes:

  • PROTOCOL.md § --bg dispatch mode (v7.0.0): new subsection ### Worker self-poll at pause points (v7.1.1) describing the convention, the two armable points, the scope guardrail, and coordination/cost rationale
  • PROTOCOL.md § Worker Lifecycle Step 3: explicit reference to the intent self-poll in the intent-confirm-pause body
  • PROTOCOL.md § DAR protocol: explicit reference to the DAR self-poll for the pause-for-response case
  • REFERENCE.md § init_prompt Content Template (default thin/pointer-style): new thin-pointer subsection ### Worker self-poll at pause points (--bg mode only, v7.1.1) with the mode-skip note + a pointer to the new sibling section
  • REFERENCE.md § new sibling section ## Worker Self-Poll Cron Templates (--bg mode only, v7.1.1): the two literal CronCreate blocks (intent at */2 * * * *, DAR at */3 * * * *), the role-split contract (cron prompt = wake nudge; worker = CronDelete(captured_id) on wake), and the predicate-simplicity rationale (no commit-attribution check at intent pause; contrast with the auto-ack-resume guard which uses a richer predicate because it runs on session resume)
  • SKILL.md frontmatter: version: 7.1.0 → version: 7.1.1

Out of scope (explicit non-goals). --worker-cron flag behavior in --bg stays a SILENT NO-OP as documented in v7.0.0 (the self-poll is a worker-side convention, not a steering flag). No new dispatch-file schema fields. No new IPC primitive — leverages existing atomic-write semantics on the dispatch file (v6.11.0). --via-paste / --paste modes do NOT arm the self-poll (operator paste / worker-cron handles those modes' wake mechanics).

Real-world provenance. Observed during a 7-wave sequential epic dispatch on feature/work-20260526-phase2 (sticker-shop project). Steering cron auto-acked every intent paragraph across 4 dispatches with 8-gate validation; each dispatch still stalled ~5-10 min waiting for human ack relay despite the gate evaluation being instant and trustworthy. Filed as fdev-0wv in falcon-dev (discovered-from fdev-lbq).

SKILL.md version bumped: 7.1.0 → 7.1.1 (PATCH — fixes the v7.0.0 --bg wake-gap; restores documented --autopilot AFK promise; no new flags, no schema change, no behavior change for existing --via-paste / --paste dispatches).