Skip to content

fix(ci): wake the PR gate when attribution-approved is applied - #7698

Merged
lidge-jun merged 1 commit into
devfrom
lane/m1-pr-gate-labels
Oct 24, 2026
Merged

lidge-jun merged 1 commit into
devfrom
lane/m1-pr-gate-labels

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

The enforce gate's resolve-pr job wakes on labeled/unlabeled events only for an allowlist of label names, and that list left out attribution-approved. .github/scripts/pr-hygiene.cjs lists the label in HYGIENE_GATE_LABELS (labels that can clear or reinstate a hygiene failure), and pr-carry-attribution.cjs honors it to clear missing_coauthor_credit. When a maintainer applied it, PR hygiene re-ran and cleared its failure, but the gate never re-evaluated, so READY/DRAFT stayed stale until some unrelated event.

  • .github/workflows/enforce-pr-target.yml: add github.event.label.name == 'attribution-approved' to the resolver condition. No trigger, permission, or job change; the resolver keeps contents: read / pull-requests: read.
  • tests/ci-workflows/ci-workflows.test.ts: replace the seven hand-listed label assertions with a check that the label literals in the resolver if: equal HYGIENE_GATE_LABELS plus gui-screenshot-waived (no duplicates). A label added to one list without the other now fails the test.
  • structure/ops/docs-and-release.md: the enforce-pr-target row says which labels wake the gate and where they are pinned (same-line edit; the doc is at its 600-line cap).

Closes #7651

Verification

All on head 73e8133cbe (based on dev 26598df2c4), Bun 1.4.3 test runner:

  • RED before the workflow fix: bun test tests/ci-workflows/ci-workflows.test.ts -t "exact allowlist" → 0 pass / 1 fail (exit 1), diff shows only attribution-approved missing.
  • GREEN after: same command → 1 pass / 0 fail (exit 0).
  • bun test tests/ci-workflows/ci-workflows.test.ts tests/ci-workflows/file-size-ratchet.test.ts tests/test-layout.test.ts tests/test-layout-tooling.test.ts tests/ci-workflows/structure-ssot.test.ts → 229 pass / 0 fail (exit 0).
  • node --test .github/scripts/pr-hygiene.test.cjs .github/scripts/enforce-pr-target.test.cjs .github/scripts/pr-quality-messages.test.cjs → 75 pass / 0 fail (exit 0).
  • bun run typecheck → exit 0.
  • OCX_TEST_RUNNER_BUN=<bun 1.4.3> bun run test:changed → 142 pass / 0 fail (exit 0).
  • bun run privacy:scan → passed (exit 0). bun run structure:check → passed (exit 0).
  • NOT RUN: full bun run test — shared host with several concurrent lanes; the change touches one workflow condition and one test, both covered by the focused files above. Left to CI.
  • The workflow expression itself is evaluated only by GitHub; pull_request_target workflows load from the default branch, so the live behavior changes after promotion to main.

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Summary by CodeRabbit

  • Chores

    • Updated pull request checks to respond to changes involving the attribution-approved label.
    • Added a consistency check to keep the labels recognized by related pull request checks aligned.
  • Documentation

    • Clarified which label changes trigger the pull request gate.

The enforce gate's resolve-pr job woke on labeled/unlabeled events only for
an allowlist that omitted attribution-approved, although pr-hygiene.cjs lists
it in HYGIENE_GATE_LABELS and the carry-attribution check honors it. Applying
the label re-ran hygiene but left READY/DRAFT stale until an unrelated event.

Add the label to the resolver condition and derive the test's expected wake
labels from HYGIENE_GATE_LABELS so the two lists cannot drift again.

Closes #7651
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner October 24, 2026 18:25
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-24T18:26:38.964355Z 73e8133 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 26598df and 73e8133.

Files selected for processing: 3
  • .github/workflows/enforce-pr-target.yml
  • structure/ops/docs-and-release.md
  • tests/ci-workflows/ci-workflows.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

Walkthrough

The PR target resolver now wakes when attribution-approved is added or removed. A workflow test checks the resolver labels against HYGIENE_GATE_LABELS plus gui-screenshot-waived. The workflow documentation describes the label events and test.

Changes: PR target label wake-up

Layer / File(s) Summary
Resolver label alignment
.github/workflows/enforce-pr-target.yml, tests/ci-workflows/ci-workflows.test.ts, structure/ops/docs-and-release.md
The resolver allowlist includes attribution-approved. The test checks for duplicate resolver labels and requires an exact match with HYGIENE_GATE_LABELS plus gui-screenshot-waived. The workflow documentation records the event labels and the alignment test.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested labels: bug

Suggested reviewers: luvs01

Merge Risk: Minimal · up to 73e81

The label wake-up change and its alignment test are ready to merge, subject to normal CI validation.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: updating the CI PR gate so applying the attribution-approved label wakes the gate.
Linked Issues check Passed Issue #7651 requires the resolve-pr job to wake when attribution-approved is applied and requires coverage that keeps the wake list aligned with HYGIENE_GATE_LABELS. `.github/workflows/enforce-p…
Out of Scope Changes check Passed The pull request changes only the resolver label condition, its alignment test, and the corresponding row in structure/ops/docs-and-release.md. The test and documentation directly support issue #765…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Full details: Linked Issues check

Explanation

Issue #7651 requires the resolve-pr job to wake when attribution-approved is applied and requires coverage that keeps the wake list aligned with HYGIENE_GATE_LABELS. .github/workflows/enforce-pr-target.yml adds github.event.label.name == 'attribution-approved' to the resolver if: condition. tests/ci-workflows/ci-workflows.test.ts extracts all resolver label literals, rejects duplicates, and compares them with HYGIENE_GATE_LABELS plus gui-screenshot-waived. The changed behavior and the required alignment test are present in the whole-PR diff.

Full details: Out of Scope Changes check

Explanation

The pull request changes only the resolver label condition, its alignment test, and the corresponding row in structure/ops/docs-and-release.md. The test and documentation directly support issue #7651. No unrelated implementation, permission, trigger, or job changes appear in the whole-PR diff.

Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1 files. (2 skipped: 2 unsupported.)

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Oct 24, 2026
@lidge-jun

Copy link
Copy Markdown
Owner Author

Local CI-equivalent (Linux) at 73e8133

PASS under the temporary base-identical exception; raw failed exits are retained below.

Host lidge-AI-AI; Ubuntu 24.04.4 LTS x86_64; kernel 7.0.0-30-generic. Pressure before suite: ok, load 0.53, 16 CPUs, available memory 23.4 GiB.
Exact detached/tested SHA 73e8133cbe223a10c08e394b0bfeaadd5c6fb53d; brief SHA 73e8133cbe223a10c08e394b0bfeaadd5c6fb53d; head moved: False. Comparison base 26598df2c4c07d781e344ac6119953fed77ecb27; merge-base 26598df2c4c07d781e344ac6119953fed77ecb27. Workflow and setup-action authority are the files at this exact head. Bun test-runner 1.4.3 / runtime 1.4.4, scratch-installed binaries verified and first on PATH for their respective roles.

Environment: CI=true, private 0700 OPENCODEX_TEST_TRUSTED_FIXTURE_DIR=/home/lidgeai/ocx-linux-r2.uFsToH/trusted-fixtures. GIT_DIR, GIT_INDEX_FILE, GIT_WORK_TREE explicitly unset. Default scope/general, batch size ≤12, no parallel override; original 120s batch deadline, 15s kill grace, --timeout 60000 retained. Original planner/runner functions are unchanged except absolute script-directory anchors; the final loop continues after a failed batch without retrying it. Shared identical frozen installs/GUI build were executed once.

Selectors: ci=True, GUI=False, docs=False, structure=True. The requested direct structure check runs as well.

Shard Completed / selected batches Complete
1/4 64/64 True
2/4 58/58 True
3/4 62/62 True
4/4 65/65 True

Test-file coverage: 2600/2600 general files, no gaps/duplicates: True. Dedicated storage-policy/api-usage and GUI tests are separate below.

Command Bun Exit Pass / fail / skip
bun install --frozen-lockfile 1.4.3 0 N/A
cd gui && bun install --frozen-lockfile 1.4.3 0 N/A
cd gui && bun run build 1.4.3 0 N/A
bash /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-1.sh 1/4 (full-coverage continuation of scripts/ci/run-bun-test-batches.sh) 1.4.3 0 13490/0/21
bash /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-2.sh 2/4 (full-coverage continuation of scripts/ci/run-bun-test-batches.sh) 1.4.3 0 12590/0/52
bash /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-3.sh 3/4 (full-coverage continuation of scripts/ci/run-bun-test-batches.sh) 1.4.3 0 13685/0/89
bash /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-4.sh 4/4 (full-coverage continuation of scripts/ci/run-bun-test-batches.sh) 1.4.3 1 12549/0/11
bun x tsc --noEmit 1.4.3 0 N/A
bun x tsc --noEmit -p tests/tsconfig.doctor-service-memory-contract.json 1.4.3 0 N/A
bun x tsc --ignoreConfig --noEmit --strict --target ESNext --module ESNext --moduleResolution bundler --types bun-types --skipLibCheck scripts/ci/docker-smoke.ts 1.4.3 0 N/A
cd gui && bun test --isolate tests 1.4.3 0 3515/0/0
bun run privacy:scan 1.4.3 0 N/A
bun run skill:surface:check 1.4.3 0 N/A
bun build scripts/release.ts --target=bun --outdir=.tmp/ci-release-script-check 1.4.3 0 N/A
bun run src/cli/index.ts help 1.4.3 0 N/A
bun run structure:check 1.4.4 0 N/A
bun test --isolate ./tests/storage/api-storage-policy-already-running.test.ts ./tests/storage/api-storage-policy-mutation-busy.test.ts ./tests/storage/api-storage-policy-put-race.test.ts ./tests/storage/api-storage-policy-run.test.ts ./tests/storage/api-storage-policy.test.ts ./tests/storage/api-storage.test.ts 1.4.3 0 9/0/0
bun test --isolate ./tests/server/api-usage.test.ts 1.4.3 0 34/0/0

Every batch uses bun test --isolate --timeout 60000 <exact manifest files> under the unchanged process deadline:

Shard / batch Exit Pass Fail Skip
1/4, 1/64 0 267 0 0
1/4, 2/64 0 187 0 0
1/4, 3/64 0 323 0 0
1/4, 4/64 0 308 0 0
1/4, 5/64 0 373 0 0
1/4, 6/64 0 244 0 3
1/4, 7/64 0 214 0 0
1/4, 8/64 0 300 0 0
1/4, 9/64 0 342 0 0
1/4, 10/64 0 371 0 0
1/4, 11/64 0 64 0 0
1/4, 12/64 0 8 0 0
1/4, 13/64 0 274 0 2
1/4, 14/64 0 215 0 0
1/4, 15/64 0 162 0 0
1/4, 16/64 0 184 0 0
1/4, 17/64 0 634 0 0
1/4, 18/64 0 197 0 0
1/4, 19/64 0 319 0 0
1/4, 20/64 0 433 0 1
1/4, 21/64 0 245 0 0
1/4, 22/64 0 182 0 1
1/4, 23/64 0 23 0 0
1/4, 24/64 0 14 0 0
1/4, 25/64 0 24 0 0
1/4, 26/64 0 209 0 0
1/4, 27/64 0 220 0 0
1/4, 28/64 0 73 0 0
1/4, 29/64 0 106 0 0
1/4, 30/64 0 43 0 0
1/4, 31/64 0 53 0 0
1/4, 32/64 0 105 0 0
1/4, 33/64 0 226 0 6
1/4, 34/64 0 229 0 0
1/4, 35/64 0 210 0 0
1/4, 36/64 0 316 0 0
1/4, 37/64 0 200 0 0
1/4, 38/64 0 179 0 0
1/4, 39/64 0 342 0 0
1/4, 40/64 0 271 0 0
1/4, 41/64 0 360 0 0
1/4, 42/64 0 246 0 0
1/4, 43/64 0 185 0 0
1/4, 44/64 0 247 0 0
1/4, 45/64 0 177 0 0
1/4, 46/64 0 290 0 0
1/4, 47/64 0 271 0 0
1/4, 48/64 0 292 0 0
1/4, 49/64 0 241 0 0
1/4, 50/64 0 272 0 0
1/4, 51/64 0 335 0 0
1/4, 52/64 0 186 0 0
1/4, 53/64 0 221 0 0
1/4, 54/64 0 295 0 2
1/4, 55/64 0 188 0 0
1/4, 56/64 0 100 0 0
1/4, 57/64 0 61 0 0
1/4, 58/64 0 80 0 0
1/4, 59/64 0 5 0 0
1/4, 60/64 0 212 0 0
1/4, 61/64 0 186 0 0
1/4, 62/64 0 101 0 0
1/4, 63/64 0 111 0 0
1/4, 64/64 0 139 0 6
2/4, 1/58 0 297 0 0
2/4, 2/58 0 316 0 0
2/4, 3/58 0 239 0 0
2/4, 4/58 0 210 0 0
2/4, 5/58 0 214 0 0
2/4, 6/58 0 156 0 7
2/4, 7/58 0 217 0 0
2/4, 8/58 0 261 0 0
2/4, 9/58 0 237 0 1
2/4, 10/58 0 417 0 0
2/4, 11/58 0 292 0 0
2/4, 12/58 0 222 0 0
2/4, 13/58 0 244 0 2
2/4, 14/58 0 216 0 2
2/4, 15/58 0 165 0 0
2/4, 16/58 0 107 0 2
2/4, 17/58 0 15 0 0
2/4, 18/58 0 249 0 0
2/4, 19/58 0 503 0 3
2/4, 20/58 0 74 0 0
2/4, 21/58 0 92 0 0
2/4, 22/58 0 1 0 0
2/4, 23/58 0 17 0 0
2/4, 24/58 0 273 0 0
2/4, 25/58 0 332 0 1
2/4, 26/58 0 301 0 1
2/4, 27/58 0 231 0 1
2/4, 28/58 0 203 0 1
2/4, 29/58 0 211 0 0
2/4, 30/58 0 117 0 0
2/4, 31/58 0 88 0 0
2/4, 32/58 0 98 0 0
2/4, 33/58 0 282 0 0
2/4, 34/58 0 169 0 0
2/4, 35/58 0 130 0 0
2/4, 36/58 0 265 0 0
2/4, 37/58 0 234 0 0
2/4, 38/58 0 294 0 0
2/4, 39/58 0 227 0 0
2/4, 40/58 0 325 0 0
2/4, 41/58 0 160 0 0
2/4, 42/58 0 185 0 0
2/4, 43/58 0 406 0 0
2/4, 44/58 0 99 0 0
2/4, 45/58 0 269 0 0
2/4, 46/58 0 334 0 0
2/4, 47/58 0 232 0 0
2/4, 48/58 0 156 0 0
2/4, 49/58 0 188 0 0
2/4, 50/58 0 118 0 0
2/4, 51/58 0 147 0 0
2/4, 52/58 0 321 0 0
2/4, 53/58 0 238 0 0
2/4, 54/58 0 221 0 0
2/4, 55/58 0 245 0 2
2/4, 56/58 0 164 0 0
2/4, 57/58 0 240 0 0
2/4, 58/58 0 326 0 29
3/4, 1/62 0 233 0 0
3/4, 2/62 0 205 0 0
3/4, 3/62 0 322 0 0
3/4, 4/62 0 1 0 0
3/4, 5/62 0 168 0 0
3/4, 6/62 0 9 0 0
3/4, 7/62 0 249 0 0
3/4, 8/62 0 187 0 0
3/4, 9/62 0 278 0 0
3/4, 10/62 0 308 0 0
3/4, 11/62 0 188 0 2
3/4, 12/62 0 357 0 0
3/4, 13/62 0 220 0 0
3/4, 14/62 0 194 0 30
3/4, 15/62 0 200 0 4
3/4, 16/62 0 120 0 2
3/4, 17/62 0 191 0 0
3/4, 18/62 0 171 0 2
3/4, 19/62 0 250 0 9
3/4, 20/62 0 281 0 2
3/4, 21/62 0 442 0 0
3/4, 22/62 0 165 0 0
3/4, 23/62 0 81 0 23
3/4, 24/62 0 270 0 1
3/4, 25/62 0 335 0 0
3/4, 26/62 0 271 0 0
3/4, 27/62 0 187 0 0
3/4, 28/62 0 235 0 1
3/4, 29/62 0 162 0 0
3/4, 30/62 0 199 0 0
3/4, 31/62 0 223 0 0
3/4, 32/62 0 158 0 0
3/4, 33/62 0 240 0 0
3/4, 34/62 0 120 0 0
3/4, 35/62 0 18 0 0
3/4, 36/62 0 263 0 0
3/4, 37/62 0 264 0 0
3/4, 38/62 0 118 0 1
3/4, 39/62 0 314 0 0
3/4, 40/62 0 227 0 0
3/4, 41/62 0 290 0 0
3/4, 42/62 0 227 0 0
3/4, 43/62 0 552 0 0
3/4, 44/62 0 243 0 0
3/4, 45/62 0 314 0 0
3/4, 46/62 0 166 0 1
3/4, 47/62 0 504 0 0
3/4, 48/62 0 470 0 0
3/4, 49/62 0 326 0 2
3/4, 50/62 0 154 0 0
3/4, 51/62 0 148 0 0
3/4, 52/62 0 285 0 0
3/4, 53/62 0 109 0 0
3/4, 54/62 0 5 0 1
3/4, 55/62 0 55 0 0
3/4, 56/62 0 159 0 0
3/4, 57/62 0 153 0 0
3/4, 58/62 0 46 0 0
3/4, 59/62 0 188 0 0
3/4, 60/62 0 428 0 2
3/4, 61/62 0 108 0 0
3/4, 62/62 0 331 0 6
4/4, 1/65 0 207 0 0
4/4, 2/65 0 356 0 0
4/4, 3/65 0 245 0 0
4/4, 4/65 0 159 0 0
4/4, 5/65 0 261 0 0
4/4, 6/65 0 40 0 0
4/4, 7/65 0 43 0 0
4/4, 8/65 0 51 0 0
4/4, 9/65 0 196 0 0
4/4, 10/65 0 283 0 0
4/4, 11/65 0 169 0 0
4/4, 12/65 0 272 0 0
4/4, 13/65 0 414 0 2
4/4, 14/65 1 304 0 0
4/4, 15/65 0 364 0 0
4/4, 16/65 0 225 0 2
4/4, 17/65 0 223 0 0
4/4, 18/65 0 233 0 0
4/4, 19/65 0 106 0 0
4/4, 20/65 0 240 0 1
4/4, 21/65 0 330 0 0
4/4, 22/65 0 122 0 0
4/4, 23/65 0 373 0 1
4/4, 24/65 0 147 0 1
4/4, 25/65 0 19 0 0
4/4, 26/65 0 17 0 0
4/4, 27/65 0 326 0 1
4/4, 28/65 0 221 0 0
4/4, 29/65 0 172 0 0
4/4, 30/65 0 252 0 0
4/4, 31/65 0 111 0 0
4/4, 32/65 0 208 0 0
4/4, 33/65 0 159 0 0
4/4, 34/65 0 182 0 0
4/4, 35/65 0 336 0 0
4/4, 36/65 0 122 0 0
4/4, 37/65 0 334 0 0
4/4, 38/65 0 120 0 0
4/4, 39/65 0 179 0 0
4/4, 40/65 0 237 0 0
4/4, 41/65 0 203 0 0
4/4, 42/65 0 259 0 0
4/4, 43/65 0 242 0 0
4/4, 44/65 0 173 0 0
4/4, 45/65 0 224 0 0
4/4, 46/65 0 181 0 0
4/4, 47/65 0 141 0 0
4/4, 48/65 0 323 0 1
4/4, 49/65 0 289 0 0
4/4, 50/65 0 37 0 0
4/4, 51/65 0 26 0 0
4/4, 52/65 0 207 0 0
4/4, 53/65 0 283 0 0
4/4, 54/65 0 253 0 1
4/4, 55/65 0 333 0 0
4/4, 56/65 0 229 0 0
4/4, 57/65 0 22 0 0
4/4, 58/65 0 8 0 0
4/4, 59/65 0 164 0 0
4/4, 60/65 0 4 0 0
4/4, 61/65 0 115 0 0
4/4, 62/65 0 26 0 0
4/4, 63/65 0 232 0 0
4/4, 64/65 0 159 0 0
4/4, 65/65 0 58 0 1

Combined command counts: 55872 pass / 0 fail / 173 skip. Failed command/batch exits stay failed.

Failures:

  • BASE-IDENTICAL — test 4/4 batch 14/65, tests/cli/cli-models-reasoning.test.ts: test process exited nonzero with no failed assertions. Assertion signature no failed assertion; process-status comparison. Base exit 1, 304/0/0; bun test --isolate --timeout 60000 tests/cli/cli-json-input.test.ts tests/cli/cli-log-follow.test.ts tests/cli/cli-logout-runtime.test.ts tests/cli/cli-management-auth.test.ts tests/cli/cli-models-free-only.test.ts tests/cli/cli-models-price.test.ts tests/cli/cli-models-prompt-length-pricing.test.ts tests/cli/cli-models-reasoning.test.ts tests/cli/cli-provider-lifecycle-runtime.test.ts tests/cli/cli-provider-settings.test.ts tests/cli/cli-ready-subprocess.test.ts tests/cli/cli-resolve-subprocess.test.ts (Bun 1.4.3); log /home/lidgeai/ocx-linux-r2.uFsToH/base-evidence-26598df2c4-1.4.3/batch-d9f5026759072045.log. Exact failed batch and every file compared on base once. Individually reproduced with identical test-file bytes and case outcomes: ['tests/cli/cli-models-reasoning.test.ts']. Raw process failure remains failed.

Base command ledger (once per base/runtime/file or exact batch, cached across these PRs):

Command Bun Exit Pass / fail / skip
bun test --isolate --timeout 60000 tests/cli/cli-json-input.test.ts tests/cli/cli-log-follow.test.ts tests/cli/cli-logout-runtime.test.ts tests/cli/cli-management-auth.test.ts tests/cli/cli-models-free-only.test.ts tests/cli/cli-models-price.test.ts tests/cli/cli-models-prompt-length-pricing.test.ts tests/cli/cli-models-reasoning.test.ts tests/cli/cli-provider-lifecycle-runtime.test.ts tests/cli/cli-provider-settings.test.ts tests/cli/cli-ready-subprocess.test.ts tests/cli/cli-resolve-subprocess.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 1 304/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-json-input.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 49/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-log-follow.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 36/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-logout-runtime.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 37/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-management-auth.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 4/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-models-free-only.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 4/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-models-price.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 15/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-models-prompt-length-pricing.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 10/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-models-reasoning.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 1 18/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-provider-lifecycle-runtime.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 61/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-provider-settings.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 61/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-ready-subprocess.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 3/0/0
bun test --isolate --timeout 60000 ./tests/cli/cli-resolve-subprocess.test.ts (cwd /home/lidgeai/ocx-linux-r2.uFsToH/base-26598df2c4-1.4.3) 1.4.3 0 6/0/0

NOT RUN: gates/GUI lint: GUI selector false; gates/GUI build: GUI selector false; gates/Record dashboard preview source: GUI selector false; docs-site-build: docs selector false; GitHub Actions checkout/setup/upload-artifact infrastructure and other platform/job legs outside this assignment; checkout, Bun role setup and dependency artifacts are reproduced locally

Fresh final PR head 73e8133cbe223a10c08e394b0bfeaadd5c6fb53d; scratch HEAD 73e8133cbe223a10c08e394b0bfeaadd5c6fb53d; source status clean. No PR branch/source edits, pushes, approvals, or merges were performed. Scratch worktrees are removed after posting; evidence logs remain outside them.

Exact per-batch file lists, exits and logs: /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/batches.json; command ledger /home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/results.json; base comparisons /home/lidgeai/ocx-linux-r2.uFsToH/base-cache.json.

  • Manifest 1/4 SHA-256 16712891d7ce350ce702024fd75657bb77b4eaae94b34b59c2ebb8c13cce543b (/home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-1-manifest.tsv).
  • Manifest 2/4 SHA-256 d5d546123031baec24161223e6ef1c1ddfaed39214758163727815c8cdae5b4e (/home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-2-manifest.tsv).
  • Manifest 3/4 SHA-256 19e73657ad613ce34b3a18a8f0ac73a1926220a2721e37aa4ac8824963cedcb7 (/home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-3-manifest.tsv).
  • Manifest 4/4 SHA-256 b5504429c8103c80d7e192bbfe1ebccf828db9a4a16d586c88f9c5c03789cb62 (/home/lidgeai/ocx-linux-r2.uFsToH/evidence-7698-73e8133cbe/shard-4-manifest.tsv).

UTC: 2026-10-24T23:03:14.774395+00:00

@lidge-jun

Copy link
Copy Markdown
Owner Author

Integration evidence (owner lane M1, maintainer integration): independent gpt-6.1-sol review PASS at 73e8133. Exact-head PR CI run 40120616593 succeeded and exact-head ci.yml lane=all run 40120620564 (workflow_dispatch) succeeded.

Static merge simulation on current dev 26598df (this Mac): dev=26598df2c4c07d781e344ac6119953fed77ecb27 base=26598df2c4c07d781e344ac6119953fed77ecb27 pr_files= 3 overlap=[]; merge clean; install exit=0; gui install exit=0; tsc exit=0; tsc doctor exit=0; structure:check exit=0; privacy:scan exit=0; layout+ratchet guards exit=0 52 pass 0 fail ;

Merged by the triage manager as maintainer integration (MAINTAINERS.md, dev only) with green exact-head PR CI, an independent review PASS, and the owner's approval of this bundle.

@lidge-jun
lidge-jun merged commit d891cac into dev Oct 24, 2026
65 of 67 checks passed
@lidge-jun
lidge-jun deleted the lane/m1-pr-gate-labels branch October 24, 2026 23:43
@lidge-jun

Copy link
Copy Markdown
Owner Author

macOS real-machine CI-equivalent verification (round 2, owner lane mac3)

Result: PASS. Full macOS coverage. No INTRODUCED failures. One control-leg test failed once; it does not reproduce on this head or on dev (details below).

  • Host: Apple Mac16,9, macOS 26.6.2 (25G83), arm64, 16 cores, 64 GB. Command Line Tools only (no Xcode.app), Swift 6.4, rustc/cargo 1.99.0.
  • Exact head: 73e8133cbe223a10c08e394b0bfeaadd5c6fb53d (unchanged from the requested head; merge base and 0 behind dev 26598df2c4). Every leg used a fresh detached scratch worktree.
  • Bun: official bun-darwin-aarch64 release binaries pinned by this head: test runner testRunnerBun 1.4.3 (c6da4a4d3) for the four test legs, runtime dependencies.bun 1.4.4 (38afee6c8) for the widget leg.
  • Env: clean env -i (HOME/USER/TMPDIR/LANG/PATH only), CI=true RUNNER_OS=macOS, GNU coreutils timeout on PATH (as the workflow's "Setup bounded batch utilities" step adds), OPENCODEX_TEST_TRUSTED_FIXTURE_DIR set to a private 0700 scratch directory per leg, GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE unset. Test legs used the workflow env: BUN_TEST_FILE_SCOPE=all BUN_TEST_BATCH_SIZE=12 BUN_TEST_PARALLEL=1 BUN_TEST_BATCH_TIMEOUT_SECONDS=300 OCX_TEST_NO_QUEUE=1 OCX_TEST_FULL_SUITE=1.
  • Coverage: scripts/ci/run-bun-test-batches.sh ran from a copy whose only change turns the two in-loop exit "$status" lines into "record and continue" (plus an absolute scripts/ci path for its sourced helpers). Every batch ran, and the copy exits with the first failing status. Legs ran one at a time under a host lock after a pressure check.
  • Selector: this diff matches none of the native, setup_action, or remote_helper filters, so the macOS keyring, npm-global, setup-action, and remote-helper legs are not selected. macos widget + bundle runs on every non-PR event and is included.
Leg Command Exit Files Pass Fail Skip Time
macos 1/3 Install dependencies 0 1s
macos 1/3 Build GUI 0 8s
macos 1/3 TEST_SHARD=1/3 ... bash scripts/ci/run-bun-test-batches.sh 1/3 0 869/869 (90 batches) 16879 0 104 710s
macos 1/3 bun run src/cli/index.ts help 0
macos 2/3 Install dependencies 0 1s
macos 2/3 Build GUI 0 9s
macos 2/3 TEST_SHARD=2/3 ... bash scripts/ci/run-bun-test-batches.sh 2/3 0 869/869 (85 batches) 17757 0 24 680s
macos 2/3 bun run src/cli/index.ts help 0
macos 3/3 Install dependencies 0 2s
macos 3/3 Build GUI 0 7s
macos 3/3 TEST_SHARD=3/3 ... bash scripts/ci/run-bun-test-batches.sh 3/3 0 869/869 (81 batches) 17726 0 40 688s
macos 3/3 bun run src/cli/index.ts help 0
macos control (1/1) Install dependencies 0 2s
macos control (1/1) Build GUI 0 7s
macos control (1/1) TEST_SHARD=1/1 ... bash scripts/ci/run-bun-test-batches.sh 1/1 1 2607/2607 (254 batches) 52361 1 168 2164s
macos control (1/1) bun run src/cli/index.ts help 0
macos widget + bundle Install dependencies 0 1s
macos widget + bundle Test MenuBarCore 1 MenuBarCoreTests 123 passed, 0 failed; NativeTrayTests did not compile 35s
macos widget + bundle Build dashboard 0 8s
macos widget + bundle Prepare desktop sidecar 0 1s
macos widget + bundle Build WidgetKit appex 0 91s
macos widget + bundle Build unsigned desktop app 1 35s
macos widget + bundle Verify WidgetKit appex and desktop app 1 0s

The shard legs cover 869 + 869 + 869 = 2607 files, which equals the control's membership.

Failures and classification

  1. macos control batch 164/254 (12 files under tests/responses/chat-*): tests/responses/chat-native-reasoning-replay.test.ts, #7118 native Chat thinking continuation > an explicit preserve opt-out leaves missing native history unchanged, expected status 400 but received 404 (:182).

    Classification: NOT REPRODUCED (timing or port flake), not INTRODUCED and not BASE-IDENTICAL. On dev 26598df2c4 with the same runtime and env, the file passes alone (14 pass/0 fail) and the exact 12-file batch passes (160/0). On this head the file passed in its shard leg, passes alone (14/0), and the exact 12-file batch rerun passes (160/0). This PR changes only .github/workflows/enforce-pr-target.yml, a structure doc, and tests/ci-workflows/ci-workflows.test.ts; it touches no runtime code.

  2. macos widget + bundle: Test MenuBarCore exit 1 (MenuBarCoreTests 123 passed, 0 failed; NativeTrayTests failed to compile: external macro implementation type 'SwiftUIMacros.StateMacro' could not be found, app/Sources/NativeTray/AccountSwitch.swift:32). Build unsigned desktop app exit 1 from the same NativeTray Swift compile in build.rs. Verify WidgetKit appex and desktop app exit 1 because no app bundle was produced. Classification: BASE-IDENTICAL. dev 26598df2c4 fails the same three steps with the same SwiftUIMacros root cause. This host has Command Line Tools without Xcode, so the SwiftUI macro plugin is unavailable, and this PR does not touch app/ or desktop/. Build WidgetKit appex passed.

NOT RUN: macOS keyring, npm-global, setup-action, and remote-helper legs (not selected for this diff). A signed or Xcode-backed widget build is not possible on this host.

No changes, pushes, approvals, or merges were made.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant