Rheon

Generic coupled-controller terminal validation

This current-main slice starts at 773bd2725e35590cfe9cbca5625f5239b98f03c2. The shared controller in CoupledDiscreteFlow::step_inner already drives both planar and explicit extrusion APIs; its original residual/correction loop requires no forcing API. An actual unforced main baseline at h=0.05 computes two corrections then refuses budget two; budget three accepts that same corrected endpoint with 15 counted Newton equations. The current-main regression confirms terminal acceptance, complete published-state equality, cancellation/retry and unchanged managed memory.

The correction adopts a correction-budget interpretation consistent with the shared CG update controller and Chapter 10’s frozen-coefficient solve budget. Older native prose says seven iterations and the frozen diagnosis records seven residual checks; that ambiguity is retained. For N=min(max_iterations,7), the candidate permits at most N Newton correction solves and N+1 unperturbed residual checks, with the same 1e-13 target. It evaluates the already computed final correction once without another Newton correction solve or Jacobian. Equation evaluation still performs the existing 15-by-15 chart solves.

The original report counter keeps loop-pass semantics, including a converged seed as one pass. Terminal validation adds no loop pass. Its equation evaluation is counted within the unchanged 200-call Newton budget: 7N+1 <=50. The existing order-16/order-32 qualification calls are separately performed and not reported in that counter. The tested budget-two boundary reports 15 Newton calls and executes 17 work.equation evaluations, excluding seed assembly; a budget-seven boundary can report 50 and execute 52. Iteration cancellation callbacks may be visited N+1 times. No total runtime or total chart-solve count is claimed.

All original qualification gates, checked-arithmetic/subnormal rejection, pressure/velocity/geometry publication ordering and conservative memory reservation remain. The terminal Equation is scoped before the coarse/fine pair. The original five planar contracts remain and three focused contracts are added. No forced-extruded APIs, custom trace cfg, diagnostic instrumentation, physical equation or new Lean/convergence theorem is introduced.

The prior research composition remains independently frozen: source/evidence verification at dad53, including the preserved budget clarification. Its original coarse temporal-band failure and five remaining finer refusals are not repaired or promoted by this generic controller change. Forcing integration f76841e9217e781d91c5bfeabadb6b4c6f42b20b stays separate.

The active Rust workflow retains every original command, immutable dependency/action pin, read-only permission, checkout credential policy and 30-minute per-job limit. Default/core-only/desktop feature jobs and executable/lifecycle checks run independently. The original core-and-executable status waits for all results and fails on failure, cancellation or skip. An exact candidate-branch push trigger permits normal source-bound hosted qualification without creating a PR or changing API credentials. Hosted result evidence is separate from local timings; no hosted success is assumed.

The first hosted qualification at c0591ebc4c2619d5ad6e6decfe9d3957ace8db5b, run 37469020996, passes all three Rust feature paths but fails the executable lifecycle check. Fifty path-ledger subtests require the original six-space quoted path-list formatting; YAML reserialization changed that representation. One additional failure compares the entire former single-job body with a historical snapshot. The aggregate correctly fails. Raw logs/results are retained under evidence/coupled-terminal-main; this is a reproducible source change, not an assumed flaky failure.

The follow-up restores the original trigger header’s formatting and retains its exact main/PR paths plus the scoped qualification branch. The historical workflow snapshot remains unchanged. Its budget check now derives exact original step bodies, immutable pins, smoke assertions and lifecycle commands from that snapshot and verifies their approved partition, all three original lint/test commands, bounded worker count, runners, 30-minute limits and failure-sensitive aggregate. Ten mutations must be rejected; the checker uses the existing Python standard library. The lifecycle test is retained and strengthened rather than removed. No production diagnostic or numerical change is part of this CI follow-up.

← Fixed-flat column momentum in the accepted MAC ownersSuccessor fresh-output transport verifier →