@oomkapwn/enquire-mcp 3.8.0-rc.13 → 3.8.0-rc.14

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
@@ -2,6 +2,86 @@
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.8.0-rc.14] — 2026-05-24
6
+
7
+ > **TL;DR:** Fourteenth v3.8.0 release candidate. **Post-rc.13 audit closure** — 4 findings: M-2 (root-class fix: new files `llms.txt` + `AGENTS.md` introduced drift surface without invariant coverage), L-2 (`CLAUDE.md` status section stale at rc.12 — same α-class drift the methodology keeps fighting), L-3 (Tier B0 MCP Registry submission successfully completed but not documented in CHANGELOG), L-4 (PR #117 `server.json` schema validation fix had no CHANGELOG entry). 7 new docs-consistency invariants extend coverage to llms.txt + AGENTS.md numeric claims (test count, tool breakdown, MCP prompt count, CI gate count, per-file floor count). **855 tests** (+7 invariants vs rc.13). Ships under `@rc` dist-tag.
8
+
9
+ **Minor — fourteenth v3.8.0 release candidate.**
10
+
11
+ ### Fix M-2 (MEDIUM) — root-class fix for new-file drift-surface gap
12
+
13
+ **Background.** rc.12 added `llms.txt` (https://llmstxt.org/ standard for AI agents) and `AGENTS.md` (Cursor 2.0 / Claude Code / Codex coding-agent convention). Both contain numeric/structural claims — "848 unit tests", "44 tools", "19 MCP prompts", "9 required CI gates", "10 per-file branch floors" — that were NOT covered by the existing `docs-consistency.test.ts` invariants. Existing invariants checked README, STABILITY.md, COMPARISON.md, package.json description, and docs/api.md, but new files were a fresh drift surface.
14
+
15
+ Post-rc.13 audit found this as a class-level methodology gap: **whenever we add a new docs surface with numeric claims, we must extend docs-consistency at the same time**, otherwise the surface will silently drift. Same class as M-1 (CLI help text drift before rc.11 lifted to `cli-help.ts`) — but for a *new* surface we created in rc.12 rather than a pre-existing one.
16
+
17
+ **Fix** (`tests/docs-consistency.test.ts`): added a new `describe` block "llms.txt + AGENTS.md numeric claims (v3.8.0-rc.14 M-2)" with 7 invariants:
18
+ 1. `llms.txt` test count = actual `it()` count across `tests/*.test.ts`
19
+ 2. `llms.txt` tool breakdown `N tools (A always-on read + B opt-in + C gated writes)` = TOOL_MANIFEST counts per kind
20
+ 3. `llms.txt` MCP prompt count = `registerPrompt` count in `src/prompts.ts`
21
+ 4. `llms.txt` `N required + M advisory CI gates` count = `REQUIRED="..."` regex entries in `.github/workflows/release.yml`
22
+ 5. `AGENTS.md` `X+ tests` lower-bound assertion (≤ actual, with drift detection if actual >50 above floor)
23
+ 6. `AGENTS.md` per-file branch floor count = entries in `scripts/check-per-file-coverage.mjs` FLOORS object
24
+ 7. `AGENTS.md` `N required CI gates` (multiple mentions) all = `release.yml` REQUIRED count
25
+
26
+ Tested empirically: invariants caught 7 fresh drift instances (test count now 855, not 848 — the 7 new invariants themselves changed the count). All surfaces updated to 855 in same commit.
27
+
28
+ **Defense-in-depth.** This now means EVERY new docs surface in this repo must either (a) avoid numeric claims, OR (b) be added to docs-consistency invariants at the same time. CLAUDE.md anti-patterns updated with new rule.
29
+
30
+ ### Fix L-2 (LOW) — CLAUDE.md status section was stale at rc.12
31
+
32
+ **Background.** CLAUDE.md line 119 said `**v3.8.0-rc.12 shipped (current)**` after rc.13 was already shipped + MCP Registry submission successful. Classic α-class drift the methodology specifically warns against.
33
+
34
+ **Fix** (`CLAUDE.md`): updated status section to reflect rc.12 (shipped), rc.13 (shipped, includes MCP Registry submission confirmation), rc.14 (current). Same edit pattern as previous status updates.
35
+
36
+ ### Fix L-3 (LOW) — MCP Registry submission was not documented in CHANGELOG
37
+
38
+ **Background.** rc.13 CHANGELOG entry predicted "After this RC publishes to npm, `mcp-publisher publish` submits server.json to the canonical MCP Registry." — but the *actual* successful submission was never recorded in any CHANGELOG entry. Audit trail gap.
39
+
40
+ **Confirmation.** Successfully published to `https://registry.modelcontextprotocol.io` on 2026-05-24 09:18:29 UTC:
41
+ - Server name: `io.github.oomkapwn/enquire-mcp`
42
+ - Version: `3.8.0-rc.13`
43
+ - Status: `active`
44
+ - `isLatest`: `true`
45
+
46
+ Live verification: `curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=enquire"` → 1 listing. Glama.ai, mcp.so, smithery.ai will auto-sync from this canonical source over 24-48 hours.
47
+
48
+ Also opened **awesome-mcp-servers PR #6838** at `https://github.com/punkpeye/awesome-mcp-servers/pull/6838` in the Knowledge & Memory category. Awaiting maintainer review.
49
+
50
+ ### Fix L-4 (LOW) — PR #117 server.json validation fix was not documented
51
+
52
+ **Background.** rc.13 shipped with `server.json` that failed MCP Registry validation (description >100 chars, runtimeArguments missing required `valueHint`/`value`/`name` fields per the v2025-12-11 schema). Fixed during the registry submission session and merged via PR #117 — but no CHANGELOG entry was added.
53
+
54
+ **Confirmation.** PR #117 merged to main at commit ea3a4cc. Changes:
55
+ 1. `server.json` description: 489 chars → 91 chars (matches MCP Registry `length ≤ 100` constraint)
56
+ 2. PositionalArgument: added `valueHint: "subcommand"`, `value: "serve"`, ordered fields per schema
57
+ 3. NamedArgument: explicit `type: "named"` + `name: "--vault"` fields
58
+
59
+ `mcp-publisher validate` now passes cleanly. The corrected `server.json` is what was published to the registry; this RC documents the gap.
60
+
61
+ ### Stats
62
+
63
+ - **855 tests** (+7 docs-consistency invariants vs rc.13).
64
+ - 2 surfaces newly covered by invariants: `llms.txt`, `AGENTS.md`.
65
+ - 5 surfaces with test-count bumps: README (×3), package.json, COMPARISON.md, llms.txt, AGENTS.md.
66
+ - `npm audit`: 0 vulnerabilities.
67
+ - Dist-tag: `@rc` (v3.7.20 stays `@latest`).
68
+ - All 9 required CI gates pass locally.
69
+
70
+ ### Method note
71
+
72
+ **New rule (CLAUDE.md anti-patterns):** whenever a PR adds a new docs surface with numeric claims, the SAME PR must extend `docs-consistency.test.ts` to cover those claims. Otherwise the new surface becomes a fresh drift surface that the next external audit will catch. This generalizes the v3.7.17 OIA rule from "state-driven walks for existing files" to "structural invariants for new files".
73
+
74
+ ### v3.8.0 remaining backlog
75
+
76
+ - **External audit** before `@latest` promotion (CLAUDE.md rule since v3.6.1 — required ≥2 independent external auditors per major).
77
+ - **Tier C** (deferred): JSON-LD `SoftwareApplication` schema on GH Pages, GitHub Sponsors funding.yml.
78
+ - **T-2, T-3** — communities handler + hyde E2E.
79
+ - **T-4** — optional serve-http HTTP smoke.
80
+ - **Multi-subcommand CLI drift audit** (from rc.11 RCA): install-model/build-embeddings/eval/bench for --include-pdfs/--embed-file/--json/etc.
81
+ - OCR'd PDF watcher embed-sync, HNSW in-memory watcher update.
82
+
83
+ ---
84
+
5
85
  ## [3.8.0-rc.13] — 2026-05-24
6
86
 
7
87
  > **TL;DR:** Thirteenth v3.8.0 release candidate. **AI/LLM discoverability Tier B** — adds `mcpName` field to `package.json` (`io.github.oomkapwn/enquire-mcp`) and ships `server.json` at repo root, both required by the official MCP Registry verification (registry.modelcontextprotocol.io). Adds `CITATION.cff` for academic discoverability (Google Scholar / Semantic Scholar) citing the underlying research papers (HyDE, RRF, BM25, Louvain, HNSW, BGE). After this RC ships to npm, mcp-publisher can submit to the canonical MCP Registry — which auto-propagates to glama.ai, mcp.so, smithery.ai, and other downstream registries. **No code changes; metadata + documentation only.** 848 tests unchanged. Ships under `@rc` dist-tag.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  [![CI](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
14
14
  [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
15
15
  [![downloads](https://img.shields.io/npm/dm/@oomkapwn/enquire-mcp.svg?color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
16
- [![tests](https://img.shields.io/badge/tests-848%20passing-brightgreen.svg)](#trust)
16
+ [![tests](https://img.shields.io/badge/tests-855%20passing-brightgreen.svg)](#trust)
17
17
  [![stable](https://img.shields.io/badge/v3.7.x-stable-brightgreen.svg)](./STABILITY.md)
18
18
  [![SLSA-3](https://img.shields.io/badge/SLSA-3-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l3)
19
19
  [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
@@ -38,7 +38,7 @@ Your Obsidian vault becomes **persistent, queryable long-term memory** for any M
38
38
  > 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.
39
39
  > 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.
40
40
 
41
- **44 tools · 19 MCP prompts · 848 unit tests · 50+ languages · v3.7.x stable · semver-bound · MIT · SLSA-3 signed.**
41
+ **44 tools · 19 MCP prompts · 855 unit tests · 50+ languages · v3.7.x stable · semver-bound · MIT · SLSA-3 signed.**
42
42
 
43
43
  ---
44
44
 
@@ -176,7 +176,7 @@ Auto-generated **[API reference at oomkapwn.github.io/enquire-mcp](https://oomka
176
176
  | **GraphRAG-light** (wikilink community detection via Louvain modularity) | ✅ **only here** | ❌ | ❌ |
177
177
  | **Standalone `.base` query execution** (works without Obsidian running) | ✅ **only here** | ❌ | ❌ delegates to Obsidian |
178
178
  | **HyDE retrieval** (Gao et al 2023) + sub-question decomposition | ✅ **only here** | ❌ | ❌ |
179
- | **848 unit tests · 9 required + 4 advisory CI gates per PR** | ✅ | n/a | rare |
179
+ | **855 unit tests · 9 required + 4 advisory CI gates per PR** | ✅ | n/a | rare |
180
180
  | **SLSA-3 build provenance** | ✅ | n/a | ❌ |
181
181
  | **Semver-bound public surface** ([STABILITY.md](./STABILITY.md)) | ✅ | n/a | ❌ |
182
182
  | Standalone (no Obsidian plugin needed) | ✅ | ❌ requires Obsidian | varies |
@@ -286,7 +286,7 @@ Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog:
286
286
  ```bash
287
287
  git clone https://github.com/oomkapwn/enquire-mcp.git
288
288
  cd enquire-mcp && npm install
289
- npm test # full suite (848 tests, ~5s)
289
+ npm test # full suite (855 tests, ~5s)
290
290
  npm run lint # zero warnings
291
291
  npm run build # tsc → dist/
292
292
  ```
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.8.0-rc.13";
10
+ export declare const VERSION = "3.8.0-rc.14";
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
@@ -40,7 +40,7 @@ import { main } from "./cli.js";
40
40
  * + `McpServer({version})`) and `src/tool-registry.ts` (used in the
41
41
  * `vault-info` resource payload).
42
42
  */
43
- export const VERSION = "3.8.0-rc.13";
43
+ export const VERSION = "3.8.0-rc.14";
44
44
  // Re-exports — preserve the v3.5.x public surface so http-transport.ts and
45
45
  // tests don't need to know about the new module layout. The set below
46
46
  // exactly matches the v3.5.x `export` declarations: `main`,
@@ -43,7 +43,7 @@ The four axes the external audit (#3, 2026-05) called out as decisive — **REST
43
43
  | Read open editor state, active note, etc. | **No** | **Yes** | Limited | No | No |
44
44
  | Zero outbound network calls in serve mode | **Yes** (default) | Local-only (REST)| Local-only (REST)| Yes | Yes |
45
45
  | SLSA-3 build provenance on releases | **Yes** | No | No | No | No |
46
- | Test count (public) | **848** | (varies) | (varies) | (varies) | (varies) |
46
+ | Test count (public) | **855** | (varies) | (varies) | (varies) | (varies) |
47
47
  | Tool count | 44 | ~25 | ~8 | ~10 | 3–5 |
48
48
  | MCP prompt count | 19 | 0 | 0 | 0 | 0 |
49
49
  | License | MIT | Apache-2.0 | MIT | MIT | (varies) |
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@oomkapwn/enquire-mcp",
4
- "version": "3.8.0-rc.13",
4
+ "version": "3.8.0-rc.14",
5
5
  "mcpName": "io.github.oomkapwn/enquire-mcp",
6
- "description": "MCP server giving AI agents (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw) persistent long-term memory backed by your local Obsidian markdown vault. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question decomposition), GraphRAG-light (Louvain), standalone Obsidian Bases, PDFs + Tesseract OCR. Vendor-neutral memory layer for any MCP-compatible agent. 44 tools, 19 MCP prompts, 848 tests, SLSA-3, semver-bound, MIT, zero cloud calls during serve.",
6
+ "description": "MCP server giving AI agents (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw) persistent long-term memory backed by your local Obsidian markdown vault. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question decomposition), GraphRAG-light (Louvain), standalone Obsidian Bases, PDFs + Tesseract OCR. Vendor-neutral memory layer for any MCP-compatible agent. 44 tools, 19 MCP prompts, 855 tests, SLSA-3, semver-bound, MIT, zero cloud calls during serve.",
7
7
  "type": "module",
8
8
  "bin": {
9
9
  "enquire-mcp": "dist/index.js"