Fix #424: fork operation #431
No reviewers
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub!431
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/issue-424"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements docs/features/03 §7 (the unimplemented fork spec) plus the merge-durability fix the acceptance path requires.
Fork core (internal/pulls): ForkExecutor ShareExecutor wired at composition (verbatim pack set, fresh refs snapshot + branch override, checkpoint, child manifest.pb Create min_seq=seq+1); ForkInput gains visibility/branch/description with server-honored semantics; sync 409 fail-fast on taken names; #346 target admission; child access bootstrap; fork.json Root + listable GET forks index.
GC (internal/maintain): fork-network rule — superseded packs survive while any live fork-network manifest references them (transitive, probe-capped, fail-closed on corrupt index).
Reads (internal/wal): ancestor fallback for pack content (repo-prefixed keys cannot serve verbatim references — law-12 amendment in 03 Decisions); failure-path only, byte-identical non-fork behavior.
Merge durability (required by acceptance 3+7): merge/update-branch commits upload objects atomically (PackTip + RefPack seam, 04_git.md argv) — a merged parent was unclonable (upload-pack: not our ref), which no fork could survive.
UI/API: Fork button + Fork.jsx + Forks.jsx, summary fork_parent/forks + ETag, SDK, Apidocs.
Proof: pulls/api/maintain/wal/cmd green (race + >=95% cover), sim green, e2e full chain 7.5s (fork phase 91ms), node 893 pass (2 pre-existing smoke fails per #422 note), vite green. No new deps.