Red-teamed Plan-agent blueprint (2026-06-10) for deleting the now-DEAD owned tree from
PersistentVocabARTrie and finishing the single-lock-free transition. Mirrors C2 (byte/char,
commit b9570ca). ONE irreversible commit — the build is red until ALL constructors + trait
impls are reconciled together (owned fields are woven into every Self {…} builder + trait impl).
Pre-state (committed, 14 commits incl. 406c566): every production ctor flips at construction →
route_overlay() always true → every else-arm is dead. Override already removed.
build_disk_char_node_static (disk_io.rs:386) → overlay_serialize.rs as pub(super) — overlay_serialize.rs:190 calls it (R1). DO THIS FIRST.&mut self — §D, zero trait-signature changes): mutation_api.rs insert→insert_overlay, insert_batch→per-term insert_overlay, insert_with_index→insert_with_index_overlay (delete the owned helpers append_vocab_insert_wal/append_vocab_batch_wal/sync_vocab_wal_after_append/next_unassigned_index_from/validate_index_insert/insert_with_index_no_wal/wal_unavailable_error/map_wal_error); query_api.rs get_index→get_index_lockfree, get_term→reverse_term_map (delete reconstruct_term/reserve_node_map); path_query.rs iter_terms/iter_terms_with_prefix→overlay-only, REWORK get_root_children/get_children_at_path/is_final_at_path over the overlay (char overlay_read.rs template, R8); persistence_api.rs checkpoint→checkpoint_overlay, rework rotate_wal/sync_to_disk_async (drop reverse_index+bloom flush), delete cache_stats.lockfree_cas.rs): enable_lockfree→pub(crate) (flip_to_overlay still calls it); DELETE insert_cas, is_lockfree_enabled, merge_lockfree_to_persistent. KEEP try_insert_lockfree_path/find_in_lockfree_trie/insert_lockfree_recursive/create_lockfree_path/cas_retries (overlay-live).dict_impl.rs + mmap_ctor + io_uring_ctor): DELETE fields root/reverse_index/reverse_cache/node_map/next_slot/bloom_filter. KEEP all else incl. dirty/reverse_term_map/lockfree_*/commit_seq/committed_watermark/epoch_manager. Remove those fields + the owned root construction (Box::into_raw/from_raw) + .idx VocabReverseIndex::create from all 4 builders (create mmap/io_uring + open_snapshot/open_with_io_uring); collapse !is_overlay reopen branch (R4). Rewrite Clone (overlay fields None). KEEP explicit unsafe impl Send/Sync (rows 39,40).
4b. DELETE FILE bloom_filter_api.rs + the create_with_bloom/create_with_start_index_and_bloom ctors + mod.rs decl. (Verify no external might_contain/has_bloom_filter caller.)types.rs: DELETE VocabTrieNode(320-622)/VocabTrieRoot(625-656)/FLAG_HAS_PARENT_POINTER; KEEP VocabTrieFileHeader/VOCAB_TRIE_MAGIC/VOCAB_HEADER_VERSION_V1+V2/crc32_header/NodeRef-reexport. Drop mod.rs mod-decls + re-exports.evict_node_at_path(875-976) + rework EvictableARTrie evict-callback to no-op (char template, overlay never evicts finals); update BijectiveDictionary doc (parent-pointer→reverse_term_map); DELETE the 4+helpers unsafe white-box tests (1324-1478) + the test ctor heap_only_vocab_for_unsafe_tests. KEEP public-API tests.insert_cas/enable_lockfree hits are BYTE/CHAR — NO change (verify rg PersistentVocabARTrie).#[ignore]'d tests + collateral (2 insert_cas tests dict_impl 1525/1547, the 3 reverse-index correspondence tests).unsafe impl Send/Sync for PersistentVocabARTrie<S>).rg '(unsafe impl|unsafe fn|unsafe\s*\{)' src/persistent_vocab_artrie -g '*.rs' = EXACTLY 2 lines (dict_impl Send+Sync). Any remaining Box::from_raw/&/&mut = a missed deletion..tla (PointerOwnership.tla etc. may be shared with byte/char).get_index_lockfree.is_none() (count only new) → crash-recovery len assert.--no-default-features + --all-features (io_uring_ctor cfg-gated).Full verbatim blueprint (every file:line) is in the session transcript (Plan agent result, 2026-06-10).
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |