Skip to content

Commit 41ef0e0

Browse files
Merge main 18861b2 into feat/abort-r1-u2-opencode-go
Conflicted file (only one): src/api/providers/__tests__/opencode-go.spec.ts Resolution keeps both intents. Main's additions survive: the MiMo V2.6 Flash reasoning test and the four auto-merged hunks - 63 of its 66 added non-trivial lines are in the merged file. The 3 that are not are exactly the two contested assertion spots where main restored the pre-normalization wrapper identity (`Opencode Go completion error: <double message>`) and this branch asserts the standardized AbortError; the merged implementation of src/api/providers/opencode-go.ts is this branch's (that file is unchanged base-to-tip on main), so the assertions that describe it are the branch's. All 1,077 of the branch's added non-trivial spec lines are present. The shared util moved additively: utils/abort-signal.ts gained detachOnAbort, settleOnAbort, createTimeoutError, isTimeoutAbort and OpenAiRequestOptions on main, and none of the eight names this handler imports changed its export line.
2 parents 04c981b + 18861b2 commit 41ef0e0

897 files changed

Lines changed: 44040 additions & 15736 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.coderabbit.yaml‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@ reviews:
9696
a call-count check. For code with fallback behavior, verify both the cold-start case
9797
(no prior state) and the warm case (prior state exists) are covered, as they exercise
9898
different branches.
99+
A test double must not re-implement production logic. If a mock, stub, or inline helper
100+
copies a predicate, filter, sort, or transform that also exists in production code, a
101+
change to the production copy cannot fail the test. Bind the real function instead, for
102+
example with `vi.importActual` or `vi.spyOn`, and replace only the external boundary
103+
(network, filesystem, VS Code API).
104+
For code that filters, groups, reorders, or deduplicates a collection, require a test
105+
with mixed input, such as interleaved item types and repeated items, that asserts the
106+
full output array. A test that uses only one item type cannot fail when the production
107+
predicate becomes narrower. Ask for the case that fails when the predicate covers a
108+
subset of the intended items.
109+
When Stryker reports a surviving mutant on changed code, prefer a test that kills it.
110+
If the mutant is equivalent, prefer to delete the redundant branch before adding a
111+
`Stryker disable` comment.
99112
100113
- path: "apps/vscode-e2e/**"
101114
instructions: >-

‎.github/actions/setup-node-pnpm/action.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ runs:
2424
using: "composite"
2525
steps:
2626
- name: Install pnpm
27-
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
27+
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
2828
with:
2929
version: ${{ inputs.pnpm-version }}
3030
- name: Get pnpm store directory
@@ -39,7 +39,7 @@ runs:
3939
restore-keys: |
4040
${{ runner.os }}-pnpm-store-
4141
- name: Setup Node.js
42-
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
42+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
4343
with:
4444
node-version: ${{ inputs.node-version }}
4545
- name: Install dependencies

‎.github/pull_request_template.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Write the steps that test your changes. This helps reviewers check your work.
4040
- [ ] **Self-Review**: I reviewed my own code with care.
4141
- [ ] **Writing Style**: The PR title and description use Simplified Technical English (ASD-STE100): short sentences, plain words, active voice, one idea per sentence, no contractions.
4242
- [ ] **Testing**: New and/or updated tests have been added to cover my changes (if applicable).
43+
- [ ] **Test Helpers** (test changes only): Shared test helpers (`src/test-utils/`, `@/utils/test-utils`) are used only for mechanical duplication; test intent and scenario-specific mocks remain visible.
4344
- [ ] **Visual Snapshot** (UI changes only): If a user would notice this change at a glance (layout, theme tokens, brand elements, empty/error states), I added or updated a `*.visual.tsx` snapshot in `webview-ui/`. See `webview-ui/AGENTS.md` → "When a UI change needs a snapshot".
4445
- [ ] **Documentation Impact**: I checked if my changes need documentation updates (see "Documentation Updates" section below).
4546
- [ ] **Contribution Guidelines**: I read and agree to the [Contributor Guidelines](/CONTRIBUTING.md).

‎.github/workflows/cli-release.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ jobs:
198198
rm -rf "$VERIFY_DIR"
199199
200200
- name: Upload artifact
201-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
201+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
202202
with:
203203
name: cli-${{ matrix.platform }}
204204
path: |
@@ -230,7 +230,7 @@ jobs:
230230
echo "tag=cli-v$VERSION" >> $GITHUB_OUTPUT
231231
232232
- name: Download all artifacts
233-
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
233+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
234234
with:
235235
path: artifacts
236236

@@ -376,7 +376,7 @@ jobs:
376376

377377
steps:
378378
- name: Download all artifacts
379-
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
379+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
380380
with:
381381
path: artifacts
382382

‎.github/workflows/code-qa.yml‎

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ on:
99
merge_group:
1010
types: [checks_requested]
1111

12+
# Cancel superseded runs when a pull request is updated. Non-PR events keep
13+
# unique groups, so main, merge-queue, and manual runs are never cancelled.
14+
concurrency:
15+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
16+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
17+
1218
# Least privilege: every job below escalates only where it needs to.
1319
permissions:
1420
contents: read
@@ -66,8 +72,12 @@ jobs:
6672
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
6773
- name: Setup Node.js and pnpm
6874
uses: ./.github/actions/setup-node-pnpm
75+
with:
76+
install-args: "--frozen-lockfile"
6977
- name: Verify all translations are complete
7078
run: node scripts/find-missing-translations.js
79+
- name: Verify t() calls pass every interpolation variable
80+
run: node scripts/check-i18n-interpolation.js
7181

7282
knip:
7383
runs-on: ubuntu-latest
@@ -76,6 +86,8 @@ jobs:
7686
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
7787
- name: Setup Node.js and pnpm
7888
uses: ./.github/actions/setup-node-pnpm
89+
with:
90+
install-args: "--frozen-lockfile"
7991
- name: Verify Knip guardrails
8092
run: pnpm test:knip-policy
8193
- name: Run knip checks
@@ -90,6 +102,8 @@ jobs:
90102
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
91103
- name: Setup Node.js and pnpm
92104
uses: ./.github/actions/setup-node-pnpm
105+
with:
106+
install-args: "--frozen-lockfile"
93107
- name: Check formatting
94108
run: pnpm format:check
95109
- name: Lint
@@ -110,6 +124,8 @@ jobs:
110124
run: pnpm agent-evals:check-types
111125
- name: Model-check task lifecycle protocols
112126
run: pnpm lifecycle:model-check
127+
- name: Model-check webview recovery
128+
run: pnpm webview-recovery:check-types && pnpm webview-recovery:model-check
113129
- name: Validate MCP OAuth integration
114130
run: pnpm mcp:integration-check
115131

@@ -133,7 +149,7 @@ jobs:
133149
- name: Package extension
134150
run: pnpm --filter ./src vsix
135151
- name: Upload test VSIX
136-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
152+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
137153
with:
138154
name: zoo-code-vsix-pr-${{ github.event.pull_request.number }}
139155
path: bin/*.vsix
@@ -163,6 +179,8 @@ jobs:
163179
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
164180
- name: Setup Node.js and pnpm
165181
uses: ./.github/actions/setup-node-pnpm
182+
with:
183+
install-args: "--frozen-lockfile"
166184
- name: Restore Turbo cache
167185
id: turbo-cache
168186
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
@@ -229,6 +247,11 @@ jobs:
229247
- name: Verify coverage cache inputs
230248
if: matrix.collect-coverage
231249
run: pnpm --dir src run verify:coverage-cache-inputs
250+
# Validate build/static cache inputs (issue #2290 contract) so a
251+
# stale webview or extension bundle is never restored as a hit.
252+
- name: Verify build cache inputs
253+
if: matrix.collect-coverage
254+
run: pnpm --dir src run verify:build-cache-inputs
232255
- name: Save Turbo cache
233256
if: steps.turbo-cache.outputs.cache-hit != 'true'
234257
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
@@ -246,7 +269,7 @@ jobs:
246269
# See https://docs.codecov.com/docs/flags
247270
- name: Upload non-core coverage to Codecov
248271
if: matrix.collect-coverage
249-
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
272+
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
250273
with:
251274
files: >-
252275
src/coverage/merged/lcov.info,
@@ -258,31 +281,31 @@ jobs:
258281
token: ${{ secrets.CODECOV_TOKEN }}
259282
- name: Upload webview JSDOM coverage to Codecov
260283
if: matrix.collect-coverage
261-
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
284+
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
262285
with:
263286
files: webview-ui/coverage/lcov.info
264287
disable_search: true
265288
flags: webview-ui
266289
token: ${{ secrets.CODECOV_TOKEN }}
267290
- name: Upload core unit coverage to Codecov
268291
if: matrix.collect-coverage
269-
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
292+
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
270293
with:
271294
files: packages/core/coverage/unit/lcov.info
272295
disable_search: true
273296
flags: ${{ matrix.codecov-flag }},core-unit
274297
token: ${{ secrets.CODECOV_TOKEN }}
275298
- name: Upload core integration coverage to Codecov
276299
if: matrix.collect-coverage
277-
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
300+
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
278301
with:
279302
files: packages/core/coverage/integration/lcov.info
280303
disable_search: true
281304
flags: ${{ matrix.codecov-flag }},core-integration
282305
token: ${{ secrets.CODECOV_TOKEN }}
283306
- name: Upload coverage reports to GitHub
284307
if: matrix.collect-coverage
285-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
308+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
286309
with:
287310
name: coverage-reports-${{ matrix.name }}
288311
path: |

‎.github/workflows/codeql.yml‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ on:
77
schedule:
88
- cron: "24 19 * * 3"
99

10+
# Cancel superseded runs when a pull request is updated. Non-PR events keep
11+
# unique groups, so main pushes and scheduled scans are never cancelled.
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
14+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
15+
1016
# Least privilege: the analyze job escalates to security-events: write via its
1117
# own job-level permissions block.
1218
permissions:
@@ -52,7 +58,7 @@ jobs:
5258

5359
# Initializes the CodeQL tools for scanning.
5460
- name: Initialize CodeQL
55-
uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
61+
uses: github/codeql-action/init@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
5662
with:
5763
languages: ${{ matrix.language }}
5864
build-mode: ${{ matrix.build-mode }}
@@ -80,6 +86,6 @@ jobs:
8086
exit 1
8187
8288
- name: Perform CodeQL Analysis
83-
uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
89+
uses: github/codeql-action/analyze@9b3254085494b55a0f7c4c2b3d2d52cc712ce370 # v4.39.1
8490
with:
8591
category: "/language:${{matrix.language}}"

‎.github/workflows/e2e.yml‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ on:
77
merge_group:
88
types: [checks_requested]
99

10+
# Cancel superseded runs when a pull request is updated. Non-PR events keep
11+
# unique groups, so merge-queue and manual runs are never cancelled.
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
14+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
15+
1016
permissions:
1117
contents: read
1218

@@ -156,6 +162,18 @@ jobs:
156162
if: github.event_name != 'pull_request' || steps.e2e-marker.outputs.cache-hit != 'true'
157163
run: TEST_FILE=restart-persistence.test USE_MOCK=true xvfb-run -a pnpm --filter @roo-code/vscode-e2e exec node ./out/runTest.js
158164

165+
- name: Upload restart-persistence failure artifacts
166+
# runTest.js preserves a failed scenario workspace (phase results,
167+
# VS Code logs, task files) under apps/vscode-e2e/test-failures/
168+
# instead of deleting it, so the interrupted-write state from
169+
# issue #2130-style failures stays inspectable.
170+
if: failure()
171+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
172+
with:
173+
name: restart-persistence-failure
174+
path: apps/vscode-e2e/test-failures/
175+
if-no-files-found: ignore
176+
159177
- name: Explain skipped mocked E2E pass marker
160178
if: steps.e2e-marker.outputs.cache-hit != 'true' && steps.run-e2e.outcome == 'success' && steps.vscode-fallback.outputs.used == 'true'
161179
run: echo "Skipping mocked E2E pass marker because tests ran against a stale cached VS Code binary (VS Code download endpoints unreachable)."

0 commit comments

Comments
 (0)