Skip to content

Validate verdict v2 (v0.22.0) on real production sync PRs — nothing has run through the Actions path yet #147

Description

@mmcky

v0.22.0 shipped reviewer verdict v2 (#144) and @v0 has moved, so every edition now runs it. The released artifact was smoke-tested by driving the built bundle against a harness PR — it emitted a complete 17-field block with engineVersion: 0.22.0but nothing has yet run through the real GitHub Actions path, because no edition had an open translation PR at release time.

A local bundle run cannot exercise the things most likely to break in production: @v0 resolution inside a workflow, the deployed workflow config and its label filter, the estate's secrets, or comment rendering as GitHub actually displays it. This issue is the reminder to close that gap once real PRs exist, and to analyse the first batch rather than glancing at one.

This program has now been caught twice by treating one step as implying the next — #131's fix was released but silently skipped review on every CLI resync PR for days, and the v0.22.0 release PR merged without anyone cutting the tag. Shipped is not the same as working.

What will produce the first real PRs

Sync runs in the source repo when a PR merges there. Currently wired:

Source repo Editions it syncs to
lecture-python-programming zh-cn, fa, fr
lecture-python-intro zh-cn
lecture-python.myst none yet — myst#979 still open

So the first organic verdict-v2 review will come from a merge into lecture-python-programming or lecture-python-intro. CLI resync PRs (translate forward --github) are a second, distinct shape worth covering — see below.

What to check on the first real sync PR

The review ran at all. The job triggers, is not skipped, and posts a comment. This is the #131 failure mode: a label filter that does not match means the workflow completes green having done nothing.

The block is present and parseable. A translation-review-verdict HTML comment at the end of the review comment, valid JSON, all 17 fields, schemaVersion: 1.

engineVersion reads 0.22.0, not unknown. If it reads unknown the ESM resolution path is being taken — getEngineVersion() relies on __dirname, which does not exist under "type": "module". Harmless to the gate but it degrades a contract field, and src/cli/translate-state.ts's getToolVersion() already has ESM-safe fallbacks to copy.

reviewedHeadSha equals the PR head. The whole supersession design rests on this binding.

autoMergeMode is off and wouldAutoMerge is absent. No edition has opted into shadow yet; if the field appears, something is enabling it unintentionally.

The comment renders cleanly. Findings are now rendered from structured objects with severity and category labels instead of prose strings — this is the first time real model output flows through that rendering path in production.

What to analyse across the first batch (~10 PRs)

Beyond "it works", the first batch is the earliest real data on the question Stage 4 exists to answer:

  • What fraction would qualify for auto-merge, and what gates the rest? Collect recommendation and recommendationReasons across the batch. All six harness runs recommended editor, and an auditor argued the gate may approximately never fire, because the prompt defines minor as "correct but awkward" while a minor finding in accuracy or terminology gates absolutely. If the eligible rate is near zero, the fix is to sharpen the prompt's severity definitions — not to lower the floors, which are provisional placeholders rather than policy.
  • Are the findings well-formed in practice? How often does findingsMalformed gate, how often is file attributed on multi-file PRs, and do severities look consistently applied.
  • Do the diff checks behave? headingMapCorrect failed on most harness fixtures, but those carry a legacy heading-map key — production editions should not, so a high failure rate there would indicate something real.
  • Comment size. Observed 4.8–7.2 KB on the harness against GitHub's 65,536-char cap; worth confirming production stays well clear.

Also still unproven: the #131 path

Separately from verdict v2, the #131 fix shipped in v0.21.0 and no CLI resync PR has been opened anywhere in the fleet since, so "resync PRs receive AI review" remains unobserved in production. The next resync wave is its first real test. Worth checking in the same pass, since a resync PR also exercises the reviewer's getSourceAtCommit path rather than the source-PR-diff path.

Done when

A handful of real sync PRs (and at least one CLI resync PR) have been inspected against the checklist above, the results recorded on QuantEcon/project-translation#15, and either the shadow rollout proceeds or a prompt/severity adjustment is raised off the back of the numbers.


Context: program plan and Stage 1 delivery notes in QuantEcon/project-translation (PROJECT-PLAN-HUMAN-REVIEWS.md); handover QuantEcon/project-translation#16; contract spec docs/user/metadata-contract.md.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions