v0.8.1
Fixed
-
Locked commands could hang instead of timing out. If a lock looked abandoned but could not
actually be reclaimed — another process holding the steal claim, or Windows refusing to remove
the directory while a handle was still open inside it — the acquire loop retried without ever
consulting its deadline, so the ten-second acquisition budget never applied and the command spun
until interrupted. Both unbounded paths now honour the deadline and fail with the conflict error
(exit code 5) as documented. -
refs doctorreported a correctly installed skill as missing on native Windows. Its three
global search locations were derived from$HOME, which Windows typically leaves unset, while
the installer resolvesos.homedir()— so all three silently dropped out of the search and the
check reportedwarn, "not found in the locations this check knows about". It now reads the
same home directory the installer writes to. macOS and Linux were unaffected, the two agreeing
there.
Security
-
Canonicalizing a git url no longer takes quadratic time. Trailing slashes were trimmed with a
pattern anchored at the end of the string, which backtracks through a run of slashes from every
position; a url carrying a long run in the middle of its path took 14 seconds to be rejected.
Such a url is reachable —refs add npm:<package>readsrepository.urlstraight out of the
registry's packument, and nothing bounds its length — so a published package could stall the
command that adds it. Trimming is now linear. -
Every git invocation that receives a url now ends option parsing with
--first. Without it,
git honours a url shaped like--upload-pack=<command>and executes it. Urls accepted through
refs addwere already refused by canonicalization, butrefs syncre-reads them from the
config file, where they are only checked for being non-empty — the guarantee therefore held one
step away from the call that depended on it. It now holds at the call.
Changed
-
Published packages carry a provenance attestation.
npm produces these automatically for public repositories, and0.8.0shipped without one
because the repository was private at the time and the check for that fails silently. The
release workflow now states--provenanceand refuses to publish if the repository is not
public. -
refs init's skill-install hint now presents the second form as installing from a local
clone, rather than as a workaround for the repository's development phase. Both commands
are unchanged; only the wording differs.