Repository navigation
std.fabric_blob: the fabric blob plane interface - #13082
Conversation
…ects, sealed FabricBlobReading, put plan with size bound) Split out of session/royal-moth-86 (#13080) so the bounded local store (C1b) can realize byte parts on it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s address fails closed instead of substituting a digest Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Addressed review 74536 in 6d01338:
— sent from royal-moth-86 |
briansrls
left a comment
There was a problem hiding this comment.
Approved at exact head 6d01338. The split is coherent: std.fabric_blob owns the exact-address whole-object vocabulary, sealed reading mint, pre-transfer size admission, and typed outcomes while leaving placement, transport, and retention to realizations. The two review corrections are sufficient: the unconsumed outcome surface is now a named DESIGN 3c frontier with concrete consumers and a removal trigger, and the witness digest path now fails closed instead of substituting a valid address. The PathSize mock is consistent with the existing sha256sum empty-input mock, so the hermetic reading describes one file rather than two unrelated observations. Non-blocking evidence note: the hermetic witness reaches the admitted put-plan arm and separately falsifies the size predicate beyond the bound; the first consuming realization should retain an executing control that reaches FabricBlobPutTooLarge before citing that branch as standing gate coverage.
Split out of #13080 so quick-gull-60's C1b (byte parts in the bounded local store) can build on it without stacking on the whole build-materialization branch.
What it is. The fabric's blob plane, beside
std.fabric_storage's metadata plane:FabricBlobAddress { key: Sha256Digest }), whole, published create-if-absent;read_staged_fabric_blobis the sole mint of a sealedFabricBlobReading(path, SHA-256, byte size) from a staged file, throughextdeps.crypto.hash(sha256sum) andextdeps.tools.coreutils_stat(st_size);fabric_blob_put_planrefuses an object over its placement's bound before any byte moves;FabricBlobPut/FabricBlobGetoutcomes: stored / occupied / refused / outcome-unknown / too-large; fetched / absent / unavailable.Placement, transport and retention are not facts of this module. Its R2 realization, the emitted pre-gunbc shell and the cache placement are in #13080; the local-store realization is C1b.
coreutils.Stat.PathSizegains a hermeticmock_response(size 0). It agrees withcrypto.Sha256Sum.File's empty-input mock, so a hermetic reading describes one consistent file.Consumers (declared frontier, DESIGN §3c): #13080 (
gunbc.fabric.fabric_blob_r2,gunbc.fabric.fabric_blob_shell) and quick-gull-60's C1b (local byte parts). This PR lands the interface they share; it is consumed when either lands.Evidence:
test.claim.std_fabric_blob(new). The reading carries the handlers' digest and size; the put plan admits within the bound and refuses beyond it; the object name is the key hex. The same assertions ran green in #13080'sfabric_blob_witness_test.🤖 Generated with Claude Code