test: give an action-matrix design 300 s to load (#812)

Loading a design (from a worker's start or restart to its first output) gets 300 s; each action keeps 90 s. oracle/41-tube-radial-holes (about 23 s here) timed out loading on a loaded CI runner, and reloads after a hung action were charged to the next action.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-13 14:59:36 -04:00
1 parent 3ea8562c5e
commit 6a6a7e2865
2 files changed
+11 -3

No files matched your search

+8 -2
View File
@@ -47,6 +47,10 @@ const SLOW: [&str; 7] = [
const EDIT_SAMPLE: u64 = 6;
/// An action that takes longer than this is recorded as a timeout.
const ACTION_TIMEOUT: Duration = Duration::from_secs(90);
/// Building a design and listing its actions, before the first one runs: the biggest designs
/// (oracle 41's tube with radial holes, about 25 s here) take several times that on a loaded CI
/// runner, and a design that never loads loses all its actions, not one.
const LOAD_TIMEOUT: Duration = Duration::from_secs(300);
/// Caps per body, so one large imported or patterned body cannot dominate the run.
const MAX_FACES: usize = 120;
const MAX_EDGES: usize = 240;
@@ -725,7 +729,9 @@ fn run_design(design: &str, out: &Path, sample: u64) -> Vec<Value> {
.stderr(Stdio::null())
.spawn()
.unwrap();
let mut seen = 0usize;
// Until the child writes, it is loading the design (again, after a restart).
let loaded_at = std::fs::metadata(out).map(|m| m.len() as usize).unwrap_or(0);
let mut seen = loaded_at;
let mut last_change = Instant::now();
let (status, timed_out) = loop {
if let Some(status) = child.try_wait().unwrap() {
@@ -735,7 +741,7 @@ fn run_design(design: &str, out: &Path, sample: u64) -> Vec<Value> {
if n != seen {
seen = n;
last_change = Instant::now();
} else if last_change.elapsed() > ACTION_TIMEOUT {
} else if last_change.elapsed() > if seen == loaded_at { LOAD_TIMEOUT } else { ACTION_TIMEOUT } {
let _ = child.kill();
let _ = child.wait();
break (None, true);
+3 -1
View File
@@ -20,7 +20,9 @@ The test is [`apps/solidcraft-cli/tests/action_matrix.rs`](../apps/solidcraft-cl
`ACTION_MATRIX_JOBS` sets how many designs run at once.
Each design runs in its own process, so an action that hangs (90 s without a result) or aborts is
recorded as `timeout` or `crash` and the rest of the design still runs. None did in this run.
recorded as `timeout` or `crash` and the rest of the design still runs. Loading a design, before
its first action, may take up to 300 s (the largest take several times longer on a loaded CI
runner than here). None did in this run.
Pieces that share a name (`#2`, `~3`) are numbered by where they lie, and the numbers of pieces
lying almost level can swap between runs (#569). The ratchet therefore counts passes per family of