Skip to content
quarry Timeline
Login

Timeline

50 most recent check-ins that include changes to files matching 'internal/events/*'

2026-10-02
14:58
Merge trunk check-in: b0f17d0e5b user: zeitgeist tags: admins-send-reset-links
03:33
land delete-forgets-its-events check-in: b6f64c2e4c user: dmestas tags: trunk
01:54
Test a repair stopped after its round; a tally yields only to a longer repository that exists (#294) closed check-in: 03bdb5c2ba user: zeitgeist tags: delete-forgets-its-events
01:14
Keep dotted neighbours out of a repository's event log, tallies and watches; stopped pipelines write nothing; no empty dot segments in names (#294) check-in: 274b7ccc50 user: zeitgeist tags: delete-forgets-its-events
2026-10-01
21:23
update rfc20-release-tag from trunk closed check-in: b42f59de5b user: dmestas tags: rfc20-release-tag
19:09
merge trunk (bounded sync decoding) into rfc20-mirror-uv check-in: 3f4482ad5b user: zeitgeist tags: rfc20-mirror-uv
17:40
Merge trunk check-in: 405f34fa66 user: zeitgeist tags: ci-tests-each-change-once
17:27
Merge trunk into robot-lines-name-numbers check-in: e3ccbf9a54 user: zeitgeist tags: robot-lines-name-numbers
16:39
land delete-forgets-the-repository check-in: 34b7277ba3 user: dmestas tags: trunk
15:36
Forget ingest cursors and consumers by repository name, matching only that repository's own (#294) closed check-in: eb69465510 user: zeitgeist tags: delete-forgets-the-repository
15:16
Merge trunk; delete also purges unversioned catalog, publisher cursor keys and finishes event scans on pending count (#294) check-in: ea6e1d281e user: zeitgeist tags: delete-forgets-the-repository
2026-09-30
13:05
Deleting a repository erases only its own traffic tallies, never those of a dotted neighbour such as a.clone.auth (#294) check-in: 61447ac630 user: dmestas tags: delete-forgets-the-repository
12:44
Deleting a repository forgets it everywhere: purge every name-keyed table, revoke its worker tokens, empty its chat channel and attention events (#294) check-in: 46b6caea1c user: zeitgeist tags: delete-forgets-the-repository
2026-09-28
22:05
land landing-waiting-notify check-in: e917e68c83 user: dmestas tags: trunk
21:52
A newly opened landing notifies its accepters, pushed or not closed check-in: 304e236887 user: zeitgeist tags: landing-waiting-notify
2026-09-27
11:38
Merge trunk into background-jobs-follow-the-lease check-in: cf04732cdd user: dmestas tags: background-jobs-follow-the-lease
11:27
update node-identity-is-persisted from trunk closed check-in: f61888abaf user: zeitgeist tags: node-identity-is-persisted
11:23
update ci-race-on-landings from trunk closed check-in: 3bfe3ae2d8 user: zeitgeist tags: ci-race-on-landings
11:08
land event-window-own-events check-in: b4b2132878 user: dmestas tags: trunk
05:55
A refused stream limits update is logged rather than stopping the start, and an earlier stream's publish record is tested to force a rebuild check-in: 47631b3071 user: dmestas tags: event-window-own-events
05:29
Judge the event window gap by each store's own publish record, and show the stream window at boot and on the ops page check-in: 0824d60cfb user: dmestas tags: event-window-own-events
2026-09-09
21:27
land clone-identity check-in: 950a22e623 user: dmestas tags: trunk
21:02
sync: record who cloned — client, verified account, claimed name, or nobody check-in: f3983f90bd user: dmestas tags: clone-identity
20:56
Running docs: receiving email needs nothing but notify closed check-in: 598a8a26a6 user: dmestas tags: docs-receiver
2026-08-30
11:33
land ci-live-sse check-in: 97dd341966 user: dmestas tags: trunk
11:33
land attention-dedupe check-in: 62731b2cac user: dmestas tags: trunk
10:15
merge trunk into fleet-tabs-1: keep trunk's four-surface fleet nav, wear the tab convention check-in: 73c9f1ca68 user: dmestas tags: fleet-tabs-1
04:07
ci: live run page over the event stream; ci.started/ci.completed raised; WatchNoun check-in: 3d493504b9 user: dmestas tags: ci-live-sse
03:48
inbox: pair a mention's notify message with its attention event on the idempotency key, so one event is one row and one count check-in: 7251d16114 user: dmestas tags: attention-dedupe
02:58
land attention-4 check-in: 48328f288f user: dmestas tags: trunk
01:48
ci: live pages wait on the event plane instead of each keeping a 3s timer check-in: 3d01196d0d user: dmestas tags: trunk
2026-08-29
23:52
merge trunk into exceptions check-in: 395e40d54d user: dmestas tags: exceptions
22:09
land attention-2 check-in: 9eb8e48c21 user: dmestas tags: trunk
21:10
take attention delivery off the write path and count unread without scanning the window check-in: b1e3e4f387 user: dmestas tags: attention-2
20:22
an attention stream, the ops that read it, and the activity robot check-in: 24aa859ca1 user: dmestas tags: attention-2
2026-08-24
23:12
land praise-ui check-in: 411e60c2d5 user: dmestas tags: trunk
21:20
Event log: proof the hooks fired

Read straight off the vocabulary stream — no table, no fold, nothing to keep in sync, so it cannot disagree with what the forge published.

The window is the stream's window, 24 hours, and the page says so: a log that let a reader assume history would be lying about a live tail.

Asks the consumer how much is pending before fetching. Without that a quiet repository waits out the fetch timeout, which would make 'nothing has happened yet' the slowest page on the site — 2s became 9ms.

Linked from the webhooks settings, not given a tab: that is where the question gets asked. closed check-in: a5c5fe771e user: dmestas tags: praise-ui

20:18
Merge trunk into praise closed check-in: 7b32366269 user: dmestas tags: praise
20:16
Suite green; merges clean. Proven against a real server: two clones read 2, a pull leaves it at 2. check-in: bc4fbd1c79 user: dmestas tags: trunk
19:16
Count clones and fetches

A clone reads and writes nothing, so it is the one kind of forge activity that leaves no trace in the DAG at all.

The sync edge classifies the protocol's cards: clone SEQNO 1 opens a new clone, later rounds do not, so a big store cloned in forty rounds still counts once. Two sinks: the vocabulary event for anything reacting, and a JetStream counter for how many, which converges across nodes instead of losing increments to a read-modify-write. check-in: dc058fa551 user: dmestas tags: clone-counts

16:27
Add the new event-plane files the previous commit omitted check-in: f485551646 user: dmestas tags: trunk
16:27
Publish the vocabulary on quarry.evt.<repo>.<noun>.<action>

RFC 0005 picked zit.evt., which the fold consumer already claims with a trailing wildcard — every vocabulary event would have been handed to the artifact parser. Own stream, own root, tests pinning both. check-in: 3bca39d8f5 user: dmestas tags: trunk

15:50
events: the vocabulary as code, and what the bus really does

RFC 0005 §1 as internal/evt, named at the eight sites that raise events instead of sliced out of a TxnID — so a ticket change that closes one is ticket.closed, not ticket. Measured the window: a gap IS detectable (first_seq - ack_floor) but the next fetch succeeds silently, so every consumer must check. dagnats has no scheduler; quarry owns the clock. check-in: f08add75f5 user: dmestas tags: trunk

2026-08-17
16:40
deploy: Dockerfile, compose stack and a run book

quarry had no packaging at all while notify already had a working Dockerfile and compose. The image ships zit WITH quarry, deliberately: 0001 §2 makes the zit CLI the entire store interface, so zit's behaviour IS quarry's, and today alone three zit builds changed what quarry does — frames got faster, a card fix changed which artifacts parse, stat -R enabled bare-store serving. ZIT_REF is a build argument and /etc/quarry-build records the pair, so a container can answer which zit it carries.

compose follows notify's shape, including the constraint its own file documents: dagnats binds loopback in standalone mode, so everything shares its network namespace. quarry joins it too — its embedded NATS uses DontListen and binds nothing, so there is no port to collide with.

docs/running.md is the by-hand path, which is what this was actually developed against: the launchd-signed dagnats, notify's bootstrap and workflows, the topic-vs-subscriber addressing, and the two credentials that close the write and push gates.

Unverified, and said so in the doc: no container runtime is installed here, so the images have never been built. The two build recipes inside them ARE verified natively — zit compiles from a clean clone with zig build --release=fast, quarry builds fully static with CGO_ENABLED=0.

Also lands the publish-throughput measurement as an opt-in test. It is what disproved the hypothesis that synchronous publish was the ingest bottleneck (62k msg/s sync), which redirected the search to zit frames and quarry's folding. check-in: bbe731e042 user: dmestas tags: trunk

2026-08-16
09:57
chat: drop DAG archival — keep chat ephemeral like Fossil

Reversed 0001 §5's 'durability is the DAG': minting chat into synced, content-addressed forum artifacts writes casual chatter permanently into the DAG, the opposite of Fossil's deliberate chat ephemerality (server-local, auto-purged, never synced). Chat stays live + the 7-day JetStream window; durable archival becomes a future quarry-specific/S3 concern, not near-term. Removes internal/chatarchive, its wiring and flags, events.KV, and the zitcli forum/technote wrappers it used (they return with v2 web-authored forum). Chat itself is unchanged. check-in: 3d68e9b401 user: dmestas tags: trunk

05:16
chat archival: fold chat into forum-thread artifacts (0001 §5 durability)

internal/chatarchive: batches a channel's messages (per N or T) and mints them as a 'Chat archive' forum thread through zit forum post/reply (zit#76) — one thread per channel, each batch a reply carrying the transcript, so history clones with the repo. Minting runs only on the lease holder; non-holders drop their buffers (the holder's archive folds back to every node). zitcli gains ForumPost/ForumReply/ TechnoteAdd. --chat-archive on by default. Verified live: chat batches materialize as forum threads and reply to the same thread. check-in: bd91af3158 user: dmestas tags: trunk

04:50
chat: per-repo live channel over NATS (0001 §5)

internal/chat: messages fan out over NATS with a 7-day JetStream window (replay on join), keyed by project code so a channel is shared across nodes. chat.history/chat.post ops (post is not lease-gated — it mutates no store); web page with on-load history, a plain post form (no-JS baseline), and an SSE append stream (Datastar enhancement). Verified live: form post + cross-connection SSE delivery in-browser, and cross-node fan-out on a shared external NATS. Durable forum-thread archival waits on zit forum verbs (zit#76); the window is interim durability. check-in: 5670d3643d user: dmestas tags: trunk

03:48
scale-out: external NATS + multi-node fan-out (trio part 1)

events.Connect joins an external NATS so N nodes share one plane; --nats selects it (embedded stays the single-node default). Retention switched work-queue -> limits+cap: work-queue load-balanced one copy across nodes, leaving each index partial; limits fans out to per-node durables (name now carries a hashed node id) while MaxBytes/MaxAge keep disk bounded. Lease refusals surface as 503 (ops.ErrUnavailable), not 500. Verified live: two nodes on one external NATS + shared store, each folds the full store, the leased node writes while the other 503s and still folds the write cross-node. check-in: 89e4991bbf user: dmestas tags: trunk

2026-08-15
20:56
web: live fleet page; shared SSE patch loop

Home table morphs on any repo's change via Watch("*") wildcard. check-in: 0556d0b12c user: dmestas tags: trunk

20:36
events: work-queue retention on ZITEVT; migrate old streams

Acked events leave the stream, so disk tracks the in-flight backlog, not store history (was 5.6GB beside sqlite's 218MB). Old-config streams are dropped with their cursors; the census republishes and idempotent folds converge. check-in: 14b0c96b83 user: dmestas tags: trunk

More ↓