1. Parse the intended program. The OXY JSON is walked recursively through groups, loops, set-value blocks, and waits. Each wait interval becomes a phase with a time range and intended flow targets.
2. Map channels. Flow units are matched by Flowboard serial
number and port, e.g. Flow Unit #5 [Flowboard (1291)].
Labels are recovered from OXY set-value blocks.
3. Align time automatically. The app searches for the OXY program-time offset that minimizes normalized disagreement between the OXY target and CSV flow-unit setpoint traces across all mapped channels.
4. Separate two error sources. Profile agreement is CSV recorded setpoint minus OXY target. Tracking error is measured flow minus OXY target.
5. Use consistent scopes. Primary Analysis metrics exclude the configured grace period after genuine target changes for that channel. Full run metrics use every valid sample in enabled phases. This applies consistently to profile, tracking, tolerance, volume, channel, global, and phase metrics. Settling time remains transition-based.
6. Review phase-by-phase. The phase table summarizes each OXY wait interval using Analysis metrics, with full-run RMSE as a reference.
All processing happens locally in the browser. Files are not uploaded.