50 ancestors of 9961552b6c302c6e
|
2026-08-29
| ||
| 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:48 | land ci-2 check-in: 6ce967a4db user: dmestas tags: trunk | |
| 01:48 | merge trunk closed check-in: 4e8bb73332 user: dmestas tags: ci-2 | |
| 01:46 | land ci-rfc check-in: 75c0ffe751 user: dmestas tags: trunk | |
| 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:14 |
settings: every panel confirms the same way, in the palette's green
The description form got a Save/Saved swap; the other panels still said nothing at all. Worse, three of them redirected to ?saved=1, which had quietly stopped meaning anything when the flash cookie replaced it — a regression I left behind an hour ago. Six exit paths across five handlers were still writing it. They all set a named flash now. The name matters: a page carries six Save buttons, and a bare boolean would light every one of them for a single save, telling the reader that everything was written when one thing was. Green comes from --add, the token that already marks a passing run and an open glyph, so 'it worked' is one colour across the forge. Webhooks is deliberately untouched: it is a LIST with Save, Pause and Delete per row, so lighting 'the' Save would need to know which row. Different shape, not this pattern. The visibility test pinned ?saved=1; it now asserts the flash, which is the contract rather than the spelling of a mechanism. check-in: 2f0c4fcb50 user: dmestas tags: trunk | |
| 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 | |
| 01:01 |
settings: the save confirms on the button, not in the page
The inline word had to appear and then leave, which is two layout shifts around the control just pressed. On the button there are none: both labels share one grid cell, so it is sized by the wider of them and nothing moves when they swap. The revert is CSS on the same four-second beat, because without script the label must still find its way back to Save. The announcement stays — sr-only, role=status — since a screen reader cannot read a button relabelling itself as an event. Reduced motion keeps the word and drops the movement. check-in: d28f1388fe user: dmestas tags: trunk | |
| 00:55 | ci: check.report, reporter tokens, ci.trigger check-in: 28eeb18515 user: dmestas tags: ci-3 | |
| 00:54 |
settings: the save's confirmation has a lifetime, and is spent once
Three faults in one paragraph. It never left: a confirmation is an EVENT, and rendering it as page content claims the page CONTAINS the fact of having been saved, which is only true for a moment. A reload replayed it: ?saved=1 stays in the address bar, so a refresh — or a bookmark — congratulated the reader for a save from hours ago. And it shifted the layout under the button just pressed. A one-shot cookie now carries the word across the redirect and is spent on arrival, so the URL stays clean and the second render is silent. The lifetime is CSS: it holds four seconds, then fades AND collapses, so no empty paragraph is left behind. Not script — this page must behave the same without JavaScript, and an animation costs nothing when the script is absent. role=status announces it on insert, before any of that runs. Reduced motion keeps the message and drops the animation: someone asking for less movement is not asking to be told less. check-in: 563eb933dd user: dmestas tags: trunk | |
| 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:35 |
settings: save the description in place when Datastar is present
The form keeps its method and action, so without the script it posts and redirects exactly as before — the data-on:submit attribute is inert (0001 Principle 3). With the script it posts to the SAME endpoint, which answers a Datastar-Request with a patch of the panel instead of a page: the same discrimination the board's move already uses. The panel is one template block, drawn by the page and re-drawn by the save, so the two cannot drift — the fault this page had an hour ago. Its 'Saved.' now sits beside the control that saved, not at the top of a page the reader has scrolled away from, and the refusal travels with the panel as PanelError rather than as the page-wide Error. The URL is deliberately left alone on the patched path. ?saved=1 exists to carry a word across a navigation; there is no navigation here, and putting it in the address bar would make a later reload announce a save that already happened. check-in: bbd1663825 user: dmestas tags: trunk | |
| 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 | |