Tree-Scale Schedule Replay
P17.5 replays an existing FHOPS assignments CSV at tree scale. It reads machine/block/day rows, drives the single-machine simulator, consumes trees deterministically, and reports scheduled-versus-simulated differences. The schedule and scenario are never rewritten.
The phase plan is notes/tree_scale_simulation_plan.md.
Input
The assignments CSV requires:
machine_id;block_id;day.
Optional columns:
shift_id;production— scheduled merchantable volume for this assignment;assigned—0/false/norows are skipped.
If production is present and positive, the replay processes trees until that
volume is reached or the machine’s daily-hour limit is reached. If it is absent,
the assignment is time-bounded by the machine’s daily_hours. A zero scheduled
volume records a no_work row without consuming trees.
The replay checks that a machine’s role belongs to the block’s harvest-system roles when that system is available. Unknown blocks/machines, unsupported systems, unreachable trees, remaining trees, and under/over production are recorded explicitly.
CLI
fhops tree replay scenarios/example/scenario.yaml assignments.csv \
--out build/tree_replay
Optional circular obstacles use --obstacle x,y,radius_m and may be repeated.
--strict refuses when any discrepancy is recorded. --dry-run prints the
manifest without writing files.
Outputs:
tree_replay_events.csv— flat assignment/tree events;tree_replay_blocks.csv— block consumption and remaining volume;tree_replay.json— manifest with assignments, blocks, discrepancies, schedule digest, model identity, warnings, and caveats.
Limits
Replay is an execution test, not a rescheduling algorithm and not optimizer integration.
Cross-block machine travel is not modeled; each block starts from its first remaining tree unless the replay has a position for the same machine/block.
Machine-level assignments are replayed; full multi-machine traffic, forwarding/landing inventory, and system-level interactions are deferred.
Production targets come from the assignments CSV; if absent, the daily-hour limit is the only bound.
The underlying stem and machine models remain reference scaffolds.
The replay feeds Tree Scene Export for glTF/GLB export.