We need to reconstruct where training should have stopped from its validation-loss history. Implement the stopping decision so patience resets only when the configured improvement rule is met.
Build the implementation in Python under /app, with /app/run.sh as its entry point. Read one JSON request from standard input and write one JSON result to standard output. Input has losses, finite numbers, nonnegative finite min_delta, and positive integer patience. The first loss establishes best. Later loss improves only if best-loss > min_delta; improvement updates best and resets bad count. Otherwise increment bad count and stop when it reaches patience, ignoring later losses. Return best_epoch, best_loss and stopped_epoch using zero-based indices; empty losses return null fields. Reject invalid parameters.
Reject inputs that violate an explicit validation rule with exit status 2, no standard output, and {"error":"invalid_input"} on standard error. For valid input, exit with status 0. Keep the implementation reusable for new inputs; it must work offline and must not depend on the example data being the only data it receives.
Repair or replace the unfinished /app/run.sh and add source files under /app. Malformed JSON must use the same invalid-input response. Do not read /tests or /oracle from the application.