Skip to content

feat(stack): delegate /s3/bucket/policy from hilt to ingot - #65

Merged
pyropy merged 5 commits into
mainfrom
srdjan/feat/delegate-bucket-policy-to-ingot
Oct 20, 2026
Merged

pyropy merged 5 commits into
mainfrom
srdjan/feat/delegate-bucket-policy-to-ingot

Conversation

@pyropy

@pyropy pyropy commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Adds /s3/bucket/policy to the Hilt-to-Ingot delegation smelt generates, so Ingot can invoke Hilt's new policy command. Existing stacks need ./generated/generate-proofs.sh --force and a restart.

🤖 Generated with Claude Code

pyropy and others added 2 commits September 28, 2026 18:46
Hilt serves the S3 bucket policy operations as one command,
/s3/bucket/policy (fil-forge/hilt#89), which ingot forwards
(fil-forge/ingot#194). Ingot needs a proof for it like the other /s3/*
commands, so the generated hilt→ingot delegation carries it, in both the
Go generator the service repos' test stacks use and the proofs script
make init runs.

Temporary pin to libforge branch srdjan/feat/s3-bucket-policy-command
(fil-forge/libforge#80) for the command binding; re-pin before merge.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@pyropy
pyropy marked this pull request as ready for review October 2, 2026 09:45
@pyropy
pyropy requested a review from a team October 2, 2026 09:45
pyropy added a commit to fil-forge/hilt that referenced this pull request Oct 14, 2026
Serves S3 `GetBucketPolicy`, `PutBucketPolicy` and `DeleteBucketPolicy`
as one Hilt command, `/s3/bucket/policy`, reached by service keys only.
The PUT body must match the signed payload hash, and `If-Match` /
`If-None-Match` are optional signed preconditions.

- `?policy` classified into three operations with their own permissions
- `pkg/rpc/service/bucket/policy.go`: operation, body hash check,
preconditions
- Handler, wiring and failure mapping; `client.Policy` for Ingot
- `sigv4.PayloadHash` and a test presign option
- The operation acts on the authorized bucket's DID; an empty
precondition is invalid
- Deployments must delegate `/s3/bucket/policy` from Hilt to Ingot
(fil-forge/smelt#65 does it for local stacks)
- A principal's policy list carries no per-item ETag; a caller reads it
from `GetBucketPolicy`'s `ETag` header
- A bucket deleted between authorization and a policy write answers
`UnknownBucket`
- Temporary pin: libforge to fil-forge/libforge#80; re-pin before merge

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@pyropy
pyropy enabled auto-merge October 20, 2026 11:57
@pyropy
pyropy disabled auto-merge October 20, 2026 11:57
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pyropy
pyropy enabled auto-merge October 20, 2026 12:04
@pyropy
pyropy merged commit 3d6b5c2 into main Oct 20, 2026
6 checks passed
Peeja added a commit to fil-forge/forge-perf that referenced this pull request Oct 23, 2026
fil-forge/smelt#65 raised smelt's go.mod go line to 1.27.0, which it
inherits from libforge b6aeeaf7c926 and ucantone c31dec73d9b3. The box
runs Go 1.26.8 with GOTOOLCHAIN=local, so `make -C smelt generate` in
step_images exits at once with "go.mod requires go >= 1.27.0", and
every run since main-20261020t123429z has ended no_data with
runner_error before boot.

smelt cannot drop below 1.27.0 without the libforge release that adds
/s3/bucket/policy, so the box moves to Go 1.27.3. The pin's comment now
says it must cover smelt's go line as well as the harness's.



Claude-Session: https://claude.ai/code/session_01XxPevBqc5xVdk23kRK35i5

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants