Skip to content

Hook delivery path has no exposure instrumentation, so M4 is unanswerable #122

Description

@MongLong0214

No run in M4 received injected context. Neither arm. All 112.

bench/results/transcripts-final:  30/60  have injected_context
bench/results/transcripts-m4:      0/112 have injected_context

Broken out by arm, every one of the 112:

commitlore-guard:  injected_context present 0 / absent 56
commitlore-on:     injected_context present 0 / absent 56

The field is not vestigial — the earlier transcripts-final set populates it on exactly half its runs, which is what a two-arm design should look like. M4 populated it on none.

What this means for the verdict

bench/VERDICT-M4.md reports a null on commitlore-guard vs commitlore-on, both arms of which are defined by receiving records. If neither arm received any, the two arms were identical and the experiment compared nothing against nothing.

A null from that is not a weak result about the guard. It is not a result about the guard at all.

I am not yet asserting the delivery failed — this could be a recording gap rather than a delivery gap, and those are different failures with the same evidence. That ambiguity is itself issue #113's subject, and it is the reason #113 made metrics.ts refuse an effect estimate over rows whose exposure is unknown. That refusal now looks like it was protecting against exactly this.

Two things point at genuine non-delivery rather than a recording gap:

  • matched is an empty list on every M4 transcript
  • accepted_records is 1 on all 112 rows, and identical across arms — if the arms differed in what they received, that field is the one that should have differed

What has to be established, in order

  1. Whether the context was delivered and not recorded, or never delivered. The harness commit is pinned (081d858c) and dist_digest is a single value across all rows, so the exact code that produced these runs is recoverable. Re-run one task, one seed, one arm at that pin and inspect. One run answers it.
  2. If it was never delivered, bench/VERDICT-M4.md must say so — not as a caveat but as the headline. The verdict currently attributes the null to the guard's effect; it would instead be a harness fault, and the corrected paired/clustered analysis in that document would be analysing noise.
  3. A guard against the class, since this is now the fourth instrument failure in a row (M1/M2 empty, M4 saturated, M5's registered outcome zero-variance, and now this). Before a benchmark's results are analysed, assert that the treatment arm's exposure differs from the comparator's. If it does not, the run is void, and it should be void at analysis time rather than after publication.

Provenance

Found while enumerating candidate outcome variables for M5 under issue #121, by opening the transcripts rather than the summary rows. The summary rows do not carry injected_context at all, which is why every prior analysis — including mine — missed it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions