0.1.0: the base image, the lockfile, and a README that is true - #109
Merged
Conversation
A Documentation section near the top, linking the sections of docs.algojudge.pl that document this repository rather than the site's front page, and saying which reader each half is for: the site is written for somebody without this source open, and the README is the other half. The Related repositories bullet no longer repeats which sections those are, so the fact lives in one place.
Every claim verified 2026-09-07. The check list was two scripts short, the branch does not sit on main, and the toolchain and audit readings had no place in the file at all.
nginx:1.27-alpine last built 2025-04-16; 1.30-alpine is the stable line.
npm update only; package.json unchanged. Closes the one moderate advisory.
ESLint 10 not 9, ten check scripts not eight, and the example points at http://localhost:5171.
ContentView is a lazy import; a fixed 1500 ms loses under load.
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.
Everything 0.1.0 needs from this repository, and nothing else. The version was
already
0.1.0inpackage.json,package-lock.jsonand both README examples;what follows is what the runbook's checklist turned up when it was actually run.
The base image had stopped being built
Dockerfileserved fromnginx:1.27-alpine, whose last build on Docker Hub was2025-04-16 — seventeen months of nginx patches and Alpine package updates
that never reached it, while
docker pullkept working the whole time. It isalso the only stage of this image with system packages in it, since the second
stage is
dist/copied in.Now
nginx:1.30-alpine: the stable line, rebuilt 2026-09-03. nginx numbers evenminors stable and odd ones mainline.
AlgoJudge-Ops(NGINX_TAG:-1.27-alpine) andAlgoJudge-Docs(1.29-alpine)are stale the same way. Each is its own release's step, and
docs/RELEASE.mdsays so rather than leaving it implied.
Sixteen packages, inside the ranges they already had
npm updateand nothing else: Mantine 9.5.2 → 9.6.0 across all five,@playwright/test1.62.1 → 1.63.0, ESLint 10.9.1 → 10.10.0,@typescript-eslint/*8.68.0 → 8.70.0,@types/react-dom, i18next and its twoneighbours, katex, postcss,
eslint-plugin-react-refresh.package.jsondid not move, which is what makes it a refresh rather than adecision.
npm auditreads zero at every severity afterwards, against onemoderate before it (GHSA-p498-v437-472g,
@humanfs/nodethrougheslint, in thedevelopment tree, never in the image).
Two majors are deliberately not here — TypeScript 7 and
markdown-it-anchor10. Both move a range in
package.jsonand need the whole gate again; nothing ispublished yet, so there is no installation to protect by taking them today.
The README was wrong in three places
ESLint 9against 10.10.0 installed.CLAUDE.mdcarried the same sentence.check:scripts thebuildjob runs:check:languagesand
check:rankingwere missing, so the gate a reader trusted was shorter thanthe one that blocks a merge.
https://localhost:7004;.env.examplehas pointed athttp://localhost:5171since 9d40088. The schemeis not cosmetic — the session cookie is
SameSite=Laxand a browser counts thetwo as different sites, so an HTTP page against an HTTPS API cannot sign in at
all.
Checked and correct, so left alone: sixteen screens in the manager panel is the
number of
managerRoutecalls insrc/App.tsx; port 5173; theTechnologyversions; the four build-time and two runtime variables; and the related
repositories.
README.mdalso states the Node rule now, rather than "24 or later".One flaky check, fixed as a race
verify-activity.mjsasserted the organiser's document was on screen after afixed
wait(1500).ActivityPagereachesContentViewthroughlazy(() => import(...)), and the dev server transforms that chunk the firsttime it is asked for — so the wait is a bet, and it loses under load. It failed
once in a full run (four scripts at a time) and passed 5/5 alone.
It now polls, with a ten-second ceiling, and ends in the same assertion. Proved
by sabotage: with both the poll and the assertion pointed at text no page
contains, the script fails after ten seconds rather than hanging or passing.
The runbook
docs/RELEASE.mdgains what this pass needed and did not have:reads when a tag was last built, because a tag that still resolves is not a tag
anybody still maintains.
drifted here, and how to check each. The old checklist read two
docker pulllines and would have passed a README wrong about everything else.
.nvmrc,enginesandthe
Dockerfiletogether. Node 24 qualifies until 2026-10-20..envreadings, retaken on 2026-09-08. The.envinhistory (
76f259c, untracked in836c451) holds twoVITE_APP_*keys and nothird — looked at rather than assumed.
Evidence
npm ci,lint,lint:deps,typecheck,buildand all tencheck:scriptsgreen on the refreshed tree.
npm run check:uiin full: 51 passed, 1 failed—
sign-in-redirect, which fails on any checkout holding a.envthatconfigures a real API origin, because
providerChallenge.tsbuilds the challengeaddress from it. CI has no
.env; thebrowser-checksjob on this pull requestis the reading that counts.