Skip to content

fable-it v3.0.1 — safe parallel execution

Choose a tag to compare

@DevOtts DevOtts released this 09 Jul 11:10
· 16 commits to main since this release

fable-it v3.0.1 — Safe parallel execution, now proven under contention

This release rolls up v3.0.0 (safe-parallel protocol) and v3.0.1 (interlock hardening) into one deploy.

What's new

Three gates that make parallel and multi-session runs safe by construction (full protocol in parallel-safety.md):

  • G-INTERLOCK — atomic run lock. A .taskstate/RUNLOCK acquired with exclusive-create means two fable-it runs can never co-mutate the same tree. The loser blocks with a clear message and resumes cleanly when the lock frees.
  • G-WORKTREE — per-lane isolation. Every mutating parallel subagent gets its own git worktree on its own branch. Lanes can't stomp each other's files, and a crashed lane never leaves the main tree dirty.
  • G-INTEGRATE — merged-tree integration gate. A slice that's green in isolation but breaks the merged build is reopened, not accepted. Integration checks run on the combined tree before anything is declared done.

Hardening (v3.0.1, CONTRACT v1.1 amendment)

Fixes two protocol races found in the post-release Fable 5 review — gates unchanged:

  • TOCTOU-free RUNLOCK acquire — exclusive-create instead of check-then-write.
  • Timer-based heartbeat — the lock stays fresh even during long tool calls.
  • Dead-owner-only reclaim — a stale lock is reclaimed only when the owning process is provably gone.
  • Crash-leftover lane cleanup — orphaned lane branches/worktrees from a previous session are detected and cleaned with a logged note.

Validation

  • 6 goldens (T30–T35), each judged by a fresh-context verifier with a citation-lint over transcripts.
  • Two A/B rounds vs v2.1.0: identical deliverable quality on a single-lane run, and a 60/46 rubric win on an adversarial parallel run — v2's failure mode (confident false completion with leftover worktrees) is structurally eliminated.
  • The interlock was exercised live: two concurrent fable-it sessions on this repo, with the loser blocking and resuming cleanly.

Docs

Full changelog: CHANGELOG.md