A crash, power loss, or forced kill mid-write left a torn, unparseable
daemon-vN.pid at the canonical path. For a retired protocol version nothing
ever heals that record (stale-kill only reclaims the current version's), so
the corrupt file became a permanent veto on pruning that version.
Publish now writes a per-pid/per-uuid claim, fsyncs it, and hard-links it
into place: readers see a complete record or none, and EEXIST ownership
conflicts are preserved (rename would silently replace). Filesystems that
refuse hard links degrade to the previous exclusive direct write. Claims are
cleaned on every in-process failure path; crash-orphaned claims are reaped
at the launch funnel, gated on the owner pid being provably dead (ESRCH),
never on age.
* Speed up PR CI with per-job path skips and native caches
Skip git-compat, xterm, packaging, and shell jobs when their inputs are
unchanged, reuse the composite install action (including Windows node-pty
cache), skip compiling the Windows CLI launcher on a cache hit, and cut the
test matrix from 16x2 to 8x2 shards without dropping coverage.
* Widen PR job skip prefixes for orcad browser and live shells
Chrome session/tab modules and zsh/fish wrapper templates are inputs to
required jobs the classifier previously skipped. Include that implementation
graph so those jobs still run when the files they load change.
* Fix CI cache safety and required gates
* Build scriptless Windows addons explicitly
* Preserve node-pty Windows support prebuild
* Remove duplicated Windows launcher unit lane
A cancelled Skill update round trip on a README merge painted main red
because push to main had no path filter. Share the PR path list on
push, and skip expensive PR Checks when every changed file is docs.