feat(adt): surface build-gone health on playtest detail + fix ChangeADTBuild persistence - #4
Merged
Merged
Conversation
…DTBuild persistence Surface a gone/undownloadable ADT build on the playtest detail page instead of only at ApproveApplicant time (M5.C C14). Confirmed against live ADT: the downloadUrls issue 404s "build not found" even while the build still appears in ListBuilds, so a membership check is insufficient — IssueDownloadURL is the only faithful signal. - migration 0009: playtest.adt_build_status (OK/UNAVAILABLE, CHECK) + adt_build_checked_at - CheckADTBuild RPC: on-demand probe of IssueDownloadURL, persists health; ignores the fallback URL (a fallback masks a dead build for approval but does not make the build healthy); ErrBuildNotFound -> UNAVAILABLE, ok -> OK - approve / RetryDM record the same health opportunistically via resolveADTDownloadURL, before any fallback masks it - repo: SetADTBuildHealth (does not bump updated_at) writer - admin Distribution tab: build-health Alert + "Check build" button - pth adt build check + smoke dry-run probe; errors.md + cli.md + STATUS_M5 Fix: ChangeADTBuild silently dropped the build change. PgPlaytestStore.Update's SET whitelist omits adt_game_id/adt_build_id, so routing ChangeADTBuild through it accepted the change and no-oped at the DB (the in-UI recovery path was broken). Add a dedicated UpdateADTBuild writer + a real-PgStore integration regression test; the service-layer fake store had masked the bug. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Surface a gone/undownloadable ADT build on the playtest detail page instead of only at
ApproveApplicanttime, and fix a pre-existingChangeADTBuildpersistence bug found while building this.Investigation (confirmed live)
The reported approve 400 (
errorCode=1003303402/ErrBuildNotFound) is accurate. Probing live ADT (develop.blackbox.accelbyte.io):downloadUrls404s "build not found" even though the build still appears inListBuilds— so a list-membership check is insufficient; the faithful signal is the side-effectingIssueDownloadURLcall.Surfacing (persist-at-approve + on-demand check)
playtest.adt_build_status(OK/UNAVAILABLE, CHECK-enforced) +adt_build_checked_atCheckADTBuildRPC: on-demand probe ofIssueDownloadURL, persists health. Ignores the fallback URL (a fallback masks a dead build for approval but doesn't make the build healthy).ErrBuildNotFound→UNAVAILABLE, success→OK; transient ADT errors don't clobber last-known status.resolveADTDownloadURL, before any fallback masks itSetADTBuildHealthwriter (deliberately does NOT bumpupdated_at)Alert+ "Check build" buttonpth adt build check+ smoke dry-run probe;errors.md(4 rows) +cli.md+STATUS_M5C14Bundled bug fix —
ChangeADTBuildsilently dropped the build changePgPlaytestStore.Update's SET whitelist omitsadt_game_id/adt_build_id, soChangeADTBuildaccepted the change and no-oped at the DB — the in-UI recovery path was broken. Its happy-path test passed only because the fake store cloned the whole struct. Now routes through a dedicatedUpdateADTBuildwriter with a real-PgStore integration regression test.Verification
go test ./...green (repo integration ran migration 0009 + new writers)golangci-lint run0 issues;buf lint+ idempotent proto regennpm run buildmake smokePASS (full boot + newadt build checkprobe)🤖 Generated with Claude Code