Problem
PORTS-001: ports.rs parse_short with a single host port and a container range (e.g. "8080:80-82") silently produces only one port mapping (80→8080) instead of three (80→8080, 81→8081, 82→8082). The zip truncates to the shortest iterator.
EXEC-001: query.rs exec never calls inspect_exec after streaming — the process always exits with code 0 regardless of the command's actual exit status.
LIFE-004: lifecycle.rs parses stop_grace_period from the compose file but ignores it — all stop_container calls hardcode t: Some(10).
Fix
- PORTS-001: When
host_ports.len() == 1 and container_ports.len() > 1, expand the host range starting from host_ports[0].
- EXEC-001: Call
inspect_exec after the output stream closes; return Err(ComposeError::RunExited(code)) for non-zero.
- LIFE-004: Parse
stop_grace_period via size::parse_duration_secs and pass to t; keep 10s default when absent.
Problem
PORTS-001:
ports.rsparse_shortwith a single host port and a container range (e.g."8080:80-82") silently produces only one port mapping (80→8080) instead of three (80→8080, 81→8081, 82→8082). Theziptruncates to the shortest iterator.EXEC-001:
query.rsexecnever callsinspect_execafter streaming — the process always exits with code 0 regardless of the command's actual exit status.LIFE-004:
lifecycle.rsparsesstop_grace_periodfrom the compose file but ignores it — allstop_containercalls hardcodet: Some(10).Fix
host_ports.len() == 1andcontainer_ports.len() > 1, expand the host range starting fromhost_ports[0].inspect_execafter the output stream closes; returnErr(ComposeError::RunExited(code))for non-zero.stop_grace_periodviasize::parse_duration_secsand pass tot; keep 10s default when absent.