commits on main

2026-09-16

413b7bd7 dawn Land the uncommitted tree: the cut campaign, the work under it, and the daemon's window

Land the uncommitted tree: the cut campaign, the work under it, and the daemon's window

Everything since 93f66d4 has been carried in the working tree. This lands it: - The cut campaign: 208 files retired (benchmarks and the router experiments, klbr-bench, the old LCM store surface, the starter's own root docs), -180,096 lines against +22,583. By its own census: 110,545 -> 62,750 physical lines, -43.2%. - The runtime work whose files were never added: peers, orientations, prompt headers, skills, attempt budget, migrations 010..016, and the Python workspace/peer/orientation surface with the skills that document it. - The daemon half of the windowed transcript: a bounded `subscribe` that opens after the session's context fold (`lcm_frontier`, `drained_through_seq`), `earliest_seq`/`fold_seq` on the replay frames, and a `history` request that pages backwards. The console half, and the frames the two sides share, are in their own commits. One commit rather than three because the halves are not separable: the modified files reference modules that exist only in the new files (klbr-runtime/src/{peer,frontier, prompt_header,skills}.rs, the 010..016 migrations), so any split leaves a commit that does not build. The tree as one unit is verified: `cargo test -p klbr-ipc -p klbr-daemon` green, the store suite green including its new bounds/page test, the console's own suite green. Also ignored now: /target-parent (123,424 build-artifact paths that `git status` was showing) and /.releases (behavior releases published by Release::publish at runtime).

open commit browse files

2026-09-15

1a5d2172 dawn Name the fold in the transcript, and share the window frames with the daemon

Name the fold in the transcript, and share the window frames with the daemon

The window opens after the session's context fold, so the daemon now says which record that fold drained through and the console mentions it at the window's edge — while the window is above it. A reader who has paged back past the fold is reading the prefix itself, and there is nothing summarized about what they are looking at, so the note goes. The window request is `after_seq: 0` with a `limit` rather than `after_seq: null`: a daemon that does not know about windows ignores the limit and replays the session, which is what it did before, so the request cannot leave a client against an older daemon with an empty transcript. The fixture reports the fold and carries it on pages, and its folds are `lcm_frontier` records with the payload the runtime actually writes. `src/lib/protocol-v2.test.ts` replays the exact frames `klbr-ipc/src/v2.rs`'s `window_frames` suite pins, through this console's parser and client. Two implementations of one contract drift in silence otherwise: a renamed field is an empty session on one side with nothing red on the other.

open commit browse files

2026-09-14

ac5f1f52 dawn Open the transcript at the window's edge and say where that edge is

Open the transcript at the window's edge and say where that edge is

A transcript that starts somewhere other than the session's beginning has to say so, in three places. The first row is now the window's own edge: a control that asks the daemon for the records behind it, and that names the compaction when the window opens on one, because that fold is the whole reason the transcript starts there. A turn is numbered by its place in the session — the sequence of its opening record — rather than by its rank in the window, which would number turn 361 as "#1" and tell the reader the session began where their window does. And a turn the window cut in half makes no summary claims at all: a count of the records that happen to be loaded is not a summary of the turn, and the failure that is above the edge would not be in it. Pressing load-earlier lands the reader at the top of the page that just arrived rather than leaving them still, since records arriving above a viewport that does not move look like nothing happened. It also fixes the follow, which the bigger sessions exposed: the list adjusts the scroll itself when a row measures, after the app's own hold has written the end and from the size that row had before it measured. The correction left the reader a row short of the end, and the scroll event it caused read as the reader leaving — so the follow disarmed and the transcript never caught up with itself. Measured at 400 turns: 93px short, permanently. The end is now written twice per size, once after the list has had its turn in the frame.

open commit browse files
3d843004 dawn Ask the daemon for a window instead of caching the transcript

Ask the daemon for a window instead of caching the transcript

The cache existed to make a reload cheap, and it could not: a 4800-record transcript is ~10 MB against a 5 MB sessionStorage quota, so the biggest sessions it was written for were the ones it failed on. It is gone, along with the remembered cursor and the diagnostics snapshot that were only there to avoid replaying records it held, and the client now asks for what it can hold: `subscribe` with `after_seq: null` and a `limit` is a window request, and the daemon answers with the newest window of at most that many records, anchored at its own last compaction, reporting its range and its floor in `sync_started` and `sync_completed`. `{ type: "history", before_seq, limit }` asks for the records behind a loaded window; the answer is the same replay shape, its records prepend into the timeline where their sequence puts them, and the live cursor does not move for them. Deduplication is a set of seen sequences instead of a scan of the transcript per record, which is what makes a retried or overlapping page idempotent. A daemon that says nothing about its floor offers no paging, so a client against today's daemon degrades to what it does now rather than to a button that does nothing. The fixture serves the same contract, with a compaction every forty turns of the bulk session, so the behaviour is reachable in a browser: at 400 turns the console opens on 481 records instead of 4809.

open commit browse files
6d202ae3 dawn Answer a turn's outcome in one pass, and build the clock format once

Answer a turn's outcome in one pass, and build the clock format once

computeInputOutcomes scanned the transcript once per input, and it runs on every timeline change: quadratic, and at 4800 records the largest single cost left in the console (26% + 13% + 12% of sampled main-thread time). It is now one walk that gathers each turn's evidence as it finds the segments, it lives in the data layer where it can be tested, and a differential test pins it to the algorithm it replaced. An Intl.DateTimeFormat was also constructed per rendered row per render (8% of main-thread time at 4800 records); it is built once. One pass reads each record twice whatever the length; the old scan read 2, 52, 102, 199, 398 times per record as the transcript doubled. 1440 records: 4.0s -> 1.1s. 4800 records: 34.3s -> 5.5s (from 120.3s before either change).

open commit browse files
4cf69877 dawn Coalesce the transcript cache write instead of re-serializing it per event

Coalesce the transcript cache write instead of re-serializing it per event

Writing the whole transcript to sessionStorage on every event made ingesting a session quadratic: 1440 records cost 2880 writes and 4.5 GB of string traffic, and the view took 21.7s to fill. A write now waits for the stream to pause (or CACHE_MAX_WAIT_MS, whichever comes first) and for the page going away, and the cursor is written by that same flush, after the records it covers, so a reload can never resume from a cursor the cached records do not hold. 1440 records: 21.7s -> 4.0s, 2880 writes -> 2. 4800 records: 120.3s -> 34.3s, 50 GB -> 21 MB.

open commit browse files
076f0454 dawn Replace the console's timeline with one flat virtualized transcript and named lane views

Replace the console's timeline with one flat virtualized transcript and named lane views

open commit browse files

2026-09-11

93f66d4e dawn Run and inspect a real remote Python namespace without pretending about loss

Run and inspect a real remote Python namespace without pretending about loss

open commit browse files
39e55baf dawn Place a session's workbench on a verified remote target over a host-owned relay

Place a session's workbench on a verified remote target over a host-owned relay

open commit browse files
5e44f8f3 dawn Keep an unresolved objective open and separate service quiescence from Stop

Keep an unresolved objective open and separate service quiescence from Stop

open commit browse files

2026-09-07

5cca300f dawn Bind maintenance identity, evidence, and outcomes to committed records

Bind maintenance identity, evidence, and outcomes to committed records

open commit browse files

2026-09-06

efad2d9b dawn Resolve swarm5 review findings: idempotent observation identity, runnable agent origination, live whole-loop daemon gate

Resolve swarm5 review findings: idempotent observation identity, runnable agent origination, live whole-loop daemon gate

open commit browse files
0fca199f dawn Connect capability preservation loop to daemon scheduler, observer, and maintenance purpose path

Connect capability preservation loop to daemon scheduler, observer, and maintenance purpose path

open commit browse files
f0f74b6a dawn Implement capability preservation loop, origin-neutral scheduling, and health diagnostics

Implement capability preservation loop, origin-neutral scheduling, and health diagnostics

open commit browse files
9dd82cae dawn Resolve review2 regressions across wait deadlines, lane projections, and turn context

Resolve review2 regressions across wait deadlines, lane projections, and turn context

open commit browse files
b978e8ac dawn Integrate runtime-v2 across daemon, SDK, turn runner, and multi-lane IPC

Integrate runtime-v2 across daemon, SDK, turn runner, and multi-lane IPC

open commit browse files
97d42c95 dawn Implement runtime-v2 session registry, turn loop, behavior SDK, and multi-lane UI

Implement runtime-v2 session registry, turn loop, behavior SDK, and multi-lane UI

open commit browse files
a818b43c dawn Integrate runtime-v2 starter baseline and verification tooling

Integrate runtime-v2 starter baseline and verification tooling

open commit browse files

2026-07-10

f64ebc31 dawn beads gitignore

beads gitignore

open commit browse files
f1f14688 dawn bd: record memory architecture work

bd: record memory architecture work

open commit browse files
09e7cda9 dawn harden memory architecture

harden memory architecture

open commit browse files
e9c3796b dawn bd: update sync.remote

bd: update sync.remote

open commit browse files

2026-07-01

00224d14 dawn split agent maintenance modules

split agent maintenance modules

open commit browse files
4e85238f dawn split agent turn runtime

split agent turn runtime

open commit browse files
5e130464 dawn add folgezettel usage trace report

add folgezettel usage trace report

open commit browse files
66ce095e dawn split web app components

split web app components

open commit browse files
2dcefe9c dawn close completed agent loop bead

close completed agent loop bead

open commit browse files
453b0144 dawn split agent turn phases

split agent turn phases

open commit browse files
947d04d0 dawn centralize workspace dependency versions

centralize workspace dependency versions

open commit browse files
e61b0e57 dawn deduplicate agent stream failure backoff

deduplicate agent stream failure backoff

open commit browse files
e7b4cd91 dawn migrate message roles to enum

migrate message roles to enum

open commit browse files
560b1119 dawn refactor model sse and media parsing

refactor model sse and media parsing

open commit browse files
5ca6d535 dawn reduce config parser boilerplate

reduce config parser boilerplate

open commit browse files
800bff4c dawn share ipc dto types

share ipc dto types

open commit browse files

2026-06-30

9000ca28 dawn split discord modules

split discord modules

open commit browse files
6378521a dawn split bench main modules

split bench main modules

open commit browse files
76d9a889 dawn use clap for bench cli

use clap for bench cli

open commit browse files
8d3b9e90 dawn remove dead memory tool files

remove dead memory tool files

open commit browse files
1ae04cf9 dawn fix daemon local bind and async dump

fix daemon local bind and async dump

open commit browse files
d9bc2be1 dawn fix shell utf8 truncation

fix shell utf8 truncation

open commit browse files
a502c762 dawn fix flake default package

fix flake default package

open commit browse files
7930fc30 dawn make antigravity paths configurable

make antigravity paths configurable

open commit browse files
bb688a00 dawn add time-aware evidence ranking

add time-aware evidence ranking

open commit browse files
3fa646eb dawn docs: track benchmark, nix, and bridge improvements as beads issues

docs: track benchmark, nix, and bridge improvements as beads issues

open commit browse files
88fccc12 dawn docs: track code review findings as beads issues

docs: track code review findings as beads issues

open commit browse files
466e5d3e dawn add typed evidence value mentions

add typed evidence value mentions

open commit browse files
cf027c98 dawn fix evidence rendered ref diagnostics

fix evidence rendered ref diagnostics

open commit browse files
8486d536 dawn record longmemeval sample100 bench followups

record longmemeval sample100 bench followups

open commit browse files
2efe7a3c dawn surface query dates in evidence context

surface query dates in evidence context

open commit browse files
e65a301d dawn prioritize anchor bodies in evidence packets

prioritize anchor bodies in evidence packets

open commit browse files
older commits →