Repository navigation
Replace the status's historyReadAt time with a historyRead bool - #90
Merged
Merged
Conversation
joeychilson
marked this pull request as ready for review
October 19, 2026 22:44
Merged
joeychilson
added a commit
that referenced
this pull request
Oct 20, 2026
Sets the version to 0.1.5 so the `v0.1.5` tag can start the release, and tidies its notes: grouped by area, plus the protocol change that #90 didn't mention.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The status's
historyReadAtwas a time nothing reads, rewritten at every catch-up: serve'spush()turned it into a bool before comparing, and each catch-up wrote the database for it. It's nowhistoryRead, true once the first read of the agents' history has finished, written once. Protocol 2.Flags: changes the protocol (1 → 2); edits 3 tests for the field's name and protocol number; changes what
state.history_atholds (no new revision)Changes
historyReadreplaceshistoryReadAt: whetherstate.history_atis set.history_atonce, when the first read ends, even with nothing to read.push()compares statuses lessat, rewriting nothing.reading: a status whosehistoryReadis false.Evidence
contract/status.notification.json:New
serve::tests::a_status_is_pushed_only_when_what_it_shows_changed: pushesfalse, thentrueafter the first read, nothing after a catch-up that read a session but changed nothing shown, then one after a settings change.New
ingest::tests::a_catch_up_after_the_first_read_that_reads_nothing_writes_nothingfails on main: another connection'sdata_versionmoves (left: 3,right: 2).The Swift engine test passes. Main's binary, this one, then main's again share a scratch database fine; rollback is the previous build (details).
Not checked: the app by hand; real user databases.
Risk
helloduring the first read now getshistoryRead: false; main set the time once files were listed, before reading them.Left out
db::REVISIONS[0]'s comment still says "last read"; shipped scripts aren't edited. architecture.md has the new meaning.Review focus
src/ingest.rsingest: whenhistory_atis written. The rest is mechanical.Runs
Swift against the real engine:
Main's binary (old) and this branch's (new) on one scratch data directory, with
TURNSCOPE_OFFLINE=1and the fixture home's copy,target/tmp/home. Eachsessionscatches up, and each hello is followed byshutdown. jq prints a field that's missing asnull.The push test fails at
assert!(pushed(&mut server).is_empty())whenpush()skips its comparison. It fails withleft: [],right: [true]when the first read is not marked because there was nothing to read.These were also run and passed:
cargo fmt --check,cargo clippy --all-targets --locked -- -D warnings,cargo test --locked(again withTZ=America/Chicago),RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --locked,shellcheck scripts/*.sh,actionlint,cargo deny check advisories,scripts/build-app.sh, andscripts/check-app.shon that build. check-app.sh reported "serve: protocol 2, a hello answered with a status" and drew the panel from the contract's example.