On the Blacksmith CI runners two quick same-size writes can share a modification time, and a
stale review page once accepted changed art there
(test_changed_art_reopens_and_requires_deliberate_current_acceptance failed intermittently).
art_rev() now hashes every file by content on main (b622a466); this test keeps it that way by
giving an edited SVG its old timestamp back and checking that the stale page is refused.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Fix large modeled threads and thin crest reconstruction
Helix stations follow the pitch (radial chord error under 1% of it, 48 to
720 stations), and the faceted rebuild retries at the BSP's precision when
the usual weld tolerance collapses a thin crest facet.
Rebased onto main as one commit (the branch's own commits touched UI files
that later moved to #2263 and #2264). Adapted to main's UnitVec3 thread
axis: `*k` in thread_groove and `*cylinder.axis` in the new flange test.
* Fix icon review revisions for same-timestamp edits
On Windows, Git's default core.autocrlf checks the icon masters and the
palette out with CRLF, and `cargo xtask icons` failed four ways:
- the accepted-icon hashes (lint_icons.py and the review page's
review_state.master_hash) were taken over the files' bytes, so every
accepted icon read as changed; both now use master_hash, which hashes
the text with CRLF read as LF;
- icon_palette.revision hashed the bytes while save_colours hashed the
text it read, so every palette save was refused as stale; revision now
reads the text too;
- the tools and their tests read and wrote text in the locale's encoding
(cp1252 can't write U+2194); they now say utf-8;
- the icon inventory listed UI files with backslashes; it writes /.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
On a busy CI machine (several fork jobs under gVisor at once) a web
offline launch took over 90 s and the icon review server took over ~2 s
to answer. Launches now get 240 s and one retry; the review server gets
up to 60 s to start.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>