<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>urn:uuid:c2e2b881-df31-5959-a16d-25ea7fe6d180</id>
  <title>ledger releases</title>
  <subtitle>What shipped in ledger</subtitle>
  <updated>2026-09-28T00:00:00Z</updated>
  <author><name>ledger</name></author>
  <generator uri="https://github.com/kylebegeman/ledger">Ledger</generator>
  <link rel="self" type="application/atom+xml" href="https://kylebegeman.github.io/ledger/changelog/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/"/>
  <entry>
    <id>urn:uuid:19e237d4-180e-5063-be7e-e90bec8e20e4</id>
    <title>Ledger v0.9.5</title>
    <published>2026-09-28T00:00:00Z</published>
    <updated>2026-09-28T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.5"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Explore repository history in three views: Overview for recent changes, activity, releases, and health; Records for focused search and filtering; and Timeline for a chronological view grouped by month.&lt;/li&gt;&lt;li&gt;Browse with compact record rows, rounded filter controls, and custom dropdown menus. The desktop sidebar groups record types and deeper filters, while smaller screens keep those controls within reach above the results.&lt;/li&gt;&lt;li&gt;Read the evidence beside a change: its rationale, invariants, verification, files, and linked decisions. Step between records without closing the panel, expand the relationship map when needed, and use the command palette and keyboard shortcuts to navigate.&lt;/li&gt;&lt;li&gt;Use near-white light mode or charcoal/slate dark mode, both with blue accents. The reader follows your system preference until you choose Light or Dark, then remembers that choice across visits.&lt;/li&gt;&lt;li&gt;Meet Ledger&amp;#39;s new punched-receipt icon and wordmark. The README now leads with a 24-second recorded tour, a shorter setup path, and examples for supported coding agents.&lt;/li&gt;&lt;li&gt;Try the [live reader](https://kylebegeman.github.io/ledger/) and [public changelog](https://kylebegeman.github.io/ledger/changelog/), rebuilt from the project&amp;#39;s records on every push to master. Public releases have direct links and an Atom feed.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:daf4fdd9-8011-574e-85ac-46fc44dd0ef1</id>
    <title>Ledger v0.9.4</title>
    <published>2026-09-20T00:00:00Z</published>
    <updated>2026-09-20T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.4"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger stale&lt;/code&gt; now searches the files a record&amp;#39;s coverage patterns cover. A record that lists &lt;code class=&quot;inline-code&quot;&gt;src/**&lt;/code&gt; or &lt;code class=&quot;inline-code&quot;&gt;plugins/*/adapter.json&lt;/code&gt; beside a few exact files no longer reports the symbols and anchors that live under the pattern as drift: the patterns become Git &lt;code class=&quot;inline-code&quot;&gt;:(glob)&lt;/code&gt; pathspecs searched with &lt;code class=&quot;inline-code&quot;&gt;git grep&lt;/code&gt;. When the search cannot run, because Git is missing or a pathspec is unusable, the pattern reports nothing rather than guessing.&lt;/li&gt;&lt;li&gt;A Changed Files heading that names a directory path, such as &lt;code class=&quot;inline-code&quot;&gt;### internal/composer, CHANGELOG.md&lt;/code&gt;, now covers the record&amp;#39;s files under that directory, so the block&amp;#39;s anchors are checked against them. A heading word without a path separator, as in &amp;quot;Tests, skill, and docs&amp;quot;, stays prose.&lt;/li&gt;&lt;li&gt;An anchor that names a path the tree still holds, by full path, by a file name under some directory, or as a directory itself, is a reference to that file rather than content to find inside another. A bare file name counts only when its tail looks like an extension, so a member name such as &lt;code class=&quot;inline-code&quot;&gt;Server.throttle&lt;/code&gt; is still checked as a member name.&lt;/li&gt;&lt;li&gt;Together these take the stale report on a 12,000 file repository from 169 signals to 14. The pattern search runs once per record and block file list and only for records that name patterns, so &lt;code class=&quot;inline-code&quot;&gt;ledger stale&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; take about 15 seconds on a tree that size, against well under a second where receipts list exact files.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:a99db2b1-e65a-5498-827f-261c88d77b18</id>
    <title>Ledger v0.9.3</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.3"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger hooks install --host codex --launcher&lt;/code&gt; writes Codex hooks that run &lt;code class=&quot;inline-code&quot;&gt;node .ledger/bin/ledger.mjs&lt;/code&gt;, plus that script, which runs your &lt;code class=&quot;inline-code&quot;&gt;agents.command&lt;/code&gt;. Codex approves hooks by their definition, so later installs with a new &lt;code class=&quot;inline-code&quot;&gt;--command&lt;/code&gt; rewrite only the script and Codex keeps the approval. Start Codex at the project root so the hooks find the script. Later installs keep the form the hook file already uses, and &lt;code class=&quot;inline-code&quot;&gt;--launcher=false&lt;/code&gt; switches back and removes the script.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; accepts hooks that run the launcher, and warns when the script is missing, runs a different command, or is out of date.&lt;/li&gt;&lt;li&gt;When no tracked file matches &lt;code class=&quot;inline-code&quot;&gt;git.requireEntryFor&lt;/code&gt;, the doctor symbols check names those patterns instead of suggesting the TypeScript parser. When TypeScript sits beside Go, Rust, Python, or Swift, its message says those symbols come from Ledger&amp;#39;s outlines and need nothing installed.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:c4dbee7c-2e69-5622-832c-04ad37809b58</id>
    <title>Ledger v0.9.2</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.2"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;feedback&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;backlog new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;decision new&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;promote&lt;/code&gt; take section bodies with &lt;code class=&quot;inline-code&quot;&gt;--section Heading=text&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;--sections-file&lt;/code&gt;, and the JSON API and MCP take them as &lt;code class=&quot;inline-code&quot;&gt;sections&lt;/code&gt;. &lt;code class=&quot;inline-code&quot;&gt;ledger new&lt;/code&gt; also takes &lt;code class=&quot;inline-code&quot;&gt;--file&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;--doc&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;--symbol&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;--related&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;--decision&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;--backlog&lt;/code&gt;, and a docs impact declaration, so one command can write a receipt that passes &lt;code class=&quot;inline-code&quot;&gt;ledger ready&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger update &amp;lt;id&amp;gt;&lt;/code&gt; changes a record in place: its title and heading, status, list fields, docs impact, or sections. A list flag replaces that whole list. Over MCP it is &lt;code class=&quot;inline-code&quot;&gt;ledger_update&lt;/code&gt;, which asks the user to confirm first.&lt;/li&gt;&lt;li&gt;The MCP tools that write records now check the call before asking, so the user is never asked to confirm a call that would fail, and the confirmation names the sections a call writes.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger context&lt;/code&gt; prints one review packet for the working tree, the staged diff, or a &lt;code class=&quot;inline-code&quot;&gt;--base&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;--head&lt;/code&gt; range. For each changed file it gives coverage, docs impact, and the newest records that mention it with their invariants and conflict rules, and it lists the change&amp;#39;s receipts with their verification. It fits a token budget, and it is also the &lt;code class=&quot;inline-code&quot;&gt;ledger_context&lt;/code&gt; MCP tool and an API route.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; checks installed Claude Code, Codex, and Cursor hooks. It warns when a hook runs a command other than &lt;code class=&quot;inline-code&quot;&gt;agents.command&lt;/code&gt;, or when that command fails or reports a different Ledger, because hosts skip failing hooks without a message. &lt;code class=&quot;inline-code&quot;&gt;ledger doctor --fix&lt;/code&gt; first repairs interrupted writes, a stale lock or engine record, a stale cache, stale indexes, and a missing reader, and never edits records.&lt;/li&gt;&lt;li&gt;Drafts, hook drafts, and &lt;code class=&quot;inline-code&quot;&gt;ledger stale&lt;/code&gt; read Go, Rust, Python, and Swift declarations, with methods and members named &lt;code class=&quot;inline-code&quot;&gt;Type.member&lt;/code&gt;, or &lt;code class=&quot;inline-code&quot;&gt;Type::member&lt;/code&gt; in Rust. A draft names the method a diff touched rather than the whole type, and &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; says which languages are outlined. No toolchain or new dependency is needed.&lt;/li&gt;&lt;li&gt;In the internal reader, a record&amp;#39;s files, patterns, and symbols open a list of every record that names them. Its relationships open the linked records, and a Referenced by list shows the records that link to it. The views have their own URLs and work from a &lt;code class=&quot;inline-code&quot;&gt;file:&lt;/code&gt; URL.&lt;/li&gt;&lt;li&gt;The reader&amp;#39;s command palette suggests matching files, symbols, and areas before records. Typing right after opening it keeps every character.&lt;/li&gt;&lt;li&gt;The record panel copies the record&amp;#39;s link, its source path, the &lt;code class=&quot;inline-code&quot;&gt;ledger packet&lt;/code&gt; command for it, and its agent-ready context.&lt;/li&gt;&lt;li&gt;Both reader profiles mark records that are new or changed since your last visit and can list only those. The state stays in your browser.&lt;/li&gt;&lt;li&gt;Row and panel summaries read as plain prose, without list or bold markers.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger render --profile public&lt;/code&gt; also writes &lt;code class=&quot;inline-code&quot;&gt;feed.xml&lt;/code&gt;, an Atom feed of the newest 50 releases, and gives each release a permalink such as &lt;code class=&quot;inline-code&quot;&gt;#v0.9.2&lt;/code&gt;. Both profiles carry a description, Open Graph tags, and an icon. &lt;code class=&quot;inline-code&quot;&gt;--site-url&lt;/code&gt; makes the canonical link and the feed&amp;#39;s links absolute. &lt;code class=&quot;inline-code&quot;&gt;docs/PUBLISHING.md&lt;/code&gt; has a GitHub Pages workflow.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;docs/COMMANDS.md&lt;/code&gt; lists every command&amp;#39;s usage, help, and flags, generated from the same registry as &lt;code class=&quot;inline-code&quot;&gt;ledger help&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The reader&amp;#39;s embedded script and stylesheet are minified, and detail chunks are smaller, which offsets the new features&amp;#39; size.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:70d574b9-6b71-58cb-a3e2-7b088d8e935b</id>
    <title>Ledger v0.9.1</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.1"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger mcp&lt;/code&gt; and the engine&amp;#39;s &lt;code class=&quot;inline-code&quot;&gt;/mcp&lt;/code&gt; speak MCP 2026-07-28 and the 2025 revisions from the same tools, resources, and prompts. Clients on the 2025 revisions keep working.&lt;/li&gt;&lt;li&gt;New MCP tools write records: &lt;code class=&quot;inline-code&quot;&gt;ledger_new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_feedback&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_backlog_new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_decision_new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_promote&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_session_start&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_session_note&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;ledger_session_close&lt;/code&gt;. Each one asks the user to confirm first, naming the action and the project. It writes nothing unless the user accepts with the box checked. A confirmation covers only the exact call it was asked for and expires after ten minutes.&lt;/li&gt;&lt;li&gt;A declined confirmation returns &lt;code class=&quot;inline-code&quot;&gt;confirmation-declined&lt;/code&gt;. A client that cannot show one gets &lt;code class=&quot;inline-code&quot;&gt;confirmation-unavailable&lt;/code&gt; before anything is asked. Neither writes anything.&lt;/li&gt;&lt;li&gt;Over the engine&amp;#39;s HTTP endpoint, only 2026-07-28 clients get the write tools, and those tools write only to the engine&amp;#39;s own project. 2025-era clients can confirm over &lt;code class=&quot;inline-code&quot;&gt;ledger mcp&lt;/code&gt; when they support elicitation.&lt;/li&gt;&lt;li&gt;On protocol 2026-07-28, the tool, prompt, and template lists carry one-hour cache hints, and the engine notifies subscribed clients when records change.&lt;/li&gt;&lt;li&gt;Ledger depends on &lt;code class=&quot;inline-code&quot;&gt;@modelcontextprotocol/server&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;@modelcontextprotocol/node&lt;/code&gt; instead of &lt;code class=&quot;inline-code&quot;&gt;@modelcontextprotocol/sdk&lt;/code&gt;, so a production install is 7 packages instead of 94.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;createLedgerMcpHttpHandler&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;serveLedgerMcpStdio&lt;/code&gt; join the library&amp;#39;s exports. &lt;code class=&quot;inline-code&quot;&gt;listLedgerMcpTools&lt;/code&gt; and the operations contract mark the tools that ask for confirmation.&lt;/li&gt;&lt;li&gt;On &lt;code class=&quot;inline-code&quot;&gt;/mcp&lt;/code&gt;, GET and DELETE now answer 405. Before, GET opened an event stream that never carried a message, and DELETE answered 200 without doing anything.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger hooks install --host codex&lt;/code&gt; now says where to trust the hooks: &lt;code class=&quot;inline-code&quot;&gt;/hooks&lt;/code&gt; in the Codex CLI, or the Hooks page of the Codex app&amp;#39;s settings. It also says to trust them again after the hook commands change, because Codex skips a changed hook until then.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;docs/SCHEMA.md&lt;/code&gt; lists the product note statuses: &lt;code class=&quot;inline-code&quot;&gt;captured&lt;/code&gt; while follow-ups are open, &lt;code class=&quot;inline-code&quot;&gt;resolved&lt;/code&gt; once they ship.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:b0b23c5b-024e-566b-bd5c-d1070c3d2c68</id>
    <title>Ledger v0.9.0</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.9.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;The static reader and the public changelog use Dossier&amp;#39;s visual system in light and dark themes: plum-tinted neutrals, borders in place of shadows, system font stacks with no font requests, and one motion curve. Ledger&amp;#39;s emerald accent and mark stay.&lt;/li&gt;&lt;li&gt;Color marks status only. Landed, released, accepted, and shipped records are teal. Drafts, planned, proposed, and in-progress work, active sessions, and captured notes are violet. Blocked and rejected records are coral, and the rest are neutral. Kind badges are neutral outline chips, and superseded, deprecated, and expired records show a neutral dot instead of a red one.&lt;/li&gt;&lt;li&gt;The masthead is shorter, so records start higher on the page. From 1100 pixels wide, the facet rail sits on the left with a label over each group.&lt;/li&gt;&lt;li&gt;The theme toggle cycles Auto, Light, and Dark, shows the current choice, and can return to following the system setting.&lt;/li&gt;&lt;li&gt;Muted text, the search placeholder, and warning text in the light theme now meet 4.5:1 contrast, and text inputs and selects have a 3:1 edge. The record list no longer scrolls sideways at tablet widths.&lt;/li&gt;&lt;li&gt;The search index, its shards, &lt;code class=&quot;inline-code&quot;&gt;graph.json&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;graph/contracts.json&lt;/code&gt; are written as compact JSON, and search shards fill up to &lt;code class=&quot;inline-code&quot;&gt;render.budgets.maxSearchIndexBytes&lt;/code&gt;, passing it only when a single record is larger. Before, a shard of long records could exceed the budget and fail &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:df94b416-b5f5-5bde-b2a2-a2f4dba2b9fc</id>
    <title>Ledger v0.8.2</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.8.2"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Hook drafts and &lt;code class=&quot;inline-code&quot;&gt;ledger new --from-diff&lt;/code&gt; list only the symbols a change touched. Each file&amp;#39;s anchors are the declarations or the innermost Markdown section that hold a changed line, headings inside fenced code are ignored, and a file whose change sits outside every symbol keeps a TODO anchor. New files still list their symbols, up to twelve.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger ci&lt;/code&gt; prints each failing file with the reason, not just counts. When a Claude Code, Codex, or Cursor session touched a file that coverage or docs impact reports, &lt;code class=&quot;inline-code&quot;&gt;ci&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;coverage&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;docs impact&lt;/code&gt; name that session and its draft receipt, and say to finish the draft rather than run &lt;code class=&quot;inline-code&quot;&gt;ledger new&lt;/code&gt;. The checks still fail until the receipt is finished, and GitHub annotations leave these hints out. The JSON output of all three commands gains a &lt;code class=&quot;inline-code&quot;&gt;sessions&lt;/code&gt; list.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger release &amp;lt;version&amp;gt; --include-unreleased --assign --update&lt;/code&gt; adds receipts that landed after a release record was written to its &lt;code class=&quot;inline-code&quot;&gt;entries&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;## Changes&lt;/code&gt;, and keeps the summary, public notes, verification, and known issues you wrote. &lt;code class=&quot;inline-code&quot;&gt;--write&lt;/code&gt; still refuses to overwrite a record.&lt;/li&gt;&lt;li&gt;Symbol extraction no longer crashes next to TypeScript 7, which ships no JavaScript API: drafts fall back to the regex extractor, and &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; says why. Installing &lt;code class=&quot;inline-code&quot;&gt;@typescript/typescript6&lt;/code&gt; beside TypeScript 7 restores parsed symbols, and TypeScript 5.0 to 5.4 now parse too.&lt;/li&gt;&lt;li&gt;The MCP SDK is 1.30.0, zod is 4.6.5, and yaml is 2.9.1, and the composite GitHub Action pins &lt;code class=&quot;inline-code&quot;&gt;actions/setup-node&lt;/code&gt; v7.0.0.&lt;/li&gt;&lt;li&gt;The README gives the measured cost of running hooks through npx, about 0.3 seconds per hook, and how an installed copy avoids it.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:240e8213-29dc-5dec-96dc-505c0fd7345a</id>
    <title>Ledger v0.8.1</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.8.1"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Hooks no longer lose edits when an agent changes several files at once. The workspace write lock waits briefly for another Ledger process instead of failing, and a hook whose record changed while it waited re-reads and retries, so every edited path reaches the session record and its draft.&lt;/li&gt;&lt;li&gt;Ledger works from a directory inside a Git repository, such as &lt;code class=&quot;inline-code&quot;&gt;packages/app/.ledger&lt;/code&gt;. Changed paths from Git are made relative to that directory, so hook drafts, &lt;code class=&quot;inline-code&quot;&gt;coverage&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;docs impact&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;verify&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;new --from-diff&lt;/code&gt; see the project&amp;#39;s own files.&lt;/li&gt;&lt;li&gt;A draft the hooks create is always announced on the next prompt, even when it reuses the id of a draft you deleted. &lt;code class=&quot;inline-code&quot;&gt;ledger cache clear&lt;/code&gt; now also removes the notice store, which forgets sessions that no longer exist.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger hooks install&lt;/code&gt; keeps a command you added to Ledger&amp;#39;s own hook group instead of adding a second Ledger group, and &lt;code class=&quot;inline-code&quot;&gt;ledger agents --write&lt;/code&gt; replaces every managed block so a file never carries two versions.&lt;/li&gt;&lt;li&gt;Hook drafts from wide diffs stay readable: the default title names at most three areas, drafts keep the eight most touched areas, and symbols are capped. Codex &lt;code class=&quot;inline-code&quot;&gt;apply_patch&lt;/code&gt; edits sent as an argument list are recorded, and a hook payload without a session id is ignored with a message instead of filed under another session.&lt;/li&gt;&lt;li&gt;Hook and authoring edits keep a record&amp;#39;s line endings, so session records on Windows checkouts stay CRLF.&lt;/li&gt;&lt;li&gt;The reader ranks search results exactly as &lt;code class=&quot;inline-code&quot;&gt;ledger search&lt;/code&gt; does; before, it ignored part of each record&amp;#39;s text and dropped matches. Opened from disk, the command palette lists and filters records instead of staying empty, and command-click on a record opens it in a new tab.&lt;/li&gt;&lt;li&gt;Inline code in the reader shows a visible chip in the light theme, a summary that is one long code span keeps its text, and code spans are found in linear time.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger verify --run&lt;/code&gt; matches environment assignments as part of the allowlisted command. A Verification bullet such as &lt;code class=&quot;inline-code&quot;&gt;LEDGER_UPDATE_CONTRACT=1 npx vitest run&lt;/code&gt; runs only when &lt;code class=&quot;inline-code&quot;&gt;verification.allow&lt;/code&gt; lists that assignment, and one that sets &lt;code class=&quot;inline-code&quot;&gt;NODE_OPTIONS&lt;/code&gt; or &lt;code class=&quot;inline-code&quot;&gt;PATH&lt;/code&gt; without a matching pattern is skipped.&lt;/li&gt;&lt;li&gt;Only change entries cover a path. Under &lt;code class=&quot;inline-code&quot;&gt;git.coverage: any&lt;/code&gt;, session records, backlog items, and decisions no longer satisfy coverage, which now matches docs impact, and &lt;code class=&quot;inline-code&quot;&gt;ledger ci&lt;/code&gt; messages no longer say &amp;quot;in this change set&amp;quot; under &lt;code class=&quot;inline-code&quot;&gt;any&lt;/code&gt;. A &lt;code class=&quot;inline-code&quot;&gt;docsImpact&lt;/code&gt; declaration whose reason is still a TODO never counts as evidence, whatever its status. The docs impact JSON field &lt;code class=&quot;inline-code&quot;&gt;historicalFiles&lt;/code&gt; is now &lt;code class=&quot;inline-code&quot;&gt;earlierEvidenceFiles&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger adopt&lt;/code&gt; ignores &lt;code class=&quot;inline-code&quot;&gt;vendor/&lt;/code&gt; at any depth and never makes it a coverage root, ignores build output inside packages, and leaves Make targets and npm scripts that reset, migrate, format, serve, start, or watch out of the proposed allowlist, which lists at most 40 npm scripts.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger docs reconcile&lt;/code&gt; refuses a routing path it cannot read, such as a directory or symlink, even with &lt;code class=&quot;inline-code&quot;&gt;--force&lt;/code&gt;, and says why.&lt;/li&gt;&lt;li&gt;Under &lt;code class=&quot;inline-code&quot;&gt;git.coverage: any&lt;/code&gt;, an earlier receipt covers a changed file only when it names that file. A pattern such as &lt;code class=&quot;inline-code&quot;&gt;src/**&lt;/code&gt; still covers files from a receipt in the pull request, but one in an old receipt no longer exempts a directory from every later change, for coverage and docs impact alike. &lt;code class=&quot;inline-code&quot;&gt;ledger coverage&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger ci&lt;/code&gt; report such a file as matched only by patterns in earlier receipts and ask you to name it in a receipt.&lt;/li&gt;&lt;li&gt;The release workflow takes the GitHub Release notes from &lt;code class=&quot;inline-code&quot;&gt;ledger release notes&lt;/code&gt;, and CI regenerates the README&amp;#39;s terminal cards on a pinned date and fails when one is out of date.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:605aa4ff-ee37-5b98-bf1e-69293576a3ef</id>
    <title>Ledger v0.8.0</title>
    <published>2026-09-17T00:00:00Z</published>
    <updated>2026-09-17T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.8.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Agents now hear about the receipt the hooks drafted for them. A new &lt;code class=&quot;inline-code&quot;&gt;user-prompt-submit&lt;/code&gt; hook for Claude Code and Codex names the draft once on the next prompt, and session start lists every receipt the session links, so the agent finishes the draft instead of creating another. Landing a receipt mid-session no longer produces a second draft. Re-run &lt;code class=&quot;inline-code&quot;&gt;ledger hooks install&lt;/code&gt; to add the hook; Codex asks you to approve the hooks again.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;agents.command&lt;/code&gt; in &lt;code class=&quot;inline-code&quot;&gt;.ledger/config.yaml&lt;/code&gt; sets the one command that runs Ledger in a repository, such as &lt;code class=&quot;inline-code&quot;&gt;npx ledger&lt;/code&gt; or a pinned &lt;code class=&quot;inline-code&quot;&gt;npx --yes @kylebegeman/ledger@0.8.0&lt;/code&gt;. &lt;code class=&quot;inline-code&quot;&gt;ledger hooks install --command&lt;/code&gt; saves it, and the hooks, the &lt;code class=&quot;inline-code&quot;&gt;AGENTS.md&lt;/code&gt; block, the skill, and the context the hooks inject all use it. For Claude Code, &lt;code class=&quot;inline-code&quot;&gt;--import-agents&lt;/code&gt; adds the &lt;code class=&quot;inline-code&quot;&gt;@AGENTS.md&lt;/code&gt; import to &lt;code class=&quot;inline-code&quot;&gt;CLAUDE.md&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger adopt&lt;/code&gt; reads the tracked tree and writes a configuration that fits it: coverage roots for the tracked top-level directories, ignores for generated code such as templ and sqlc output, a proposed &lt;code class=&quot;inline-code&quot;&gt;verification.allow&lt;/code&gt; from the detected toolchain with release and deploy targets left out, and &lt;code class=&quot;inline-code&quot;&gt;git.coverage: any&lt;/code&gt;. &lt;code class=&quot;inline-code&quot;&gt;ledger init&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger adopt&lt;/code&gt; also add a marked block to &lt;code class=&quot;inline-code&quot;&gt;.gitignore&lt;/code&gt; for Ledger&amp;#39;s derived files.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger docs reconcile&lt;/code&gt; no longer overwrites routing files Ledger did not generate. It explains the refusal and exits 1 unless &lt;code class=&quot;inline-code&quot;&gt;--force&lt;/code&gt; is passed, and &lt;code class=&quot;inline-code&quot;&gt;ledger adopt&lt;/code&gt; points &lt;code class=&quot;inline-code&quot;&gt;docs.routing&lt;/code&gt; under &lt;code class=&quot;inline-code&quot;&gt;.ledger/&lt;/code&gt; when curated routing files exist. A &lt;code class=&quot;inline-code&quot;&gt;START_HERE.md&lt;/code&gt; from an older &lt;code class=&quot;inline-code&quot;&gt;init&lt;/code&gt; that never ran reconcile needs &lt;code class=&quot;inline-code&quot;&gt;--force&lt;/code&gt; once.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger session prune --write&lt;/code&gt; keeps expired sessions that another record links and closes them instead of deleting them; session records are meant to be committed. An active session past its expiry, such as a Claude desktop tab closed with &lt;code class=&quot;inline-code&quot;&gt;/exit&lt;/code&gt;, stops collecting edits, and the next session keeps its linked receipts.&lt;/li&gt;&lt;li&gt;Hook drafts no longer list session records or templates, start with a neutral &lt;code class=&quot;inline-code&quot;&gt;Changes to &amp;lt;areas&amp;gt;&lt;/code&gt; title that &lt;code class=&quot;inline-code&quot;&gt;ledger ready&lt;/code&gt; asks the agent to replace, and record edits Codex makes with &lt;code class=&quot;inline-code&quot;&gt;apply_patch&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Hooks no longer draft a duplicate of a receipt you wrote yourself. A receipt that is new or modified in the working tree covers its files like one the session links, a link named in either record counts, and only touched files that still differ from &lt;code class=&quot;inline-code&quot;&gt;HEAD&lt;/code&gt; are pending, so a receipt written with &lt;code class=&quot;inline-code&quot;&gt;ledger new&lt;/code&gt; or already committed is respected.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger verify --run&lt;/code&gt; understands &lt;code class=&quot;inline-code&quot;&gt;agents.command&lt;/code&gt;. A Verification command written with it, such as &lt;code class=&quot;inline-code&quot;&gt;npx ledger validate&lt;/code&gt; or a pinned &lt;code class=&quot;inline-code&quot;&gt;npx --yes @kylebegeman/ledger@0.8.0 ready&lt;/code&gt;, matches the same &lt;code class=&quot;inline-code&quot;&gt;ledger&lt;/code&gt; pattern in &lt;code class=&quot;inline-code&quot;&gt;verification.allow&lt;/code&gt;, and a bare &lt;code class=&quot;inline-code&quot;&gt;ledger&lt;/code&gt; command runs through the configured command instead of whatever &lt;code class=&quot;inline-code&quot;&gt;ledger&lt;/code&gt; is on the PATH.&lt;/li&gt;&lt;li&gt;Docs impact follows &lt;code class=&quot;inline-code&quot;&gt;git.coverage&lt;/code&gt;. Under &lt;code class=&quot;inline-code&quot;&gt;any&lt;/code&gt;, a changed source file can take its evidence from an earlier receipt that lists it with a reviewed &lt;code class=&quot;inline-code&quot;&gt;docsImpact&lt;/code&gt; declaration or docs references, so &lt;code class=&quot;inline-code&quot;&gt;ledger ci&lt;/code&gt; judges coverage and docs impact under one mode, and adopted repositories stop failing on files their receipts already cover. The docs impact output lists those files under &lt;code class=&quot;inline-code&quot;&gt;historicalFiles&lt;/code&gt;. Repositories on &lt;code class=&quot;inline-code&quot;&gt;current&lt;/code&gt; see no change.&lt;/li&gt;&lt;li&gt;With &lt;code class=&quot;inline-code&quot;&gt;comment: &amp;quot;true&amp;quot;&lt;/code&gt;, the GitHub Action keeps one Ledger comment on a pull request and updates it on later runs instead of posting a new one. Pull requests from forks get a notice instead of a failed step, and a failed GitHub API call is a warning.&lt;/li&gt;&lt;li&gt;The reader renders Markdown code spans in summaries, invariants, verification, and release notes as inline code instead of showing backticks. Record text is escaped first, so a code span never becomes markup.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger stale&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; no longer fail when a receipt lists a screenshot or another file that is not UTF-8 text; anchors and symbols are checked against the text files it lists.&lt;/li&gt;&lt;li&gt;The reader no longer logs an &lt;code class=&quot;inline-code&quot;&gt;InvalidStateError&lt;/code&gt; in the browser console when the browser skips a view transition, as it does in a background tab; the list still updates.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; no longer asks for the TypeScript parser in repositories with no TypeScript or JavaScript under coverage.&lt;/li&gt;&lt;li&gt;The README shows the reader, the context agents receive, and the checks with real command output. Ledger has a new emerald mark, and the reader&amp;#39;s accent color follows it.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:0618663b-e9d8-5246-b9a6-cfbbc7d55bfa</id>
    <title>Ledger v0.7.0</title>
    <published>2026-09-16T00:00:00Z</published>
    <updated>2026-09-16T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.7.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Coverage is now bound to the change set. Under the new default &lt;code class=&quot;inline-code&quot;&gt;git.coverage: current&lt;/code&gt;, a changed source file must be listed by a change entry that is itself part of the pull request or working tree; files covered only by older records are reported as &lt;code class=&quot;inline-code&quot;&gt;historical&lt;/code&gt;. Set &lt;code class=&quot;inline-code&quot;&gt;git.coverage: any&lt;/code&gt; or pass &lt;code class=&quot;inline-code&quot;&gt;ledger coverage --mode any&lt;/code&gt; while adopting Ledger on a repository with history.&lt;/li&gt;&lt;li&gt;Docs impact is judged per source file: each changed file needs a change entry in the same change set that lists it and declares docs impact or references docs. A docs edit elsewhere no longer clears every file.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger verify --run&lt;/code&gt; executes the backticked commands in change entries&amp;#39; Verification sections that match &lt;code class=&quot;inline-code&quot;&gt;verification.allow&lt;/code&gt;, and records command, exit status, duration, and commit in &lt;code class=&quot;inline-code&quot;&gt;.ledger/reports/evidence.json&lt;/code&gt;. &lt;code class=&quot;inline-code&quot;&gt;doctor&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;stale&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;explain&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;packet&lt;/code&gt;, and the reader show whether evidence is fresh, stale, or failed.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger stale&lt;/code&gt; checks Changed Files anchors and the invariants that cite them against the current code, reporting &lt;code class=&quot;inline-code&quot;&gt;stale-anchor&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;stale-invariant&lt;/code&gt;. Write anchors in backticks; &lt;code class=&quot;inline-code&quot;&gt;ledger new --from-diff&lt;/code&gt; now drafts them that way.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger ci --github&lt;/code&gt; prints pull request annotations and a job summary, and the repository&amp;#39;s composite action runs it: &lt;code class=&quot;inline-code&quot;&gt;uses: kylebegeman/ledger@v0.7.0&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;createLedgerClient&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;connectLedgerClient&lt;/code&gt; give TypeScript callers a client for &lt;code class=&quot;inline-code&quot;&gt;ledger serve --api&lt;/code&gt; whose operation names and inputs are checked at compile time against the registry.&lt;/li&gt;&lt;li&gt;The reader&amp;#39;s browser runtime is now a typed module bundled with esbuild and tested in a browser environment. Large catalogs shard the search index, split the graph, and move record details into lazily loaded chunks when the page would exceed its budget; small catalogs keep working fully offline.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger search --full-text&lt;/code&gt; narrows candidates with sqlite FTS5 on large catalogs. Default search is unchanged and identical on every cache backend.&lt;/li&gt;&lt;li&gt;Symbol extraction reports which extractor ran. &lt;code class=&quot;inline-code&quot;&gt;typescript&lt;/code&gt; is an optional peer dependency: install it for parser-backed anchors, otherwise a regex fallback runs and &lt;code class=&quot;inline-code&quot;&gt;ledger new&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; say so.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:5d0b108c-03ad-5e77-b217-bc28e392c969</id>
    <title>Ledger v0.6.0</title>
    <published>2026-09-16T00:00:00Z</published>
    <updated>2026-09-16T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.6.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger hooks install --host claude-code|codex|cursor&lt;/code&gt; installs lifecycle hooks into the host&amp;#39;s project hook file. A session starts with a budgeted Ledger packet, every edit is recorded on a session record, stop drafts a change entry from the touched paths and the Git diff, and pre-compaction writes a handoff so the next context window keeps the same memory. Nothing auto-starts the engine.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger skills install&lt;/code&gt; writes &lt;code class=&quot;inline-code&quot;&gt;.agents/skills/ledger/SKILL.md&lt;/code&gt; (with a &lt;code class=&quot;inline-code&quot;&gt;.claude/skills/ledger&lt;/code&gt; link for Claude Code) so skills-aware agents know when to call &lt;code class=&quot;inline-code&quot;&gt;packet&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;explain&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;session note&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;promote&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;ready&lt;/code&gt;. &lt;code class=&quot;inline-code&quot;&gt;ledger agents --write&lt;/code&gt; maintains the same workflow as a fenced block in &lt;code class=&quot;inline-code&quot;&gt;AGENTS.md&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Session records: a new short-lived &lt;code class=&quot;inline-code&quot;&gt;session&lt;/code&gt; kind under &lt;code class=&quot;inline-code&quot;&gt;.ledger/sessions/&lt;/code&gt; with &lt;code class=&quot;inline-code&quot;&gt;ledger scratch&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;session start|touch|note|close|prune&lt;/code&gt;, a configurable expiry (&lt;code class=&quot;inline-code&quot;&gt;sessions.expiresInDays&lt;/code&gt;, default 7), an &lt;code class=&quot;inline-code&quot;&gt;expired-session&lt;/code&gt; stale signal, and promotion into a change entry with &lt;code class=&quot;inline-code&quot;&gt;ledger promote S000N&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger ready&lt;/code&gt; distinguishes a valid draft from one ready to land: TODO markers, template placeholders, empty sections, missing Verification or Invariants bullets, unreviewed docs impact, and missing references are reported with line numbers, and the command exits 1.&lt;/li&gt;&lt;li&gt;Authoring commands: &lt;code class=&quot;inline-code&quot;&gt;ledger backlog new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger decision new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger promote &amp;lt;id&amp;gt;&lt;/code&gt; (carries acceptance checks into Verification and updates the item in one transaction), and &lt;code class=&quot;inline-code&quot;&gt;ledger release notes &amp;lt;version&amp;gt;&lt;/code&gt; (prints a record&amp;#39;s Public Notes). Backlog and decision id widths are configurable (&lt;code class=&quot;inline-code&quot;&gt;ids.backlogWidth&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ids.decisionWidth&lt;/code&gt;).&lt;/li&gt;&lt;li&gt;Library: &lt;code class=&quot;inline-code&quot;&gt;createBacklogItem&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;createDecision&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;promoteRecord&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;readReleaseNotes&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;draftChangeEntry&lt;/code&gt;, session helpers, &lt;code class=&quot;inline-code&quot;&gt;checkReadiness&lt;/code&gt;, hook and skill installers, and frontmatter editing helpers are exported from the package root; &lt;code class=&quot;inline-code&quot;&gt;ledger_ready&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;ledger_release_notes&lt;/code&gt; join the MCP tools.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:a21e6989-0f19-5008-b103-3065e9fd73c2</id>
    <title>Ledger v0.5.0</title>
    <published>2026-09-16T00:00:00Z</published>
    <updated>2026-09-16T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.5.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger serve --api&lt;/code&gt; starts the engine: the reader plus a JSON API at &lt;code class=&quot;inline-code&quot;&gt;/api/v1&lt;/code&gt; (every workspace operation as &lt;code class=&quot;inline-code&quot;&gt;POST /api/v1/operations/&amp;lt;name&amp;gt;&lt;/code&gt; with the same machine envelope as &lt;code class=&quot;inline-code&quot;&gt;--json&lt;/code&gt; and the exit code in a &lt;code class=&quot;inline-code&quot;&gt;Ledger-Exit-Code&lt;/code&gt; header), a server-sent event stream at &lt;code class=&quot;inline-code&quot;&gt;/events&lt;/code&gt;, MCP over Streamable HTTP at &lt;code class=&quot;inline-code&quot;&gt;/mcp&lt;/code&gt;, and a server card at &lt;code class=&quot;inline-code&quot;&gt;/.well-known/mcp/server-card.json&lt;/code&gt;. The same loopback and token hardening as &lt;code class=&quot;inline-code&quot;&gt;ledger serve&lt;/code&gt; applies.&lt;/li&gt;&lt;li&gt;While the engine runs, CLI commands in the same project delegate to it and answer from its warm cache with identical output and exit codes. Pass &lt;code class=&quot;inline-code&quot;&gt;--local&lt;/code&gt; or set &lt;code class=&quot;inline-code&quot;&gt;LEDGER_NO_DAEMON=1&lt;/code&gt; to run in-process; a stale or missing engine falls back automatically. &lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; reports the engine state.&lt;/li&gt;&lt;li&gt;The reader reloads itself after every rebuild when served by the engine and keeps its URL state; a failed rebuild keeps the last good render.&lt;/li&gt;&lt;li&gt;MCP hosts get resources (&lt;code class=&quot;inline-code&quot;&gt;ledger://records/{id}&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger://packet/{path}&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger://contract&lt;/code&gt;) and prompts (&lt;code class=&quot;inline-code&quot;&gt;ledger_agent_instructions&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger_handoff&lt;/code&gt;) over both stdio and HTTP.&lt;/li&gt;&lt;li&gt;Search scoring lives once and is shared by &lt;code class=&quot;inline-code&quot;&gt;ledger search&lt;/code&gt; and the reader, so terminal and browser rankings match exactly.&lt;/li&gt;&lt;li&gt;Recursive watching survives Windows short-name paths.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:f1fd9ac1-e895-59be-b752-e5498adf16d9</id>
    <title>Ledger v0.4.0</title>
    <published>2026-09-16T00:00:00Z</published>
    <updated>2026-09-16T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.4.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Every command except &lt;code class=&quot;inline-code&quot;&gt;serve&lt;/code&gt; and &lt;code class=&quot;inline-code&quot;&gt;mcp&lt;/code&gt; now supports &lt;code class=&quot;inline-code&quot;&gt;--json&lt;/code&gt; and returns the versioned machine envelope, including &lt;code class=&quot;inline-code&quot;&gt;init&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;new&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;feedback&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;index&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;agents&lt;/code&gt;, and the &lt;code class=&quot;inline-code&quot;&gt;docs&lt;/code&gt; subcommands.&lt;/li&gt;&lt;li&gt;The MCP server grew from 8 tools to 18, each with input and output schemas, read-only annotations, and structured content. The original 8 keep their names, inputs, and summaries.&lt;/li&gt;&lt;li&gt;Repeated commands and agent calls parse only the records that changed. A catalog cache under &lt;code class=&quot;inline-code&quot;&gt;.ledger/cache/&lt;/code&gt; (JSON everywhere, built-in sqlite on Node 24.15 or newer) cut warm reads on this repository from 38 ms to 4 ms. New commands: &lt;code class=&quot;inline-code&quot;&gt;ledger cache status&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger cache warm&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger cache clear&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger explain&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;ledger conflict&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;ledger packet&lt;/code&gt; agree on which records match a path and now include the decisions, backlog items, and superseding records one hop away. Packets carry related records within the token budget, and &lt;code class=&quot;inline-code&quot;&gt;graph.json&lt;/code&gt; gains &lt;code class=&quot;inline-code&quot;&gt;supersedes&lt;/code&gt; edges.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;inline-code&quot;&gt;ledger doctor&lt;/code&gt; fails, rather than warns, when the rendered reader is over its size budget.&lt;/li&gt;&lt;li&gt;Library: &lt;code class=&quot;inline-code&quot;&gt;ledgerOperations&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;buildOperationsContract&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;retrieveByPath&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;matchFilePath&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;relatedRecords&lt;/code&gt; are exported from the package root; &lt;code class=&quot;inline-code&quot;&gt;explain&lt;/code&gt; JSON data now carries &lt;code class=&quot;inline-code&quot;&gt;records&lt;/code&gt;, &lt;code class=&quot;inline-code&quot;&gt;related&lt;/code&gt;, and &lt;code class=&quot;inline-code&quot;&gt;missing&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:d9bca247-c990-5065-8edc-91a717af0cf4</id>
    <title>Ledger v0.3.2</title>
    <published>2026-09-15T00:00:00Z</published>
    <updated>2026-09-15T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.3.2"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;The static reader and its search index now list records newest-first on both the internal and public profiles, and the command palette shows the most recent records.&lt;/li&gt;&lt;li&gt;Tests pass on Windows as well as macOS and Linux.&lt;/li&gt;&lt;li&gt;The roadmap gains Phase 11, the local memory engine direction, and records which earlier proposals were retired.&lt;/li&gt;&lt;li&gt;Tagged releases publish to npm through trusted publishing and create a GitHub Release from the release record. Homebrew instructions were removed until a tap exists, and development now happens through pull requests into master.&lt;/li&gt;&lt;li&gt;Release records now require a Public Notes section, and the internal render total budget is 2,500,000 bytes.&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:422bf4f5-183b-5b2f-993b-fd871aab43e7</id>
    <title>Ledger v0.3.1</title>
    <published>2026-07-15T00:00:00Z</published>
    <updated>2026-07-15T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.3.1"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Group public changelog by year and refine reader chrome&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:3a9301ae-c4e2-534b-81ec-db75b4e29a34</id>
    <title>Ledger v0.3.0</title>
    <published>2026-07-12T00:00:00Z</published>
    <updated>2026-07-12T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.3.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Replace row expansion with record detail panel&lt;/li&gt;&lt;li&gt;Simplify theme toggle to light and dark&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:053d802e-41c7-5f99-a069-3c011ca47f2a</id>
    <title>Ledger v0.2.0</title>
    <published>2026-07-12T00:00:00Z</published>
    <updated>2026-07-12T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.2.0"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Confine project paths and bound source resources&lt;/li&gt;&lt;li&gt;Make source mutations recoverable and concurrency safe&lt;/li&gt;&lt;li&gt;Harden static reader serving and network exposure&lt;/li&gt;&lt;li&gt;Version machine results and type operational errors&lt;/li&gt;&lt;li&gt;Verify integrity and add safe render profiles&lt;/li&gt;&lt;li&gt;Harden CI release automation and project truth&lt;/li&gt;&lt;li&gt;Close final stale diagnostics and refresh toolchain patches&lt;/li&gt;&lt;li&gt;Complete production hardening audit&lt;/li&gt;&lt;li&gt;Redesign static reader experience&lt;/li&gt;&lt;li&gt;De-card static reader into flat editorial layout&lt;/li&gt;&lt;li&gt;Add filter pills, right rail, pagination, and density modes&lt;/li&gt;&lt;li&gt;Swap reader accent from indigo to copper&lt;/li&gt;&lt;li&gt;Brighten accent to azure with sunset mark&lt;/li&gt;&lt;li&gt;Match accent to mark orange&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:244f9ab1-975f-53d2-b531-3140fd2d4713</id>
    <title>Ledger v0.1.13</title>
    <published>2026-07-04T00:00:00Z</published>
    <updated>2026-07-04T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.13"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Static search and token-budgeted agent context&lt;/li&gt;&lt;li&gt;Render artifact budget metrics&lt;/li&gt;&lt;li&gt;Weighted static search ranking&lt;/li&gt;&lt;li&gt;Explicit docs impact declarations&lt;/li&gt;&lt;li&gt;JSON operational errors&lt;/li&gt;&lt;li&gt;CLI search, performance metrics, and template renderer&lt;/li&gt;&lt;li&gt;Command result model extraction&lt;/li&gt;&lt;li&gt;Parser-backed symbol extraction&lt;/li&gt;&lt;li&gt;Generated artifact contract tests&lt;/li&gt;&lt;li&gt;Config version migrations&lt;/li&gt;&lt;li&gt;Validation policy profiles&lt;/li&gt;&lt;li&gt;MCP compact summaries&lt;/li&gt;&lt;li&gt;Render asset split&lt;/li&gt;&lt;li&gt;Graph invariant and verification nodes&lt;/li&gt;&lt;li&gt;Query and packet command models&lt;/li&gt;&lt;li&gt;Public API boundary&lt;/li&gt;&lt;li&gt;Render HTML component split&lt;/li&gt;&lt;li&gt;Search result agent packets&lt;/li&gt;&lt;li&gt;Static reader graph and search polish&lt;/li&gt;&lt;li&gt;API and release prep docs&lt;/li&gt;&lt;li&gt;Final improvement sweep verification&lt;/li&gt;&lt;li&gt;Comprehensive audit correctness hardening&lt;/li&gt;&lt;li&gt;Prepare v0.1.13 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:ca23fa2a-72e9-5dea-92d3-898b44199246</id>
    <title>Ledger v0.1.12</title>
    <published>2026-06-30T00:00:00Z</published>
    <updated>2026-06-30T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.12"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Dogfood-driven Ledger adoption improvements&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:1efacacb-5e59-5d0f-8264-185950657f7b</id>
    <title>Ledger v0.1.10</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.10"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Bug sweep release and agent integration fixes&lt;/li&gt;&lt;li&gt;Final release preflight hardening&lt;/li&gt;&lt;li&gt;Prepare v0.1.10 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:3460a37b-d086-5079-bd68-0369342e0201</id>
    <title>Ledger v0.1.9</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.9"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Improve git-aware drafting&lt;/li&gt;&lt;li&gt;Prepare v0.1.9 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:fda63c0a-63f0-52c8-a50c-c2f68b5aa7cc</id>
    <title>Ledger v0.1.8</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.8"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Add release assignment workflow&lt;/li&gt;&lt;li&gt;Prepare v0.1.8 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:a5a9f09c-b7e9-5402-aeb6-1cdb46a34eee</id>
    <title>Ledger v0.1.7</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.7"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Polish static reader facets&lt;/li&gt;&lt;li&gt;Prepare v0.1.7 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:1849811e-16a5-5222-a897-cf13e2f78ef6</id>
    <title>Ledger v0.1.6</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.6"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Add integrity provenance report&lt;/li&gt;&lt;li&gt;Prepare v0.1.6 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:d5c47a66-680f-5bb1-a0ef-e529d5bf4071</id>
    <title>Ledger v0.1.5</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.5"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Expand docs plane reconcile and migration reports&lt;/li&gt;&lt;li&gt;Prepare v0.1.5 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:c35dbeca-7630-5fda-a856-ab6fad32b950</id>
    <title>Ledger v0.1.4</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.4"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Add MCP agent integration&lt;/li&gt;&lt;li&gt;Prepare v0.1.4 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:c67eae3a-b24f-5d39-a809-f2f87bfc088c</id>
    <title>Ledger v0.1.3</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.3"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Harden validation warnings&lt;/li&gt;&lt;li&gt;Add query text filter&lt;/li&gt;&lt;li&gt;Add agent packet report output&lt;/li&gt;&lt;li&gt;Harden open source packaging&lt;/li&gt;&lt;li&gt;Prepare v0.1.3 release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:70e28c50-4901-543f-8f25-27be1c57f89e</id>
    <title>Ledger v0.1.2</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.2"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Expand query filters&lt;/li&gt;&lt;li&gt;Extract symbols for diff drafts&lt;/li&gt;&lt;li&gt;Add conflict report output&lt;/li&gt;&lt;li&gt;Refresh notebook icon asset&lt;/li&gt;&lt;li&gt;Add decision and backlog indexes&lt;/li&gt;&lt;li&gt;Generate docs routing manifest&lt;/li&gt;&lt;li&gt;Add agent packet command&lt;/li&gt;&lt;li&gt;Ignore generated docs manifest&lt;/li&gt;&lt;li&gt;Prepare v0.1.2 patch release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:uuid:56e39483-83a8-54f3-8e57-de6f5318187c</id>
    <title>Ledger v0.1.1</title>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <link rel="alternate" type="text/html" href="https://kylebegeman.github.io/ledger/changelog/#v0.1.1"/>
    <content type="html">&lt;ul&gt;&lt;li&gt;Bootstrap Ledger project&lt;/li&gt;&lt;li&gt;Use .ledger root and add docs lifecycle audit&lt;/li&gt;&lt;li&gt;Complete init template scaffold&lt;/li&gt;&lt;li&gt;Add git coverage command&lt;/li&gt;&lt;li&gt;Add query and agent explain output&lt;/li&gt;&lt;li&gt;Add conflict assistant command&lt;/li&gt;&lt;li&gt;Add release and unreleased commands&lt;/li&gt;&lt;li&gt;Add docs impact command&lt;/li&gt;&lt;li&gt;Add docs classify command&lt;/li&gt;&lt;li&gt;Add static reader render command&lt;/li&gt;&lt;li&gt;Add CI summary command&lt;/li&gt;&lt;li&gt;Add repo hygiene and CI workflow&lt;/li&gt;&lt;li&gt;Polish CLI help output&lt;/li&gt;&lt;li&gt;Harden config validation&lt;/li&gt;&lt;li&gt;Add CLI fixture workflow tests&lt;/li&gt;&lt;li&gt;Polish git-aware entry drafting&lt;/li&gt;&lt;li&gt;Polish static reader context&lt;/li&gt;&lt;li&gt;Polish release workflow&lt;/li&gt;&lt;li&gt;Complete bug sweep and integration fixes&lt;/li&gt;&lt;li&gt;Overhaul README and prepare patch release&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
</feed>
