Skip to content

Design: route sync PRs by review verdict (auto-merge vs editor label) and make human review measurable #103

Description

@mmcky

Context

The translation dashboard (status-translations) carried a "Human review" column that counted open issues labelled translation-review in each edition repo. We removed it on 2026-07-18 because it measured whether anyone had seeded labels, not whether review was happening: programming.fa rendered "—" (no labelled issues) while still needing widespread native review, and programming.zh-cn's "24 open" was a fixed April backlog with no burn-down signal. This issue is the design discussion for collecting a metric worth showing, and it lands here because the mechanisms below live in the engine.

Today's flow: sync opens a PR → review-translations.yml posts a PASS/WARN/FAIL quality report as a comment → a human merges. The verdict is purely advisory, and nothing in the pipeline records whether a human ever looked at the content.

Proposal A — route sync PRs by review verdict

Make the reviewer a gatekeeper instead of a commentator. On each auto-sync PR, the review classifies quality and the workflow acts on it:

  • High quality → auto-merge (or auto-approve, leaving merge to branch protection), with the verdict recorded in the PR.
  • Below threshold → apply an editor label and request human review.

The dashboard then counts open/closed editor-labelled PRs per edition — a live measure of human-review demand and burn-down exactly where the pipeline judged a human necessary, rather than a hand-seeded issue count.

Prerequisites and open questions:

  • Verdict reliability is the gate for auto-merge. Review mode: missing criterion score from the model yields Overall NaN/10 and an automatic FAIL verdict #102 (a missing criterion score from the model becomes Overall NaN/10 → automatic FAIL) shows the verdict path needs schema validation and retries before any merge decision can hang off it. A false FAIL wastes an editor's time; a false PASS auto-merges a bad translation.
  • Threshold policy: is PASS + zero syntax errors sufficient, or should auto-merge require a stricter bar (e.g. score ≥ 9 and no suggestions touching changed lines)?
  • Interaction with required checks and with the rebase workflow when several syncs queue on one file (we hit exactly this across zh-cn/fa/fr this week — sequential source PRs touching the same lines, where the newer sync superseded the older).
  • Provenance: auto-merged PRs should carry a clear marker (label such as auto-merged, plus the verdict in the merge commit or PR body) so a human can always audit what the machine merged.

Proposal B — labelled human audits of the existing corpus

Verdict routing only measures review of incoming changes. For the standing corpus, track deliberate human audits as issues with a dedicated label (one issue per lecture per campaign — the shape zh-cn's #25#48 already have, formalised): a human-audit (or the existing translation-review) label that dashboards can filter on for coverage and burn-down per edition. Audit outcomes (error classes found: terminology drift, meaning inversion as in lecture-python-programming.fa#106, typography) feed back into glossary and prompt improvements — the audit label becomes the collection point for pipeline-quality data, not just a progress bar.

How they compose

A measures flow (are humans reviewing what the machine flags?); B measures stock (how much of the corpus has a human actually audited?). Both produce label-based signals a collector can read cheaply, and both should be specified in the public metadata/reporting contract (#66) rather than scraped ad hoc.

Origin: program discussion in QuantEcon/project-translation, 2026-07-18, following the sync-PR review pass across the three programming editions.

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

    discussOpen-ended team deliberation or a decision to be made

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions