Doctrine
Immutable Experiment Proof Fields At ADOPT Handoff
Immutable Experiment Proof Fields At ADOPT Handoff
Rule
Every Gemini EXPERIMENT-REPORT with Recommendation: ADOPT MUST carry immutable evidence fields in the feed post:
EXPERIMENT_BRANCH: gemini/experiment/<branch>
EXPERIMENT_COMMIT: <full commit sha Gemini evaluated>
BRANCH_HEAD_AT_POST: <full commit sha resolved from the branch at post time>
EXPERIMENT_REPORT_TITLE: <exact title from EXPERIMENT_REPORT.md>
Codex MAY treat experiment branch code as evidence only after verifying that the branch head and report title still match the posted fields. If the branch is missing, moved, or semantically mismatched, Codex MUST state that branch evidence was rejected and productionize only from the feed diagnostic, local inspection, or a fresh rewrite.
Every Codex graduation post or DONE that consumes a Gemini experiment MUST include:
EXPERIMENT_BRANCH_EVIDENCE: accepted | rejected | unavailable - <reason>
Commit attribution still follows ORA-2026-0093:
Based-on: gemini/experiment/<branch>when Codex adopts the approach.Informed-by: gemini/experiment/<branch>when Codex uses the finding but
implements differently.
Why
An experiment branch name is a label, not a proof object. CMB-2572 sampled recent Gemini ADOPT reports and found branch-name drift: some remote branch heads pointed at unrelated experiment reports, some branches were absent, and some were aligned only by diff rather than by a report file at head.
That makes the branch name epistemically weaker than the feed report unless the feed report freezes the commit and report identity that Gemini actually meant. Without immutable fields, Codex can faithfully follow a label and still ship the wrong experiment.
Verification Contract
Before Codex uses experiment branch code as source evidence, it checks:
1. git rev-parse origin/gemini/experiment/<branch> equals BRANCH_HEAD_AT_POST, or any mismatch is explicitly explained. 2. EXPERIMENT_COMMIT is reachable and is the commit Gemini evaluated. 3. EXPERIMENT_REPORT.md title matches EXPERIMENT_REPORT_TITLE, or the branch is accepted only by directly inspected diff with that reason named. 4. The feed diagnosis and branch contents describe the same hypothesis and result.
If any check fails, Codex still may use the idea, but the evidence line is rejected or unavailable, not silently accepted.
Anti-Patterns
| Anti-pattern | Correction |
|---|---|
EXPERIMENT-REPORT: gemini/experiment/foo with no commit fields | Reject the post as incomplete for ADOPT graduation. |
Codex rewrites from whatever branch foo currently points to | Verify posted commit/title first, then rewrite. |
| Branch mismatch discovered but omitted from DONE | Include EXPERIMENT_BRANCH_EVIDENCE: rejected - <reason>. |
Commit cites Based-on: while branch evidence was rejected | Use Informed-by: and name the evidence boundary. |
User-Value Closure
- user: Camber operators and Codex implementers consuming Gemini experiments
- surface:
EXPERIMENT-REPORTfeed posts and Codex graduation DONE posts - change: experiment handoffs now preserve the exact branch/report identity
- closure_date: 2026-05-01
Gemini meant, so Codex can separate useful findings from stale or swapped branch labels before productionizing