{
  "schemaVersion": 1,
  "slug": "hdf5-vds-dependencies",
  "title": "HDF5 virtual dataset dependency observations",
  "summary": "Eight controlled cases distinguish a byte-identical virtual dataset file from complete and correctly resolved source arrays.",
  "published": "2026-10-18",
  "updated": "2026-10-18",
  "generatedAt": "2026-10-17T21:21:32.318946+00:00",
  "evidenceType": "measured-api-behavior",
  "license": "CC0-1.0 for Hesela's original harness and observations; upstream libraries and documents retain their licenses.",
  "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
  "humanPage": "https://hesela.com/analyses/hdf5-virtual-datasets-missing-sources/",
  "sourceUrl": "https://hesela.com/analyses/hdf5-virtual-datasets-missing-sources/",
  "downloadPath": "/data/datasets/hdf5-vds-dependencies.csv",
  "codePath": "/research/hdf5-vds.py",
  "rawPath": "/research/hdf5-vds.json",
  "requirementsPath": "/research/hdf5-vds-requirements.txt",
  "generatorPath": "/scripts/build-hdf5-vds.mjs",
  "rowCount": 24,
  "columns": [
    {
      "name": "repetition",
      "type": "integer",
      "description": "One-based repeat on the same host, not an independent reliability trial."
    },
    {
      "name": "case",
      "type": "string",
      "description": "Controlled source-availability or resolution change."
    },
    {
      "name": "readerExitCode",
      "type": "integer",
      "description": "Final reader process exit code; zero means it completed all three dataset reads."
    },
    {
      "name": "viewHashMatches",
      "type": "boolean",
      "description": "VDS file SHA-256 equals its pre-change hash."
    },
    {
      "name": "colocatedSourceHashesMatch",
      "type": "boolean",
      "description": "Both named source files beside the VDS match baseline hashes; not a resolver audit."
    },
    {
      "name": "prefixOverride",
      "type": "boolean",
      "description": "Reader received a controlled HDF5_VDS_PREFIX containing a replacement b.h5."
    },
    {
      "name": "defaultValues",
      "type": "JSON",
      "description": "Full fixed-shape VDS array with default fill value zero; dimensionless synthetic integers."
    },
    {
      "name": "sentinelValues",
      "type": "JSON",
      "description": "Full fixed-shape VDS array with explicit fill value -999."
    },
    {
      "name": "materializedValues",
      "type": "JSON",
      "description": "Ordinary array copied while baseline sources were present, before any mutation."
    }
  ],
  "rows": [
    {
      "repetition": 1,
      "case": "present",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "missing-file",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "missing-dataset",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "substituted-source",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "legitimate-zero",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "relocated-vds-only",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          0,
          0,
          0
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          -999,
          -999,
          -999
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "relocated-complete",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 1,
      "case": "prefix-override",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": true,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "present",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "missing-file",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "missing-dataset",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "substituted-source",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "legitimate-zero",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "relocated-vds-only",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          0,
          0,
          0
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          -999,
          -999,
          -999
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "relocated-complete",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 2,
      "case": "prefix-override",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": true,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "present",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "missing-file",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "missing-dataset",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "substituted-source",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "legitimate-zero",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          0,
          0,
          0
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "relocated-vds-only",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": false,
      "prefixOverride": false,
      "defaultValues": [
        [
          0,
          0,
          0
        ],
        [
          0,
          0,
          0
        ]
      ],
      "sentinelValues": [
        [
          -999,
          -999,
          -999
        ],
        [
          -999,
          -999,
          -999
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "relocated-complete",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": false,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    },
    {
      "repetition": 3,
      "case": "prefix-override",
      "readerExitCode": 0,
      "viewHashMatches": true,
      "colocatedSourceHashesMatch": true,
      "prefixOverride": true,
      "defaultValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "sentinelValues": [
        [
          11,
          12,
          13
        ],
        [
          91,
          92,
          93
        ]
      ],
      "materializedValues": [
        [
          11,
          12,
          13
        ],
        [
          21,
          22,
          23
        ]
      ]
    }
  ],
  "method": "Eight fresh private fixtures per repetition. Each VDS maps two three-element int32 arrays into fixed (2,3) shape, once with default fill and once with -999. Every final observation uses a fresh Python process and empty working directory; HDF5_VDS_PREFIX is unset except in the named override case. All handles close before mutations. A separately materialized baseline is a control.",
  "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",
    "driver": "sec2",
    "libver": "v110"
  },
  "limits": [
    "Synthetic integers without physical units; not a scientific instrument dataset.",
    "One host and pinned library build; repetitions are not independent reliability trials.",
    "No power failure, concurrent writer, corrupt source, permissions fault or network filesystem test.",
    "Fixed relative filenames only; no unlimited selections, printf mappings, nested VDS or external links.",
    "Colocated hashes cover named files beside the VDS, not the library's complete resolution environment.",
    "The materialized control preserves this array only, not every group, attribute or scientific dependency."
  ],
  "hashes": {
    "sourceSha256": "be6d49365040507c986d81db134d064373255a9f8724128a20800b74e1596309",
    "requirementsSha256": "1562cd45452194a553bb9af837d31e54fb70bb0f83af365693aaa6c672957e1a",
    "rawSha256": "e7569794af33b019869027be5aae1496e668f9d0ad49dedf91d06a842dd15dea",
    "csvSha256": "934a33d5f77a983c6586a48ebba3f1954fb2efb7ebe5faaf4511f52111b28669"
  },
  "citations": [
    {
      "id": "h5py-vds",
      "title": "h5py 3.15.0: Virtual Datasets",
      "url": "https://docs.h5py.org/en/3.15.0/vds.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5-vds",
      "title": "The HDF Group: Introduction to the Virtual Dataset",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/_v_d_s_t_n.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5-properties",
      "title": "The HDF Group: H5Pset_virtual source-file resolution and H5Pset_fill_value",
      "url": "https://support.hdfgroup.org/documentation/hdf5/latest/group___d_c_p_l.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "h5py-dataset",
      "title": "h5py 3.15.0: Dataset.is_virtual and Dataset.virtual_sources",
      "url": "https://docs.h5py.org/en/3.15.0/high/dataset.html",
      "accessed": "2026-10-17"
    }
  ]
}
