50 ancestors of 52ee45d56decb168
|
2026-08-28
| ||
| 15:45 | caps: repo-less effective set resolves stock, not the fleet default check-in: 52ee45d56d user: dmestas tags: perm-fixups | |
| 01:21 |
landings: headings scale instead of clipping; the decision row abbreviates
The h1 had no rule at all, so it drew at the browser's 2em on every screen. A real subject line then became three lines of shouting on a phone, which made clipping look necessary — it was not. The clip only hid words: 'permissions without a…' with the rest nowhere. Headings now clamp between 1.35rem and 2rem and wrap, so a long one fits and says the whole thing. The pathological case — no subject line at all, the title IS the body — already drops the visible heading, so nothing depends on the clip any more. The decision row gains a second step at 22rem: measured at 320, five abbreviated buttons want 364px against 302 of room, and Comment is the widest word left. It has an icon and destroys nothing, so it is the one that loses its label. 'Land the strata (N rungs)' is now 'Land strata (N)' at every width — it was too many words wide as well as narrow. The strata test pinned that sentence, so a wording change read as a missing control. It now asserts the formaction, which is the contract, and the rung count rather than the sentence around it. check-in: 6469f151c4 user: dmestas tags: trunk | |
|
2026-08-27
| ||
| 23:54 |
landings: the decision row stays one line, the words give way instead
The row grew from three verbs to five as landings learned to update and to land a whole strata. Flex items shrink before they overflow, so on a phone every label folded to three lines AND the leftmost button still ran off the side. flex:none and nowrap keep each button one line at its own width; below 30rem the labels shorten — Update, Accept, Land x2 — so all five fit without the row breaking. The long forms stay on wider screens. Reject keeps its word at every width: there is no X in the sprite, and an unlabelled destructive control is worse than a cramped one. check-in: 87482c870f user: dmestas tags: trunk | |
| 21:14 | land perm-8 check-in: 04b136736f user: dmestas tags: trunk | |
| 21:14 | land perm-7 check-in: 913640f9c8 user: dmestas tags: trunk | |
| 21:14 | land perm-6 check-in: a24572d64c user: dmestas tags: trunk | |
| 21:14 | land perm-5 check-in: a2310e6ea0 user: dmestas tags: trunk | |
| 21:13 | land perm-4 check-in: 2800e23b4c user: dmestas tags: trunk | |
| 21:13 | land perm-3 check-in: 04fb645814 user: dmestas tags: trunk | |
| 21:13 | land perm-2 check-in: 31c8a14681 user: dmestas tags: trunk | |
| 21:13 | land perm-1 check-in: cff61f323b user: dmestas tags: trunk | |
| 21:02 | roles: settings/config live via zit -R (zit#153 shipped) closed check-in: 05497a6552 user: dmestas tags: perm-8 | |
| 16:35 | roles: fossil settings and config surface, blocked on zit#153 check-in: afe83bd5e7 user: dmestas tags: perm-8 | |
| 14:37 | roles: Datastar live preview, two-way string and checkboxes closed check-in: ad5348a584 user: dmestas tags: perm-7 | |
| 14:32 | roles: settings IA reorder, Advanced (fossil) with decoders closed check-in: d299bb35af user: dmestas tags: perm-6 | |
| 14:29 | roles: visibility presets, take-private wizard, fleet default closed check-in: 40c3fe1567 user: dmestas tags: perm-5 | |
| 14:19 | roles: People section, per-person editor, account.explain, guard closed check-in: 005d6862c1 user: dmestas tags: perm-4 | |
| 14:12 |
landings: no headline where the author wrote none
A record only HAS a headline when its author wrote one — a subject line, a blank line, then the body. Written without that, the whole message is the title, and clipping it to 72 invented a headline the author never wrote, then ended it in an ellipsis that says data is hidden when the same words are in full directly below. The visible heading now goes for that shape: the chips and the message carry the record, and the sr-only h1 keeps the page named. A record that does have a subject line still shows it. check-in: 2dccc0cb5f user: dmestas tags: trunk | |
| 14:09 | roles: one system, repo_role retired closed check-in: b0e95e0777 user: dmestas tags: perm-3 | |
| 14:02 | roles: the compiler — presets, abilities, closure, infer, decode closed check-in: f5fae58b0c user: dmestas tags: perm-2 | |
| 13:58 | RFC 0008: roles — permissions without a manual closed check-in: 15e36a8c1a user: dmestas tags: perm-1 | |
| 13:18 |
landings: the record shows its whole message, and the heading shows no markup
Two faults from one cause. A message written with no blank line has no prose under the header at all — zit put the whole thing in the title card. So clipping the heading dropped 290 of 362 characters with nowhere left to read them, and the record rendered no description. The opener now falls back to the title, rendered like any other body, which is also the only way its Markdown ever reaches a reader. The heading drops the marks instead: an h1 is plain text, so *emphasis* arrived as literal asterisks and read as a rendering bug. Asterisks and backticks only — _x_ in prose and my_file_name in a path are the same three characters, and mangling every identifier to italicise a rare one is the worse trade. check-in: db743a90a0 user: dmestas tags: trunk | |
| 13:07 |
landings: the heading is a headline, not the whole message
zit puts the entire -m message in the record's title card, so a message written without a subject line arrives as one 400-character 'line' that firstLine returns whole — an h1 that fills a phone screen before the record says anything about itself. Clipped at the same 72 the timeline already uses for this exact string, so the two agree on what a landing is called. Nothing is lost: the opener's full text renders immediately below as the description. check-in: ff1cfd1aa9 user: dmestas tags: trunk | |
| 12:12 | Landed: the disabled state. check-in: d39333b854 user: dmestas tags: trunk | |
| 12:12 | landing: a disabled decision reads as disabled closed check-in: ec0abed3b4 user: dmestas tags: disabled-style | |
| 12:09 | Landed: controls follow the capability that presses them. check-in: a7850eb7a1 user: dmestas tags: trunk | |
| 12:09 | landing: decision controls no longer hide behind the composer closed check-in: e44303dc2c user: dmestas tags: landing-controls | |
| 12:02 | Landed: the contained-branch reading. check-in: 99bed00eb6 user: dmestas tags: trunk | |
| 12:02 | landing: a contained branch reads accepted, not claimed closed check-in: 938c28695e user: dmestas tags: contained-claim | |
| 11:42 | Green against merged trunk: vet, build and the full suite. Clicking a doc tab now moves the address bar to the tab's own href, verified live. check-in: c2ccbb5e93 user: dmestas tags: trunk | |
| 11:42 |
Merge trunk
Current with the segment below, now landed. closed check-in: a50a6dee00 user: dmestas tags: url-sync-doctabs | |
| 11:41 | Green against merged trunk: vet, build and the full suite. Emitted markup unchanged, so the diff toggle behaves exactly as before. check-in: e7d457d6d5 user: dmestas tags: trunk | |
| 11:41 |
Merge trunk
Keeps the segment current with the landing.update work before it lands. closed check-in: 645b11cd8a user: dmestas tags: url-sync-helper | |
| 11:41 |
web: the repository tabs read as labels, not as route names
Files, Timeline, Tickets, Docs, Landings, Forum, CI, Chat — and Repositories/People on the home tabs. CI is spelled, not capitalised: a text-transform would have rendered it Ci. navlink matches the active tab on its section argument, so the label was only ever display text. check-in: 5a07f20dd6 user: dmestas tags: trunk | |
| 11:22 | Landed: Update from target, on the store. check-in: f64e1eb73a user: dmestas tags: trunk | |
| 11:22 | landing.update: bring the target into the branch on the store (zit#152) closed check-in: ab5e011fc2 user: dmestas tags: landing-update | |
| 10:54 |
Doc tabs: keep the URL on the tab you are reading
Switching README to LICENSE swapped the panel and left the address bar behind, so the tab on screen was unlinkable and a reload dropped you back on README — even though /r/REPO?doc=LICENSE has always been a real route, and the anchor was already carrying it as its href. Moves the tabs onto syncurl, which corrects the address bar to that same href before fetching the fragment. check-in: c2775268a4 user: dmestas tags: url-sync-doctabs | |
| 10:52 |
One definition of swap-the-body-and-fix-the-URL
The diff toggle carried the replaceState handler as literal text in two attributes, with the reasoning in a comment above them. Both move onto a syncurl helper, so the next surface that needs it gets the try/catch and the replaceState-not-pushState choice for free instead of by copy-paste. Emitted markup is unchanged. The helper neutralizes quotes in the fragment URL: it lands inside a JS string inside an attribute built as HTMLAttr, where escaping is off. check-in: 058a2216c9 user: dmestas tags: url-sync-helper | |
| 10:08 | Landed: the size cap on what is drawn. check-in: d05ac2958a user: dmestas tags: trunk | |
| 10:08 | Landed: conflict steps; rungs above follow. check-in: 96d8fa7224 user: dmestas tags: trunk | |
| 10:08 | Landed: the top rung's verdict is the stack's. check-in: 57dbf59e99 user: dmestas tags: trunk | |
| 10:08 | Landed: landing.land, whole stack or bottom-N. check-in: d334dbfd92 user: dmestas tags: trunk | |
| 10:08 | Landed: retarget replies read by the fold. check-in: 02bc605852 user: dmestas tags: trunk | |
| 02:53 | strata: past twenty rungs, say how tall rather than draw closed check-in: e1557f4791 user: dmestas tags: strata-cap | |
| 02:51 | landing: the steps for a conflicting rung; rungs above follow closed check-in: dcc39e7343 user: dmestas tags: strata-help | |
| 02:49 | docs: regenerate api.md closed check-in: ca48cce188 user: dmestas tags: strata-verdict | |
| 02:48 | strata: the top rung's verdict is the stack's check-in: f35fe25d54 user: dmestas tags: strata-verdict | |
| 02:48 | landing.land: land a strata up to a rung, bottom-up closed check-in: c3d29faae3 user: dmestas tags: strata-land | |
| 02:48 | landing: read zit#144 retarget replies (carried from in-flight work) closed check-in: f61dfbb349 user: dmestas tags: retarget-reply | |
| 00:04 | Landed: a strata that looks like one thing, because it is one thing. check-in: ca52fa73e4 user: ai-local tags: trunk | |
| 00:03 |
Landings: a strata is one row, and a map on the record
The open queue folds a stack under its base: a strata mark, the segment count, the landable end named, and the rungs in a details element with 1/N badges — no script. Settled views stay flat; a settled segment has left its chain. The record page draws the map: every rung bottom-up, this one marked, the landable one named, a rejected base as a broken rung. Above the bottom the accept control is disabled and says the segment below lands first. Proved with a real zit: two stacked landings count one decision; the top rung's accept is refused; accepting the base retargets the next onto trunk and it becomes the landable end, still one decision. closed check-in: 02f6aadcad user: dmestas tags: strata-ui | |