Dynamic Review: fall back when a server refuses the blob size filter
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- git, typescript
- Domain
- backend
Research direction
Start with fetch_pack, which maps any ERR or fatal sideband line to CheckoutReason.PROTOCOL, and trace how the blob:limit filter is sent after PR #296. Reproduce with a local repository whose upload-pack disallows blob:limit, as test T01 describes. Done means the checkout prepares with the large blob omitted, the retry order is blob:limit, blob:none, then no filter, and docs/dynamic-checkout.md documents the fallback and its budget.
Written by the indexing model from the issue text.
Description
Follows #296 / PR #300 (review finding F2).
Problem
Before #296 the only filter the checkout sent was blob:none. Now it sends filter blob:limit=<n> whenever the server advertises the filter capability. A server that allows some filters but not this one (a Git server or proxy configured with uploadpackfilter.blob:limit.allow=false) answers with an ERR or fatal sideband line. fetch_pack maps any such line to CheckoutReason.PROTOCOL, so the whole run fails with checkout_incomplete [protocol]. Reproduced with a local repository that has that setting: the code before #296 prepares it, the code after fails. GitHub.com honours blob:limit (verified live), so this concerns other servers, for example self-hosted ones.
Design
- When a fetch with
blob:limitis refused with the server's filter error, retry once withfilter blob:noneand keep the existing inference that a blob missing from the response is above the limit and is omitted. Ifblob:noneis refused too, retry once without a filter. Every retry stays inside the transfer and preparation budgets and the deadline. - Recognize the refusal by its stable shape only (a fatal/ERR sideband line that mentions the filter), never by copying server text into logs or errors.
- Remember the outcome for the rest of the run, so each later fetch (merge base, previous) does not repeat the failed attempt.
- Only a filter refusal retries. Other errors keep their reason.
Test cases
| ID | kind | level | case | expected |
|---|---|---|---|---|
| T01 | regression | integration (real upload-pack, blob:limit disallowed) |
prepare a repository with a large binary blob | prepares; the large blob is omitted; fails with [protocol] before the fix |
| T02 | behavior | unit (protocol) | the server refuses blob:limit, then blob:none |
retries in that order, then fails with the original reason if all are refused |
| T03 | behavior | unit (protocol) | an unrelated ERR line |
no retry; reason unchanged |
| T04 | behavior | integration | later fetches of the same run | do not repeat the refused filter |
| T05 | security | unit | server error text | never appears in an error, a log line or the result |
| T06 | docs | review | docs/dynamic-checkout.md |
the fallback and its budget bound are documented |
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 1
- Avg merge
- 1h 18m
- Merged PRs (30d)
- 186
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a 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 ExpidetGames/code-reviewer
-
area: app type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
ExpidetGames/code-reviewer#308 ·
Maintainers usually reply within 1 day
-
type: docs
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
ExpidetGames/code-reviewer#94 ·
Maintainers usually reply within 1 day
-
area: app post-mvp type: feature
Difficulty 5/5 Over a week Newbie friendliness 12/100
ExpidetGames/code-reviewer#339 ·
Maintainers usually reply within 1 day
-
area: runner post-mvp type: feature
Difficulty 5/5 Over a week Newbie friendliness 18/100
ExpidetGames/code-reviewer#338 ·
Maintainers usually reply within 1 day
-
area: runner post-mvp type: feature
Difficulty 5/5 Over a week Newbie friendliness 12/100
ExpidetGames/code-reviewer#337 ·
Maintainers usually reply within 1 day
All issues in ExpidetGames/code-reviewer
Similar issues
-
documentation good first issue
Difficulty 2/5 Half a day Newbie friendliness 72/100
sujithputta02/Esapay#13 ·
-
Share dialog: the address book's contact count reads "1 contacts" (no singular form in any language)Possibly taken @chibenwa claimed this today. Openai-driven-qa bug claude Cosmetic
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
linagora/twake-contacts-frontend#271 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Koenkk/zigbee2mqtt#33402 ·
Maintainers usually reply within 1 day
-
dx P2 platform Stellar Wave Wave 10
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
winsznx/routedock#579 · 1 comment ·
Maintainers usually reply within 1 day
-
area:ui effort:S enhancement priority:P2
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day