Files

Matching cache snapshot stages (#114)

The reported layer-35 zero-sign difference came from the oracle measurement. tools/issue109-model-reference.py called snapshot_cache on the reference trunk but compared it with the native server's lazy bank entry. Pinned cache_state.py::_clone_tree implements a deep clone as value + zeros, which turns negative zero into positive zero. snapshot_cache_lazy_hybrid, selected by the server's default MTPLX_SESSION_LAZY_SNAPSHOT policy, retains the QSA key bits. Native production already implements these two contracts correctly.

The oracle tool now compares the actual bank stages: policy-selected lazy/deep trunk, always-deep committed MTP head, and the suffix owner's final hidden row. Every cache leaf must match its raw-bit hash. The old zero-sign exception and numerical/canonical-zero comparison are removed. The #113 entry point invokes this same strict implementation so the two tools cannot drift. Historical #109 receipts are preserved and annotated with this correction.

This resolves a verification defect. There is no production arithmetic, RoPE, cache-format, model or DS4/GLM change, and no platform mismatch to approve. Changing the native zero sign would violate the actual lazy-snapshot oracle. This is a correction to the Qwen MTPLX comparison, not a DS4Server-only feature.

First changed bit

Pinned MTPLX 9882703f3105363ddc37eca9f97aa09a1d387112, MLX 0.32.2, Bare-Speed artifact 74559cdf34fbfc0b593de72d17e93f37fd4f9ea7 on M5 Max. Native starting commit: d9026aa7bfbc8f74ec82c120178c34c5f08510d3.

The independent snapshot probe reads the original #109 native and oracle raw key files. Reconstructing the BF16 key from its F32 export is required to round-trip every bit before the probe proceeds. Installing it in a real pinned QSACache and reading raw state / lazy snapshot preserves the native hash. Taking the additional deep snapshot reproduces the original oracle file byte-for-byte. In all three states, the only changed coordinate is [0, 1, 0, 2]: F32 export 0x80000000 → 0x00000000.

Original state Key shape Raw/lazy hash prefix Extra deep snapshot / old oracle hash prefix
Cold prefill 1×2×46×256 d81b466dea1ff5b7 520dd44032eda478
Cold final 1×2×58×256 6a1c56e7333fc86e 44b87b49e9f9853e
Warm final 1×2×88×256 061f8fe052fe21c8 98186c7fec249807

Full hashes, coordinates and independently generated BF16/F32 fixtures are in tests/fixtures/mtplx-snapshot-zero.json. This locates the first changed bit at the measurement clone, without attributing it to an earlier model operation.

Regression and reproduction

The native regression exercises actual snapshot and restore paths for BF16 and F32, lazy/deep snapshots and both restore-cloning modes. It compares all bits to the independent fixture and verifies the source and banked arrays remain unchanged, together with the restored cache offset.

Generate the fixture under isolated MLX 0.32.2 Python using: tools/issue114-snapshot-reference.py PINNED_CHECKOUT ORIGINAL_NATIVE_DIR ORIGINAL_ORACLE_DIR tests/fixtures/mtplx-snapshot-zero.json. The original directories contain cold-prefill-key35.f32, cold-key35.f32 and warm-key35.f32 from the #109 run, before the harness correction.

Build the release test executable (cargo test --release --all-features --bin ds4-server issue114 --no-run), copy it outside target, and run issue114_snapshot_stage_preserves_zero_bits --ignored --nocapture --test-threads=1 under target/debug/test-supervisor 4096 60 120 --command.

For complete model verification, run the shared native issue113_default_verify_and_checkpoint test in separate default/off processes under the 114688 MiB supervisor, using the #113 documented environment and new output directories. Run tools/issue109-model-reference.py against the original explicit-off reproduction and tools/issue113-model-reference.py against the default run. Both now use identical strict raw-bit comparison. The native request is the original 46-token low-reasoning prompt, greedy seed 1, MTP depth 3 and max 12, with MTPLX_CONTEXT_COPY=0.

Completion review

Fresh serial default and explicit-off native/oracle runs pass: all eight verify forwards per configuration, every prefill/final logit and hidden byte, all trunk/MTP cache bits, emitted tokens, warm reuse and disk reopen. There are no remaining key coordinates with different bits. The original prefill key is negative zero in both implementations at the reported coordinate. All eight BF16/F32 snapshot/restore combinations match the independent reference. Installed DeepSeek session switching and GLM verifier/recurrent-state controls also pass; production code is unchanged.

Formatting, Clippy with -D warnings, signed app bundle and the full suite pass (313 application + 8 tool tests; 237 ignored hardware/reference tests). The first full-suite attempt reproduced existing #115: an unquoted Git SHA parsed as a YAML float (5568000000.0). Its failure evidence is retained; the unchanged retry passed. #115 remains a separate next-priority commit.

Review against the issue and pinned source is complete. The diagnostic cause is isolated, the incorrect oracle comparison is fixed, the raw-bit exception is removed, and focused plus full-model regressions verify the actual contract. No runtime mismatch is waived and no implementation is deferred.