Repository navigation
feat: BLAKE3 object digest - #225
Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Attribute reads can mix versions or expose unrequested data, multipart fallback can become quadratic, and unchecked CLI group values can panic.
Review effort: Balanced
Findings: 1
Open (6)
Reject group exponents that produce invalid block sizes · New Reuse bodyOpener across multipart rehashing · New Suppress x-cid on internal HeadObject calls · New Avoid building BLAKE3 outboards for standard attributes · New Reuse one manifest to keep metadata and CID consistent · New Update multipart_parts schema diagram with tree columns · New
What changed in this PR
Implements the experimental BLAKE3 object-digest RFC, exposing plaintext object CIDs and Bao range-verification data across ingestion, multipart completion, S3 responses, and CLI tooling.
Changes:
- Stores BLAKE3 roots and range-verification trees during object ingestion.
- Assembles multipart trees from persisted per-part material.
- Adds
x-cid, theBlake3object attribute, CLI verification tools, tests, migrations, and documentation.
| File | Description |
|---|---|
s3frontend/object.go |
Exposes CID and BLAKE3 attributes. |
s3frontend/multiparttree.go |
Assembles multipart BLAKE3 trees. |
s3frontend/multiparttree_test.go |
Tests multipart tree assembly. |
s3frontend/multipart.go |
Records and finalizes part trees. |
s3frontend/cid.go |
Builds CID headers and attributes. |
s3frontend/cid_test.go |
Tests CID and outboard responses. |
registry/stores.go |
Extends multipart part records. |
registry/stores_postgres.go |
Persists part-tree fields. |
README.md |
Documents BLAKE3 CLI usage. |
migrations/sql/00021_multipart_part_tree.sql |
Adds part-tree columns. |
itest/scenarios_test.go |
Verifies CIDs through the live stack. |
inmem/stores.go |
Clones tree data safely. |
go.sum |
Updates dependency checksums. |
go.mod |
Updates versitygw and BLAKE3 dependencies. |
docs/diagrams.md |
Updates architecture diagrams. |
docs/architecture.md |
Documents digest storage and assembly. |
DESIGN_NOTES.md |
Describes multipart tree behavior. |
cmd/root.go |
Registers CLI and exit semantics. |
cmd/blake3.go |
Adds hash, range, and verify commands. |
cmd/blake3_test.go |
Tests BLAKE3 CLI workflows. |
CLAUDE.md |
Updates repository guidance. |
bucket/tree.go |
Computes and stores body trees. |
bucket/tree_test.go |
Tests persisted tree material. |
bucket/sized.go |
Adds tree hashing to sized ingestion. |
bucket/manifest.go |
Adds BLAKE3 manifest fields. |
bucket/chunker.go |
Integrates tree hashing with splitting. |
bucket/cbor_gen.go |
Serializes new manifest fields. |
blake3tree/blake3tree.go |
Implements tree assembly and verification. |
blake3tree/blake3tree_test.go |
Tests tree boundaries and Bao compatibility. |
Files not reviewed (1)
- bucket/cbor_gen.go: Generated file
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical and moderate verification edge cases remain unresolved.
Review effort: Lite
Findings: 2
Open (4)
Resolved since last review (6)
Reject group exponents that produce invalid block sizes Reuse one manifest to keep metadata and CID consistent Avoid building BLAKE3 outboards for standard attributes Suppress x-cid on internal HeadObject calls Reuse bodyOpener across multipart rehashing Update multipart_parts schema diagram with tree columns
Files not reviewed (1)
- bucket/cbor_gen.go: Generated file
bc42c07 to
7669e73
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The ranged verifier can accept an incorrect CID for an empty body; address this critical validation issue before approval.
Review effort: Lite
Findings: 1
Open (1)
Resolved since last review (4)
Files not reviewed (1)
- bucket/cbor_gen.go: Generated file
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
Broad digest, storage, multipart, CLI, and protocol changes plus two unresolved documentation corrections warrant human review.
Review effort: Lite
Findings: 1
Open (1)
Resolved since last review (1)
Files not reviewed (1)
- bucket/cbor_gen.go: Generated file
259daa2 to
afa2236
Compare
3554430 to
80efc82
Compare
The re-hash opener passes the session's plaintext flag through to bodyOpener, headObject returns three values on the encryption-header rejection, and the part-tree migration moves to 00028 behind main's 00022. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
80efc82 to
6c4cd22
Compare
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:f4e3889` What fil-forge/piri brings over staging's pin, `7ba7d94..3bd2957`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) - chore(deps): bump go.opentelemetry.io/otel from 1.46.0 to 1.47.0 (fil-forge/piri#165) (5473769) - chore(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp from 1.46.0 to 1.47.0 (fil-forge/piri#167) (af4b3b6) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.71.0 to 0.72.0 (fil-forge/piri#166) (edab473) - chore(deps): bump modernc.org/sqlite from 1.60.0 to 1.60.1 (fil-forge/piri#169) (5d2c1b2) - refactor: use `syncutil.KeyedMutex` (fil-forge/piri#171) (3bd2957) ## ingot `sha256:f84a61c` → `sha256:4fdff18` What fil-forge/ingot brings over staging's pin, `73de672..6071feb`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c) - Split local blob storage into a spool and a cache, and evict to a byte budget (fil-forge/ingot#218) (3f09138) - Report local blob storage's size and removals as metrics (fil-forge/ingot#219) (3c2561d) - Restore the cache's retention windows and forced pass (fil-forge/ingot#220) (2831688) - Stop the background sweepers reliably, and wait for them (fil-forge/ingot#227) (4923ae2) - Correct spool and logstore wording that predates the current design (fil-forge/ingot#223) (f08bb5a) - Apply INGOT_* environment variables to keys the config file omits (fil-forge/ingot#228) (287f786) - Free the local copies earlier releases kept (fil-forge/ingot#221) (c22bc2e) - Add cache_writes, to keep no written bodies (fil-forge/ingot#222) (72b29fa) - Trace each background sweep and each local blob pass (fil-forge/ingot#234) (e5e343c) - Report stalled upload bytes by intent state (fil-forge/ingot#236) (5a42122) - Record a by-digest upload's location before marking it accepted (fil-forge/ingot#237) (6f66739) - Let 00023 run on a database whose 00021 had no stalled index (fil-forge/ingot#238) (69b787d) - feat: register uploads with Sprue (fil-forge/ingot#176) (427931f) - build(deps): bump go.opentelemetry.io/otel/sdk from 1.46.0 to 1.47.0 (fil-forge/ingot#240) (8461dd4) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.6 to 1.33.7 (fil-forge/ingot#249) (dc6ee1e) - build(deps): bump github.com/alanshaw/dag-json-gen from 0.0.10 to 0.0.11 (fil-forge/ingot#247) (4b2e219) - build(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp from 1.46.0 to 1.47.0 (fil-forge/ingot#243) (0961ca8) - build(deps): bump github.com/valyala/fasthttp from 1.74.0 to 1.75.0 (fil-forge/ingot#246) (649d0ca) - build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.71.0 to 0.72.0 (fil-forge/ingot#248) (2616c50) - feat: allow non-encrypted buckets (fil-forge/ingot#239) (15b4de0) - fix: blob uniqueness within space (fil-forge/ingot#250) (c89d7e1) - refactor: use `syncutil.KeyedMutex` (fil-forge/ingot#253) (dae9d21) - ci: split a releases shard out of the itest rest shard (fil-forge/ingot#256) (b95b533) - feat: BLAKE3 object digest (fil-forge/ingot#225) (d2b93b7) - refactor: separate disposable part trees (fil-forge/ingot#254) (85cfd75) - refactor: drop body sha256 hash (fil-forge/ingot#232) (6071feb)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:c16a9f9`](https://github.com/orgs/fil-forge/packages/container/piri/1312685138) → [`sha256:f4e3889`](https://github.com/orgs/fil-forge/packages/container/piri/1373973083) What fil-forge/piri brings over staging's pin, [`7ba7d94..3bd2957`](fil-forge/piri@7ba7d94...3bd2957): - fil-forge/piri#147 ([a6e6377](fil-forge/piri@a6e6377)) - fil-forge/piri#149 ([4be8d80](fil-forge/piri@4be8d80)) - fil-forge/piri#150 ([6bd80b7](fil-forge/piri@6bd80b7)) - fil-forge/piri#151 ([2773386](fil-forge/piri@2773386)) - fil-forge/piri#155 ([5b9b004](fil-forge/piri@5b9b004)) - fil-forge/piri#154 ([dcc1570](fil-forge/piri@dcc1570)) - fil-forge/piri#161 ([de4bff7](fil-forge/piri@de4bff7)) - fil-forge/piri#159 ([eaa6bc4](fil-forge/piri@eaa6bc4)) - fil-forge/piri#160 ([e9f9ede](fil-forge/piri@e9f9ede)) - fil-forge/piri#158 ([074f08e](fil-forge/piri@074f08e)) - fil-forge/piri#153 ([2265f2d](fil-forge/piri@2265f2d)) - fil-forge/piri#148 ([652613d](fil-forge/piri@652613d)) - fil-forge/piri#163 ([d20dcec](fil-forge/piri@d20dcec)) - fil-forge/piri#165 ([5473769](fil-forge/piri@5473769)) - fil-forge/piri#167 ([af4b3b6](fil-forge/piri@af4b3b6)) - fil-forge/piri#166 ([edab473](fil-forge/piri@edab473)) - fil-forge/piri#169 ([5d2c1b2](fil-forge/piri@5d2c1b2)) - fil-forge/piri#171 ([3bd2957](fil-forge/piri@3bd2957)) ## ingot [`sha256:f84a61c`](https://github.com/orgs/fil-forge/packages/container/ingot/1312682283) → [`sha256:4fdff18`](https://github.com/orgs/fil-forge/packages/container/ingot/1378629238) What fil-forge/ingot brings over staging's pin, [`73de672..6071feb`](fil-forge/ingot@73de672...6071feb): - fil-forge/ingot#196 ([4fe80d3](fil-forge/ingot@4fe80d3)) - fil-forge/ingot#197 ([d84cfc3](fil-forge/ingot@d84cfc3)) - fil-forge/ingot#200 ([1d88644](fil-forge/ingot@1d88644)) - fil-forge/ingot#199 ([ae1dff9](fil-forge/ingot@ae1dff9)) - fil-forge/ingot#198 ([adcf0a6](fil-forge/ingot@adcf0a6)) - fil-forge/ingot#201 ([4f1d5a0](fil-forge/ingot@4f1d5a0)) - fil-forge/ingot#211 ([dc0c25c](fil-forge/ingot@dc0c25c)) - fil-forge/ingot#214 ([bb09c6a](fil-forge/ingot@bb09c6a)) - fil-forge/ingot#212 ([f814a48](fil-forge/ingot@f814a48)) - fil-forge/ingot#216 ([4124d17](fil-forge/ingot@4124d17)) - fil-forge/ingot#217 ([054dd6c](fil-forge/ingot@054dd6c)) - fil-forge/ingot#218 ([3f09138](fil-forge/ingot@3f09138)) - fil-forge/ingot#219 ([3c2561d](fil-forge/ingot@3c2561d)) - fil-forge/ingot#220 ([2831688](fil-forge/ingot@2831688)) - fil-forge/ingot#227 ([4923ae2](fil-forge/ingot@4923ae2)) - fil-forge/ingot#223 ([f08bb5a](fil-forge/ingot@f08bb5a)) - fil-forge/ingot#228 ([287f786](fil-forge/ingot@287f786)) - fil-forge/ingot#221 ([c22bc2e](fil-forge/ingot@c22bc2e)) - fil-forge/ingot#222 ([72b29fa](fil-forge/ingot@72b29fa)) - fil-forge/ingot#234 ([e5e343c](fil-forge/ingot@e5e343c)) - fil-forge/ingot#236 ([5a42122](fil-forge/ingot@5a42122)) - fil-forge/ingot#237 ([6f66739](fil-forge/ingot@6f66739)) - fil-forge/ingot#238 ([69b787d](fil-forge/ingot@69b787d)) - fil-forge/ingot#176 ([427931f](fil-forge/ingot@427931f)) - fil-forge/ingot#240 ([8461dd4](fil-forge/ingot@8461dd4)) - fil-forge/ingot#249 ([dc6ee1e](fil-forge/ingot@dc6ee1e)) - fil-forge/ingot#247 ([4b2e219](fil-forge/ingot@4b2e219)) - fil-forge/ingot#243 ([0961ca8](fil-forge/ingot@0961ca8)) - fil-forge/ingot#246 ([649d0ca](fil-forge/ingot@649d0ca)) - fil-forge/ingot#248 ([2616c50](fil-forge/ingot@2616c50)) - fil-forge/ingot#239 ([15b4de0](fil-forge/ingot@15b4de0)) - fil-forge/ingot#250 ([c89d7e1](fil-forge/ingot@c89d7e1)) - fil-forge/ingot#253 ([dae9d21](fil-forge/ingot@dae9d21)) - fil-forge/ingot#256 ([b95b533](fil-forge/ingot@b95b533)) - fil-forge/ingot#225 ([d2b93b7](fil-forge/ingot@d2b93b7)) - fil-forge/ingot#254 ([85cfd75](fil-forge/ingot@85cfd75)) - fil-forge/ingot#232 ([6071feb](fil-forge/ingot@6071feb))
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:c16a9f9`](https://github.com/orgs/fil-forge/packages/container/piri/1312685138) → [`sha256:758f61a`](https://github.com/orgs/fil-forge/packages/container/piri/1381118358) What fil-forge/piri brings over staging's pin, [`7ba7d94..5a9fdd2`](fil-forge/piri@7ba7d94...5a9fdd2): - fil-forge/piri#147 ([a6e6377](fil-forge/piri@a6e6377)) - fil-forge/piri#149 ([4be8d80](fil-forge/piri@4be8d80)) - fil-forge/piri#150 ([6bd80b7](fil-forge/piri@6bd80b7)) - fil-forge/piri#151 ([2773386](fil-forge/piri@2773386)) - fil-forge/piri#155 ([5b9b004](fil-forge/piri@5b9b004)) - fil-forge/piri#154 ([dcc1570](fil-forge/piri@dcc1570)) - fil-forge/piri#161 ([de4bff7](fil-forge/piri@de4bff7)) - fil-forge/piri#159 ([eaa6bc4](fil-forge/piri@eaa6bc4)) - fil-forge/piri#160 ([e9f9ede](fil-forge/piri@e9f9ede)) - fil-forge/piri#158 ([074f08e](fil-forge/piri@074f08e)) - fil-forge/piri#153 ([2265f2d](fil-forge/piri@2265f2d)) - fil-forge/piri#148 ([652613d](fil-forge/piri@652613d)) - fil-forge/piri#163 ([d20dcec](fil-forge/piri@d20dcec)) - fil-forge/piri#165 ([5473769](fil-forge/piri@5473769)) - fil-forge/piri#167 ([af4b3b6](fil-forge/piri@af4b3b6)) - fil-forge/piri#166 ([edab473](fil-forge/piri@edab473)) - fil-forge/piri#169 ([5d2c1b2](fil-forge/piri@5d2c1b2)) - fil-forge/piri#171 ([3bd2957](fil-forge/piri@3bd2957)) - fil-forge/piri#152 ([5a9fdd2](fil-forge/piri@5a9fdd2)) ## ingot [`sha256:f84a61c`](https://github.com/orgs/fil-forge/packages/container/ingot/1312682283) → [`sha256:4fdff18`](https://github.com/orgs/fil-forge/packages/container/ingot/1378629238) What fil-forge/ingot brings over staging's pin, [`73de672..6071feb`](fil-forge/ingot@73de672...6071feb): - fil-forge/ingot#196 ([4fe80d3](fil-forge/ingot@4fe80d3)) - fil-forge/ingot#197 ([d84cfc3](fil-forge/ingot@d84cfc3)) - fil-forge/ingot#200 ([1d88644](fil-forge/ingot@1d88644)) - fil-forge/ingot#199 ([ae1dff9](fil-forge/ingot@ae1dff9)) - fil-forge/ingot#198 ([adcf0a6](fil-forge/ingot@adcf0a6)) - fil-forge/ingot#201 ([4f1d5a0](fil-forge/ingot@4f1d5a0)) - fil-forge/ingot#211 ([dc0c25c](fil-forge/ingot@dc0c25c)) - fil-forge/ingot#214 ([bb09c6a](fil-forge/ingot@bb09c6a)) - fil-forge/ingot#212 ([f814a48](fil-forge/ingot@f814a48)) - fil-forge/ingot#216 ([4124d17](fil-forge/ingot@4124d17)) - fil-forge/ingot#217 ([054dd6c](fil-forge/ingot@054dd6c)) - fil-forge/ingot#218 ([3f09138](fil-forge/ingot@3f09138)) - fil-forge/ingot#219 ([3c2561d](fil-forge/ingot@3c2561d)) - fil-forge/ingot#220 ([2831688](fil-forge/ingot@2831688)) - fil-forge/ingot#227 ([4923ae2](fil-forge/ingot@4923ae2)) - fil-forge/ingot#223 ([f08bb5a](fil-forge/ingot@f08bb5a)) - fil-forge/ingot#228 ([287f786](fil-forge/ingot@287f786)) - fil-forge/ingot#221 ([c22bc2e](fil-forge/ingot@c22bc2e)) - fil-forge/ingot#222 ([72b29fa](fil-forge/ingot@72b29fa)) - fil-forge/ingot#234 ([e5e343c](fil-forge/ingot@e5e343c)) - fil-forge/ingot#236 ([5a42122](fil-forge/ingot@5a42122)) - fil-forge/ingot#237 ([6f66739](fil-forge/ingot@6f66739)) - fil-forge/ingot#238 ([69b787d](fil-forge/ingot@69b787d)) - fil-forge/ingot#176 ([427931f](fil-forge/ingot@427931f)) - fil-forge/ingot#240 ([8461dd4](fil-forge/ingot@8461dd4)) - fil-forge/ingot#249 ([dc6ee1e](fil-forge/ingot@dc6ee1e)) - fil-forge/ingot#247 ([4b2e219](fil-forge/ingot@4b2e219)) - fil-forge/ingot#243 ([0961ca8](fil-forge/ingot@0961ca8)) - fil-forge/ingot#246 ([649d0ca](fil-forge/ingot@649d0ca)) - fil-forge/ingot#248 ([2616c50](fil-forge/ingot@2616c50)) - fil-forge/ingot#239 ([15b4de0](fil-forge/ingot@15b4de0)) - fil-forge/ingot#250 ([c89d7e1](fil-forge/ingot@c89d7e1)) - fil-forge/ingot#253 ([dae9d21](fil-forge/ingot@dae9d21)) - fil-forge/ingot#256 ([b95b533](fil-forge/ingot@b95b533)) - fil-forge/ingot#225 ([d2b93b7](fil-forge/ingot@d2b93b7)) - fil-forge/ingot#254 ([85cfd75](fil-forge/ingot@85cfd75)) - fil-forge/ingot#232 ([6071feb](fil-forge/ingot@6071feb))
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:c16a9f9`](https://github.com/orgs/fil-forge/packages/container/piri/1312685138) → [`sha256:758f61a`](https://github.com/orgs/fil-forge/packages/container/piri/1381118358) What fil-forge/piri brings over staging's pin, [`7ba7d94..5a9fdd2`](fil-forge/piri@7ba7d94...5a9fdd2): - fil-forge/piri#147 ([a6e6377](fil-forge/piri@a6e6377)) - fil-forge/piri#149 ([4be8d80](fil-forge/piri@4be8d80)) - fil-forge/piri#150 ([6bd80b7](fil-forge/piri@6bd80b7)) - fil-forge/piri#151 ([2773386](fil-forge/piri@2773386)) - fil-forge/piri#155 ([5b9b004](fil-forge/piri@5b9b004)) - fil-forge/piri#154 ([dcc1570](fil-forge/piri@dcc1570)) - fil-forge/piri#161 ([de4bff7](fil-forge/piri@de4bff7)) - fil-forge/piri#159 ([eaa6bc4](fil-forge/piri@eaa6bc4)) - fil-forge/piri#160 ([e9f9ede](fil-forge/piri@e9f9ede)) - fil-forge/piri#158 ([074f08e](fil-forge/piri@074f08e)) - fil-forge/piri#153 ([2265f2d](fil-forge/piri@2265f2d)) - fil-forge/piri#148 ([652613d](fil-forge/piri@652613d)) - fil-forge/piri#163 ([d20dcec](fil-forge/piri@d20dcec)) - fil-forge/piri#165 ([5473769](fil-forge/piri@5473769)) - fil-forge/piri#167 ([af4b3b6](fil-forge/piri@af4b3b6)) - fil-forge/piri#166 ([edab473](fil-forge/piri@edab473)) - fil-forge/piri#169 ([5d2c1b2](fil-forge/piri@5d2c1b2)) - fil-forge/piri#171 ([3bd2957](fil-forge/piri@3bd2957)) - fil-forge/piri#152 ([5a9fdd2](fil-forge/piri@5a9fdd2)) ## ingot [`sha256:f84a61c`](https://github.com/orgs/fil-forge/packages/container/ingot/1312682283) → [`sha256:4fdff18`](https://github.com/orgs/fil-forge/packages/container/ingot/1378629238) What fil-forge/ingot brings over staging's pin, [`73de672..6071feb`](fil-forge/ingot@73de672...6071feb): - fil-forge/ingot#196 ([4fe80d3](fil-forge/ingot@4fe80d3)) - fil-forge/ingot#197 ([d84cfc3](fil-forge/ingot@d84cfc3)) - fil-forge/ingot#200 ([1d88644](fil-forge/ingot@1d88644)) - fil-forge/ingot#199 ([ae1dff9](fil-forge/ingot@ae1dff9)) - fil-forge/ingot#198 ([adcf0a6](fil-forge/ingot@adcf0a6)) - fil-forge/ingot#201 ([4f1d5a0](fil-forge/ingot@4f1d5a0)) - fil-forge/ingot#211 ([dc0c25c](fil-forge/ingot@dc0c25c)) - fil-forge/ingot#214 ([bb09c6a](fil-forge/ingot@bb09c6a)) - fil-forge/ingot#212 ([f814a48](fil-forge/ingot@f814a48)) - fil-forge/ingot#216 ([4124d17](fil-forge/ingot@4124d17)) - fil-forge/ingot#217 ([054dd6c](fil-forge/ingot@054dd6c)) - fil-forge/ingot#218 ([3f09138](fil-forge/ingot@3f09138)) - fil-forge/ingot#219 ([3c2561d](fil-forge/ingot@3c2561d)) - fil-forge/ingot#220 ([2831688](fil-forge/ingot@2831688)) - fil-forge/ingot#227 ([4923ae2](fil-forge/ingot@4923ae2)) - fil-forge/ingot#223 ([f08bb5a](fil-forge/ingot@f08bb5a)) - fil-forge/ingot#228 ([287f786](fil-forge/ingot@287f786)) - fil-forge/ingot#221 ([c22bc2e](fil-forge/ingot@c22bc2e)) - fil-forge/ingot#222 ([72b29fa](fil-forge/ingot@72b29fa)) - fil-forge/ingot#234 ([e5e343c](fil-forge/ingot@e5e343c)) - fil-forge/ingot#236 ([5a42122](fil-forge/ingot@5a42122)) - fil-forge/ingot#237 ([6f66739](fil-forge/ingot@6f66739)) - fil-forge/ingot#238 ([69b787d](fil-forge/ingot@69b787d)) - fil-forge/ingot#176 ([427931f](fil-forge/ingot@427931f)) - fil-forge/ingot#240 ([8461dd4](fil-forge/ingot@8461dd4)) - fil-forge/ingot#249 ([dc6ee1e](fil-forge/ingot@dc6ee1e)) - fil-forge/ingot#247 ([4b2e219](fil-forge/ingot@4b2e219)) - fil-forge/ingot#243 ([0961ca8](fil-forge/ingot@0961ca8)) - fil-forge/ingot#246 ([649d0ca](fil-forge/ingot@649d0ca)) - fil-forge/ingot#248 ([2616c50](fil-forge/ingot@2616c50)) - fil-forge/ingot#239 ([15b4de0](fil-forge/ingot@15b4de0)) - fil-forge/ingot#250 ([c89d7e1](fil-forge/ingot@c89d7e1)) - fil-forge/ingot#253 ([dae9d21](fil-forge/ingot@dae9d21)) - fil-forge/ingot#256 ([b95b533](fil-forge/ingot@b95b533)) - fil-forge/ingot#225 ([d2b93b7](fil-forge/ingot@d2b93b7)) - fil-forge/ingot#254 ([85cfd75](fil-forge/ingot@85cfd75)) - fil-forge/ingot#232 ([6071feb](fil-forge/ingot@6071feb)) Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>



x-cidtoGetObjectrequests.<Blake3/>toGetObjectAttributes.Please read the RFC for details: fil-one/RFC#33
Depends on:
resolves #226