← Về thư mục
📄 / / academic-research-skills / docs / design / 2026-07-12-518-cross-model-gate-hardening-spec.md

Cross-model gate hardening (#518)

Issue: #518 — risk-stratified sampling, blind disagreement checkpoints, capability allowlist, gpt-5.6-sol promotion bakeoff Date: 2026-07-12 Files touched: shared/cross_model_verification.md, academic-pipeline/agents/integrity_verification_agent.md, deep-research/agents/research_architect_agent.md + its byte-identical plugin mirror agents/research_architect_agent.md, academic-paper-reviewer/agents/editorial_synthesizer_agent.md, docs/SETUP.md + docs/SETUP.zh-TW.md (feature table), .claude/CLAUDE.md, shared/raise_framework.md, CHANGELOG.md Status: design frozen per issue #518 (2026-07-11 consult); parameters chosen in this spec

Problem

A 2026-07-11 cross-model consult (gpt-5.6-sol, xhigh) on verifier placement produced three recommendations plus one routing correctness gap:

  1. The integrity-gate cross-model sample is a uniform random 30% — it spends the same verification budget on a decorative background citation as on the reference backing the paper's headline effect size. High-impact citations can escape the sample entirely.
  2. The two irreversible checkpoints (research-design freeze; final editorial accept/revise/reject) have no cross-model check at all, and the only design on file for peer review — the "6th reviewer" — matches the consult's counterproductive-conditions list (score averaging, role duplication, findings treated as confirmed defects, majority-vote false confidence, synthesizer context burn).
  3. The model-detection case declares any gpt-*/gemini-* id grounded-route-available before the API ever rejects it (gpt-made-up included). "Which provider endpoint" and "is this id known-good" are conflated.
  4. gpt-5.6-sol is listed provisional (#516 / PR #515) with the promotion criteria named but not operationalized — no defined run flips the recommended default.

Load-bearing invariants (must hold after this change)

Design

D1 — Risk-stratified sampling at integrity gates

Replaces the uniform random 30% (min 5, max 15) in shared/cross_model_verification.md §Integrity Verification and its consumer copy in integrity_verification_agent.md.

Tier classification (by the primary, at selection time, reported in the results table). Four tiers, mutually exclusive by precedence (HIGH-IMPACT > NEW-CHANGED > CONTROL/RANDOM); a reference qualifying for more than one is classified once at the highest tier and verified once:

Cost model change (documented, deliberate): calls now scale with the count of high-impact (and, at Stage 4.5, new/changed) citations instead of total reference count. A results-dense paper approaches 100% coverage; that is the point — precision where the paper's weight rests. The old flat cap (max 15) is retired; only the sampled tiers (RANDOM/CONTROL) carry a cap (max 10 each).

Sampling parameters (10% / round-up / min 3 / max 10) are this spec's choice, not the issue's; they are tunable without protocol redesign. (Round-1 codex review: the tier set was widened from three to four — a new/changed non-high-impact reference was unrepresentable — and the stale "max 15 survives" sentence was removed.)

D2 — Blind disagreement checkpoints (replaces the "6th reviewer — Planned" section)

Two irreversible checkpoints gain an optional cross-model check when ARS_CROSS_MODEL is set and consent is granted:

Checkpoint Primary owner Cross-model input (never the primary's decision) Structured decision enum
Research-design freeze research_architect_agent (deep-research) RQ Brief + draft Methodology Blueprint sound / revise_before_freeze / fundamental_concern
Final editorial decision editorial_synthesizer_agent (academic-paper-reviewer) The panel's usable reviewer cards (panel_size N — 5 in full mode, 2 under methodology_focus) + paper metadata accept / minor_revision / major_revision / reject

Mechanics (shared):

  1. The primary reaches its decision as normal and commits it in the SAME structured form (enum + up to 3 drivers) before the cross-model is called — enum-against-enum comparison, both sides blind. The architect records it separately from the blueprint and sends the cross-model a sanitized payload with the Design-Freeze Checkpoint Audit section stripped (writing the decision into the blueprint before the call would leak it and break blindness — round-2 verify fix); the audit section is populated after the comparison, with an unavailable — transport error representation for the no-cross-model case. The synthesizer's decision is the emitted one (in sprint-contract mode, the mechanical protocol's editorial_decision verbatim, with the checkpoint running strictly post-Step-3, never extending the contract arithmetic).
  2. The cross-model receives the same input material and a structured-decision prompt. It never sees the primary's decision, scores, or reasoning first — same anchoring-prevention rule as the integrity samples.
  3. Output contract: {decision: <enum>, drivers: [≤3 one-sentence reasons], confidence: low|medium|high}.
  4. Mechanical comparison: material divergence = differing enum values. (Adjacent categories, e.g. minor vs major revision, are still material; the report notes adjacency.)
  5. On divergence: a targeted rebuttal — the primary must address each cross-model driver specifically against the evidence already on file (reviewer cards / blueprint content), no generic reassurance. Both decisions + the rebuttal surface to the user. The primary's decision stands unless the user changes it.
  6. On agreement: one log line [CROSS-MODEL-CHECKPOINT: agreement — <checkpoint>]; both structured decisions are still recorded.
  7. Graceful degradation: transport failure → [CROSS-MODEL-ERROR], proceed single-model, note in the report (existing rules).

Grounding: checkpoint decisions are judgment, not lookup — an ungrounded/compatible provider is first-class here (same scoping as DA critique: a divergence from any provider is an adversarial hypothesis and review trigger, never a confirmed defect).

Synthesizer boundary (v3.6.2 compatibility): under a sprint contract the synthesizer's decision comes from the mechanical Step 1–3 protocol; the blind check compares against that output and its rebuttal may cite only existing reviewer-card content. The cross-model's drivers are not new review comments and are never inserted into the reviewer matrix, dimension scores, or failure-condition evaluation — the sprint-contract arithmetic is closed to them.

Why not the generic 6th reviewer: the consult's counterproductive-conditions list — score averaging, role duplication, findings treated as confirmed defects, majority-vote false confidence, synthesizer context burn — matches ARS's documented anti-patterns one-for-one. The "Planned" section is removed, not deferred; the two blind checkpoints are the replacement design. Mirrors updated: .claude/CLAUDE.md v3.0 note, shared/raise_framework.md self-declaration, SETUP feature table. Historical changelog/README release-notes lines stay as written (they describe what was true then).

D3 — Capability allowlist (id status, not routing)

The §Detecting Available Models snippet gains a second output alongside CROSS_MODEL_AVAILABLE:

CROSS_MODEL_ID_STATUS = validated | provisional | unlisted

Status applies to first-party routes only; compatible-route ids are user-declared and carry no allowlist (routing there is endpoint-governed, unchanged from #455). Routing behavior is byte-identical; only the announcement changes.

New subsection in the canonical doc operationalizing the five measures already named in the provisional note.

Thresholds are this spec's choice; recorded here so a future bakeoff argues against numbers, not vibes.

Out of scope

Verification