| feat | A file on the default branch shows its blame and history | cat | | +440 | -4 | 1.4 | ✓ |
| feat | Approval rules by path, and agent reviews signed like CI | cat | | +1536 | -45 | 2.6 | ✓ |
| feat | CI reports metrics, and a repo's insights charts them by commit | cat | | +242 | -19 | 1.7 | ✓ |
| test | code-search-range reads its results without node's warnings | cat | | +4 | -4 | 0.4 | ✓ |
| fix | The activity grid fills its panel's width | cat | | +11 | -12 | 1.7 | ✗ |
| fix | Insights says where its numbers come from once | cat | | +2 | -2 | 0.8 | ✓ |
| feat | A repo's insights shows its activity grid as a chart, without the list | cat | | +95 | -122 | 2.3 | ✓ |
| fix | The demo's clock starts at midnight, so CI's render check holds all day | cat | | +7 | -3 | 1.5 | ✓ |
| test | A scenario: a CI note's runner is never account@hostname | cat | | +23 | -0 | 0.1 | ✓ |
| fix | A restored identity.db from litestream is the git user's alone | cat | | +28 | -0 | 1.1 | ✓ |
| feat | The edge can send the mirror bucket a token | cat | | +45 | -1 | 1.0 | ✓ |
| fix | Offline, the edge never redirects to another site's address | cat | | +34 | -0 | 1.4 | ✓ |
| feat | Insights exports give a build's reason as push or other | cat | | +35 | -3 | 1.9 | ✓ |
| fix | A repo gone private or removed leaves the index before the mirror syncs, and a removed one leaves the lake | cat | | +132 | -7 | 1.9 | ✓ |
| feat | Only owners with a public repo have a page | cat | | +48 | -2 | 2.0 | ✓ |
| feat | Event streams are capped, and the Node servers time out slow requests | cat | | +72 | -9 | 2.0 | ✓ |
| fix | Invites check the code first, and count posts per address | cat | | +87 | -24 | 1.8 | ✓ |
| fix | Sign-in challenges keep nothing on the server, belong to one browser, and are rate limited | cat | | +221 | -31 | 2.0 | ✓ |
| feat | The forge's own pages send HSTS, nosniff, a referrer policy and a CSP | cat | | +44 | -1 | 1.5 | ✓ |
| fix | go get's reply answers only for name paths, and loads nothing | cat | | +75 | -1 | 1.5 | ✓ |
| feat | Front matter for people and repos, bauhaus avatars, and a grid of days | cat | | +2011 | -128 | 2.6 | ✓ |
| docs | The README follows AP style, and DESIGN.md says docs do | cat | | +86 | -77 | 0.0 | ✓ |
| docs | cat and fox are the people in the README and /design/ | cat | | +45 | -45 | 0.5 | ✓ |
| docs | The guide says what forge is; how it works moves to internals | cat | | +454 | -292 | 0.8 | ✓ |
| feat | The offline copy leaves out file pages, and syncs at most hourly | cat | | +488 | -94 | 2.1 | ✓ |
| fix | A shelf's link followed on its own owner page opens that shelf | cat | | +36 | -15 | 1.2 | ✓ |
| feat | An owner's "all" is one list of every repo, newest first | cat | | +393 | -22 | 2.0 | ✓ |
| feat | Times in a column are compact and line up; times in a sentence say ago | cat | | +185 | -45 | 2.0 | ✓ |
| fix | A dead invite's refusal in its panel | cat | | +3 | -2 | 1.8 | ✓ |
| refactor | /login/'s steps in panels, named "forge" in lowercase | cat | | +58 | -26 | 1.7 | ✓ |
| feat | An admin sets the home page's motd over ssh | cat | | +139 | -6 | 0.8 | ✓ |
| feat | A home page of profiles, what happened lately, and topics | cat | | +567 | -27 | 2.6 | ✓ |
| feat | Admins, and the people commands over ssh for them | cat | | +163 | -12 | 1.5 | ✓ |
| fix | A dead invite link says so, without the form | cat | | +7 | -1 | 1.3 | ✓ |
| feat | forge users: everyone on the forge, and who is invited | cat | | +63 | -4 | 1.1 | ✓ |
| feat | Invite someone by a link: forge user invite | cat | | +573 | -71 | 1.8 | ✓ |
| feat | Collaborators by ssh, and who reads and writes a repo | cat | | +171 | -19 | 1.6 | ✓ |
| feat | Open a lone review group, drop insights' second title, restack downloads | cat | | +9 | -3 | 1.5 | ✓ |
| fix | Branches keep a review's number beside its status, tags their subject | cat | | +6 | -2 | 1.3 | ✓ |
| feat | Content in panels with a head strip, chrome on the page | cat | | +442 | -294 | 2.8 | ✓ |
| fix | Keep inline code whole at its hyphens | cat | | +30 | -2 | 1.5 | ✓ |
| fix | Tint a hovered row as one block, not its cells | cat | | +35 | -14 | 1.6 | ✓ |
| fix | Name the line a diagram's syntax error is on | cat | | +56 | -2 | 1.4 | ✓ |
| feat | Draw a wide diagram again for phones | cat | | +34 | -8 | 1.6 | ✓ |
| feat | Draw mermaid diagrams at build time, with Pele | cat | | +465 | -1297 | 2.2 | ✓ |
| feat | Release notes' subjects in ink, like a list's rows | cat | | +3 | -0 | 0.9 | ✓ |
| docs | DESIGN.md: the rules for how pages look, and for changing them | cat | | +101 | -3 | 0.5 | ✓ |
| feat | A style guide at /design/, drawn from the real tokens and controls | cat | | +156 | -5 | 1.2 | ✓ |
| build | Check the design rules in the forge's CSS and templates | cat | | +316 | -0 | 1.4 | ✓ |
| chore | The guide in the forge's palette, fonts and rules | cat | | +320 | -261 | 2.0 | ✓ |
| refactor | Tokens, a darker dark mode, lowercase chrome and real controls | cat | | +732 | -517 | 2.5 | ✓ |
| feat | Serve Open Sans, Noto Sans Mono and Noto Serif from the forge | cat | | +335 | -10 | 1.8 | ✓ |
| chore | Take the paper texture off the pages | cat | | +7 | -20 | 1.3 | ✓ |
| feat | Paper in both modes, seamless and fainter; the logo in the palette | cat | | +8 | -9 | 1.8 | ✓ |
| fix | Keep a range-diff's +/- marker at the left edge | cat | | +2 | -0 | 1.1 | ✓ |
| feat | Tabs and buttons in small uppercase monospace | cat | | +33 | -28 | 2.0 | ✓ |
| refactor | Words, not chips: plain text for kinds, topics and filters | cat | | +36 | -42 | 2.1 | ✓ |
| refactor | Square corners, and rules between things instead of boxes | cat | | +189 | -155 | 2.5 | ✓ |
| feat | Paint the pages on paper: a new palette and a faint texture | cat | | +98 | -79 | 2.1 | ✓ |
| docs | Document commenting and approving from the web | cat | | +55 | -11 | 0.0 | ✓ |
| feat | Comment on a line from the combined diff | cat | | +245 | -69 | 1.4 | ✓ |
| feat | Comment and approve from a review page, signed in | cat | | +257 | -4 | 1.3 | ✓ |
| feat | Take comments and approvals over HTTP, as ssh makes them | cat | | +492 | -12 | 1.7 | ✓ |
| fix | Keep no autosaved Caddy config in the container | cat | | +3 | -2 | 1.1 | ✓ |
| test | Drop the scenarios' workarounds for Caddy 2.6 | cat | | +3 | -9 | 0.8 | ✓ |
| build | Build a pinned Caddy 2.11 for the container | cat | | +24 | -6 | 1.6 | ✓ |
| chore | Drop the letter mark from repo cards | cat | | +1 | -4 | 1.3 | ✓ |
| feat | Put a commit's type in a column, and its risk as a small score | cat | | +76 | -10 | 1.5 | ✓ |
| feat | Publish a forge name and a made-up machine, not the host | cat | | +122 | -17 | 2.2 | ✓ |
| fix | Keep public pages' stylesheets through a private repo's build | cat | | +37 | -1 | 1.1 | ✓ |
| refactor | List reviews as two-line items, not a seven-column table | cat | | +102 | -45 | 1.9 | ✓ |
| build | Run the scenarios in the container from CI, when asked | cat | | +10 | -0 | 0.7 | ✓ |
| build | Type-check the scenarios' TypeScript helpers too | cat | | +2 | -2 | 0.8 | ✓ |
| build | Run the scenarios in the forge's container, as root | cat | | +41 | -0 | 0.5 | ✓ |
| test | Run scenarios' Caddy with the container's Caddy 2.6 too | cat | | +9 | -3 | 0.8 | ✓ |
| fix | Let a restore run as root hand the forge to git in scenarios | cat | | +22 | -8 | 0.9 | ✓ |
| test | Expect a release's publisher to be whoever runs the scenarios | cat | | +2 | -1 | 0.5 | ✓ |
| fix | Read file modes in scenarios the same with GNU and BSD stat | cat | | +6 | -2 | 0.7 | ✓ |
| test | Make scenarios' HTTP requests with Node, not curl | cat | | +162 | -48 | 1.8 | ✓ |
| fix | Write a Caddyfile without FORGE_BASE_URL under dash too | cat | | +2 | -1 | 1.0 | ✓ |
| fix | Let whitespace in a quoted phrase match any run of whitespace | cat | | +121 | -37 | 2.0 | ✓ |
| feat | Count a run of whitespace in a quoted phrase as one space | cat | | +25 | -9 | 1.7 | ✓ |
| fix | Match quoted phrases in every search section | cat | | +264 | -76 | 1.7 | ✓ |
| refactor | Read code search queries with a parser of its own module | cat | | +48 | -14 | 1.3 | ✓ |
| fix | Build private pages in a scratch directory under .forge/private | cat | | +56 | -3 | 1.6 | ✓ |
| fix | Leave the private store out of backups, and rebuild it on restore | cat | | +53 | -9 | 1.2 | ✓ |
| fix | Keep private repos' release trees in a store only the forge reads | cat | | +242 | -42 | 1.6 | ✓ |
| build | Start no background lake in CI's restored forge | cat | | +4 | -2 | 1.0 | ✓ |
| fix | Deploy a commit, not the working tree, and only with a CI pass | cat | | +33 | -3 | 2.1 | ✓ |
| fix | Give each removal of a repo its own place in the trash | cat | | +22 | -2 | 1.2 | ✓ |
| fix | Write the stand-in rclone's listing whole in scenarios | cat | | +6 | -3 | 0.6 | ✓ |
| feat | Show repos as cards on shelves on the index and owner pages | cat | | +172 | -23 | 2.1 | ✓ |
| feat | Give releases a tab, and link the latest from a repo's home | cat | | +42 | -8 | 1.8 | ✓ |
| docs | Say who can restore a removed repo in ssh help | cat | | +1 | -1 | 0.1 | ✓ |
| feat | Remove repos into a trash that gc empties | cat | | +154 | -4 | 1.7 | |
| feat | Search code for every word of a query, or a quoted phrase | cat | | +155 | -59 | 2.0 | |
| fix | Start a scenario's private server on a port of its own | cat | | +20 | -4 | 1.0 | |
| feat | Publish private repos' insights into the private root | cat | | +84 | -21 | 1.6 | |
| feat | Serve a private repo's releases to its readers on the web | cat | | +307 | -66 | 2.0 | |
| refactor | Extract site trees with store_tree, as releases do | cat | | +19 | -14 | 1.5 | |
| docs | Document web sign-in, private pages and identity.db's replica | cat | | +159 | -46 | 0.1 | |
| feat | Run the container on Node 24 LTS | cat | | +58 | -14 | 1.6 | |
| feat | Replicate identity.db with litestream, and back it up whole | cat | | +317 | -11 | 1.9 | |
| feat | Clone private repos over HTTPS with a token | cat | | +209 | -14 | 1.6 | |
| feat | Stream a private repo's events to its signed-in readers | cat | | +89 | -29 | 1.5 | |
| feat | Sign in with passkeys to see private pages | cat | | +1296 | -26 | 2.7 | |
| feat | Serve private pages to readers with a token | cat | | +511 | -71 | 2.1 | |
| feat | Build private repos' pages into a root of their own | cat | | +146 | -33 | 2.1 | |
| feat | Keep web credentials in identity.db, made from ssh | cat | | +833 | -3 | 2.0 | |
| docs | Document the lake and insights | cat | | +114 | -2 | 0.1 | |
| fix | Read lake data on S3 from forge lake query | cat | | +3 | -1 | 2.0 | |
| feat | Add insights pages, drawn from the lake's exports | cat | | +952 | -20 | 1.8 | |
| feat | Back up the lake with a consistent copy | cat | | +128 | -3 | 1.4 | |
| feat | Read forge metrics' history from the lake | cat | | +55 | -4 | 1.6 | |
| feat | Add forge lake, the forge's facts in a DuckLake | cat | | +1381 | -4 | 1.9 | |
| fix | Take release signatures from the repo's admins only | cat | | +24 | -13 | 2.2 | |
| feat | Sign a release for its repo and tag, not only its sums | cat | | +225 | -83 | 2.4 | |
| docs | Document releases | cat | | +139 | -24 | 0.2 | |
| feat | List release files on the releases page | cat | | +211 | -5 | 1.5 | |
| feat | Serve release downloads as attachments, and mirror them by size and time | cat | | +92 | -10 | 1.9 | |
| fix | Keep release files through gc and restore | cat | | +102 | -6 | 1.4 | |
| feat | Publish signed release files on refs/releases/<tag> | cat | | +867 | -11 | 1.7 | |
| docs | Document code search | cat | | +74 | -10 | 0.2 | |
| fix | Gzip JavaScript and wasm from Caddy | cat | | +4 | -1 | 1.1 | |
| feat | Search code from the search overlay, statically | cat | | +1374 | -57 | 1.7 | |
| feat | Honor range requests in the demo server | cat | | +32 | -2 | 1.3 | |
| docs | Document private repos | cat | | +71 | -25 | 0.1 | |
| fix | Keep repos private through backup and restore | cat | | +41 | -11 | 1.4 | |
| fix | Serve only git's own paths over HTTPS, for public repos only | cat | | +85 | -16 | 2.3 | |
| fix | Stream no events of private repos | cat | | +81 | -8 | 1.9 | |
| fix | Start the events and pages servers from a symlinked path | cat | | +2 | -2 | 1.1 | |
| feat | Add private repos, readable over ssh by their readers only | cat | | +790 | -49 | 2.5 | |
| feat | Let the secret check read a repo's whole history | cat | | +40 | -16 | 2.0 | |
| test | Cover the CI gate, site previews and backups with scenarios | cat | | +75 | -0 | 0.1 | |
| test | Add scenario tests | cat | | +343 | -0 | 0.5 | |
| feat | Import forge | cat | | +16054 | -0 | 0.4 | |