Repository navigation
fix(s3frontend): require s3:DeleteObjectVersion for DeleteObjects entries naming a version - #287
Merged
alanshaw merged 5 commits intoOct 20, 2026
Conversation
…ries naming a version Hilt now authorizes DeleteObjects on s3:DeleteObject, as S3 does, where it used to classify the request as CreateBucket. S3 also requires s3:DeleteObjectVersion for an entry that names a version, and those entries are in the body, where Hilt cannot see them. The IAM service now carries the key's action sets on the request (reqscope.ActionsKey, the same per-key cache the fast path reads), and DeleteObjects fails such an entry with AccessDenied unless the key holds the permission on the bucket. Bumps hilt to the classification that mirrors the gateway's router (fil-forge/hilt#102) and libforge to the matching policy actions (fil-forge/libforge#86). The itest key carries the new permissions behind INGOT_ITEST_ROUTE_PERMS until the published hilt image knows them, and TestForgeRoutePermissions covers the refusals through the real hilt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hilt#102 now builds on hilt#101's subresource vocabulary and adds the GetBucketPolicyStatus operation, so the itest key carries s3:GetBucketPolicyStatus with the other route permissions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hilt moves to the hilt#102 head that pins the same libforge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
alanshaw
force-pushed
the
ash/fix/delete-objects-version-permission
branch
from
October 20, 2026 10:46
04fb884 to
62ce7ec
Compare
alanshaw
changed the base branch from
main
to
ash/chore/bump-hilt-encryption-perms
October 20, 2026 10:46
alanshaw
added this pull request to stack #288
October 20, 2026 10:47
alanshaw
added a commit
to fil-forge/hilt
that referenced
this pull request
Oct 20, 2026
…102) Stacked on #101. Pins libforge to its merge of fil-forge/libforge#86. #101 refuses a query naming two subresources (`ConflictingQuery`) or an unsupported one, and classifies DeleteObjects. It classifies the remaining supported subresources as the plain bucket or object operation. Those include writes: `PUT /b?versioning` and `?object-lock` run on a **CreateBucket** authorization, which skips the bucket scope check, so a key holding `s3:CreateBucket` can change any bucket's versioning or object lock. This PR gives each of them its own operation and permission. ### What changes Each supported subresource now selects its operation per method, as the gateway's router does (`bucketRoutes`, `objectRoutes`, alongside #101's `subresources` vocabulary): | Operation | Permission | |---|---| | GetBucketLocation / Acl / Cors | `s3:GetBucketLocation` / `s3:GetBucketAcl` / `s3:GetBucketCORS` | | GetBucketPolicyStatus | `s3:GetBucketPolicyStatus` | | Get / Put / DeleteBucketTagging | `s3:GetBucketTagging` / `s3:PutBucketTagging` (both writes) | | Get / PutBucketVersioning | `s3:GetBucketVersioning` / `s3:PutBucketVersioning` | | Get / PutObjectLockConfiguration | `s3:GetBucketObjectLockConfiguration` / `s3:PutBucketObjectLockConfiguration` | | Get / Put / DeleteObjectTagging | `s3:GetObjectTagging` / `s3:PutObjectTagging` / `s3:DeleteObjectTagging` | | GetObjectAttributes | `s3:GetObjectAttributes` | The bucket configuration writes and the policy status are service-key only, like the policy and encryption. The other new permissions are policy actions (fil-forge/libforge#86, merged). Object tagging writes are catalog writes; the bucket configuration lives in Ingot's registry and needs no Forge commands. Routing follows the router per method: - A route the gateway has that Hilt does not authorize is refused with `UnsupportedOperation`: `PUT`/`DELETE ?cors`, `PUT ?acl`, object ACLs, `?uploads`/`?versions` on an object, and `uploadId` on a PUT without a `partNumber`. - A POST naming no route is refused. On a bucket it is a browser form upload, authenticated by a signed policy in the body that Hilt doesn't verify; #101 classifies it as CreateBucket. - A supported subresource the router doesn't route on for the method is the plain operation there, as in the router (`PUT /b?uploads` creates the bucket). A HEAD is HeadBucket or HeadObject whatever its subresource. - Other query parameters are ignored, as #101 has it. ### Behaviour changes to know about - Existing service keys don't hold the new permissions, so they lose these operations until they're re-issued with them. FilOne's console sets explicit permission lists on the keys it issues and will need the new names. - Principal policies that list actions (instead of `s3:*`) need the new reads added for principals to keep reading bucket configuration, tags and attributes. - `POST /b/k?partNumber&uploadId` is now CompleteMultipartUpload, as the router routes it (same permission as the PutObject it was before). ### Tests `go test ./...` and `go vet -tags itest ./itest` pass. `TestClassifyRequest` covers each new operation, the router's fall-through cases, and the refused routes. `TestRoutesAddressExistingBuckets` checks that every routed operation is scope-checked against its bucket and routes only on a supported subresource. I haven't run the IAM itest scenarios against the change. fil-forge/ingot#287 pins this branch and runs its route-permission scenario against it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The published hilt image carries fil-forge/hilt#101 and #102, so it knows the bucket encryption permissions and the permissions of the operations it now classifies by route. Ingot's fast path already enforces the route permissions through its hilt pin, so CI's key, which carried neither set, was refused object tagging and GetObjectAttributes. Both sets join hiltAllPermissions, and the INGOT_ITEST_ENCRYPTION_PERMS and INGOT_ITEST_ROUTE_PERMS guards go. The encryption scenario's bucket-admin key leaves out the two encryption permissions explicitly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 20, 2026
Published from fil-forge/ingot#287 - Digest: `sha256:03f172b62dabfbabb2eaeb549abc7b0bc0779a18d87b36cf07a2009c53d38d82` - Commit: fil-forge/ingot@fff9351 - Publish run: https://github.com/fil-forge/ingot/actions/runs/39416156102 Merging rewrites [`nodes/dev/apps/versions.env`](https://github.com/fil-forge/infra-nodes/blob/main/nodes/dev/apps/versions.env) and queues the image. The node picks it up on its next reconcile pass, waits for a safe proving window and then restarts the service, so the deploy happens well after this merges. 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-nodes
that referenced
this pull request
Oct 20, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:03f172b`](https://github.com/orgs/fil-forge/packages/container/ingot/1415063912) What fil-forge/ingot brings over staging's pin, [`6331454..fff9351`](fil-forge/ingot@6331454...fff9351): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 20, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:03f172b`](https://github.com/orgs/fil-forge/packages/container/ingot/1415063912) What fil-forge/ingot brings over staging's pin, [`6331454..fff9351`](fil-forge/ingot@6331454...fff9351): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 20, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:93655d6`](https://github.com/orgs/fil-forge/packages/container/ingot/1417764370) What fil-forge/ingot brings over staging's pin, [`6331454..03d12c3`](fil-forge/ingot@6331454...03d12c3): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 20, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:d12d984`](https://github.com/orgs/fil-forge/packages/container/piri/1399563716) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3a9a3fd`](fil-forge/piri@c2dc6b0...3a9a3fd): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:f87a697`](https://github.com/orgs/fil-forge/packages/container/ingot/1418019409) What fil-forge/ingot brings over staging's pin, [`6331454..319edf8`](fil-forge/ingot@6331454...319edf8): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8))
alanshaw
added a commit
to fil-forge/ucan-protocol-specs
that referenced
this pull request
Oct 21, 2026
…ion (#8) Brings `s3.md` in line with Hilt's request classification and permission mapping, as implemented in fil-forge/hilt#101 and fil-forge/hilt#102, and with Ingot's checks in fil-forge/ingot#286 and fil-forge/ingot#287. - **S3 Operations** lists all 45 operations Hilt classifies, up from 15, each with its required permission: DeleteObjects, the version, lock, tagging and attribute operations, and the bucket policy, encryption, location, ACL, CORS, tagging, versioning and object-lock configuration operations. `PutObject` and `CreateBucket` are PUT only. - **Classification rules:** - Two subresources are refused as `ConflictingQuery`, an unsupported subresource as `UnsupportedOperation`. - A route the gateway has but the tenant service doesn't authorize is refused. - A subresource the router doesn't route for the method is the plain operation there. - A HEAD ignores subresources, and a POST naming no route is refused. - Other query parameters are ignored. - **DeleteObjects:** the gateway MUST check `s3:DeleteObjectVersion` for each entry that names a version and fail the entry with `AccessDenied` without it. - **Authorize Request** gains the `ConflictingQuery` failure. A gateway MAY refuse a two-subresource query without consulting the tenant service. - **S3 Permission Mapping** now matches the commands `pkg/s3perm` delegates. The table had fallen behind before this work: it lacked the catalog-write commands (`/blob/add`, `/index/add`) on every catalog-changing permission, `/upload/remove` and `/blob/remove` on `s3:PutObject`, and `s3:DeleteBucket`'s commands. Checked against Hilt `main` (`cd26388`, `pkg/rpc/service/auth/operation.go`, `pkg/s3perm/s3perm.go`) and Ingot `main` (`s3frontend/object.go`, `iam/service.go`). Still out of date: the spec doesn't describe principal-bound access keys, bucket policies, or the `/s3/bucket/policy` capability. Those predate this work and need a section of their own. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
alanshaw
added a commit
that referenced
this pull request
Oct 21, 2026
Comment-only change. Three itest comments added in #287 described history rather than the code: - `TestForgeRoutePermissions` said Hilt *used to* classify PutBucketVersioning and DeleteObjects as CreateBucket. It now says why the create-only key is refused: each operation is authorized on its own permission and against the bucket's scope. - The `hiltAllPermissions` group comments cited `fil-forge/hilt#101` and `#102`. They now say what the permissions guard. No behaviour changes; `go vet -tags itest ./itest` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b5e200f`](https://github.com/orgs/fil-forge/packages/container/ingot/1421752609) What fil-forge/ingot brings over staging's pin, [`6331454..31f159a`](fil-forge/ingot@6331454...31f159a): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b5e200f`](https://github.com/orgs/fil-forge/packages/container/ingot/1421752609) What fil-forge/ingot brings over staging's pin, [`6331454..31f159a`](fil-forge/ingot@6331454...31f159a): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:d38d6e1`](https://github.com/orgs/fil-forge/packages/container/ingot/1423201096) What fil-forge/ingot brings over staging's pin, [`6331454..30c90f3`](fil-forge/ingot@6331454...30c90f3): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 21, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:ae40c5e`](https://github.com/orgs/fil-forge/packages/container/ingot/1423645646) What fil-forge/ingot brings over staging's pin, [`6331454..b6d6b2e`](fil-forge/ingot@6331454...b6d6b2e): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:a178eb2`](https://github.com/orgs/fil-forge/packages/container/ingot/1427079306) What fil-forge/ingot brings over staging's pin, [`6331454..f2b2628`](fil-forge/ingot@6331454...f2b2628): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:b470bfc`](https://github.com/orgs/fil-forge/packages/container/ingot/1427178093) What fil-forge/ingot brings over staging's pin, [`6331454..31e01b0`](fil-forge/ingot@6331454...31e01b0): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:ea89ede`](https://github.com/orgs/fil-forge/packages/container/ingot/1427350334) What fil-forge/ingot brings over staging's pin, [`6331454..a75c81a`](fil-forge/ingot@6331454...a75c81a): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:2f1175e`](https://github.com/orgs/fil-forge/packages/container/ingot/1427537898) What fil-forge/ingot brings over staging's pin, [`6331454..49fec43`](fil-forge/ingot@6331454...49fec43): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:fce5261`](https://github.com/orgs/fil-forge/packages/container/ingot/1427940427) What fil-forge/ingot brings over staging's pin, [`6331454..9881bef`](fil-forge/ingot@6331454...9881bef): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:c4f38fd`](https://github.com/orgs/fil-forge/packages/container/ingot/1428268604) What fil-forge/ingot brings over staging's pin, [`6331454..bb88ee0`](fil-forge/ingot@6331454...bb88ee0): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:c4f38fd`](https://github.com/orgs/fil-forge/packages/container/ingot/1428268604) What fil-forge/ingot brings over staging's pin, [`6331454..bb88ee0`](fil-forge/ingot@6331454...bb88ee0): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:eea47a7`](https://github.com/orgs/fil-forge/packages/container/ingot/1428859054) What fil-forge/ingot brings over staging's pin, [`6331454..5596df7`](fil-forge/ingot@6331454...5596df7): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201) What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:00f0fb7`](https://github.com/orgs/fil-forge/packages/container/piri/1421174034) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3cd4f27`](fil-forge/piri@c2dc6b0...3cd4f27): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201) What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) - fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c)) - fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da)) - fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:7a6cd2d`](https://github.com/orgs/fil-forge/packages/container/ingot/1429078201) What fil-forge/ingot brings over staging's pin, [`6331454..7be5b2f`](fil-forge/ingot@6331454...7be5b2f): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) - fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c)) - fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da)) - fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:5ca3bc4`](https://github.com/orgs/fil-forge/packages/container/ingot/1430706317) What fil-forge/ingot brings over staging's pin, [`6331454..c1f3eaa`](fil-forge/ingot@6331454...c1f3eaa): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f)) - fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190)) - fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066)) - fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb)) - fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a)) - fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:f493390`](https://github.com/orgs/fil-forge/packages/container/piri/1429852644) What fil-forge/piri brings over staging's pin, [`c2dc6b0..3ef715b`](fil-forge/piri@c2dc6b0...3ef715b): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) - fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c)) - fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da)) - fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960) What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f)) - fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190)) - fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066)) - fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb)) - fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a)) - fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa)) - fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 22, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:07f74c5`](https://github.com/orgs/fil-forge/packages/container/piri/1431242148) What fil-forge/piri brings over staging's pin, [`c2dc6b0..e8d7fd9`](fil-forge/piri@c2dc6b0...e8d7fd9): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) - fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c)) - fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da)) - fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b)) - fil-forge/piri#196 ([1f79668](fil-forge/piri@1f79668)) - fil-forge/piri#197 ([476f1a2](fil-forge/piri@476f1a2)) - fil-forge/piri#198 ([1df9059](fil-forge/piri@1df9059)) - fil-forge/piri#193 ([e8d7fd9](fil-forge/piri@e8d7fd9)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960) What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f)) - fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190)) - fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066)) - fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb)) - fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a)) - fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa)) - fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
fil-forge-bot Bot
added a commit
to fil-forge/infra-nodes
that referenced
this pull request
Oct 23, 2026
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri [`sha256:1e91500`](https://github.com/orgs/fil-forge/packages/container/piri/1392106094) → [`sha256:07f74c5`](https://github.com/orgs/fil-forge/packages/container/piri/1431242148) What fil-forge/piri brings over staging's pin, [`c2dc6b0..e8d7fd9`](fil-forge/piri@c2dc6b0...e8d7fd9): - fil-forge/piri#108 ([7912ce0](fil-forge/piri@7912ce0)) - fil-forge/piri#177 ([37cb316](fil-forge/piri@37cb316)) - fil-forge/piri#175 ([0a2dc09](fil-forge/piri@0a2dc09)) - fil-forge/piri#180 ([2703e3e](fil-forge/piri@2703e3e)) - fil-forge/piri#182 ([8e3ce5d](fil-forge/piri@8e3ce5d)) - fil-forge/piri#178 ([fa5bc09](fil-forge/piri@fa5bc09)) - fil-forge/piri#179 ([c9565b3](fil-forge/piri@c9565b3)) - fil-forge/piri#183 ([1fef19d](fil-forge/piri@1fef19d)) - fil-forge/piri#184 ([dcf3f70](fil-forge/piri@dcf3f70)) - fil-forge/piri#174 ([3a9a3fd](fil-forge/piri@3a9a3fd)) - fil-forge/piri#187 ([3cd4f27](fil-forge/piri@3cd4f27)) - fil-forge/piri#192 ([9b3191c](fil-forge/piri@9b3191c)) - fil-forge/piri#121 ([0fbd8da](fil-forge/piri@0fbd8da)) - fil-forge/piri#194 ([3ef715b](fil-forge/piri@3ef715b)) - fil-forge/piri#196 ([1f79668](fil-forge/piri@1f79668)) - fil-forge/piri#197 ([476f1a2](fil-forge/piri@476f1a2)) - fil-forge/piri#198 ([1df9059](fil-forge/piri@1df9059)) - fil-forge/piri#193 ([e8d7fd9](fil-forge/piri@e8d7fd9)) ## ingot [`sha256:f629535`](https://github.com/orgs/fil-forge/packages/container/ingot/1386342616) → [`sha256:8a16655`](https://github.com/orgs/fil-forge/packages/container/ingot/1431251960) What fil-forge/ingot brings over staging's pin, [`6331454..4585b83`](fil-forge/ingot@6331454...4585b83): - fil-forge/ingot#265 ([83dc31d](fil-forge/ingot@83dc31d)) - fil-forge/ingot#267 ([9b7051f](fil-forge/ingot@9b7051f)) - fil-forge/ingot#266 ([6aa7eee](fil-forge/ingot@6aa7eee)) - fil-forge/ingot#283 ([d69bbf3](fil-forge/ingot@d69bbf3)) - fil-forge/ingot#284 ([324e294](fil-forge/ingot@324e294)) - fil-forge/ingot#285 ([4fddf05](fil-forge/ingot@4fddf05)) - fil-forge/ingot#286 ([f879a36](fil-forge/ingot@f879a36)) - fil-forge/ingot#287 ([fff9351](fil-forge/ingot@fff9351)) - fil-forge/ingot#289 ([03d12c3](fil-forge/ingot@03d12c3)) - fil-forge/ingot#269 ([319edf8](fil-forge/ingot@319edf8)) - fil-forge/ingot#295 ([31f159a](fil-forge/ingot@31f159a)) - fil-forge/ingot#296 ([30c90f3](fil-forge/ingot@30c90f3)) - fil-forge/ingot#298 ([b6d6b2e](fil-forge/ingot@b6d6b2e)) - fil-forge/ingot#292 ([7c9440d](fil-forge/ingot@7c9440d)) - fil-forge/ingot#293 ([f2b2628](fil-forge/ingot@f2b2628)) - fil-forge/ingot#297 ([31e01b0](fil-forge/ingot@31e01b0)) - fil-forge/ingot#291 ([a75c81a](fil-forge/ingot@a75c81a)) - fil-forge/ingot#300 ([49fec43](fil-forge/ingot@49fec43)) - fil-forge/ingot#299 ([9881bef](fil-forge/ingot@9881bef)) - fil-forge/ingot#279 ([bb88ee0](fil-forge/ingot@bb88ee0)) - fil-forge/ingot#278 ([0d16d90](fil-forge/ingot@0d16d90)) - fil-forge/ingot#280 ([5596df7](fil-forge/ingot@5596df7)) - fil-forge/ingot#273 ([7be5b2f](fil-forge/ingot@7be5b2f)) - fil-forge/ingot#276 ([957e190](fil-forge/ingot@957e190)) - fil-forge/ingot#282 ([ebbc066](fil-forge/ingot@ebbc066)) - fil-forge/ingot#275 ([425d2cb](fil-forge/ingot@425d2cb)) - fil-forge/ingot#281 ([b36651a](fil-forge/ingot@b36651a)) - fil-forge/ingot#301 ([c1f3eaa](fil-forge/ingot@c1f3eaa)) - fil-forge/ingot#302 ([4585b83](fil-forge/ingot@4585b83))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #286, which maps hilt#101's
ConflictingQueryrefusal to S3's 400. Pins hilt to the merge of fil-forge/hilt#102 (cd26388, which includes hilt#101), replacing #286's pin, and libforge to its merge of fil-forge/libforge#86.Hilt used to classify
POST /b?delete(DeleteObjects) as CreateBucket. CreateBucket skips the bucket scope check, so a key holdings3:CreateBucketcould batch-delete in any bucket of its tenant, permanently deleting named versions included. Ingot did no permission check per entry. hilt#101 authorizes DeleteObjects ons3:DeleteObject, as S3 does.S3 also requires
s3:DeleteObjectVersionfor each entry that names a version. Those entries are in the body, where Hilt can't see them, so Ingot now checks them: the IAM service puts the key's action sets on the request (reqscope.ActionsKey, the same per-key cache the local fast path reads), andDeleteObjectsfails each such entry with AccessDenied, leaving the version in place, unless the key holds the permission on the bucket. Entries without a version are unaffected. A request with no action set refuses version entries.The pin bump also brings in hilt#101's and hilt#102's classification on the fast path (
RequirementsFor), so bucket configuration, object tagging and attribute requests are checked against their own permissions.Tests
TestVersioning_DeleteObjectsNeedsVersionPermission: refused without the permission and with no action set; a mixed batch refuses the version entry and deletes the rest.TestForgeRoutePermissions(itest), through the real hilt:s3:CreateBucketis refused PutBucketVersioning and DeleteObjects on an existing buckets3:DeleteObjectVersiongets AccessDenied for the version entry while the other entry is deleted, and a key with it deletes the versionEach denial is asserted twice, so the fast path is covered.
The itest key (
hiltAllPermissions) carries the encryption and route permissions; the published hilt image knows them, so theINGOT_ITEST_ENCRYPTION_PERMSandINGOT_ITEST_ROUTE_PERMSguards are gone and both permission scenarios run in CI.make testpasses. Against the published hilt:main(cd26388), with no override, as CI runs, these pass:TestForgeVersity(the S3 conformance suite),TestForgeScenarios,TestForgeRoutePermissionsandTestForgeBucketEncryptionPermissions.Merge #286 first; this PR's pin replaces its pin.
🤖 Generated with Claude Code