Stream page goldens hold one width for each id and clock they hide, and the release test quotes the PATH it hands install.sh #129
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "task/3651-streams-spec-ts-and-tail-stream-spec-ts"
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?
Tracker: #3651
Also fixes #3745, which kept this PR's
fullgate from passing on s32.What it delivers
The stream page's goldens (#3651)
The stream page's goldens in
web/e2e/streams.spec.tsandweb/e2e/tail-stream.spec.tsnow render the same whatever the stream's id and however long the run before them took.Cause. The specs'
freezehid the stream id, the task id, the Opened age and the run time withvisibility: hidden. A hidden value still takes its width, and system-ui digits are proportional (Stream #42is 62.58px,#4362.84px,#4762.19px). So:stream-finalized-metadatacloses a stream that the file'sbeforeAllopened. In a normal run that takes under 10 s, and the golden was drawn with a one-digitran Ns. On a loaded host the fact reachesran 10s, which is one digit wider, and Session and Context slide right. Probe 2 below reproduces that diff at exactly the gate's 415 pixels, its first failure.thinking · 0s · 390 tokenscounts the seconds between two requests the test makes. Past 500 ms it reads1s.beforeAllthen files every stream again under new ids. A new id moves thedone(orrunning) chip by a fraction of a pixel. Every later shot that shows the stream header then fails by 1px at the chip. That is the other ten failures. Their slowness follows from failing: a failing shot captures twice and writes its diff and trace. In probe 1 the failing shots took 0.5–1.0 s, against about 0.16 s for a passing one.Fix.
freezemoves intoweb/e2e/stream-fixture.ts, which both specs import. Each hidden value now reads as one fixed value before it is hidden, so it always takes the same width:Stream #0000,#0000), asview-stream.spec.tsalready does;just now;ran 0sorrunning 0s.stream-finalized-metadataalso pins its thinking line's seconds to0sbefore the shot.The release test's PATH (#3745)
tests/step9_release.sxrunsinstall.shon this Mac throughenv -u XDG_CONFIG_HOME HOME=… PATH=…/stubs:$PATH sh -c "…", with$PATHunquoted. A run PATH that holds a directory with a space (s32's holds/Users/agra/Library/Application Support/JetBrains/Toolbox/scripts) splits that assignment at the space, andenvruns the rest as a command:env: Support/JetBrains/Toolbox/scripts: No such file or directory. Three checks ofinstall.shthen fail, sofullfails on s32 for every branch.Fix. The PATH assignment is quoted. The launchctl stub's directory is named with a space, so the check hands
install.sha PATH with a spaced entry on every host, not only on s32. No othersh(...)call in the file splices$PATH.Regressions, fail before and pass after
The stream page's goldens
The goldens of the failing scenes are the regressions. Three scratch probes, none of them committed, recreate the conditions that failed them. Every probe was run on master
3ecd9d1and again at8da18d1:e2e/stream-probe.spec.tsfiles one project, task and stream. Thennpx playwright test e2e/stream-probe.spec.ts e2e/streams.spec.ts e2e/tail-stream.spec.ts.stream-transcript,agy-transcript,stream-progress×2,stream-finalized-metadata,stream-drop×4,stream-tail-http-error,stream-transcript-darkandstream-follow×4. Each diff is at the chip, as in the gate run.follows a running stream through another client's append and close, run with-g.thought(390).thinking · 1s · 390 tokens.The release test's PATH
The changed check in
tests/step9_release.sxis the regression. These arms ran by hand on m5 on 2026-10-24, from the checkout after onescripts/release.sh, with the gate cache's pinned sx. m5's own run PATH holds no entry with a space.3ecd9d1)STEP9 OK, 39 okspaced dirSTEP9 FAIL (3 checks),env: dir:/tmp/…: No such file or directory, the gate job's three install.sh checksSTEP9 FAIL (3 checks),env: bin:/tmp/…: No such file or directorySTEP9 OK, 39 okspaced dirSTEP9 OK, 39 okSo the check now fails before the fix on any host, not only on s32.
Golden set
The following 15 goldens were regenerated in one full run of
playwright.config.ts(chromium, darwin). Each moves only where a hidden id or clock took a different width. No other snapshot changes. The #3745 fix changes no golden.web/e2e/streams.spec.ts-snapshots/:stream-transcript,stream-transcript-dark,agy-transcript,stream-progress-light,stream-progress-dark,stream-finalized-metadata,stream-drop-1280-light,stream-drop-1280-dark,stream-drop-390-light,stream-drop-390-dark,stream-tail-http-error(-chromium-darwin.png)web/e2e/tail-stream.spec.ts-snapshots/:stream-follow-light,stream-follow-dark,stream-follow-phone-light,stream-follow-phone-dark(-chromium-darwin.png)Gates at the head
The head is
95b3d2d, which merges master4bd0747into3ee9597. The merge was clean and leaves the branch's diff byte for byte as review run 478 approved it at3ee9597(git diff 3ecd9d1 3ee9597equalsgit diff 4bd0747 95b3d2d). Master4bd0747carriesfa0995c, the clock-timed tail heartbeat (ec78bde'ssrc/api.sx), which is what thetests/step_concurrency.sxlease check needed. This branch changes nothing insrc/orrunner/, and intests/onlystep9_release.sx.sak-gate fullat95b3d2d(tracker gate run 270), started by the run that made the merge: cancelled at 07:45 EEST, when that run was killed mid-gate along with another run on the same runner.sak-gate fullat95b3d2don runner m5, this run's gate #1 (tracker gate run 273), 07:49–08:13 EEST: failed at its last step only. Every earlier step passed: setup, both sx builds,npm run build(vitest 401/401), the libc grep, everytests/*.sxfile (tests/step_concurrency.sxincluded), the release step withtests/step9_release.sx, the deploy contract, and the main Playwright config (740 passed, 1 skipped, 4.2 min, no golden failed). The runner Playwright config then failed at global setup:sak serve exited with code 1,sak serve never answered on http://127.0.0.1:18988. A session outside the runner's gate queue, reviewing another sak branch in its own checkout, ran the same configs on the same fixed ports at that moment. Its main config failed at 08:11:58 because this gate held 18987. Its runner config then held 18988 from 08:11:58 to 08:12:37 (10 passed), the window in which this gate's runner config tried to start there.sak-gate fullat95b3d2don runner m5, this run's gate #2 (tracker gate run 278), 08:15–08:45 EEST: passed. Every step passed: setup, both sx builds,npm run build(vitest 401/401), the libc grep, everytests/*.sxfile, the release step (vitest 401/401 again inside the release build, thentests/step9_release.sx), the deploy contract, the main Playwright config (740 passed, 1 skipped, 4.6 min, no golden failed) and the runner Playwright config (10 passed).Earlier gates, at
3ee9597(before the master merge)All at
3ee9597on runner m5, 2026-10-24. The head merges cleanly with master6e5e668. This branch changes nothing insrc/orrunner/, and intests/onlystep9_release.sx.sak-gate full, this run's gate #1 (tracker gate run 263), 06:09–06:25 EEST: failed intests/*.sx, only at thetests/step_concurrency.sxcheck "the slot a dropped tail left behind is handed on once its lease lapses" (CONCURRENCY FAIL (1 checks)). Every step before it passed: setup, both sx builds,npm run build(vitest 390/390), the libc grep, and every othertests/*.sxfile. The gate stops at the first failed step, so it never reached the release step or Playwright.UserIsActive 0). The tail's heartbeat counts its polls, so a dropped tail keeps its slot past the check's fixed wait. Its fix isec78bde, which reaches master through PR sx/sak#128.git archivecopies of the head, run side by side with the gate cache's pinned sx: the head as it is failed the check 2 of 2; the head with ec78bde'ssrc/api.sxpassed 2 of 2 (CONCURRENCY OK).scripts/release.shplustests/step9_release.sx: passed (vitest 390/390 inside the release build,STEP9 OK, 39 ok). An earlier attempt during a load spike (one-minute load 18–34) failed in the release build's own vitest, onforce.test.ts"spaces the anchors after an in-session grow…" at 6665 ms against 5 s. That is #3731.bash tests/deploy_contract.sh: passed.npx playwright test(main config, no snapshot update): 723 passed, 1 skipped, in 8.1 min on a loaded host against its usual 3.6–5. No golden failed.npx playwright test -c playwright.runner.config.ts: 10 passed.Earlier, at
8da18d1(the golden fix alone)Review run 428 approved
8da18d1. The flow's gate step then failed three times, each outside this diff: job 76 on #3731, job 78 on #3734, and job 82 (s32) on #3745, which the second commit fixes. By hand at8da18d1on s32, the main Playwright config passed three times (723 passed, 1 skipped), with no golden failing.Stream page goldens hold one width for each id and clock they hideto Stream page goldens hold one width for each id and clock they hide, and the release test quotes the PATH it hands install.shtests/step9_release.sx ran install.sh through `env ... PATH={}/stubs:$PATH sh -c ...` with the PATH unquoted. A run PATH that holds a directory with a space split that assignment, and env ran the rest as a command, so three install.sh checks failed. s32's run PATH holds "Application Support", so the full gate failed there for every branch. The assignment is quoted, and the launchctl stub's directory is named with a space, so the check hands install.sh a spaced PATH entry on every host. Tracker: https://sak.swipelab.com/tasks/3745