l4block-shard-pack now retains its existing IBK2 default and accepts an
explicit ibk3 format argument:
l4block-shard-pack INPUT.ttl OUTPUT-DIR ibk3
The existing two-pass UTF-8/Turtle fold remains responsible for source digest
stability and generated blank-node naming. Complete decoded batches are still
partitioned by predicate and published independently, but their artifacts are
now direct IBK3/PTD1 bytes with 64 KiB Merkle sidecars and an SBM2 manifest
whose layout is predicate-ibk3-ptd1-merkle-v0. No SPARQL UPDATE path is
involved in loading: this is a bulk immutable-artifact publisher.
The first direct exercise used binding_site.ttl (368 triples): it published
two IBK3 artifacts (78 wdt:P31 rows and 290 wdt:P361 rows). The native
Merkle/paged scanner returned ten rows from each artifact, confirming that the
direct publisher's output—not only the IBK2-to-IBK3 migration tool—is usable
by the range host.
The direct gene.ttl exercise has now published all 888,949 triples. Since
the packer flushes bounded input batches, this yielded 13 artifacts and split
the 759,263 P684 triples across five IBK3 artifacts. This is an intentional
multi-entry SBM2 shape, not duplicate data: its total manifest row count is
the source triple count.
l4block-id-v3-merkle-scan now traverses all matching manifest entries in
order, applies one global limit, and totals verified I/O. A ten-row P684 query
opens just the first artifact; a complete P684 scan opens all five and returns
759,263 rows. It is a physical predicate-scan host, not yet a complete
parsed-SPARQL service: joins, expressions, projection, ordering and updates
remain the responsibility of the existing evaluator and its next lowering
step.