Build Packages / Create release (push) Successful in 8s
Build Packages / build:portable:macos-arm64:nocuda (push) Successful in 4m41s
Build Packages / build:rugnux:linux-aarch64:cuda (push) Successful in 10m26s
Build Packages / build:portable:linux-x86_64:nocuda (push) Successful in 14m57s
Build Packages / build:portable:linux-x86_64:cuda (push) Successful in 20m13s
Build Packages / build:portable:windows-x86_64:nocuda (push) Successful in 21m50s
Build Packages / build:jfjoch:ubuntu2204:nocuda (push) Successful in 21m52s
Build Packages / build:portable:windows-x86_64:cuda (push) Successful in 26m23s
Build Packages / build:jfjoch:rocky8:nocuda (push) Successful in 26m53s
Build Packages / build:jfjoch:rocky9:nocuda (push) Successful in 28m4s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 31m16s
Build Packages / build:jfjoch:ubuntu2404:nocuda (push) Successful in 22m48s
Build Packages / Generate python client (push) Successful in 27s
Build Packages / Build documentation (push) Successful in 1m13s
Build Packages / build:jfjoch:rocky8:cuda-sls9 (push) Successful in 24m45s
Build Packages / build:jfjoch:rocky9:cuda-sls9 (push) Successful in 26m47s
Build Packages / build:jfjoch:rocky8:cuda (push) Successful in 25m38s
Build Packages / build:jfjoch:ubuntu2204:cuda (push) Successful in 20m38s
Build Packages / build:jfjoch:rocky9:cuda (push) Successful in 26m1s
Build Packages / build:jfjoch:ubuntu2404:cuda (push) Successful in 22m18s
Build Packages / Unit tests (push) Successful in 1h32m38s
Build Packages / Validation Battery (push) Successful in 42m36s
Validation reads of the final merge only its French-Wilson amplitudes, which the analyses made last, from the anisotropy tensor. That tensor is a fit to the merged intensities alone (the unmerged observations only give its error bar), so AnisotropyPriorHKL computes it from the merge without the rest of the analysis, bit for bit what AnisotropyTensorHKL of the full analysis gives (test). The first ValidateAgainstModel now runs from the start of the analyses on a copy of the merge given those same amplitudes, on the caller's card (get_gpu), with its log held and replayed where it was printed before; nothing it decides is acted on earlier. The model's preparation (census wait, indexer pool, GPU hold, merge engine release) moves with it. Measured, --simulate-live 10 --fast-live, 4axt model, RTX 5080, analyses + validation steps: strong lysozyme 0.91 -> 0.63 s, reference lysozyme 1.02 -> 0.66 s (validation beside the analyses 0.60-0.62 s vs 0.39-0.45 s alone, CPU shared; analyses 0.53 -> 0.62 s). The analyses were 80% waiting for the anisotropy (0.43 of 0.53 s), so starting on the full analysis' tensor would have gained ~0.1 s. p.hkl, p_maps.mtz identical, p.mtz data identical, all validation numbers identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4