@@ -399,10 +399,22 @@ gate_no_api_prefix() { bun scripts/check-no-api-prefix.ts; }
399399#
400400# Deliberately does NOT run the other four ports: that shells out to mvn/dotnet/uv,
401401# and this lane is `step_if bun` — guarded on bun alone and included in `--quick`, the
402- # documented pre-PR command. The release preflight runs `--check --all-ports`, which
403- # refuses to leave a port out.
402+ # documented pre-PR command. The other four ports are checked by `gate_showcase_all_ports`
403+ # in the heavy tier of the flagless run, and again by the release preflight
404+ # (`--check --all-ports`); both refuse to leave a port out.
404405gate_site_payload () { bun_install && bun test scripts/site && bun scripts/build-site-payload.ts --check; }
405406
407+ # ── the showcase is current in EVERY port, not just ts+sql ────────────────────
408+ # `gate_site_payload` can only afford `--bun-only`, so a change to the python, csharp,
409+ # java or kotlin emitter left the committed showcase stale while the full run stayed
410+ # green, and the first thing to notice was the release preflight (`--check --all-ports`)
411+ # refusing the release cut (#447/#448 value-object null omission). No single CI lane has
412+ # mvn, dotnet and uv together, so this runs in the flagless full run only, which is the
413+ # one place all three coexist; it is absent from `--quick` (bun-only by design) and from
414+ # every `--only` lane. It needs the workspace built (`gate_ts_build_typecheck` earlier in
415+ # the same run) for the reason given above `gate_site_payload`.
416+ gate_showcase_all_ports () { bun_install && bun scripts/regen-showcase.ts --check --all-ports; }
417+
406418# ── the published metamodel reference tracks the registry ─────────────────────
407419# site-reference/ is rendered HTML the site COPIES at deploy — the deploy has no install
408420# step for this repo, so the rendering happens here and the release tag carries the pages.
@@ -924,6 +936,18 @@ else
924936 if want python; then step_if uv " conformance: python" gate_conf_python; fi
925937 if want_any java java-fast; then step_if mvn " conformance: kotlin" gate_conf_kotlin; fi
926938 if want_any java java-slow; then step_if mvn " java-reactor (install)" gate_java_reactor; fi
939+ # Needs all three toolchains at once, which no single --only lane has: flagless run only.
940+ if [ -z " $ONLY " ] && [ " $INTEG_ONLY " -eq 0 ]; then
941+ if have mvn && have dotnet && have uv; then
942+ step " showcase current in all ports" gate_showcase_all_ports
943+ elif [ " $STRICT " -eq 1 ]; then
944+ echo " " ; echo " ✖ showcase current in all ports — needs mvn, dotnet and uv (strict-toolchains)" >&2
945+ FAIL+=(" showcase current in all ports (missing toolchain, strict)" )
946+ else
947+ echo " " ; echo " ── ⊘ showcase current in all ports — SKIPPED (needs mvn, dotnet and uv) ──" >&2
948+ SKIP+=(" showcase current in all ports (needs mvn+dotnet+uv)" )
949+ fi
950+ fi
927951 # Docker integration — full suite when no --only, per-port otherwise.
928952 # --no-integration drops this whole half; --integration-only keeps ONLY it, which is
929953 # why it asks in_lane / in_lane_any (selection) where the checks above ask want.
0 commit comments