day10: build per-solution worker.js to eliminate CRC conflicts
Each solution now gets its own worker.js compiled against the exact
dependency versions in that solution's overlay, ensuring no CRC
mismatches when packages like yojson have different versions across
universes.
Key changes:
- jtw_gen.ml: add jtw_worker_container_script, refactor
assemble_jtw_output to accept per-solution (target, solution,
ocaml_version, worker_output_dir) tuples
- linux.ml: add run_jtw_worker_in_container and build_solution_worker
that run jtw opam (without --no-worker) in a container with the
solution's full dependency overlay
- main.ml: Phase 4 now builds worker.js per-solution before assembly
- jtw_tools.ml: add --no-worker to jtw-tools build (tools only, no
worker.js)
- s.ml + stubs: add build_solution_worker signature and stubs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>