50 descendants and 50 ancestors of b21951a8391fea57
|
2026-08-23
| ||
| 02:29 | merge doc-links-abs: absolute fossil doc links render check-in: 9900339bd6 user: dmestas tags: trunk | |
| 02:29 |
doc: fossil's own /doc/ links land on the rendered page
fossil content links its documentation absolutely — the Cookbook has importing from Git — and the route mapping sent those to the file view. That was right when the file view was the only thing there was; since doc.get exists it has been putting readers in a source listing of a page quarry can render. Leaves /uv/ dropped: unversioned content is a fossil feature neither quarry nor zit has, and that is why Download renders as plain text rather than as a link to a 404. closed check-in: d53f14d5b5 user: dmestas tags: doc-links-abs | |
| 02:25 | merge doc-dirs: directory documents resolve to their index check-in: 9848396ba4 user: dmestas tags: trunk | |
| 02:25 |
doc: a directory serves its index, and falls back to the tree
Fossil's own docs link directories with a trailing slash — index.wiki carries a variety of techniques — and those all 404'd: the doc route found no renderable extension, redirected to the file view, and the file view cannot serve a directory. A real page was sitting behind the error the whole time (www/caps/index.md). A directory now serves its index document, preferring the formats that render into the page, found with one listing rather than a probe per candidate. A directory with no index goes to the TREE view; only an actual file falls back to source. closed check-in: ff17aa2517 user: dmestas tags: doc-dirs | |
| 02:18 | merge feed paging with trunk check-in: 0b79646346 user: dmestas tags: trunk | |
| 02:18 |
dashboard: the feed pages
A fixed window is a dead end for anyone whose repositories are busy. Cursor is date~hash, so the merged stream cannot repeat or skip where two events share a timestamp. Sentinel
| |
| 02:17 | merge doc-measure: prose at the measure, wide content at the column check-in: 9426c24e62 user: dmestas tags: trunk | |
| 02:17 |
docs: two widths — prose at the measure, wide content at the column
At 1800px the article ended 391 pixels short of the contents rail. That was not breathing room, it was a hole: the column took 1fr while the article capped at the measure, so the leftover sat between them. The column now sizes to its content and the block centres. Running text still caps at the measure — 73 characters a line, where reading wants 45-75 — but a code block, a table or a diagram gets the whole column, because wrapping those to prose width is what makes people scroll sideways. Measured on fossil's th1.md: prose 625px, code up to 1216. closed check-in: d11bec1130 user: dmestas tags: doc-measure | |
| 02:04 | merge assoc-notes: associated wiki pages appear on their artifact check-in: 440aa464bf user: dmestas tags: trunk | |
| 02:04 |
wiki: show associated notes on the artifact they describe
Fossil's wikitheory.wiki: pages named branch/NAME or checkin/HASH are associated with that branch or check-in, and fossil shows them in an About section on those screens. Hiding them from the documentation index without this made 49 of fossil's 83 wiki pages reachable only by typing the URL — half the fix, and the worse half. Notes now appear above their branch's timeline, their check-in, their ticket and their tag. A branch note shows only when the timeline is narrowed to that branch: above every branch it is a caption on the wrong picture. Long ones start folded. Fossil's own auto-toc note runs three screens and put the timeline entirely below the fold, which is an About that has buried its subject. closed check-in: 9b9618a12f user: dmestas tags: assoc-notes | |
| 01:45 |
merge docs-paging: page the documentation index
Resolved twice against work that landed on trunk in parallel — the wiki structure panel and saved views. All three are orthogonal; nothing was dropped. Truncation goes, since paging replaces it. check-in: ce412bd621 user: dmestas tags: trunk | |
| 01:44 | docs: page the documentation index (merged with the structure panel) closed check-in: 430e076558 user: dmestas tags: docs-paging-merge | |
| 01:43 |
saved views: name a report, keep it in the rail
A saved view is a name for a URL the tracker could already produce, so it stores the name and the query and nothing else. Per account, per listing; forgetting one loses the shortcut and not the listing. check-in: 96181d8fcb user: dmestas tags: trunk | |
| 01:41 |
docs: page the documentation index
Wiki pages alone did not need paging — human authorship bounds them at a couple of hundred — but the tree half is unbounded, and the old 400 cap was a dead end with everything past it reachable only by guessing a filter. Pages of 100, since these are one-line rows in two columns. One function builds every link, so a filter, a sort, a page and the associated-wiki choice cannot lose each other; a stale offset lands on the first page rather than an empty one. The pager type is shared with the tracker now, which is what it always was. closed check-in: fa70fc4958 user: dmestas tags: docs-paging | |
| 01:35 | a door to your tickets in the account menu check-in: 4505e6dea5 user: dmestas tags: trunk | |
| 01:34 | merge wiki structure with the docs page check-in: 16f9ebdb26 user: dmestas tags: trunk | |
| 01:32 |
wiki: what a page list cannot tell you
Orphans and wanted pages, derived from the live text so they cost no storage. Fossil's [Name] is prose until it resolves, so only [[Name]] asks for a page. Filter and sort stay hidden until the list is long enough to need them. check-in: 09d6dfb0ad user: dmestas tags: trunk | |
| 01:29 | merge docs-tab: one documentation index for the wiki and the tree check-in: 4629420231 user: dmestas tags: trunk | |
| 01:28 |
docs: hide fossil's associated wiki, pin the front door, credit tree authors
Associated wiki — branch/, checkin/, tag/, ticket/ — are notes attached to another artifact, shown on that artifact's page; fossil's own index hides them behind a Show associated wikis checkbox. They are 49 of fossil's 83 wiki pages, so listing them made the index 59% notes about something else. Now hidden, with the same opt-in fossil offers. Replaces the namespace-collapsing from the previous check-in: that treated the symptom, this is the rule fossil actually defines. The front door is pinned — a documentation directory's own index, else the README — since fossil has no per-document importance metadata and convention is the honest substitute. Tree documents now carry the author of their last change, which the batched date query was already reading and throwing away. closed check-in: 8459b994d1 user: dmestas tags: docs-tab | |
| 01:21 |
dashboard: what needs you, then where to go, then what changed
Leads with the tickets somebody else answered and left with you, which needs no stored last-seen. Two columns, not three: the third was the feed filtered to one author. The feed's kind chips count exactly the rows they show. check-in: 837a5c908a user: dmestas tags: trunk | |
| 01:21 |
docs: one index for the wiki and the tree
The wiki tab showed half a project's documentation. On fossil's own repository it lists 83 pages — 35 branch/ working notes, 7 test fixtures, and 41 real pages last touched in 2018 — while the 113 current documents under www/ had no way in at all. The tab is now docs and lists both stores in one shape, sortable by name or recency, filterable across both. Where a page is STORED decides how it is edited, not what it is, so the source is a quiet marker on the row rather than a separate section. Namespaces of three or more pages collapse to one row that filters to itself, which is how 35 branch notes stop burying the rest. /wiki keeps working as a permanent redirect. No count on the tab: the tree half costs a subprocess to size, and a badge reading 83 above a list of 211 is worse than no badge. check-in: 7e2839cf4c user: dmestas tags: docs-tab | |
| 01:10 | merge cross-repo tickets with trunk check-in: 30fb5af0aa user: dmestas tags: trunk | |
| 01:10 |
tickets: one tracker page across every repository
/tickets is the same report machinery pointed at all granted trackers: repository becomes a browse axis, rows carry their own repo, and the board and New button stay behind since neither has one repo to mean. check-in: 94a2276f2c user: dmestas tags: trunk | |
| 01:05 | merge doc-links: relative document links, doc images, entity fix check-in: ef1774989d user: dmestas tags: trunk | |
| 01:03 |
doc: relative links between documents, and their images
Fossil's docs link each other as Quick Start and those stayed literal text, so a rendered doc was a dead end. Relative targets now resolve for tree documents only — a wiki artifact sits at no path and must not emit links relative to one — and the href is left relative so the browser resolves it against the doc's own URL. Images are served as bytes under the same route the markup already points at. Also stops double-escaping a character reference the author wrote: fossil's own index rendered "Tips & Hints". closed check-in: 44ba7c78f8 user: dmestas tags: doc-links | |
| 00:53 | merge dashboard list styling with trunk check-in: fe0dc4358f user: dmestas tags: trunk | |
| 00:53 |
dashboard: own the list styling
The dashboard borrowed ul.tickets; when the tracker became a card it grew three boxes. Its lists are dash-list now, and a feed row shows the commit subject instead of the whole message. check-in: 86bb035b9a user: dmestas tags: trunk | |
| 00:50 | merge doc-render: embedded documentation renders check-in: 96245e37e1 user: dmestas tags: trunk | |
| 00:50 |
doc: render embedded documentation, chosen by extension
A repository's own docs live in its tree — fossil keeps all of www/ there, not as wiki artifacts — so until now they could only be read as source. /doc/<version>/<path> renders .wiki, .md, .html, .txt and .pikchr, mirroring fossil's dispatch, and anything else redirects to the source view rather than erroring. The URL mirrors the tree path, so a relative link between documents resolves by ordinary browser rules. Embedded HTML goes through the sanitizer rather than out as written: fossil serves it near as-is and warns about CSP, but quarry serves other people's repositories. Closes the shape of #6ff10002. closed check-in: af13ea62ef user: dmestas tags: doc-render | |
| 00:43 | merge file-version: symbolic file links resolve to their check-in check-in: f2106ce78c user: dmestas tags: trunk | |
| 00:42 |
file: link the check-in a symbolic version resolved to
/file/trunk/... printed "trunk" as a check-in link, which 404s. The ref now goes to zit for resolution — never the index's branch table, which answers with a branch literally named trunk and is a stale lie on any repository that renamed its default (tk). Only a symbolic ref pays for the lookup. closed check-in: d62d6dfbfb user: dmestas tags: file-version | |
| 00:41 |
timeline nodes take the mark's shape; a leaf stops claiming a line above it
Node measured in the rail's own weight — line, ring gap and centre dot all 2.5 — so it reads as the logo instead of a squashed version. The upward line on tips was mine: hadAbove read a rail alloc had just pointed at this commit, so every tip drew a line to nothing. check-in: f312b5951d user: dmestas tags: trunk | |
| 00:34 | merge wiki-read: the wiki made readable check-in: 200d8889cf user: dmestas tags: trunk | |
| 00:34 |
wiki: track the contents-highlight asset
go:embed reads from disk, so the build was green locally while the file was untracked — a fresh checkout would have failed to compile. closed check-in: 5d5aa3902e user: dmestas tags: wiki-read | |
| 00:33 |
wiki: contents, a measure, sibling pages and a real index
Long pages were unreadable: fossil's Cookbook runs 26,000 pixels with 51 headings, no contents, and lines of ~152 characters — its author had hand-written an index at the top, which is the need stated in the only place they could state it. Headings now carry anchors whichever format wrote them (Fossil wiki passes raw HTML through, so half a fossil corpus had none), a contents rail tracks the reading position, and the measure is capped near 65. The index gains a filter, a sort, revision counts, two columns and the Home page pinned above them. Not paged: the largest wiki in this corpus is 172 pages, and a browse list you page through is one you cannot scan. Also fixes the global nav-link box leaking into both new rails and into the ticket rail, which drew a border around the current entry. check-in: c195eed2fb user: dmestas tags: wiki-read | |
| 00:28 |
timeline: branch colours cannot collide on a page
The hue was a raw hash mod 360, so two names could land a few degrees apart — ticket-list and fossil-caps rendered as one magenta. Hues now come from nine slots at least 30 degrees apart, with the mainline's blue and the accent's orange left out; a branch keeps its hashed slot unless another branch in view wants it, and assignment is by name so it never depends on commit order. check-in: a754d20b3c user: dmestas tags: trunk | |
| 00:21 |
caps phase 4: imported fossil users sign in, and the store path joins the wire path
Authenticate accepts an imported §6.3 credential once and upgrades the account to argon2, dropping the imported secret; a wrong guess never consumes it. quarry users pull without --url now reads the store's own table (zit#124/#125) — no credential needed for a repo we already serve. Proven end to end against a real fossil: a user who existed only there signed into quarry with their original password. check-in: 41b085ae25 user: dmestas tags: trunk | |
|
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: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: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: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:01 | index: ticket summaries carry author, last user and remark count check-in: b21951a839 user: dmestas tags: ticket-list | |
| 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 | |