<!-- llms-explorer concept facts · https://llms-explorer.com/tree/omlx-hybrid-gdn-boundary-snapshot-capture-regres/ · pack 2026-10-05 · ~715 tokens -->

# oMLX hybrid GDN boundary snapshot capture regression

> The intermittent CI log line `Rejecting split-GDN placeholder block 3 because its recurrent checkpoint was not committed` came from `BoundarySnapshotSSDStore.take_staged_file` removing the request directory with `file_path.parent.rmdir()` after promoting an earlier boundary.

Parent: [Mac local LLMs: oMLX, Rapid-MLX and related internals](https://llms-explorer.com/tree/mac-local-llms-omlx-and-rapid-mlx-internals/) · 1 facets · 9 facts · page: https://llms-explorer.com/tree/omlx-hybrid-gdn-boundary-snapshot-capture-regres/

## Facts

- The intermittent CI log line `Rejecting split-GDN placeholder block 3 because its recurrent checkpoint was not committed` came from `BoundarySnapshotSSDStore.take_staged_file` removing the request directory with `file_path.parent.rmdir()` after promoting an earlier boundary. — [source](https://github.com/jundot/omlx/pull/3563)
- In the race the writer thread had run `mkdir(parents=True, exist_ok=True)` but not yet written the temp file, the `rmdir` succeeded on the empty directory, and `_write_safetensors_no_mx` failed with ENOENT. — [source](https://github.com/jundot/omlx/pull/3563)
- The failed write was logged at debug level only; the pending marker was released with no file behind it, `take_staged_file` returned None, `commit_gdn_checkpoint` returned False, and the split-GDN store stopped one block short. — [source](https://github.com/jundot/omlx/pull/3563)
- PR 3563 fixed it by no longer removing the request directory in `take_staged_file`, leaving removal to `cleanup_request`; the maintainer reproduced the old behavior, confirmed targeted boundary and split-GDN tests pass, and merged on 2026-09-11. — [source](https://github.com/jundot/omlx/pull/3563)
- PR 3563's regression test is `tests/test_boundary_snapshot_store.py::test_take_staged_file_leaves_request_dir_for_queued_writes`; 25 local runs never hit the flake and CI runners did. — [source](https://github.com/jundot/omlx/pull/3563)
- PR 3288's root cause is that on hybrid models the store path persists a prefix only from a boundary-aligned snapshot, so skipping all decode-time captures left nothing to store. — [source](https://github.com/jundot/omlx/pull/3288)
- PR 3288's test run reported `pytest tests/test_scheduler.py -k boundary` with 22 passed plus two new tests for the on-boundary and off-boundary cases. — [source](https://github.com/jundot/omlx/pull/3288)
- Issue 3317's cached copy lists no linked fix and remains open, so the 0.6.4 skip behavior is not shown fixed on the page. — [source](https://github.com/jundot/omlx/issues/3317)
- Issue 3539 shows an empty `_boundary_snapshots/` with `_gdn_sidecars` at 147 MB for a 9,890-token prompt on 0.6.4, so the skip is not limited to the 2,048-token block grid. — [source](https://github.com/jundot/omlx/issues/3539)
