HEC-RAS 6.3.0.2 Wine compute_plan qualification¶
Outcome¶
The lean ras_commander.compute facade is qualified for one real HEC-RAS
6.3.0.2 1D steady plan under Wine without RasControl or another Controller/COM
call. RasCmdr.compute_plan() launched the normal HEC-RAS command-line path,
HEC-RAS materialized its own steady run files, and ras-commander extracted the
completed result HDF directly.
This is a bounded integration qualification, not a claim that every HEC-RAS 6.3 model is qualified or that a downstream ras2fim container is production ready. The downstream container still needs to pin this wheel, clone an accepted task-local Wine prefix, preserve its supervisor and receipt gates, and repeat the acceptance tests through its public runner interface.
Qualified identities¶
| Component | Qualified identity |
|---|---|
| HEC-RAS release | 6.3.0.2 (HEC-RAS 6.3 August 2022 in HDF provenance) |
| Installer SHA-256 | 869e5455de14f23abfba1c9b73e7ef15b7c1b5cca3af12e8b95cb61e69832e57 |
Ras.exe SHA-256 |
3a8f683961dcad82cfb15bbb68ec3df62c6510711dd89c37e3e09f52c9d8b860 |
x64/RasSteady.exe SHA-256 |
b3e110ad72e74901e40622379828d95188d646e79a6c96f206c64e996bbecf6b |
| ras-commander source | bbddd42c4966967ab6967de4fbc3c4079ab13d10 |
| Qualification wheel SHA-256 | fb36090e14634dfd584b309bf649e8b0673fcac9d2f03121c8ba42defa89ef5d |
| Wine | wine-11.0 |
| Container image | localhost/ras2fim-hecras:6.3.0.2-ras-commander-69871c81 |
| Guest | isolated CT217 on CLB01; network disabled for compute |
| CPU allocation | affinity set {0, 2}; one HEC-RAS plan core |
The existing container was reused to isolate the code-path question. The PR wheel was force-installed without dependency resolution from the local wheelhouse. A downstream image must rebuild from pinned inputs rather than relying on this qualification image.
Exact execution path¶
The probe imported only the narrow integration facade:
from ras_commander.compute import RasCmdr, RasPrj, init_ras_project
project = RasPrj()
init_ras_project(
r"Z:\work\project\MIXED.PRJ",
r"C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe",
ras_object=project,
load_results_summary=False,
hide_intro=True,
accept_tcu=False,
load_hdf_metadata=True,
)
result = RasCmdr.compute_plan(
"01",
ras_object=project,
force_rerun=True,
num_cores=1,
verify=True,
dialog_watchdog=False,
)
ras-commander constructed the HEC-RAS-owned command:
C:\Program Files (x86)\HEC\HEC-RAS\6.3\Ras.exe \
-c Z:\work\project\MIXED.PRJ Z:\work\project\MIXED.p01
HEC-RAS then performed the full vendor workflow. Process and file-transition capture showed it:
- create the steady
.r01input; - create the plan
.p01.tmp.hdfskeleton; - run
RasProcess.exe CompleteGeometryand promote the refreshed geometry HDF; - launch
x64/RasSteady.exewith the absolute.r01path; - grow the temporary result HDF and promote it to
.p01.hdf.
No ras-commander or ras2fim code authored .r01 or .tmp.hdf content.
Terms acceptance boundary¶
HEC-RAS Ras.exe -c displays the release-specific Terms and Conditions for
Use dialog when the exact Windows user and install path lack accepted state.
The original probe correctly blocked there. Earlier acceptance artifacts were
failed receipts and were not treated as authorization evidence.
After explicit authorization for exact HEC-RAS 6.3.0.2, the visible dialog was
accepted for the task-local runner prefix only. The application was closed
cleanly so its VB6 user settings were persisted, and RasTcu.status() then
reported accepted=True. The successful receipt pins the same Ras.exe hash
shown above. Acceptance was not inferred, copied from a different release, or
performed by init_ras_project().
Production images must provision that already-authorized state into the immutable base prefix and clone it per task. They must fail closed if the exact release, executable hash, user, or acceptance state differs.
Real-result parity¶
The immutable MIXED fixture contains two steady profiles and 19 cross
sections. The no-COM run completed in 5.421 seconds as measured around
initialization, compute_plan(), verification, and DataFrame refresh.
HdfResultsPlan.get_steady_results() returned 38 rows. Mapping its steady HDF
fields to the ras2fim contract produced:
| Gate | Result |
|---|---|
| Rows | 38 |
| Profiles × cross sections | 2 × 19 |
max_depth source |
Maximum Depth Total |
channel_length source |
Geometry/Cross Sections/Attributes/Len Channel |
| Result HDF SHA-256 | 316fb01821d099c9043f4554b869f2dc4a2dea825a3a0a7bc647ea35bc2fc920 |
| Linux-hosted ras2fim CSV SHA-256 | 6453f93e6ff40eae7842f73de42b0a6b0ff0fe25689b4673636595f826a98d5f |
| Windows Controller CSV SHA-256 | 6453f93e6ff40eae7842f73de42b0a6b0ff0fe25689b4673636595f826a98d5f |
| Maximum numeric difference | 4.440892098500626e-16 (max_depth) |
WSE, discharge, and channel length were exact. Text identities and ordering
were exact. The sub-machine-precision depth difference passed the 1e-6
absolute-tolerance gate, and the serialized result CSVs were byte-identical.
Supervision gate¶
A separate run forced the container-level timeout while the compute worker was still active. The named container was stopped and removed, the task-local Wine server was terminated, and post-cleanup inspection found:
- no owned HEC-RAS or Wine survivor processes;
- no matching container;
- a machine-readable timeout receipt with
stop_reason="timed_out"andsuccess=true.
The fixture solves very quickly, so its HDF may already be complete before a short outer timeout interrupts post-compute inventory refresh. The gate proves owned-process cleanup; downstream runner tests should retain their synthetic long-running timeout fixture to exercise termination during active work too.
Preserved failed experiments¶
The following results constrain future implementations:
- Direct
RasSteady.exe MIXED.r01without.p01.tmp.hdfexits with an HDF5 diagnostic stating that the temporary result HDF is missing. - Copying a completed
.p01.hdfto.p01.tmp.hdfis invalid; the solver reports that the output must not already exist. - Replaying captured
.r01, temporary HDF, and geometry HDF artifacts through a separately launched WindowsRasSteady.exereached 10% progress and then failed inREAD_HDF. Do not advertise direct Windows-engine replay as a supported path from this evidence. - The first
compute_plan()probes timed out before creating run artifacts because the TCU dialog was visible. After exact-version acceptance, the sameRas.exe -cpath completed. Those timeouts are not evidence thatcompute_plan()is incompatible with Wine.
Remaining downstream gates¶
Before calling the ras2fim lane production-ready:
- merge the ras-commander integration PR and pin the resulting immutable wheel in ras2fim;
- rebuild the lean batch image from pinned dependencies and record its digest and final size;
- replace the ras2fim steady bridge's
RasControl.run_plan()call with normalRasCmdr.compute_plan()while retaining task-local prefix/project cloning, CPU affinity, supervision, semantic HDF validation, and receipts; - rerun terrain, steady parity, concurrency, and forced-timeout smoke tests through the ras2fim public container command;
- qualify additional immutable model families. The current steady-result HDF fixture matrix covers 6.0.0, 6.3.1, 6.4.1, 6.6, and 7.0; no computed steady HDF fixture was available for 6.1, 6.2, or 6.5.