nexusmem 0.4.0 → 0.5.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
@@ -9,6 +9,23 @@ built from, matched by publish timestamp: `v0.1.0` → `67a4776`, `v0.1.1` → `
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.5.0] — 2026-08-17
13
+
14
+ ### Added
15
+
16
+ - **`nexusmem forget <value>`: permanent, value-keyed deletion.** The finer-grained complement to
17
+ `sync --prune-source` (which only deletes at the whole-collector-source granularity): forgets one
18
+ exact string or `--regex` pattern, deleting every node it currently matches *and* writing a
19
+ standing deny-list entry so the value can never be re-ingested — closing the one gap an external
20
+ source-level review flagged as its most serious finding: the append-only shell-hook log (and a
21
+ full transcript re-read) are untouched by any prune, so `sync --rebuild` used to resurrect exactly
22
+ what had just been deleted. Every removal leaves a hash-only tombstone (never the forgotten
23
+ content itself — `body`/`title` are stored as sha256 only) and the whole operation writes one
24
+ `mutation_audit` row, whether or not anything matched. Dry-run by default, matching
25
+ `--prune-source`'s convention exactly; `--yes` confirms; `--list` shows active entries. Permanent
26
+ in v0 — no `--remove`, matching the existing irreversible framing of `--prune-source`/`--rebuild`.
27
+ See `docs/forget-mechanism.md`.
28
+
12
29
  ## [0.4.0] — 2026-08-16
13
30
 
14
31
  ### Added
@@ -320,7 +337,8 @@ First public release.
320
337
  there is no local-model summarization pass, and the conversation collector has never been audited
321
338
  for the stale-node bug that was found and fixed in the docs collector.
322
339
 
323
- [Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.4.0...HEAD
340
+ [Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.5.0...HEAD
341
+ [0.5.0]: https://github.com/yaminbkk/NexusMem/compare/v0.4.0...v0.5.0
324
342
  [0.4.0]: https://github.com/yaminbkk/NexusMem/compare/v0.3.3...v0.4.0
325
343
  [0.3.3]: https://github.com/yaminbkk/NexusMem/compare/v0.3.2...v0.3.3
326
344
  [0.3.2]: https://github.com/yaminbkk/NexusMem/compare/v0.3.1...v0.3.2
package/README.md CHANGED
@@ -318,10 +318,15 @@ optimizing, and it is somebody else's process.
318
318
  against this repo's own memory, switching to the joint cap moved the section that answered the
319
319
  question up in three of them (the rationale section for "why BM25 before vector search" went from
320
320
  rank 4 to rank 1) and displaced no query's correct top hit.
321
+ - **`forget` is per-repository, not global.** Its deny-list lives in the one `.nexusmem/memory.db` it
322
+ ran against (plus that repo's stale prior identities, same scope `--prune-source` already uses). A
323
+ value that leaked into shell history from several repositories needs `forget` run once per repo —
324
+ there is no shared, machine-wide deny-list across every project you have synced.
321
325
 
322
326
  ## Commands
323
327
 
324
- `init`, `sync`, `query <text>`, `status`, `projects`, `mcp`, and `hook install|remove|status`.
328
+ `init`, `sync`, `query <text>`, `status`, `projects`, `mcp`, `forget <value>`, and
329
+ `hook install|remove|status`.
325
330
 
326
331
  There are also five dry-run previews (`scan-git`, `scan-diff`, `scan-shell`, `scan-docs`,
327
332
  `scan-conversation`)
@@ -334,6 +339,14 @@ transcript source in for one run without persisting it, `--no-embed` skips the v
334
339
  `--link-failures` builds the failure → fix chains described above, and `--rebuild` drops the
335
340
  project's nodes and re-ingests from scratch.
336
341
 
342
+ `sync --prune-source <name>` deletes an entire collector source (e.g. `shell:pwsh`); `forget <value>`
343
+ is the finer-grained complement — it deletes every node matching one exact string (or `--regex`
344
+ pattern) *and* writes a standing deny-list entry so the value can never be re-ingested, even by a
345
+ later `sync --rebuild` re-reading the append-only shell-hook log or a full transcript scan. Every
346
+ removal leaves a hash-only tombstone, never the forgotten content itself. Both are dry-run by
347
+ default; `--yes` confirms. See [`docs/forget-mechanism.md`](docs/forget-mechanism.md) for why this
348
+ exists.
349
+
337
350
  ## Recall across projects
338
351
 
339
352
  `query --all-projects` searches every repository you have run NexusMem in, not just the current one,