The configuration command needs to combine the supplied layers and resolve their references. Implement resolution using only the synthetic input, without consulting the process environment.
Build the implementation in Bash 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 is a list of objects mapping variable names matching [A-Z_][A-Z0-9_]* to strings or null. Later layers override earlier values; null deletes a variable. After all layers, recursively substitute ${NAME} references using the final merged mapping. Return resolved variables sorted by name. Invalid names/values, unknown referenced names and reference cycles must be rejected. Only well-formed reference tokens are substituted; other text stays literal. Never read the host environment.
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.