Cross-Platform Runtime Smoke and Acceptance
Purpose
This guide defines the minimum operator-visible smoke workflows for claiming that FEMIC runs cleanly on both Windows and Linux.
It does not require the two platforms to use identical runtime rituals. Instead, it defines what should be equivalent in outcome while allowing the platform-specific boundaries that currently exist:
Windows is authoritative for native Patchworks and native VDYP.
Linux is authoritative for the normal Python development workflow and the Wine-wrapped VDYP path when Windows-only tools are unavailable.
BTC provides the default unattended TIPSY seam in both cases.
Platform-Specific Runtime Rituals
Windows
Expected runtime shape:
native Python environment
native git, git-annex, and DataLad
native VDYP7Console.exe
ArcGIS Pro fallback for SiteProd geoprocessing when required
native Java + Patchworks
unattended BTC
/TSRhandoff between Stage 01a and Stage 01b
Linux
Expected runtime shape:
native Python environment
native git, git-annex, and DataLad
Wine-wrapped VDYP
no expectation of native Patchworks execution
unattended BTC
/TSRhandoff between Stage 01a and Stage 01b
Windows Smoke Workflow
Use K3Z as the reference case.
Validate prerequisites:
$env:FEMIC_EXTERNAL_DATA_ROOT="$PWD\external\femic-public-data\data" .venv\Scripts\datalad.exe get -r external/femic-public-data/data python -m femic prep validate-case --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml python -m femic prep geospatial-preflight
femic prep geospatial-preflightonly proves the generic Python geospatial stack is healthy.femic prep validate-caseis the case-aware check that the canonical annex-backedFADM_TSA.gdbTSA boundary input is actually readable on Windows.Run Stage 01a / upstream compile through the BTC boundary:
python -m femic run --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml --run-id k3z_windows_cleanstart
Confirm FEMIC produced fresh BTC handoff files:
external/femic-k3z-instance/data/03_input-tsak3z.csv
external/femic-k3z-instance/data/tipsy_params_tsak3z.xlsx or the latest timestamped fallback workbook
Let FEMIC run unattended BTC and refresh:
external/femic-k3z-instance/data/04_output-tsak3z.csv
external/femic-k3z-instance/data/04_error-tsak3z.csv
Resume only downstream work:
python -m femic tsa btc-post-tipsy --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml --tsa k3z --run-id k3z_windows_cleanstart python -m femic patchworks build-blocks --instance-root external/femic-k3z-instance --config config/patchworks.runtime.windows.yaml python -m femic patchworks matrix-build --instance-root external/femic-k3z-instance --config config/patchworks.runtime.windows.yaml --run-id k3z_windows_cleanstart
The command group and flag still use the legacy
tsanaming seam for compatibility. Read them generically as the selected FMU/code target.Optional but recommended final smoke:
launch external/femic-k3z-instance/models/k3z_patchworks_model/analysis/base.pin
confirm the baseline model opens cleanly in Patchworks
Linux Parity Workflow
Use the same K3Z case where practical, but accept that Patchworks validation is not native on Linux.
Validate prerequisites:
export FEMIC_EXTERNAL_DATA_ROOT=$PWD/external/femic-public-data/data git -C external/femic-public-data annex enableremote arbutus-s3 datalad get -r external/femic-public-data/data femic prep validate-case --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml femic prep geospatial-preflight
Run Stage 01a / upstream compile through the BTC boundary:
femic run --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml --run-id k3z_linux_parity
Runtime note: for Linux
--instance-rootruns, FEMIC stages missing legacy VDYP runtime assets (vdyp_io/VDYP_CFGandvdyp_io/VDYP.INI) fromFEMIC_SOURCE_ROOTwhen needed so Wine VDYP calls can resolve the relative paths embedded invdyp_params-landp.Confirm fresh BTC handoff files exist:
external/femic-k3z-instance/data/03_input-tsak3z.csv
external/femic-k3z-instance/data/tipsy_params_tsak3z.xlsx or the current timestamped fallback workbook
Run unattended BTC on a suitable Windows host and copy back:
external/femic-k3z-instance/data/04_output-tsak3z.csv
external/femic-k3z-instance/data/04_error-tsak3z.csv
Resume downstream work on Linux:
femic tsa btc-post-tipsy --instance-root external/femic-k3z-instance --run-config config/run_profile.k3z.yaml --tsa k3z --run-id k3z_linux_parity
The command group and flag still use the legacy
tsanaming seam for compatibility. Read them generically as the selected FMU/code target.Verify downstream artifacts match the expected contract:
bundle tables regenerated
comparison plots regenerated
no stale-TIPSY freshness failure
Acceptance Criteria
FEMIC can be considered cross-platform operational when all of the following are true:
Windows preflight passes on the validated workstation.
Linux preflight passes on the maintained Linux environment.
Both platforms can produce a fresh K3Z Stage 01a handoff: - 03_input-tsak3z.csv - workbook companion
Both platforms can resume Stage 01b/post-TIPSY cleanly from a fresh 04_output-tsak3z.csv.
Windows can continue through Patchworks block build + Matrix Builder.
The documented runtime rituals are platform-appropriate and explicit, rather than assuming Windows and Linux use the same tool chain.
Public-data annex/DataLad payload checks pass before the run starts.
What Should Match Across Platforms
Even though the runtime rituals differ, the following should remain equivalent:
selected case boundary and stratification policy
BTC handoff schema
managed/unmanaged curve bundle contract
K3Z low-yield treated-strata exclusion policy
K3Z treated species-mix teaching logic
downstream bundle/export structure
What May Differ Across Platforms
These differences are currently expected and acceptable:
native Windows VDYP vs Wine-wrapped Linux VDYP
ArcGIS Pro fallback availability on Windows only
Patchworks validation on Windows only
exact operator steps around unattended BTC execution
ArcRasterRescue executable path resolution details (use
FEMIC_ARC_RASTER_RESCUE_EXEif the default sibling layout is absent)
Evidence to Keep
At minimum, retain or inspect:
runtime/logs/run_manifest-*.json
runtime/logs/patchworks_matrixbuilder_manifest-*.json on Windows
refreshed tipsy_vdyp_*.png plots
regenerated bundle tables under data/model_input_bundle/