Skip to content

feat(679): stamp manifest variant + go-live build into play scenario#690

Merged
jonathaneoliver merged 1 commit into
devfrom
feat/scenario-server-build-679
Jun 7, 2026
Merged

feat(679): stamp manifest variant + go-live build into play scenario#690
jonathaneoliver merged 1 commit into
devfrom
feat/scenario-server-build-679

Conversation

@jonathaneoliver
Copy link
Copy Markdown
Owner

What

Part 3 of #677 (split out as #679). Adds the two server-side run-identity fields to the Scenario object from #678manifest_variant (LL/2s/6s) and server_build (which go-live build served the play). Per the design decision: build tag rides go-live's existing X-Served-By header via -ldflags, which the proxy already captures, so no ClickHouse migration — both fields derive from data already on the rows.

manifest_variant (ll | 2s | 6s)

  • find.go surfaces master_manifest_url on the play summary (anyIf non-empty — constant per play).
  • scenario.go derives the variant from its path (/2s/·_2s → 2s, /6s/·_6s → 6s, else LL).

server_build

  • go-live: main.Version (set via -ldflags -X) → api.BuildVersionX-Served-By becomes go-live/<build> (was static go-live). All 11 header sites now call servedBy().
  • Dockerfile: go-live builds with -ldflags "-X main.Version=${VERSION}", reusing the same VERSION build-arg go-proxy already consumes.
  • forwarder: the proxy already captures X-Served-By into network_requests.response_headers; find.go extracts it per play via a server_builds CTE (JSON header parse), and scenario.go strips the go-live/ prefix (empty for un-stamped dev builds).

Plumbed through

forwarder.yaml Scenario (+manifest_variant enum, +server_build) → regenerated harness-cli client → v2-repo.ts Scenario → Sessions.vue scenario chips (variant, build).

Test

  • Table tests for manifestVariant + serverBuild; server-side-fields enrich test.
  • go build/vet/test (forwarder, harness-cli, go-live), vue-tsc, vite build all clean.
  • ldflags injection verified end-to-end (binary prints build "v2.0.0-test" → header go-live/v2.0.0-test).
  • find.go Sprintf verb/arg count re-balanced (17 = 17) after adding the CTE.

Rollout

  • Forwarder rebuild (make analytics-rebuild-forwarder) lights up manifest_variant immediately — derived from existing rows.
  • server_build needs a container rebuild (so go-live starts emitting the stamped header) and then populates for plays served afterward; older plays show no build (correct — that build info wasn't captured at the time).

Closes #679

🤖 Generated with Claude Code

Part 3 of #677 — adds the two server-side run-identity fields to the
Scenario object from #678. No ClickHouse migration: both derive from data
already captured.

manifest_variant (ll | 2s | 6s):
- find.go surfaces master_manifest_url on the play summary (anyIf non-empty);
  scenario.go derives the variant from its path (2s/6s markers vs LL default).

server_build (which go-live build served the play):
- go-live: main.Version (ldflags -X) → api.BuildVersion → X-Served-By header
  becomes "go-live/<build>" (was static "go-live"). All 11 header sites use
  the new servedBy() helper.
- Dockerfile: go-live now builds with -ldflags "-X main.Version=${VERSION}",
  reusing the same VERSION build-arg go-proxy already consumes.
- The proxy already captures X-Served-By into network_requests.response_headers;
  find.go extracts it per play via a server_builds CTE (JSON header parse),
  and scenario.go strips the "go-live/" prefix (empty for un-stamped dev builds).

Plumbed through: forwarder.yaml Scenario (+manifest_variant enum, +server_build)
→ regenerated harness-cli client → v2-repo.ts Scenario → Sessions.vue scenario
chips (variant, build).

Tests: manifestVariant + serverBuild table tests, server-side-fields enrich
test. go build/vet/test (forwarder, harness-cli, go-live), vue-tsc, vite build
all clean. ldflags injection verified (binary prints build "v2.0.0-test").

Rollout: forwarder rebuild lights up manifest_variant immediately (derived
from existing rows); server_build needs a container rebuild (VERSION arg) so
go-live starts emitting the stamped header — populates for plays served after.

Closes #679

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the enhancement New feature or request label Jun 7, 2026
@jonathaneoliver jonathaneoliver merged commit cb70501 into dev Jun 7, 2026
1 check passed
@jonathaneoliver jonathaneoliver deleted the feat/scenario-server-build-679 branch June 7, 2026 23:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant