Skip to content

feat: BLAKE3 object digest - #225

Merged
alanshaw merged 17 commits into
mainfrom
ash/feat/blake3-object-digest
Oct 13, 2026
Merged

alanshaw merged 17 commits into
mainfrom
ash/feat/blake3-object-digest

Conversation

@alanshaw

@alanshaw alanshaw commented Oct 6, 2026 •

Copy link
Copy Markdown
Member
  • Adds x-cid to GetObject requests.
  • Adds <Blake3/> to GetObjectAttributes.

Please read the RFC for details: fil-one/RFC#33

Depends on:

resolves #226

Copilot AI balanced review requested due to automatic review settings October 6, 2026 10:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 High severity · 4 Medium severity · 1 Low severity

Open (6)
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, the Blake3 object 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.

Comment thread cmd/blake3.go Resolved
Comment thread s3frontend/multiparttree.go Resolved
Comment thread s3frontend/object.go Resolved
Comment thread s3frontend/object.go Resolved
Comment thread s3frontend/object.go Resolved
Comment thread docs/diagrams.md Resolved

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread blake3tree/blake3tree.go Resolved
Comment thread blake3tree/blake3tree.go Resolved
Comment thread blake3tree/blake3tree.go Resolved
Comment thread blake3tree/blake3tree.go Resolved
@alanshaw
alanshaw requested a lite review from Copilot October 6, 2026 15:35
@alanshaw
alanshaw force-pushed the ash/feat/blake3-object-digest branch from bc42c07 to 7669e73 Compare October 6, 2026 15:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 High severity

Open (1)
Resolved since last review (4)
Files not reviewed (1)
  • bucket/cbor_gen.go: Generated file

Comment thread blake3tree/blake3tree.go Resolved

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 Low severity

Open (1)
Resolved since last review (1)
Files not reviewed (1)
  • bucket/cbor_gen.go: Generated file

Comment thread s3frontend/object.go Resolved
alanshaw and others added 7 commits October 12, 2026 18:34
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>
@alanshaw
alanshaw force-pushed the ash/feat/blake3-object-digest branch from 80efc82 to 6c4cd22 Compare October 12, 2026 17:34
@alanshaw
alanshaw merged commit d2b93b7 into main Oct 13, 2026
20 checks passed
@alanshaw
alanshaw deleted the ash/feat/blake3-object-digest branch October 13, 2026 11:44
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 13, 2026
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)
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 13, 2026
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))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 13, 2026
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))
bajtos pushed a commit to fil-forge/infra-nodes that referenced this pull request Oct 14, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Give every object a verifiable whole-object digest, with incremental and random-access verification

2 participants