Software-review fixes (#14) + ADR-033 Datacore foundation → v2.3.0 - #15
Merged
Conversation
… plugin Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…text (ADR-033) A note's dynamic-view fences (datacorejsx/datacore/dataview/dataviewjs) hold JS or query DSL that renders a different structure only inside Obsidian — never persisted to disk. The headless indexer was indexing that SOURCE verbatim (noise: 'dc.useQuery(...).filter(...)' etc.). ParsedNote gains indexedContent: the body with each dynamic-view fence body replaced by a neutral '[Datacore view]' placeholder. The chunker + section builder consume indexedContent; hashing + wikilink extraction + read_note still use the raw content (file identity + change-detection unchanged). No-op for notes without dynamic-view blocks. This is the headless/Datacore-inactive baseline; the Obsidian plugin overrides it with actually-rendered content (phases 2-3). Pure stripper in src/reader/datacore.ts with 7 unit tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sh (ADR-033) Nullable column marking a note whose indexed content came from the Obsidian plugin's RENDERED Datacore output, tagged with the source file's hash at render time (staleness detection + raw fallback). NULL = raw-indexed (back-compat). Idempotent PRAGMA-guarded column-add. The index_rendered_note MCP tool + indexer ingest path + plugin render land on top of this. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
P1) indexVault() decided needsReindex from chunkCount alone, so a note whose body changed but already had chunks kept stale chunks/embeddings/sections/ edges while its notes.hash/content were updated in place. - Read the pre-upsert note state and mirror single.ts's 3-way decision: hash-unchanged (no-op) / body-hash-unchanged (frontmatter-only: refresh wikilinks+edges, keep chunks) / body-changed (full re-embed). - Fix latent FK-order bug in the re-index loop: delete sections BEFORE chunks (sections reference chunks with no cascade). Only surfaced now that changed notes with existing sections are actually re-indexed. Tests: new incremental-reindex.test.ts — body change re-chunks, wikilink repoint updates edges, frontmatter-only skips re-embed, unchanged is no-op. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#14 P2) server.ts hardcoded const VERSION = "1.0.0" while the package was 2.2.x, so the MCP server advertised the wrong version and sink provisioning stamped a stale sentinel. Add src/version.ts as the single source of truth (JSON import, inlined by tsup at build) and consume it in server.ts. Regression test asserts VERSION === package.json.version and rejects the historical 1.0.0 placeholder. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…, CI (#14 P3/P4/P5) - Align all release versions to 2.3.0: package.json, plugin/package.json, plugin/manifest.json (already 2.3.0), package-lock.json, README "Latest". - Add src/version-consistency.test.ts asserting CLI == plugin pkg == plugin manifest, README badge, and a matching CHANGELOG section. - Narrow engines.node to ">=22 <26" — Node 26+ has no better-sqlite3 prebuild for the new ABI. Update README prerequisites. - Harden .gitignore with **/.DS_Store (none tracked; verified via git ls-files). - Extend CI matrix to Node 22 + 24 (floor + one upper supported version). - CHANGELOG: add 2.3.0 section. Rebuild dist with the corrected version. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… scalar (#14) matter.stringify() ran with js-yaml's default lineWidth: 80, folding long string values into a `>-` block scalar that Obsidian's Properties editor mishandles. Pass lineWidth: -1 so values round-trip single-line. Test asserts no `>-` marker and the value survives intact. Also re-applies prettier formatting to the P1 indexer files. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Phases 1–2 (query-source stripping + migration 016 rendered_source_hash) ship in this release; later ADR-033 phases remain incomplete. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #14.
Issue #14 — software-review fixes
fix(indexer): incremental full-vault mode now re-indexes changed notes (was deciding from chunk count alone → stale chunks/embeddings/sections/edges). Mirrors single.ts's 3-way decision. Also fixes a latent FK-order bug (sections before chunks).fix(server): VERSION derived from package.json via newsrc/version.ts(was hardcoded1.0.0).chore:engines.nodenarrowed to>=22 <26(Node 26+ has no better-sqlite3 prebuild). README updated.chore: all release versions reconciled to 2.3.0 (package.json, plugin/package.json, plugin/manifest.json, README, CHANGELOG, lockfile) +version-consistency.test.tsCI guard.chore:.gitignorehardened with**/.DS_Store(none tracked, verified).fix(write): long frontmatter strings serialize single-line, not as a>-block scalar.Also included (per owner decision)
ADR-033 Datacore rendered-indexing foundation (Phases 1–2): query-source stripping + migration 016
notes.rendered_source_hash. Later ADR-033 phases remain incomplete — documented as such in CHANGELOG.Verification
npm run lint:check(full CI chain incl. adapter-seam invariants): greennpm run build: success, correct version inlinedNew tests
incremental-reindex.test.ts(4),version.test.ts(2),version-consistency.test.ts(3), write frontmatter test (+1).🤖 Generated with Claude Code