ref: ad25bb029ae430ffadfe6afd86bab4eed33a9a76
parent: e3835d89257e42b212483a2dda1aa8046070fb5a
author: Runxi Yu <runxiyu@umich.edu>
date: Tue Mar 24 05:03:13 EDT 2026
ROADMAP: Split from README
--- a/README.md
+++ b/README.md
@@ -94,220 +94,6 @@
`commitquery` over the existing and quarantined object stores. Some hooks
are provided.
-## Features
-
-* Configuration
- * [X] Parsing
- * [ ] Includes
- * [ ] Writing
-* [X] Object IDs
- * [X] SHA-256
- * [X] SHA-1
-* [X] Object model (incl., parse, serialize)
- * [X] Blobs
- * [X] Trees
- * [X] File mode definitions
- * [X] Entry insertion ordering
- * [X] Traversal
- * [ ] Pathspec
- * [X] Commits
- * [X] Annotated tags
- * [X] Stored objects
-* Further cryptography
- * [ ] OpenPGP signatures
- * [ ] SSH signatures
-* [X] Reading object stores
- * [X] Pluggable interface
- * [X] Chain lookup store
- * [X] Bundle store
- * [X] MRU lookup store
- * [X] Reading loose objects
- * [ ] Promisor remotes
- * [ ] Alternates
- * [X] Reading packed objects
- * [X] Pack index lookups
- * [X] Delta caching
- * [X] Delta application
- * [ ] Pack-wide bloom filters
- * [ ] Multi pack indexes
-* [ ] Writing objects
- * [X] Loose object writing
-* Misc bundle features
- * [ ] Writing bundles
-* Misc packfile features
- * [X] Writing pack indexes
- * [X] Writing reverse pack indexes
- * [ ] Writing packfiles
- * [ ] Writing thin packs
- * [ ] Compressing deltas
- * [ ] Delta islands
- * [ ] Pack verification
-* Compression
- * [ ] Plugabble compression algorithms
- * [X] ZLIB support
- * [ ] DEFLATE optimizations
- * [X] Adler-32 SIMD optimizations
-* [X] References
- * [X] Detached references
- * [X] Symbolic references
- * [X] Name verification/resolution
- * [X] Annotated tag ref peeling
- * [ ] Describe
- * [ ] Revision syntax
- * [ ] Namespaces
- * [ ] Replace refs, grafts
-* [X] Reference stores
- * [X] Chain lookup store
- * [X] Files reference store
- * [X] Reading loose refs
- * [X] Reading packed refs
- * [X] Atomic writes
- * [X] Batched writes
- * [ ] Packing refs
- * [ ] Reflogs
- * [ ] Reftable
-* Reachability
- * [X] Have/wants walks
- * [X] Is ancestor
- * [X] Merge bases
- * [X] Commit graph
- * [X] Changed path bloom filters
- * [X] Chained graphs
- * [ ] Writing
- * [ ] Reachability bitmaps
- * [ ] For a single packfile
- * [ ] For Multi pack indexes
-* Misc repository
- * [X] Opening relevant stores
- * [ ] Creating repositories
- * [ ] Filter branch/repo
- * [ ] Fast import/export
- * [ ] Git notes
- * [ ] Git attributes
- * [ ] Pseudorefs
- * Integrity and maintenance
- * [ ] Fsck
- * [ ] Repacking
- * [ ] Garbage collection
- * [ ] Cruft packing
- * [ ] Expiration
- * [ ] Grep
- * [ ] Submodules
- * [ ] Worktrees
- * [ ] Archive
- * [ ] LFS
- * [ ] Revision log walk
- * [ ] Topological ordering
- * [ ] Date ordering
- * [ ] Path-limited
-* [ ] Diffing
- * [ ] Blame
- * [ ] Annotate
- * [X] Tree diffing
- * [ ] Similarity/rename/copy detection
- * [ ] Multi-way diffs
- * [ ] Patch-id
- * [ ] Range-diff
- * Blob diffing
- * [ ] Word diffs
- * [X] Myers
- * [ ] Patience
- * [ ] Histogram
- * [ ] Tree-way
- * [ ] Format patch
- * [ ] Apply/amend patch
-* Branch integration/rewrite/etc methods
- * [ ] Merge
- * [ ] Recursive
- * [ ] ORT
- * [ ] Rebase
- * [ ] Cherry pick
- * [ ] Revert
- * [ ] Rerere
-* Network protocols and related features
- * [X] pkt-line
- * [X] side-band-64k
- * [X] Ingesting packfiles
- * [X] Quarantine areas
- * [X] Un-thinning thin packs
- * Version 0, version 1 protocols
- * [X] Server side
- * [X] Reference advertisement
- * [X] Capability negotiation
- * [X] Receive
- * [ ] "Upload"
- * [ ] Client side
- * [ ] Send
- * [ ] Fetch
- * Version 2 protocol
- * [ ] Server side
- * [ ] "Upload"
- * [ ] Client side
- * [ ] Fetch
- * Protocol-independent logic
- * Common
- * [X] Progress meters
- * Client side
- * [ ] Refspec
- * [ ] Fetch
- * [ ] Partial clones
- * [ ] Object filtering
- * [ ] Bundle URI
- * [ ] Packfile URI
- * [ ] Shallow clones
- * [ ] Send
- * Server side
- * [ ] Upload
- * [ ] Object filtering
- * [X] Receive
- * [ ] Signed push
- * Hooks
- * Slots
- * [ ] After ref negotiation
- * [X] After object unpacking
- * Provided samples
- * [X] Chain
- * [X] Force push rejection
-* [ ] Working trees
- * [ ] Stashing
- * [ ] Ignore rules
- * [ ] Checkouts
- * [ ] Sparse checkouts
- * [ ] CR/LF conversions
- * [ ] File mode conversions
- * [ ] Indexes
- * [ ] Conflict resolution
- * [ ] Split index
- * [ ] Sparse index
- * [ ] Untracked cache
- * [ ] Status listing
- * [ ] Filesystem monitor
- * [ ] Worktree
- * [ ] Common directory
- * [ ] Worktree-specific references
-* Research
- * [ ] Dynamic packfiles
- * [ ] Compaction; page-sized hole punching
- * [ ] Dynamic indexing
- * [ ] Linear/extendible/spiral hashing
- * [ ] Dynamic reachability bitmaps
-
-## Not planned
-
-* CLI tools
-* Clone
-* Anything reasonably considered "porcelain"
-* Credential helper
-* Transports
-* Auth
-* Remote management
-* Bisect
-* Any use of env vars
-* Repository discovery walking
-
-I might make a second project that supports these.
-Furgit will probably not, and will remain sans-IO.
-
## Benchmarks
* See [gitbench](https://git.sr.ht/~runxiyu/gitbench).
--- /dev/null
+++ b/ROADMAP.md
@@ -1,0 +1,211 @@
+# Roadmap
+
+* Configuration
+ * [X] Parsing
+ * [ ] Includes
+ * [ ] Writing
+* [X] Object IDs
+ * [X] SHA-256
+ * [X] SHA-1
+* [X] Object model (incl., parse, serialize)
+ * [X] Blobs
+ * [X] Trees
+ * [X] File mode definitions
+ * [X] Entry insertion ordering
+ * [X] Traversal
+ * [ ] Pathspec
+ * [X] Commits
+ * [X] Annotated tags
+ * [X] Stored objects
+* Further cryptography
+ * [ ] OpenPGP signatures
+ * [ ] SSH signatures
+* [X] Reading object stores
+ * [X] Pluggable interface
+ * [X] Chain lookup store
+ * [X] Bundle store
+ * [X] MRU lookup store
+ * [X] Reading loose objects
+ * [ ] Promisor remotes
+ * [ ] Alternates
+ * [X] Reading packed objects
+ * [X] Pack index lookups
+ * [X] Delta caching
+ * [X] Delta application
+ * [ ] Pack-wide bloom filters
+ * [ ] Multi pack indexes
+* [ ] Writing objects
+ * [X] Loose object writing
+* Misc bundle features
+ * [ ] Writing bundles
+* Misc packfile features
+ * [X] Writing pack indexes
+ * [X] Writing reverse pack indexes
+ * [ ] Writing packfiles
+ * [ ] Writing thin packs
+ * [ ] Compressing deltas
+ * [ ] Delta islands
+ * [ ] Pack verification
+* Compression
+ * [ ] Plugabble compression algorithms
+ * [X] ZLIB support
+ * [ ] DEFLATE optimizations
+ * [X] Adler-32 SIMD optimizations
+* [X] References
+ * [X] Detached references
+ * [X] Symbolic references
+ * [X] Name verification/resolution
+ * [X] Annotated tag ref peeling
+ * [ ] Describe
+ * [ ] Revision syntax
+ * [ ] Namespaces
+ * [ ] Replace refs, grafts
+* [X] Reference stores
+ * [X] Chain lookup store
+ * [X] Files reference store
+ * [X] Reading loose refs
+ * [X] Reading packed refs
+ * [X] Atomic writes
+ * [X] Batched writes
+ * [ ] Packing refs
+ * [ ] Reflogs
+ * [ ] Reftable
+* Reachability
+ * [X] Have/wants walks
+ * [X] Is ancestor
+ * [X] Merge bases
+ * [X] Commit graph
+ * [X] Changed path bloom filters
+ * [X] Chained graphs
+ * [ ] Writing
+ * [ ] Reachability bitmaps
+ * [ ] For a single packfile
+ * [ ] For Multi pack indexes
+* Misc repository
+ * [X] Opening relevant stores
+ * [ ] Creating repositories
+ * [ ] Filter branch/repo
+ * [ ] Fast import/export
+ * [ ] Git notes
+ * [ ] Git attributes
+ * [ ] Pseudorefs
+ * Integrity and maintenance
+ * [ ] Fsck
+ * [ ] Repacking
+ * [ ] Garbage collection
+ * [ ] Cruft packing
+ * [ ] Expiration
+ * [ ] Grep
+ * [ ] Submodules
+ * [ ] Worktrees
+ * [ ] Archive
+ * [ ] LFS
+ * [ ] Revision log walk
+ * [ ] Topological ordering
+ * [ ] Date ordering
+ * [ ] Path-limited
+* [ ] Diffing
+ * [ ] Blame
+ * [ ] Annotate
+ * [X] Tree diffing
+ * [ ] Similarity/rename/copy detection
+ * [ ] Multi-way diffs
+ * [ ] Patch-id
+ * [ ] Range-diff
+ * Blob diffing
+ * [ ] Word diffs
+ * [X] Myers
+ * [ ] Patience
+ * [ ] Histogram
+ * [ ] Tree-way
+ * [ ] Format patch
+ * [ ] Apply/amend patch
+* Branch integration/rewrite/etc methods
+ * [ ] Merge
+ * [ ] Recursive
+ * [ ] ORT
+ * [ ] Rebase
+ * [ ] Cherry pick
+ * [ ] Revert
+ * [ ] Rerere
+* Network protocols and related features
+ * [X] pkt-line
+ * [X] side-band-64k
+ * [X] Ingesting packfiles
+ * [X] Quarantine areas
+ * [X] Un-thinning thin packs
+ * Version 0, version 1 protocols
+ * [X] Server side
+ * [X] Reference advertisement
+ * [X] Capability negotiation
+ * [X] Receive
+ * [ ] "Upload"
+ * [ ] Client side
+ * [ ] Send
+ * [ ] Fetch
+ * Version 2 protocol
+ * [ ] Server side
+ * [ ] "Upload"
+ * [ ] Client side
+ * [ ] Fetch
+ * Protocol-independent logic
+ * Common
+ * [X] Progress meters
+ * Client side
+ * [ ] Refspec
+ * [ ] Fetch
+ * [ ] Partial clones
+ * [ ] Object filtering
+ * [ ] Bundle URI
+ * [ ] Packfile URI
+ * [ ] Shallow clones
+ * [ ] Send
+ * Server side
+ * [ ] Upload
+ * [ ] Object filtering
+ * [X] Receive
+ * [ ] Signed push
+ * Hooks
+ * Slots
+ * [ ] After ref negotiation
+ * [X] After object unpacking
+ * Provided samples
+ * [X] Chain
+ * [X] Force push rejection
+* [ ] Working trees
+ * [ ] Stashing
+ * [ ] Ignore rules
+ * [ ] Checkouts
+ * [ ] Sparse checkouts
+ * [ ] CR/LF conversions
+ * [ ] File mode conversions
+ * [ ] Indexes
+ * [ ] Conflict resolution
+ * [ ] Split index
+ * [ ] Sparse index
+ * [ ] Untracked cache
+ * [ ] Status listing
+ * [ ] Filesystem monitor
+ * [ ] Worktree
+ * [ ] Common directory
+ * [ ] Worktree-specific references
+* Research
+ * [ ] Dynamic packfiles
+ * [ ] Compaction; page-sized hole punching
+ * [ ] Dynamic indexing
+ * [ ] Linear/extendible/spiral hashing
+ * [ ] Dynamic reachability bitmaps
+
+## Not planned
+
+* CLI tools
+* Clone
+* Anything reasonably considered "porcelain"
+* Credential helper
+* Transports
+* Auth
+* Remote management
+* Bisect
+* Any use of env vars
+* Repository discovery walking
+
--
⑨