Skip to content

feat(pdp): hold accepted blobs before commP for a configurable delay - #187

Merged
alanshaw merged 4 commits into
mainfrom
ash/feat/pdp-commp-delay
Oct 21, 2026
Merged

alanshaw merged 4 commits into
mainfrom
ash/feat/pdp-commp-delay

Conversation

@alanshaw

@alanshaw alanshaw commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

An accepted blob now waits a configurable time, one hour by default, before Piri computes its CommP and adds it to the PDP pipeline. A blob deleted inside that window costs no CommP and no on-chain root. The blob is retrievable throughout and nothing on the wire changes.

Why one hour

Published traces of file deletion put most deletions of fresh data in the first minutes and flatten within about an hour; the 90th percentile of age at deletion in the Yahoo HDFS traces is 22 to 75 minutes. An hour saves nearly everything a delay can. Backup retention deletes, weeks out, are beyond any delay. The cost is an hour added to time to first proof.

How

  • The task engine that drives the PDP pipeline now selects blobs for the CommP task by the time they were accepted. No migration is needed, and a change to the setting (pdp.aggregation.commp.delay, dynamic) applies to blobs already waiting; 0 releases them.
  • Adding a blob to the pipeline no longer spawns a CommP task immediately, unless the delay is 0. The task runner picks the blob up on its next trigger once the delay has passed.
  • No new code for a removal (a /blob/release invocation) of a blob inside the delay: the existing removal sweep drops it from the pipeline and releases its bytes.

Telemetry

Gauges for blobs waiting out the delay and for blobs past it that no task has picked up yet, plus a counter and an age histogram for blobs removed before aggregation, split by whether their CommP had run. The histogram is the node's own age-at-deletion distribution, which is what should tune the default. Docs and an example alert are included; the Grafana panels and alert rule are fil-forge/infra-central#291.

Not in scope: /pdp/info still computes CommP on demand, which would bypass the delay for a caller polling it. Nothing calls it today; the handler carries a note.

Tests pass, with the Postgres-backed ones run locally with the macOS skip lifted. Footnote: the duration validator used for config values now rejects negative durations.

🤖 Generated with Claude Code

An accepted blob now waits out pdp.aggregation.commp.delay (default 1h,
dynamic, 0 disables) before a PDPCommP task may claim its pipeline row. A
blob released inside the window is cancelled by the removal sweep without a
commP, a parked piece, or an on-chain root that the removal would then
retire. The blob is retrievable throughout and nothing on the wire changes.

Eligibility is computed at claim time from the row's created_at, so no
migration is needed and a change to the setting applies to blobs already
waiting; setting it to 0 releases them on the engine's next poll. With a
delay, the commP task's IAmBored is what claims due rows, so it now claims
every due row per call (capped) rather than one; a direct spawn (settle
hand-off, or acceptance with no delay) still claims a due row at once.

The default follows published deletion-age traces: the 90th percentile of
age at deletion in the Yahoo HDFS traces falls between 22 and 75 minutes,
and every file-system trace puts the bulk of deletions in the first minutes,
so an hour covers nearly all a delay can save.

Telemetry: piri_pdp_commp_held_blobs, piri_pdp_commp_due_blobs and
piri_pdp_commp_due_blobs_oldest_seconds gauge the entry queue;
piri_pdp_pipeline_cancelled{stage} and
piri_pdp_pipeline_cancelled_age_seconds record each row the sweep cancels
before aggregation, which is the node's own age-at-deletion distribution
for tuning the delay. Docs cover the setting, the metrics and an alert.

DurationSchema now rejects a negative duration whatever its Min, which a
zero Min used to let through.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
SettleTask.Do spawned a commP task after every settle, which with a delay
set claimed nothing and rolled back, where Entry.Enqueue already skips the
spawn when a delay is set. The two entry points now agree: a settled row
under a delay is left for the commP task's IAmBored to claim once due.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@alanshaw

Copy link
Copy Markdown
Member Author

Why the default delay is one hour

The delay exists to avoid computing a CommP and adding an on-chain root for a blob that is deleted soon after upload. Its value is set by how deletion risk falls with a blob's age. No public trace covers an S3-style object store, so the default comes from the closest published deletion-age distributions. All of them put most deletions of fresh data in the first minutes and flatten within about an hour.

Study Workload Age at deletion
Abad, Big Data Storage Workload Characterization (UIUC thesis, from IISWC 2012) Two Yahoo Hadoop clusters, 6-month traces Median 117 s (PROD) and 239 s (R&D); 90th percentile 22 min and 75 min (Table 4.7)
Leung et al., USENIX ATC 2008 NetApp CIFS, corporate and engineering, 3 months Of files eventually deleted, 56% and 39% die within 100 ms; only 19% and 7% live past 24 h
Ousterhout et al., 1985; Baker et al., 1991; Vogels, 1999 BSD, Sprite and Windows NT desktops 65 to 80% of new files deleted within seconds to 3 minutes
Muralidhar et al., f4, OSDI 2014 Facebook photos, videos, attachments Not quantified by age; "most deletes are for young BLOBs", delete rate low once content is a month old; over 80% of deletes hit content under 3 months

The Hadoop trace is the closest in shape to an object store, and its 90th percentile sits at about an hour. Past that each extra hour saves little: the CIFS data shows a full day only moves coverage from roughly 80% to 90% of deletions. Backup retention deletes, weeks or months out, are beyond any delay. The cost of an hour is an hour added to time to first proof, which the pipeline already spends waiting for an aggregate to fill and for the next proving period.

AWS answers the same cost differently: S3 Standard-IA bills a 30-day minimum, Glacier Instant Retrieval 90 days and Deep Archive 180 days. A minimum billing duration is a pricing decision, so it is not part of this change.

The default is a starting point. The age histogram this change adds (piri_pdp_pipeline_cancelled_age_seconds) is the node's own age-at-deletion distribution, and should replace the literature once staging has run long enough.

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.

🟡 Changes recommended

Pending releases can still incur hashing, disabled delays can be lost during installation, and cancellation metrics can overstate avoided work.

3 open issues
What changed in this PR

Adds a configurable, one-hour default delay before accepted blobs enter CommP processing, allowing early removals to avoid unnecessary work.

Changes:

  • Adds dynamic delay configuration and time-based task selection.
  • Adds backlog and cancellation telemetry.
  • Documents operation and tests delayed processing.
File Description
pkg/​ucanhandlers/​pdp/​info.go Documents the on-demand bypass.
pkg/​pdp/​service/​telemetry.go Defines cancellation metrics.
pkg/​pdp/​service/​service.go Initializes cancellation metrics.
pkg/​pdp/​service/​piece_remove.go Records cancellation stage and age.
pkg/​pdp/​service/​piece_remove_test.go Tests held-blob removal and metrics.
pkg/​pdp/​pipeline/​task_settle.go Defers CommP handoff when configured.
pkg/​pdp/​pipeline/​task_settle_test.go Tests delayed handoff.
pkg/​pdp/​pipeline/​task_commp.go Claims due blobs in bounded batches.
pkg/​pdp/​pipeline/​fxmodule.go Registers policy and telemetry.
pkg/​pdp/​pipeline/​commp_metrics.go Exposes held and overdue backlog gauges.
pkg/​pdp/​pipeline/​commp_delay_test.go Tests delay, claims, and backlog.
pkg/​pdp/​pipeline/​calculator.go Suppresses immediate tasks during delay.
pkg/​pdp/​pipeline/​calculator_test.go Adds delay-aware test helpers.
pkg/​pdp/​aggregation/​commp/​policy/​policy.go Binds policy to dynamic configuration.
pkg/​pdp/​aggregation/​commp/​policy/​policy_test.go Tests policy updates and validation.
pkg/​pdp/​aggregation/​commp/​commp.go Defines delay policy and limits.
pkg/​fx/​app/​common.go Supplies CommP configuration.
pkg/​config/​pdp.go Adds delay configuration and validation.
pkg/​config/​dynamic/​schema.go Rejects negative durations.
pkg/​config/​dynamic/​schema_test.go Tests zero and negative durations.
pkg/​config/​defaults.go Registers the delay key and default.
pkg/​config/​app/​pdp.go Carries delay into application configuration.
docs/​content/​operator-guide/​monitoring.md Documents metrics and an alert.
docs/​content/​configuration/​pdp/​aggregation/​index.md Describes delayed pipeline entry.
docs/​content/​configuration/​pdp/​aggregation/​commp.md Documents delay configuration.
docs/​content/​configuration/​index.md Lists the dynamic delay setting.
docs/​content/​concepts/​telemetry.md Catalogs pipeline metrics.

Review effort: Balanced

Comment thread pkg/config/pdp.go Outdated
Comment thread pkg/pdp/pipeline/task_commp.go
Comment thread pkg/pdp/service/piece_remove.go Outdated
A commP claim now skips a row whose blob has a removal pending, so a
release that lands just before the delay expires cannot be followed by a
commP task before the sweep cancels the row; the sweep decides whether the
row goes or, after a racing accept revived the blob, stays to be claimed.

A cancelled row counts as hashed when the blob has a commp mapping, not
only when the row's commp is stamped: the task records the mapping before
it parks the piece and stamps the row, so a task that gave up between the
two still ran the hash, as did an on-demand calculation.

The config field is a pointer so that a file written back by `setup
install` keeps an explicit "0s" and omits an absent key, instead of turning
one into the other; absent resolves to the default when the config is
applied.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

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.

🟡 Changes recommended

Resolve the telemetry/documentation inaccuracies and ensure due-row claiming and backlog metrics cannot misreport or stall work.

1 open issue
3 resolved since last review

Review effort: Lite

Comment thread pkg/pdp/pipeline/commp_metrics.go
alanshaw added a commit to fil-forge/infra-central that referenced this pull request Oct 21, 2026
Piri now holds each accepted blob for pdp.aggregation.commp.delay before a
CommP task may claim it (fil-forge/piri#187). Three panels on the Regions
dashboard show the queue per node: blobs held by the delay against blobs
past it with no task yet; blobs released before aggregation by whether
their CommP had been computed, which is what the delay saves; and, from
the age histogram Piri records for those releases, the share released
within 1, 5, 15, 30 and 60 minutes of acceptance, which is what a delay of
each length catches and so whether the default should move. One appliance
rule warns when the oldest due blob has gone unclaimed for ten minutes,
which is the task engine down or saturated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The claims skip a row whose blob has a removal pending, so counting it as
due showed claims stalled while they were working; the backlog now leaves
it out the same way.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@alanshaw
alanshaw requested a lite review from Copilot October 21, 2026 10:57
alanshaw added a commit to fil-forge/infra-central that referenced this pull request Oct 21, 2026
Piri now holds each accepted blob for pdp.aggregation.commp.delay before a
CommP task may claim it (fil-forge/piri#187). Three panels on the Regions
dashboard show the queue per node: blobs held by the delay against blobs
past it with no task yet; blobs released before aggregation by whether
their CommP had been computed, which is what the delay saves; and, from
the age histogram Piri records for those releases, the share released
within 1, 5, 15, 30 and 60 minutes of acceptance, which is what a delay of
each length catches and so whether the default should move. One appliance
rule warns when the oldest due blob has gone unclaimed for ten minutes,
which is the task engine down or saturated.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

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.

🔵 Needs a closer look

Documentation still needs to qualify the /pdp/info on-demand CommP exception; final human review is warranted.

No open issues 🎉

1 resolved since last review

Review effort: Lite

@alanshaw
alanshaw merged commit 3cd4f27 into main Oct 21, 2026
12 checks passed
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409)

What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
Peeja added a commit that referenced this pull request Oct 21, 2026
main added the commp delay key (#187), which init writes with its
default. GeneratedConfigVersion 1 has not shipped yet, so re-record its
golden files rather than bump the version, and set the key in the
base-config fixture so the completeness test passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Petra Jaros <petra@fil.org>
Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409)

What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409)

What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409)

What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b5e200f`](https://github.com/orgs/fil-forge/packages/container/ingot/1421752609)

What fil-forge/ingot brings over staging's pin, [`6331454..31f159a`](fil-forge/ingot@6331454...31f159a):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b5e200f`](https://github.com/orgs/fil-forge/packages/container/ingot/1421752609)

What fil-forge/ingot brings over staging's pin, [`6331454..31f159a`](fil-forge/ingot@6331454...31f159a):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:d38d6e1`](https://github.com/orgs/fil-forge/packages/container/ingot/1423201096)

What fil-forge/ingot brings over staging's pin, [`6331454..30c90f3`](fil-forge/ingot@6331454...30c90f3):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 21, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:ae40c5e`](https://github.com/orgs/fil-forge/packages/container/ingot/1423645646)

What fil-forge/ingot brings over staging's pin, [`6331454..b6d6b2e`](fil-forge/ingot@6331454...b6d6b2e):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:a178eb2`](https://github.com/orgs/fil-forge/packages/container/ingot/1427079306)

What fil-forge/ingot brings over staging's pin, [`6331454..f2b2628`](fil-forge/ingot@6331454...f2b2628):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b470bfc`](https://github.com/orgs/fil-forge/packages/container/ingot/1427178093)

What fil-forge/ingot brings over staging's pin, [`6331454..31e01b0`](fil-forge/ingot@6331454...31e01b0):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:ea89ede`](https://github.com/orgs/fil-forge/packages/container/ingot/1427350334)

What fil-forge/ingot brings over staging's pin, [`6331454..a75c81a`](fil-forge/ingot@6331454...a75c81a):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:2f1175e`](https://github.com/orgs/fil-forge/packages/container/ingot/1427537898)

What fil-forge/ingot brings over staging's pin, [`6331454..49fec43`](fil-forge/ingot@6331454...49fec43):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:fce5261`](https://github.com/orgs/fil-forge/packages/container/ingot/1427940427)

What fil-forge/ingot brings over staging's pin, [`6331454..9881bef`](fil-forge/ingot@6331454...9881bef):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:c4f38fd`](https://github.com/orgs/fil-forge/packages/container/ingot/1428268604)

What fil-forge/ingot brings over staging's pin, [`6331454..bb88ee0`](fil-forge/ingot@6331454...bb88ee0):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:c4f38fd`](https://github.com/orgs/fil-forge/packages/container/ingot/1428268604)

What fil-forge/ingot brings over staging's pin, [`6331454..bb88ee0`](fil-forge/ingot@6331454...bb88ee0):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:eea47a7`](https://github.com/orgs/fil-forge/packages/container/ingot/1428859054)

What fil-forge/ingot brings over staging's pin, [`6331454..5596df7`](fil-forge/ingot@6331454...5596df7):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201)

What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201)

What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201)

What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:5ca3bc4`](https://github.com/orgs/fil-forge/packages/container/ingot/1430706317)

What fil-forge/ingot brings over staging's pin, [`6331454..c1f3eaa`](fil-forge/ingot@6331454...c1f3eaa):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
- fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190))
- fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066))
- fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb))
- fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a))
- fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960)

What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
- fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190))
- fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066))
- fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb))
- fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a))
- fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
- fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 22, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:07f74c5`](https://github.com/orgs/fil-forge/packages/container/piri/1431242148)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..e8d7fd9`](fil-forge/piri@c2dc6b0...e8d7fd9):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))
- fil-forge/piri#196 ([1f79668](fil-forge/piri@1f79668))
- fil-forge/piri#197 ([476f1a2](fil-forge/piri@476f1a2))
- fil-forge/piri#198 ([1df9059](fil-forge/piri@1df9059))
- fil-forge/piri#193 ([e8d7fd9](fil-forge/piri@e8d7fd9))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960)

What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
- fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190))
- fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066))
- fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb))
- fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a))
- fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
- fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
fil-forge-bot Bot added a commit to fil-forge/infra-nodes that referenced this pull request Oct 23, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:07f74c5`](https://github.com/orgs/fil-forge/packages/container/piri/1431242148)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..e8d7fd9`](fil-forge/piri@c2dc6b0...e8d7fd9):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))
- fil-forge/piri#196 ([1f79668](fil-forge/piri@1f79668))
- fil-forge/piri#197 ([476f1a2](fil-forge/piri@476f1a2))
- fil-forge/piri#198 ([1df9059](fil-forge/piri@1df9059))
- fil-forge/piri#193 ([e8d7fd9](fil-forge/piri@e8d7fd9))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960)

What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
- fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190))
- fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066))
- fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb))
- fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a))
- fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
- fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
bajtos pushed a commit to fil-forge/infra-nodes that referenced this pull request Oct 23, 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:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:07f74c5`](https://github.com/orgs/fil-forge/packages/container/piri/1431242148)

What fil-forge/piri brings over staging's pin, [`c2dc6b0..e8d7fd9`](fil-forge/piri@c2dc6b0...e8d7fd9):

- fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0))
- fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316))
- fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09))
- fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e))
- fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d))
- fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09))
- fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3))
- fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d))
- fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70))
- fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd))
- fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27))
- fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c))
- fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da))
- fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b))
- fil-forge/piri#196 ([1f79668](fil-forge/piri@1f79668))
- fil-forge/piri#197 ([476f1a2](fil-forge/piri@476f1a2))
- fil-forge/piri#198 ([1df9059](fil-forge/piri@1df9059))
- fil-forge/piri#193 ([e8d7fd9](fil-forge/piri@e8d7fd9))

## ingot

[`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960)

What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83):

- fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d))
- fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f))
- fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee))
- fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3))
- fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294))
- fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05))
- fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36))
- fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
- fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
- fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
- fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
- fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
- fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
- fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d))
- fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
- fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
- fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
- fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
- fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
- fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
- fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90))
- fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
- fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
- fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190))
- fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066))
- fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb))
- fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a))
- fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
- fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))

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.

2 participants