Skip to content
quarry Timeline
Login

Timeline

50 descendants and 50 ancestors of 28eeb1851530c922

2026-08-29
15:46
merge trunk into ticket-refs closed check-in: 6908457496 user: dmestas tags: ticket-refs
15:34
land attention-rfc check-in: 42040b8d17 user: dmestas tags: trunk
15:27
rfcs: 0011 §14 references, reply-quotes, previews; 0012 phase 1 work closed check-in: 88bd060725 user: dmestas tags: attention-rfc
15:07
rfcs: 0011 attention (chat, push, provisioning) and 0012 its plan check-in: 84e5b13cba user: dmestas tags: attention-rfc
14:58
tickets: badge each row with the landings that reference it check-in: 87f2bde741 user: dmestas tags: ticket-refs
14:27
tickets: show the landings and threads that reference a ticket check-in: b154bd874e user: dmestas tags: ticket-refs
13:38
land flakefix-1 check-in: 8461245df2 user: dmestas tags: trunk
13:30
xfer: fossil peer teardown raced TempDir cleanup closed check-in: ac7ffd0fa8 user: dmestas tags: flakefix-1
12:29
land fmtgate-1 check-in: 3a0c119e43 user: dmestas tags: trunk
12:22
ci: gofmt the stragglers, gate formatting closed check-in: 04431474d1 user: dmestas tags: fmtgate-1
11:45
land selfci-1 check-in: acbfefd43b user: dmestas tags: trunk
11:40
ci: quarry's own pipeline and worker (dogfood) closed check-in: 758bdf668c user: dmestas tags: selfci-1
10:31
land workertokens-1 check-in: 03b9b136c9 user: dmestas tags: trunk
10:31
settings: mint and revoke worker tokens at the engine (dagnats#627) closed check-in: 01b8f2847b user: dmestas tags: workertokens-1
10:25
land ymlci-1 check-in: 9961552b6c user: dmestas tags: trunk
10:24
ci: ci.yml pipelines through the engine's CI door (dagnats#633) closed check-in: 9393440642 user: dmestas tags: ymlci-1
10:19
land autoland-1 check-in: 3034dcbd86 user: dmestas tags: trunk
10:19
landings: land when green (RFC 0009 verdicts follow-through) closed check-in: 9310962151 user: dmestas tags: autoland-1
10:06
land loglane-1 check-in: 4ee4629aee user: dmestas tags: trunk
10:06
ci: read the shipped #624 log lane; not-run steps say so closed check-in: 3ef35f90dd user: dmestas tags: loglane-1
09:34
land premerge-zit020 check-in: e9ef3c0943 user: dmestas tags: trunk
09:34
premerge: zit 0.2.0 clone auto-opens; update to target closed check-in: 9fdc152c20 user: dmestas tags: premerge-zit020
09:32
land logview-4 check-in: e0b676c7d4 user: dmestas tags: trunk
09:32
land logview-3 check-in: 1e10e311f2 user: dmestas tags: trunk
09:32
land logview-2 check-in: 76cb624a71 user: dmestas tags: trunk
09:32
land logview-1 check-in: 65392b20c8 user: dmestas tags: trunk
09:31
ci: cancelled is stopped, not broken closed check-in: c811b34538 user: dmestas tags: logview-4
09:27
ci: label runs, cancel superseded builds (dagnats#629) check-in: d2254065fd user: dmestas tags: logview-4
09:10
rfc 0010: local mode — quarry ui behind zit ui check-in: 2770cb7a21 user: dmestas tags: trunk
02:27
oltp: guard that an existing store still opens — schema indexes must not name a migrated column check-in: 160b95601d user: dmestas tags: trunk
02:18
ci: run page audit fixes — honest step words, tight lines, drained repro closed check-in: 9e1d3d220b user: dmestas tags: logview-3
02:16
ci: create the pair index after the migration adds the column, not beside CREATE TABLE check-in: 16f8e171bc user: dmestas tags: trunk
02:15
ci: live-follow the running run; drained record outlives the engine; runners listed check-in: 6738b4579f user: dmestas tags: logview-3
02:11
ci: drain finished runs' logs beside the verdict closed check-in: 500cbc37ec user: dmestas tags: logview-2
02:08
ci: run page — one no-logs answer per render; no 'took 0s' closed check-in: 8ba9079b8a user: dmestas tags: logview-1
02:06
ci: the run page — steps, durations, logs, repro check-in: 8efa1b4744 user: dmestas tags: logview-1
01:56
land rfc-logs check-in: f49807c00a user: dmestas tags: trunk
01:56
rfc 0009: logs split at the engine's edge (dagnats#624 rescope) closed check-in: d477ca4620 user: dmestas tags: rfc-logs
01:50
land ci-7 check-in: 572f7dcbf4 user: dmestas tags: trunk
01:50
land ci-6 check-in: 6284e87495 user: dmestas tags: trunk
01:50
land ci-5 check-in: 3c7db7e536 user: dmestas tags: trunk
01:50
merge trunk closed check-in: 92233fd802 user: dmestas tags: ci-5
01:49
land ci-4 check-in: 7932145520 user: dmestas tags: trunk
01:49
land ci-3 check-in: 60726f18bb user: dmestas tags: trunk
01:49
merge trunk closed check-in: d4621cf095 user: dmestas tags: ci-3
01:44
ci: say when the target moved; offer update only then closed check-in: c9fd67b3b7 user: dmestas tags: ci-7
01:29
ci: the decision card closed check-in: b3ad657cf8 user: dmestas tags: ci-6
01:22
ci: checks panel wraps and orders for attention check-in: 36b81060d6 user: dmestas tags: ci-5
01:09
ci: verdict tags opt-in per repo; premerge verdicts carry onto the merge check-in: d36be0ef02 user: dmestas tags: ci-5
01:04
ci: premerge — checkout helper, pair-keyed runs, per-branch mode closed check-in: 2dfd42319f user: dmestas tags: ci-4
00:55
ci: check.report, reporter tokens, ci.trigger check-in: 28eeb18515 user: dmestas tags: ci-3
00:45
drop unrelated formatting churn from three web files check-in: 67a13adccf user: dmestas tags: ci-2
00:44
ci: checks panel, required checks, override with a reason check-in: 5d0f1de4c6 user: dmestas tags: ci-2
00:26
rfc 0009: CI — verdicts on landings, spec, premerge, runners closed check-in: 56d87626d9 user: dmestas tags: ci-rfc
00:07
settings: saving no longer empties the page

The description form rendered the settings page from seven fields of its own while the GET built a dozen panels, so Save returned a page with everything below the form gone — and a stray h1, because the POST also missed HideH1. Two symptoms, one cause: the same page assembled in two places.

There is one builder now, and the successful save REDIRECTS, as every other settings POST already did. That leaves the saved state in one place, so the two cannot disagree again and a reload does not re-submit. The refusal path still comes back holding what the reader typed — now over the whole page rather than a fragment of it.

Verified: after a save the page is byte-equivalent to the GET but for the Saved flash, with all nine panels present. check-in: d2368f6a92 user: dmestas tags: trunk

2026-08-28
21:08
a segmented control never breaks mid-way; the tools beside it move

Squeezed on a phone, the tracker's state filter dropped its last choice onto a line of its own — '99 All' under '30 Open | 69 Closed' — which reads as a stray button rather than as part of the set. The control now keeps its line whole and comes first, because it is how a reader says what they are looking at; the tool groups beside it wrap instead.

The landings list is unchanged: one icon fits beside its filter, so that row still holds one line. check-in: 87f42420b7 user: dmestas tags: trunk

17:20
land perm-fixups check-in: 78a6a46d87 user: dmestas tags: trunk
15:49
landings list: clip long titles and drop their markup

A row whose title is the whole message ran fifteen lines down a phone and pushed every other record off the screen. Clipped at the same 72 the timeline uses for this exact string, so the two listings agree on how long a landing's name is.

The marks come off too: a title is plain text inside the row's link, so *emphasis* and `code` were printing their delimiters. The detail page still renders the message in full, with its markup — a list says what a record is called, not what it says. check-in: f2d73a8545 user: dmestas tags: trunk

15:47
accounts: logins are a closed alphabet closed check-in: 03ca730475 user: dmestas tags: perm-fixups
15:47
caps: migration keeps repo_role while any row is unknown check-in: e6d7d4cac3 user: dmestas tags: perm-fixups
15:46
api: grant and revoke carry the guard's warning check-in: 460339d1db user: dmestas tags: perm-fixups
15:45
web: raw acct- saves meet the lockout guard check-in: 33dbf50ef7 user: dmestas tags: perm-fixups
15:45
caps: repo-less effective set resolves stock, not the fleet default check-in: 52ee45d56d user: dmestas tags: perm-fixups
01:21
landings: headings scale instead of clipping; the decision row abbreviates

The h1 had no rule at all, so it drew at the browser's 2em on every screen. A real subject line then became three lines of shouting on a phone, which made clipping look necessary — it was not. The clip only hid words: 'permissions without a…' with the rest nowhere. Headings now clamp between 1.35rem and 2rem and wrap, so a long one fits and says the whole thing. The pathological case — no subject line at all, the title IS the body — already drops the visible heading, so nothing depends on the clip any more.

The decision row gains a second step at 22rem: measured at 320, five abbreviated buttons want 364px against 302 of room, and Comment is the widest word left. It has an icon and destroys nothing, so it is the one that loses its label. 'Land the strata (N rungs)' is now 'Land strata (N)' at every width — it was too many words wide as well as narrow.

The strata test pinned that sentence, so a wording change read as a missing control. It now asserts the formaction, which is the contract, and the rung count rather than the sentence around it. check-in: 6469f151c4 user: dmestas tags: trunk

2026-08-27
23:54
landings: the decision row stays one line, the words give way instead

The row grew from three verbs to five as landings learned to update and to land a whole strata. Flex items shrink before they overflow, so on a phone every label folded to three lines AND the leftmost button still ran off the side.

flex:none and nowrap keep each button one line at its own width; below 30rem the labels shorten — Update, Accept, Land x2 — so all five fit without the row breaking. The long forms stay on wider screens.

Reject keeps its word at every width: there is no X in the sprite, and an unlabelled destructive control is worse than a cramped one. check-in: 87482c870f user: dmestas tags: trunk

21:14
land perm-8 check-in: 04b136736f user: dmestas tags: trunk
21:14
land perm-7 check-in: 913640f9c8 user: dmestas tags: trunk
21:14
land perm-6 check-in: a24572d64c user: dmestas tags: trunk
21:14
land perm-5 check-in: a2310e6ea0 user: dmestas tags: trunk
21:13
land perm-4 check-in: 2800e23b4c user: dmestas tags: trunk
21:13
land perm-3 check-in: 04fb645814 user: dmestas tags: trunk
21:13
land perm-2 check-in: 31c8a14681 user: dmestas tags: trunk
21:13
land perm-1 check-in: cff61f323b user: dmestas tags: trunk
21:02
roles: settings/config live via zit -R (zit#153 shipped) closed check-in: 05497a6552 user: dmestas tags: perm-8
16:35
roles: fossil settings and config surface, blocked on zit#153 check-in: afe83bd5e7 user: dmestas tags: perm-8
14:37
roles: Datastar live preview, two-way string and checkboxes closed check-in: ad5348a584 user: dmestas tags: perm-7
14:32
roles: settings IA reorder, Advanced (fossil) with decoders closed check-in: d299bb35af user: dmestas tags: perm-6
14:29
roles: visibility presets, take-private wizard, fleet default closed check-in: 40c3fe1567 user: dmestas tags: perm-5
14:19
roles: People section, per-person editor, account.explain, guard closed check-in: 005d6862c1 user: dmestas tags: perm-4
14:12
landings: no headline where the author wrote none

A record only HAS a headline when its author wrote one — a subject line, a blank line, then the body. Written without that, the whole message is the title, and clipping it to 72 invented a headline the author never wrote, then ended it in an ellipsis that says data is hidden when the same words are in full directly below.

The visible heading now goes for that shape: the chips and the message carry the record, and the sr-only h1 keeps the page named. A record that does have a subject line still shows it. check-in: 2dccc0cb5f user: dmestas tags: trunk

14:09
roles: one system, repo_role retired closed check-in: b0e95e0777 user: dmestas tags: perm-3
14:02
roles: the compiler — presets, abilities, closure, infer, decode closed check-in: f5fae58b0c user: dmestas tags: perm-2
13:58
RFC 0008: roles — permissions without a manual closed check-in: 15e36a8c1a user: dmestas tags: perm-1
13:18
landings: the record shows its whole message, and the heading shows no markup

Two faults from one cause. A message written with no blank line has no prose under the header at all — zit put the whole thing in the title card. So clipping the heading dropped 290 of 362 characters with nowhere left to read them, and the record rendered no description. The opener now falls back to the title, rendered like any other body, which is also the only way its Markdown ever reaches a reader.

The heading drops the marks instead: an h1 is plain text, so *emphasis* arrived as literal asterisks and read as a rendering bug. Asterisks and backticks only — _x_ in prose and my_file_name in a path are the same three characters, and mangling every identifier to italicise a rare one is the worse trade. check-in: db743a90a0 user: dmestas tags: trunk

13:07
landings: the heading is a headline, not the whole message

zit puts the entire -m message in the record's title card, so a message written without a subject line arrives as one 400-character 'line' that firstLine returns whole — an h1 that fills a phone screen before the record says anything about itself.

Clipped at the same 72 the timeline already uses for this exact string, so the two agree on what a landing is called. Nothing is lost: the opener's full text renders immediately below as the description. check-in: ff1cfd1aa9 user: dmestas tags: trunk

12:12
Landed: the disabled state. check-in: d39333b854 user: dmestas tags: trunk
12:12
landing: a disabled decision reads as disabled closed check-in: ec0abed3b4 user: dmestas tags: disabled-style
12:09
Landed: controls follow the capability that presses them. check-in: a7850eb7a1 user: dmestas tags: trunk
12:09
landing: decision controls no longer hide behind the composer closed check-in: e44303dc2c user: dmestas tags: landing-controls
12:02
Landed: the contained-branch reading. check-in: 99bed00eb6 user: dmestas tags: trunk
12:02
landing: a contained branch reads accepted, not claimed closed check-in: 938c28695e user: dmestas tags: contained-claim
11:42
Green against merged trunk: vet, build and the full suite. Clicking a doc tab now moves the address bar to the tab's own href, verified live. check-in: c2ccbb5e93 user: dmestas tags: trunk
11:42
Merge trunk

Current with the segment below, now landed. closed check-in: a50a6dee00 user: dmestas tags: url-sync-doctabs

11:41
Green against merged trunk: vet, build and the full suite. Emitted markup unchanged, so the diff toggle behaves exactly as before. check-in: e7d457d6d5 user: dmestas tags: trunk
11:41
Merge trunk

Keeps the segment current with the landing.update work before it lands. closed check-in: 645b11cd8a user: dmestas tags: url-sync-helper

11:41
web: the repository tabs read as labels, not as route names

Files, Timeline, Tickets, Docs, Landings, Forum, CI, Chat — and Repositories/People on the home tabs. CI is spelled, not capitalised: a text-transform would have rendered it Ci.

navlink matches the active tab on its section argument, so the label was only ever display text. check-in: 5a07f20dd6 user: dmestas tags: trunk

11:22
Landed: Update from target, on the store. check-in: f64e1eb73a user: dmestas tags: trunk
11:22
landing.update: bring the target into the branch on the store (zit#152) closed check-in: ab5e011fc2 user: dmestas tags: landing-update
10:54
Doc tabs: keep the URL on the tab you are reading

Switching README to LICENSE swapped the panel and left the address bar behind, so the tab on screen was unlinkable and a reload dropped you back on README — even though /r/REPO?doc=LICENSE has always been a real route, and the anchor was already carrying it as its href.

Moves the tabs onto syncurl, which corrects the address bar to that same href before fetching the fragment. check-in: c2775268a4 user: dmestas tags: url-sync-doctabs

10:52
One definition of swap-the-body-and-fix-the-URL

The diff toggle carried the replaceState handler as literal text in two attributes, with the reasoning in a comment above them. Both move onto a syncurl helper, so the next surface that needs it gets the try/catch and the replaceState-not-pushState choice for free instead of by copy-paste. Emitted markup is unchanged.

The helper neutralizes quotes in the fragment URL: it lands inside a JS string inside an attribute built as HTMLAttr, where escaping is off. check-in: 058a2216c9 user: dmestas tags: url-sync-helper

10:08
Landed: the size cap on what is drawn. check-in: d05ac2958a user: dmestas tags: trunk