Conversation
bb1ab3b to
34271ff
Compare
There was a problem hiding this comment.
All reported issues were addressed across 6 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
Addressed the featureless-restore finding (squashed into Reachability: today a spec engine can never produce a featureless checkpoint — Fix (instead of full AR fallback): a per-slot Two extra pieces:
E2E verified on Qwen3.8-27B + DFlash2: with the flag set, restores log |
c508ec7 to
1fd73fa
Compare
There was a problem hiding this comment.
All reported issues were addressed across 3 files (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
1fd73fa to
7648998
Compare
|
Addressed the capture-suppression expiry in Valid point — the floor is now self-expiring rather than lifetime. Ring rows are keyed by The floor itself stays in place after expiry — Verified: rebuild clean, all tests pass, normal path e2e unchanged ( |
|
@cubic-dev-ai review this PR |
@Graffioh I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
All reported issues were addressed across 6 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
7648998 to
44bc61c
Compare
…ints The merged concurrent prefix cache restores paged attention K/V and recurrent slabs but drops the slot's target_feat ring — the features a fixed-chain DFlash drafter rebuilds its K/V window from. A restored prefix left the drafter proposing from stale context: output stayed correct under greedy verification but acceptance collapsed (measured 2.3 vs 8.0 accepted/round, 18 vs 61 tok/s on Qwen3.8-27B + DFlash2 after a poisoned slot). - Paged snapshots gain an optional verbatim feature-slab payload: speculating engines (fixed_chain_ready_) carry it, AR engines stay lean, and the resident-byte estimate charges for it. - paged_snapshot_matches validates payload compatibility and rejects feature-bearing checkpoints into ring-less caches. - Per-slot draft K/V state resets on every slot-reuse path so stale next_pos/slot_pos cannot leak into a new sequence's drafts. - A featureless restore (defensive path) floors the ring: the drafter only bulk-appends rows the occupying sequence wrote itself, and later captures on that slot omit the slab rather than bless foreign rows. - DFLASH_PREFIX_NO_FEAT=1 drops the payload (bench/debug knob). Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
44bc61c to
a72ac37
Compare
Speculative continuous batching rebuilds the DFlash draft K/V window from each sequence slot's target feature ring. Restoring only attention K/V and recurrent state leaves that ring stale after slot reuse, reducing draft acceptance.
This change adds an optional feature-ring slab to paged prefix snapshots and includes it in the resident-byte estimate.
Qwen35SeqEngineowns feature eligibility and resets draft state on admission, stale-restore fallback, recompute, and retirement. Featureless restores mask out unavailable history until the current sequence rebuilds it; captures can include features again after the entire ring has been overwritten. The scheduler and model-neutralPrefixStorecontract remain unchanged.Snapshot validation checks the feature tensor's dimensions, layout, capacity, and width before transferring data.
DFLASH_PREFIX_NO_FEAT=1remains a documented debug control for exercising featureless restores;=0leaves feature payloads enabled.Validation on the rebased branch:
dflash_serverand all four targeted test binaries succeeded.test_recurrent_snapshot: 6/6 passed, including short-prefix copying, byte accounting, slot/dead-row isolation, malformed feature dimensions, and atomic replacement failure.test_seq_engine_contract: 33 checks;test_seq_slot_manager: 306 checks;test_parallel_prefix_txn: 29 checks.--max-concurrency 2: cold request, unrelated request reusing the slot, then prefix restore. Repeated withDFLASH_PREFIX_NO_FEAT=0and=1; logs confirmed a 982-token restore withfeat=1andfeat=0, respectively. Greedy responses matched the cold request and each other.Rebased onto
origin/mainatf6c54171. The new recompute path uses the same draft-state reset as admission and retirement. No new performance benchmark is claimed.