Commit Graph

7 Commits

Author SHA1 Message Date
Jordan Ritter b64058a270 fix(showcase): domainFor scheme guard checks :// not startsWith http 2026-05-29 11:45:12 -07:00
Jordan Ritter 262007d808 feat(showcase): flip the five Phase-2 services into the image-ref gate
Flip dashboard, docs, dojo, shell, and harness from
gateValidated: false to gateValidated: true and simultaneously add
the corresponding repoNameOverride for both envs:

  dashboard -> showcase-shell-dashboard
  docs      -> showcase-shell-docs
  dojo      -> showcase-shell-dojo
  shell     -> showcase-shell
  harness   -> showcase-harness

These two halves MUST land in the same commit. Flipping
gateValidated without the override would make the gate look up
ghcr.io/copilotkit/<railway-name> (e.g.
ghcr.io/copilotkit/dashboard:latest) which does not exist — the
gate would fail on first run. Adding the override without flipping
gateValidated is dead code: main() short-circuits unvalidated
services before consulting the override. Only the union is correct.

Also remove the Phase-2 deferral comments and refresh the
ServiceEntry.gateValidated JSDoc — there are no Phase-2 holdouts
left. All 27 services are now gate-validated; gateIgnore remains
the sole escape hatch and is unused by every current entry.
2026-05-29 11:45:05 -07:00
Jordan Ritter 4edc41ca17 feat(showcase): add gateIgnore opt-out field to ServiceEntry SSOT
Widen `ServiceEntry` with an optional `gateIgnore: boolean` field
(default false / unset) so the image-ref gate can deliberately exclude
a Railway service from BOTH coverage-direction checks. No behavioural
change in this commit; the field is consumed by the next commit which
flips the Railway->SSOT direction from warn-only to hard-fail.

Stub-export `findUntrackedServices` from verify-railway-image-refs so
the unit test for the new direction can compile. Behavioural wiring
into main() lands in the next commit.

Adds verify-railway-image-refs.test.ts with the first unit tests
covering the new field surface and the helper contract.
2026-05-29 11:45:05 -07:00
Jordan Ritter 2a11edeb7e feat(showcase): add per-env domains + probe config to railway-envs SSOT
Adds Domains, ProbeDriver, ProbeConfig types + domainFor() helper that
throws on unknown service/env. Populates domains.{staging,prod} and
probe.{staging,prod,driver} on every SERVICES entry. Adds
emit-railway-envs-json.ts to serialize the SSOT for the Ruby side and
the workflow consumers.

Refs spec §3 / §3a.
2026-05-29 11:45:04 -07:00
Jordan Ritter 5f6bbb593a feat(showcase): enforce dispatchName uniqueness invariant on SSOT load
serviceForDispatchName iterates Object.entries(SERVICES) and returns the
first match — a silent dispatchName collision would route a redeploy to
whichever entry happens to iterate first. We now fail loud at module load
via assertDispatchNamesUnique(), and ship synthetic-input tests proving the
invariant fires on a real collision (and stays quiet for entries without a
dispatchName, which is legitimate for out-of-band services).

[BLITZ:L3-wf] E-7a/E-7b wiring.
2026-05-29 11:45:04 -07:00
Jordan Ritter 1a51fb1316 feat(showcase): add webhooks dispatch entry to build + verify workflows
Adds 'webhooks' as a workflow_dispatch choice in both showcase_build.yml
and showcase_deploy.yml so humans can redeploy/verify the webhooks service
on demand. webhooks' GHCR image (showcase-eval-webhook) is built by a
separate release workflow in the showcase-eval-webhook repo, so:

  - paths-filter uses a sentinel that cannot match any in-tree path,
    keeping push-driven runs from ever including webhooks.
  - The build matrix entry carries skip_build: true; the Build and push
    step skips the Depot build for that slot. The per-slot result still
    publishes (job.status == success) so the redeploy path proceeds and
    redeploy-env.ts picks the existing :latest from GHCR.

The SSOT entry in railway-envs.ts gains dispatchName: 'webhooks' so the
forward/reverse round-trip tests cover it. New tests pin that the SSOT
dispatchName is mirrored in both workflow files' dispatch choice lists
AND ALL_SERVICES JSON.

[BLITZ:L3-wf] E-6a/E-6b/E-6c/E-6d wiring.
2026-05-29 11:45:04 -07:00
Jordan Ritter e08051c79c feat(showcase): add railway-envs SSOT for env/service IDs and image helpers
Single source of truth mapping SSOT service keys to Railway service/env IDs,
dispatchName values, ciBuilt/gateValidated flags, and per-env repo-name overrides
(aimock and pocketbase/webhooks map to their showcase-* wrapper repos in both envs).
Adds dispatchName round-trip + workflow YAML forward-guard tests.
2026-05-29 11:45:01 -07:00