diff --git a/docs/gate/recorder.md b/docs/gate/recorder.md index 4eee500..7759f45 100644 --- a/docs/gate/recorder.md +++ b/docs/gate/recorder.md @@ -29,9 +29,81 @@ ADR-0003 / B1 test-bed was **not merged** at capture time. Default site identity Re-label `site_key` / `testbed_version` when B1 pins a version matrix. +## Session preamble — logging in is NOT a measured step + +`establishSession()` in [`src/recorder/preamble.ts`](../../src/recorder/preamble.ts) logs the +browser in **without touching `TrajectoryRecorder`**, so no login action reaches +`trajectory.steps` and **no preamble step ever enters a step-validity denominator**. Before +issue #60 the live CLI recorded navigate → fill → fill → click → (skip) as measured steps, so +roughly five of six "gate task" steps were login scaffolding, and step-level validity was mostly +measuring whether Grafana's login form had moved. + +The distinction is load-bearing: + +- **Login is scaffolding.** It gets the browser into a state where the task can begin. Making it + version-robust is legitimate. +- **The task is the measurement.** Version-conditional fallbacks *inside* measured steps would + launder churn out of the gate number. Do not copy this pattern into the recorded task, and do + not add version fallbacks to `src/runner/locators.ts` — replay must fail honestly when a + locator stops resolving, because that failure is the datum. + +### What was observed, and on which versions + +All eight pinned versions were booted and their login surface dumped on **2026-07-27**: +9.5.21, 10.0.13, 10.4.19, 11.0.0, 11.5.2, 12.0.0, 12.2.1, 13.0.3. Login identity churns once, +at **10.4.19**, and it churns in two places at the same time: + +| | 9.5.21, 10.0.13 | 10.4.19 → 13.0.3 | +| --- | --- | --- | +| username field | `aria-label="Username input field"`, no `