@oomkapwn/enquire-mcp 3.7.13 → 3.7.15

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 (139) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +4 -4
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/tools/write.d.ts +10 -4
  6. package/dist/tools/write.d.ts.map +1 -1
  7. package/dist/tools/write.js +10 -4
  8. package/dist/tools/write.js.map +1 -1
  9. package/dist/vault.d.ts +21 -4
  10. package/dist/vault.d.ts.map +1 -1
  11. package/dist/vault.js +91 -19
  12. package/dist/vault.js.map +1 -1
  13. package/docs/COMPARISON.md +2 -2
  14. package/package.json +2 -2
  15. package/dist/tools.d.ts +0 -980
  16. package/dist/tools.d.ts.map +0 -1
  17. package/dist/tools.js +0 -3132
  18. package/dist/tools.js.map +0 -1
  19. package/docs/api-reference/.nojekyll +0 -1
  20. package/docs/api-reference/assets/hierarchy.js +0 -1
  21. package/docs/api-reference/assets/highlight.css +0 -71
  22. package/docs/api-reference/assets/icons.js +0 -18
  23. package/docs/api-reference/assets/icons.svg +0 -1
  24. package/docs/api-reference/assets/main.js +0 -60
  25. package/docs/api-reference/assets/navigation.js +0 -1
  26. package/docs/api-reference/assets/search.js +0 -1
  27. package/docs/api-reference/assets/style.css +0 -1633
  28. package/docs/api-reference/functions/index.buildEmbedText.html +0 -15
  29. package/docs/api-reference/functions/index.buildMcpServer.html +0 -4
  30. package/docs/api-reference/functions/index.formatReadyBanner.html +0 -4
  31. package/docs/api-reference/functions/index.main.html +0 -1
  32. package/docs/api-reference/functions/index.parsePositiveInt.html +0 -1
  33. package/docs/api-reference/functions/index.parseQuantizationMode.html +0 -5
  34. package/docs/api-reference/functions/index.prepareServerDeps.html +0 -5
  35. package/docs/api-reference/functions/index.startServer.html +0 -1
  36. package/docs/api-reference/functions/tools.appendToNote.html +0 -17
  37. package/docs/api-reference/functions/tools.archiveNote.html +0 -15
  38. package/docs/api-reference/functions/tools.assertHnswModelMatchesEmbedder.html +0 -13
  39. package/docs/api-reference/functions/tools.chatThreadAppend.html +0 -22
  40. package/docs/api-reference/functions/tools.chatThreadRead.html +0 -16
  41. package/docs/api-reference/functions/tools.contextPack.html +0 -21
  42. package/docs/api-reference/functions/tools.createNote.html +0 -19
  43. package/docs/api-reference/functions/tools.dataviewQuery.html +0 -16
  44. package/docs/api-reference/functions/tools.embeddingsSearch.html +0 -40
  45. package/docs/api-reference/functions/tools.findPath.html +0 -23
  46. package/docs/api-reference/functions/tools.findSimilar.html +0 -21
  47. package/docs/api-reference/functions/tools.frontmatterGet.html +0 -15
  48. package/docs/api-reference/functions/tools.frontmatterSearch.html +0 -16
  49. package/docs/api-reference/functions/tools.frontmatterSet.html +0 -19
  50. package/docs/api-reference/functions/tools.getBacklinks.html +0 -15
  51. package/docs/api-reference/functions/tools.getNoteNeighbors.html +0 -16
  52. package/docs/api-reference/functions/tools.getOpenQuestions.html +0 -19
  53. package/docs/api-reference/functions/tools.getOutboundLinks.html +0 -16
  54. package/docs/api-reference/functions/tools.getRecentEdits.html +0 -14
  55. package/docs/api-reference/functions/tools.getUnresolvedWikilinks.html +0 -14
  56. package/docs/api-reference/functions/tools.getVaultStats.html +0 -13
  57. package/docs/api-reference/functions/tools.lintWiki.html +0 -20
  58. package/docs/api-reference/functions/tools.listCanvases.html +0 -16
  59. package/docs/api-reference/functions/tools.listNotes.html +0 -19
  60. package/docs/api-reference/functions/tools.listPdfs.html +0 -15
  61. package/docs/api-reference/functions/tools.listTags.html +0 -14
  62. package/docs/api-reference/functions/tools.ocrPdf.html +0 -18
  63. package/docs/api-reference/functions/tools.openInUi.html +0 -17
  64. package/docs/api-reference/functions/tools.paperAudit.html +0 -16
  65. package/docs/api-reference/functions/tools.pickEmbedTextForHyde.html +0 -8
  66. package/docs/api-reference/functions/tools.readCanvas.html +0 -19
  67. package/docs/api-reference/functions/tools.readNote.html +0 -20
  68. package/docs/api-reference/functions/tools.readPdf.html +0 -18
  69. package/docs/api-reference/functions/tools.renameNote.html +0 -24
  70. package/docs/api-reference/functions/tools.replaceInNotes.html +0 -20
  71. package/docs/api-reference/functions/tools.resolveTarget.html +0 -24
  72. package/docs/api-reference/functions/tools.resolveWikilink.html +0 -20
  73. package/docs/api-reference/functions/tools.searchHybrid.html +0 -62
  74. package/docs/api-reference/functions/tools.searchText.html +0 -19
  75. package/docs/api-reference/functions/tools.semanticSearch.html +0 -19
  76. package/docs/api-reference/functions/tools.validateNoteProposal.html +0 -19
  77. package/docs/api-reference/hierarchy.html +0 -1
  78. package/docs/api-reference/index.html +0 -1
  79. package/docs/api-reference/interfaces/index.ServeOptions.html +0 -74
  80. package/docs/api-reference/interfaces/index.ServerDeps.html +0 -27
  81. package/docs/api-reference/interfaces/tool-manifest.ToolManifestEntry.html +0 -33
  82. package/docs/api-reference/interfaces/tools.ArchiveNoteArgs.html +0 -12
  83. package/docs/api-reference/interfaces/tools.BacklinkHit.html +0 -15
  84. package/docs/api-reference/interfaces/tools.CanvasEdge.html +0 -19
  85. package/docs/api-reference/interfaces/tools.CanvasSummary.html +0 -16
  86. package/docs/api-reference/interfaces/tools.ChatThreadAppendArgs.html +0 -10
  87. package/docs/api-reference/interfaces/tools.ChatThreadMessage.html +0 -14
  88. package/docs/api-reference/interfaces/tools.ChatThreadReadResult.html +0 -10
  89. package/docs/api-reference/interfaces/tools.ContextPackArgs.html +0 -12
  90. package/docs/api-reference/interfaces/tools.ContextPackResult.html +0 -20
  91. package/docs/api-reference/interfaces/tools.EmbedHit.html +0 -21
  92. package/docs/api-reference/interfaces/tools.EmbedSearchResponse.html +0 -14
  93. package/docs/api-reference/interfaces/tools.FindPathResult.html +0 -17
  94. package/docs/api-reference/interfaces/tools.FrontmatterSearchArgs.html +0 -20
  95. package/docs/api-reference/interfaces/tools.FrontmatterSetArgs.html +0 -13
  96. package/docs/api-reference/interfaces/tools.HnswSearchContext.html +0 -21
  97. package/docs/api-reference/interfaces/tools.LintWikiArgs.html +0 -14
  98. package/docs/api-reference/interfaces/tools.LintWikiFinding.html +0 -14
  99. package/docs/api-reference/interfaces/tools.LintWikiResult.html +0 -9
  100. package/docs/api-reference/interfaces/tools.NoteNeighbors.html +0 -17
  101. package/docs/api-reference/interfaces/tools.NoteReadFull.html +0 -20
  102. package/docs/api-reference/interfaces/tools.NoteReadMap.html +0 -25
  103. package/docs/api-reference/interfaces/tools.NoteSummary.html +0 -14
  104. package/docs/api-reference/interfaces/tools.OcrPdfArgs.html +0 -16
  105. package/docs/api-reference/interfaces/tools.OcrPdfPage.html +0 -15
  106. package/docs/api-reference/interfaces/tools.OcrPdfResult.html +0 -18
  107. package/docs/api-reference/interfaces/tools.OpenInUiResult.html +0 -11
  108. package/docs/api-reference/interfaces/tools.OpenQuestion.html +0 -20
  109. package/docs/api-reference/interfaces/tools.OutboundLink.html +0 -20
  110. package/docs/api-reference/interfaces/tools.PaperAuditFinding.html +0 -17
  111. package/docs/api-reference/interfaces/tools.PathStep.html +0 -9
  112. package/docs/api-reference/interfaces/tools.PdfSummary.html +0 -9
  113. package/docs/api-reference/interfaces/tools.ReadCanvasResult.html +0 -15
  114. package/docs/api-reference/interfaces/tools.ReadPdfArgs.html +0 -8
  115. package/docs/api-reference/interfaces/tools.ReadPdfPage.html +0 -13
  116. package/docs/api-reference/interfaces/tools.ReadPdfResult.html +0 -18
  117. package/docs/api-reference/interfaces/tools.RenameNoteResult.html +0 -14
  118. package/docs/api-reference/interfaces/tools.RenameProposal.html +0 -13
  119. package/docs/api-reference/interfaces/tools.ReplaceInNotesArgs.html +0 -15
  120. package/docs/api-reference/interfaces/tools.ReplaceInNotesFileResult.html +0 -6
  121. package/docs/api-reference/interfaces/tools.ReplaceInNotesResult.html +0 -21
  122. package/docs/api-reference/interfaces/tools.SearchHit.html +0 -16
  123. package/docs/api-reference/interfaces/tools.SearchHybridHit.html +0 -30
  124. package/docs/api-reference/interfaces/tools.SearchHybridResponse.html +0 -23
  125. package/docs/api-reference/interfaces/tools.SearchResponse.html +0 -13
  126. package/docs/api-reference/interfaces/tools.SemanticHit.html +0 -15
  127. package/docs/api-reference/interfaces/tools.SimilarNote.html +0 -15
  128. package/docs/api-reference/interfaces/tools.TagSummary.html +0 -13
  129. package/docs/api-reference/interfaces/tools.UnresolvedWikilink.html +0 -22
  130. package/docs/api-reference/interfaces/tools.ValidateProposalArgs.html +0 -10
  131. package/docs/api-reference/interfaces/tools.ValidateProposalResult.html +0 -14
  132. package/docs/api-reference/interfaces/tools.VaultStats.html +0 -26
  133. package/docs/api-reference/modules/index.html +0 -1
  134. package/docs/api-reference/modules/tool-manifest.html +0 -1
  135. package/docs/api-reference/modules/tools.html +0 -1
  136. package/docs/api-reference/types/tools.CanvasNode.html +0 -7
  137. package/docs/api-reference/types/tools.SearchMode.html +0 -7
  138. package/docs/api-reference/variables/index.VERSION.html +0 -9
  139. package/docs/api-reference/variables/tool-manifest.TOOL_MANIFEST.html +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,81 @@
2
2
 
3
3
  All notable changes to this project will be documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [3.7.15] — 2026-05-18
6
+
7
+ > **TL;DR:** Round-17 post-merge audit on v3.7.14 — **meta-recursion finding**: the v3.7.14 patch that closed overclaim #6 (F1) introduced overclaim **#7 inside its own release**. v3.7.14 F2 fixed `vault.renameFile` internals (stat→link()+unlink()) but left the function's TSDoc header claiming *"Atomic via fs.rename"* — exactly the same class as F1 it had just fixed. Plus 2 unfixed instances of v3.7.12 L4's reranker-honesty class missed in COMPARISON.md. 3 fixes + 1 new invariant. **+1 test** (816 total). Documents the methodological lesson: **a single class-sweep round isn't enough — same-release recursion is a real failure mode and requires post-merge re-sweep.**
8
+
9
+ **Patch — round-17 post-merge audit.**
10
+
11
+ ### The meta-finding
12
+
13
+ v3.7.14 was a "round-16 SELF-audit" that closed 5 findings, prominently including **F1 — silent overclaim #6** (renameNote TSDoc header still described the old buggy write order after the M1 internals fix). The very next class-sweep, run AFTER v3.7.14 shipped, found that v3.7.14's own **F2 fix did the exact same thing**: rewrote `vault.renameFile` to use `fs.link()` + `fs.unlink()` for atomic non-overwrite, but left the function header docstring saying *"Atomic via `fs.rename`"*. This is **overclaim #7**, occurring inside the patch designed to address overclaim #6. The pattern reproduces with high fidelity:
14
+
15
+ | Instance | Release | Class |
16
+ |---|---|---|
17
+ | 1 | v3.6.1 CRIT-1 | "All N callsites fixed" — actually 1 of 10 |
18
+ | 2 | v3.6.2 K-1 | "All 10 callsites fixed" — actually 4 of 10 |
19
+ | 3 | v3.6.4 K-1 cli.ts | 5 residual callsites missed |
20
+ | 4 | v3.7.10 D4 | `examples/` add to `package.json#files` claimed but Edit raced |
21
+ | 5 | v3.7.11 round-13 | retroactive overclaim correction documented |
22
+ | 6 | v3.7.14 F1 | renameNote TSDoc header drifted from M1 code change |
23
+ | **7** | **v3.7.14 F2 (self)** | **renameFile TSDoc header drifted from F2's own internal change** |
24
+ | **8** | **v3.7.14 release tag** | **Tagged the pre-squash-merge branch SHA (orphan, never on main); release.yml correctly refused. v3.7.14 never reached npm until corrective re-tag in this v3.7.15 release window. Different class from #1-#7 (procedural / git-tag discipline, not docstring) but same overclaim shape: CHANGELOG/release notes implied a complete ship that hadn't happened.** |
25
+ | **9** | **v3.7.14 F5 (automation overclaim)** | **F5 added a `gh release create` step to `release.yml` claiming "auto-create GH release per tag". First end-to-end test on v3.7.14 corrected-tag re-push: `HTTP 403: Resource not accessible by integration`. Root cause: `permissions:` block at workflow top had `contents: read` (GitHub 2023 security default), but `gh release create` needs `contents: write`. F5 was code-complete but permission-incomplete — the documentation in v3.7.14 CHANGELOG implied it worked. Fix in this patch: `contents: write` on the workflow.** |
26
+
27
+ The mechanism is **always the same**: a fix updates code inside a function but doesn't update the function's TSDoc header or related comments. TypeDoc + IDE hover then surface the stale (lying) description while the code does something else. There is no test gate that fires on stale docstrings.
28
+
29
+ ### Findings
30
+
31
+ - **R17-1 — v3.7.14 F2 TSDoc drift (overclaim #7, IN-RELEASE recursion)** (`src/vault.ts:633` header). Pre-3.7.15 the docstring read *"Rename a markdown file inside the vault. Atomic via fs.rename. Refuses if source missing, target exists (unless overwrite)..."* — but v3.7.14 F2's body uses `fs.link()` + `fs.unlink()` for the non-overwrite path (because `fs.rename` silently replaces destinations on POSIX, which IS the TOCTOU race F2 fixed). Header now matches: explicit `link()+unlink()` description + EXDEV fallback + cross-reference to `renameNote` in `tools/write.ts` for orchestration context.
32
+ - **R17-2 — `appendNote` TSDoc enhancement** (`src/vault.ts:707` header). v3.7.14 F3 fixed the stat-then-append race via single-fd `fs.open(abs, "a")` → `handle.stat()` → `handle.write()`, but the function header just said *"Refuses if the resulting file would exceed the size cap"* without explaining the (now-closed) race. Header now documents the open-fd guarantee + cites F3.
33
+ - **R17-3 — `docs/COMPARISON.md` reranker row stale (v3.7.12 L4 missed instance)** (`docs/COMPARISON.md:31`). v3.7.12 L4 corrected `package.json#description` from *"5 cross-encoder reranker models"* to *"BGE cross-encoder reranker verified end-to-end (+4 aliases in catalog, transformers.js bump pending)"* and added a docs-consistency invariant for the new phrasing. But COMPARISON.md's feature-matrix row at line 31 still said *"Cross-encoder reranker (BGE, 5 models)"* — same class, missed instance carried 3 releases since v3.7.12. Fixed to *"Cross-encoder reranker (BGE verified end-to-end)"*.
34
+ - **R17-4 — New invariant: COMPARISON.md reranker honesty** (`tests/docs-consistency.test.ts`). Locks the v3.7.12 L4 narrative into structural enforcement on COMPARISON.md: rejects any *"reranker (BGE, N models)"* form via regex. If a future release rewrites COMPARISON.md and reverts to the flat-count framing, this test fails on the PR.
35
+ - **R17-5 — Overclaim #8 (v3.7.14 orphan-tag procedural error, caught and corrected).** `git tag v3.7.14 36d5c1d` pointed at the pre-squash-merge feature-branch commit (orphan, never on main); the squash-merge created a different SHA on main (`9c4172b`). `.github/workflows/release.yml`'s "Assert tag is on main" guard correctly refused to publish (this guard exists since v2.0.0 to prevent direct-push-to-tag bypass of PR review). Net effect: v3.7.14 never reached npm until this v3.7.15 release window's corrective re-tag (`git tag v3.7.14 9c4172b && git push origin v3.7.14`). The CHANGELOG / GH-release-claim for v3.7.14 thus described a ship that hadn't completed — a new shape of the overclaim class. **Fix in this patch:** the release.yml's "Assert tag is on main" guard ALREADY caught it (defense worked); the missing piece is procedural — the local `git tag` step needs to use the SQUASH-MERGE COMMIT on main, not the feature-branch HEAD. Adding to CLAUDE.md anti-patterns as a new rule (below) so the next release in this codebase avoids the trap. v3.7.12 and v3.7.13 happened to tag correctly because I used the merge-commit SHA from `git log -1 --oneline` on main — but this discipline wasn't documented as a rule.
36
+
37
+ ### Root-cause analysis classes documented
38
+
39
+ The full root-cause sweep on v3.7.13/v3.7.14 fixes also produced these class observations:
40
+
41
+ 1. **TSDoc/code drift class** (F1 + R17-1 + R17-2). 7 documented instances. No structural enforcement exists because docstring↔code agreement is undecidable in general. **Mitigation discipline (added to CLAUDE.md anti-patterns):** every fix that changes function internals MUST also update the function's TSDoc header in the same commit; reviewers MUST check the header diff alongside the body diff. PR template should include a checkbox.
42
+ 2. **TOCTOU sibling sweep** (v3.7.13 M2 + v3.7.14 F2 + v3.7.14 F3). All vault stat-then-act sites swept; no remaining siblings found. Locations verified safe: `bases.ts:245`, `watcher.ts:117`, `media.ts:226/349/526/703`, `meta.ts:202`, `write.ts:1054/1089` (all read-paths, no follow-on write).
43
+ 3. **Hardcoded counts class** (R17-3). All "5 reranker / models" mentions enumerated and corrected. `docs/benchmarks.md` BGE numbers are model-version refs (not counts), `README.md` "+5-10 NDCG@10" is a metric delta (not a count) — both safe.
44
+ 4. **Silent-pass invariant class** (round-15 L4 already closed). Re-verified: only `tests/github-metadata-invariant.test.ts` has an explicit skip path; CI's `GH_TOKEN` wiring makes it loud. No additional siblings.
45
+
46
+ ### Stats
47
+
48
+ - **816 tests** (was 815 in v3.7.14). **+1 test** (R17-4 invariant).
49
+ - **2 TSDoc headers** updated to match code reality.
50
+ - **1 docs surface** brought into the v3.7.12 L4 honest-framing era.
51
+
52
+ ### Method note added to CLAUDE.md
53
+
54
+ > **Single class-sweep is not enough — same-release recursion happens.** v3.7.14 F1 fixed overclaim #6, and v3.7.14 F2 SHIPPED overclaim #7 in the very same patch. **Rule since v3.7.15**: after every audit-driven release that closes an "overclaim" or "TSDoc/code drift" finding, run a post-merge re-sweep specifically scanning the new patch's own diffs for fresh instances of the same class. The recursion rate observed across v3.6.x-v3.7.x is high enough that this is a required step, not an optional one.
55
+
56
+ ## [3.7.14] — 2026-05-18
57
+
58
+ > **TL;DR:** Round-16 self-audit on the v3.7.13 codebase — class-sweep methodology applied to the round-15 fixes. Found 5 findings: **F1** v3.7.13 silent overclaim (M1 fixed renameNote ordering but the TSDoc header still described the OLD buggy write order — 6th overclaim instance), **F2** M2 sibling (`vault.renameFile` had the same stat-then-rename TOCTOU race that M2 fixed for `writeNote`), **F3** `appendNote` had a stat-then-append race that let parallel writers bypass the `maxFileBytes` size cap, **F4** "8 required CI gates" hardcoded count was not gated by docs-consistency (v3.5.9 anti-pattern recurrence), **F5** automated `gh release create` in `release.yml` (M13 from round-15, originally deferred to v3.8.0 but trivial to land). **+1 test** (815 total), **+1 docs-consistency invariant** (required-gates count).
59
+
60
+ **Patch — round-16 self-audit batch.**
61
+
62
+ ### Findings
63
+
64
+ - **F1 — v3.7.13 silent overclaim #6** (`src/tools/write.ts:145-148`). The v3.7.13 M1 fix reordered `renameNote()`'s write steps (rename first, backlinks second) and added a long comment block inside the function explaining the new order. But the function-LEVEL TSDoc header (lines 145-148, what TypeDoc publishes + IDE hover surfaces) still described the OLD ordering: *"backlink-bearing files first, source last, fs.rename last — a mid-operation crash leaves backlinks pointing at the still-present old name"*. That's the exact (LYING) comment v3.7.13 M1 replaced inside the function body — but the public-facing docstring kept it. **6th overclaim instance** documented (after v3.6.1 CRIT-1, v3.6.2 K-1 callsite count, v3.6.4 K-1 cli.ts callsites, v3.7.10 silent `files`-array miss, v3.7.11 round-13 retroactive correction). Header now matches reality + cross-references v3.7.13 M1.
65
+ - **F2 — `vault.renameFile` had the M2 TOCTOU race for the destination** (`src/vault.ts:633-688`). v3.7.13 M2 fixed `writeNote(overwrite=false)`'s stat-then-write race by switching to the `wx` open flag, but `renameFile(overwrite=false)` had the SAME pattern: `stat(toAbs)` → check ENOENT → `fs.rename(fromAbs, toAbs)`. POSIX `rename(2)` silently replaces the destination if it exists, so a parallel writer creating the destination between the stat and the rename would get its file clobbered by ours, bypassing the `overwrite=false` guard. Fix: use `fs.link(fromAbs, toAbs)` for the non-overwrite path. `link(2)` fails atomically with `EEXIST` when the destination exists — no stat-then-act window. After successful link, `fs.unlink(fromAbs)` completes the move semantic. `EXDEV` (cross-device link) falls back to `copyFile(..., COPYFILE_EXCL)` + `unlink` for the same atomic guarantee on bind-mounted vaults. **+1 negative-control test** firing two simultaneous `renameFile()` calls at the same destination and asserting exactly-one-success.
66
+ - **F3 — `appendNote` stat-then-append size-cap bypass** (`src/vault.ts:697-704`). Pre-3.7.14 the size guard was `fs.stat(abs)` → check `before.size + addition <= maxFileBytes` → `fs.appendFile(abs, addition)`. Under parallel appends, the stat could report size X, another process appended size Y between stat and our append, and our append took the file to X+Y+addition — past the cap. Fix: open the file via `fs.open(abs, "a")`, `handle.stat()` from the open fd to get the current size, check the cap, write via `handle.write()`, close in `finally`. Keeps the stat→write window inside a single kernel-held fd, and the "a" mode flag's POSIX append guarantee ensures atomic end-of-file writes.
67
+ - **F4 — "8 required CI gates" claim ungated** (`README.md:115`, `README.md:185`, `CLAUDE.md:29`). v3.7.13 M5 bumped the claim from 7 → 8 manually, but no test gated it against `.github/workflows/release.yml`'s actual `REQUIRED` regex. Recurrence of the v3.5.9 anti-pattern ("Hardcoded counts in docs without an invariant"). Fix: new docs-consistency invariant `'N required CI gates' claims match release.yml REQUIRED regex count` that (a) parses the `REQUIRED="lint|test \(22\)|..."` assignment, splits on `|`, counts entries; (b) cross-checks against `REQ_COUNT=N` in the same workflow (double-source-of-truth structural guard); (c) asserts every `**N**? required` claim in README + CLAUDE.md matches the actual count. If a 9th gate is added later, all three drift surfaces fail together.
68
+ - **F5 — Automated `gh release create` in release workflow** (`.github/workflows/release.yml:124-167`, M13 from round-15). Pre-3.7.14 README claimed *"npm + GitHub release per tag"* but `gh release create` was a manual post-release step (CONTRIBUTING.md:87). Originally deferred to v3.8.0 in round-15; landed early because it's trivial. Workflow now: extracts the matching `## [X.Y.Z]` section from `CHANGELOG.md` via `awk`, marks stable versions (`latest` dist-tag) as Latest with `--latest --target main`, marks prereleases with `--prerelease`, falls back to a CHANGELOG link if the section can't be parsed, skips with a warning if a release already exists (manual creation before the tag-push). CONTRIBUTING.md updated to reflect the new automation.
69
+
70
+ ### Stats
71
+
72
+ - **815 tests** (was 813 in v3.7.13). **+2 tests**: 1 F2 negative-control (`tests/write.test.ts`) + 1 F4 invariant (`tests/docs-consistency.test.ts`).
73
+ - **+1 docs-consistency invariant** (required-gates count).
74
+ - npm tarball unchanged; v3.7.14 is a pure correctness + automation patch.
75
+
76
+ ### Method
77
+
78
+ Round-16 was a SELF-audit (no external auditor), but used the round-15 fix patterns AS the audit methodology — apply each fix's class pattern across the rest of the codebase. The result: 2 real new bugs (F2/F3) that v3.7.13's external-audit-driven scope didn't catch, plus 1 silent overclaim instance (F1) of the SAME class that recurred in v3.7.10, v3.7.11, v3.7.12. **Class-pattern sweeps after every external-audit cycle is the right post-ship discipline** — externals find the entry point, the class sweep cleans up the siblings before another auditor flags them.
79
+
5
80
  ## [3.7.13] — 2026-05-18
6
81
 
7
82
  > **TL;DR:** Round-15 external audit response (4th independent external audit since v3.6.0). 15 ship-ready fixes landed: 3 High (PDF page slicing pre-extraction DoS vector, HTTP stateful pre-initialize resource leak, `engines.node` floor mismatch with CI matrix), 9 Medium (renameNote rollback recovery, atomic non-overwrite create via `wx`, OCR lang regex validation, README required-gates count, per-file coverage fail-on-missing, parse-cache chmod-only-newly-created, broken docs/api.md → SECURITY.md link, benchmarks latency-column de-duplication, COMPARISON.md test-count gate), 3 Low (OCR/read_pdf page-range refine, github-metadata invariant fail-loud in CI with GH_TOKEN, exclude `docs/audits/` from npm package). **+11 tests** (813 total), with negative-controls on every new invariant. 2 audit findings already closed by v3.7.12 (L1 `.base` path normalization, L3 canvas mtimeMs leak). 7 architectural findings deferred to v3.8.0 with reasoning (M4/M6/M7/M13/L5/L6 — write-tool smoke variant, reranker-smoke-in-CI, release automation, declarations-vs-runs test count).
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![CI](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
12
12
  [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
13
13
  [![downloads](https://img.shields.io/npm/dm/@oomkapwn/enquire-mcp.svg?color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
14
- [![tests](https://img.shields.io/badge/tests-813%20passing-brightgreen.svg)](#trust)
14
+ [![tests](https://img.shields.io/badge/tests-816%20passing-brightgreen.svg)](#trust)
15
15
  [![stable](https://img.shields.io/badge/v3.7.x-stable-brightgreen.svg)](./STABILITY.md)
16
16
  [![SLSA-3](https://img.shields.io/badge/SLSA-3-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l3)
17
17
  [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
@@ -36,7 +36,7 @@ Your Obsidian vault becomes **persistent, queryable long-term memory** for any M
36
36
  > 2. **Best-in-class retrieval.** Hybrid BM25 + multilingual embeddings + BGE cross-encoder reranker fused via RRF, scaled with HNSW + int8 quantization. The same IR stack a search startup would build — open-sourced, in one binary.
37
37
  > 3. **Zero cloud calls during serve.** Models cached locally (one-time download from HuggingFace). Your vault content never leaves your machine. Air-gap-safe by default.
38
38
 
39
- **44 tools · 19 MCP prompts · 813 unit tests · 50+ languages · v3.7.x stable · semver-bound · MIT · SLSA-3 signed.**
39
+ **44 tools · 19 MCP prompts · 816 unit tests · 50+ languages · v3.7.x stable · semver-bound · MIT · SLSA-3 signed.**
40
40
 
41
41
  ---
42
42
 
@@ -112,7 +112,7 @@ Auto-generated **[API reference at oomkapwn.github.io/enquire-mcp](https://oomka
112
112
  | **GraphRAG-light** (wikilink community detection via Louvain modularity) | ✅ **only here** | ❌ | ❌ |
113
113
  | **Standalone `.base` query execution** (works without Obsidian running) | ✅ **only here** | ❌ | ❌ delegates to Obsidian |
114
114
  | **HyDE retrieval** (Gao et al 2023) + sub-question decomposition | ✅ **only here** | ❌ | ❌ |
115
- | **813 unit tests · 8 required + 4 advisory CI gates per PR** | ✅ | n/a | rare |
115
+ | **816 unit tests · 8 required + 4 advisory CI gates per PR** | ✅ | n/a | rare |
116
116
  | **SLSA-3 build provenance** | ✅ | n/a | ❌ |
117
117
  | **Semver-bound public surface** ([STABILITY.md](./STABILITY.md)) | ✅ | n/a | ❌ |
118
118
  | Standalone (no Obsidian plugin needed) | ✅ | ❌ requires Obsidian | varies |
@@ -222,7 +222,7 @@ Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog:
222
222
  ```bash
223
223
  git clone https://github.com/oomkapwn/enquire-mcp.git
224
224
  cd enquire-mcp && npm install
225
- npm test # full suite (813 tests, ~5s)
225
+ npm test # full suite (816 tests, ~5s)
226
226
  npm run lint # zero warnings
227
227
  npm run build # tsc → dist/
228
228
  ```
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@
7
7
  * + `McpServer({version})`) and `src/tool-registry.ts` (used in the
8
8
  * `vault-info` resource payload).
9
9
  */
10
- export declare const VERSION = "3.7.13";
10
+ export declare const VERSION = "3.7.15";
11
11
  export { main } from "./cli.js";
12
12
  export { buildEmbedText, buildMcpServer, formatReadyBanner, prepareServerDeps, type ServeOptions, type ServerDeps, startServer } from "./server.js";
13
13
  export { parsePositiveInt, parseQuantizationMode } from "./tool-registry.js";
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ import { main } from "./cli.js";
32
32
  * + `McpServer({version})`) and `src/tool-registry.ts` (used in the
33
33
  * `vault-info` resource payload).
34
34
  */
35
- export const VERSION = "3.7.13";
35
+ export const VERSION = "3.7.15";
36
36
  // Re-exports — preserve the v3.5.x public surface so http-transport.ts and
37
37
  // tests don't need to know about the new module layout. The set below
38
38
  // exactly matches the v3.5.x `export` declarations: `main`,
@@ -118,10 +118,16 @@ export interface RenameNoteResult {
118
118
  * moves the file. `dry_run` returns the same plan without touching disk.
119
119
  *
120
120
  * Self-references inside the renamed file are also rewritten in the same
121
- * pass — the file ships with no broken self-links. Write order is
122
- * recoverable: backlink-bearing files first, source last, fs.rename last
123
- * a mid-operation crash leaves backlinks pointing at the still-present old
124
- * name. WRITE TOOL only registered when `--enable-write` is passed.
121
+ * pass — the file ships with no broken self-links. v3.7.13 M1 — write
122
+ * order is recoverable: (1) rewrite source content at OLD path → (2)
123
+ * `fs.rename` OLD NEW (atomic, runs FIRST so a failure here doesn't
124
+ * leave updated backlinks pointing at a phantom target) (3) rewrite
125
+ * backlink-bearing files (destination already exists on disk). Every
126
+ * failure mode is recoverable by re-running the same call (each step is
127
+ * idempotent on re-input). Pre-v3.7.13 the order was (backlinks → source
128
+ * → rename), which left backlinks rewritten to the NEW name pointing at
129
+ * a phantom destination when the rename step failed.
130
+ * WRITE TOOL — only registered when `--enable-write` is passed.
125
131
  *
126
132
  * @param vault - The vault. Must allow writes.
127
133
  * @param args - `from` and `to` are vault-relative paths (with or without
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
@@ -87,10 +87,16 @@ export async function appendToNote(vault, args) {
87
87
  * moves the file. `dry_run` returns the same plan without touching disk.
88
88
  *
89
89
  * Self-references inside the renamed file are also rewritten in the same
90
- * pass — the file ships with no broken self-links. Write order is
91
- * recoverable: backlink-bearing files first, source last, fs.rename last
92
- * a mid-operation crash leaves backlinks pointing at the still-present old
93
- * name. WRITE TOOL only registered when `--enable-write` is passed.
90
+ * pass — the file ships with no broken self-links. v3.7.13 M1 — write
91
+ * order is recoverable: (1) rewrite source content at OLD path → (2)
92
+ * `fs.rename` OLD NEW (atomic, runs FIRST so a failure here doesn't
93
+ * leave updated backlinks pointing at a phantom target) (3) rewrite
94
+ * backlink-bearing files (destination already exists on disk). Every
95
+ * failure mode is recoverable by re-running the same call (each step is
96
+ * idempotent on re-input). Pre-v3.7.13 the order was (backlinks → source
97
+ * → rename), which left backlinks rewritten to the NEW name pointing at
98
+ * a phantom destination when the rename step failed.
99
+ * WRITE TOOL — only registered when `--enable-write` is passed.
94
100
  *
95
101
  * @param vault - The vault. Must allow writes.
96
102
  * @param args - `from` and `to` are vault-relative paths (with or without
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
package/dist/vault.d.ts CHANGED
@@ -233,10 +233,18 @@ export declare class Vault {
233
233
  bytes: number;
234
234
  }>;
235
235
  private assertParentInsideVault;
236
- /** Rename a markdown file inside the vault. Atomic via fs.rename. Refuses if
237
- * source missing, target exists (unless overwrite), either path traverses,
238
- * or the target sits behind a symlink that points outside the vault. Caller
239
- * is responsible for rewriting wikilinks pointing at the old name. */
236
+ /** Rename a markdown file inside the vault. v3.7.14 F2 — atomic destination
237
+ * guard via `fs.link(fromAbs, toAbs)` + `fs.unlink(fromAbs)` for the
238
+ * non-overwrite path (link(2) fails atomically with EEXIST, closing the
239
+ * stat-then-rename TOCTOU race that POSIX rename(2) silently lost by
240
+ * replacing destinations). Cross-device fallback (`EXDEV`) uses
241
+ * `fs.copyFile(..., COPYFILE_EXCL)` + `fs.unlink` for the same atomic
242
+ * guarantee. The overwrite=true path keeps plain `fs.rename` since the
243
+ * caller opted into replacement. Refuses if source missing, target exists
244
+ * (unless overwrite), either path traverses, or the target sits behind a
245
+ * symlink that points outside the vault. Caller is responsible for
246
+ * rewriting wikilinks pointing at the old name (see {@link renameNote}
247
+ * in `src/tools/write.ts` for the orchestration). */
240
248
  renameFile(fromRel: string, toRel: string, opts?: {
241
249
  overwrite?: boolean;
242
250
  }): Promise<{
@@ -248,6 +256,15 @@ export declare class Vault {
248
256
  * Append text to an existing note. Requires `enableWrite: true`.
249
257
  * Refuses if the resulting file would exceed the size cap.
250
258
  *
259
+ * v3.7.14 F3 — the size-cap check is performed against the OPEN file
260
+ * descriptor's `fstat`, not a separate `fs.stat(abs)` call before
261
+ * `fs.appendFile`. Pre-3.7.14 the two-call pattern let parallel
262
+ * writers race the cap: stat says `before.size + addition <= max`,
263
+ * another process appends size Y between stat and our append, our
264
+ * append takes the file past `max`. The post-3.7.14 single-fd pattern
265
+ * keeps stat→write inside one kernel handle that another process
266
+ * can't reposition.
267
+ *
251
268
  * @param relOrAbs - Vault-relative or absolute target path.
252
269
  * @param addition - Text to append (UTF-8). Caller is responsible for
253
270
  * including any leading newline.
@@ -1 +1 @@
1
- {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
package/dist/vault.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- import { promises as fs } from "node:fs";
2
+ import { promises as fs, constants as fsConstants } from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
5
  import { parseNote } from "./parser.js";
@@ -572,10 +572,18 @@ export class Vault {
572
572
  current = path.dirname(current);
573
573
  }
574
574
  }
575
- /** Rename a markdown file inside the vault. Atomic via fs.rename. Refuses if
576
- * source missing, target exists (unless overwrite), either path traverses,
577
- * or the target sits behind a symlink that points outside the vault. Caller
578
- * is responsible for rewriting wikilinks pointing at the old name. */
575
+ /** Rename a markdown file inside the vault. v3.7.14 F2 — atomic destination
576
+ * guard via `fs.link(fromAbs, toAbs)` + `fs.unlink(fromAbs)` for the
577
+ * non-overwrite path (link(2) fails atomically with EEXIST, closing the
578
+ * stat-then-rename TOCTOU race that POSIX rename(2) silently lost by
579
+ * replacing destinations). Cross-device fallback (`EXDEV`) uses
580
+ * `fs.copyFile(..., COPYFILE_EXCL)` + `fs.unlink` for the same atomic
581
+ * guarantee. The overwrite=true path keeps plain `fs.rename` since the
582
+ * caller opted into replacement. Refuses if source missing, target exists
583
+ * (unless overwrite), either path traverses, or the target sits behind a
584
+ * symlink that points outside the vault. Caller is responsible for
585
+ * rewriting wikilinks pointing at the old name (see {@link renameNote}
586
+ * in `src/tools/write.ts` for the orchestration). */
579
587
  async renameFile(fromRel, toRel, opts = {}) {
580
588
  if (!this.writeEnabled) {
581
589
  throw new Error("Vault is read-only — start the server with --enable-write to allow rename");
@@ -595,20 +603,56 @@ export class Vault {
595
603
  : "--exclude-glob denylist";
596
604
  throw new Error(`Refusing to rename — destination is excluded by ${reason}: ${toRelNorm}`);
597
605
  }
598
- if (!opts.overwrite) {
599
- const exists = await fs
600
- .stat(toAbs)
601
- .then(() => true)
602
- .catch(() => false);
603
- if (exists)
604
- throw new Error(`Destination already exists: ${toRelNorm} (pass overwrite=true to replace)`);
605
- }
606
606
  const targetLstat = await fs.lstat(toAbs).catch(() => null);
607
607
  if (targetLstat?.isSymbolicLink()) {
608
608
  throw new Error(`Refusing to rename — destination is a symlink: ${path.relative(this.root, toAbs)}`);
609
609
  }
610
610
  await fs.mkdir(path.dirname(toAbs), { recursive: true });
611
- await fs.rename(fromAbs, toAbs);
611
+ // v3.7.14 F2 — atomic exclusive-destination rename (parity with v3.7.13 M2).
612
+ // Pre-3.7.14 we did `stat(toAbs)`-then-`rename(fromAbs, toAbs)`. POSIX
613
+ // rename(2) silently REPLACES the destination if it exists, so between
614
+ // a stat() returning ENOENT and the follow-up rename(), another process
615
+ // could create the destination and our rename would clobber it without
616
+ // honoring overwrite=false. Closes the same class of TOCTOU race that
617
+ // M2 fixed for writeNote.
618
+ //
619
+ // The fix uses link()+unlink() for the non-overwrite path. link(2) fails
620
+ // atomically with EEXIST when the destination exists — no stat-then-act
621
+ // window. After successful link the source path is removed, leaving the
622
+ // file at the new path with identical contents. For the overwrite path
623
+ // we keep plain rename() since the user opted into replacement.
624
+ if (opts.overwrite) {
625
+ await fs.rename(fromAbs, toAbs);
626
+ }
627
+ else {
628
+ try {
629
+ await fs.link(fromAbs, toAbs);
630
+ }
631
+ catch (err) {
632
+ if (err instanceof Error && "code" in err && err.code === "EEXIST") {
633
+ throw new Error(`Destination already exists: ${toRelNorm} (pass overwrite=true to replace)`);
634
+ }
635
+ // EXDEV (cross-device link) is the realistic fallback: vault on a
636
+ // bind-mount, source on the underlying fs. Fall back to atomic
637
+ // copy-then-unlink with the wx flag.
638
+ if (err instanceof Error && "code" in err && err.code === "EXDEV") {
639
+ await fs.copyFile(fromAbs, toAbs, fsConstants.COPYFILE_EXCL);
640
+ await fs.unlink(fromAbs);
641
+ }
642
+ else {
643
+ throw err;
644
+ }
645
+ }
646
+ // link() succeeded — source still exists at fromAbs as a hard link.
647
+ // Unlink it to complete the move semantic. If unlink fails the user
648
+ // sees a still-present fromAbs alongside the new toAbs (hard-linked,
649
+ // same inode on POSIX); re-running renameFile will see toAbs exists
650
+ // and reject — but the duplicate is a recoverable state, not data
651
+ // loss, which is the v3.7.13 M1 recovery posture.
652
+ await fs.unlink(fromAbs).catch(() => {
653
+ // Best-effort cleanup; toAbs is the canonical truth.
654
+ });
655
+ }
612
656
  this.cache.delete(fromAbs);
613
657
  this.cache.delete(toAbs);
614
658
  const stat = await fs.stat(toAbs);
@@ -622,6 +666,15 @@ export class Vault {
622
666
  * Append text to an existing note. Requires `enableWrite: true`.
623
667
  * Refuses if the resulting file would exceed the size cap.
624
668
  *
669
+ * v3.7.14 F3 — the size-cap check is performed against the OPEN file
670
+ * descriptor's `fstat`, not a separate `fs.stat(abs)` call before
671
+ * `fs.appendFile`. Pre-3.7.14 the two-call pattern let parallel
672
+ * writers race the cap: stat says `before.size + addition <= max`,
673
+ * another process appends size Y between stat and our append, our
674
+ * append takes the file past `max`. The post-3.7.14 single-fd pattern
675
+ * keeps stat→write inside one kernel handle that another process
676
+ * can't reposition.
677
+ *
625
678
  * @param relOrAbs - Vault-relative or absolute target path.
626
679
  * @param addition - Text to append (UTF-8). Caller is responsible for
627
680
  * including any leading newline.
@@ -634,18 +687,37 @@ export class Vault {
634
687
  throw new Error("Vault is read-only — start the server with --enable-write to allow note appends");
635
688
  }
636
689
  const abs = await this.resolveSafePath(relOrAbs);
637
- const before = await fs.stat(abs);
638
- if (before.size + Buffer.byteLength(addition, "utf8") > this.maxFileBytes) {
639
- throw new Error(`Refusing to grow ${path.relative(this.root, abs)} past ${this.maxFileBytes} bytes`);
690
+ // v3.7.14 F3 close the stat-then-append size-cap race. Pre-3.7.14
691
+ // we did `stat(abs)` → check `before.size + addition <= maxFileBytes`
692
+ // `appendFile(abs, addition)`. Under parallel writes, the stat could
693
+ // report size X, another process appended size Y between stat and our
694
+ // appendFile, and our append took the file to X+Y+addition, possibly
695
+ // past `maxFileBytes`. Now we open with `O_APPEND` ourselves, fstat
696
+ // the open handle to get the current size, check the cap, write, and
697
+ // close — keeping the stat→write window inside a single kernel-held
698
+ // fd that another process can't reposition. fs.appendFile + open with
699
+ // O_APPEND means subsequent writes are always atomic at the end of
700
+ // file (POSIX append guarantee).
701
+ const handle = await fs.open(abs, "a");
702
+ let beforeSize = 0;
703
+ try {
704
+ const before = await handle.stat();
705
+ beforeSize = before.size;
706
+ if (before.size + Buffer.byteLength(addition, "utf8") > this.maxFileBytes) {
707
+ throw new Error(`Refusing to grow ${path.relative(this.root, abs)} past ${this.maxFileBytes} bytes`);
708
+ }
709
+ await handle.write(addition, null, "utf8");
710
+ }
711
+ finally {
712
+ await handle.close();
640
713
  }
641
- await fs.appendFile(abs, addition, "utf8");
642
714
  this.cache.delete(abs);
643
715
  const after = await fs.stat(abs);
644
716
  return {
645
717
  absPath: abs,
646
718
  relPath: path.relative(this.root, abs),
647
719
  mtimeMs: after.mtimeMs,
648
- appended_bytes: after.size - before.size
720
+ appended_bytes: after.size - beforeSize
649
721
  };
650
722
  }
651
723
  /** Drop every entry from the in-memory parse cache. Used after bulk