Catwalk milestone 3: Chute animations, carried artifacts, code badge
Problem
Artifacts appear at stations via instant fade-in, with no visual connection between producing and consuming stations. The orchestrator moves between stations but carries nothing — there's no visual representation of artifact delivery, fix shuttles, or iteration state.
Context
Milestones 1–2 established the actor system (sprite sheets, animated state transitions, diff-driven updates) and layout engine. The types already include carriedArtifacts: CarriedArtifactConfig[] and codeBadge on OrchestratorConfig, currently unused. CHUTE_DURATION (600ms) is defined. The existing applyDiff() fires all animations simultaneously — M3 requires sequenced choreography.
Solution
Implement a five-step artifact delivery animation using a promise-based choreography queue:
- Produce — artifact fades in at producing station (existing behavior)
- Ascend —
FlyingArtifactActor rises up the origin chute (600ms)
- Pick up — orchestrator shows carried artifact badge, begins walking
- Walk — orchestrator slides to destination station (distance-based)
- Descend + land —
FlyingArtifactActor drops down destination chute (600ms), then auto-removes
This pattern is symmetric: forward delivery (coder → review) and fix shuttle (review → coder) use identical mechanics with reversed direction.
New components:
FlyingArtifactActor — temporary actor with ascend()/descend() returning Promises
OrchestratorActor extensions — setCarriedArtifacts() and setCodeBadge() rendering children that travel with the orchestrator
ChuteChoreographer — promise-based sequencer that chains animation steps from a diff
Code badge: Shows iteration count (v2, v3) below the orchestrator sprite when implementation has been re-entered (iteration > 1). Derived from artifact iteration data in CanonicalRunStatus.
Differ extensions: Add carriedChanged and codeBadgeChanged to OrchestratorDiff.
Acceptance criteria
Catwalk milestone 3: Chute animations, carried artifacts, code badge
Problem
Artifacts appear at stations via instant fade-in, with no visual connection between producing and consuming stations. The orchestrator moves between stations but carries nothing — there's no visual representation of artifact delivery, fix shuttles, or iteration state.
Context
Milestones 1–2 established the actor system (sprite sheets, animated state transitions, diff-driven updates) and layout engine. The types already include
carriedArtifacts: CarriedArtifactConfig[]andcodeBadgeonOrchestratorConfig, currently unused.CHUTE_DURATION(600ms) is defined. The existingapplyDiff()fires all animations simultaneously — M3 requires sequenced choreography.Solution
Implement a five-step artifact delivery animation using a promise-based choreography queue:
FlyingArtifactActorrises up the origin chute (600ms)FlyingArtifactActordrops down destination chute (600ms), then auto-removesThis pattern is symmetric: forward delivery (coder → review) and fix shuttle (review → coder) use identical mechanics with reversed direction.
New components:
FlyingArtifactActor— temporary actor withascend()/descend()returning PromisesOrchestratorActorextensions —setCarriedArtifacts()andsetCodeBadge()rendering children that travel with the orchestratorChuteChoreographer— promise-based sequencer that chains animation steps from a diffCode badge: Shows iteration count (
v2,v3) below the orchestrator sprite when implementation has been re-entered (iteration > 1). Derived from artifact iteration data inCanonicalRunStatus.Differ extensions: Add
carriedChangedandcodeBadgeChangedtoOrchestratorDiff.Acceptance criteria