This Day In History For 2027-08-31
1 Year Ago (more context)
|
2026-08-31
| ||
| 23:48 | chat: Range from zero means DeliverAll, not StartSequence(0) check-in: 967c0a4c92 user: dmestas tags: trunk | |
| 23:21 | • Edit [b12d9b381a]: Add "ci-fail" with value "35e59af0189adec5f7e481427b22f3eb". artifact: 63dd9e999e user: dmestas | |
| 23:20 | web: rename fleetPage to explorePage; it is the public index, not the fleet check-in: b12d9b381a user: dmestas tags: trunk | |
| 23:17 | • Edit [575a4301d7]: Add "ci-fail" with value "540f01d40196e4facbde118ca48463f5". artifact: 8e8b6f491d user: dmestas | |
| 23:17 | health: fix the banner's duration call; pin it with a render test check-in: 575a4301d7 user: dmestas tags: trunk | |
| 23:14 | • Edit [ee62d06275]: Add "ci-fail" with value "85bb36297099c18ec2fb42bcf6c77fbd". artifact: 41cf2e0ce2 user: dmestas | |
| 23:14 | health: watch dagnats and notify, journal outages, banner the fleet page check-in: ee62d06275 user: dmestas tags: trunk | |
| 23:03 | exceptions: persist the journal so it survives restarts check-in: 1f6aaeac2d user: dmestas tags: trunk | |
| 22:45 | • Edit [769040d377]: Add "ci-fail" with value "561318709713ecf463ae9c308473dd7a". artifact: be0a56c881 user: dmestas | |
| 22:45 | exceptions: journal background job failures, not just log them check-in: 769040d377 user: dmestas tags: trunk | |
| 22:41 | exceptions: register client-error on the outer mux, under the api subtree check-in: d79a667532 user: dmestas tags: trunk | |
| 22:39 | exceptions: capture browser errors too, journal template failures, list layout check-in: 7126e45e7e user: dmestas tags: trunk | |
| 22:27 | fleet: anchor the fold drawer to its own button check-in: 20b0ab77cc user: dmestas tags: trunk | |
| 22:24 | • Edit [637ba530a4]: Add "ci-fail" with value "3cf554bbaff38f68391f00a4f8cb4a24". artifact: 90014a7444 user: dmestas | |
| 22:24 | fleet: title-case the name; fold Mirrors then Operations into a popover check-in: 637ba530a4 user: dmestas tags: trunk | |
| 22:22 | • Edit [e6502c71a8]: Add "ci-fail" with value "7bbbb2e2014d44e6231e8aad0a5a4b52". artifact: 847eff3b8f user: dmestas | |
| 22:22 | fleet: fix settings page template error; $.SavedPanel inside the with-block check-in: e6502c71a8 user: dmestas tags: trunk | |
| 22:18 | fleet: drop OwnH1 where the content no longer draws the heading check-in: 0712c3a786 user: dmestas tags: trunk | |
| 22:17 | fleet: wear the repository bar — one name, plain tabs, no per-page h1 check-in: ccd9b10fc0 user: dmestas tags: trunk | |
| 22:08 | dash: give the repository selector room above the feed check-in: ae3b86683c user: dmestas tags: trunk | |
| 21:58 | web: one .list-card component; every row list wears the ticket listing's shape check-in: 98c3078224 user: dmestas tags: trunk | |
| 21:51 | dash: read the repository facet from the query and keep it while paging check-in: 0cd361116e user: dmestas tags: trunk | |
| 21:49 | • Edit [05ad2976e1]: Add "ci-fail" with value "1d2d0d7c1755dc6eab5631e68add00b0". artifact: 70cdc1fe86 user: dmestas | |
| 21:49 | dash: chip thresholds match each form's measured width check-in: 05ad2976e1 user: dmestas tags: trunk | |
| 21:47 | • Edit [994cb96578]: Add "ci-fail" with value "3ae494fcd4c6b6e569932f85c498bd04". artifact: 1aa9c6a5bb user: dmestas | |
| 21:47 | dash: set the chip thresholds from measured column widths check-in: 98edfd7da1 user: dmestas tags: trunk | |
| 21:45 | • Edit [05689ed46d]: Add "ci-fail" with value "a2f4e46802c10363dfe3769588d57d52". artifact: f8f91b89dc user: dmestas | |
| 21:45 | dash: tighten chip spacing so the count tier fits the column check-in: 994cb96578 user: dmestas tags: trunk | |
| 21:44 | • Edit [abeb8276b1]: Add "ci-fail" with value "65c8f908eb086d966ebcc8a9dd3724eb". artifact: aef9c2aa56 user: dmestas | |
| 21:44 | dash: key the chip ladder to the feed column, not the viewport check-in: 05689ed46d user: dmestas tags: trunk | |
| 21:42 | • Edit [0ac19e0ebe]: Add "ci-fail" with value "b070d38b1d8b29871283a2e4a121c01a". artifact: 8ccd8d2727 user: dmestas | |
| 21:42 | dash: chips shed count, then icon, then wording as the screen narrows check-in: abeb8276b1 user: dmestas tags: trunk | |
| 21:37 | • Edit [809e6e9ce0]: Add "ci-fail" with value "2d5e5b2955095cbfaae76390e6bd2028". artifact: 4861999b93 user: dmestas | |
| 21:36 | dash: drop unselected chip counts on small phones check-in: 0ac19e0ebe user: dmestas tags: trunk | |
| 21:36 | • Edit [42d9e776de]: Add "ci-fail" with value "9c4203fb79ae6ebdac3797b6ac43f6cf". artifact: bfbbc5a8a8 user: dmestas | |
| 21:35 | dash: on a phone only the selected activity chip keeps its label check-in: 809e6e9ce0 user: dmestas tags: trunk | |
| 21:33 | • Edit [6723b7ea99]: Add "ci-fail" with value "38597d371f7fe2e197f653c29ca4be5e". artifact: 7f21d5c74b user: dmestas | |
| 21:33 | dash: short chip labels and truncated hashes on narrow screens; repository facet check-in: 42d9e776de user: dmestas tags: trunk | |
| 21:24 | • Edit [e99997b8c1]: Add "ci-fail" with value "90e665e8ee21a3bfbf4216178b7a3e60". artifact: 104c6a2311 user: dmestas | |
| 21:24 | fix the stray backslash from the previous commit check-in: 6723b7ea99 user: quarry tags: trunk | |
| 21:22 | dashboard fragment renders from its own template check-in: e99997b8c1 user: quarry tags: trunk | |
| 21:19 | dashboard: activity rows match the tracker, chips stop shrinking, tabs and paging morph check-in: e56c5ac558 user: quarry tags: trunk | |
| 21:02 | warm four repositories at once, not two check-in: 7a4e0fcfc7 user: quarry tags: trunk | |
| 21:00 | • Edit [0cb8f48a5f]: Add "ci-fail" with value "048a15c0832b2282040e32756a3b700f". artifact: 7048bbf6e4 user: dmestas | |
| 21:00 | reap orphaned zit serve children at startup check-in: 0cb8f48a5f user: quarry tags: trunk | |
| 20:58 | • Edit [baecdf8460]: Add "ci-fail" with value "038130de66a03c6a262aee751d759029". artifact: e33916fc0f user: dmestas | |
| 20:54 | • Deleted wiki page "Selected states" artifact: 67bf907596 user: quarry | |
| 20:54 | • Added wiki page "checkin/baecdf846066db901bb8d026c0343134499a58aa6de17d5d5878daf4b7b27cd1" artifact: 0447103f3b user: quarry | |
| 20:49 |
selection: underline means tab; toggles wear the button chip
See the wiki page [Selected states] for the states and the reasoning. check-in: baecdf8460 user: quarry tags: trunk | |
| 20:49 | • Added wiki page "Selected states" artifact: 466021a3d8 user: quarry | |
| 20:40 | • Edit [47064a1033]: Add "ci-fail" with value "e161990bdd1ac5b11e1ccd2e6eb17ced". artifact: 3a3818f2b0 user: dmestas | |
| 20:33 | • Closed ticket [3b0939bad2]: Adopt a strict CSP: datastar CSP mode, nonces, and the untrusted-expression audit plus 3 other changes artifact: 53bb18256e user: ai-local | |
| 20:33 | pin the nonce alphabet: a + in the attribute silently kills CSP mode check-in: 47064a1033 user: quarry tags: trunk | |
| 20:32 | • Ticket [3b0939bad2] Adopt a strict CSP: datastar CSP mode, nonces, and the untrusted-expression audit status still Open with 1 other change artifact: 40974d4886 user: ai-local | |
| 20:30 | url-safe nonce: no + to escape in the attribute check-in: ce8dcd1ae6 user: quarry tags: trunk | |
| 20:02 |
a strict CSP: nonces, no unsafe-eval, no inline handlers
quarry served no page policy at all. The blocker was never the data-on:* attributes — script-src does not govern data attributes — it was unsafe-eval, because datastar compiled expressions with Function(). 1.0.3 takes a nonce instead. Removed all 14 inline handlers: 11 identical onchange=this.form.submit() became data-on:change with requestSubmit (which validates, unlike submit), two selection handlers became expressions, and the copy-hash button moved to a delegated assets/copy.js. Scripts now carry content-hashed immutable URLs instead of revalidating daily. The audit found the expressions already safe, for a reason worth pinning: html/template strips a data- prefix before classifying, so data-on:drop gets the JAVASCRIPT escaper. That matters because an HTML-escaped quote decodes back to a quote before any script reads the attribute, and a board column status comes from .quarry/tickets.json — upstream content on a mirror. check-in: ef352402f6 user: quarry tags: trunk | |
| 17:12 | • New ticket [3b0939bad2] Adopt a strict CSP: datastar CSP mode, nonces, and the untrusted-expression audit. artifact: 2b2db7e735 user: ai-local | |
| 17:11 | • Ticket [5064369266] HTTP compression for pages and API, with SSE excluded status still Open with 1 other change artifact: fba710c438 user: ai-local | |
| 17:10 | • Edit [e13cb74667]: Add "ci-fail" with value "1286047268caf42fc16ef457abaf66c4". artifact: f97aaf7825 user: dmestas | |
| 17:10 |
datastar 1.0.0-RC.7 to 1.0.3
A release candidate was shipping in production. No breaking changes across the three patch releases; two fix things quarry leans on — select signal typing and dynamic multiple (the ticket sidebar and board are native selects) — and 1.0.3 adds the CSP mode that would let the forge drop unsafe-eval. check-in: e13cb74667 user: quarry tags: trunk | |
| 16:08 |
gzip what benefits, never the event streams
Nothing was compressed: a request carrying Accept-Encoding got byte-identical bytes back. Measured here, the timeline page is 309,584 to 36,599 (88%), a ticket list 84%, a highlighted source page 92%. gzip rather than brotli deliberately — brotli q5 beat gzip 6 on both size and time, but that is a dependency for ~7% on a page already 88% smaller. SSE is excluded by content type: 22 stream writers, and a buffered stream is a live update that never arrives. check-in: d598ecafa3 user: quarry tags: trunk | |
| 15:49 |
serve the stylesheet instead of inlining it in every page
112,118 bytes of <style> rode on every response — 40% of a 309,584-byte timeline page, byte-identical each time and uncacheable because it had no URL, while the JS assets already carried Cache-Control. Now one hashed asset served immutable: a rule change mints a new URL, so a stale cache is impossible without anyone revalidating. check-in: eb4793ee8e user: quarry tags: trunk | |
| 15:39 |
the zit figure's count suffix is two bytes, not one
The multiplication sign in 'zit 34.1ms×2' never matched a byte compare, so the duration parsed as zero and the store note appeared beside an identical zit figure — claiming a wait already accounted for. check-in: 433a022052 user: quarry tags: trunk | |
| 15:37 | • Edit [17454ef71f]: Add "ci-fail" with value "ce2089cf97e617f11b03ec190f60e1e7". artifact: 8cfba3df5a user: dmestas | |
| 15:37 |
the footer names store wait the timing context missed
A call on context.Background() carries no timer, so a page blocking six seconds on a warm pass reported 'ops 11.09s, zit 32.9ms' — and the ops panel's claim that ops minus zit is index work was false while it did. Overlap catches what attribution misses: subprocess busy time inside the render window, unioned, reported only when it exceeds what was already attributed. check-in: 17454ef71f user: quarry tags: trunk | |
| 15:32 | • New ticket [cafb1f21be] Attribute detached-context zit calls, so ops minus zit means what the panel says. artifact: 5c9820ef82 user: ai-local | |
| 15:32 | • Closed ticket [073e11ce05]: Size-gate the syntax highlighter: plain text past a threshold plus 3 other changes artifact: 09ce4dcb49 user: ai-local | |
| 15:32 | • Closed ticket [a82ff129be]: Window large file pages the way diffs already are plus 3 other changes artifact: c8161d05c9 user: ai-local | |
| 15:32 | • Closed ticket [9e53a2d9d9]: Cache rendered syntax highlighting by blob hash plus 3 other changes artifact: 5ad6ffba69 user: ai-local | |
| 15:25 | • Edit [d6bf4e65b3]: Add "ci-fail" with value "835a70c742b4a5d89bb1bbad625a020f". artifact: 4f5c6adf9b user: dmestas | |
| 15:24 |
fold the branch summary instead of deriving it per request
branch.list grouped every check-in in the repository on every request: ~150ms in sqlite on tcl, 460-850ms through the driver, on a page whose budget is 500ms. A LIMIT could not help — the grouping happens before the limit applies. Same remedy as the ticket table: fold once when the shape changes, read by index. Refreshed in both fold paths, which the parity test insisted on. check-in: d6bf4e65b3 user: quarry tags: trunk | |
| 15:17 | • Edit [8c5b6e5392]: Add "ci-fail" with value "b08554ce07518847fc6368aa4cef60f1". artifact: 45ceac79ac user: dmestas | |
| 15:17 |
warm the default branch too, so ops minus zit means what it says
A subprocess on a render path is latency one reader pays for everybody, and one on a detached context is invisible in the footer while still counting toward the total — which is what sent the last investigation chasing SQL for an hour. check-in: 8c5b6e5392 user: quarry tags: trunk | |
| 13:26 | • Edit [00e90b88cc]: Add "ci-fail" with value "632f4a50fafdf5ff68de81466eef3bd8". artifact: f9113e3ef6 user: dmestas | |
| 13:25 |
leaf set keys on zit's abbreviation, not one subprocess per leaf
Leaves expanded every twelve-character hash zit printed into a full one with a zit info call each: 473 leaves on sqlite meant 357 spawns and 6.1s in a single page-load window. The one consumer asks a membership question, which a twelve-hex-character key answers. Contract test now pins the prefix contract and that a full hash finds its leaf. check-in: 00e90b88cc user: quarry tags: trunk | |
| 13:17 | • Edit [e16d738900]: Add "ci-fail" with value "0a5f2dd81c1887abb3d31d8885919a28". artifact: 3c700cb170 user: dmestas | |
| 13:16 |
warm the leaf set instead of making a reader pay for it
zit leaves is 6.4s on sqlite, not the ~10ms this comment claimed, and the first reader paid it: 10.8s cold against 0.5s warm. Invisible in the footer too, since a detached context carries no timer. Warmed at registration and after each ingest; a reader arriving early gets no leaf marks rather than a six-second wait. check-in: e16d738900 user: quarry tags: trunk | |
| 13:14 | • Edit [22346a81a7]: Add "ci-fail" with value "fa0c1b8f15a547e79f03273f70bd65ed". artifact: 9c8a940657 user: dmestas | |
| 13:14 |
prefix lookups seek instead of scanning; sqlite tuned for this workload
col LIKE ? || '%' cannot use an index: the pattern is not a literal when the statement is prepared, so finding ONE check-in by its full hash read all 36,853 rows of sqlite's tree. That was 10s on a first timeline render and 40ms after, which reads as cold I/O and is not. Half-open hex ranges seek. Also sets cache_size, mmap_size and temp_store, none of which were configured. check-in: 22346a81a7 user: quarry tags: trunk | |
| 12:58 | • Edit [3f926fafe8]: Add "ci-fail" with value "79ebc79850c41210dd82f7a65cc95263". artifact: dee8da5635 user: dmestas | |
| 12:57 |
name the slow op in the log
A ten-second page said 'ops 11.09s x8' and stopped there: the container is timed, its contents are not, so the slow one cannot be identified. Anything past 250ms now says which op it was. check-in: 3f926fafe8 user: quarry tags: trunk | |
| 12:55 | • Edit [c517ec9464]: Add "ci-fail" with value "4d6ea2c51e65c3c1e3d0b114ab18a411". artifact: 37d4bc43ee user: dmestas | |
| 12:55 |
branch pickers ask for a picker, not every branch
The repository home fetched all 1,759 of sqlite's branches to draw a selector of twenty-five: 478ms of a 520ms page, spent building and marshalling rows nobody saw. branch.list gains limit and open, applied in SQL — the filter cannot follow the limit, or an old repository's first rows are all closed and the picker comes back empty. check-in: 1fc5dd6ba2 user: quarry tags: trunk | |
| 12:46 | • Edit [335c4703c3]: Add "ci-fail" with value "739fd4e61ac15aea1ec84e38cac919a1". artifact: 381e4460a2 user: dmestas | |
| 12:46 |
file pages draw a window, not the whole file
Chroma emits a span per token, so whole-file renders built DOMs nobody asked for: 198KB of build.c became 40,083 nodes and 137ms of parse. Lexing still starts at byte zero — a window opening inside a block comment cannot colour itself — but the iterator stops at the window's last line, so the tail is never tokenised. 103ms to 2.7ms for a first screen. Scroll fetches the next window; no-script gets a link. check-in: c517ec9464 user: quarry tags: trunk | |
| 12:35 | • Edit [05dbba300d]: Add "ci-fail" with value "b786b8e2095027d3d46c750fd9c0f524". artifact: 167a631266 user: dmestas | |
| 12:35 | licences: x/sync is now a direct dependency check-in: 335c4703c3 user: quarry tags: trunk | |
| 12:34 | • Edit [937b10d6de]: Add "ci-fail" with value "e412cdae96f08c64632a83808d1c702f". artifact: e6ab555753 user: dmestas | |
| 12:34 |
collapse concurrent highlight misses into one tokenisation
A read-through memo only helps once a value exists: ten cold readers of sqlite's where.c each took 0.95s against 0.42s for one, all tokenising the same immutable bytes. Safe because the value is a pure function of its key. x/sync was already in the module graph. check-in: 05dbba300d user: quarry tags: trunk | |
| 12:25 | • Edit [f4e226e5a4]: Add "ci-fail" with value "31ef4ff747e5a5cc265aaeecb05246ee". artifact: 2075a429b2 user: dmestas | |
| 12:25 |
the highlight gate is a safety valve, not a policy
256KB turned ten of sqlite's src files permanently grey, which trades the feature for the fix. Raised to 2MB; the per-blob cache carries the cost until windowing removes the need for a threshold at all. check-in: 937b10d6de user: quarry tags: trunk | |
| 12:18 | • Edit [c53a183de9]: Add "ci-fail" with value "2ff7eac06b7d89f855a5f17e20780640". artifact: 2a4e6ab3c5 user: dmestas | |
| 12:18 |
large files arrive: size-gate the highlighter and cache it by content
Highlighting was paid on every request with no cache, and its cost tracks token density: sqlite's btree.c, 407KB of dense C, took 490ms and rendered 2.3MB of HTML. Past 256KB the lexer is skipped and the page says so; below it, identical content is highlighted once. check-in: f4e226e5a4 user: quarry tags: trunk | |
| 12:12 | • New ticket [073e11ce05] Size-gate the syntax highlighter: plain text past a threshold. artifact: 8edee5e56e user: ai-local | |
| 11:54 | • New ticket [61417e834b] Evaluated valyala/quicktemplate as an html/template replacement — not adopting. artifact: 3d210fc96a user: ai-local | |
| 11:53 | • New ticket [93cb0f5816] Serve the stylesheet and sprite as cacheable assets instead of inlining them. artifact: e3b7cd5f7b user: ai-local | |
| 11:53 | • New ticket [5064369266] HTTP compression for pages and API, with SSE excluded. artifact: a2031eb0a3 user: ai-local | |
| 11:53 | • New ticket [a82ff129be] Window large file pages the way diffs already are. artifact: f7bbb70d5a user: ai-local | |
| 11:53 | • New ticket [9e53a2d9d9] Cache rendered syntax highlighting by blob hash. artifact: dd182d2745 user: ai-local | |