Skip to content
quarry Today In History
Login

Today In History

This Day In History For 2027-08-22

1 Year Ago (more context)

2026-08-22
20:59
merge ticket-paging: page the list and table, drop the UI .json link check-in: 63da80d3ea user: dmestas tags: trunk
20:59
tickets: page the list and table; drop the .json link from the UI

The table computed a next page and never rendered it, so a tracker over 50 tickets simply ended. Both views now page by offset with a position line and both ends drawn. Triage order is computed in Go over the fetched rows, so it stays a bounded single page rather than pretending to page.

Only PageURL sets an offset: every other control returns to page one. closed check-in: 0507def643 user: dmestas tags: ticket-paging

20:51
merge ticket-list: the tracker page rebuilt

State axis with real counts, GitHub-shaped rows, report filters in six axes, a query box that parses into them, table and board views, a browse rail, and a .json link on every report. Chips now mute the value nearly every listed row shares. check-in: a8c4a6c7f5 user: dmestas tags: trunk

20:50
merge trunk into ticket-list closed check-in: 616003aaaa user: dmestas tags: ticket-list
20:50
tickets: move the .json link out of the toolbar into the report row

It hands a scripter this filtered listing as a machine URL, which is worth nothing until there is a filter — it did not earn a place between the view toggles and the primary button. check-in: b2cac713f3 user: dmestas tags: ticket-list

20:48
timeline: the mainline always holds the leftmost rail

A branch that committed most recently was taking rail 0, and trunk was inheriting a branch's column at the fork point because the branch line followed its parents there. The default branch (timeline.list now names it) reserves rail 0 whenever it is on the page; other lines converge into it. Absent from view, nothing is reserved and the rest close up. check-in: 6b6121e609 user: dmestas tags: trunk

20:46
tickets: left rail — views, subsystems and people with open counts

Every entry is an ordinary report URL, so the rail stores nothing and promises nothing the address bar cannot say. Browse groups count OPEN work and sort by it; clicking the entry you are on removes that axis. Hidden under 64rem, where the dropdowns already reach every value. check-in: 15c58d6fe0 user: dmestas tags: ticket-list

17:16
tickets: query box, parsed into the report it spells

is:closed subsystem:web crash becomes state=closed&subsystem=web&title=crash and redirects there, so the box and the dropdowns are two spellings of one URL rather than two sources of truth. Free words match titles; an unknown prefix stays text. boardData now takes the nav instead of six positionals. check-in: 4138f81f5f user: dmestas tags: ticket-list

17:09
merge trunk (fossil user import) into ticket-list check-in: ea90352635 user: dmestas tags: ticket-list
16:57
tickets: table view with sortable columns, and a .json link

Fossil's dense report table as a third view, its headers sorting through a closed ORDER BY whitelist so a clicked column never reaches SQL from a URL. Every view carries a .json link: the same op, same parameters, the report with the presentation stripped. check-in: 306f4eec6a user: dmestas tags: ticket-list

16:54
quarry users pull: import a remote fossil's users and caps

Fetch (admin-credentialed) then import: unknown logins are created with their fossil §6.3 credential and the project code it needs, existing accounts keep their own password, categories land as categories. An unmentioned category keeps quarry's default rather than blanking into a lockout. check-in: f70144e381 user: dmestas tags: trunk

16:51
fetch a remote fossil's user table over the wire, admin-credentialed

reqconfig /user in one round trip (sync RFC §6, §9.3). The REMOTE enforces admin — a developer gets no rows, a bad password fails login, both pinned against a real fossil. Row format verified against fossil 2.28: one config card per row, quoted key/value pairs. check-in: b2ef1ce14d user: dmestas tags: trunk

16:50
gofmt: format three files carried in from trunk

subs.go was dirty because gofmt rewrites a pair of apostrophes in a comment into a typographic closing quote; reworded to say empty plainly so formatting is now a fixed point. check-in: 81e89bc4d8 user: dmestas tags: ticket-list

16:46
tickets: report filters, and chips that mute what every row shares

Six report axes as native selects in one GET form; the URL is the report, so a listing is shareable and scriptable with no query language. Counts run through the same filter and every header link preserves it.

Chips mute a value nearly every listed row shares — "Fixed" on 34 of 34 closed rows distinguished nothing. check-in: 7cfce7761b user: dmestas tags: ticket-list

16:37
merge trunk (fossil capability model) into ticket-list check-in: 7f907f987a user: dmestas tags: ticket-list
16:35 • Edit [b1e46974fc]: Mark "Closed". artifact: e1010d9caa user: dmestas
16:35
merge fossil-caps: fossil capability model native (RFC 0004 phases 1-3, 5) check-in: bd494b50d4 user: dmestas tags: trunk
16:33
tickets: state axis, counts header, GitHub-shaped rows

Replace the list op's closed bool with a three-way state (open/closed/all) and carry it through the web layer as ?state=, so filtering and the view/sort axes stay independent. Header gains real open/closed/all counts; rows get a state glyph, signal-only chips, author and comment count.

Also fixes a.btn outranking .btn-primary, which rendered every primary anchor button in the forge as a plain one. check-in: bd62e4820f user: dmestas tags: ticket-list

16:32
caps phase 5c: capability editor in settings

Per-repo category strings and per-account caps, editable in place with the expanded effective set shown beside each. CapsAdmin is an optional seam — a forge without it simply has no editor. closed check-in: b1e46974fc user: dmestas tags: fossil-caps

16:28
caps phase 5b: the capability matrix as executable spec

Each row driven twice — the letter alone must open its surface, and every OTHER letter together must not. Router resolves the repo from the request body for ops that carry it as a field (repos/update). check-in: 3df10d7f78 user: dmestas tags: fossil-caps

16:23
caps phase 5a: web write paths gate on capabilities

gateCap on every forum/wiki/ticket/technote/chat POST; caps plane separated from sessions (WithCaps) so enforcement doesn't imply a login page; an ungated forge stays ungated. Harness proves category caps reach surfaces and that removing a letter closes the same request. check-in: 54cc5168ca user: dmestas tags: fossil-caps

16:12
gofmt: comment alignment in api tests check-in: be45fccb29 user: dmestas tags: fossil-caps
16:11
caps phases 2-3: ops declare fossil capabilities; router and web gate on them

RFC 0004 §4 table encoded on all ~45 ops; RouterWithCaps refines each Auth floor with EffectiveCaps; web gates and TrustedAuthor read caps with role fallback. Harness proves o/3/a separation end to end. check-in: 31437ec328 user: dmestas tags: fossil-caps

16:01
index: ticket summaries carry author, last user and remark count check-in: b21951a839 user: dmestas tags: ticket-list
14:34
merge trunk (composer fixes) into fossil-caps check-in: 03ca7e41fb user: dmestas tags: fossil-caps
14:27
composer card clips its corners: square textarea no longer paints over the rounded border check-in: 347a061cc1 user: dmestas tags: trunk
14:27
merge fossil-caps: caps phase 1; composer hidden fix check-in: c5fe4789aa user: dmestas tags: trunk
14:19
composer: hidden wins over the split pane's flex check-in: 5498b20014 user: dmestas tags: fossil-caps
14:19
caps phase 1: fossil cap strings in OLTP, EffectiveCaps expansion, roles→caps migration

RFC 0004 §3/§5. v never implies u; a excludes s x y; s is universal; blank nobody+anonymous = private. Migration runs on every open, idempotent, never clobbers explicit caps. check-in: be3686ccbe user: dmestas tags: fossil-caps

14:18
composer: Preview tab lives in composer.js — per-composer pane, posts the draft as body; preview endpoint is a plain fragment check-in: 34e1534151 user: dmestas tags: trunk
14:14 • New ticket [0990b8daeb] caps phase 5: capability-matrix harness test + settings caps UI. artifact: fc12784759 user: tmp-ops
14:14 • New ticket [b06843af9a] caps phase 4: import users on host-from-file and mirrors; legacy login. artifact: 12bc31e5ee user: tmp-ops
14:14 • New ticket [f587e7345f] caps phase 3: web gates on caps; h renders links as plain text. artifact: 4f4f8374d3 user: tmp-ops
14:14 • New ticket [234959214f] caps phase 2: per-op capability declarations; requiredRole deleted. artifact: 4a58ec7da3 user: tmp-ops
14:14 • New ticket [56e30541ad] caps phase 1: OLTP cap strings, EffectiveCaps, repo_role migration. artifact: 4de9189eae user: tmp-ops
14:13
RFC 0004: fossil capability compatibility — plan check-in: 6bb1c20891 user: dmestas tags: trunk
13:15
mirror threads: per-post Reply points at the upstream post — a button must never aim at a composer that cannot exist check-in: eae00faa15 user: dmestas tags: trunk
11:38
threads render as the DAG they are: tree order + indent, Reply button at each post's foot, aimed composer autofocuses

The header reply link relied on fragment scroll, which browsers skip when the fragment is unchanged — 'clicked reply, nothing happened'. check-in: 8294c8101a user: dmestas tags: trunk

11:30
answering the root is thread traffic (unsub sticks); answering a post is personal check-in: 747979ed51 user: dmestas tags: trunk
11:29
the reply DAG, kept: per-post replies, parent links name their author, answered authors always notified

forum.reply takes to= (a specific post); the composer aims via ?reply-to with a visible banner; the replied-to author joins the notification set even unsubscribed, deduped by TxnID. check-in: 152f575aab user: dmestas tags: trunk

11:24
spectrum segments: identicon deep shade, each a link to its post anchor check-in: 1a859293ee user: dmestas tags: trunk
11:22
spectrum: continuous constant-height bar, rounded only at the ends check-in: f78cd21498 user: dmestas tags: trunk
11:18
spectrum as beads: gapped rounded segments in the post-edge recipe check-in: f322cdbe4a user: dmestas tags: trunk
11:18
tests assert structure and data, never display copy; spectrum up to the middle level

data-score / f-pinned / hot-formula / f-hidden hooks exist for the tests; copy and glyphs are design surface, free to change. check-in: dfc78137a3 user: dmestas tags: trunk

11:15
root test follows the counted explore link check-in: 9960c3555b user: dmestas tags: trunk
11:14
explore link count: reach FleetTotal through the root context check-in: 09ab5ece67 user: dmestas tags: trunk
11:13 • Closed ticket [340fdc1959]: Ticket page is the editor plus 3 other changes artifact: 05ea755783 user: ai-local
11:13
dashboard explore link names the fleet size check-in: c3f1705062 user: dmestas tags: trunk
11:12
merge ticket-editor: ticket page is the editor; [label] (url) links check-in: 5968b5fc36 user: dmestas tags: trunk
11:06 • New ticket [d3b80da6ee] serve: graceful shutdown hangs on SIGTERM; deploys silently serve a stale binary. artifact: 4e7190cb30 user: tmp-ops
11:05
markdown: [label] (url) with a space is still a link closed check-in: 38f6f9f5de user: dmestas tags: ticket-editor
11:01
hue down another notch: 1px edge (color only), spectrum 14% sat / 0.28 alpha check-in: 484deeeee5 user: dmestas tags: trunk
02:36
ticket editor: title and description edit in place; ticket.set takes description; edits and retitles are timeline events check-in: c65320c1c3 user: dmestas tags: ticket-editor
02:36
spectrum quieter still: 22% sat, 0.38 alpha check-in: 4ff52bf154 user: dmestas tags: trunk
02:36 • Ticket [340fdc1959] Ticket page is the editor status still Open with 1 other change artifact: d74d04fd5e user: ai-local
02:35 • Ticket [340fdc1959]: 2 changes artifact: 2c1e73cab9 user: ai-local
02:34
hue returns muted: whisper left edge, slim spectrum only for multi-voice threads check-in: 90d6b989bf user: dmestas tags: trunk
02:32
pull the hue decoration back: no post edges, no spectrum, no hued names — identicons carry identity alone check-in: 8837ad6aaf user: dmestas tags: trunk
02:28
author hue flows through threads: identicon+hue edge per post, hued names, spectrum ribbon, opener pill, hued @mentions

One fnv hue is one person on every surface; mentions resolve only via the contributor fold — never a dead link. check-in: 86b8a6baee user: dmestas tags: trunk

02:20
test pins follow the new board move model and forum list score markup check-in: 941004c442 user: dmestas tags: trunk
02:15
dormant forum rows fade whole-row, not link color check-in: e33969eb13 user: dmestas tags: trunk
02:13
ticket editor: data-on:change is the spelling Datastar fires; composer footer wraps on phones check-in: 145ae81167 user: dmestas tags: ticket-editor
02:12 • Ticket [e16ad1d395] Rebuild diff rendering: structured model, syntax highlighting, word-level marking status still Review with 1 other change artifact: e229874727 user: ai-local
02:11 • Ticket [e16ad1d395]: 1 change artifact: b5d4596dde user: ai-local
02:10
Ticket page is the editor: sidebar selects, remark composer with close/reopen, field changes in the timeline check-in: 86631cfb47 user: dmestas tags: ticket-editor
02:07
forum list anatomy: opener excerpt, author mark, participant stack, activity sparkline, dormant muting; og:description on threads check-in: 6d66e8fbff user: dmestas tags: trunk
01:53
topic search also reads in-tree .quarry/repo.json topics (memoized cat, search-only) check-in: 04b7878a1c user: dmestas tags: trunk
01:52
topic pills link to /?q=<topic>; fleet filter matches topics and descriptions; breathing room over the pills check-in: 5e4ef95e6e user: dmestas tags: trunk
01:48 • New ticket [340fdc1959] Ticket page is the editor: sidebar selects, composer with close, field changes in the timeline. artifact: d0a4c18c0b user: ai-local
01:48
About aside stays on branch roots; doc tabs remain default-ref only

repo.about renders default-branch docs — tabs on a branch would show the wrong README as this branch's. Aside sheds doc rows there instead. check-in: 088d49f204 user: dmestas tags: trunk

01:45
scope the menu anchor to the account button — 423 identicons were claiming it

anchor-name on the .avatar class was a global in disguise; the popover anchored to the LAST avatar on /people and opened off-screen. Pinned: exactly one --avatar declaration, on the button selector. check-in: 0b17572152 user: dmestas tags: trunk

01:41
identicons v2: two-tone cells, rounded, hue plate check-in: a67e9b3ba0 user: dmestas tags: trunk
01:38
identicons everywhere (memoized), one avatar size; rails name their branch on hover check-in: 61728cefbd user: dmestas tags: trunk
01:34 • Closed ticket [aa351dec2e]: Forum series: infrastructure & scalability plan (umbrella) plus 3 other changes artifact: 9abd06f5a5 user: ai-local
01:34 • Closed ticket [a999360ab5]: Subscriptions, mentions, notifications off the event bus plus 3 other changes artifact: 877a1c5ea0 user: ai-local
01:34 • Closed ticket [640554b3e6]: AI moderation hooks: pluggable verdicts into the staging queue plus 3 other changes artifact: e8fe6b4e66 user: ai-local
01:34 • Closed ticket [6310cf8776]: Moderation: pre-commit staging queue, actions, public mod log plus 3 other changes artifact: e5a9308381 user: ai-local
01:34 • Closed ticket [d03b342543]: Polls as fenced-block posts: fossil-compatible by degradation plus 3 other changes artifact: a568000c8c user: ai-local
01:34 • Closed ticket [90bdcba521]: Forum categories + Announcements with top-level visibility plus 3 other changes artifact: 9ab71c95bf user: ai-local
01:34 • Closed ticket [933f2e21b8]: Code-anchored threads: derived anchors + backlinks on artifact pages plus 3 other changes artifact: eadd5803d8 user: ai-local
01:34 • Closed ticket [fdfb698189]: Forum Hot tab: legible published decay ranking plus 3 other changes artifact: 6faa15620e user: ai-local
01:34 • Closed ticket [92b674187e]: Forum votes: up/down per post, OLTP-authoritative plus 3 other changes artifact: 68c38d18f4 user: ai-local
01:33
identicon avatars (5x5 mirrored grid from the name hash), avatar 36px; bar buttons follow GitHub's control grammar check-in: a8040a0e0a user: dmestas tags: trunk
01:27
bar buttons: rounded squares with full-size icons; unread badge shows the count check-in: 47aa4790e4 user: dmestas tags: trunk
01:12
bar-acts cluster: create/inbox/account share one grid cell check-in: 3c7799732a user: dmestas tags: trunk
01:11
top bar: / focuses search, + create menu (repo-aware), inbox icon with lazy unread dot check-in: 0fd2f8aa8a user: dmestas tags: trunk
01:09 • Closed ticket [cf8bc23c0b]: Kanban view for tickets, as a toggle rather than a replacement plus 3 other changes artifact: faa1b1979d user: ai-local
00:58
revert Public Sans: back to system-ui check-in: 71e915ee8c user: dmestas tags: trunk
00:56
try Public Sans as the UI face (vendored woff2, latin subsets) check-in: 07eda8c969 user: dmestas tags: trunk
00:45
board tests follow the lane change; gofmt check-in: ff8f1c3a7d user: dmestas tags: trunk
00:44
Board: lanes only when asked, sticky column headers, no lane-field badge inside a lane check-in: 6ee9d1a5e6 user: dmestas tags: trunk
00:43
Board: one move model — drag with signifiers, a Move menu per card, and a moved banner with undo

Removes the pick-up mode (it never rendered: data-attr-hidden is not a Datastar attribute), the per-column drop buttons and the per-card select+move form. Cards show a grip and a grab cursor; the column under a drag lights up; a native Move popover lists the other columns as plain forms, so it works by keyboard, touch and without script. /move answers Datastar with the fragment and a plain post with a redirect; both show 'Moved X from A to B · undo'. check-in: 110001e141 user: dmestas tags: trunk

00:43 • Open ticket [cffde42876]: Component catalogue and guard test: native elements first, one source of markup artifact: 25ec393c92 user: ai-local
00:41 • Review ticket [cffde42876]. artifact: cd76d76e89 user: ai-local
00:36
dashboard: explicit grants are ownership and outrank the admin flag; repo.add grants its creator

Fleet view stays as the fallback for an admin with nothing granted. check-in: 8ce14aaaf3 user: dmestas tags: trunk

00:35
Board leaves the reading column; columns have one width; fold/unfold from every header

Full-bleed board with 22rem columns, so a card is the same width wherever it sits. Folding is the reader's choice carried in ?fold=A,B; a chevron on each header folds or opens it, and a folded column shows its real count. Before any choice, empty columns fold. check-in: d60c602cd2 user: dmestas tags: trunk

00:32
dashboard: site admins see the fleet — GrantsFor carries the '' marker

me.feed keyed on grants[''] but nothing ever wrote it; an admin with no explicit rows saw an empty dashboard. check-in: b7d4a089fb user: dmestas tags: trunk