@kaisers-io/refs 0.8.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +84 -1
- package/dist/refs.mjs +61 -89
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,87 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.10.0] - 2026-08-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `refs resolve` now verifies that the package it routes to is actually where the config says
|
|
15
|
+
it is. A configured `path` is only a locator; the package name is its identity, and upstream
|
|
16
|
+
repos restructure on their own schedule. Previously a package that had moved — or a different
|
|
17
|
+
package that had taken over its directory — was handed back regardless, so an agent read the
|
|
18
|
+
wrong source and answered confidently. That failure produced no error and no warning.
|
|
19
|
+
|
|
20
|
+
`package.status` now reports what was established: `verified`, `relocated` (found at exactly
|
|
21
|
+
one new path, which is returned in place of the stale one), `unmaterialized` (no checkout yet),
|
|
22
|
+
`unverifiable` (verification could not complete — `reason` says why), `ambiguous` (the name
|
|
23
|
+
exists at several paths, listed in `candidates`), or `missing`. All six exit `0`; see
|
|
24
|
+
`docs/commands.md` for the full contract.
|
|
25
|
+
|
|
26
|
+
`relocated` corrects the answer for that call only and never writes to `config.toml`. Persist
|
|
27
|
+
it with `refs edit <ref> --package <name> path <new-path>`.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **`resolve`'s `package.local_path` can now be `null`.** It is `null` for `missing` and
|
|
32
|
+
`ambiguous`, where no safe location is known. A caller that treated a zero exit as "here is a
|
|
33
|
+
usable path" must check `package.status` first; previously the field was always a string.
|
|
34
|
+
|
|
35
|
+
- Workspace detection now reports why it found nothing. An unreadable or malformed workspace
|
|
36
|
+
declaration, an unreadable manifest, a candidate resolving outside the repo, an unsupported
|
|
37
|
+
pattern, a package directory reachable only through a symlink — each used to collapse into the
|
|
38
|
+
same empty result, leaving a transient read error indistinguishable from "every package was
|
|
39
|
+
removed". Each is now reported, and a scan carrying any of them is treated as possibly
|
|
40
|
+
incomplete: it can neither conclude that a package is gone nor that a single sighting of one is
|
|
41
|
+
unique. `refs add` is unaffected — it consumes the same best-effort list it always has.
|
|
42
|
+
|
|
43
|
+
A manifest that reads fine but declares no usable `name` is reported too, but does **not** make
|
|
44
|
+
a scan incomplete: there is demonstrably no resolvable package at that path. Nameless manifests
|
|
45
|
+
are common enough (zod's own repository root has none) that treating them as failures would
|
|
46
|
+
permanently suppress detection for those repos.
|
|
47
|
+
|
|
48
|
+
One limit is deliberate and worth knowing: a scan only covers what the repo's workspace
|
|
49
|
+
declaration points at. A package registered by `refs add`'s npm fallback — at `path: "."`, or
|
|
50
|
+
the packument's `directory` — lives outside that coverage, so if it moves, `resolve` reports
|
|
51
|
+
`unverifiable` rather than guessing. It never reports `missing` from a scan that had nowhere
|
|
52
|
+
to look.
|
|
53
|
+
|
|
54
|
+
## [0.9.0] - 2026-08-13
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- refs tells you when a newer version is published. `refs sync` and `refs doctor` ask npm at most
|
|
59
|
+
once a day and cache the answer; `refs sync` mentions a newer release in its `warnings`, and
|
|
60
|
+
`refs doctor` reports it as a `cli-update` check. `refs --version` is untouched — it stays exactly
|
|
61
|
+
one version line on stdout, because the skill's capability gate and any script parse it.
|
|
62
|
+
|
|
63
|
+
Both switches live in `[updates]` in `config.toml` and default to on: `check` governs the registry
|
|
64
|
+
request everywhere, `notify` the routine path only. `notify = false` with `check = true` is
|
|
65
|
+
"don't interrupt me, but answer when I ask" — `refs sync` neither asks nor mentions, `refs doctor`
|
|
66
|
+
still does both. `REFS_UPDATE_CHECK` overrides `check` (`0` off, `1` on), and the check is off in
|
|
67
|
+
CI. The table is absent from a config that wants the defaults, and refs never writes one.
|
|
68
|
+
|
|
69
|
+
Nothing about it is load-bearing: an unreachable registry, a malformed answer or an unwritable
|
|
70
|
+
cache all mean "we don't know" and are never reported as a fault. The registry host is hardcoded
|
|
71
|
+
rather than read from npm configuration, only a plain `x.y.z` is accepted from the response, and
|
|
72
|
+
the update command is printed for you to run — refs does not install itself.
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- A ref can be recorded without a `tag_format`. Finalizing an add used to reject a proposal whose
|
|
77
|
+
`tag_format_candidate` was `null`, which left one option for a repository that publishes no tags:
|
|
78
|
+
invent a convention. A real user hit this and was asked to confirm `v{version}` for two
|
|
79
|
+
repositories that have no tags at all — a claim nobody had verified, written into `config.toml`
|
|
80
|
+
where later agents read it as fact. The candidate now survives finalize as an absent field.
|
|
81
|
+
|
|
82
|
+
`refs tag` is the only command that reads it, and it exits `3` (validation) when there is none,
|
|
83
|
+
naming the ref — or the package, with the `--package` form of the fix. The distinction from `4`
|
|
84
|
+
carries information: `3` means this ref cannot resolve any version, `4` means this particular
|
|
85
|
+
version was never tagged. The skill's add flow gained an explicit branch for the `null` case, so
|
|
86
|
+
an agent reports the absence instead of proposing something to fill the gap.
|
|
87
|
+
|
|
88
|
+
A format already recorded can only be removed by editing `config.toml` directly; `refs edit` can
|
|
89
|
+
set one but has no way to unset it.
|
|
90
|
+
|
|
10
91
|
## [0.8.3] - 2026-08-12
|
|
11
92
|
|
|
12
93
|
### Added
|
|
@@ -433,7 +514,9 @@ trusted-publishing pipeline end to end.
|
|
|
433
514
|
installed git hooks.
|
|
434
515
|
- Agent skill (`skills/refs/`) documenting the investigate/add/maintain workflows.
|
|
435
516
|
|
|
436
|
-
[Unreleased]: https://github.com/kaisers-io/refs/compare/v0.
|
|
517
|
+
[Unreleased]: https://github.com/kaisers-io/refs/compare/v0.10.0...HEAD
|
|
518
|
+
[0.10.0]: https://github.com/kaisers-io/refs/compare/v0.9.0...v0.10.0
|
|
519
|
+
[0.9.0]: https://github.com/kaisers-io/refs/compare/v0.8.3...v0.9.0
|
|
437
520
|
[0.8.3]: https://github.com/kaisers-io/refs/compare/v0.8.2...v0.8.3
|
|
438
521
|
[0.8.2]: https://github.com/kaisers-io/refs/compare/v0.8.1...v0.8.2
|
|
439
522
|
[0.8.1]: https://github.com/kaisers-io/refs/compare/v0.8.0...v0.8.1
|