Skip to content

Sync from RecastEngine-Pro: 17-21 September - #20

Merged
chenyueqi merged 7 commits into
mainfrom
sync/september-21
Sep 22, 2026
Merged

chenyueqi merged 7 commits into
mainfrom
sync/september-21

Conversation

@chenyueqi

Copy link
Copy Markdown
Member

Carried by tools/export sync; each commit names its origin in a Carried-From trailer.

- Cache the tree-level analysis once per file revision
- Build the use resolver's index once per search path

Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: 30d24fa6e473bf7873fe5f746c2fb6fe70be4d94
The source side's rule -- a subscript reads the names in the axis's declared
lower bound, because the translation spells the shift -- was applied to
plain arrays and associate aliases, for every axis. The emitter shifts an
element or an edged section and spells nothing for a bare ':', and it
resolves a directly subscripted component's origin from the type record's
allocated dims. So col_pp%z(c,1) read nlevsno on the target and not the
source, and bmatrix(begc:endc, :, :) read it on the source and not the
target, and static.rwset failed HydrologyNoDrainage and SoilTemperature on
the whole-step recordings.

bound_reads(dims, subscripts) is the one rule now, per axis, skipping a
bare ':'; it is applied to plain array reads, write targets, OUT actuals,
and, through component_bound_reads, to root%comp(subs). Aliases keep the
dims-at-binding behaviour. The verifier is untouched.

Closes 107.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: 38d2a7c8816410803e886f574641f544269f50f4
…olerance the reference did not need

A recording as the reference ran the real LAPACK; the translation's
`dgbsv` is recast's own reference implementation, which eliminates in
textbook order where a blocked library does not. ELM's SoilTemperature
came to `differential.bitexact` with 1,926,692 of 1,929,936 points
bit-exact and the 3,244 that were not all downstream of the solve at
1.9e-11 relative, and the verdict said "no rtol excuses them" with no way
to say why.

The transform now records what it stood in for and which subprograms
reach it (`notes["references"]["stood_in"]`, from `references.stood_in`
and `references.reaching`, the latter moved from the f2py oracle, which
asks the same question of the same records). The gate measures those
subprograms apart (`metrics["stood_in"]`), names the stand-in on every
verdict the way `substituted` already names a stand-in on both sides,
and, when every differing point is downstream of one, says so and what
would excuse it. `stood_in_rtol` is the operator's grant of a relative
tolerance to exactly those subprograms: with it the verdict is
`toleranced`, states the tolerance, and says how many points outside
the solve were bit-exact. A difference anywhere else fails as before,
whatever was granted; a stand-in on both sides is not attributed; the
tolerance gate keeps its own tiers and gains only the naming.

Closes 109.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQ16296JcBrKdbo1q1nKXa
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: a5724f6511923fc374e01397cc626cb2c93d6773
…sources

The verification half of RecastEngine-Pro 93, carved out file for file
with no edit: the forward.python-jax Verifier and its frozen declaration,
worker and recorded-source provenance (verify/_forward_workload,
forward_workload, forward_workload_worker, forward_workload_verifier,
recorded_source), the worker-timeout and non-finite-verdict changes to
python_accelerators, the portable {"$workspace": ...} stage input
(workspace_resources.py, resolved in run.py and phases.py), the plugin
entry in pyproject.toml, and the tests that reach only these. Independent
of parts 1 and 3: it imports nothing from the generation rules or the
reconstruction stage.

The code is Qinrun Dai's, from 93 at 0b77daf; the split is the only
authorship of this commit.

Co-authored-by: Qinrun Dai <mouseisnotalwaysmouse@outlook.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQ16296JcBrKdbo1q1nKXa
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: 67e9c4991bafc19132a1507aa7227b51bb5f6726
… landed

check_hygiene.py reported six lines, none from this week's merges:
tools/export/replacements.txt (three), docs/roadmap.md (two) and
docs/tier/allowlist.md (one), all naming the private translator or the
domain extension. The substitution table necessarily contains the names it
rewrites out of the export, so it joins NOTICE in EXEMPT with its reason;
the roadmap's two mentions become "the translator", the spelling the table
itself prescribes, and the dead link goes; the allowlist row says "the
domain extension". The checker is clean on the tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQ16296JcBrKdbo1q1nKXa
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: 6dc1de3d4842e17e9b3eff22ff86eb8c13cde5d6
…ward-workload tests are withheld

tests/test_bitexact_stood_in.py imported ToleranceVerifier at module level,
which the public edition does not ship, so its whole file failed to
collect there; the one test that needs it now importorskips. The
forward-workload tests and their fixture import PythonToJaxRecipe from the
withheld recipes, so they are withheld too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQ16296JcBrKdbo1q1nKXa
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: a5db29546e9e86d667c3d184cedcd10ecccf2b8f
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQ16296JcBrKdbo1q1nKXa
Signed-off-by: lewisychen <yueqichen.0x0@gmail.com>

Carried-From: 303258c0f79a1dec34197c3eb4e48da29b3a5f64
@chenyueqi
chenyueqi merged commit a0b80bd into main Sep 22, 2026
11 of 13 checks passed
@chenyueqi
chenyueqi deleted the sync/september-21 branch September 22, 2026 01:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant