chore: sync upstream (23 Commits) #9

Merged
alf merged 23 commits from chore/sync-upstream-20261023 into main 2026-10-23 19:01:05 +00:00
Owner

Upstream-Sync von upstream/main (23 Commits). Fast-Forward.

  • 23584c0e CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204)
  • 7e49932c GPU tests: pass on Mesa lavapipe (boundary flips, skip the Reshape case that crashes it); cargo fmt (#2239)
  • 89b8db77 Footage, Lottie and models: resolve stored paths with craft-docpath's resolve_absolute (#1975)
  • 5a027fa7 Packaging: pin the signing client and appimagetool, and check their hashes (#1976)
  • 0173abde CI: dev-profile gate, one test binary per crate, nextest, line tables only (#2235)
  • f6ef1a79 Use chrono instead of hand-rolled UTC conversion (#2023)
  • 49d17973 packaging: use [[ tests, named locals and explicit returns (SonarCloud S7688/S7679/S7682) (#2187)
  • bd3ae8ab xtask: use unique temporary directories for bench tests (#2196)
  • dd325c7a segment: bound checkpoint tensors and pickle work (#2192)
  • 250b3417 Merge pull request #2218 from dylanmtaylor/sonar/checker-stat
  • 0c8d47f4 fix: suppress the stat check's taint finding (SonarCloud)
  • 9b735dc6 Merge pull request #2217 from dylanmtaylor/sonar/checker-path-safety
  • c75071df fix: document the AE checker's operator-supplied CLI path (SonarCloud)
  • 16c30830 Merge pull request #2215 from dylanmtaylor/sonar/nosonar-placement
  • 400fbb79 fix: put the NOSONAR marker on the spawnSync line (SonarCloud)
Upstream-Sync von `upstream/main` (23 Commits). Fast-Forward. - 23584c0e CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) - 7e49932c GPU tests: pass on Mesa lavapipe (boundary flips, skip the Reshape case that crashes it); cargo fmt (#2239) - 89b8db77 Footage, Lottie and models: resolve stored paths with craft-docpath's resolve_absolute (#1975) - 5a027fa7 Packaging: pin the signing client and appimagetool, and check their hashes (#1976) - 0173abde CI: dev-profile gate, one test binary per crate, nextest, line tables only (#2235) - f6ef1a79 Use chrono instead of hand-rolled UTC conversion (#2023) - 49d17973 packaging: use [[ tests, named locals and explicit returns (SonarCloud S7688/S7679/S7682) (#2187) - bd3ae8ab xtask: use unique temporary directories for bench tests (#2196) - dd325c7a segment: bound checkpoint tensors and pickle work (#2192) - 250b3417 Merge pull request #2218 from dylanmtaylor/sonar/checker-stat - 0c8d47f4 fix: suppress the stat check's taint finding (SonarCloud) - 9b735dc6 Merge pull request #2217 from dylanmtaylor/sonar/checker-path-safety - c75071df fix: document the AE checker's operator-supplied CLI path (SonarCloud) - 16c30830 Merge pull request #2215 from dylanmtaylor/sonar/nosonar-placement - 400fbb79 fix: put the NOSONAR marker on the spawnSync line (SonarCloud)
alf added 23 commits 2026-10-23 19:01:04 +00:00
* ui: bound queued synthetic input gestures

* ui: reserve exact click event count
* text: bound layout and variable font metadata

* text: address review (intern once, f64 prefix sums, bounded item search, name fallback, consistent variation fallback)
* pdf: bound image sample and mask allocations

* pdf: fallible mask allocations and JPEG header pixel cap
* roto: bound frozen matte decoding and serialization

* roto: address review (fallible RLE growth, pre-check plane bytes, saturate 32-bit limits)
* expr: bound rewrite expansion and preserve assignment targets

* expr: bound rewritten output size and rewrite computed assignment targets
Resolve the argument and require a regular file before spawnSync, which
never uses a shell and only runs fixed binaries or that validated path.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
fix: validate the CLI path in the AE ease checker (SonarCloud jssecurity:S8705)
Sonar applies NOSONAR to the line that carries the marker, so the
explanation above the call did not suppress anything.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
fix: put the NOSONAR marker on the spawnSync line (SonarCloud follow-up)
The path is the developer's own CLI build, stat'ed as a regular file before
use; suppress the taint finding with that reasoning.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
fix: document the AE checker's operator-supplied CLI path (SonarCloud)
The stat is the validation that rejects anything but an existing regular
file; annotate it with that reasoning.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
fix: suppress the stat check's taint finding (SonarCloud)
* segment: bound checkpoint tensors and pickle work

* segment: bound entry size, memo clones, and total tensor elements

* segment: cap cumulative decompressed storage bytes
Switch the bash packaging scripts from [ to [[ for conditional tests,
give positional parameters descriptive local names, and end the shared
env.sh helpers with an explicit return. No behaviour change: every
comparison is against a literal, and a bare return keeps the last
command's status.
* Use chrono for UTC/calendar conversion instead of hand-rolled copies

Replaces the hand-rolled civil_from_days / days_from_civil copies (log
timestamp, ISO metadata dates, Align Video to Data timestamp parsing, the
Numbers effect's date, the Home and Render Queue date columns, and the
benchmark report date) with chrono as a workspace dependency. Output formats
are unchanged and pinned by the existing tests. AGENTS.md now says time goes
through chrono.

Follow-up to storytold/cadcraft#1785

* Keep 5-digit years unprefixed; derive Numbers weekday from the same date

chrono's %Y writes a '+' before years past 9999, where the old code wrote
{y:04}. timestamp, iso_date, format_utc, utc_stamp and xtask's utc now write
the year with {:04} again and let chrono format the rest, so a far-future
clock keeps the plain zero-padded year.

date_from_days took its weekday from the raw input modulo while the
year/month/day fell back to the epoch for day counts outside chrono's range,
so an unrepresentable count printed a fallback date paired with the input's
weekday. The weekday now comes from the same resolved date, so both agree.

Tests cover the year-10000 timestamp and the out-of-range Numbers date.

* Keep the whole date in format_ago for five-digit years

format_ago cut format_utc to 10 bytes, so a year past 9999 lost its last
digit (10000-01-0). Take the date up to the space instead. Tested.

* Keep Numbers dates exact past chrono's range

date_from_days converted the day count by building a Unix timestamp and
calling DateTime::from_timestamp, which falls back to the epoch (and so
reads 1970-01-01, a Thursday) once the date leaves chrono's NaiveDate
range near year ±262143. Numbers' `value` slider is a plain scalar with
no range guard, so a keyframed count reaches that: Long Date of
100_000_000 showed "Thursday, January 1, 1970" instead of the real
"Monday, September 13, 275790" -- exactly the plausible unrelated-date
fallback the review rejects, and the derived weekday matched the stand-in
date, not the input.

Route it through the 400-year Gregorian cycle like pdfcraft 9d4cb3ca:
chrono converts the day within one cycle (num_days_from_ce of the rebased
rest, always in range) and the whole cycles are added back as years, in
i128 so i64::MIN/MAX can't overflow. chrono stays the only calendar
logic. The weekday still comes from the resolved date, so it always
agrees with it.

Tested: date_from_days_past_chrono_range pins the pre-chrono dates and
weekdays at/over chrono's bound on both sides of the 2000-01-01 epoch
(and that the extremes don't overflow); numbers_formats adds the same
through the public numbers_text entry (Long/Short Date). cargo test
-p effectcraft-effects, fmt --check and clippy -D warnings all clean.

* time: preserve out-of-range years instead of the epoch

`DateTime::from_timestamp(..).unwrap_or_default()` changed the existing output:
inputs the old hand-rolled civil-from-days converted (e.g. `10_000_000_000_000`
s → 318857-05-20 17:46:40) collapsed to the epoch. Restore the old conversion
domain with a cycle-based helper: reduce by whole 400-year Gregorian cycles
(146_097 days), convert the in-range remainder with chrono, and carry the year
back as i128 (saturating to the output type). Only the year leaves chrono's
range; month, day and time of day stay exact. chrono remains the only calendar
logic (NaiveDate::from_num_days_from_ce_opt); no new features.

Sites (UTC):
- crates/engine logging.rs `timestamp` (u64 ms): far-future clock keeps its year.
  10e12 s → "318857-05-20T17:46:40.000Z", u64::MAX ms → "584556019-04-03T14:25:51.615Z"
  (was "1970-01-01...").
- crates/engine media_browser.rs `iso_date` (u64): 10e12 s → "318857-05-20T17:46:40Z",
  u64::MAX → "584554051223-11-09T07:00:15Z".
- crates/ui-egui panels/home.rs `format_utc` (i64): 10e12 → "318857-05-20 17:46",
  i64::MIN → "-292277022657-01-27 08:29".
- crates/ui-egui panels/render_queue.rs `utc_stamp` (u64): 10e12 → "318857-05-20
  17:46:40", u64::MAX → "584554051223-11-09 07:00:15".
- xtask bench.rs `utc` (u64): 10e12 → "318857-05-20 17:46 UTC", u64::MAX →
  "584554051223-11-09 07:00 UTC"; added a test.

* Name the 400-year range extension as the one exception to the time rule

The rule said never to hand-roll calendar math, but the range fix
(shifting by whole 400-year Gregorian cycles so dates past chrono's year
range keep their old output) is cycle arithmetic, so the rule and the code
disagreed. The rule now names that exception: the library still computes
month, day and time, and only whole cycles are carried in the year.

* Say the library computes month and day; time-of-day is plain arithmetic

Narrows the range-extension wording: the date library computes the
calendar fields, and splitting seconds into hours, minutes and seconds
is ordinary arithmetic, which is what the code does.
* Dev profile: line tables only for workspace crates, no debug info for dependencies

* xtask ci: dev-profile gate, nextest, tests without examples, wasm --keep-going

* One integration-test binary per crate

* xtask ci: run effectcraft-gpu's shared-device tests in one cargo test process

* xtask ci: run every stage and report all failures

* xtask ci: name the stage type (clippy type_complexity)

* xtask ci: run every test pass and report all failures

* cargo fmt
* Packaging: pin the Windows signing client and check its hash

* Packaging: pin appimagetool and check its hash

* Reject AppImage download for architectures without a pinned appimagetool

* Pin the AppImage runtime
* Footage: use resolve_absolute for stored paths

* Lottie and models: use resolve_absolute for linked files

* CI: release only with git dependencies from storytold

* Use the shared git-sources check and pin checkout in release.yml

* Resolve a model's side files through resolve_absolute; report C:\x as invalid

* CI: parse cargo config, including the legacy .cargo/config, in the git-sources check
* cargo fmt

* GPU tests: llvmpipe on Vulkan gets the boundary-flip allowance; skip the Reshape boundary cases that crash lavapipe (#2238)

* GPU tests: the llvmpipe boundary-flip allowance is an opt-in of the two tests that need it
CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204)
Some checks failed
ci.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (push) Failing after 0s
nix.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (push) Failing after 0s
packaging-lint.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (push) Failing after 0s
sonarcloud.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (push) Failing after 0s
ci.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (pull_request) Failing after 0s
nix.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (pull_request) Failing after 0s
packaging-lint.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (pull_request) Failing after 0s
sonarcloud.yml / CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2204) (pull_request) Failing after 0s
23584c0e23
ci.yml is new: it calls the shared workflow (cached apt packages, nextest, main-only cache saves, Cargo.lock check). FreeBSD runs nightly and on pushes to release instead of on pull requests. Depends on storytold/craft-common-actions#69.
alf merged commit 23584c0e23 into main 2026-10-23 19:01:05 +00:00
alf deleted branch chore/sync-upstream-20261023 2026-10-23 19:01:05 +00:00
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
iris/effectcraft!9
No description provided.