api: branches/create ignores expected_target_sha, so a guarded create or move can overwrite a branch
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Stale
- Tech stack
- go
- Domain
- backend-api-design
Research direction
Start with the POST /repos/branches/create decoder and the persistent and ephemeral branch creation paths, then trace the existing ref_guard_failed problem path (refGuardProblem). Add tests for all five guard cases on each of the three stores, including force with a stale guard; the issue asks to dogfood with SDK 0.1.2. Done means every case matches the documented spec and the guard prevents branch changes on failure.
Written by the indexing model from the issue text.
Description
Problem
Spec 5d8e1801 documents expected_target_sha on POST /repos/branches/create (and v1): 40 zeros means the branch must not exist yet, a tip value guards a move, and a failed guard answers 409 and leaves the branch alone, "even with force". SDK 0.1.1 and later send it.
open.storage has no such field and its decoder ignores unknown fields. Live on a node at 3af232d9: a forced create with a stale guard answered 200 and moved the branch, and a non-zero guard on a missing branch created it. A client that relies on the guard loses its branch tip.
Desk decision
Implement the guard exactly as the spec documents, reusing the existing ref_guard_failed problem path (refGuardProblem), on the persistent and ephemeral forms. Test every case on all three stores: zeros on a new branch, zeros on an existing branch, correct tip, stale tip, force with a stale guard. Dogfood with the real SDK 0.1.2. Not breaking (it accepts a new field).
Severity
High: silent branch overwrite for a client that sends the documented guard.
Upstream audit 2026-11-12, evidence 2026-11-12-1159UTC. Docs spec 5d8e1801 (ETag W/"8GUlAlKU8eko7Rr2", Last-Modified 2026-11-10 22:29:59 GMT). The cluster still serves ee8092bf, so this is documented drift, not a proven deployment (#234 rule: adopt what the docs publish). SDK 0.1.1 (Nov 10) and 0.1.2 (Nov 11) shipped on npm, PyPI and Go; their route list and token minting are unchanged from 0.1.0.
Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: medium
- Dominant language
- Go
- Stars
- 0
- Forks
- 0
- Avg merge
- 6h 16m
- Merged PRs (30d)
- 243
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from coder/openstorage
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
coder/openstorage#807 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 49/100
coder/openstorage#806 ·
Maintainers usually reply within 1 day
-
api: merge/preview ignores strategy, squash and allow_unrelated_historiesPossibly taken @ThomasK33 claimed this today. Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
coder/openstorage#805 ·
Maintainers usually reply within 1 day
-
githttp: +import remote serves clone and fetch, and its pushes stay out of the normal branch listPossibly taken @ThomasK33 claimed this today. Open
Difficulty 5/5 Over a week Newbie friendliness 20/100
coder/openstorage#804 · 2 comments ·
Maintainers usually reply within 1 day
-
githttp: hide ephemeral refs from the persistent remote and refuse pushes to them, as the docs sayPossibly taken @ThomasK33 claimed this 1 day ago. Open
Difficulty 4/5 3-5 days Newbie friendliness 35/100
coder/openstorage#799 · 2 comments ·
Maintainers usually reply within 1 day
All issues in coder/openstorage
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
coder/coder-logstream-kube#255 · 1 comment ·
-
kind/features
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
TencentBlueKing/bk-nodemgr#3991 ·
Maintainers usually reply within 1 day
-
meta
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
last9/last9-mcp-server#554 ·
Maintainers usually reply within 1 day