v1.7.0 — Release Correctness + Operator Control
Release correctness and operator control: close the two defects that made
DevFlow's own release cut unreliable, then add the operator controls the
pipeline never had. Phase 20.
Fixed
VersionBumpnow rewrites every workspace-member[workspace.dependencies]self-pin, not just[workspace.package] version— previously left the self-pin on the prior release, causingcargo publishto reject the upload as a duplicate (shipped broken two releases running)devflow cleanup --forceis now fail-closed on worktree removal: it refuses whenever the recorded agent process is alive or the monitor is active — includingUnknown(no recorded monitor) andStuck(dead monitor) liveness states — with bounded-backoff retry for genuinely-dead phases and a descriptive warning if retries exhaust. Closes a real race behind two CI flakes inphase7_cli.rscleanupno longer deletes the worktree of a phase intentionally parked viadevflow start --until <stage>— it now recognizes the stop marker the same waydoctordoes, and requires--forceto discard a parked phase
Added
devflow start --until <stage>halts the pipeline cleanly at a named stage instead of stranding state or orphaning a worktree —--until shipis rejected as a semantic no-op.doctorandresumeare both aware of the stop markerdevflow release --check: a read-only, network-independent release-cut preflight — workspace self-pin invariant,develop/maindivergence (nogit fetch), crates.io publish order, andgpg.format-aware signing viability (reports only a public-key fingerprint, never key material or a filesystem path)devflow ship --phase N [--force]: drives a phase through Ship when the monitor that would have consumed its already-written gate response is dead — reuses the existing fail-closedfinish_workflowpath verbatim, guarded by a per-phase lock and ack-file check so it cannot race a live monitor or double-run the terminal hook batch
Changed
find_version_in_contents's TOML value parser now anchors on the opening quote and scans forward for the matching close, so a trailing inline comment (e.g.version = "1.7.0" # pinned) no longer corrupts the parsed value — brings the read path back in line with the comment-preserving write pathmember_depends_onnow recognizes long-form[dependencies.NAME]TOML sections in addition to inline tables, sorelease --check's publish-order topo-sort no longer silently misses that dependency edge