Trials P-17 (fail) and P-22 (pass): a Run is identified from the run records

Merged
DO
4d ago
+5842-3

Closes #10.

Trials P-17 and P-22: can a Run be identified from the run records? (design §6, batch 1; I-21, I-38)

TrialPass condition, written firstVerdict
P-17A run's name is set when it is created and is visible for a run whose job never started; recent runs of one workflow can be listed and matched by name, at a recorded costFail on the first half, pass on the second
P-22A started Run is in the list within one pass interval. The bound was taken as 60 s, the shorter end of the relay's "every minute or two", since §7.3 gives no single interval. Measured over at least 20 starts; "no" if any exceeds itPass

P-17

  • First appearance: a new run is in the list within about 1.6 s. But the first read that holds it shows the workflow's name, not the run-name, in 10 of 10 starts whose job never started and in 13 of 24 hosted starts. The run-name appears about a second later, by 3.7 s at most.
  • A run whose job never starts stays listed, queued and named, until it is cancelled (5 minutes in the trial).
  • Listing by name: one request lists a workflow's recent runs, and the run is matched by name. That costs 1 request, and 1 point of the 5,000-an-hour core limit.
  • The failure is filed against the design as #161, "Design: a Run is identified before its run-name is listed (P-17 failed)", before any code depends on it.

P-22: across 24 starts, every run was in the list at the first read, 2 s after the dispatch. Time to that read's response: min 2.28 s, median 2.34 s, max 2.80 s. These are upper bounds.

Also seen, recorded in #161:

  • The run-list endpoint answers with cache-control: max-age=60.
  • The dispatch reply carries Deprecation and Sunset headers.
  • Reading a run's jobs counts against a separate rate-limit window.

What changes

  • trials/P-17.json and trials/P-22.json. They hold full exchanges for a sample of starts, plus a timing table copied from the redacted captures. Every request in full would have run to megabytes.
  • Grounding in sim/grounding.py:
    • a_queued_run_is_listed names P-17.
    • a_new_run_is_listed_late names P-22.
    • a_superseded_run_fails stays unverified: a cancelled run that never started concludes cancelled, not failure.
  • One test fix the grounding needed: test_verify_prints_every_rule_no_fixture_grounds assumed no rule was grounded yet. It is in a commit of its own.

Redaction removed the authorization header on every request, listed in removed, and 13 response headers a fixture may not keep. Nothing shaped like a credential was found.

Step 8 undid:

  • the 11 queued runs, cancelled;
  • the 35 trial runs, deleted;
  • the trial workflow, disabled.

There were no branches or PRs. Staying in the canary: the workflow commit on main and one CodeQL run. As in P-3, the environment main-only and its real secret were never named, read or touched.

Verified: python3 -m tools.check_trials passes, and make verify passes on a git archive export. The mutation run is CI's.

🤖 Generated with Claude Code