Repository navigation
lode v1.3.0
Ask-screen readability, offline search, and tool-augmented Q&A (lode-35nu)
The Ask experience gets citations you can actually follow, a non-AI quick search that works
without a model call, and — behind the sub-epic below — the ability to consult external
sources mid-answer.
- Every citation now resolves to a real note identity (note id + title), not a bare version id (lode-35nu.1)
- Cited results group by note and render surrounding context with the quoted span highlighted (lode-35nu.3)
- Jump straight from a cited result to the note it came from (lode-35nu.4)
- A live spinner and in-flight status replace the static "Thinking…" placeholder (lode-35nu.5)
- Browse: non-AI quick search over your notes via the FTS5 index (lode-35nu.6)
- Fix: selecting a tag on the Tags screen no longer filters out every note (lode-35nu.7)
- Fix: the related-notes panel no longer swallows the edit cursor line when it expands (lode-35nu.10)
- Spike: confirmed faithfulness.py's word-boundary tokenization is good enough to keep (lode-35nu.8)
cli.pyrefactored intosrc/lode/cli/**as dispatch-only (lode-35nu.9)- Empty tables across the TUI use
LodeDataTable.empty_messageinstead of a blank grid (lode-ligf) - Recorded the deliberate wont-do on per-claim LLM annotation in the answer schema (lode-35nu.12)
Tools for Ask: read-only external query, snapshot-then-cite (lode-35nu.11)
Ask can now reach read-only external sources mid-answer, snapshot what it read, and cite the
snapshot — so an answer stays verifiable after the source changes or disappears.
- Read-only JIRA, Confluence, and web query tools exposed to the Ask path (lode-8hsk)
- Snapshot-then-cite: a live tool result is persisted as an external snapshot before synthesis (lode-35nu.11.1)
- Tool-augmented Ask wired through the production
cited_answer.askpath, with gate-eligible tool snapshots (lode-8vvp) - "Ask about THIS note" — a per-note question entry point (lode-35nu.11.3)
- Save an ask answer as a new note, linked to its source, on user confirmation (lode-35nu.11.4)
- Multi-turn tool use on the
LLMProviderseam (lode-35nu.11.6) - Schema plus the first migration mechanism for tool-call egress and
discovered_via(lode-35nu.11.7) - Scope-level
no_egressrules that cover not-yet-seen external sources (lode-35nu.11.8) - Design settled for identity, persistence, and egress under tool-augmented Ask (lode-35nu.11.5)
- Fix:
lode egress --purpose toolno longer rejects rows lode itself writes (lode-l87l)
Hardening around the new tool path
- web_fetch SSRF: redirect-chain and DNS-rebinding gaps closed at the webfetch layer (lode-xwah)
- Bounded where the model may point web_fetch (lode-ejfv)
- Defenses against prompt injection via tool results steering later tool calls (lode-80bv)
run_tool_turns'max_tokenssettled as a per-run budget (lode-3dh1)- Verified jira_search's endpoint against Atlassian's removal of
GET /rest/api/3/search(lode-6nwu)
Features
lode reindexfor the lexical (FTS5) index — notes saved before the lexical leg landed now surface in quick search (lode-x9lu)- Lexical coverage gaps are no longer silent: a reconcile step plus a
lode statushint (lode-fd2g) - The enrichment inspector shows a note's externally-inherited tags (lode-f0m1)
- Table empty-state moved onto
LodeDataTableinstead of a sentinel row (lode-t7pw)
Fixes
- Search works for notes in any non-Latin script —
build_match_queryno longer drops non-ASCII text (lode-8irr) - Faithfulness coupling no longer lets a negated span couple by ignoring extra span tokens (lode-w2y7)
- The coupling fast path no longer fails open on compound-identifier fragments (lode-1qxy)
- A repeated quoted span highlights the right occurrence —
Supportcarries a body offset (lode-hruz) - App-side
Support.body_offsetkept out of the LLM structured-output schema (lode-9nmk) - Pinned-note ask context is bounded and no longer re-sends the same parent block (lode-ol2v)
- Dangling
:func:docstring references after the_resolve_targetrename repaired (lode-2hfd)
Internal / workflow
- Citation identity and as-of resolution moved out of
lode.tuiinto a shared read module (lode-kuc7) cited_answer.askbatches target resolution into twoIN(...)queries (lode-ekqh), re-cut as a whole-SQL{placeholders}seam with one shared placeholder builder (lode-oca9) over a shared batched polymorphic resolver (lode-r9z0)cli._retrievemoved intolode.retrieval, closing the cross-package CLI seam (lode-z3es)lode.cli.consoleseam collapsed to patch-where-used, removing thestatus.pyspecial case (lode-1bfn, lode-nftw), with stalesrc/lode/cli.pypointers swept from source and tests (lode-1dmu, lode-j25e) and the console docstring/test cross-reference corrected (lode-gt5b, lode-tts0)jobs_read.list_egressreturns a NamedTuple instead of an 8-wide positional tuple (lode-kl1i)- New gate: Python
:func:docstring refs must resolve to real symbols (lode-8oeu); docstringcheck's 81 standing wrapped-ref WARNINGs cleared so new ones are visible (lode-hg49) - Worktree isolation enforced by a
PreToolUsehook rather than markdown checkpoints alone (lode-p8zl), with hook cwd verified under isolation (lode-lnvi) and the stale payload premise corrected indocs/decisions.md(lode-5ido) - Fix: a launch worktree deleted mid-session under
/codefan-out no longer strands the agent on trunk (lode-6wgc) land_head/review_headvalidated as full 40-hex SHAs on write (lode-xdg3); the validate-sha40 call-site gate replaced its hand-maintained roster with a hazard-keyed corpus scan (lode-rby4)/land: an all-bounced or empty-accepted pass falls through instead of letting the lock age out (lode-0jan); the four$STATE_DIRload sites share one missing-vs-empty policy (lode-dc4n);/sweepadopts the same loader (lode-3oik)- Re-entry table routes a land-review escalation needing an on-branch edit to
ready-for-code-review(lode-2m93); stalereview_headclaims corrected (lode-8n4k) and the structurally-stale exit-(d) path fixed (lode-9b5n) docs/decisions.mdmarker gate: catches**AMENDMENT ((lode-125q) and all-caps RETRACTED/OBSOLETE/FALSIFIED/OUTDATED lead-ins (lode-bv9o); silent in-place rewrites now detectable (lode-rl6s) and the checker actually runs somewhere (lode-d7pm)- Test-suite consolidation: shared tool-turn Anthropic fake and stub Fetcher in conftest (lode-pw9o), remaining hand-rolled tool_use/text block sites swept onto it (lode-gyq3, lode-j5o1), the
.claudemarkdown corpus glob and its cached fence-block parse hoisted into conftest (lode-2evf, lode-es1i), a flaky SHA-timing test stabilized underpytest -n 8(lode-vaxe), and a stale PEP 649 eager-import rationale corrected (lode-t402)