@geohar/pi-cribsheet 0.22.0-dev1 → 0.22.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.
Files changed (2) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/package.json +5 -3
package/CHANGELOG.md ADDED
@@ -0,0 +1,175 @@
1
+ # Changelog
2
+
3
+ All notable changes to cribsheet are recorded here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
5
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Dev releases
6
+ (`X.Y.Z-devN`) are cut from the `dev` branch.
7
+
8
+ This file ships in the Pi package, where Pi shows the entries newer than the
9
+ version you last ran. `scripts/bump-version.sh` refuses a release whose
10
+ version has no heading here.
11
+
12
+ ## [0.22.0] - 2026-11-09
13
+
14
+ ### Fixed
15
+
16
+ - **Shared store recovery.** One failed reconnect no longer leaves the
17
+ shared (Quack) client unusable until the daemon restarts; threads that
18
+ lose the same session relaunch the server once between them; and with
19
+ `[duckdb] launch = false` a reconnect waits for the supervised server.
20
+ - **`tags=` lookups return k results.** The tag filter now runs inside the
21
+ store query instead of after the top results were picked.
22
+ - **The embedding cache can't be poisoned** by the hash-embedder fallback:
23
+ it keys on the embedder actually built and never caches hash vectors.
24
+ - A zero vector scores 0 instead of NaN, which sorted above every match.
25
+ - Hybrid retrieval scores keyword-only candidates on their stored vectors
26
+ (heading breadcrumb plus body, as the dense search ranks them) instead of
27
+ re-embedding the bare body.
28
+
29
+ ### Changed
30
+
31
+ - `code_lookup` and summary-alias scoring use numpy (about 140 ms to 0.1 ms
32
+ per code query at 16k symbols). numpy is now a direct dependency.
33
+ - Shared mode sends each vector as one literal: writes about 20x faster.
34
+ - A note write is one transaction; metadata refreshes are one statement
35
+ per batch.
36
+ - A `crib_meta` table records the schema version, record-cache format and
37
+ embedder; a change drops or rebuilds what depended on it, and switching
38
+ embedders at the same vector size now recreates the store.
39
+ - The generation ledger forgets files that no longer need a description;
40
+ the embedding cache drops other embedders' vectors.
41
+ - `crib status` shows `store_stats` (rows, versions, sizes, reconnects) and
42
+ embedding-cache hits; the store checkpoints after a startup reconcile.
43
+
44
+ ### Added
45
+
46
+ - `crib store install-extensions`: fetch the shared-mode DuckDB extensions
47
+ ahead of time, for containers and offline machines.
48
+
49
+ ### Removed
50
+
51
+ - The `json` store backend (`[store] backend = "json"` now warns and uses
52
+ DuckDB; the old `~/.cache/crib/store.json` can be deleted), and leftover
53
+ chroma-era code paths.
54
+
55
+ ### Upgrading from a 0.22.0 dev release
56
+
57
+ - Chunks whose tags were stored as a comma-joined string are converted to the
58
+ new list form when the store opens, so `tags=` lookups work at once.
59
+ - Embedding-cache rows keyed by the old configured model name are dropped
60
+ once; the vectors in the store itself are untouched.
61
+
62
+ ## [0.22.0-dev2] - 2026-11-09
63
+
64
+ ### Added
65
+
66
+ - `docs/vector-store.md`: the DuckDB setup (embedded vs shared mode, every
67
+ `[duckdb]` key, file layout, the per-machine caches, recovery).
68
+ - `docs/migrating-to-duckdb.md`: upgrading a 0.21.x machine from chroma.
69
+ - This changelog. The Pi package ships it and points `pi.changelogPath` at it,
70
+ so Pi lists what changed after an update.
71
+
72
+ ### Changed
73
+
74
+ - `scripts/bump-version.sh` refuses a version with no `CHANGELOG.md` heading,
75
+ and copies the changelog into `plugins/pi/` with each release.
76
+ - Dev-release tags are published as GitHub prereleases, so they never take
77
+ "Latest" from the last stable release.
78
+ - Docs no longer describe chroma as the current store.
79
+
80
+ ## [0.22.0-dev1] - 2026-11-09
81
+
82
+ ### Removed
83
+
84
+ - **chroma.** DuckDB is the only vector store. Gone with it: `ChromaStore`,
85
+ the shared chroma server, the `[chroma]` config table (now ignored with a
86
+ one-time warning), the chroma CVE guard, and the `chromadb` dependency.
87
+ Upgrading: [docs/migrating-to-duckdb.md](https://github.com/georgeharker/cribsheet/blob/main/docs/migrating-to-duckdb.md).
88
+
89
+ ### Added
90
+
91
+ - **DuckDB store**, selected by `[store] backend = "duckdb"` (the default),
92
+ with exact cosine search. `[duckdb] mode = "embedded"` opens the file in
93
+ process. `mode = "shared"` runs a loopback-only, token-protected DuckDB
94
+ server (`crib-duckdb`, port 7734) through sharedserver.
95
+ `[duckdb] launch = false` attaches to a server something else supervises.
96
+ - **Embedding cache.** Embedded vectors persist, so a warm start embeds only
97
+ new or changed text.
98
+ - **Record cache.** Symbol-index reads skip unchanged TOML files; on un-bien,
99
+ cold start went from 3.0 s to 87 ms.
100
+ - **Generation ledger.** Background generation backs off from inputs that
101
+ already failed: 1 h, 4 h, 16 h, about 2.7 days, then every 7 days.
102
+ `[generate] backlog_budget` (default 50) caps describes per daemon start.
103
+
104
+ ### Changed
105
+
106
+ - `[generate] timeout` is passed to the llmkit provider, so a hung endpoint
107
+ is abandoned.
108
+ - A structured generation call that returns no data counts as a failure.
109
+ - crib never forks: subprocesses go through `posix_spawn` (`crib.proc`).
110
+ Forking a process that has loaded macOS's Network.framework can crash the
111
+ child.
112
+ - crib's DuckDB connections keep extensions and secrets under crib's own
113
+ directory, never `~/.duckdb`.
114
+ - Requires `polyllmkit>=0.2.2`.
115
+
116
+ ### Fixed
117
+
118
+ - Malformed `lsp.json` or `grammar.json` files print a warning instead of
119
+ being silently ignored.
120
+
121
+ ## [0.21.6] - 2026-11-08
122
+
123
+ ### Changed
124
+
125
+ - Shared chroma mode is refused only for an off-box bind; loopback is allowed.
126
+
127
+ ## [0.21.5] - 2026-11-08
128
+
129
+ ### Added
130
+
131
+ - Per-set read-only tool exposure, for example `--tools notes:ro`: the
132
+ mutating verbs are never registered.
133
+
134
+ ### Security
135
+
136
+ - Shared chroma mode is refused until `[chroma].allow_unpatched_remote` is
137
+ set, guarding the unpatched server CVE-2026-45829.
138
+
139
+ ## [0.21.4] - 2026-11-04
140
+
141
+ ### Fixed
142
+
143
+ - A finished `project_index` sweep keeps its final counts in `project_status`.
144
+
145
+ ## [0.21.3] - 2026-11-04
146
+
147
+ ### Added
148
+
149
+ - Tool-set exposure: `crib serve --tools` and `[tools] expose` choose the
150
+ MCP surface per deployment.
151
+ - `project_status` carries a `jobs` section.
152
+
153
+ ### Changed
154
+
155
+ - `project_index` returns at once and its sweep runs in the daemon; poll
156
+ `project_status` instead of blocking.
157
+ - `project_relocate` runs its heavy half in the daemon, so a client
158
+ disconnect can't cancel it. It also completes a move-and-rename: mount
159
+ rename plus citation rewrite.
160
+
161
+ ## [0.21.1] - 2026-11-03
162
+
163
+ ### Added
164
+
165
+ - `project_relocate`: re-home a project at its moved repo, keeping its
166
+ identity.
167
+
168
+ ## [0.21.0] - 2026-11-03
169
+
170
+ ### Changed
171
+
172
+ - The directive names `project=` on every read.
173
+ - One funnel anchors every session (the era gate); sync reads ask when a
174
+ session has no anchor.
175
+ - 2026-era clients are served directly; a stateless refusal says what to do.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geohar/pi-cribsheet",
3
- "version": "0.22.0-dev1",
3
+ "version": "0.22.0",
4
4
  "description": "Pi extension: run the crib (cribsheet) memory + code-index MCP server via sharedserver, inject the reach-for-crib directive, and ship the /crib recall command. Pairs with pi-mcp-adapter.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,13 +9,15 @@
9
9
  "extensions": [
10
10
  "./src/index.ts"
11
11
  ],
12
- "image": "https://cdn.jsdelivr.net/npm/@geohar/pi-cribsheet/assets/preview.png"
12
+ "image": "https://cdn.jsdelivr.net/npm/@geohar/pi-cribsheet/assets/preview.png",
13
+ "changelogPath": "./CHANGELOG.md"
13
14
  },
14
15
  "files": [
15
16
  "src",
16
17
  "dist",
17
18
  "instructions.txt",
18
19
  "mcp.json.example",
20
+ "CHANGELOG.md",
19
21
  "README.md",
20
22
  "LICENSE",
21
23
  "assets"
@@ -24,7 +26,7 @@
24
26
  "build": "tsc",
25
27
  "clean": "rm -rf dist",
26
28
  "typecheck": "tsc --noEmit",
27
- "prepack": "node -e \"require('fs').copyFileSync('../../CLAUDE.md.example', './instructions.txt')\"",
29
+ "prepack": "node -e \"const fs=require('fs');fs.copyFileSync('../../CLAUDE.md.example','./instructions.txt');fs.copyFileSync('../../CHANGELOG.md','./CHANGELOG.md')\"",
28
30
  "prepublishOnly": "npm run clean && npm run build"
29
31
  },
30
32
  "keywords": [