@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 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.8.3...HEAD
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