runnerName used runID[:12], which for a given commit always collapsed to
e.g. `spot-deploy-7fa70fc-depl` — so a single push triggering both
deploy-arikigame and release (both runs-on: deploy), or any same-commit
rerun, registered colliding runner names and confused task routing.
Use the full runID (sha+workflow+ms), sanitised for the runner-name charset.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The dispatcher routed `deploy`-labelled jobs (deploy-arikigame, release) to
invokeLambdaExec → the tinqs-ci-exec Lambda. That Lambda was deleted on
26 May 2026, and EXECUTOR_FUNCTION_NAME was never set, so every deploy job
silently hit the `[DRY RUN] Would invoke executor` no-op and never ran.
DEVOPS.md already states "deploy jobs go through Spot now" — the code just
never followed. Drop the dead `case "deploy"` so `deploy` falls through to
the default Spot path (labelToSpot already maps deploy → t3.micro). Remove
the now-unused invokeLambdaExec, ExecFnName, and awslambda import.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>