Revision history for Data::Graph::Shared

0.08      2026-09-26
          - A writer killed mid add_node, add_edge or remove_node no longer
            leaves a half-published node or freed edges linked.
          - Segments are reserved, so a full filesystem fails the constructor;
            DATA_GRAPH_SHARED_SPARSE=1 skips the reservation.
          - A failed create no longer leaves a full-size file behind.

0.07      2026-09-15
          - Recover a lock left ownerless by a corrupt file instead of hanging.

0.06      2026-08-12
          - A file left by an interrupted create is recovered, not refused.
          - freeze()/new_readonly(): sealed read-only mode, lock-free.
          - Hardening against tied and overloaded arguments.
          - unlink() reports a failed removal; a missing file is no error.
          - Document which methods croak or return false for a removed node.

0.05      2026-07-22
          - Fix a use-after-free in add_edge(): an overloaded or tied weight
            argument runs Perl that can destroy the graph, after which the
            already-captured handle was still used. Such a call now croaks.
          - Cache mapping geometry from one validated snapshot at attach.
          - Reject node indexes >= 2^32 instead of truncating them.

0.04  2026-07-03
    - Security and robustness hardening; backing files now created mode
      0600 (pass a file-mode argument to new() for cross-user sharing).

0.03  2026-06-01
    - new/new_memfd: reject max_nodes/max_edges > 2^32 instead of silently
      truncating the uint32 cast to a tiny graph

0.02  2026-04-26
    - atomic RMW + lifecycle parity
    - REQUIRE NODE macro; notify() returns bool
    - eventfd consume returns SV*
    - hoist Perl alloc out of neighbors mutex
    - idempotent eventfd; aarch64 CI matrix


0.01  2026-04-12
    - Initial release
