Proof runs for #236 (not for merging) #237

Closed
kayg wants to merge 7 commits from issue/11-proof-4 into dev
Owner

Not for merging. It proves #236: the same commits on dev at dff1833, before dev went red for reasons outside #236 (a deterministic pwa-update.spec.ts failure from #164, and cargo fmt in crates/notes/src/tests.rs). It's here to get three green web runs in a row while the agents build. The runs and their numbers go on #11. Closed once that's done.

🤖 Generated with Claude Code

https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T

Not for merging. It proves #236: the same commits on dev at `dff1833`, before dev went red for reasons outside #236 (a deterministic `pwa-update.spec.ts` failure from #164, and `cargo fmt` in `crates/notes/src/tests.rs`). It's here to get three green web runs in a row while the agents build. The runs and their numbers go on #11. Closed once that's done. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
The browser tests failed on every PR, the same tests on a commit that
was green before. Measured causes, and what changed:

- CI had no priority. Job containers sat in system.slice at the same
  weight as all the agents (user-1001's CPUWeight=20 is the only slice
  under user.slice, so it changed nothing). Now every job container is
  in ci.slice (weight 1000, ci/host/ci.slice; the runner passes
  --cgroup-parent=ci.slice).
- WebKit composites the glass with Mesa's software GL in the container.
  Each shader is compiled on first use on the compositor's one thread:
  a page's first frame took ~9 s at 1440, whatever the cores. The shader
  cache now lives in a volume kept between runs (~2.5 s warm).
- Four workers on CI instead of six, WebKit 1440 at two at a time, and
  the CPU-throttled layout checks (@throttled) alone after the rest.
- The settings tests get their own server and person: flipping the
  theme of the shared person repainted every other test's pages.
- Test bugs a busy machine exposed: the shortcut helper read a
  modifier's or an earlier key's answer; ⌘⇧; was checked in today's
  note, which other tests log into too; fixed sleeps before measuring
  are now still(), which waits for animations to end.
- Every server (web, primitives, mockup) listens on a port the system
  picks, so runs side by side never collide or reuse another run's
  server; the app is built once per run instead of four times at once.

ci/README.md has the host setup and the numbers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Two web jobs at once split CI's share between eight browsers, and
WebKit's software drawing slowed until toasts timed out before they
could be clicked (run 107 of #147). A second runner with the label web
and capacity 1 takes only the web job; rust stays on the main runner, so
a web job never waits for a rust job that can't start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Web e2e: the contrast check waits for a still screen, not 250 ms (#11)
Some checks failed
CI / rust (pull_request) Failing after 24s
CI / web (pull_request) Failing after 11m3s
08da50e230
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Web e2e: the contrast check gets a person of its own; WebKit 1440 one at a time (#11)
Some checks failed
CI / web (pull_request) Successful in 9m52s
CI / rust (pull_request) Failing after 24s
7a6979735c
The contrast check photographs the lists, and other tests adding notes
moved the rows between finding the words and taking the picture (#159,
run 110: ratios of 1.4 for ordinary titles). It now runs on its own
server, like the settings tests; the server comes from the project's
metadata. WebKit 1440 frames with the glass open took 1-3 s each on a
busy machine, and two at once starved each other: one at a time, a test
averages 10 s instead of 16 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
CI: one WebKit test at a time per width; CPU time in the cost guard; one job per runner (#11)
Some checks failed
CI / web (pull_request) Failing after 17m25s
CI / rust (pull_request) Failing after 13s
2ad402fa80
WebKit 1440 alone still met three WebKit 390 workers: four software-drawn
browsers at once, and the first WebKit 1440 test ran out of time twice
(#177). Now one per width, and one in the primitives. hidden-cost.test.ts
timed buildHidden by the wall clock, which on a busy machine also counts
waiting for a core; it now measures CPU time. The main runner takes one
job at a time, and both runners finish running jobs on a restart
(ci/host/graceful.conf).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
CI: the web job waits for a queued rust job, and stops at once on a failed build (#11)
Some checks failed
CI / web (pull_request) Failing after 42m36s
CI / rust (pull_request) Failing after 34s
719510a019
Two proof runs failed waiting 15 minutes for a rust job still queued
behind other runs' jobs. The web job now waits up to 40 minutes, and the
rust job leaves a build-failed mark so a broken build ends the wait at
once. The web job's container outranks the rust build inside ci.slice
(--cpu-shares on the web runner, weight 532 to 100); the main runner
stays at two jobs so a run's rust job can always start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
CI: a server job the web job needs; job timeouts (#11, proof branch)
Some checks failed
CI / server (pull_request) Successful in 23s
CI / rust (pull_request) Failing after 8s
CI / web (pull_request) Has been cancelled
7e87e396ab
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Author
Owner

Replaced by #260: needs never schedules the web job on this forge, so the web job waits for the server job's binary again. The forge ignores pushes to an open PR.

Replaced by #260: `needs` never schedules the web job on this forge, so the web job waits for the server job's binary again. The forge ignores pushes to an open PR.
kayg closed this pull request 2026-10-14 11:54:40 +00:00
Some checks failed
CI / server (pull_request) Successful in 23s
CI / rust (pull_request) Failing after 8s
CI / web (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal!237
No description provided.