READ-ONLY INVESTIGATION. Do NOT modify any files. Do NOT commit. Do NOT push.

Environment: Windows 11, bash shell. Project root: J:\CLAUDE\PROJECTS\Wakeword.

PROBLEM
Job 49 (latest training job) failed with:
```
DispatchError: No ONNX function found for <OpOverload(op='aten.adaptive_max_pool2d', overload='default')>
```

This happened at the ONNX export step (`torch.onnx.export` of the trained TemporalCNN). The SDK has produced 17 successful trained models historically (visible in SQLite job_queue.db). Something has regressed.

Find:
1. **Was this op always present in the model?** Search `src/violawake_sdk/` for `adaptive_max_pool2d`, `AdaptiveMaxPool2d`, `aten.adaptive_max_pool2d`. Where in the TemporalCNN architecture is it used?

2. **Why does the new ONNX exporter fail?** torch's ONNX export has changed across versions. The old `torch.onnx.export` had broader op coverage; the new "dynamo-based" path is stricter. Check:
   - What version of torch is installed in the container? `docker exec wakeword-backend-1 python -c "import torch; print(torch.__version__)"`
   - What version of onnxscript? `docker exec wakeword-backend-1 python -c "import onnxscript; print(onnxscript.__version__)"`
   - Read the SDK's export call: `grep -n "torch.onnx.export" src/violawake_sdk/`. What `dynamo=` flag is used?

3. **Did the 17 historical successes use a different torch version?** Look at the dates of those jobs (`SELECT id, created_at FROM jobs WHERE status='completed' ORDER BY id`). Then check git history of `console/backend/requirements.txt` and `pyproject.toml` for torch version pinning.

4. **What was the RECENT change that broke it?**
   - Maybe `torchaudio>=2.1` in `[training]` resolved to torchaudio 2.10, which dragged torch 2.10 with it.
   - Old torch (e.g. 2.4) might have had broader ONNX op coverage.
   - Check: was torch pinned more strictly in `console/backend/requirements.txt` before my session? `git show 54f20b4:console/backend/requirements.txt | grep -i torch`
   - Check: what specific torch version is in `viola-whisper` host venv (where past training presumably worked)? Compare to container.

5. **Workarounds:**
   - Replace `nn.AdaptiveMaxPool2d((1,1))` with `nn.MaxPool2d` of fixed kernel (depends on input shape, may need refactor).
   - Use `torch.onnx.export(..., dynamo=False)` to use the legacy exporter that has broader op coverage.
   - Pin torch to an older version that handles this op.

CONSTRAINTS
- READ-ONLY. Do NOT modify files, commit, or restart anything.

Report:
- Where in the SDK code adaptive_max_pool2d is used.
- The torch version installed vs. what's in pyproject.toml vs. host venv.
- Whether the 17 historical successes were on an older torch.
- A concrete recommended one-line fix (with the diff to apply if the user approves).
