Skip to content

v0.8.1

Choose a tag to compare

@boriskaiser boriskaiser released this 10 Aug 17:32
· 109 commits to main since this release
219f11a

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 doctor reported 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 resolves os.homedir() — so all three silently dropped out of the search and the
    check reported warn, "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> reads repository.url straight 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 add were already refused by canonicalization, but refs sync re-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, and 0.8.0 shipped without one
    because the repository was private at the time and the check for that fails silently. The
    release workflow now states --provenance and 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.