What's changed
- Merge branch 'factory/fix-2393-clone-reflog-injected-store' (a8fc212)
- Merge branch 'factory/fsck-injected-reflog-roots-6147' (05a49e6)
- Merge branch 'factory/rewrite-reflog-required' (3fb2620)
- Merge branch 'factory/merge-eof-newline-2392' (e61d54b)
- Merge branch 'factory/workspace-snapshot-persist-6123' (12456b1)
- Add default-CI test for clone reflogs on injected RefStore (3a14cea)
- Fix clone reflogs for injected RefStore (258c2c7)
- Fix fsck reachability roots for injected ref store reflogs (fc37f8e)
- Fixes #2395: require RefStore::rewrite_reflog for custom backends (716afca)
- Fix stateless v0 upload-pack shallow section before ACKs for deepen (4ee672d)
- Fix merge EOF newline when side also changes line count (dc8de49)
- Use externally tagged RawRef serde for bincode persistence (413dc70)
- Fixes #2387: persist workspace snapshots and pin worktree trees for gc (d7aadd0)
- Fix workspace snapshot restore worktree diff base (430cba1)
- Strengthen skew repair perf guard against cd3f334b regression (92dfecb)
- Make skew range paint perf guard exercise capped repair (6ba5c0c)
- Fix git reset baseline setup in mixed swap perf test (01b4ce9)
- Fix hard reset Keep on tree-stable paths with staged index content (0cea140)
- Merge branch 'factory/fix-streaming-since-range-walk-hide-6104' (bfa0a95)
- fix(odb): avoid private intra-doc link on write_stream (209887f)
- fix(rev-list): pass RangeWalkHide to since-cutoff streaming walk (e185bee)
- Bound skew hide-paint repair to BOTH frontier and per-start cap (e4d868f)
- Extend hide-paint repair through unpainted skew paths (42f8f67)
- Fix range revwalk hide paint under committer-date skew (bdf8a05)
- chore: sync integration manifest after rebase onto main (358314e)
- perf(checkout): fast hard reset for tree-stable paths (29b1bde)
- Address review: restore hard-reset stat probes and ignore rules (033db78)
- Fix switch/reset --hard perf on mixed wide tree delete/add (de66452)
- Merge branch 'factory/fix-2384-clone-url-bundle-auth' (7951694)
- Merge branch 'factory/fix-2378-fsmonitor-valid-bits' (0cdd8bc)
- Fix clone URL credentials for same-origin bundle downloads (9b22c2b)
- Merge branch 'factory/revs-since-frontier-6080' (b2ba280)
- Mark fsmonitor-valid on parallel content-verified clean path (2c4e2c0)
- Do not mark fsmonitor-valid on content-only refresh (e239317)
- Fix fsmonitor valid bits after clean status scan (4fd2a6f)
- Merge branch 'factory/log-range-pathspec-perf-6081' (fffe90f)
- Merge branch 'factory/fix-2379-streaming-inflate' (f31fb84)
- Fix --since regressions for parent filters and count skip (c6f0a2a)
- Fix rev-list --since to stop at date frontier without -n (393956d)
- Fixes #2383: paint range hide for bounded rev-list walks (0070689)
- Merge branch 'factory/fix-reset-hard-perf-2311' (0f33809)
- chore: rustfmt checkout_incompressible_blob_restore (a114194)
- Fix pack truncate hang and restore loose buffer growth (97f29c5)
- Fixes #2379: speed streaming inflate and large blob writes (0d0a8e0)
- Merge branch 'factory/fix-2381-merge-sibling-dirs' (c4b459e)
- Scope checkout spool probe to unit tests only (7660278)
- Fix racy wide tree-diff rollback on cancelled hard reset (58910e6)
- Fixes #2375: speed hard reset tree-diff checkout like switch (5b99c56)
- Fix hard-reset stat scan parallelism without index preload (95f6df9)
- Fixes #2311: parallel hard-reset stat scan and faster merge abort (fb9b71b)
- Fixes #2381: stop merge stack overflow for sibling dir prefixes (3cc64d9)
- Merge branch 'factory/ci-green-rustdoc-public-api' (6def0af)
- Merge branch 'factory/mv-case-dir-2376' (ce4b321)
- Keep mv destination-directory detection case-sensitive (7ee4c2d)
- Do not treat symlink pairs as case-only directory mv (34f3aa2)
- Fix case-only directory mv on ignorecase volumes (6cf8ebc)
- Reap orphaned next-index hook copies after killed commits (79c4838)
- Fix CI rustdoc and public-api snapshot on main (fd8575c)
- Merge branch 'factory/rebase-merge-duplicate-2365' (0bdfd47)
- Merge branch 'factory/fix-pick-abort-unmerged-cleanup-2367' (d8a18b5)
- Fix rustdoc intra-doc links for rename detection docs (dc8def8)
- Fix DiffTarget::Trees with old=None and tree OID on new side (07cba95)
- Fixes #2371: honor DiffOptions::renames in build_file_diffs (45a4def)
- Merge branch 'factory/fix-2366-packed-tag-push' (31ac3c1)
- Fix #2365 regression test parent inspection and fmt (6fbae6e)
- Fixes #2365: priority topo sort for merge-preserving rebase replay (c619c92)
- Skip conflict-only hard-reset removal through symlink parents (4bdcd9c)
- Fix hard reset leaving modify/delete conflict files in worktree (176f708)
- Merge branch 'factory/blame-move-detection' (7bd852a)
- Merge branch 'factory/legacy-tree-mode-switch-2372' (882b90b)
- Merge branch 'factory/fix-2374-commit-request-docs' (6cc3f2f)
- Address review: drop in-module packed-refs fixture, sync override (43226ac)
- Fix #2366: list_refs uses tag object for packed annotated tags (147825b)
- Fixes #2370: blame within-file move detection (-M) (fd3d617)
- Fixes #2372: canonicalize legacy tree modes in switch/merge transitions (82ef4f5)
- Fixes #2369: conflict when delete touches adjacent insert (7698f6d)
- Fixes #2374: compile Identity guide via CommitRequest::new example (0fca658)
- Document the CLI hot-text layout and record its daily rows (b5b09b2)
- Lay out the grit binary's own hot code next to grit-lib's (09d390d)
- Skip linear-chain shortcut for --since bounded rev-list walks (208ff6e)
- Fix rev-list --since frontier to match Git on skewed dates (0c4fac5)
- Merge branch 'factory/packed-refs-stream-5994' (8ccac07)
- Merge branch 'factory/ci-green-6000' (8fd76f3)
- Stream packed-refs for ref listing without retaining every name (1120634)
- Refresh grit-lib public-api snapshot for pack_receive and pathspec API (4bf9e3a)
- Remove test-only rev_list API and the dead ref_exclusions module (2bb3040)
- Remove unused mapped_arc test helper from reftable (c30c4f1)
- Drop unused http-body-util dependency from grit-http-server (86cbb71)
- Document the undo-commit numbers with tags packed before the new work (f30cdeb)
- Append reset reflog lines instead of logging through transactions (1d50cdd)
- Skip packed tags the orphaned-commit report cannot need (f78d148)
- Merge branch 'factory/fix-embedded-repo-no-commit' (aed84ba)
- Skip hot-text-layout when CI forces GNU bfd linker (a477324)
- Fix tracked-scan path for unborn embedded gitlinks (013aeb4)
- Refuse unmerged gitlink staging when nested HEAD is unborn (e9378c2)
- Fixes #2364: refuse embedded repos without commits (4a3ce99)
- Report a server's ERR packet and side-band fatal as Error::RemoteFatal (9f24c3e)
- Merge branch 'factory/packed-refs-stream-f0c2' (183c164)
- Merge branch 'factory/branch-create-upstream' (2188ced)
- Fix sorted fallback duplicates and streaming scan cost (3067185)
- Fix packed-refs streaming strictness and sorted fallback (6c8a52c)
- Stream packed-refs listing without materializing full maps (93f04f9)
- Fix remaining status/commit aborts on unreadable directories (b19e946)
- Fix unreadable directories aborting status and commit (1442fac)
- Report the configured upstream from create_branch (b881824)
- Merge branch 'factory/fetch-interrupt-gc-2362' (d631948)
- Merge branch 'factory/rebase-skip-2363' (838bd12)
- Merge branch 'factory/embedded-gitlink-warnings-5962' (cb2cd54)
- Apply rustfmt after rebase (eb995b0)
- Merge branch 'factory/attr-pathspec-log-add' (e583fb8)
- Restrict gc install-stage pruning to .pack--install- dirs (a13b650)
- Fix fetch interrupt temp pack cleanup and gc stale tmp pruning (ca057fb)
- Fix rebase --skip and --continue after conflict when edits are empty (e9ca77f)
- Fix commit --dry-run for newly staged gitlinks (00b3989)
- Warn when nested repositories are staged as gitlinks (8709359)
- Fix attr pathspec in rev-list, log, and add (f94d0db)
- Fix file/directory merge conflicts (#2359) (101d059)
- Merge branch 'factory/status-hot-text-layout-5960' (e41aa10)
- Merge branch 'factory/pathspec-top-subdir' (247fe19)
- Document the hot-text layout and record its census baselines (6810658)
- Merge branch 'factory/rebase-continue-multi-c444' (f9ad748)
- Add grit-lib hot-text-layout feature to cut code-page RSS (0080094)
- Require non-empty status output in :(top) CLI test (1f65fbd)
- Fix CLI regression test for :(top) pathspec from subdirs (26891b7)
- Fixes #2355: honor :(top) pathspec magic from subdirectories (3180097)
- Merge branch 'factory/ref-ad-stream-5915' (e7f4d9c)
- Merge branch 'factory/mv-keep-empty-dirs' (34f2b6f)
- Fix #2357: add CLI regression tests for multi-commit rebase continue (36799d0)
- Probe packed-refs order before streaming callbacks (b093b23)
- Fix packed-refs for_each_ref merge and cancellation (21aa09d)
- Stream packed-refs listing for ref advertisements (1f80bd3)
- Fixes #2358: grit mv leaves emptied source directories on disk (d3d0451)
- Fix #2230: skip pre-since commits on bounded path walk (f572979)
- Fix #2230: use bounded path walk for since plus filter (3b22dad)
- Merge branch 'factory/git-index-file-write' (f371cbd)
- Fix log and revs --reverse -n window truncation (375f515)
- Merge branch 'factory/switch-typed-branch-errors-a20c' (8892acb)
- Fix rebase --continue misleading "Already up to date" output (67732b6)
- Fix rebase continue after conflict resolution with empty edits (98cb3a9)
- Fix GIT_INDEX_FILE ignored on index writes (9ac871e)
- Fix switch branch resolution to return typed BranchError (c83221f)
- Fix rebase continue/skip when first replay commit has no edits (4a45220)
- Stat hard-reset paths relative to their directory (45a1c36)
- Mark files a checkout just wrote as content-verified (f81e19f)
- docs: fix Site check after fetch-stream merge (ea496e8)
- Fix CI after fetch-stream-cap merge (ad3fc72)
- Fix blame import after hunk API conflict resolution (c0a7d26)
- blame: complete uncommitted metadata in grit-lib (f08d5dd)
- bench: record diff/* daily rows before and after the stale-index memory fixes (539f7d0)
- worktree_rules: keep attribute stacks for the current directory chain only (90d8544)
- diff: queue stale-stat hash jobs by index position (fd97f25)
- Merge branch 'factory/fetch-stream-cap-5886' (78b24ef)
- Fix review: allow Git-empty ref dirs, tighten D/F race errors (359e971)
- Fix CI: refstore D/F create race and upstream mapping row (28fa1f3)
- chore: extend public-api snapshot for RequestBodyLimitExceeded (c29081c)
- fix: map protocol v2 fetch body limit to HTTP 413 (8be4faf)
- fix: stream large fetch bodies over smart HTTP (Fixes #2347) (d332ee0)
- Update grit-lib public-api snapshot for ReftableReader::from_mapped (fced6cf)
- Fix review blockers: mapped reftable readers, streaming info/refs (c7a307f)
- Fix #2348: Stream ref ads and mmap reftable stack cache (ae26054)
- Report invalid object ids in a saved rebase plan as a typed error (ab80367)
- Reuse shared history helpers in rebase sessions (bf98ffa)
- Merge branch 'cursor/config-set-fast-path-e424' (42997e6)
- Merge branch 'factory/head-tree' (c2a0db3)
- Speed up grit config set/get: locate the repo without opening it, drop config fsync (12b037d)
- Fix diff_patch_text test build: borrow index line through a fn (2365fa5)
- Merge branch 'cursor/pick-index-write-memory-422b' (0331bcd)
- Refresh grit-lib public-api snapshot for Repository::head_tree (aba07d0)
- Use Repository::head_tree instead of private HEAD-tree helpers (8b21867)
- Add Repository::head_tree and HeadState::tree (db6c7f0)
- Record pick/one before/after baselines and the peak-memory ledger (89aa4f7)
- Name the index chunk sink type for clippy::type_complexity (55f64fc)
- Stream index writes through a bounded buffer instead of a full in-memory body (28216e1)
- Remove dead reflog formatter and fix library bench warnings (012c2b3)
- Merge branch 'cursor/branch-merged-peel-once-0837' (7ce32b6)
- Merge branch 'cursor/dead-code-round-b0c4' (4639b7e)
- Record branch --merged many-refs profile and baselines (94ef381)
- Peel each ref tip once in reachability-filtered listings (183e5ea)
- Remove the unused rev-list pretty-format renderer (4466dfc)
- Merge branch 'cursor/rebase-session-shared-helpers-d5b1' (6ebf5fb)
- Remove test-only grit-lib functions found by the privatizing dead-code scan (ea1f52b)
- Remove dead reflog formatter, unread fixup counter and stale bench code (0dbe3ca)
- Use shared history helpers in rebase_session and type invalid plan oids (8a7acaa)
- Build CommitRequest via new() in rebase session tests (4ca11f3)
- Document and baseline the per-directory ignore stack change (59ff522)
- Use RepoPathNormalizer and move results into output in grit ignore check (6fa237d)
- Reuse the query path stat to skip per-directory file checks in ignore_check (b08ce7a)
- Build ignore exclude stacks once per directory and match without per-path allocation (e5cf883)
- Honor protocol.version on SSH fetch, list_refs, and remote refs (e46dc72)
- Merge branch 'factory/sparse-switch-unique' (fcd91f9)
- Document the sparse switch numbers for changed excluded trees (3829818)
- Keep changed excluded sparse directories opaque on switch (d1ce825)
- Refresh grit-lib public-api snapshot for blame hunk lines (49c17c7)
- Move blame hunk lines and uncommitted author naming into grit-lib (19cf613)
- Merge branch 'factory/fix-2345-chunk-bounds' (3c14b84)
- Fixes #2343: write remote-tracking reflog on fetch (34a2249)
- Fix repack chunking so same-path large blobs share one delta base (e5c71e7)
- Fixes #2341: hash worktree content for patch-text index lines (b704da1)
- Merge branch 'factory/status-untracked-cwd-paths' (a6ee9dd)
- Fix cwd-relative status paths for untracked directories (7c3ec0c)
- Fixes #2342: stop pairing untracked paths in unstaged rename detection (f8543ad)
- Fix stash list --json to return a list object (22dd4f2)
Full Changelog: v0.5.26...v0.5.27