fix(website): recover progress collection and reject broken deployments #258
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!258
Loading…
Reference in a new issue
No description provided.
Delete branch "bibiburl/Longshot:fix/website-progress-recovery"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The live Progress page cannot load data because a website build timed out while collecting Forgejo metadata and still deployed an error-only feed. The next rebuild was blocked by the settings importer rejecting the README's Native HDR wording. This restores website builds and prevents a failed collection from replacing the deployed site.
What changed
graphics-settings.ts: accept the current “with HDR set to Native” condition, retaining the badge and the guard requiring a documented condition for hidden menu rows.progress-request.ts/progress-feed.ts: retry each build-time GET up to three attempts on timeouts, temporary connection failures, HTTP 408/429 and 500/502/503/504. Allow 30 seconds per attempt including the JSON body; wait 1 then 2 seconds, respecting longer Retry-After values up to 30 seconds. Logs identify the endpoint, failure and attempt without response bodies or credentials.check-site.ts: validate the complete generated feed using the browser's existing schema, rejecting the error-only fallback and malformed records before deployment. A valid empty feed remains valid.npm run deploy: run publication checks and website tests before Wrangler, matching the existing Website workflow's gate. Local builds can still show the unavailable-data fallback.Flags and settings
None. No new token, permission, secret or runtime option. The public API remains sufficient. No game settings or defaults change.
Measurements
main:
fbd4202(2026-11-13)this PR: fix/website-progress-recovery @
b124f16Baseline: main @
fbd4202Environment: local Linux, Node v22.23.4 and pinned website dependencies. Deterministic game-free checks; no gameplay or performance claim.
fbd4202b124f16Reproduce:
cd website,npm ci,npm run build,npm run check. For the gate regression,node --test tests/publication.test.tssupplies the error-only response, malformed JSON/records and a valid empty snapshot to the actual publication checker. For the graphics regression, runnode tests/graphics-settings.test.tsagainst each revision. A temporary copy of main's checker accepted the same error-only fixture which this PR rejects.The build duration is one observed run, not a performance comparison. Feed counts change as repository activity changes.
Production evidence:
Testing
Tested: Production static build with live public Forgejo data; 53 website tests across nine files; generated routes, links/assets, anchors and feed schema; deterministic failure/recovery tests;
git diff --check. Both the workflow and npm deployment path runnpm run checkbefore deployment.Not tested: Full
python -I -B tests/run_all.py, game execution, browser rendering or an actual Cloudflare deployment. No runtime code changes. Website publication awaits maintainer review and merge; local tests cannot prove production network availability.Needs other testers: None for code review under the requesting user's emergency website-review preference. After merge, confirm the Website workflow succeeds and
/progress-feed.jsoncontains a valid snapshot; then check that/progress/loads it.Screenshots
No layout changes. This repairs collection and build checks. No screenshots or browser verification claimed; generated data and deterministic regression output provide the evidence above.
Risk and rollback
Transient failures can make builds take longer, with three bounded attempts per request. Persistent failures deliberately stop publication, leaving the existing site in place (which means the currently broken site stays broken until a successful deployment). A legitimate zero-item snapshot is allowed. Reverting this commit restores previous behavior but also restores the broken-feed deployment risk.
Reviewer notes
Review the publication gate and retry classifications first. Credentials are never sent to new destinations; existing pagination checks run before requests, redirects remain disallowed, and private sources are rejected. A stable-release 404 remains a supported no-release state.
This follows the user's existing approval to mark urgent website repairs ready using scoped website validation, without claiming the full runtime suite or screenshots were completed. Unticked template requirements below remain accurate. The paused save-transfer simplification and install-version preview are excluded. No direct deployment or upstream push was performed.
Issues
User-reported live Progress outage; no linked issue.
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above). Not run; scoped website checks used for this urgent website repair.third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.mainand passing here.