e2e route-coverage red on master: location-fund routes unclassified + ratchet dip (regression from #552) #819

Closed
opened 2026-07-23 16:43:24 +00:00 by spikerj · 1 comment
Owner

Symptom

master e2e-anonymous job is red (run 17767 / job 68604). e2e/playwright/route-coverage.spec.ts fails with two soft assertions:

  1. missingFromManifest — two routes declared in projects/spikersoft/src/routes.ts are absent from e2e/support/route-manifest.ts:
    • /sponsor/fund/:code (public, no guards)
    • /sponsor/earn (auth, AuthGuard)
  2. anonymousOnly ratchet29.5% fell below the baseline 29.7%.

Root cause

PR #552 (feat/sponsor-views-location-funds, commit bcffcd7c) added the location-fund pages (/sponsor/fund/:code, /sponsor/earn) to routes.ts but did not classify them in the e2e route manifest, per the e2e-conventions guardrail. Both new routes are inherently non-anonymously-walkable (fund needs a live location-fund code → skipWalk; earn is auth-gated), so they grow the declared denominator (101→105) with no anonymous numerator gain, tipping the ratchet from 31/104≈29.8% to 31/105=29.5%. Absolute walked coverage actually rose (public walked 30→31).

Secondary finding (pre-existing, independent of #552)

On unmodified master the credentialed ratchet was already violated: 64.8% vs its 66.3% baseline. This means the credentialed/nightly ratchet has been quietly red or is not gating any pipeline. Worth a look at why it went uncaught — the anonymous ratchet is the only one CI's e2e-anonymous job enforces.

Fix

  • Classify both routes in route-manifest.ts (/sponsor/fund/:code public+skipWalk; /sponsor/earn auth, walkable in the credentialed phase).
  • Re-derive both baselines from honest current totals (approved as the mirror of the #701 removal exception — a second documented exception class for adding inherently-non-walkable routes): anonymousOnly 29.7→29.5, credentialed 66.3→65.7.

Fix PR incoming against master.

## Symptom `master` e2e-anonymous job is red (run 17767 / job 68604). `e2e/playwright/route-coverage.spec.ts` fails with two soft assertions: 1. **`missingFromManifest`** — two routes declared in `projects/spikersoft/src/routes.ts` are absent from `e2e/support/route-manifest.ts`: - `/sponsor/fund/:code` (public, no guards) - `/sponsor/earn` (auth, `AuthGuard`) 2. **anonymousOnly ratchet** — `29.5%` fell below the baseline `29.7%`. ## Root cause PR #552 (`feat/sponsor-views-location-funds`, commit `bcffcd7c`) added the location-fund pages (`/sponsor/fund/:code`, `/sponsor/earn`) to `routes.ts` but did not classify them in the e2e route manifest, per the `e2e-conventions` guardrail. Both new routes are **inherently non-anonymously-walkable** (fund needs a live location-fund code → `skipWalk`; earn is auth-gated), so they grow the declared denominator (101→105) with no anonymous numerator gain, tipping the ratchet from `31/104≈29.8%` to `31/105=29.5%`. Absolute walked coverage actually *rose* (public walked 30→31). ## Secondary finding (pre-existing, independent of #552) On **unmodified** master the **credentialed** ratchet was already violated: `64.8%` vs its `66.3%` baseline. This means the credentialed/nightly ratchet has been quietly red or is not gating any pipeline. Worth a look at why it went uncaught — the anonymous ratchet is the only one CI's `e2e-anonymous` job enforces. ## Fix - Classify both routes in `route-manifest.ts` (`/sponsor/fund/:code` public+`skipWalk`; `/sponsor/earn` auth, walkable in the credentialed phase). - Re-derive **both** baselines from honest current totals (approved as the mirror of the #701 removal exception — a second documented exception class for adding inherently-non-walkable routes): anonymousOnly `29.7→29.5`, credentialed `66.3→65.7`. Fix PR incoming against `master`.
Author
Owner

Resolved in spikersoft-angular PR #556 (merged to master, commit 29693157).

  • Classified the two location-fund routes in e2e/support/route-manifest.ts/sponsor/fund/:code (public + skipWalk, needs a live fund code) and /sponsor/earn (auth).
  • Re-derived both ratchet baselines from honest current totals and documented a second principled exception class in coverage-baseline.json: anonymousOnly 29.7 → 29.5 (31/105), credentialed 66.3 → 65.7 (69/105). Absolute walked coverage rose (public 30→31, credentialed 67→69); only the denominator grew, from adding inherently-non-anonymously-walkable routes.

The e2e-anonymous ratchet is green again.

One open thread worth a follow-up: the credentialed ratchet was already violated on unmodified master (64.8% < 66.3%) before this change — i.e. it's been quietly red or isn't gating any pipeline. This PR made the baseline honest but did not investigate why the drift went uncaught. If you want that chased down (does any pipeline actually run the credentialed walk?), it should be its own ticket. Closing this one as the CI-red fix is complete.

Resolved in spikersoft-angular PR #556 (merged to `master`, commit `29693157`). - Classified the two location-fund routes in `e2e/support/route-manifest.ts` — `/sponsor/fund/:code` (public + `skipWalk`, needs a live fund code) and `/sponsor/earn` (auth). - Re-derived both ratchet baselines from honest current totals and documented a second principled exception class in `coverage-baseline.json`: `anonymousOnly` 29.7 → 29.5 (31/105), `credentialed` 66.3 → 65.7 (69/105). Absolute walked coverage rose (public 30→31, credentialed 67→69); only the denominator grew, from adding inherently-non-anonymously-walkable routes. The e2e-anonymous ratchet is green again. **One open thread worth a follow-up:** the *credentialed* ratchet was already violated on unmodified master (64.8% < 66.3%) before this change — i.e. it's been quietly red or isn't gating any pipeline. This PR made the baseline honest but did not investigate *why the drift went uncaught*. If you want that chased down (does any pipeline actually run the credentialed walk?), it should be its own ticket. Closing this one as the CI-red fix is complete.
Sign in to join this conversation.