selahdocs

What we’ve shipped

Every change to Selah, newest first, written for the people who use it rather than the people who built it. Last shipped .

July 8, 2026

v0.39.29.0 → v0.39.33.0

The companion can now edit the note you're looking at.

Fixed

  • The companion can now edit the note you're looking at.

    Asking Selah to rewrite or remove a section — from the dock or the companion screen — previously dead-ended with a request to paste the note's ID from the URL. The companion now knows which note it's reading and which notes a search returned, so edits just work. Section edits also got stricter: if Selah can't tell which note you mean, it asks instead of guessing — it never rewrites a section of a note you didn't name.

  • Menus opened by click could never actually open (a shared popover bug that the new Focus menu exposed first).
  • "New this week" now works on iPhone — concept timestamps are normalized so Safari can read them.

Added

  • Meta (Facebook/Instagram) ad measurement.

    Selah now reports signups, trial starts, and purchases back to Meta the same way it already does for Reddit — matched to the ad click server-side, so campaign performance stays measurable even though conversions finish days later in a Stripe webhook. The browser pixel is consent-gated (nothing loads until a visitor accepts) and only tracks page views; every conversion is sent server-side.

  • The Belief Map has a second shape: Circle.

    A layout toggle arranges every concept on an organized ring, grouped by kind — doctrine, themes, people, places — with quiet group labels and connection arcs through the middle. Tap a belief and its connections light up in sage across the circle. Freeform stays the default.

  • Find any concept instantly.

    A search control on the map flies the camera to a concept and opens its card — including concepts currently hidden by an active focus filter.

  • Arrange the map your way — it stays that way.

    Drag concepts where you want them in Freeform; your placements survive reloads, and new concepts settle naturally around them. A quiet "Reset arrangement" action brings back the organic layout.

  • Explore a belief with Selah without leaving the map.

    The belief card's new button opens the on-page Companion dock with a starter prompt already typed — edit and send. A draft you were already writing is never overwritten.

  • The map tells you where to look.

    A caption reads like "125 beliefs · 4 you're wrestling with · Jesus Christ is your most connected," with tap-throughs. Concepts added this week carry a gold tick; beliefs you're wrestling with carry a warm underline. One Focus menu replaces the old row of filter chips.

Changed

  • The map breathes now.

    Zoomed out, lesser labels rest as dots and fade in as you zoom — 200 concepts no longer collide into an unreadable pile, and labels cannot overlap at any zoom level. The map settles with a short exhale on load, flexes around your hand when you drag, and lights a concept's connections on hover. At rest it is perfectly still, and reduced-motion preferences are honored throughout.

  • Switching filters no longer scrambles the layout — the map keeps its shape and simply adds or removes concepts.
  • One companion brain.

    The legacy hand-rolled companion loop is gone. Every surface — web dock, the Companion screen, Telegram, and the admin test console — now runs exclusively on the AI SDK 7 engine that went GA in 0.39.28.0. Renaming a chat now rides the same v2 API as everything else.

  • Your reading plan stays in sync across the app.

    Mark today's reading done in the reader and the stream reflects it immediately, no reload — the two views now read from one shared source instead of tracking the day separately. Reopening the reader is also snappier: today's plan is cached, so it no longer re-fetches every time.

Internal

  • Deleted: `callClaudeWithTools` (~410 lines) + legacy-only debug capture, `companion-legacy-client.

    tsx, /api/companion/chat (GET/POST/PATCH; rename PATCH ported to /api/companion/v2 first), CORE_TOOL_SUBSET, dead normalizeCompanionHistory`. Net −2,604 lines.

  • Flags retired: `companion_v2` and `companion_v2_engine` reads removed everywhere; the v2 route and `/companion` page are unconditional (auth + entitlements still gate).

    A source-pin test now asserts the legacy symbols and flag strings stay gone.

  • `runEngineTurn` now populates the admin debug seam (`_debugState`: system prompt, messages sent, usage, estimated cost, latency), so `/companion-test` works on the engine path — previously an accepted gap.
  • `toolNames` is required on `runCompanionTurn`/`buildCompanionToolRegistry` (no silent-default tool surface).
  • Verified: tsc 0 errors; 192 test files, 2308 passed / 10 skipped (delta vs pre-cleanup: −7 tests, all from the deleted dead-code test file).

July 7, 2026

v0.39.27.2 → v0.39.28.0

The companion no longer repeats itself in long conversations.

Fixed

  • The companion no longer repeats itself in long conversations.

    When you chatted alongside a note, the note's full text was silently re-attached to every message you sent and stored that way, so the model saw the same note once per turn (and your own bubbles showed the pasted note on reload). Attachments now live in one deduplicated context block — each note appears exactly once per reply, re-read fresh so the companion always sees your latest edits — and your messages are stored clean. Telegram conversations benefit too: the replayed history is now capped, so week-long threads stop ballooning.

  • The companion now keeps hold of the text you selected.

    Highlight a line in a note (or a verse in the Reader), then click into the companion to type — your highlight used to vanish the instant you started writing, so "what does this mean?" arrived with nothing attached. The selection now stays put until you send, clear it, or move to another page, so your question lands on exactly what you were looking at.

Changed

  • The whole companion now runs on one engine.

    Web dock, the Companion screen, and Telegram all route through the AI SDK v7 engine (runCompanionTurn) with the full 27-tool surface — prayers, devotional pivots, heartbeat config, and reader grounding tools are now available on the engine path, with the same prep-mode and grounding gates as before. companion_v2 and companion_v2_engine default ON; both remain readable as per-user kill switches until the legacy loop is deleted.

Internal

  • Attachments: `unionAttachmentIds` + `buildAttachmentsBlock` (escaped `<attachments>` system-prompt block, per-item + aggregate token caps, priority-ordered under budget pressure); raw message persistence with attachment ids in `companion_messages.

    metadata`.

  • Transcript budget: `clampHistoryToBudget` (`HISTORY_MAX_TOKENS` = 24k, context-budget.

    ts) on both the legacy loop and the v2 route; never drops the current turn, never opens on an assistant row.

  • Engine adapter: buffered `runEngineTurn` in companion-service (tool-call parts drive step events / Telegram drafts, parts persisted for identical history replay, final-response guarantee + orphan-intent instrumentation ported).
  • `recordSessionToolSideEffects`: capturesCreated/prayersCreated session bookkeeping now also fires on the v2 route (it previously only ran in the legacy loop, starving session synthesis, the learning digest, and weekly arcs for engine-path turns).
  • Deps: bun.

    lock actually moved to ai@7.0.17 / @ai-sdk/anthropic@4.0.9 / @ai-sdk/react@4.0.18 (PR #567 had bumped package.json + package-lock only; bun installs were still resolving ai@6, which also explains the 23 phantom tsc errors and the provider 404). tsc is now clean. Verified: 2320 tests, companion-chat eval 100%, spike:ai-sdk GO (cache read 5769 tokens on turn 2).

July 5, 2026

v0.39.27.1

The companion button no longer blocks "Add to note" while selecting.

Fixed

  • The companion button no longer blocks "Add to note" while selecting.

    When you pick multiple items from your Stream, the floating companion button now steps aside so the selection bar's "Add to note" control is always reachable.

July 4, 2026

v0.39.26.0 → v0.39.27.0

Picking a reading plan is a browse, not a scroll.

Changed

  • Picking a reading plan is a browse, not a scroll.

    Plans now sit two to a row as cards, and "Build your own" — tell Selah a goal, get a plan drafted around it — leads the page instead of hiding below the catalog. The most-picked plan sits beside it with a quiet badge.

  • A generated plan you never started can be removed.

    Hover a card under "Your plans" (on a phone, the control is always visible) and a two-tap Remove clears it out. Plans you've actually read stay put — those are history, managed from settings.

  • Reading on your phone got the polish pass.

    Open a tool panel and it rises as a sheet; tap the passage behind it and it slides away, without that tap also selecting a verse or jumping you elsewhere. Type into a note or word-study field and the panel lifts clear of the keyboard so you can see what you're writing.

  • The book scrubber looks like the control it is.

    The bar at the foot of the reader is now a floating, color-coded card — each section of the Bible in its own hue — and pulling up opens a compact chapter strip that keeps your target chapter centered as you sweep. On a trackpad or mouse the whole book is one swipe away.

Added

  • Finishing a plan is acknowledged where you finished it.

    Marking the final day read brings a quiet gold moment — "You finished what you started." — with a link to the full story on your Stream. Before, the reading bar simply disappeared.

  • The daily Telegram message names what's waiting — gently.

    If earlier readings are unread, the message closes with "3 earlier readings are set aside — they will keep. Read at your own pace." Being behind is no longer invisible, and never shamed.

  • The companion travels with you.

    The collapsible companion panel now runs on the same engine as the full companion screen and knows what you're looking at: highlight a verse or open a note and your next message carries that context, so "what does this mean?" lands on the passage in front of you instead of starting cold.

Fixed

  • Custom plans built from one-chapter books no longer fail.

    Asking for Obadiah, Philemon, 2–3 John, or Jude used to error out after several silent retries — the generator kept inventing chapters those books don't have. It now corrects itself on the first try.

  • The reader opens faster when you're on a plan.

    Today's reading is remembered for a few minutes instead of re-fetched on every visit, and marking a day read anywhere clears it immediately — including the moment you switch accounts on a shared device.

July 2, 2026

v0.39.22.0 → v0.39.25.0

Selah asks before rewriting your note.

Added

  • Selah asks before rewriting your note.

    When the companion wants to replace a section of a note — the one edit that's hard to unwind — the conversation pauses with a small card: "Selah wants to rewrite the section 'Application' of your note." Allow lets it happen; Not now skips it and the conversation carries on. Saving thoughts, prayers, and additions never ask — only full rewrites do. The step trail records what you decided, and answering works even if you come back to the conversation later.

  • Scripture in Telegram reads like scripture.

    Verses Selah sends now arrive as set-apart quote blocks instead of italics, and a full chapter comes through collapsed with a "show more" — where before it was dropped and only the reference survived. Scripture references in Telegram messages also link straight to that chapter in your reader.

  • Find any passage with one gesture.

    The reader's book bar is now a true scrubber: press and slide to flip through the 66 books, color-coded by section — Law, History, Wisdom, Prophets, Gospels, Letters — then pull up to open a book and sweep through its chapters. Let go and you're there. On a phone, resting your thumb at the screen edge keeps a long book flowing past; with a mouse or trackpad the bar becomes a ruler for the whole book, so Psalm 119 is one sweep away instead of a dozen.

  • Tapped the wrong book? Take it back.

    A tap still jumps instantly — and a small "Back" button follows it for a few seconds, returning you to the exact chapter you were reading.

  • Send several captures into a note at once.

    Select multiple captures in your Journal and add them together, to a new note or an existing one, instead of one at a time.

  • Turn a conversation into a note.

    Any companion session can become a real note from the session's ⋯ menu — your words set apart as quotes, Selah's replies as prose, with the summary and captures included. The note opens beside the chat, joins your library, and Selah can find it in her memory right away.

  • Edit the living note without leaving the conversation.

    The note panel beside the chat now has an edit toggle: type directly, it saves as you go, and "Open in editor" is still there for the full page. If Selah edits the same note while you're typing, a calm banner lets you keep your version or take hers — nothing is lost either way.

Fixed

  • Your weekly reflection no longer silently vanishes.

    An intermittent formatting quirk in the model's response could drop a week's reflection entirely — it ran hourly in production logs. Those responses now recover instead of being discarded.

  • Long Telegram replies always arrive.

    A long reply containing a quote could fail to send at all (you'd get a generic error); messages now split cleanly at any length.

  • A stuck tool or dropped connection now fails honestly

    — the companion gives up after a bounded wait instead of leaving you watching a spinner until the request dies on its own.

  • A failed save on your phone is no longer silent.

    If autosave can't reach the server, "Couldn't save — Retry" now shows on every screen size, not just desktop.

  • Notes that start with a list, quote, or scripture passage show a preview again

    on the notes list, instead of a blank row.

  • The "your note types are now folders" banner is retired.

    It kept reappearing after you dismissed it, and greeted new members about a change that predated them.

  • Steadier small moments.

    The gold glow after an AI edit no longer nudges your text while it settles, the slash-command menu stays on screen on phones, the sharing panel closes with Escape, and typing in it no longer loses focus mid-word when a background save finishes.

  • The chat fits your screen properly.

    The conversation column now uses the same comfortable reading width as Notes, small tablets no longer squeeze the chat behind the sessions rail, the message box sits clear of the iPhone home indicator, and phones get sensible margins.

  • Buttons on the companion screen respond to your press

    — the same gentle squeeze as everywhere else in the app, and it stays quiet if your device asks for reduced motion.

Changed

  • The companion offers to save an insight instead of following up with another question.

    When you share something meaningful, Selah now prioritizes offering to keep it over chasing a new thread.

  • Selah's first reply to your very first thought doesn't force an odd trailing question.

    A short mirror of your own words can stand on its own now, instead of every reply needing a question tacked onto the end.

  • Notes open instantly.

    Opening a note used to make three round-trips before anything appeared. Now the page arrives with your note already on it — one quiet loading moment, then your words. The browser tab shows the note's title, too.

  • The editor is ready before you need it.

    While you're on the notes list, Selah quietly fetches the editor in the background, so opening a note doesn't wait on the download.

  • The formatting toolbar works by touch and keyboard.

    On a phone it now appears below your selection — clear of the system copy/paste bubble — and wraps to fit small screens. Every button can be reached with Tab and Enter, and the AI clean-up sparkle explains itself when the selection is too short instead of doing nothing.

  • A tidier note screen on your phone.

    Sharing, handout export, and AI clean-up live in one "…" menu on small screens; deleting asks with properly sized Yes and Cancel; and one accent color marks your active filters.

  • Highlighting on your phone stays out of your way.

    Picking a highlight color no longer dims and blocks the page: a slim tray rises from the bottom, your verses stay visible and adjustable above it, and the tray quotes exactly what you've selected — updating live as you move the selection handles.

  • The reader feels lighter under your fingers.

    Selecting verses, tapping words for word studies, and resizing the study panels no longer make the page stutter. Panel drags glide, word taps respond instantly, and the page stays still while you work.

  • Easier to grab, easier to press.

    Panel handles, cross-reference markers, and footnote letters all have properly sized touch targets now; buttons give the same gentle press feedback as the rest of the app; and the reader respects reduced-motion settings and the iPhone home indicator.