Asked: the answer must follow the question
IMPORTANT
This step
- Teaches: the input inversion trial, which turns what is asked and leaves the evidence as it is.
- Frame:
17-clock-asked.json: code review, at the grain of one contributing rule, with the diff in the question. - After: Inversion.
The inversion turned the rule and asked whether the answer turned with it. This step turns the question instead: the change under review calls the clock the rule asks for, and the review should turn to approve. The rule is rung 8's, which Gemma cannot know without the line.
17: the clock rule, with the diff asked about
Gadfly plans 17-clock-asked.json like this, one span a line, the anchor marked *:
$ uv run python examples/read.py \
examples/17-clock-asked.json --frame
clock-asked: 1 input x 8 trials x 5 calls = 40 calls, 4 of 5 to agree
relation: the request for changes rests on the contributing rule that the time is read only through clock.now()
grain: one contributing rule, and the one call the diff makes
evidence, the anchors marked *:
* rule rule CONTRIBUTING.md: read the current time only through clock.now(); never call datetime.now() directly, so tests can freeze time.
branches rule CONTRIBUTING.md: name each branch after its ticket, like PAY-123-fix-rounding.
size rule CONTRIBUTING.md: keep each pull request under 400 changed lines.
commits rule CONTRIBUTING.md: write commit messages in the imperative mood.
pr pr Pull request #319 from branch PAY-884-due-invoices: 18 changed lines in one commit, "List invoices due today".
source code invoices_due_on(day) returns the invoices whose due date is day.
asked:
review Review pull request #319. Can it be merged as is?
The diff adds to src/billing/due.py: due = invoices_due_on(datetime.now().date())
labels: approve, request-changes, unclear
trials:
baseline asks the evidence as it is
repeat asks it again
ablation cuts rule
sham-1 cuts branches
sham-2 cuts size
presentation renames PAY-884 -> OPS-220, due.py -> billing_day.py, invoices_due_on -> bills_due_on
input-inversion inverts the input's datetime.now() -> clock.now()
control cuts every span
allowed: ablation -> approve, unclear; inputInversion -> approveNOTE
Predicted before the first call
Request-changes at the baseline, approve without the rule, as in rung 8. The input inversion turns the review to approve (medium-high), unless Gemma finds another ground. The control approve, or unclear without the pull request's description. Carried in every run.
Gemma answered like this over three runs:
$ uv run python examples/read.py \
examples/17-clock-asked.json
clock-asked: 3 kept runs, read by google/gemma-4-26B-A4B-it-qat-q4_0-gguf@d1c082be
trial review
baseline request-changes 15
repeat request-changes 15
ablation approve 12, unclear 3
sham-1 request-changes 15
sham-2 request-changes 15
presentation request-changes 15
input-inversion approve 14, unclear 1
control unclear 15
run 1: unresolved
run 2: carried
run 3: carriedThe turned diff moves the review to approve on 14 of 15 calls: Gemma follows the change it is asked about. Run 2 reads it as carried:
$ uv run python examples/read.py \
examples/17-clock-asked.json --verdict 2
review: carried
levels: baseline request-changes, repeat request-changes, ablation approve, sham-1 request-changes, sham-2 request-changes, presentation request-changes, input-inversion approve, control unclear
evidence: ablation moved it request-changes -> approve; held under presentation, 2 shams
evidence: input inversion moved it request-changes -> approve; the answer follows what is asked
evidence: the control moved it request-changes -> unclear
open: no hidden fallback (no bypass trial was declared)Run 1 reads unresolved, its ablation split three approves to two unclears. The control said unclear on every call: with the pull request's description cut, Gemma will not review a diff on its own.
What to take from it
- An input inversion asks whether the answer follows what is asked, where the ablation asks whether it rests on the line. Here both hold.
- Put what is under review in the question when a trial should change it: the evidence is cut, the question never is.
- The turn is read only once the ablation has moved. Run 1's split ablation leaves its turn as a level, not as evidence for a category.
Try next
Ask it the other way round, in a new frame: a diff that calls clock.now(), turned into datetime.now(). Predict whether Gemma, approving at the baseline, asks for changes once the question turns, and what the ablation gives when the rule it follows is cut.