Allocation-failure testing for #494 exposed two pre-existing initialization cleanup gaps. Pool.init appends reserved entries to multiple independently allocated columns, but did not deinitialize earlier columns if a later append failed. Interner.init then reserves the large header table, but did not release its newly constructed Pool if that reservation failed.
New exhaustive initialization allocation-failure tests reproduce leaks with the original code (two failed tests; the first failing path leaves 144 allocated bytes unfreed). Add error cleanup at each ownership boundary and keep both allocation-failure regressions. This is required for transactional type transfer under memory pressure, not a timing improvement. Refs #494/#480/#487/#416.