Polish catwalk M3: chute alignment, error visibility, and mapper test gap
Follow-up items deferred from #184 (Catwalk milestone 3). All are low-severity polish — no functional bugs.
Items
T1: Chute endpoint ignores real agent count
findStationChuteEndpoints (now inlined in chute-choreographer.ts) always uses slot 0 / agentCount 1, regardless of how many agents are actually at the station. At stations with multiple agents (e.g., two parallel reviewers), the actual chute positions are computed using the real agent count, which shifts chute X positions. The flying artifact animates along a slightly different X position than any visible chute, producing a misaligned visual.
Fix: Thread the real agent count and slot through to the layout.chuteEndpoints() call sites in choreographDelivery, or receive the agent count from refs or config.
T2: noop catch on actor animation promises suppresses all rejection reasons
The .catch(noop) handlers on flyer.ascend(), flyer.descend(), and orchestrator.animateMoveTo() in chute-choreographer.ts are documented as guarding against killed-actor errors, but they also suppress unexpected rejections (e.g., Excalibur API changes, programming errors in the action chain). The outer scene-level catch block (CatwalkScene.ts) now logs errors and recovers, providing defense-in-depth.
Fix: Replace noop with a handler that logs unexpected errors while still swallowing the known killed-actor case — e.g., check the rejection message/type and log anything that doesn't match the expected pattern.
T3: Missing boundary test for buildCarriedArtifacts at highest station index
The existing tests cover stationIndex === 0 (no previous station) and stationIndex === 1 (planning → architecture). There is no test for the case where the orchestrator is at the highest numbered phase (e.g., review) and artifacts exist at every prior station — specifically the fix-shuttle path where the orchestrator moves right-to-left.
Fix: Add a test with the orchestrator at the review station (rightmost non-absent station) where an artifact exists two stations back, confirming the reverse scan returns the correct artifacts for the fix-shuttle scenario.
Polish catwalk M3: chute alignment, error visibility, and mapper test gap
Follow-up items deferred from #184 (Catwalk milestone 3). All are low-severity polish — no functional bugs.
Items
T1: Chute endpoint ignores real agent count
findStationChuteEndpoints(now inlined inchute-choreographer.ts) always uses slot 0 / agentCount 1, regardless of how many agents are actually at the station. At stations with multiple agents (e.g., two parallel reviewers), the actual chute positions are computed using the real agent count, which shifts chute X positions. The flying artifact animates along a slightly different X position than any visible chute, producing a misaligned visual.Fix: Thread the real agent count and slot through to the
layout.chuteEndpoints()call sites inchoreographDelivery, or receive the agent count fromrefsorconfig.T2:
noopcatch on actor animation promises suppresses all rejection reasonsThe
.catch(noop)handlers onflyer.ascend(),flyer.descend(), andorchestrator.animateMoveTo()inchute-choreographer.tsare documented as guarding against killed-actor errors, but they also suppress unexpected rejections (e.g., Excalibur API changes, programming errors in the action chain). The outer scene-level catch block (CatwalkScene.ts) now logs errors and recovers, providing defense-in-depth.Fix: Replace
noopwith a handler that logs unexpected errors while still swallowing the known killed-actor case — e.g., check the rejection message/type and log anything that doesn't match the expected pattern.T3: Missing boundary test for
buildCarriedArtifactsat highest station indexThe existing tests cover
stationIndex === 0(no previous station) andstationIndex === 1(planning → architecture). There is no test for the case where the orchestrator is at the highest numbered phase (e.g., review) and artifacts exist at every prior station — specifically the fix-shuttle path where the orchestrator moves right-to-left.Fix: Add a test with the orchestrator at the review station (rightmost non-absent station) where an artifact exists two stations back, confirming the reverse scan returns the correct artifacts for the fix-shuttle scenario.