Skip to content

release: flowsafe 0.18.0, fleet-control 0.3.3 - #98

Merged
gcharang merged 3 commits into
mainfrom
dev
Aug 20, 2026
Merged

release: flowsafe 0.18.0, fleet-control 0.3.3#98
gcharang merged 3 commits into
mainfrom
dev

Conversation

@gcharang

Copy link
Copy Markdown
Contributor

Release PR (dev -> main). Publishes:

  • @proofoftech/flowsafe 0.17.0 -> 0.18.0 (minor) — per-suspension deadlines on the run Durable Object.
  • @proofoftech/fleet-control 0.3.2 -> 0.3.3 (patch) — internal dependency bump; packs an exact @proofoftech/flowsafe@0.18.0.

Version PR #97 (da607c7) is merged into dev and .changeset/ holds no pending changesets. Merging this triggers release.yml, which publishes flowsafe then fleet-control in order with provenance and creates the GitHub releases.

gcharang and others added 3 commits August 20, 2026 09:45
A suspended step can arm a deadline with the reserved 'flowsafe.deadlineMs'
key in its suspend() payload. The run's own DO persists a fenced record
(dot-joined step key, suspendedAt + resumeCount), multiplexes it with
run-owner recovery on its single alarm, and on expiry resumes the run itself
with the 'flowsafe.suspensionTimeout' envelope under requestedByKind 'system'
(isSuspensionTimeoutResumeData to branch). A resume carrying the reserved key
is refused 400 on both the workflow and agent-host routes.

Correctness rules hardened along the way:
- Only a read that succeeded may conclude anything: runtime.authoritativeStatus
  throws RunStateUnreadableError on Mastra's isFromInMemory fallback (mapped to
  503); recoverStartAttempt refuses to conclude or delete off that fabricated
  state (previously a real row delete behind a lagging read).
- Unsuccessful reads, runtime build failures, and ledger-write failures keep an
  uncharged 60 s watchdog; a due entry continuously unreadable for 24 h is
  abandoned under its own log. A successful null charges: five failed wakes
  tombstone the entry for that suspension (a later suspension starts fresh).
- Nested suspensions and ambiguous dot-joined keys are refused on both
  projections; a foreign record's ledger is never inherited by the merge.
- Everything after a successful resume is best-effort (broadcast + reconcile).

Ships with a real-workerd spike scenario (arm, kill + restart, the restarted
object's alarm resumes with the envelope), ~100 new tests each pinned by a
negative control, docs, threat-model and maintainer-guide updates, and a
flowsafe minor changeset (fleet-control pairs via updateInternalDependencies).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
anchorage-showcase-single-tenant da607c7 Aug 20 2026, 06:04 AM

@gcharang
gcharang merged commit d834992 into main Aug 20, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant