B8 - executable code blocks with a real kernel:
- worker/handler/kernel.cljs: one persistent SCI interpreter session per
page, reused across block evaluations so defs/state survive between runs.
Deliberately scoped to the same privileges the existing client-side
single-shot evaluator already had (no shell/fs access, no call-api).
- Run button + result display wired into block.cljs's code-block UI.
- New :logseq.property.code/result and /executed-at properties (65.38).
B9 - live notes: pages tagged #LiveNote that fetch external content on a
refresh schedule and render it via the render-resource pipeline:
- worker/handler/live_notes.cljs: per-block credential storage, scheduled
refresh (Node-only), thread-apis for manual refresh and auth.
- worker/handler/render_resource/live_note.cljs: reads back fetched content,
watching [:entity block-uuid] for reactive invalidation.
- New :logseq.class/LiveNote + :logseq.property.livenote/* properties (65.39).
Bugs found and fixed along the way while actually exercising page creation
through page-handler/create! for the first time in a test (previously only
pure-fn tests existed for CalDAV/Event/Contact):
- logseq-property-namespaces (property.cljs) was missing the citation/event/
contact/caldav/livenote namespaces, causing auto-create-ontology to treat
already-built-in properties as new user idents.
- outliner/page.cljs's build-page-tx always added the generic #Page tag even
when the caller tagged with a built-in class that extends #Page, which
malli-schema rejects as conflicting; it also lost the property type when
building ref-typed property values for new pages, breaking non-:default
types like :number.
- entity-util/page? never recognized Event/Contact/LiveNote as pages (only
Journal/Whiteboard/Tag/Property/Page had dedicated recognition), so pages
tagged with those classes alone weren't treated as pages anywhere in the
app; added built-in-page-child? alongside the existing per-class checks.
- caldav.cljs's upsert-page! passed a bare keyword as a tag where an entity
was required, and two error logs passed raw error objects to glogi that
triggered runaway recursion in this test environment; both fixed.
- combine-results now applies a bounded (never below 0.5x) exponential
decay based on :block/updated-at, so more recently touched blocks/pages
rank slightly higher for otherwise-equal matches.
- New search/similar-blocks reuses the existing zvec index: fetch a
block's own already-indexed embedding (new :fetch capability on
open-vector-index, via zvec's fetchSync) and re-query the index with
it instead of embedding a fresh query string.
- Exposed as a :similar-pages render-resource (worker/handler/render-resource/similar.cljs),
consistent with how linked/unlinked references are already wired, plus
a raw :thread-api/search-similar-blocks for non-UI callers.
- New "Similar pages" section on the page view, above the existing
linked/unlinked references.
Establishes version control for the personal Logseq DB fork before
starting the server-client architecture migration and domain features
described in docs/agent-guide and the approved implementation plan.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>