Skip to content
Merged
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
0c0dbd2
feat(serve): backfill session PR bindings and refresh their merge state
wenshao Aug 22, 2026
5634778
fix(serve): keep the PR-state refresh out of the serve fast-path closure
wenshao Aug 22, 2026
26e6b01
feat(core): bind PRs created via gh pr create in the session shell
wenshao Aug 22, 2026
669a773
test(serve): cover the refresh env switch and GitDialog state binding
wenshao Aug 22, 2026
d2ce236
Merge branch 'feat/session-pr-state-refresh' into feat/session-pr-gh-…
wenshao Aug 22, 2026
a4d6052
fix(core): harden the gh pr create detector against false positives
wenshao Aug 22, 2026
bd968f2
fix(core): attribute session PR bindings to the workspace repo
qwen-code-ci-bot Aug 22, 2026
b610098
fix(core): attribute gh pr create bindings via gh itself and serializ…
qwen-code-ci-bot Aug 23, 2026
a20fc9c
fix(cli): close session PR binding gates and attribute creates to the…
qwen-code-ci-bot Aug 23, 2026
ab2cb17
fix(serve): resolve round-4 review findings for session PR binding
qwen-code-ci-bot Aug 23, 2026
6a25872
fix(serve): replace the gitBranch backfill source with explicit /revi…
wenshao Aug 23, 2026
273452e
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 23, 2026
283acf6
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 23, 2026
410f22a
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 23, 2026
df55b10
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 23, 2026
94a59d2
chore(ci): record cd-cua-driver.yml size after #9587 growth
wenshao Aug 23, 2026
3e64540
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 23, 2026
03d54d8
fix(cli): harden session PR binding backfill and merge (#9739)
qwen-code-dev-bot Aug 23, 2026
d556d9f
test(cli): give serve fast-path --open polls a CI-contention budget (…
qwen-code-dev-bot Aug 24, 2026
313ea71
fix(cli): stabilize session PR backfill and sweep enumeration (#9739)
qwen-code-dev-bot Aug 24, 2026
d9164dd
fix(core): stop forged, re-stamped, and evicted session PR bindings (…
qwen-code-dev-bot Aug 24, 2026
f7b7936
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
qwen-code-dev-bot Aug 24, 2026
1b29cb0
fix(core): rank session PR eviction by provenance and close binding r…
qwen-code-dev-bot Aug 24, 2026
c7f9238
fix(core): correct session PR merge semantics and fail closed on attr…
qwen-code-dev-bot Aug 24, 2026
2c2c22c
fix(core): pin shell attribution identity and lock PR sidecar moves (…
qwen-code-dev-bot Aug 25, 2026
1a592c3
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 25, 2026
2105eed
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 25, 2026
8d449b1
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 25, 2026
8b22521
fix(core): reconcile locked PR sidecar moves with the lifecycle fence
wenshao Aug 25, 2026
aa04bee
Merge branch 'main' into feat/session-pr-gh-create
wenshao Aug 25, 2026
dddbd69
fix(core): reconcile session PR stores on identity and eviction (#9739)
qwen-code-dev-bot Aug 25, 2026
56574e1
Merge commit 'refs/pull/9739/head' of https://github.com/QwenLM/qwen-…
qwen-code-dev-bot Aug 25, 2026
394c039
fix(cli): stop unhandled test rejections from incomplete SubagentMana…
qwen-code-dev-bot Aug 25, 2026
025114c
fix(serve): address PR 9739 review findings on PR binding gates
wenshao Aug 26, 2026
d7e91c7
fix(serve): widen the gh pr create gate and state-validation messages
wenshao Aug 26, 2026
f6f4cd4
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 26, 2026
df4d408
fix(acp-bridge): use a filesystem-safe sidecar filename in the PR rec…
wenshao Aug 26, 2026
c31cbb1
fix(core): pass inline gh credentials to the PR-create verification legs
wenshao Aug 26, 2026
df6008f
fix(core): accept an env override on fetchCurrentBranchPullRequest
wenshao Aug 26, 2026
04053e7
Merge branch 'main' into feat/session-pr-gh-create
wenshao Aug 26, 2026
ef80716
fix(core): let PR-backed startup create reserved pr-<N> worktrees
wenshao Aug 26, 2026
223355f
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 26, 2026
34033d1
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 26, 2026
9885524
fix(session-pr): address standing review findings (#9739)
qwen-code-dev-bot Aug 26, 2026
1e740bf
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 26, 2026
9220eea
Merge branch 'main' into feat/session-pr-gh-create
wenshao Aug 27, 2026
7502d11
Merge branch 'main' into feat/session-pr-gh-create
wenshao Aug 27, 2026
1ef3405
Merge remote-tracking branch 'wenshao/feat/session-pr-gh-create' into…
wenshao Aug 27, 2026
70168fb
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 27, 2026
8f49b49
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 28, 2026
7fb28b0
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 28, 2026
04a32af
Merge branch 'main' into feat/session-pr-gh-create
qwen-code-dev-bot Aug 28, 2026
249fe7d
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 28, 2026
b6e750c
fix(core): lock session PR sidecars by path and close the writer sema…
wenshao Aug 28, 2026
22dbcf5
fix(cli): re-attach existing pr-<N> worktrees by their literal slug
wenshao Aug 28, 2026
51acfb3
fix(serve): rank the backfill trim by provenance and fence /review ur…
wenshao Aug 28, 2026
b71908b
refactor(serve): make the Aone backend seam view-only
wenshao Aug 28, 2026
f0eba2c
docs(design): ratify the session PR binding scope boundaries
wenshao Aug 28, 2026
c332e99
fix(core): keep http(s) ports in normalizeRemoteToWebUrl and drop the…
wenshao Aug 28, 2026
198c733
fix(serve): rank pre-provenance occupants on the sidecar ladder in th…
wenshao Aug 28, 2026
166a639
fix(serve): admit Aone /review url forms on a full-path match and nev…
wenshao Aug 29, 2026
f3e41ac
fix(serve): promote a re-offered occupant's provenance in place when …
wenshao Aug 29, 2026
d57f5ff
fix(serve): promote a re-offered occupant only on attested identity
wenshao Aug 30, 2026
522cb3a
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 30, 2026
975c286
fix(acp-bridge): publish a corrective metadata event when reconciliat…
wenshao Aug 31, 2026
d8767e0
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Aug 31, 2026
b07933d
fix(core): keep the stronger source across a same-PR split-pair merge
wenshao Aug 31, 2026
a9bc0e0
fix(serve): plan reviewed numbers in transcript order across bare and…
wenshao Aug 31, 2026
708efb3
Merge remote-tracking branch 'origin/main' into feat/session-pr-gh-cr…
wenshao Sep 1, 2026
0a3bfca
fix(serve): let the trusted fork-parent page attest a promotion candi…
wenshao Sep 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions docs/design/2026-08-20-webshell-session-pr-binding.md

Large diffs are not rendered by default.

56 changes: 32 additions & 24 deletions docs/design/2026-08-27-session-pr-aone-provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,22 +128,32 @@ above; tests substitute fakes.

### Backfill changes (`session-pr-backfill.ts`)

Per workspace, after candidate collection (unchanged):
> Updated with #9739: backfill's sources are the `/review <N|#N|url>`
> commands the user typed and the worktree `pr-<N>` convention — on EVERY
> platform. Transcript-branch mapping was removed as measured noise on
> GitHub and is not reintroduced for Aone, so `a1 repo mr list` is no
> longer on backfill's call path (`listAoneMergeRequests` stays as the
> exec-layer primitive; the injected `AoneMrBackend` seam is view-only).

Per workspace, after candidate collection:

- GitHub workspace → exactly today's code path.
- Aone workspace:
- Branch mapping: `listAoneMergeRequests` for `opened` then `merged`,
`AONE_BACKFILL_PAGES_PER_STATE` = 3 pages each (60 newest MRs per
state — a documented window vs gh's single 500-entry call; recent MRs are
the ones sessions map to). Same highest-number-wins rule for reused head
branches; same default-branch exclusion (`getDefaultBranch` is git-local).
AGit-Flow SHA heads simply never match transcript branches.
- URL resolution: NEVER fabricate. The `pr-<N>` convention number AND every
branch-mapped number that is newly bound this run is resolved through
`viewAoneMergeRequest` (the only sanctioned URL source), capped at
`AONE_MAX_MR_VIEW_CALLS_PER_RUN` = 25 unique numbers (the same constant
bounds the refresh sweep); the excess counts as `unresolved` and the
next run retries it.
- Candidates: sessions with a `/review` command or a `pr-<N>` worktree
sidecar, plus — Aone only — any session already holding a PR sidecar,
so the legacy repair below reaches bindings whose worktree sidecar is
gone.
- URL resolution: NEVER fabricate. Every planned number (`/review`
numbers and the convention number) that is newly bound this run is
resolved through `viewAoneMergeRequest` (the only sanctioned URL
source), capped at `AONE_MAX_MR_VIEW_CALLS_PER_RUN` = 25 unique numbers
(the same constant bounds the refresh sweep); the excess counts as
`unresolved` and the next run retries it. `/review <url>` forms only
recognise `/pull/<N>` URLs, so Aone `codereview/<id>` links are not a
form source (a bare `/review <id>` is); the only `/pull/<N>` form an
Aone workspace can see is the fabricated own-remote shape, which is
admitted on a FULL-path match (the two-segment repo key collapses
nested groups) and supplies the number only — never the URL.
- Same-PR identity on Aone fails CLOSED: an existing entry passes the
guard only when it is provably one of this repo's own MRs — either
mr-view-attested this run, or matching the exact detailUrl SHAPE for
Expand All @@ -167,12 +177,10 @@ Per workspace, after candidate collection (unchanged):
`detailUrl` + state (createdAt preserved). Without this they can never
match a fetched URL — frozen state and one wasted view call per refresh
sweep, forever.
- A failed `mr list` skips branch mapping for the run (the
`ghAvailable: false` degraded mode) while convention bindings survive; a
failed `mr view` leaves that number unresolved.
- The `getRemoteWebUrl` + `/pull/<N>` fallback applies to GitHub only.
- Response shape (wire): additive fields only — `platform: 'github' | 'aone'`
per workspace result and `aoneAvailable?: boolean` mirroring `ghAvailable`.
- A failed `mr view` leaves that number unresolved; the remote web URL
- `/pull/<N>` fallback applies to GitHub only.
- Response shape (wire): one additive field — `platform: 'github' | 'aone'`
per workspace result; `ghAvailable` is reported on GitHub only.

### Refresh changes (`session-pr-refresh.ts`)

Expand Down Expand Up @@ -248,16 +256,16 @@ and serve → commands imports have precedent (the channel modules).
feature with its own CI-rollup/review-decision fields.
- Creating MRs on Aone from the Git dialog.
- Detecting CLOSED Aone MRs (a1 cannot list them); reopen self-heals.
- AGit-Flow SHA-head attribution (nothing to match against; convention/slug
bindings are unaffected).
- Transcript-branch → MR mapping (removed as a source on every platform by
#9739); AGit-Flow SHA heads are therefore moot.
- Any change to manual binding, the sidecar schema, or the bridge/ACP wire
shapes.

## Risks / open questions

- **Latency**: a large Aone workspace's backfill serializes up to ~6 list
calls + ≤25 view calls (each ≤20s timeout, typically ~1s). The route is a
manually-triggered maintenance operation; acceptable, documented.
- **Latency**: a large Aone workspace's backfill serializes ≤25 view calls
(each ≤20s timeout, typically ~1s). The route is a manually-triggered
maintenance operation; acceptable, documented.
- **`accepted` semantics**: treated as `open` (approved but unmerged). If
Aone later distinguishes it in the badge, revisit.
- **Closed-state string** was never observed in probes; the mapping is
Expand Down
Loading
Loading