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)
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)
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)
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.
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.
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):
ChangeDetectionStrategy.Eagerby the v22 migration to OnPush (zoneless-safe; minimal markForCheck/signal fixes where needed)strictTemplateson 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 MapspixelOffsetneeding a realSize,profile.totalCountvs wire fieldtotalEarned)$safeNavigationMigration(...)template wrappers (adopt v22?.→ undefined semantics)nullishCoalescingNotNullable/optionalChainNotNullablesuppressions from 119 tsconfigs (zero violations existed)reportProgress→reportUploadProgress/reportDownloadProgress(2 call sites); keepwithXhr()because PDF upload progress is consumedprefetch on idlefrom twoon immediate@defer blocks (new NG8021 diagnostic).eslintrc.json, production input missedeslint.config.cjs, emptysharedGlobals(tsconfig.base.json/browserslist changes didn't invalidate caches)paramsInheritanceStrategy: 'always'default flip: no impact (no nested same-name params, no param iteration, no componentInputBinding)Resolved in spikersoft-angular PR #230 (merged to
master2026-07-17). All 55 Eager components converted to OnPush, strictTemplates enabled app-wide with all fallout fixed at root cause, 42$safeNavigationMigrationwrappers and 119 tsconfig diagnostic suppressions removed, reportProgress migrated, nx.json cache inputs corrected,paramsInheritanceStrategyaudit came back clean. Follow-ups tracked in #663 (quiz review endpoint) and #664 (root typecheck). Note: thee2e-anonymousCI failures on the merge run are a pre-existing backend outage (/api/sponsor/profilesand/api/geography/travel-statsreturning 500 — same failure on pre-merge master run 8902), tracked separately. Closing.