Skip to content

fix(source-control): keep distinct CI checks with overlapping names - #19162

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
Lucenx9:fix/check-workflow-key-collisions
Oct 14, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
Lucenx9:fix/check-workflow-key-collisions

Conversation

@Lucenx9

@Lucenx9 Lucenx9 commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

Problem

Two unrelated CI checks disappear into one when their workflow and job names produce the same space-separated string. For example, Build / Linux tests and Build Linux / tests both use the key Build Linux tests, so the newer result overwrites the other check, even if it failed.

Change

Serialize the workflow and job names as a pair for the deduplication key. Distinct pairs remain separate, while reruns of the same pair still replace their earlier result in place. The existing null/empty workflow handling is preserved.

Scope and approval

This is a very small, focused fix for an obvious collision in the existing check deduplicator, eligible under the exception in CONTRIBUTING.md. It changes one implementation line and adds one regression test. The GitHub, Forgejo, and Bitbucket callers use the same helper; their contracts and UI need no changes. Searches of open and closed issues/PRs found no duplicate. #12274 concerns check ordering, and #17207 concerns concurrent runs of the same check pair.

Verification

  • Reproduced the loss by passing the two pairs above to the real helper: one check was returned before the fix; both checks, including the failure, are returned after it.
  • Added the regression before changing the implementation and observed it fail because the second check was missing. It now verifies both pairs survive and a rerun replaces only its own pair without changing their order.
  • vp test run packages/source-control-core/src/server/pullRequestChecks.test.ts packages/source-control-github/src/server/gitHubPullRequestJson.test.ts --maxWorkers=1: 100 tests passed in 1.31 seconds.
  • Targeted lint and formatting passed for both changed files. tsc-rs --noEmit passed with a temporary config including only those files and extending the package config.
  • Fallow 3.33.1 review scoped to the source-control-core server directory reported low risk, with no new exports, dependencies, or boundary crossings.

No live hosting API or UI verification was performed; this is a backend normalization fix exercised with deterministic inputs.

Reviewed before submission by Gemini 3.8 Flash High via Antigravity in T3 Code: APPROVE, no actionable findings.

Implemented with GPT-6.1 Sol via the Codex harness in T3 Code; reviewed with Gemini 3.8 Flash High via the Antigravity harness.

Copilot AI balanced review requested due to automatic review settings October 13, 2026 21:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 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-13T21:46:36.787301Z fcff60d 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.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 13, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at fcff60d

Macroscope's review found this PR approvable — This is a focused backend bug fix that replaces an ambiguous check-deduplication key with an unambiguous workflow/name pair and adds a targeted regression test. Its runtime impact is limited to retaining distinct CI checks that previously collided, with existing rerun behavior preserved.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 13, 2026

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 27e0b2f9-8f57-4598-811f-a3374e891d6f
📥 Commits

Reviewing files that changed from the base of the PR and between a01c48f and fcff60d.

📒 Files selected for processing: 2
  • packages/source-control-core/src/server/pullRequestChecks.test.ts
  • packages/source-control-core/src/server/pullRequestChecks.ts

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

📝 Walkthrough

dedupeChecks now uses a JSON-encoded workflow and check name pair as its grouping key. A regression test verifies that distinct pairs with colliding joined names remain separate, while a later run replaces the earlier result for the same pair.

Changes: Pull request check deduplication

Layer / File(s) Summary
Pair key and regression test
packages/source-control-core/src/server/pullRequestChecks.ts, packages/source-control-core/src/server/pullRequestChecks.test.ts
dedupeChecks encodes the workflow and check names as a tuple. The regression test verifies that distinct pairs remain separate and that a later run replaces the earlier result for the same pair without changing its position.

Priority: ⬇️ Low

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

Change: Bug fix

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to fcff6

This change addresses the reported check-name collision, and the supplied regression-test summary covers distinct colliding pairs and reruns. No material merge risk is evident.

### Architecture Summary

Architecture risk: 🔵 Low · up to fcff6

The change affects 1 system.

Changed systems: packages/source-control-core

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — packages/source-control-core (library) was modified; 2 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in packages/source-control-core/src/server/pullRequestChecks.test.ts: Adds a regression test for distinct workflow/check pairs whose joined names collide; the later run for the same pair supplies the retained status while the other pair remains in its original position.
  • observed — Modified behavior in packages/source-control-core/src/server/pullRequestChecks.ts: dedupeChecks now encodes the workflow name and check name as a JSON tuple for its grouping key, replacing space-delimited concatenation.
Pre-merge checks: Passed 4
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main fix: preventing distinct CI checks with overlapping names from being merged.
Description check Passed The description covers the problem, change, scope justification, regression test, verification commands, observed results, and limitations. It also explains why the focused fix qualifies without prior…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@maria-rcks
maria-rcks merged commit 5e5c52b into pingdotgg:main Oct 14, 2026
30 checks passed
aorwall added a commit to aorwall/t3code that referenced this pull request Oct 14, 2026
Merges `pingdotgg/t3code` up to `6002c5c68c` (42 commits, base
`5070a83a32`), using a merge commit. No open merge PR to stack on; this
branches from `main` at `882bb0a638`.

## Resolution

- **`package.json`** (conflict): dropped upstream's `tsc-rs` 0.6.0 bump
(pingdotgg#19187). The fork removed `tsc-rs`, and the `tsc-rs` tripwire holds
that. New path-policy entry: `root-package-json` (`decide`).
- **`pnpm-lock.yaml`** (conflict, `theirs`): took upstream's copy. Its
seven `tsc-rs@0.6.0` entries fail `minimumReleaseAge` before resolution
can prune them, so I stripped them and let `install.mjs` re-derive the
rest. The fork edges (`moatless-api`, `mermaid`) are back, and `verify
--only lockfile` passes.
- 14 other files that both sides touched merged without conflict.
`duplicate-adds` and `resolution-check` are both clean.
`FilePreviewPanel.tsx` (`decide`) took upstream's `threadRef` prop and
kept both fork deltas. The two unlisted files now have `converged`
entries: `terminal-drawer-open-in-editor` and `thread-shell-subtasks`.
In `threadShell.ts`, upstream's `isChildRunLive` and the fork's listing
filter merged together correctly.
- File counts: 136 files landed, against 136 in the upstream range. The
only differences are `package.json` (missing, because its one upstream
change was the dropped bump) and `docs/fork/inventory.json` (extra,
fork-only). The fork delta is 809 files.
- **Script fix:** Moatless replaced its dispatch match arms with a
`MethodTable` (moatless#1138). Because of that,
`unsupported-methods.mjs` found no arms and exited 2. It now reads
`.detached`/`.session`/`.stream` registrations and follows handlers
passed by name. Result: ADD 0, DROP 0, KEEP 2 (`vcs.switchRef`,
`git.preparePullRequestThread`), which matches `gaps.md`.

## Verification

`verify.mjs`: these checks pass: duplicate-adds, tripwires,
resolution-check, unsupported-methods (after the fix), lockfile, fmt,
lint, typecheck, build. `test` fails. Each of the failing files also
failed when run alone, and they are the same five files as in the
2026-10-13 merge, all caused by the sandbox: shared `AgentScope`, server
`ServerBrowserPage` (no Playwright browser), `AcpAdapterV2`,
`OrchestratorReplayFixtures`, and `OpenCodeServerLedger`.

## Usable as-is

- Full-screen visual replies with zoom (pingdotgg#17561). Links inside HTML
renders open the way chat links do (pingdotgg#18897). App shortcuts keep working
after you click into an HTML render (pingdotgg#18898).
- Touch-scrolling in terminal output (pingdotgg#11305). Fixed: answering a
question reset the editor caret (pingdotgg#11337). Links in agent questions are
now clickable (pingdotgg#19197).
- Fixed: "Subagent needs input" stayed after the subagent finished
(pingdotgg#18996). This is client-side and uses `activityRunStatus` with a
fallback to `status`.
- Slash skill search now works mid-message (pingdotgg#19107). Fixed: removing a
project opened a new thread for it (pingdotgg#15864). Settings now warn when an
environment silently drops a setting (pingdotgg#18334).
- Smaller fixes: context handoff details use the available width
(pingdotgg#19098), pace icon alignment (pingdotgg#18580), tool-call collection perf
(pingdotgg#18853), git file paths keep whitespace in the contract schema
(pingdotgg#12465), Android beta links (pingdotgg#18955).
- Pending context-handoff preview when you pick a model (pingdotgg#18369). It is
computed on the client from `server.providers`
(`requiresNewThreadForModelChange`, `continuation.groupKey`). If
Moatless does not report those fields, the preview shows a handoff on
every provider switch.

## Unsupported in Moatless / needs implementation

- Delegated tasks in separate worktrees (pingdotgg#19102): `isolation:
"worktree"` on the orchestrator MCP `delegate_task`, and
`workspaceStrategy` on the child-launch command. Moatless does not
create worktrees (`FEATURES.worktreeSelection`).
- These land behind flags that are already gated: scheduled-task dialog
fix (pingdotgg#18940, `scheduledTasks`), PR merge/auto-merge button sizing
(pingdotgg#18478, pingdotgg#19111, `pullRequestSurface`), remembering editor selections
(pingdotgg#19078, `openInEditor`), device tool startup failures (pingdotgg#18502,
`deviceHub`), npm "update everything" (pingdotgg#18709, `serverUpdateBanner`),
clone folder names in the welcome wizard (pingdotgg#12474), Cmd+Enter
create-project in the palette (pingdotgg#18901).
- No new RPC methods (ADD 0).

## Backend behavior to consider reproducing in Moatless

I added these to the "Runtime fixes upstream made to its own server"
entry in `docs/fork/gaps.md`:
- Worktree isolation for delegated tasks (pingdotgg#19102).
- Snoozed threads still take queued automatic wakes (pingdotgg#19099).
- Indexed failed-thread error lookup (pingdotgg#18628).
- SQLite: no fsync on every commit, and planner stats collected on open
(pingdotgg#19205, pingdotgg#18471).
- Distinct CI checks with overlapping names (pingdotgg#19162).
- Bitbucket short-hash heads in review guides (pingdotgg#18900).
- Webhook template backtracking (pingdotgg#19160).
- OpenCode timeout formatting (pingdotgg#12469).
- Pi tool schemas and turn-start queueing (pingdotgg#18643, pingdotgg#18639).
- Usage hubs without a host, and Antigravity accounts deduplicated
(pingdotgg#11368, pingdotgg#19207).
- Haiku 5.5 as the default for background text generation (pingdotgg#18781).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/db18f6dc-70c1-4d89-ada7-cd4b4f19a247
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 14, 2026
## What's Changed
* fix(claude): default background text generation to haiku 5.5 by @maria-rcks in pingdotgg/t3code#18781
* chore(typecheck): bump tsc-rs to 0.6.0 by @t3dotgg in pingdotgg/t3code#19187
* fix(server): keep OpenCode timeouts from crashing the error formatter by @tachytelicdetonation in pingdotgg/t3code#12469
* feat(server): run delegated tasks in separate worktrees by @Bil0000 in pingdotgg/t3code#19102
* fix(git): preserve whitespace in file paths (#12464) by @Defmon3 in pingdotgg/t3code#12465
* fix(server): stop fsyncing SQLite on every commit so slow disks no longer drop clients by @t3dotgg in pingdotgg/t3code#19205
* fix(chat): make links in agent questions clickable by @t3dotgg in pingdotgg/t3code#19197
* fix(usage): show one Antigravity account once, not once per machine by @t3dotgg in pingdotgg/t3code#19207
* fix(web): Android beta links point to the APK release, not the banned Google group by @shivamhwp in pingdotgg/t3code#18955
* fix(client): "Subagent needs input" no longer sticks after the subagent finishes by @shivamhwp in pingdotgg/t3code#18996
* fix(web): stop question answers from resetting the editor caret by @shivamhwp in pingdotgg/t3code#11337
* fix(web): app shortcuts keep working after clicking into an HTML render by @maria-rcks in pingdotgg/t3code#18898
* fix(source-control): keep distinct CI checks with overlapping names by @Lucenx9 in pingdotgg/t3code#19162
* fix(server): avoid excessive backtracking in webhook templates by @Lucenx9 in pingdotgg/t3code#19160
* fix(web): auto-merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#19111
* fix(web): scroll terminal output with touch gestures by @shivamhwp in pingdotgg/t3code#11305
* feat(web): view visual replies full screen with zoom by @Bil0000 in pingdotgg/t3code#17561
* fix(web): removing a project no longer opens a new thread for it by @shivamhwp in pingdotgg/t3code#15864
* fix(server): usage hubs with a host-less URL no longer vanish from Limits by @shivamhwp in pingdotgg/t3code#11368
* fix(mobile): search bar animates in on iOS 26+ instead of popping by @juliusmarminge in pingdotgg/t3code#19209

## New Contributors
* @Defmon3 made their first contribution in pingdotgg/t3code#12465

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3080...v0.0.46-nightly.20261014.3093

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261014.3093
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 14, 2026
## What's Changed
* fix(claude): default background text generation to haiku 5.5 by @maria-rcks in pingdotgg/t3code#18781
* chore(typecheck): bump tsc-rs to 0.6.0 by @t3dotgg in pingdotgg/t3code#19187
* fix(server): keep OpenCode timeouts from crashing the error formatter by @tachytelicdetonation in pingdotgg/t3code#12469
* feat(server): run delegated tasks in separate worktrees by @Bil0000 in pingdotgg/t3code#19102
* fix(git): preserve whitespace in file paths (#12464) by @Defmon3 in pingdotgg/t3code#12465
* fix(server): stop fsyncing SQLite on every commit so slow disks no longer drop clients by @t3dotgg in pingdotgg/t3code#19205
* fix(chat): make links in agent questions clickable by @t3dotgg in pingdotgg/t3code#19197
* fix(usage): show one Antigravity account once, not once per machine by @t3dotgg in pingdotgg/t3code#19207
* fix(web): Android beta links point to the APK release, not the banned Google group by @shivamhwp in pingdotgg/t3code#18955
* fix(client): "Subagent needs input" no longer sticks after the subagent finishes by @shivamhwp in pingdotgg/t3code#18996
* fix(web): stop question answers from resetting the editor caret by @shivamhwp in pingdotgg/t3code#11337
* fix(web): app shortcuts keep working after clicking into an HTML render by @maria-rcks in pingdotgg/t3code#18898
* fix(source-control): keep distinct CI checks with overlapping names by @Lucenx9 in pingdotgg/t3code#19162
* fix(server): avoid excessive backtracking in webhook templates by @Lucenx9 in pingdotgg/t3code#19160
* fix(web): auto-merge button fits its label and animates width changes by @flamboh in pingdotgg/t3code#19111
* fix(web): scroll terminal output with touch gestures by @shivamhwp in pingdotgg/t3code#11305
* feat(web): view visual replies full screen with zoom by @Bil0000 in pingdotgg/t3code#17561
* fix(web): removing a project no longer opens a new thread for it by @shivamhwp in pingdotgg/t3code#15864
* fix(server): usage hubs with a host-less URL no longer vanish from Limits by @shivamhwp in pingdotgg/t3code#11368
* fix(mobile): search bar animates in on iOS 26+ instead of popping by @juliusmarminge in pingdotgg/t3code#19209

## New Contributors
* @Defmon3 made their first contribution in pingdotgg/t3code#12465

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3080...v0.0.46-nightly.20261014.3093

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261014.3093
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants