-
Notifications
You must be signed in to change notification settings - Fork 1.1k
docs: record the contributor carry train and the proposal it overtook #4514
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
53d9ac2
docs(devlog): roadmap for the contributor carry train
lidge-jun 442e6ca
docs(devlog): record the wave-1 outcome of the contributor carry train
lidge-jun 59aac5a
docs(devlog): close wave 1 with the lane S security review
lidge-jun b27cb2d
docs(devlog): correct wave 2 after the dispatch-time ownership re-check
lidge-jun 56118c9
docs(devlog): record lane H as a noop and lane I5 as dev-based
lidge-jun a7b72a1
docs(credits): record the xAI Fast proposal overtaken by independent …
lidge-jun f0eb40e
docs(devlog): record the contributor carry train outcome
lidge-jun File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
137 changes: 137 additions & 0 deletions
137
devlog/_plan/260913_contributor_carry_train/000_plan.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,137 @@ | ||
| # Contributor carry train — 60+ scored work into dev | ||
|
|
||
| ## Objective | ||
|
|
||
| Land the highest-value contributor work that is still open on this repository. | ||
| Seventeen open pull requests score 60 or higher by maintainer review once the | ||
| maintainer's own #4462 is set aside; 16 of them are dispatched here and #3389 is | ||
| deferred for a recorded reason. Eight issues score 60 or higher with no pull | ||
| request owning them. The goal also closes everything those landings actually | ||
| resolve. `origin/dev` was `2df82f412` when this roadmap was written. | ||
|
|
||
| This unit follows the 36-PR lane-stack merge in | ||
| `devlog/_plan/260913_lane_stack_merge/`, which landed the maintainer-authored | ||
| backlog. That batch is the precedent for the mechanism here; what changes is the | ||
| authorship. Every branch in this train belongs to someone else, so attribution is | ||
| a correctness requirement rather than a courtesy. | ||
|
|
||
| ## Selection | ||
|
|
||
| Candidates come from the maintainer's own `## 리뷰 · 우선순위 NN / 80` comments, | ||
| harvested live from every open issue and pull request through the GraphQL API on | ||
| 2026-09-13. All 73 open pull requests and all 58 open issues carry a score, so | ||
| the 60 cut is a real threshold rather than a sample. | ||
|
|
||
| The inventory and its verification live in `001_candidate_inventory.md`. | ||
|
|
||
| ## Attribution is a gate, not a footnote | ||
|
|
||
| `AGENTS.md` requires a `Co-authored-by` trailer naming the original author on any | ||
| landing that reimplements, supersedes, carries, or rebases their pull request. | ||
| `CREDITS.md` records 27 landings that failed this and explains why prose credit is | ||
| not equivalent: GitHub reads the trailer, and nothing reads a sentence in a commit | ||
| body. | ||
|
|
||
| Two rules follow for every lane in this unit: | ||
|
|
||
| - The trailer address is taken from the author's GitHub account, in the numeric | ||
| `users.noreply.github.com` form, not from the commit metadata on their branch. | ||
| - The trailer is verified in the **actual landing commit** after the squash, not | ||
| in the pull request description. A custom squash message silently drops text | ||
| that was only in the body. | ||
|
|
||
| ## CI economy | ||
|
|
||
| Unchanged from the previous batch and re-verified there. Each lane is a cumulative | ||
| stack: the bottom branch merges `origin/dev`, each branch above merges its parent's | ||
| resulting commit, so merging bottom-up produces shrinking diffs. Every non-tip head | ||
| commit carries `[skip ci]`, which suppresses `ci.yml`, `react-doctor`, | ||
| `service-lifecycle` and `issue-quality-tests`. Only `enforce-pr-target`, | ||
| `pr-hygiene` and `pr-labeler` still run, because `pull_request_target` ignores the | ||
| skip marker. | ||
|
|
||
| Only the lane tip runs the full matrix, and that tip run is the merge gate for the | ||
| whole lane. Squash messages never contain `[skip ci]`, because the dev-branch run | ||
| each merge triggers is the regression gate. | ||
|
|
||
| This is an owner-authorized deviation from the MAINTAINERS.md requirement that | ||
| every pull request carry its own successful required check. Each merge comment | ||
| states it explicitly: the owner authorization, the tip pull request and run id | ||
| that covers the branch, and the fact that this branch's own `ci` check never ran. | ||
|
|
||
| ## Common principles | ||
|
|
||
| Pushes use `git push --no-verify`, fast-forward only. No `--force` anywhere. | ||
| Nothing is pushed to `dev`, `main` or `preview`. | ||
|
|
||
| Local full-suite runs are forbidden. Allowed local checks are `bun run typecheck`, | ||
| `bun run structure:check`, `bun run privacy:scan`, and `bun test` limited to the | ||
| files a pull request touches. Hosted CI on the lane tip is the only suite proof | ||
| this goal accepts. | ||
|
|
||
| Each lane thread works in its own managed worktree and may fan out unlimited | ||
| `xai/grok-4.6` subagents inside that worktree. Subagents share their parent's | ||
| checkout, so a lane's subagents never run branch-level git operations concurrently. | ||
|
|
||
| Lane threads never merge, never mark a pull request ready, and never close | ||
| anything. They push and report. The main session performs every merge. | ||
|
|
||
| Conflicts are resolved by reading both sides and judging which matches current | ||
| behavior. A genuinely ambiguous conflict stops that link and is reported with both | ||
| sides and the reasoning, never guessed past. | ||
|
|
||
| ## Lane map | ||
|
|
||
| | Lane | Doc | Contents, bottom to top | Owner model | | ||
| | --- | --- | --- | --- | | ||
| | R responses/core | 010 | 4455, 4086, 4409, 4387 | anthropic/claude-opus-5 | | ||
| | C chat + adapters | 010 | 4438, 4389, 4457 | anthropic/claude-opus-5 | | ||
| | L cli + hub | 010 | 4382, 4413, 4170 | xai/grok-4.6 | | ||
| | B bridge + images + auth | 010 | 4381, 4388, 4460 | xai/grok-4.6 | | ||
| | S security-review hold | 010 | 4447 | xai/grok-4.6 | | ||
| | X small carries | 010 | 4077 copy fix, 4171 dedupe | xai/grok-4.6 | | ||
| | I1 Windows issues | 010 | 4425, 4442 | kimi/k3[1m] | | ||
| | I2 config + account issues | 010 | 4430, 4435 | xai/grok-4.6 | | ||
| | H context history | 030 | 3663 | anthropic/claude-opus-5 | | ||
| | I3 routing compatibility | 030 | 3775, 4436, 4429 | xai/grok-4.6 | | ||
| | I4 encrypted history regression | 030 | 4454 | anthropic/claude-opus-5 | | ||
|
|
||
| Wave 1 prepares R, C, L, B, S, X, I1 and I2 in parallel. Wave 2 is I3, I4 and H. | ||
|
|
||
| Wave 2 is not parallel throughout. I3 prepares alongside, but I4 and H must be | ||
| serialized in that order: both land in the routed Responses request path, so H | ||
| rebases onto I4 rather than preparing beside it. Preparing them as peers would | ||
| put two `src/server/responses/core.ts` writers in one wave, which is the exact | ||
| thing lane R exists to prevent. | ||
|
|
||
| Lane S is prepared in wave 1 but is deliberately not merged in wp3. `#4447` | ||
| touches CORS and the management provider routes, which is inside the | ||
| MAINTAINERS.md security-review boundary, and a tip merge would have landed it on | ||
| a CI signal that was never meant to certify it. Splitting it out of lane B keeps | ||
| lane B's tip at `#4460` and keeps the hold visible at merge time rather than | ||
| three documents away. | ||
|
|
||
| ## Work phases | ||
|
|
||
| wp1 is this roadmap. wp2 prepares wave 1, wp3 merges it, wp4 prepares wave 2 | ||
| against landed `dev`, wp5 merges wave 2 and confirms the dev regression run, and | ||
| wp6 closes what landed and records the outcome. | ||
|
|
||
| ## Risks | ||
|
|
||
| Five of the carried pull requests touch `src/server/responses/core.ts`: #4455, | ||
| #4086, #4409 and #4387 in lane R, plus #3663 in lane H. Issue #4454 lands in the | ||
| same path without being a pull request at all. #3389 is a sixth `core.ts` | ||
| toucher and is deferred for an unrelated reason recorded in | ||
| `001_candidate_inventory.md`. Lane R serializes its four; H and I4 serialize | ||
| after R. A lane merged out of order defeats the shrinking-diff property. | ||
|
|
||
| GitHub had not computed `mergeable` for most of these branches when the roadmap | ||
| was written, so lane assignment rests on file overlap rather than a proven | ||
| conflict-free merge. Each lane thread discovers its real conflicts at prepare time | ||
| and reports them. | ||
|
|
||
| All four issue lanes — I1, I2, I3 and I4 — have no branch to carry at all. Those | ||
| are ordinary implementations by the lane thread, and they carry no | ||
| `Co-authored-by` trailer because there is no source branch; the reporter is | ||
| credited in the description instead. | ||
119 changes: 119 additions & 0 deletions
119
devlog/_plan/260913_contributor_carry_train/001_candidate_inventory.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,119 @@ | ||
| # Candidate inventory and its verification | ||
|
|
||
| ## How the scores were collected | ||
|
|
||
| The maintainer leaves a `## 리뷰 · 우선순위 NN / 80` line in a comment on triaged | ||
| issues and pull requests. This unit harvested that line from every open item on | ||
| 2026-09-13 through the GraphQL API. | ||
|
|
||
| The first attempt was wrong in a way worth recording. `gh api graphql --paginate` | ||
| only advances a query whose cursor variable is named `$endCursor`; a query using | ||
| `$cursor` re-requests page one forever. That run produced a 230 MB file of 472 | ||
| identical pages and, worse, a plausible-looking result: deduplicating by number | ||
| hid the loop and returned a correct-but-partial page-one answer. Five candidates | ||
| at 61 to 68 were missing from it. | ||
|
|
||
| The corrected collection covers 73 open pull requests and 58 open issues. Every | ||
| one carries a score, so nothing in this inventory is an unscored guess. | ||
|
|
||
| Seventeen open pull requests score 60 or higher once the maintainer's own #4462 | ||
| is set aside. Sixteen are dispatched here; #3389 is deferred for a reason | ||
| recorded below. | ||
|
|
||
| ## Pull request candidates, 60 and above | ||
|
|
||
| | Score | PR | Author | Domain | Lane | | ||
| | --- | --- | --- | --- | --- | | ||
| | 74 | #4457 | jeongjin0 | devin adapter tool identity | C | | ||
| | 73 | #4381 | luvs01 | bridge truncated terminal | B | | ||
| | 71 | #4387 | luvs01 | web-search continuation key binding | R | | ||
| | 70 | #4455 | jeongjin0 | code-mode view_image | R | | ||
| | 69 | #4388 | luvs01 | images loop buffering bound | B | | ||
| | 68 | #3389 | Yum-wu | zero-output retry | deferred | | ||
| | 68 | #4382 | luvs01 | hub status credentials | L | | ||
| | 67 | #4438 | Yongzhaooo | OCG DeepSeek timeline instructions | C | | ||
| | 66 | #4389 | olddonkey | stream memory allocations, 44 files | C | | ||
| | 66 | #4413 | rrmlima | authenticated remote catalog pull | L | | ||
| | 66 | #4460 | AgenticLab-SH | model availability vs auth failure | B | | ||
| | 64 | #4077 | laerad777 | xAI Fast catalog copy, residue only | X | | ||
| | 63 | #4086 | Eleven-is-cool | routed continuation after replay miss | R | | ||
| | 61 | #4409 | yxr1995-maker | routed effort ladders from models.dev | R | | ||
| | 61 | #3663 | y2ambition-ai | context history relay, 19 files | H | | ||
| | 61 | #4170 | yeongjunyoo | stop refusal cause | L | | ||
| | 61 | #4447 | Veritas-7 | field-masked provider writes | S | | ||
|
|
||
| `#4462` also scores 74 but is maintainer-authored and belongs to the sub-agent | ||
| surface work, not this train. | ||
|
|
||
| `#3389` is deferred by prior judgment, not by score. The 2026-09-04 priority-65 | ||
| closeout recorded `NEEDS_DESIGN`: its zero-output premise was disproved by | ||
| experiment. Reviving it needs a design decision first, so it is not dispatched | ||
| here. | ||
|
|
||
| ## Issue candidates with no owning pull request | ||
|
|
||
| | Score | Issue | Reporter | Lane | | ||
| | --- | --- | --- | --- | | ||
| | 76 | #4425 | wanjinxingoo-bot | I1 | | ||
| | 76 | #4430 | samwang0041-star | I2 | | ||
| | 73 | #4454 | 321sssrt-bit | I4 | | ||
| | 71 | #3775 | leonclab | I3 | | ||
| | 70 | #4429 | mdwsk88 | I3 | | ||
| | 67 | #4442 | SeanChengN | I1 | | ||
| | 66 | #4436 | jaychou0642-create | I3 | | ||
| | 64 | #4435 | ren-min-wan-sui | I2 | | ||
|
|
||
| The remaining 60+ issues are excluded for a stated reason rather than by | ||
| oversight. #4456, #4412 and #4439 already have an owning pull request in this | ||
| train (#4457, #4455, #4438). #4191, #4311, #3661, #3781, #4312 and #3506 are | ||
| partially landed: the merged work references them with `Refs` and each landing | ||
| states in its own description that the issue stays open. #3375, #3376 and #3377 | ||
| are maintainer feature issues under separate execution. | ||
|
|
||
| ## Supersede closures already executed | ||
|
|
||
| Before this train was planned, nine contributor pull requests were closed because | ||
| the previous batch had already absorbed them. Each carrier's merge commit was | ||
| verified as an ancestor of `origin/dev` at `2df82f412` before the close, and each | ||
| close carries a comment naming the carrier, the merge commit, and the fact that | ||
| the carry preserved the author's trailer. | ||
|
|
||
| | Closed | Author | Carrier | Merge commit | | ||
| | --- | --- | --- | --- | | ||
| | #4319 | ke-1t | #4346 | `b551b524f` | | ||
| | #4310 | yxr1995-maker | #4354 | `b474013` | | ||
| | #3652 | itismyfield | #4355 | `c6372ca` | | ||
| | #4229 | yansigit | #4363 | `37bc1a0` | | ||
| | #4216 | ildunari | #4367 | `c240534` | | ||
| | #4119 | DamnUi | #4366 | `90667e5` | | ||
| | #4317 | cortes-ventures | #4402 | `8acd73b` | | ||
| | #4080 | terrytan95 | #4369 | `c27eeec` | | ||
| | #3458 | Ingwannu | #4362, #4372 | `19601ea`, `7874900` | | ||
|
|
||
| ## The half-superseded case | ||
|
|
||
| `#4077` was not closed, and the reason generalizes. Its registry half landed | ||
| independently through `#4431` (`7ca00ffe7`), which classified the xAI OAuth lane | ||
| from its own live probe and deliberately excluded `grok-4.20-multi-agent-0309` | ||
| because the gateway answers `service_tier: "default"` when sent `priority`. That | ||
| branch flips the same model to `true`, so the landed scope is narrower on | ||
| evidence. | ||
|
|
||
| Its third point is still unlanded and now more visible than when it was filed: | ||
| `src/providers/registry.ts` still reads | ||
| `fastTierDescription: "Priority processing, 2x token price"`, and `#4431` opened | ||
| the OAuth subscription rows where no per-token price exists. Lane X carries that | ||
| correction with the author's trailer. | ||
|
|
||
| `#4431` landed without referencing `#4077` and without a trailer for its author. | ||
| That is the `missing_coauthor_credit` pattern `CREDITS.md` exists to stop | ||
| repeating, and it is why lane X exists as its own slice rather than as a footnote | ||
| in another lane. | ||
|
|
||
| ## Duplicate to collapse | ||
|
|
||
| `#4171` (rrmlima, `CHANGES_REQUESTED`) and `#4455` (jeongjin0) both answer issue | ||
| `#4412` and both touch `src/responses/code-mode-helper-compat.ts` and | ||
| `src/types/tools.ts`. `#4455` is the 8-file superset. Lane R carries `#4455` with | ||
| trailers for both authors; lane X closes `#4171` after that landing is verified on | ||
| `dev`. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🤖 get_repo_knowledge executed:
get_repo_knowledge lidge-jun/opencodex /tmp/coderabbit-repo-knowledge/lidge-jun-opencodex-7afea732/learnings /tmp/coderabbit-repo-knowledge/lidge-jun-opencodex-7afea732/conventionsLength of output: 10493
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 18910
🏁 Script executed:
Repository: lidge-jun/opencodex
Length of output: 12526
Re-check issue ownership before dispatch.
The statements in
000_plan.md:134-137and010_wave1.md:149-152describe a harvest snapshot, not dispatch-time state.011_wave1_outcome.md:73-87records that draft#4465opened after the harvest and before I1 dispatch. The lane therefore omitted required attribution until the issue was reclassified. Before implementing an issue lane, check for an owning contributor pull request. If one exists, carry the work and add itsCo-authored-bytrailer; otherwise, omit the trailer. Qualify the roadmap statements as applying at planning time.📍 Affects 2 files
devlog/_plan/260913_contributor_carry_train/000_plan.md#L134-L137(this comment)devlog/_plan/260913_contributor_carry_train/010_wave1.md#L149-L152🤖 Prompt for AI Agents