Skip to content

Build-off screen in the desktop app (M3) - #78

Draft
flxkm522 wants to merge 5 commits into
feature/quality-labfrom
feature/buildoff-screen
Draft

flxkm522 wants to merge 5 commits into
feature/quality-labfrom
feature/buildoff-screen

Conversation

@flxkm522

Copy link
Copy Markdown

Stack: #75 (shell) → #76 (contest engine) → #77 (Quality Lab) → this (M3, build-off screen). Base is feature/quality-lab; retarget to develop as the stack merges.

What

The blind build-off is now the first tab of every project in Redrob Code Desktop.

  • Task → lanes → verdict. Builders from rival vendors work in live lanes (Candidate A/B/C, names hidden). The verdict says whether the winner meets the repo's standard and shows the three gates (Correctness, Quality, Consensus) and the who-beat-whom matrix.
  • Preview runs a candidate's ref in a scratch worktree with the repo's own dev script, before choosing.
  • Reveal on choice. Models are named only after a candidate is chosen. "Create a branch" commits it with Redrob-Model / Redrob-Provider / Redrob-Contest trailers.
  • Cancel stops every builder and reviewer session and records the contest as cancelled.
  • en and ko.

How

  • packages/contest: AbortSignal support, startPreview, candidateDiff, history. Models from unconnected integrations or disabled providers no longer take builder slots. The consensus gate fails when fewer than two contenders are left, so a one-model "build-off" can't pass.
  • apps/desktop: the main process hosts the contest library against the engine it already runs (src/main/buildoff.ts) and streams progress over the bridge. There are no new engine routes; the /contest HTTP surface stays deferred until Cowork or a remote runtime needs one.
  • apps/studio: views/BuildOff.tsx, lib/buildoff.ts, tests.

Verification

  • apps/desktop/e2e/buildoff.mjs uses Playwright to drive a whole blind build-off through the packaged app's window. It runs with scripted vendors and the bundled engine, with no key and no network. Locally: 10/10. It checks that names stay hidden before choosing, that the judges' choice is the correct candidate, that applying creates a branch, and that the commit records the model.
  • CI: a new step in desktop (linux) runs it under xvfb-run and uploads buildoff-screenshots.
  • bun turbo typecheck 21/21; contest 27/27; desktop 24/24; studio 6/6; bun install --frozen-lockfile clean.

Not verified

  • Real models: there is no Console key in this environment. The e2e uses scripted vendors.

…reen

runContest takes an AbortSignal and records a cancelled contest; startPreview runs a candidate's ref in a
scratch worktree; candidateDiff and history read back what the app shows. Models from unconnected
integrations or disabled providers no longer take builder slots, and the consensus gate fails with fewer
than two contenders.
The main process runs the contest library against the engine it already started and streams progress to
the interface over the bridge (start, cancel, choose, apply, preview, diff, history).
The first tab of a project: task, live lanes, verdict against the repo's standard, gates, who-beat-whom
matrix, preview, and names revealed only after choosing. en and ko.
Playwright against the unpacked Linux build under xvfb-run, with scripted vendors and the bundled engine.
CI uploads the screenshots.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants