{"id":"btree-free-list-intrusive","text":"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.","truth_value":"IN","source":"entries/2026/05/28/b-tree-storage-engine-btree.md","source_url":"","source_hash":"","justifications":[],"dependents":[],"metadata":{"example":"def free_page(self, page_num):\n    data = struct.pack(HEADER_FMT, 0, 0) + struct.pack(\">I\", free_head)\n    self.write_page(page_num, data)  # freed page stores next-free pointer\n    self.write_meta(..., new_head=page_num)"},"explanation":{"steps":[{"node":"btree-free-list-intrusive","truth_value":"IN","reason":"premise"}]}}