Status: IN
Freed pages store the "next free" pointer in their own body at `HEADER_SIZE` offset, forming an intrusive singly-linked list with no separate allocator data structure.
Source: entries/2026/05/28/b-tree-storage-engine-btree.md
def free_page(self, page_num):
data = struct.pack(HEADER_FMT, 0, 0) + struct.pack(">I", free_head)
self.write_page(page_num, data) # freed page stores next-free pointer
self.write_meta(..., new_head=page_num)