Skip to content

docs(e2e-matrix): J.L.E.7 stage close — Linux upgrade reaches happy-path parity

Placeholder ppxd requested to merge phase12.L.E.7-stage-summary-matrix-update into main

Summary

Stage-summary update for the J.L.E.7 phase. Six small reviewable PRs (#210–#216) landed one Linux happy-path full-lifecycle test (E1h_FullLifecycle_HappyPath_WritesSuccessAndSwapsBinary). Each iteration was driven by a fresh runner failure surfacing a real production-vs-test fidelity gap.

What this PR does

  • docs/e2e-scenario-matrix.md — moves three Linux scenarios from Planned → ✅ Verified, adds phase rows for 12.L.E.3 through 12.L.E.7, bumps cumulative shipped count from 84 → 89.

No production code change. No test code change. Just keeping the source-of-truth ledger honest.

J.L.E.7 iteration ledger (preserved as test invariants)

# What broke What it taught
7.1 SERVICE_NAME defaulted to literal squid-tentacle Test must override defaults end-to-end via real placeholder substitution
7.2 HEALTHCHECK_RETRIES=1 raced python3 spawn Healthcheck retry budget must accommodate slowest realistic responder spawn time
7.3 python3 socketserver couldn't re-bind port (TIME_WAIT) Phase B re-binds the same healthz port → allow_reuse_address=True is mandatory, not optional
7.4 Marker absent — blind assertion Long-running E2E assertions need install-dir state dump on failure (Rule 12.10)
7.5 .sh's timeout 5 ... version triggered SIGTERM → trap-cleanup deleted marker Test service must short-circuit version subcommand BEFORE entering sleep loop (real Squid.Tentacle does same)
7.6 version.txt stripped pre-release 2.0.0-test → 2.0.0 mismatched TARGET_VERSION Phase B sanity check is exact-string match — any version-rendering divergence between TARGET_VERSION resolver and version.txt writer triggers spurious rollback

Each fix is now baked into LinuxLifecycleContext / squid-linux-test-service.sh / LinuxServiceFixture. Future regressions on any of these will fail E1.h-Linux on the next CI run.

Why six PRs and not one

Per the user pattern (small reviewable PRs + per-iteration runner verification): each fix is a self-contained 1-2 file change with a clear runner output that proved the next bug. Compressing them into one PR would have:

  • masked which fix solved which symptom
  • made git bisect much harder if any of these regressions resurface
  • prevented the "stage summary + global review" cadence from running between iterations

Test plan

  • CI green on Tests workflow (no test changes here, just docs)
  • Source ledger renders cleanly on GitHub PR view

🤖 Generated with Claude Code

Merge request reports

Loading