Adopt Angular 22 / Nx 23.1 optimizations: OnPush burn-down, strictTemplates, migration-artifact cleanup #662

Closed
opened 2026-07-17 16:18:50 +00:00 by spikerj · 1 comment
Owner

Post-upgrade adoption pass over the Angular 22.0 and Nx 23.1 changelogs (we were on latest versions but still carrying migration compat shims).

Scope (spikersoft-angular):

  • Convert all 55 components left on ChangeDetectionStrategy.Eager by the v22 migration to OnPush (zoneless-safe; minimal markForCheck/signal fixes where needed)
  • Enable strictTemplates on the main app + fix all resulting errors (several were real runtime bugs: dead mat-slider API in wasm-voxel block editor, map-tracker "use current location" buttons bound to nonexistent outputs, Google Maps pixelOffset needing a real Size, profile.totalCount vs wire field totalEarned)
  • Remove all 42 $safeNavigationMigration(...) template wrappers (adopt v22 ?. → undefined semantics)
  • Strip v22-migration nullishCoalescingNotNullable/optionalChainNotNullable suppressions from 119 tsconfigs (zero violations existed)
  • Migrate deprecated reportProgressreportUploadProgress/reportDownloadProgress (2 call sites); keep withXhr() because PDF upload progress is consumed
  • Remove no-op prefetch on idle from two on immediate @defer blocks (new NG8021 diagnostic)
  • nx.json cache-input fixes: lint input pointed at nonexistent .eslintrc.json, production input missed eslint.config.cjs, empty sharedGlobals (tsconfig.base.json/browserslist changes didn't invalidate caches)
  • Audited router paramsInheritanceStrategy: 'always' default flip: no impact (no nested same-name params, no param iteration, no componentInputBinding)
Post-upgrade adoption pass over the Angular 22.0 and Nx 23.1 changelogs (we were on latest versions but still carrying migration compat shims). Scope (spikersoft-angular): - Convert all 55 components left on `ChangeDetectionStrategy.Eager` by the v22 migration to OnPush (zoneless-safe; minimal markForCheck/signal fixes where needed) - Enable `strictTemplates` on the main app + fix all resulting errors (several were real runtime bugs: dead mat-slider API in wasm-voxel block editor, map-tracker "use current location" buttons bound to nonexistent outputs, Google Maps `pixelOffset` needing a real `Size`, `profile.totalCount` vs wire field `totalEarned`) - Remove all 42 `$safeNavigationMigration(...)` template wrappers (adopt v22 `?.` → undefined semantics) - Strip v22-migration `nullishCoalescingNotNullable`/`optionalChainNotNullable` suppressions from 119 tsconfigs (zero violations existed) - Migrate deprecated `reportProgress` → `reportUploadProgress`/`reportDownloadProgress` (2 call sites); keep `withXhr()` because PDF upload progress is consumed - Remove no-op `prefetch on idle` from two `on immediate` @defer blocks (new NG8021 diagnostic) - nx.json cache-input fixes: lint input pointed at nonexistent `.eslintrc.json`, production input missed `eslint.config.cjs`, empty `sharedGlobals` (tsconfig.base.json/browserslist changes didn't invalidate caches) - Audited router `paramsInheritanceStrategy: 'always'` default flip: no impact (no nested same-name params, no param iteration, no componentInputBinding)
Author
Owner

Resolved in spikersoft-angular PR #230 (merged to master 2026-07-17). All 55 Eager components converted to OnPush, strictTemplates enabled app-wide with all fallout fixed at root cause, 42 $safeNavigationMigration wrappers and 119 tsconfig diagnostic suppressions removed, reportProgress migrated, nx.json cache inputs corrected, paramsInheritanceStrategy audit came back clean. Follow-ups tracked in #663 (quiz review endpoint) and #664 (root typecheck). Note: the e2e-anonymous CI failures on the merge run are a pre-existing backend outage (/api/sponsor/profiles and /api/geography/travel-stats returning 500 — same failure on pre-merge master run 8902), tracked separately. Closing.

Resolved in spikersoft-angular PR #230 (merged to `master` 2026-07-17). All 55 Eager components converted to OnPush, strictTemplates enabled app-wide with all fallout fixed at root cause, 42 `$safeNavigationMigration` wrappers and 119 tsconfig diagnostic suppressions removed, reportProgress migrated, nx.json cache inputs corrected, `paramsInheritanceStrategy` audit came back clean. Follow-ups tracked in #663 (quiz review endpoint) and #664 (root typecheck). Note: the `e2e-anonymous` CI failures on the merge run are a pre-existing backend outage (`/api/sponsor/profiles` and `/api/geography/travel-stats` returning 500 — same failure on pre-merge master run 8902), tracked separately. Closing.
Sign in to join this conversation.