Skip to content

Add the blind pairwise review page to the Console - #1946

Merged
JacobStephens2 merged 4 commits into
issue-1872from
issue-1885
Nov 10, 2026
Merged

JacobStephens2 merged 4 commits into
issue-1872from
issue-1885

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Summary

Each pair of Trials with retained evidence gets a blind page in the Console, with a CLI twin. People's calls are reported beside the Verdict.

GET  /experiments/<id>/pairs/<pair>               experiments <id> --pair <pair>
       Ticket · numbered acceptance checklist
       Change A | Change B   (code before tests, then evidence; sides drawn from the Bar's seed)
       no Arm, build, Harness, Model or model call
POST .../merge        a=ready|not-ready b=…        --merge <a> <b>          sealed until the preference
POST .../preference   preference=a|b|tie|both-bad  --prefer <p> [--rubric <criterion>=<p>]...
       → revealed: Arm and Setup per side, the Grader panel's calls, every reader's calls
 pairs::run
   Evidence::side
+    diff(own commit vs base)        # kept: Trial repositories are removed after completion
 reading::Observation
   pairs
+  people = pairwise::people(reviews/<pair>/<n>.json, pairs, seed)
+           # Arm-terms reviews, `blind`, people–panel agreement
 Experiment page
   Verdict
+  People's calls (links to blind pairs, calls table, agreement)
  • Records: append-only files reviews/<pair-id>/<n>.json, attributed with the shared Actor (Console signed-in reader, or the Unix user on the CLI).
  • Merge calls: a second merge call before the preference is refused. A review begun after the reader's own reveal is kept, but marked blind: false and left out of agreement.
  • Result format 10 adds PairSide.diff, optional Pair.panel, people, and the documented PairPage that --pair --json emits.

Closes #1885

Evidence

Execution evidence

  • Before: with the merge-call guard missing, cargo test --test console pairwise::sealed_merge_calls_cannot_be_replaced_or_remade_after_the_reveal (the Spec reviewer's test) failed:
    panicked at tests/console/pairwise.rs:453:5:
    assertion `left == right` failed
      left: 200
     right: 422
    test result: FAILED. 0 passed; 1 failed
    
    After: cargo test --test console pairwise → test result: ok. 5 passed; 0 failed
  • cargo test --test experiments pairs::each_arms_new_tests_run_on_the_base_and_the_other_arms_commit → ok. It covers the real diff capture, plus CLI calls checked against the documented PairPage and Experiment contract.
  • scripts/affected-tests origin/issue-1872 on f3aa5f7:
    • npm test --prefix site: PASS
    • npm test --prefix console: PASS, 171 tests
    • cargo test: PASS, 4082 passed, 0 failed, 866s
  • The first affected run's Console browser tests failed only because console/node_modules was not installed (Cannot find module 'playwright'). They pass after npm ci --prefix console.

Visual evidence

Blind pair page, 1440×900, before any call. Before: the base Console has no such route and serves an empty 404.

Before
After

Blind pair page, 390×844, before any call. The two changes stack on narrow screens.

Before
After

Experiment page, 1440×900, after one CLI review. People's calls appear beside the Verdict.

Before
After

Review

Reviewed with thirdshift-code-review against refs/remotes/origin/issue-1872: Standards found 10 findings, Spec found 7.

Addressed:

  • P1: sealed merge calls are now refused before the preference.
  • P2: a review begun after the reveal is marked not blind and kept out of agreement.
  • P7/S3: the drift check now reaches people, panel and PairPage; --pair JSON and the record files are documented.
  • S4: one list of preference values and one next-step command.
  • S5: the changed-path listing is shared.
  • S6: the Ticket input is read by ISSUE_FILE and must be a file.
  • S7: one module path.
  • S8: one reveal line for the CLI and the page.
  • S9: the pages test reads the format number from the contract.
  • S10: the workflow page describes the blind page.

Review coverage: both reviewers read every changed file except site/docs/index.html. That file is generated from docs/guide.md; it was excluded with npm run docs:check --prefix site passing, and was left unread by both axes. The review covered commits 934eb93 and bdfabac. The fix commit f3aa5f7 was not re-reviewed.

Unaddressed findings

Standards

Spec

Security review outcome

No unaddressed introduced findings.

Merge Danger

Door: two-way

This is a new page, new routes and new private files under each Experiment. Result format 10 is additive. Older retained pairs read with an empty diff and no panel.

Blast Radius: Experiments

Only Experiment JSON consumers see the format bump. The Console's other pages are untouched apart from the new section on the Experiment page.

🤖 Generated with Claude Code

Built with claude 2.1.314 · opus · default effort

Each pair with evidence gets a blind page and a CLI twin: the Ticket, its
numbered acceptance checklist, both changes side by side with code before
tests, and their evidence, on sides drawn per pair from the Bar's seed.
A reader seals a merge call per side before a preference and optional
rubric; records are append-only and attributed. Arm identity and the
panel's calls are revealed after the preference. People's calls and
people-panel agreement show beside the Verdict (result format 10).
Seal a reader's merge calls until their preference, and mark a review begun
after the reader's reveal as not blind, keeping it out of people-panel
agreement. Document the --pair JSON and review records and check them, with
people's calls and panel calls, against the result contract. Share the
preference values, next-step command, reveal line and changed-path listing;
read the Ticket input by its shared name and require a file. Describe the
blind page on the workflow page and read its format number from the contract.
@JacobStephens2
JacobStephens2 merged commit dc84fec into issue-1872 Nov 10, 2026
16 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-1885 branch November 10, 2026 13:52
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.

1 participant