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 | 4 | automatically on daemon start; upgrade notes appear per release when |
| 5 | 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 | 75 | * v1.10.0 — 2026-09-04 |
| 8 | 76 | |
| 9 | 77 | Every command parses its arguments the same way, the web answers by |