Commit 81f47453f4
Verified · cmc ci/build: success ci/test: success ci/vuln: success
Layout: unified · split
CHANGELOG.org +68
| @@ -4,6 +4,74 @@ Versioning follows semver from v0.1.0. Database migrations run | |||
| 4 | automatically on daemon start; upgrade notes appear per release when | 4 | automatically on daemon start; upgrade notes appear per release when |
| 5 | anything beyond "replace the binary and restart" is needed. | 5 | anything beyond "replace the binary and restart" is needed. |
| 6 | 6 | ||
| 7 | * v1.11.0 — 2026-09-04 | ||
| 8 | |||
| 9 | The web catches up with the rest of the forge: search across the | ||
| 10 | instance, a notification inbox, a compare view, linkable diff lines, | ||
| 11 | and a pass over contrast, heading structure and the stylesheet. | ||
| 12 | |||
| 13 | - Notifications are no longer mail or nothing. An =inbox= table holds a | ||
| 14 | row per recipient whether or not the instance has SMTP; | ||
| 15 | =notifications list= reads it, unread by default, and =notifications | ||
| 16 | read <id>... | --all= clears it. =repo watch= adds you to a | ||
| 17 | repository's notifications and =repo unwatch= mutes it, with a mute | ||
| 18 | beating every other reason to be told, including owning the | ||
| 19 | repository or having written the thread. The unread count rides on | ||
| 20 | =dashboard= and in the web rail. #113 | ||
| 21 | - =search= matches repository paths, descriptions and topics, and issue | ||
| 22 | and merge request titles, across everything the caller can read; | ||
| 23 | =/search= renders it with a field in the rail on every page, and an | ||
| 24 | anonymous visitor gets the public rows from the same query. Titles | ||
| 25 | only — body search is #114. #118 | ||
| 26 | - =/{owner}/{repo}/compare/{a}...{b}= shows what one ref adds on top of | ||
| 27 | another. Diff rows, files and review threads carry ids, so a line can | ||
| 28 | be linked to. The issue and merge request lists page at fifty with | ||
| 29 | the cursors the commands already emit. #118 | ||
| 30 | - CODEOWNERS gating is a setting rather than a file that happens to | ||
| 31 | exist: =repo settings require-codeowners <owner/name> on|off=, off by | ||
| 32 | default, still independent of =require-approvals=. A repository can | ||
| 33 | carry the file as documentation of who to ask without it gating | ||
| 34 | merges. #142 | ||
| 35 | - A failed form action's reason rides a one-shot cookie instead of | ||
| 36 | =?e=<message>=, so it no longer survives a reload or lands in | ||
| 37 | history. #119 | ||
| 38 | - A diff cut at 4 MiB cuts on a line boundary and says so, the | ||
| 39 | diffstat says its counts are partial, and a merge request's commit | ||
| 40 | list says "first 100 of N". #117 | ||
| 41 | - Page templates parse once with the layout at start-up, so a template | ||
| 42 | that does not parse fails the process rather than the first visit to | ||
| 43 | its page. #116 | ||
| 44 | - Markdown headings carry ids, matching org pages, and the stylesheet | ||
| 45 | serves a hash ETag with a day's lifetime and answers a matching | ||
| 46 | =If-None-Match= with 304. #132 | ||
| 47 | - Dark-mode buttons carry a visible edge (a 1 px border was 1.3:1 | ||
| 48 | against the 3:1 non-text contrast floor), and a stored label colour | ||
| 49 | is held between 0.12 and 0.28 relative luminance so it clears 3:1 on | ||
| 50 | both grounds while keeping its hue. #120 | ||
| 51 | - Accessibility: the pin star is decoration and the word carries the | ||
| 52 | meaning, the refs and release asset tables have scoped column | ||
| 53 | headers, state filters carry =aria-current= rather than marking the | ||
| 54 | active one by colour alone, and a rendered README or wiki page's | ||
| 55 | headings move down one level so they sit under the page's own. #133 | ||
| 56 | - The stylesheet drops rules no template reaches, folds two off-scale | ||
| 57 | values onto the type scale, and resolves the classes templates asked | ||
| 58 | for and it never defined. #131 | ||
| 59 | - On a phone the tab bar wraps to a second row instead of scrolling | ||
| 60 | sideways with its scrollbar hidden, and the landing page says in | ||
| 61 | three sections what a reader, a writer and a reviewer can do. #134 | ||
| 62 | |||
| 63 | Migration 0034 adds =inbox= and =repo_watchers=; it runs on daemon | ||
| 64 | start. Reinstall the CLI for =search=, =notifications= and =repo | ||
| 65 | watch/unwatch=. | ||
| 66 | |||
| 67 | Two upgrade notes beyond replacing the binary. A repository that | ||
| 68 | relied on a CODEOWNERS file gating merges by its presence alone loses | ||
| 69 | that gate until =require-codeowners= is set: nothing back-fills it, | ||
| 70 | since the database cannot say which branches carry the file. And | ||
| 71 | =search= and =notifications= are now reserved top-level routes, so a | ||
| 72 | user or organization already holding either name keeps it but its | ||
| 73 | profile page is shadowed by the route. | ||
| 74 | |||
| 7 | * v1.10.0 — 2026-09-04 | 75 | * v1.10.0 — 2026-09-04 |
| 8 | 76 | ||
| 9 | Every command parses its arguments the same way, the web answers by | 77 | Every command parses its arguments the same way, the web answers by |