Opt-in per workflow via a YAML comment; no comment = unchanged behaviour for
every repo. Marker-less pushes spawn no runner at all (no run queue, no
waste). Added for ariki-game sim-publish-staging (Ozan: deploys are explicit).
Co-Authored-By: Ozan Bozkurt <ozan@tinqs.com>
Co-Authored-By: ZCode GLM-5.3-Flash <agents@tinqs.com>
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>