{
  "schemaVersion": 1,
  "slug": "hdf5-swmr-visibility",
  "title": "HDF5 SWMR visibility observations",
  "summary": "Nine ordered checkpoints repeated 3 times distinguish readable HDF5 arrays from complete published pairs, using synthetic integer inputs and a live separate reader.",
  "published": "2026-10-17",
  "updated": "2026-10-17",
  "generatedAt": "2026-10-17T17:12:23.547422+00:00",
  "evidenceType": "measured-api-behavior",
  "license": "CC0-1.0 for Hesela's original harness and observations; upstream libraries and documents retain their own licenses.",
  "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
  "humanPage": "https://hesela.com/analyses/hdf5-swmr-application-consistency/",
  "sourceUrl": "https://hesela.com/analyses/hdf5-swmr-application-consistency/",
  "downloadPath": "/data/datasets/hdf5-swmr-visibility.csv",
  "codePath": "/research/hdf5-swmr.py",
  "rawPath": "/research/hdf5-swmr.json",
  "requirementsPath": "/research/hdf5-swmr-requirements.txt",
  "generatorPath": "/scripts/build-hdf5-swmr.mjs",
  "rowCount": 27,
  "columns": [
    {
      "name": "repetition",
      "type": "integer",
      "description": "One-based repeated run on the same host; not an independent reliability sample."
    },
    {
      "name": "checkpoint",
      "type": "integer",
      "description": "One-based ordered checkpoint within the run."
    },
    {
      "name": "phase",
      "type": "string",
      "description": "Operation boundary chosen by the harness."
    },
    {
      "name": "xRecords",
      "type": "integer",
      "description": "Refreshed x dataset length in records."
    },
    {
      "name": "yRecords",
      "type": "integer",
      "description": "Refreshed y dataset length in records."
    },
    {
      "name": "watermarkRecords",
      "type": "integer",
      "description": "Application-selected published prefix length in records."
    },
    {
      "name": "rejected",
      "type": "boolean",
      "description": "True if the count exceeds available paired rows."
    },
    {
      "name": "selectedPrefix",
      "type": "JSON",
      "description": "Selected integer pairs, or null when rejected; test values have no physical units."
    }
  ],
  "rows": [
    {
      "repetition": 1,
      "checkpoint": 1,
      "phase": "initial",
      "xRecords": 0,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 1,
      "checkpoint": 2,
      "phase": "x1-flushed",
      "xRecords": 1,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 1,
      "checkpoint": 3,
      "phase": "y1-flushed-unpublished",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 1,
      "checkpoint": 4,
      "phase": "published-1",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 1,
      "checkpoint": 5,
      "phase": "x2-flushed",
      "xRecords": 2,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 1,
      "checkpoint": 6,
      "phase": "y2-flushed-unpublished",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 1,
      "checkpoint": 7,
      "phase": "published-2",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ],
        [
          20,
          200
        ]
      ]
    },
    {
      "repetition": 1,
      "checkpoint": 8,
      "phase": "invalid-watermark",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 3,
      "rejected": true,
      "selectedPrefix": null
    },
    {
      "repetition": 1,
      "checkpoint": 9,
      "phase": "mutated-published-prefix",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          999,
          100
        ],
        [
          20,
          200
        ]
      ]
    },
    {
      "repetition": 2,
      "checkpoint": 1,
      "phase": "initial",
      "xRecords": 0,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 2,
      "checkpoint": 2,
      "phase": "x1-flushed",
      "xRecords": 1,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 2,
      "checkpoint": 3,
      "phase": "y1-flushed-unpublished",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 2,
      "checkpoint": 4,
      "phase": "published-1",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 2,
      "checkpoint": 5,
      "phase": "x2-flushed",
      "xRecords": 2,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 2,
      "checkpoint": 6,
      "phase": "y2-flushed-unpublished",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 2,
      "checkpoint": 7,
      "phase": "published-2",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ],
        [
          20,
          200
        ]
      ]
    },
    {
      "repetition": 2,
      "checkpoint": 8,
      "phase": "invalid-watermark",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 3,
      "rejected": true,
      "selectedPrefix": null
    },
    {
      "repetition": 2,
      "checkpoint": 9,
      "phase": "mutated-published-prefix",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          999,
          100
        ],
        [
          20,
          200
        ]
      ]
    },
    {
      "repetition": 3,
      "checkpoint": 1,
      "phase": "initial",
      "xRecords": 0,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 3,
      "checkpoint": 2,
      "phase": "x1-flushed",
      "xRecords": 1,
      "yRecords": 0,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 3,
      "checkpoint": 3,
      "phase": "y1-flushed-unpublished",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 0,
      "rejected": false,
      "selectedPrefix": []
    },
    {
      "repetition": 3,
      "checkpoint": 4,
      "phase": "published-1",
      "xRecords": 1,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 3,
      "checkpoint": 5,
      "phase": "x2-flushed",
      "xRecords": 2,
      "yRecords": 1,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 3,
      "checkpoint": 6,
      "phase": "y2-flushed-unpublished",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 1,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ]
      ]
    },
    {
      "repetition": 3,
      "checkpoint": 7,
      "phase": "published-2",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          10,
          100
        ],
        [
          20,
          200
        ]
      ]
    },
    {
      "repetition": 3,
      "checkpoint": 8,
      "phase": "invalid-watermark",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 3,
      "rejected": true,
      "selectedPrefix": null
    },
    {
      "repetition": 3,
      "checkpoint": 9,
      "phase": "mutated-published-prefix",
      "xRecords": 2,
      "yRecords": 2,
      "watermarkRecords": 2,
      "rejected": false,
      "selectedPrefix": [
        [
          999,
          100
        ],
        [
          20,
          200
        ]
      ]
    }
  ],
  "method": "One live writer and one spawned reader; pipe handshakes pause writes at each observation; all datasets created before SWMR; fixed-size integers, one-element chunks, no compression.",
  "environment": {
    "python": "3.12.3",
    "kernel": "6.8.0-146-generic",
    "machine": "x86_64",
    "h5py": "3.15.0",
    "hdf5": "1.14.6",
    "numpy": "2.3.3",
    "filesystem": "ext2/ext3",
    "driver": "sec2",
    "libver": "latest",
    "multiprocessing": "spawn",
    "HDF5_USE_FILE_LOCKING": null,
    "HDF5_IGNORE_DISABLED_FILE_LOCKS": null
  },
  "limits": [
    "One host. Synthetic values are test inputs, not sensor measurements. No power loss, process crash, fsync audit, network filesystem, competing writers or performance test. Watermark ordering is an application demonstration, not a crash-safe transaction protocol.",
    "Only 3 repeats on one host; no failure probability or confidence interval is estimated.",
    "Final two checkpoints intentionally violate the publication rule. The count is not a snapshot, checksum or crash-safe commit.",
    "Filesystem magic does not identify exact ext-family version or mount options.",
    "A deterministic pause exposes a possible intermediate state, not its production frequency."
  ],
  "hashes": {
    "sourceSha256": "915462edd7d89b2b66d027d3630e1497c44fb5288f0b1ce95804dc82a8fb2421",
    "rawSha256": "1da5b47bd034669347fab974c7aaad4bea29f1c6594ce533ac5e6521b24e1e2f",
    "csvSha256": "d624c5dccdfa2bd456954ede6c281c9dc92302df1c3e5a71f5abd306358fda8c",
    "requirementsSha256": "1562cd45452194a553bb9af837d31e54fb70bb0f83af365693aaa6c672957e1a"
  },
  "citations": [
    {
      "id": "h5py-swmr",
      "title": "h5py 3.15: Single Writer Multiple Reader",
      "url": "https://docs.h5py.org/en/3.15.0/swmr.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "swmr-design",
      "title": "The HDF Group: SWMR metadata flush dependencies",
      "url": "https://support.hdfgroup.org/releases/hdf5/2.2.0/documentation/hdf5-2.2.0.doxygen/_s_w_m_r_t_n.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5d",
      "title": "The HDF Group: H5Dflush and H5Drefresh",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/group___h5_d.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5-lock",
      "title": "The HDF Group: File locking and superblock flags",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/_file_lock.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5clear",
      "title": "The HDF Group: h5clear is not a general repair tool",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/_h5_t_o_o_l__c_r__u_g.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5-model",
      "title": "The HDF Group: HDF5 Data Model and File Structure",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/_h5_d_m__u_g.html",
      "accessed": "2026-10-17"
    }
  ]
}
