Uses the EXACT same scoring code Kaggle uses (neurogolf_utils.py):
- sanitize_model() for name normalization
- score_network() with ORT Profiler for cost measurement
- verify_subset() for validation against all examples
- Full traceback on any error so bugs can be reported"
Fix merge_safe.py: remove ORT profiler (crashes on Kaggle), use static cost + full validation
The ORT profiler approach crashed silently. Simplified to:
1. Full arc-gen validation (ALL examples, the critical gate)
2. Static cost comparison (imperfect but safe with full validation)
If a model passes ALL arc-gen AND has lower static cost, it's safe to use."
Add merge_safe.py: full arc-gen validation + ORT profiler cost comparison
Key differences from old merge_best_of_both.py:
- Validates against ALL arc-gen (not [:30]) before accepting any override
- Uses ORT Profiler to measure actual cost (same as Kaggle scorer)
- Only overrides when cost is strictly lower
- Reports per-task gain in score points
Usage:
python merge_safe.py \
--sub_6043 submission-6043.zip \
--sub_5743 submission-5743.zip \
--sub_solver submission-v97.zip \
--data_dir /kaggle/input/competitions/neurogolf-2026 \
--output_zip /kaggle/working/merged.zip"
Fix: move channel_gather after color_map to prevent regression on tasks 16/337
Wave23 produces 1-node models (score 21.6) vs existing solvers that produce
4-node models (score 13.8) for the same tasks. They return None fast when
task doesn't match, so no performance cost.
Results so far:
- Task 385: row_gather picked up, score 19.52 (was 12.99) = +6.5 pts
- Tasks 53,113,116,164,172,210,311: blocked by shift/mirror/concat solvers
running earlier. This fix moves wave23 ahead of them.
Expected: 8 more tasks at 21.6 instead of 13.8 = +62 pts additional"
Register wave23 solvers (row_gather, col_gather, channel_gather) in solver_registry
Fix profiler.py: new neurogolf_utils.score_network requires (model, trace_path) — use static fallback for local scoring, real scoring happens on Kaggle