Skip to content

Replace opacity pulse with sprite-based working animation in catwalk #233

Description

@williamthorsen

Problem

The catwalk uses an opacity sine-wave pulse (0.7–1.0 at 1.5 Hz) to indicate agents in the working state. This reads poorly — it looks like a rendering glitch. The problem is compounded because opacity is already used for state differentiation:

  • idle: 0.3 / resting: 0.6 / deactivated: 0.15 / active: 1.0
  • working pulse minimum: 0.7 (barely distinguishable from resting at 0.6)
  • orchestrator pulse minimum: 0.6 (identical to resting)

Opacity is doing double duty: state identity and activity signaling. These are orthogonal concerns that shouldn't share the same visual channel.

Context

Solution

Replace the opacity pulse with a scale pulse — a subtle "breathing" effect (1.0→~1.08 at 1.5 Hz) that signals activity without conflicting with opacity-based state differentiation.

  • Working agents render at full opacity (1.0) with a gentle scale oscillation
  • Both StationAgentActor and OrchestratorActor share the same scale pulse range (unlike opacity, scale is purely an activity signal and doesn't need per-actor tuning)
  • Scale resets to 1.0 when leaving the working state
  • Opacity-based state differentiation (idle 0.3, resting 0.6, deactivated 0.15) remains unchanged

Acceptance criteria

  • Opacity pulse removed from StationAgentActor and OrchestratorActor during working state
  • Working agents render at full opacity (1.0)
  • Scale pulse (1.0→~1.08 at 1.5 Hz) replaces opacity pulse as activity indicator
  • Both actor types share the same scale pulse constants
  • Scale resets to vec(1, 1) when leaving working state
  • Existing opacity-based state differentiation (idle 0.3, resting 0.6, deactivated 0.15) unchanged
  • Unused opacity pulse constants removed from animation.ts
  • All existing tests pass; pulse-related tests updated to verify scale behavior
  • Typecheck, lint, test all pass

Metadata

Metadata

Labels

featureAdded or improved external functionalityscope:factory

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions