Angular master e2e-anonymous RED since #827 PR #564: /sponsor/donate-family/:familyKey unclassified in route-manifest → publish skipped, frontend not deploying
#828
e2e-anonymous has been RED on spikersoft-angular master since the #827 frontend merge (PR #564, run 18112 @ 2026-07-24 17:52Z) and again on every master run since. Because publish is gated on the e2e jobs, the publish job has been SKIPPED on every master run since 17:47Z — learn.spikersoft.com has not been redeployed.
Verified live: the deployed bundle main-VSL3ATV3.js on https://learn.spikersoft.com contains sponsor/family/:family, sponsor/fund/:code, sponsor/donate-org … but nosponsor/donate-family, confirming production is still running a pre-#564 build. The backend half of #827did deploy (GET /api/sponsor/family-funds/{familyKey} returns 200 live).
Root cause
PR #564 added sponsor/donate-family/:familyKey to projects/spikersoft/src/routes.ts but did not classify it in e2e/support/route-manifest.ts, so route-coverage.spec.ts fails twice:
Error: routes declared in routes.ts but missing from e2e/support/route-manifest.ts — classify them
+ { access: "public", guards: [], path: "/sponsor/donate-family/:familyKey" }
Error: route coverage 29.2% fell below the 'anonymousOnly' ratchet baseline 29.5%
Expected: >= 29.5 Received: 29.2
This is the same class as #819 (closed) and the documented exception (2) in e2e/support/coverage-baseline.json: adding a param route that needs a live id is inherently non-walkable (skipWalk), so it grows the declared denominator with no numerator gain and the ratio dips even though absolute coverage is unchanged.
Fix
Add to e2e/support/route-manifest.ts: { path: "/sponsor/donate-family/:familyKey", url: "/sponsor", access: "public", skipWalk: true, note: "needs a live family key; reached from the family card's Sponsor button on the /sponsor list" }
Re-derive BOTH ratchet baselines from the new totals (denominator 105 -> 106, walked unchanged) and record the math in the baseline comment, per the file's own rule:
anonymous 31/105 = 29.5 -> 31/106 = 29.2
credentialed 69/105 = 65.7 -> 69/106 = 65.1
Prevention
Same gap #824 describes for nx build: a route added without a manifest entry is only caught post-merge, because the e2e jobs that catch it are not required for merge. Worth folding into #824's CI-gating work.
## Symptom
`e2e-anonymous` has been RED on `spikersoft-angular` master since the #827 frontend merge (PR #564, run 18112 @ 2026-07-24 17:52Z) and again on every master run since. Because `publish` is gated on the e2e jobs, **the `publish` job has been SKIPPED on every master run since 17:47Z — learn.spikersoft.com has not been redeployed.**
Verified live: the deployed bundle `main-VSL3ATV3.js` on https://learn.spikersoft.com contains `sponsor/family/:family`, `sponsor/fund/:code`, `sponsor/donate-org` … but **no** `sponsor/donate-family`, confirming production is still running a pre-#564 build. The backend half of #827 *did* deploy (`GET /api/sponsor/family-funds/{familyKey}` returns 200 live).
## Root cause
PR #564 added `sponsor/donate-family/:familyKey` to `projects/spikersoft/src/routes.ts` but did not classify it in `e2e/support/route-manifest.ts`, so `route-coverage.spec.ts` fails twice:
```
Error: routes declared in routes.ts but missing from e2e/support/route-manifest.ts — classify them
+ { access: "public", guards: [], path: "/sponsor/donate-family/:familyKey" }
Error: route coverage 29.2% fell below the 'anonymousOnly' ratchet baseline 29.5%
Expected: >= 29.5 Received: 29.2
```
This is the same class as #819 (closed) and the documented **exception (2)** in `e2e/support/coverage-baseline.json`: adding a param route that needs a live id is inherently non-walkable (`skipWalk`), so it grows the declared denominator with no numerator gain and the ratio dips even though absolute coverage is unchanged.
## Fix
1. Add to `e2e/support/route-manifest.ts`:
`{ path: "/sponsor/donate-family/:familyKey", url: "/sponsor", access: "public", skipWalk: true, note: "needs a live family key; reached from the family card's Sponsor button on the /sponsor list" }`
2. Re-derive BOTH ratchet baselines from the new totals (denominator 105 -> 106, walked unchanged) and record the math in the baseline comment, per the file's own rule:
- anonymous 31/105 = 29.5 -> 31/106 = **29.2**
- credentialed 69/105 = 65.7 -> 69/106 = **65.1**
## Prevention
Same gap #824 describes for `nx build`: a route added without a manifest entry is only caught post-merge, because the e2e jobs that catch it are not required for merge. Worth folding into #824's CI-gating work.
Fix up in spikersoft-angular PR #568 (fix/828-donate-family-route-manifest): classifies /sponsor/donate-family/:familyKey as public + skipWalk and re-derives both ratchet baselines (anonymous 29.5 → 29.2, credentialed 65.7 → 65.1) with the math recorded in coverage-baseline.json as the second instance of documented exception (2). Awaiting CI.
— Opus 5 Agent
Fix up in spikersoft-angular **PR #568** (`fix/828-donate-family-route-manifest`): classifies `/sponsor/donate-family/:familyKey` as public + `skipWalk` and re-derives both ratchet baselines (anonymous 29.5 → 29.2, credentialed 65.7 → 65.1) with the math recorded in `coverage-baseline.json` as the second instance of documented exception (2). Awaiting CI.
— Opus 5 Agent
Fixed and verified end to end. spikersoft-angular PR #568 merged to master (dd34b0a4).
PR #568's own e2e-anonymous passed at 19:05Z — the first green run of that job since 17:52Z.
Master run 18124 on the merge commit is green across the board: compute_version, build, e2e-anonymous, e2e-smoke, test-and-lint all success, and publish ran (success) instead of being skipped — the deploy gate this ticket was about.
Production redeployed: learn.spikersoft.com now serves main-SRPMVC66.js (was main-VSL3ATV3.js), and the new bundle contains sponsor/donate-family/:family. The frontend deploy backlog is cleared.
Closing.
— Opus 5 Agent
Fixed and verified end to end. spikersoft-angular PR #568 merged to master (`dd34b0a4`).
- PR #568's own `e2e-anonymous` passed at 19:05Z — the first green run of that job since 17:52Z.
- Master run 18124 on the merge commit is green across the board: `compute_version`, `build`, `e2e-anonymous`, `e2e-smoke`, `test-and-lint` all success, and **`publish` ran (success) instead of being skipped** — the deploy gate this ticket was about.
- Production redeployed: learn.spikersoft.com now serves `main-SRPMVC66.js` (was `main-VSL3ATV3.js`), and the new bundle contains `sponsor/donate-family/:family`. The frontend deploy backlog is cleared.
Closing.
— Opus 5 Agent
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Symptom
e2e-anonymoushas been RED onspikersoft-angularmaster since the #827 frontend merge (PR #564, run 18112 @ 2026-07-24 17:52Z) and again on every master run since. Becausepublishis gated on the e2e jobs, thepublishjob has been SKIPPED on every master run since 17:47Z — learn.spikersoft.com has not been redeployed.Verified live: the deployed bundle
main-VSL3ATV3.json https://learn.spikersoft.com containssponsor/family/:family,sponsor/fund/:code,sponsor/donate-org… but nosponsor/donate-family, confirming production is still running a pre-#564 build. The backend half of #827 did deploy (GET /api/sponsor/family-funds/{familyKey}returns 200 live).Root cause
PR #564 added
sponsor/donate-family/:familyKeytoprojects/spikersoft/src/routes.tsbut did not classify it ine2e/support/route-manifest.ts, soroute-coverage.spec.tsfails twice:This is the same class as #819 (closed) and the documented exception (2) in
e2e/support/coverage-baseline.json: adding a param route that needs a live id is inherently non-walkable (skipWalk), so it grows the declared denominator with no numerator gain and the ratio dips even though absolute coverage is unchanged.Fix
e2e/support/route-manifest.ts:{ path: "/sponsor/donate-family/:familyKey", url: "/sponsor", access: "public", skipWalk: true, note: "needs a live family key; reached from the family card's Sponsor button on the /sponsor list" }Prevention
Same gap #824 describes for
nx build: a route added without a manifest entry is only caught post-merge, because the e2e jobs that catch it are not required for merge. Worth folding into #824's CI-gating work.Fix up in spikersoft-angular PR #568 (
fix/828-donate-family-route-manifest): classifies/sponsor/donate-family/:familyKeyas public +skipWalkand re-derives both ratchet baselines (anonymous 29.5 → 29.2, credentialed 65.7 → 65.1) with the math recorded incoverage-baseline.jsonas the second instance of documented exception (2). Awaiting CI.— Opus 5 Agent
Fixed and verified end to end. spikersoft-angular PR #568 merged to master (
dd34b0a4).e2e-anonymouspassed at 19:05Z — the first green run of that job since 17:52Z.compute_version,build,e2e-anonymous,e2e-smoke,test-and-lintall success, andpublishran (success) instead of being skipped — the deploy gate this ticket was about.main-SRPMVC66.js(wasmain-VSL3ATV3.js), and the new bundle containssponsor/donate-family/:family. The frontend deploy backlog is cleared.Closing.
— Opus 5 Agent