50 descendants and 50 ancestors of 088d49f20438d435
|
2026-08-22
| ||
| 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 | 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: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 | 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: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: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: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 |
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: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 | |
| 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: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 | |
|
2026-08-21
| ||
| 23:12 |
live rendered authoring: split pane renders as you type; poll builder edits the source
Production renderer feeds the pane (plain fragment endpoint); a fenced poll grows structured inputs that rewrite the block. Raw markdown stays the source of truth; no-JS is still a plain textarea. check-in: 1b34fa7b8e user: dmestas tags: trunk | |
| 22:56 | board: folded strips name the column in plain text, not a rotated pill check-in: a2d6d20dc3 user: dmestas tags: trunk | |
| 21:23 | gofmt check-in: 236ae2e1d1 user: dmestas tags: trunk | |
| 21:23 |
Ticket board fits the page: columns wrap, empty ones fold to strips, stacked on phones
Seven status columns no longer scroll the page sideways. Empty columns fold to a GitHub-style strip (still a drop target; its name links to ?col=Status to open it). Open columns share the row with a 16rem floor and wrap past it; on a phone they stack and the strips become chips. check-in: b01e1d54d5 user: dmestas tags: trunk | |
| 20:40 |
markdown composer: Write/Preview tabs, slash commands, described check-in links; forum hashes resolve
Preview runs the production render pipeline (markup.preview op). Check-in refs carry their comment as hover title + visible excerpt. composer.js loads only on composer pages — the base stays one-script. check-in: 420206e59f user: dmestas tags: trunk | |
| 20:19 |
forum polish: post cards, vote pill, mod kebab, composer card, primary buttons; timeline badge names forum/technote
Flat timeline events fell into a wiki-else-ticket badge; full kind map now. check-in: 3ace765565 user: dmestas tags: trunk | |
| 20:12 |
vote arrows patch in place via datastar; moderation trust bar is RepoAdmin
Plain form path keeps its redirect. Write-role gate made trusting Write unreachable — a repo that opts into moderation reviews non-admin posts. check-in: bb65c455a3 user: dmestas tags: trunk | |
| 20:00 | merge trunk fork: concurrent heads 0e669d2a + 63958353 check-in: 554e966570 user: dmestas tags: trunk | |
| 19:58 | diff: window chain test; ignore dev.local.mk check-in: 63958353c1 user: dmestas tags: trunk | |
| 19:54 | merge quarry-forum: votes, hot, anchors, announcements, polls, moderation + AI hooks, subscriptions check-in: 0e669d2ad5 user: dmestas tags: trunk | |
| 19:51 | Merge mirror-posture: repository posture, read-only mirrors, fleet page as rows check-in: e61bc36d43 user: dmestas tags: trunk | |
| 19:49 |
forum subscriptions: auto-sub on authoring, reply/mention fanout, unsub sticks
Fanout rides the write path only (a reindex can never re-notify); delivery/dedup stays in the notify companion via TxnID. closed check-in: 893885b3d5 user: dmestas tags: quarry-forum | |
| 19:45 |
forum moderation + AI hooks: pre-commit staging, public append-only log
Approval births the artifact (nothing to un-sync); synced-in posts get hide-with-reason. Hook (--forum-hook) is advisory, async, fails open to hold-for-human; automated actions logged publicly as 'hook'. check-in: 1b5f71c338 user: dmestas tags: quarry-forum | |
| 19:42 |
Fleet row menu is a native anchored popover: light-dismiss, Esc, and the account menu's item sizing
Menu buttons inherit the page font, which also fixes the theme button in the account menu. closed check-in: 395f704c28 user: dmestas tags: mirror-posture | |
| 19:34 |
forum polls: fenced-block definition, OLTP ballots, no-script widget
The block syncs as markdown (fossil peers render it readably); option range and close date re-read from the body at cast time, never the form. check-in: e674e718a8 user: dmestas tags: quarry-forum | |
| 19:29 |
forum announcements: maintainer-only category, pinned strip, home surfacing
Category is OLTP policy on an untouched artifact (fossil peers see a plain thread); forum.announce enforces who-may-post via op auth level. check-in: 8aff98bb76 user: dmestas tags: quarry-forum | |
| 19:29 | gofmt check-in: 25ea8c86a4 user: dmestas tags: mirror-posture | |
| 19:29 |
Fleet page as list rows: one row per store, problems first, healthy folded, stacks on a phone
Ingest health and mirror posture join on one row; zero counts vanish and non-zero ones become chips. With any problem the healthy rows fold behind a disclosure. Summary strip with bulk actions; the page never scrolls sideways. 3,237px tall with horizontal scroll on a phone → one screen. check-in: 67e8dbee5f user: dmestas tags: mirror-posture | |
| 19:23 |
forum anchors: threads mentioning a check-in backlink from its page
Extracted at fold (hex refs with a digit), resolved only at render — the page's own hash is the honesty gate. schemaVersion 3→4 (rebuild). check-in: debc1f4c9f user: dmestas tags: quarry-forum | |
| 19:19 |
forum hot tab: published HN-style decay ranking over votes
Bounded to threads active in 30 days; formula printed on the page. Hand-computed order pinned in TestSortForumHot. check-in: cf172ec6c6 user: dmestas tags: quarry-forum | |
| 19:17 |
forum votes: OLTP vote store, forum.vote op, arrows + derived scores
Score is always derived from vote rows (no counter); votes are forge-local 0001 §8 state, never synced. Umbrella plan: ticket aa351dec. check-in: 2fd88bc87a user: dmestas tags: quarry-forum | |
| 19:10 |
Posture follow-ups: gate write pages on mirrors, detach needs an acknowledgement, one-click re-attach, fleet table fits, fleet search filters
Edit/new pages for tickets, wiki, forum, technotes return 403 on a read-only mirror and their links point upstream. Detach goes through a confirmation with a fork acknowledgement; re-attach is one click with the drift warning. The header chip drops its words at phone width; explore shows mirror/fork badges. /fleet: host-only upstream, 1h/24h intervals, relative dates, kebab menu for the rare actions, and the header box filters both tables. /new loses its duplicate heading. check-in: ee78c5201b user: dmestas tags: mirror-posture | |
| 18:34 | mirror.set/writes report state; re-attaching returns writes to refused; fleet action buttons stay on one line check-in: 074cb8072f user: dmestas tags: mirror-posture | |
| 18:28 |
Surface repository posture: header badge, failing notice, explore glyph and kind filter, fleet admin, creation choice
Every repo page carries the posture from repo.get. Mirrors show 'mirror of <host>' linked upstream, a failing upstream is said in words under the bar, and write affordances on a read-only mirror point at the upstream's pages. Explore marks mirrors and filters by kind. /fleet shows state and writes per row with pull / edit / allow writes / detach; the add form also edits. /new offers Start empty, Import and own, or Mirror. check-in: 9689ddd05e user: dmestas tags: mirror-posture | |
| 18:16 |
Repository posture: mirrors carried on the repo model, refuse local writes by default
repo.get returns mirror{tracking,url,state,acceptWrites,...} and detachedFrom. mirror.detach replaces mirror.delete and keeps the upstream as provenance; mirror.writes opts a mirror into local writes. Pushes, tickets, wiki, forum and technotes on a tracking mirror are refused (403) naming the upstream. A URL change clears failures recorded against the old peer. check-in: d980bf4d71 user: dmestas tags: mirror-posture | |
| 17:56 | day counts are calendar days - the weekday exposed the hours/24 rounding check-in: 59bd504ec5 user: dmestas tags: trunk | |
| 17:51 | ago() names the day once it isn't today - weekday forge-wide check-in: b259744211 user: dmestas tags: trunk | |
| 17:00 | weekday in dividers, meta strip and tip bar - the zit#111 convention, forge-side check-in: bceb4f354b user: dmestas tags: trunk | |
| 13:18 | FileHistory tolerates a weekday token (zit#111 insurance) check-in: e3f80e18f3 user: dmestas tags: trunk | |
| 13:12 | parity proof: crosslink build must equal artifact fold; keep the old derivation as reference check-in: 0576dc73d8 user: dmestas tags: trunk | |
| 12:12 | bulk rebuild drops secondary indexes, rebuilds them once check-in: 1a426c97e8 user: dmestas tags: trunk | |
| 12:08 | rebuild: frames reader overlaps the crosslink fold; wide filechange inserts check-in: 775f699502 user: dmestas tags: trunk | |
| 12:06 | bulk rebuild suspends FTS sync, rebuilds it once at the end check-in: a0830a0d4b user: dmestas tags: trunk | |
| 12:03 | crosslink fold: search_doc parity, prepared stmts; frames phase sniffs manifests check-in: 3415864d28 user: dmestas tags: trunk | |
| 11:57 | fix crosslink parser test fixture length check-in: eab344253a user: dmestas tags: trunk | |