Allow using the fast predicate with user functions and in presence of an explicitly null :KEY. Define global two-arg entry points for commonplace variadic predicates instead of generating one per call site.
:COUNT NIL deleted only a single element.
Left over when I thought supporting DX allocation for heaps was worth it. Dunno -- maybe it is, but it makes sense only when your initial :SIZE is good enough that you don't need any further growth, and still small enough to fit on a page to be safe... Maybe look at this again later.
HEAP-INSERT calls the predicate with the new element before mangling the heap, so that problematic inserts are detected before the heap state is messed up. %HEAP-DELETE restores the deleted element on unwind, and in lucky cases even manages to restore the heap to a clean state.
MAP-HEAP can also traverse the heap without respect to heap order, which allows recovery of heaps with bad elements. (Though it would be better if HEAP-INSERT fixed the heap on unwind.) Also improve locking docs, and explain the approach to thread safety and its limitations.