{
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "serialNumber": "urn:uuid:653c3e55-d1b7-377b-a074-728f0ab99d86",
  "version": 1,
  "metadata": {
    "tools": {
      "components": [
        { "type": "application", "name": "Jenesis" }
      ]
    },
    "component": {
      "type": "library",
      "bom-ref": "build.jenesis/build.jenesis.repository.walk/0.2.0",
      "group": "build.jenesis",
      "name": "build.jenesis.repository.walk",
      "version": "0.2.0",
      "description": "Everywhere the whole artifact set must be enumerated - garbage collection, retention eviction, every\nderived-metadata rebuild - goes through {@code ArtifactWalk}, never a private {@code list()} loop. A walk pass is\ndurable in the walked store itself ({@code walks/<consumer>/...}): each segment is one compare-and-set state object\nembedding its claim ({@code range, state, holder, expiry, cursor}), so threads <em>and different VMs</em> take\ndisjoint segments, a checkpoint doubles as lease renewal, and a dead node's segment is reclaimed from its last\ncommitted cursor - the walk never restarts from scratch. Delivery is exactly-once per pass in the absence of a\ncrash and at-least-once for the uncommitted stride tail after a crash-resume, so every consumer must be idempotent\nper item. An implementation ships as its own module that {@code provides} a {@code WalkProvider}, discovered with\n{@code ServiceLoader} and selected with {@code jenesis.repository.walk=<name>}; with none installed\n{@code WalkProvider.resolve} is empty and every walk-riding surface degrades gracefully. {@code WalkConsumer} is\nthe walk half of the two-route derived-metadata contract (steady state = publication events; back-fill, periodic\nrefresh and self-heal = the walk), discovered the same way and driven by the shared {@code RebuildPass} - one\nenumeration of the pointer roots feeding every discovered consumer.",
      "authors": [
        { "name": "Rafael Winterhalter", "email": "rafael.wth@gmail.com" }
      ],
      "licenses": [
        { "license": { "name": "Apache-2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.txt" } }
      ],
      "purl": "pkg:maven/build.jenesis/build.jenesis.repository.walk@0.2.0",
      "externalReferences": [
        { "type": "website", "url": "https://github.com/raphw/jenesis-repository" },
        { "type": "vcs", "url": "https://github.com/raphw/jenesis-repository" }
      ]
    }
  },
  "components": [
    {
      "type": "library",
      "bom-ref": "build.jenesis/build.jenesis.repository.observation/0.2.0",
      "group": "build.jenesis",
      "name": "build.jenesis.repository.observation",
      "version": "0.2.0",
      "hashes": [
        { "alg": "SHA-256", "content": "db708c20737a640d1717b3488299d5db7f68e5cd78f2881c7768397bb0cdaab9" }
      ],
      "licenses": [
        { "license": { "id": "Apache-2.0" } }
      ],
      "purl": "pkg:maven/build.jenesis/build.jenesis.repository.observation@0.2.0"
    },
    {
      "type": "library",
      "bom-ref": "build.jenesis/build.jenesis.repository.store/0.2.0",
      "group": "build.jenesis",
      "name": "build.jenesis.repository.store",
      "version": "0.2.0",
      "hashes": [
        { "alg": "SHA-256", "content": "dcf3bd32f45a7e7d70fc5e17ea6a98535b28efe0dbff5ea2a69cb12d1402c299" }
      ],
      "licenses": [
        { "license": { "id": "Apache-2.0" } }
      ],
      "purl": "pkg:maven/build.jenesis/build.jenesis.repository.store@0.2.0"
    }
  ],
  "dependencies": [
    { "ref": "build.jenesis/build.jenesis.repository.observation/0.2.0" },
    { "ref": "build.jenesis/build.jenesis.repository.store/0.2.0", "dependsOn": ["build.jenesis/build.jenesis.repository.observation/0.2.0"] },
    { "ref": "build.jenesis/build.jenesis.repository.walk/0.2.0", "dependsOn": ["build.jenesis/build.jenesis.repository.store/0.2.0"] }
  ]
}
