Skip to content

feat(auth): price the governance bypass header - #108

Merged
alanshaw merged 2 commits into
mainfrom
ash/feat/bypass-governance-header
Oct 22, 2026
Merged

alanshaw merged 2 commits into
mainfrom
ash/feat/bypass-governance-header

Conversation

@alanshaw

@alanshaw alanshaw commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

A delete or a retention write that asks to bypass governance retention, with x-amz-bypass-governance-retention: true, needs s3:BypassGovernanceRetention in S3. Hilt had no such permission, so the header carried no decision here. This is the Hilt half of governance bypass; the gateway half stays as it is.

What changes

s3:BypassGovernanceRetention joins the vocabulary as a policy action, added by fil-forge/libforge#88 and now on libforge main, which this pins, and as a service-key permission. It maps to no Forge commands of its own, since the delete or retention write it rides on carries them.

The header is priced like the other header-added permissions: on DeleteObject, DeleteObjectVersion, DeleteObjects and PutObjectRetention, read on its first value case-insensitively as the gateway reads it, and only when the signature covers it. A service key must hold the permission and a principal's effective set must grant it.

What does not change

Ingot's gateway layer decides the bypass itself against the bucket's lock state, and today refuses it whatever the key holds, since it looks for the grant in a bucket policy document Ingot does not serve internally. So the permission has no effect on the wire yet: a request carrying the header is refused by Hilt without the permission, and by the gateway with it. The gateway hook that would honour Hilt's answer is the parked other half.

Behaviour changes to know about

  • A request carrying the bypass header from a key or principal without the permission is now refused by Hilt as not permitted, where before it reached the gateway and was refused there. The outcome is the same; the refusing side moves.
  • A bypass header the signature does not cover is refused as UnsignedHeader, like the lock headers.
  • Keys issued with explicit permission lists, and policies that list actions, can now name s3:BypassGovernanceRetention.

🤖 Generated with Claude Code

A delete or a retention write asking to bypass governance retention
(x-amz-bypass-governance-retention: true) needs
s3:BypassGovernanceRetention in S3. The permission joins the vocabulary
as a policy action and service-key permission with no commands of its
own, and the header is priced on DeleteObject, DeleteObjectVersion,
DeleteObjects and PutObjectRetention like the other header-added
permissions: on its first value, case-insensitively, and only when
signed. The gateway still decides the bypass itself and refuses it for
now whatever the key holds.

Pins libforge to fil-forge/libforge#88.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 12:03

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.

🟢 Approval recommended

The narrow change follows existing authorization mechanisms, includes targeted regression coverage, and has no identified blocking issues.

No open issues 🎉

What changed in this PR

Adds Hilt-side authorization for governance-retention bypass requests using s3:BypassGovernanceRetention. Gateway enforcement remains unchanged, so this does not yet enable bypass on the wire.

Changes:

  • Adds the permission to service-key vocabulary and pins libforge’s policy-action support.
  • Requires the permission and a signed bypass header on applicable delete and retention operations.
  • Adds classification and authorization tests for service keys and principal-bound keys.
File Description
pkg/​s3perm/​s3perm.go Registers the bypass permission without additional Forge commands.
pkg/​s3perm/​s3perm_test.go Updates the expected policy-action count.
pkg/​rpc/​service/​auth/​operation.go Adds bypass-header permission requirements.
pkg/​rpc/​service/​auth/​operation_test.go Covers applicable operations and header-value handling.
pkg/​rpc/​service/​auth/​auth_test.go Tests permission checks and unsigned-header rejection.
pkg/​bucketpolicy/​bucketpolicy_test.go Includes bypass in object-resource action coverage.
go.sum Updates libforge dependency checksums.
go.mod Pins libforge with the new policy action.
AGENTS.md Documents bypass-header authorization.

Review effort: Balanced

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@alanshaw
alanshaw requested a balanced review from Copilot October 22, 2026 12:15
@alanshaw
alanshaw enabled auto-merge (squash) October 22, 2026 12:16

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.

🟢 Approval recommended

The localized change reuses existing authorization checks, includes focused regression coverage, and has no identified blocking issues.

No open issues 🎉

Review effort: Balanced

@alanshaw
alanshaw merged commit c258fe3 into main Oct 22, 2026
9 checks passed
@alanshaw
alanshaw deleted the ash/feat/bypass-governance-header branch October 22, 2026 12:31
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 22, 2026
Published from fil-forge/hilt#108

- Digest: `sha256:211664106f2172d11d732f4d894b0e1953e51b202f20052f52f4cd558a081779`
- Commit: fil-forge/hilt@c258fe3
- Publish run: https://github.com/fil-forge/hilt/actions/runs/39779045327

Merging applies [`terraform/envs/dev/apps`](https://github.com/fil-forge/infra-central/tree/main/terraform/envs/dev/apps) with no further confirmation.

Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 22, 2026
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars`
to what `terraform/envs/dev/apps/terraform.tfvars` pins at 7df0121.
Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps`
on the merge commit, with no further confirmation.

dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/39786027357.

This pull request is rebuilt each time dev passes its smoke test after a push
to `main`, and closed once staging matches dev. To hold a service back, push
to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over staging's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:2116641`](https://github.com/orgs/fil-forge/packages/container/hilt/1428310062)

What fil-forge/hilt brings over staging's pin, [`42dd070..c258fe3`](fil-forge/hilt@42dd070...c258fe3):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over staging's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over staging's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over staging's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 22, 2026
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars`
to what `terraform/envs/dev/apps/terraform.tfvars` pins at af24c86.
Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps`
on the merge commit, with no further confirmation.

dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/39805420203.

This pull request is rebuilt each time dev passes its smoke test after a push
to `main`, and closed once staging matches dev. To hold a service back, push
to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over staging's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over staging's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over staging's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over staging's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over staging's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 22, 2026
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars`
to what `terraform/envs/dev/apps/terraform.tfvars` pins at 3d1850d.
Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps`
on the merge commit, with no further confirmation.

dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/39843935969.

This pull request is rebuilt each time dev passes its smoke test after a push
to `main`, and closed once staging matches dev. To hold a service back, push
to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over staging's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over staging's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over staging's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over staging's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over staging's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
bajtos pushed a commit to fil-forge/infra-central that referenced this pull request Oct 23, 2026
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars`
to what `terraform/envs/dev/apps/terraform.tfvars` pins at 3d1850d.
Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps`
on the merge commit, with no further confirmation.

dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/39843935969.

This pull request is rebuilt each time dev passes its smoke test after a push
to `main`, and closed once staging matches dev. To hold a service back, push
to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over staging's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over staging's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over staging's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over staging's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over staging's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))

Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 23, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 2d31ab2.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/39952503173.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 23, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at e26977c.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40003177982.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 24, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 7c9481b.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40080685971.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 26, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at a0ab798.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40330356224.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 26, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 71da424.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40331032249.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 27, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 1e806bf.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40550164330.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 27, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 4594baf.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40556471031.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 27, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at c0cec2b.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40565332700.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 29, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 6a1a861.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40887481549.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 29, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 9e73ace.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40931550755.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:4807de8`](https://github.com/orgs/fil-forge/packages/container/swarf/1399568771)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..974851a`](fil-forge/swarf@4b2e2ae...974851a):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
fil-forge-bot Bot added a commit to fil-forge/infra-central that referenced this pull request Oct 29, 2026
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars`
to what `terraform/envs/staging/apps/terraform.tfvars` pins at 2a0e4ab.
Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps`
on the merge commit, with no further confirmation.

staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/40932541907.

This pull request is rebuilt each time staging passes its smoke test after a push
to `main`, and closed once prod matches staging. To hold a service back, push
to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull
request is open.

## sprue

[`sha256:79eb33d`](https://github.com/orgs/fil-forge/packages/container/sprue/1339893466) → [`sha256:dac4f50`](https://github.com/orgs/fil-forge/packages/container/sprue/1420685307)

What fil-forge/sprue brings over prod's pin, [`9b40689..e675a2c`](fil-forge/sprue@9b40689...e675a2c):

- `Upgrade ucantone and log recovered panics` ([85b7799](fil-forge/sprue@85b7799))
- `Fix shared logger mutation in /provider/add` ([dc00875](fil-forge/sprue@dc00875))
- `Tolerate duplicate blob/add and blob/remove` ([c4a810d](fil-forge/sprue@c4a810d))
- `Stop sharing shard slices in memory upload store` ([4c387b0](fil-forge/sprue@4c387b0))
- `Don't panic on failure receipts without a name` ([32423bf](fil-forge/sprue@32423bf))
- `Insert agent index rows in a stable order` ([d5bc0fb](fil-forge/sprue@d5bc0fb))
- `Raise default postgres pool size to 100` ([b2ad08f](fil-forge/sprue@b2ad08f))
- `Lower default postgres pool size to 20` ([2038899](fil-forge/sprue@2038899))
- `Fail a /blob/add that loses the registration race` ([452bc56](fil-forge/sprue@452bc56))
- `Correct the descendingCIDs test helper comment` ([ea8fd67](fil-forge/sprue@ea8fd67))
- `Use conditional writes for admin provider updates` ([77b1492](fil-forge/sprue@77b1492))
- `Revert "Use conditional writes for admin provider updates"` ([5d0de78](fil-forge/sprue@5d0de78))
- fil-forge/sprue#130 ([0b76576](fil-forge/sprue@0b76576))
- fil-forge/sprue#131 ([8c7925a](fil-forge/sprue@8c7925a))
- fil-forge/sprue#132 ([a7762f6](fil-forge/sprue@a7762f6))
- fil-forge/sprue#133 ([a5d84ee](fil-forge/sprue@a5d84ee))
- fil-forge/sprue#137 ([98d22cc](fil-forge/sprue@98d22cc))
- fil-forge/sprue#136 ([9fb2d96](fil-forge/sprue@9fb2d96))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([dbd600d](fil-forge/sprue@dbd600d))
- `Address round 1 review of the observability guidance` ([4188af6](fil-forge/sprue@4188af6))
- fil-forge/sprue#141 ([046155c](fil-forge/sprue@046155c))
- fil-forge/sprue#142 ([80c2ed6](fil-forge/sprue@80c2ed6))
- fil-forge/sprue#145 ([9e5422e](fil-forge/sprue@9e5422e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([a5ee6c7](fil-forge/sprue@a5ee6c7))
- fil-forge/sprue#143 ([3c62127](fil-forge/sprue@3c62127))
- `Rewrap docs/observability.md` ([5c8387a](fil-forge/sprue@5c8387a))
- fil-forge/sprue#140 ([88ec247](fil-forge/sprue@88ec247))
- `Merge branch 'main' into claude/ucantone-upgrade-concurrency-c1a7d5` ([048df30](fil-forge/sprue@048df30))
- fil-forge/sprue#109 ([bb3458c](fil-forge/sprue@bb3458c))
- `Use conditional writes for admin provider updates` ([34ff3f9](fil-forge/sprue@34ff3f9))
- `Copy replication weights in memory provider store` ([0ca9a6e](fil-forge/sprue@0ca9a6e))
- fil-forge/sprue#110 ([ad4c80f](fil-forge/sprue@ad4c80f))
- `Remove Put from the storage provider store` ([49fe894](fil-forge/sprue@49fe894))
- fil-forge/sprue#148 ([2ee5d6c](fil-forge/sprue@2ee5d6c))
- fil-forge/sprue#149 ([7b94804](fil-forge/sprue@7b94804))
- fil-forge/sprue#147 ([e675a2c](fil-forge/sprue@e675a2c))

## hilt

[`sha256:5b6d022`](https://github.com/orgs/fil-forge/packages/container/hilt/1384674731) → [`sha256:147557d`](https://github.com/orgs/fil-forge/packages/container/hilt/1429334113)

What fil-forge/hilt brings over prod's pin, [`42dd070..023fa3a`](fil-forge/hilt@42dd070...023fa3a):

- fil-forge/hilt#97 ([b5d3b3e](fil-forge/hilt@b5d3b3e))
- fil-forge/hilt#98 ([1f0b2c1](fil-forge/hilt@1f0b2c1))
- fil-forge/hilt#99 ([ac4676e](fil-forge/hilt@ac4676e))
- fil-forge/hilt#101 ([9328a49](fil-forge/hilt@9328a49))
- fil-forge/hilt#102 ([cd26388](fil-forge/hilt@cd26388))
- fil-forge/hilt#100 ([358562a](fil-forge/hilt@358562a))
- fil-forge/hilt#104 ([06acdbb](fil-forge/hilt@06acdbb))
- fil-forge/hilt#105 ([4fd8d7b](fil-forge/hilt@4fd8d7b))
- fil-forge/hilt#106 ([6d996f9](fil-forge/hilt@6d996f9))
- fil-forge/hilt#108 ([c258fe3](fil-forge/hilt@c258fe3))
- fil-forge/hilt#107 ([023fa3a](fil-forge/hilt@023fa3a))

## swarf

[`sha256:c364312`](https://github.com/orgs/fil-forge/packages/container/swarf/1361661163) → [`sha256:87d48f8`](https://github.com/orgs/fil-forge/packages/container/swarf/1469527924)

What fil-forge/swarf brings over prod's pin, [`4b2e2ae..0b9c66d`](fil-forge/swarf@4b2e2ae...0b9c66d):

- `Add AGENTS.md with observability guidance` ([88dbb4c](fil-forge/swarf@88dbb4c))
- `Address round 1 review of the observability guidance` ([305021e](fil-forge/swarf@305021e))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([7ff3da0](fil-forge/swarf@7ff3da0))
- `Rewrap docs/observability.md` ([72018b4](fil-forge/swarf@72018b4))
- fil-forge/swarf#24 ([974851a](fil-forge/swarf@974851a))
- `FIL-1646 Bump ucantone to run batch invocations concurrently` ([0cbf743](fil-forge/swarf@0cbf743))
- `FIL-1646 Lock the test handler's revoked list` ([cdd1d32](fil-forge/swarf@cdd1d32))
- fil-forge/swarf#26 ([0b9c66d](fil-forge/swarf@0b9c66d))

## delegator

[`sha256:30b1757`](https://github.com/orgs/fil-forge/packages/container/delegator/1178963957) → [`sha256:7fb4eb5`](https://github.com/orgs/fil-forge/packages/container/delegator/1399567101)

What fil-forge/delegator brings over prod's pin, [`b5552f1..3ae7270`](fil-forge/delegator@b5552f1...3ae7270):

- fil-forge/delegator#35 ([8bf4153](fil-forge/delegator@8bf4153))
- fil-forge/delegator#36 ([3dfe8c4](fil-forge/delegator@3dfe8c4))
- fil-forge/delegator#37 ([eb81da2](fil-forge/delegator@eb81da2))
- fil-forge/delegator#38 ([314b6d6](fil-forge/delegator@314b6d6))
- fil-forge/delegator#40 ([e588b27](fil-forge/delegator@e588b27))
- fil-forge/delegator#42 ([9cfc334](fil-forge/delegator@9cfc334))
- fil-forge/delegator#43 ([3d3525c](fil-forge/delegator@3d3525c))
- fil-forge/delegator#45 ([5e4090c](fil-forge/delegator@5e4090c))
- fil-forge/delegator#47 ([22d663d](fil-forge/delegator@22d663d))
- fil-forge/delegator#44 ([984ea6e](fil-forge/delegator@984ea6e))
- fil-forge/delegator#46 ([861f107](fil-forge/delegator@861f107))
- fil-forge/delegator#48 ([5a14d35](fil-forge/delegator@5a14d35))
- fil-forge/delegator#49 ([3fe2769](fil-forge/delegator@3fe2769))
- fil-forge/delegator#52 ([1ee1e5b](fil-forge/delegator@1ee1e5b))
- fil-forge/delegator#51 ([d12f29a](fil-forge/delegator@d12f29a))
- fil-forge/delegator#53 ([8d3b969](fil-forge/delegator@8d3b969))
- fil-forge/delegator#55 ([4d6e592](fil-forge/delegator@4d6e592))
- fil-forge/delegator#56 ([4d37521](fil-forge/delegator@4d37521))
- fil-forge/delegator#59 ([26d9d4e](fil-forge/delegator@26d9d4e))
- fil-forge/delegator#60 ([7eeff65](fil-forge/delegator@7eeff65))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([fe04a4c](fil-forge/delegator@fe04a4c))
- `Address round 1 review of the observability guidance` ([b29fad9](fil-forge/delegator@b29fad9))
- fil-forge/delegator#62 ([aaba55d](fil-forge/delegator@aaba55d))
- fil-forge/delegator#63 ([b3bc907](fil-forge/delegator@b3bc907))
- fil-forge/delegator#64 ([716049e](fil-forge/delegator@716049e))
- fil-forge/delegator#66 ([2c2784d](fil-forge/delegator@2c2784d))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([409ff15](fil-forge/delegator@409ff15))
- `Rewrap docs/observability.md` ([77e9d0a](fil-forge/delegator@77e9d0a))
- fil-forge/delegator#61 ([3ae7270](fil-forge/delegator@3ae7270))

## signing_service

[`sha256:b7ef5f0`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1157634158) → [`sha256:4493534`](https://github.com/orgs/fil-forge/packages/container/piri-signing-service/1399574922)

What fil-forge/piri-signing-service brings over prod's pin, [`c2ac7db..678c9c1`](fil-forge/piri-signing-service@c2ac7db...678c9c1):

- fil-forge/piri-signing-service#19 ([8472ad9](fil-forge/piri-signing-service@8472ad9))
- `AGENTS.md: add telemetry, alerts and dashboards to the definition of done` ([53d3758](fil-forge/piri-signing-service@53d3758))
- `Address round 1 review of the observability guidance` ([950ef02](fil-forge/piri-signing-service@950ef02))
- `Keep the always-loaded guidance short, and move the how-to to docs` ([e07d0ee](fil-forge/piri-signing-service@e07d0ee))
- `Rewrap docs/observability.md` ([af8b5c1](fil-forge/piri-signing-service@af8b5c1))
- fil-forge/piri-signing-service#22 ([678c9c1](fil-forge/piri-signing-service@678c9c1))
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