Skip to content

v0.81.3

@tim-inkeep tim-inkeep tagged this 03 Oct 02:58
* fix(ok): copy skills when Windows refuses symlinks instead of failing (PRD-8928)

On a Windows account without symlink rights, every skill add defaulted
to a link, symlinkSync threw EPERM, and the route returned a bare 500
before the MCP tool could send its follow-up convert-to-copy. A copy
was never reachable.

linkOrCopySkillDir now falls back to a copy on EPERM/EACCES and
rethrows anything else. Projection, place, and custom-root adds use it
and record the form actually created. Convert-to-link used to delete
the copy before the symlink failed; it now restores the copy and
returns links-not-permitted, which the route maps to a 403 that says why.

* fix(ok): report every symlink-to-copy fallback and give it its own error type (PRD-8928)

An add that asks for links (the app's link toggle sends linkMode: true)
still made a copy silently and returned 200. projectInPlaceSkill now
reports linkFallbacks, and fanOutInPlace collects those plus the
custom-root and re-link fallbacks into one links-not-permitted warning.
Convert-to-link answers with a dedicated urn:ok:error:links-not-permitted
type instead of storage-error. Tests pin the warning and the copy+hash
ledger entries for place and custom-root adds. Docs and the install
tool description say where links become copies.

* fix(ok): record the on-disk form for custom roots and warn from place (PRD-8928)

A link request over an existing custom-root copy fell back correctly in
the re-link branch, then the root-add loop recorded the requested link
with no hash, so that copy stopped refreshing. The loop now records what
lstat sees. place reports links-not-permitted too, the warning names
locations the way the caller passed them, the new URN is registered as
HTTP-only, the warning code has a gloss entry with a test tying every
code to one, and two more docs pages note where links become copies.

* refactor(ok): one ledger writer for custom-root adds; normalized place warning (PRD-8928)

The re-link block no longer writes custom-root ledger entries, since the
rootAdds loop always overwrites them with the on-disk form; it keeps the
conversion and the fallback report and takes the root straight from
rootAdds. place's links-not-permitted warning names the normalized
folder from placedAt instead of the raw request value.

* test(ok): cover custom-root re-form with working symlinks (PRD-8928)

---------

GitOrigin-RevId: 5c490acec6f38f73bb569d92973da0a860a10917
Assets 2
Loading