Skip to content

chore(release): 0.2.92 — ship the merged multi-tag data-loss fix (#34) that was never published - #58

Merged
andrei-hasna merged 2 commits into
mainfrom
task/2db5e98d-multitag-add-dataloss
Jul 30, 2026
Merged

chore(release): 0.2.92 — ship the merged multi-tag data-loss fix (#34) that was never published#58
andrei-hasna merged 2 commits into
mainfrom
task/2db5e98d-multitag-add-dataloss

Conversation

@andrei-hasna

@andrei-hasna andrei-hasna commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Why

No source change. This releases a fix that is already on main and has never reached a single install.

-t/--tag silent data loss on knowledge add was fixed by #34 (fix(cli): stop silently dropping repeated -t tags on add/update/upsert), merged 2026-07-27T19:39:04Z, commit 78db6e1 — confirmed an ancestor of origin/main.

npm 0.2.91 was published 2026-07-24T15:52:10Z, three days earlier, and package.json was never bumped. package.json at 78db6e1 and at its parent both read 0.2.91.

So main and the registry both claim 0.2.91 while behaving differently, and npm publish cannot ship the fix at all — that version already exists. Since the version numbers match, nothing signals the difference.

Measured

Installed 0.2.91, five repeated flags:

knowledge add "…" "…" -t convention -t naming -t repos -t github -t proposed --json
→ "tags": ["proposed"]        # exit 0, four tags discarded silently

main's committed bundle, same five flags:

tags = ['convention', 'naming', 'repos', 'github', 'proposed']   # add
tags = ['alpha', 'beta', 'gamma']                                # -t "alpha,beta, gamma"
tags = ['one', 'two', 'three', 'four']                           # update -t appends, unregressed
exit=1  "no tag name found"                                      # -t " , " fails loudly

Tags are the retrieval surface, so a dropped tag makes an entry invisible to every --tag query — indistinguishable from never having written it. This was not theoretical: a taxonomy ruling was absent from knowledge list --tag convention until repaired by hand.

add is covered by #34, not only update/upsert: the fix is at the option declaration — case '--tag': case '-t': flags.tag = collectTagFlag(flags.tag, argv[i + 1]) — so every verb taking -t benefits from one place, and the add path consumes it via itemStore.create({ …, tags: flags.tag ?? [] }). Verbs affected and now covered: add, update, upsert, untag, list.

Comma-joined -t "a,b" splits rather than being rejected. That decision is #34's and is kept deliberately: it matches the todos CLI (-t, --tags, "Comma-separated tags") and the array-typed MCP inputs, so the two CLIs cannot disagree about the same muscle memory. Rejection would have been defensible in isolation but would make one habit correct in one CLI and an error in the other. Empty/separator-only values are the case that is rejected, at exit 1, so -t "" from an empty shell expansion cannot silently store nothing.

Blast radius

31 other commits merged since the 0.2.91 publish are also unshipped and go out with this — the request-boundary guard, the platform-agnostic redaction fix, ok_untag truthful removal, and the generated-artifact checks.

Evidence

  • verify:generated: all 6 bundles rebuild byte-identically, exit 0 on a clean tree.
  • Bundles are regenerated because they embed the version string. The diff is provably that string alone — bin/knowledge.js and bin/knowledge-mcp.js are byte-identical to their predecessors after reverting 0.2.920.2.91. Sizes unchanged (1176640, 1630596).
  • bun bin/knowledge.js --version@hasna/knowledge 0.2.92, and the rebuilt bundle still stores all five tags.
  • Suite, A/B under load on a contended box (nproc=20): unmodified origin/main at load 41 → 358 pass / 2 skip / 10 fail; this branch at load 18 → 360 pass / 2 skip / 8 fail. Every failure is timed out after 5000ms, the known hardcoded-per-test-timeout defect (tracked separately). Fewer failures after a version-only diff, tracking load rather than the change — the diff cannot affect test outcomes.
  • Staged secrets scan clean. The pre-commit hook reported bin/knowledge.js as binary-to-git and therefore unscanned; reviewed by hand with a forced-text credential scan of the bundle diff (clean) plus the byte-level version-string-only proof above.

Not in this PR

Publishing and the fleet install are the dispatching seat's step, tracked under 2db5e98d.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

…can ship

The `-t/--tag` silent-data-loss fix landed on main in 78db6e1 (PR #34) on
2026-07-27, but npm 0.2.91 was published on 2026-07-24 and package.json was
never bumped. main and the registry therefore both say 0.2.91 while behaving
differently: main stores all five tags, the published artifact stores only the
last one.

Because the version number is identical, nothing signals the difference, and
`npm publish` cannot ship the fix at all — the version already exists. Every
fleet install is the pre-fix artifact, so 31 other commits merged since the
0.2.91 publish are also unshipped.

Bundles are regenerated because they embed the version string; the bundle diff
is provably the version string alone (both files are byte-identical to their
predecessors once 0.2.92 is reverted to 0.2.91).

Refs: 2db5e98d, 78db6e1, #34

Agent: vespasian
@andrei-hasna
andrei-hasna force-pushed the task/2db5e98d-multitag-add-dataloss branch from fb7ed1d to 69ced04 Compare July 30, 2026 13:03
@andrei-hasna
andrei-hasna merged commit d141994 into main Jul 30, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant