v0.25.0

Max Rakhimov · 2026-09-21 · 77185c712a03 · release
447b5af2
Site tests: regenerate the shape goldens at the 21px body
aa005857
Import tests: look a pull request up in its own repository
cd4a011b
Site: set the last serif chrome in mono
eaff80bc
S3: send the path and query in the signature's encoding
88f0543b
Site: drop the pre-commit-route detail links
8ee314dd
Import: cap the discussions query under GitHub's node budget
35d0c67d
Site: set the body type at 21px and mono chrome
de347df2
Git: write a message commit with its parent's tree
a248d967
Extensions: follow the content branch spec
16c80f4d
Social: edit and retract on the post's own branch
b5a2c4aa
Cache: reseed instead of migrating, and drop the migration registry
353e21ec
Core: drop the legacy data paths
4f31e8b6
Site: paint the timeline before its item bodies
501cf611
Site: keep a superseded item search off the view
8bf76dd6
Site files: load and render an .mdx document
0b00c5c7
Site: drop the overflow sentence, light card ground, release rows
9acc355f
TUI: keep esc inside a section list that used it
60ab66dd
TUI: let a form retry after a failed save
41c306e6
TUI: show the error when a load or action fails
931d573b
Extensions: fix the content branch of pm, review, release and memo
b0e80406
Specs: one content branch rule, social the only exception
f8c79bb0
Import: take pull request tips from the forge, and pin the diff to them
95abb804
TUI settings: act on the row under the cursor
83e81385
TUI: let a diff view keep tab for the next file
498217ad
TUI pm: go to the new milestone or sprint after create
9c5b3fb9
Settings: show each key's description in the CLI, TUI and RPC
f8978c9d
Fold the thin glue and drop the functions only tests called
2b77faf2
Fold the leftover wrappers over a single call
8d200bd4
Comment every function under library and cli
4bf2ebab
TUI: unexport the names only their package reaches
903fb5d9
Style: count functions with no comment line in the prose check
68de4f8e
Site: call the rebuild a rebuild and the sequence a push
4b6a6f91
Cache: name the raw message raw
b114c5b9
Tests: kill the mutation survivors, seed through the writers
44a613a1
Helpers: one definition each, and the fork ref namespaces named
7845de6e
Dead code: migrations, exports, codes and stale copies
bb4598ff
Naming: headers, prefixes, spellings and the s3 identity sense
0858687f
Docs: correct the statements the follow-up read against the tree
fbb6b01f
Tests: stop repeat-run state leaks in three packages
24b3758e
TUI: name Update's message handlers and ratchet the ceilings
2ba647b8
Site tests: let the fixture server die with its runner
194e418e
Release: fix the driver, scan advisories, build reproducibly
ef67714c
Site: give a body-only row no head, pin the card skeleton
af2c63d5
Site: the survey's item page, sidebar and front page fixes
4d977b26
Prose: drop the confidence vocabulary, counted by the prose check
3c4ce7b7
Site: blob labels, .mdx as prose, release rows, one row rule
f7d8c4d9
Site tests: wait on the detail paint, not a sleep
470f6591
Site: one chip rule, one edited bit and one title on every row
3a80a76a
Site tests: unit-cover gs-render.js to 91% of functions
030aa748
Gate: count net comment lines in comment-heavy
a133b068
Site tests: lay a shot out at the width it names
5bd8bd98
TUI tests: seed the memo tiers and golden their routes
5773a21a
Gate: credit child-process coverage, TESTING.md names the tiers
ee8a3c5c
Site tests: gate chips, routes and the page version on the docs
1da6de7d
CLI: bind the root flags per tree and run isolated tests in parallel
1cee23aa
Docs: trim STATIC-SITE.md to mechanism and values
60a0179b
Docs: move the site design spec in-tree
606cdf58
RPC: send an error's text as data.details
a389ff77
Site tests: repo-shape fixtures with screenshot goldens
bcab50ca
CLI: write through the command's streams
8dfd25b7
Docs: one place for the rules a session follows
9c34ec9c
Gate: fail a commit whose comment lines outnumber its code
68ebe8b6
CLI tests: run the command tree in the test process
edb36355
Errors: show the details after the message
dd68d7eb
TUI tests: age fixture commits into one relative-time bucket
ede3e178
Docs: name the coverage and fixture stages, drop the tier times
da24e849
CLI: return the exit code through RunE and exit once in main
31564a2b
Gate: build the site fixture in the full tier
5ae12b5c
Errors: one sentence per error message
43857c57
Style: one sentence per error, counted by the prose check
14b72873
Gate: fail the full tier on a package coverage drop over 2 points
7349a7ef
Notifications: check divergence with one for-each-ref
ec3c399e
Import: decode the milestone update time on both adapters
46192cc0
Git: build the LFS batch URL from a host-only repo URL
89b3c412
Docs: say which URL is fetched and which one matches
1a239422
Review: cover a fork PR whose base spells the upstream differently
7c3a0324
Fetch: hand git the address, key storage by identity
ba6ae31e
Lists and forks: store the address, key by identity
51ce4936
S3: parse remote URLs from their canonical form
bd26282e
Protocol: make NormalizeURL idempotent
fc756022
Site: bump the page version to 26
86bff916
Site: put the error notice under the browser probe
9995a2f0
Site: word every truncation marker as one notice sentence
6dfb3959
Site: give every empty list its own sentence
ba56c852
Site: converge the meta row on one skeleton
82c91698
GitHub: decode updatedAt on issues, PRs, releases and discussions
5c820a6b
Testing: a 100k-row thread benchmark behind the bench tag
fd12b7ca
Social: pin the thread reader's query plan
0a3729a6
CLI.md: say what a GitLab import now copies
632b3907
GitHub: walk a mapped discussion's comments on re-import
e93eb541
Import: build the GitLab adapter from the repository URL
04c17f9e
GitLab: decode updated_at on issues, requests and releases
9bc37aef
GitLab: import issue and merge request notes
a32755aa
GitLab: follow the Link header to the next page
8a246779
GitLab: return the error when a page walk fails
784e6510
Retract: cache the retraction commit on the write path
c1d6f360
Social: drop the unread SortBy option on GetPosts
0b699ae7
Forks: report removing a URL that is not registered
d1cb39c2
Scripts: gate the core import order on the stack sentence
eb0a63d8
Prose check: lower the baseline to the counts at 8196b35
8196b35f
RPC: stop calling createPR's base and head required
aa5bc34c
Testing: the destructive CLI verbs through the binary
c2a30a20
Testing: one round trip per RPC namespace
0e1c8e6e
TUI tests: drop the 80 by 24 known-failure list
a2587206
PM board: size the columns to the terminal
edd847d0
TUI: keep the footer bar on its own lines
9660101f
TUI: cut the frame title to the top border
8c46375d
TUI: clip every content line at the panel border
ff44f0cb
TUI tests: assert every route fits an 80 by 24 frame
2ddfd098
CLI: name every search prefix in the help
bbac4f9a
Search: split a query on Unicode space
f5ba3ba9
Docs: name every search prefix the parser accepts
45e2f730
Search: keep an unknown key in the free text
1c661db2
Site: recapture the computed-style baselines for the scale
ad5f92e2
Site: hold the spacing scale over both stylesheets
28adc463
Site: put every spacing value on a six-step scale
e655dfc2
Import: give a discussion comment a stable external id
76b987c3
Import: take the discussion author's profile from the query
01e74689
Import: bring GitHub discussion replies in as replies
b1507a4d
Docs: the list key tables match the map
d70d33ca
TUI: one key-to-action map for both lists
2db93de9
TUI tests: pin the cursor of both lists under every key
bb8a729a
Testing: cover the GitLab adapter over httptest
ab1158ff
S3: cover a chain outranking a plain ref key
e1ab9378
S3: cover the listing continuation loop
19b15b4c
S3: follow S3 in the local test buckets
c587beec
Docs: name core/git's package state in the standing exceptions
ec7f40ae
Docs: the push reaches every default remote in every client
82c77fed
RPC: decode siteOnly, full and dryRun on core.push
495d379c
TUI: push to every default remote
cc2a12ba
Client: one publish sequence for every remote
702e767c
Git: return the push remote resolution as a value
0dc6cf14
Social: unexport the surface nothing outside uses
6a93c651
Social: read comments through one direct-join reader
fc11e30d
Site: bump the page version for the detail head
26e49a61
Site tests: assert the detail head's structure and styles
44737f03
Site: head a detail with one card head in both renderers
97ece10c
Site tests: fence the fixture's suggestion feedback
33635609
Testing: assert the review suggestion write error code
7189cc52
Testing: assert the social error codes
7683852b
Testing: assert the pm error codes
88aba08d
Testing: assert the release error codes
fbbbc5da
Testing: assert the proposals error codes
95a09b0c
Testing: share the reftable skip through testutil
62620091
Review: unexport the surface nothing outside uses
2c6796e1
Docs: match REVIEW.md and the guide to the review package
00766167
Review: sweep comments to the style guide
f3338c14
Review: name the suggestion error codes in upper snake
a38493c3
Review: drop the review query fields no caller sets
dab849f4
Review: replace the copies with one form each
9fa33a12
Review: fold verdicts per author in one place
d46ff322
Review: count unread notifications through their getters
9f12c5a4
Review: insert review items through one statement
33d31324
Review: enforce require-review at merge
958ac2a7
Review: read the configured branch for branch notifications
09554d9a
Review: resolve a hash with one prefix query
66fde6b7
Review: report a failed dependent retarget
5e90da1e
Review: read a suggestion from its suggestion fence
1b70f25a
Review: count pull requests in one repository
3ce9c9db
Review: fire pr-ready once per draft-to-ready edit
c8bb864f
Review: take a pull request head from its own repository
2cbfd0b6
Review: place adopts in the pull request field order
4498fb59
Spec: order adopts and accepts in the pull request header
aefaf82b
Client: rebuild the counts when a repository is removed
c77677a5
Docs: the counts and the log entry type in SOCIAL.md
41596acb
Social: sweep the package comments to the style guide
6e32fdd7
Social: retire the legacy read and counter tables in one migration
754531cd
Social: order equal-scoring related repositories by name
68e4650e
Social: write the subject and thread fields the spec defines
20f15f9a
Social: delete the surface nothing produces or reads
dac81065
Social: take the four hand-rolled helpers from the stdlib
fd2ba594
Social: fold the copies inside the package into one each
79b037db
Social: name the notifiable-item predicate once
bc4e06b3
Social: write every social commit through one tail
b6190b6a
Social: build every item query through one WHERE builder
9e08b21a
Social: mark a follower's posts in a list scope
fff3f778
Social: recount an interaction target from its live items
2b60827f
Social: type an activity log entry by its own header
2807d887
Docs: move notifications down the core stack
1026eb3e
TUI and CLI: render the diverged-branch notification
bd274002
Core: register the divergence provider from notifications
634f772a
Core: return the processor func type from notifications
a0059d7c
Site: one-line two release head test comments
3a665105
Site: bump the page version for the release head
c2e9d223
Site: build the lists row's head through cardHead
29129553
Site: head a release with its tag and one version chip
ae67f012
Testing: assert every TUI golden fits its width
daa44a37
Testing: fuzz the search query parser
67b155bc
Site: bump the page version for the feedback card
67e61258
Site: retire the fb-* classes for the card variant
b5cd8bf8
Site: build the app's feedback card through the card builder
ef8e1a68
Site: render a feedback reply as a card variant
74cb540b
TUI: unexport the tuicore surface nothing outside uses
3303b543
TUI: name the tuicore files after what they hold
ad0fea34
TUI: correct the tuicore comments that describe other code
39f81c07
TUI: delete the unreferenced tuicore surface
b0bed6b7
TUI: drop the dead guards in the progress bar and key loops
80052c5f
TUI: format the relative-time date in the local zone
8a9a331c
TUI: hold the tuicore theme state in one struct
2e97844f
TUI: record the reserved extension keys in one line
bb00c1f4
TUI: draw the thread anchor's body bold
2d341e74
TUI: fold the duplicated tuicore render paths into one each
d2ff902b
TUI: dirty the card list view on a programmatic cursor move
15aa726a
TUI: truncate styled text without cutting an escape
fda01dca
TUI: strip the verified icon from every card header field
aace9cc3
TUI: measure card height from the rendered card
229c7b53
Search: group every item type by its labels
c9f49a54
Search: read enrichment fields from the main query
e2e9fc78
Search: sort equal-count groups by name
05c799df
Testing: pin search grouping and formatting
acfd9aa7
Testing: assert the review stack and version error codes
b502fe37
Testing: assert the memo session and sync error codes
05e2dafd
CLI: say rebuild for the site step in push, remote and mirror
da78d6e0
Testing: assert the memo error codes
a5261767
Testing: assert the review merge error codes
9d465bac
Testing: build the CLI once per test run
8e94b9ce
Testing: cover the GitHub discussions fetch
d796fdae
Docs: say where a review fix lands
b2119407
Docs: split the ref push from the site rebuild
223f388a
Testing: fuzz ParseS3URL against its writers
0e5f8525
Docs: match S3.md and the architecture guide to the transport
323e2c17
Objstore: unexport the transport surface nothing outside uses
b6f362da
Objstore: drop the thin push's offline pin tier
ef1addbc
Objstore: fold the transport's duplicate loops into one each
61d48226
Objstore: count the loose objects a push actually uploaded
c94651f1
Objstore: resolve a push's refs through one batch call
29427cb7
Objstore: sign the canonical URI AWS's way
450de79c
Objstore: retry every bucket request inside do
d0cd6bd0
Testing: concurrent ExecLocked and QueryLocked
db9c545e
Testing: cover the LFS object store and batch API
2e023bf9
Testing: fuzz the protocol and LFS parsers
810c8003
TUI: move the core routable views into library/tui/tuiviews
ac83792b
Site: move the static site out of core/objstore into core/site
93bbcf48
Objstore: run post-push site maintenance through a hook
2c9b0101
Objstore: export the transport surface the site layer reads
f93d0be1
Testing: shrink the TUI smoke matrix to one pass per view
03c5ba50
Fetch: bound the workspace sync walk to the new commits
d084cd96
Git: read --since as a timestamp, not a bare date
c3183089
Extensions: delete the per-extension workspace sync
a9880f80
Client: CLI and TUI reads sync the workspace through the client
4c0a8625
TUI: move the nav registry out of tuicore into tuinav
86e053c1
Docs: a definition of done in ARCHITECTURE.md
c7d57a3a
Docs: the core order, the extension's import cost, the search asymmetry
f9f334c7
Docs: one pass over every reference against the style guide and the code
ab1b6c79
Style: the long help carries the reference the terminal needs
d37ed9c8
Objstore: sweep the static-site comments
1752d3ef
Objstore: sweep the transport and push comments
ea74f95e
CLI: restore the reference sections in the help text
2edfe95f
CLI: drop the em-dashes from two help blocks
7f5fc6a7
CLI: lower the prose baseline after the help sweep
2c2bf707
CLI: trim the long help blocks to twelve lines
754a21a5
CLI: rewrite flag help without parentheticals
c4f102e7
CLI: bring every command Short under the limit
6d2eeb23
Docs: name the client package in the layer tables
2288e84e
Client: merge the two client packages into one
9615270f
Fetch: take the workspace syncs as a parameter
3b28de90
Site: sweep gs-core.js and gs-upgrade.js comments
c6e11c09
Lint: enable funlen and gocognit at today's maxima
9278db0a
Comments: cut the rationale blocks outside objstore
89f8b157
Scripts: gate upward imports and package size
d5471d8a
Fetch: drop the date-window options nothing sets
a6ed0896
Fetch: collapse the duplicated paths into one each
9c2fddab
Fetch: use git where the package hand-rolled it
d4455648
Gitmsg: one keyed synced-tip cache for the five extensions
0dc70a66
Objstore: file each helper on its transport or site side
c7c38d39
Site: match a pull request's feedback by hash, whatever the ref type
e83ad791
Site: delete dead tests, dead history, and close out the design notes
21fa4b00
Testing: assert computed styles and structure against a real browser
36640fdc
Site: render thread replies as the app's comment cards
b838d276
Text: truncate by character everywhere, through one helper
d5d12936
Docs: fold the feature process into ARCHITECTURE.md
1ffa588b
Site: match the two subject strippers and strip every promoted subject
6b8011ac
Social: truncate a repost's first line by character, not byte
dc4edd18
Site: strip markdown from every promoted subject
5ceb1fcb
Site: render recent activity through the shared card fragment
365fbdc8
Site: drop the wrapper around a headless card's meta row
9ef25616
Site: converge the app's card with the page's card
afd1f721
Site: build every card through one function
2d039594
Site: sweep gs-render.js comments to the style guide
ad666bdc
Site: head list pages with the nav label and drop the front-page title
Assets