DeployDefenderComponent.pipelineHealth is an Angular computed() that reads the plain stages: PipelineStage[] array (mutated in place during gameplay). Because the computed has no signal dependencies, it evaluates once and never re-runs when stage health changes.
Impact
HUD pipeline health bar stays at the first-evaluated value (typically 100%) for the whole session after first read.
Wave-complete health bonus (pipelineHealth() * wave) can use a stale value if the computed was primed earlier in the session.
Repro (unit)
Covered by deploy-defender.gameplay.spec.ts — "pipelineHealth computed sticks after first read".
Suggested fix
Track stage health via a signal (e.g. stages = signal<PipelineStage[]>([])) or invalidate a version signal whenever health changes, and read that from pipelineHealth.
## Summary
`DeployDefenderComponent.pipelineHealth` is an Angular `computed()` that reads the plain `stages: PipelineStage[]` array (mutated in place during gameplay). Because the computed has **no signal dependencies**, it evaluates once and never re-runs when stage health changes.
## Impact
- HUD pipeline health bar stays at the first-evaluated value (typically 100%) for the whole session after first read.
- Wave-complete health bonus (`pipelineHealth() * wave`) can use a stale value if the computed was primed earlier in the session.
## Repro (unit)
Covered by `deploy-defender.gameplay.spec.ts` — "pipelineHealth computed sticks after first read".
## Suggested fix
Track stage health via a signal (e.g. `stages = signal<PipelineStage[]>([])`) or invalidate a version signal whenever health changes, and read that from `pipelineHealth`.
Already on master (not part of PR #819). Deploy Defender pipelineHealth already reads a stagesVersion signal, so the HUD recomputes as stages take damage. Closing.
Already on `master` (not part of PR #819). Deploy Defender pipelineHealth already reads a stagesVersion signal, so the HUD recomputes as stages take damage. 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.
Summary
DeployDefenderComponent.pipelineHealthis an Angularcomputed()that reads the plainstages: PipelineStage[]array (mutated in place during gameplay). Because the computed has no signal dependencies, it evaluates once and never re-runs when stage health changes.Impact
pipelineHealth() * wave) can use a stale value if the computed was primed earlier in the session.Repro (unit)
Covered by
deploy-defender.gameplay.spec.ts— "pipelineHealth computed sticks after first read".Suggested fix
Track stage health via a signal (e.g.
stages = signal<PipelineStage[]>([])) or invalidate a version signal whenever health changes, and read that frompipelineHealth.Already on
master(not part of PR #819). Deploy Defender pipelineHealth already reads a stagesVersion signal, so the HUD recomputes as stages take damage. Closing.