Files
HIPCTF2/.kilo/plans/913-build-fix.md
T

71 lines
2.8 KiB
Markdown

# Implementation Plan: Fix Job 913 Build Error (missing `auth` injection in AdminUsersComponent)
## 1. Root cause
The `onToggleRole` handler added in the previous turn calls
`this.auth.currentUser()`, `this.auth.applyPeerRoleChange(...)`, and
`this.auth.publishRoleChange(...)`
(`frontend/src/app/features/admin/admin-users.component.ts:244-247`), but
`AdminUsersComponent` never declared an `auth` field. The component only injects
`AdminService` (`admin`) and `NotificationService` (`notify`). TypeScript build
(`ng build --configuration production`) therefore fails with `TS2339: Property
'auth' does not exist on type 'AdminUsersComponent'` at lines 244, 246, 247.
The Jest tests passed because they exercise pure modules and
`admin-players.pure`, not the component class — so the missing field was not
caught at test time.
## 2. Required changes (single file)
**File:** `frontend/src/app/features/admin/admin-users.component.ts`
1. **Add the import** alongside the existing core-service imports (lines 10-11
currently import `AdminService` and `NotificationService`):
```ts
import { AuthService, AdminUser } from '...';
```
The `AdminUser` type can be left on the existing `AdminService` import line. We
must add `AuthService` and import only the value (not the type) — `AuthService`
is the singleton provided in `'root'` by `core/services/auth.service.ts`.
The accurate edit is:
- Replace the existing `import { AdminService, AdminUser } from '...admin.service';`
with two separate imports, or add the new import:
```ts
import { AdminService, AdminUser } from '../../core/services/admin.service';
import { AuthService } from '../../core/services/auth.service';
```
2. **Inject the service** alongside the two existing injections (lines ~170-171):
```ts
private readonly admin = inject(AdminService);
private readonly notify = inject(NotificationService);
private readonly auth = inject(AuthService);
```
That is the only change required — the existing `onToggleRole` body already
references `this.auth.currentUser`, `this.auth.applyPeerRoleChange`, and
`this.auth.publishRoleChange`, all of which exist on `AuthService`.
## 3. Verification
- `npm --workspace frontend run build` should pass (no TypeScript errors).
- `npm test` should still pass — the existing pure tests
(`tests/frontend/admin-players.pure.spec.ts`,
`tests/frontend/auth-session-events.spec.ts`,
`tests/backend/admin-players.spec.ts`) are unaffected by adding the
injection.
- No public API, route, store, or service signature changes are required.
## 4. Out of scope
- No backend changes.
- No test additions (the build error is a pure TypeScript declaration
issue; tests already cover the behaviour).
- No re-architecture of cross-tab role-change handling — the previous turn's
implementation is correct, only the missing field declaration is needed.