Skip to content

feat: Attested Signatures + UCAN Principal Clarification#7

Open
Peeja wants to merge 6 commits into
mainfrom
petra/feat/attested-signatures
Open

feat: Attested Signatures + UCAN Principal Clarification#7
Peeja wants to merge 6 commits into
mainfrom
petra/feat/attested-signatures

Conversation

@Peeja

@Peeja Peeja commented Jun 7, 2026

Copy link
Copy Markdown

@Peeja Peeja force-pushed the petra/feat/attested-signatures branch from 1a8e384 to 12d7455 Compare June 17, 2026 21:38
Call libforge's reusable go-workspace-test workflow so PRs that share a branch
name with sibling repos are tested against those siblings' branches.

Add a `test` target (`go test ./...`) so the workspace job has a single,
repo-owned test command to run. Unit tests only — the Docker-backed e2e suite
stays gated behind the `e2e` tag in its own workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Peeja Peeja force-pushed the petra/feat/attested-signatures branch from 03f95a9 to a98e670 Compare June 19, 2026 16:10
Peeja added 3 commits June 19, 2026 12:16
* `multikey` and `absentee` go up a level to the root.
* `verification.NewIssuer()` is gone; we can use `multikey.NewIssuer()`
  in every case we have.
* The verifier factory types move `validator`. They're not inherent to
  *validation*, they're just used to configure the validator.
@Peeja Peeja force-pushed the petra/feat/attested-signatures branch from a98e670 to 17d4d3d Compare June 19, 2026 16:16
Copilot AI changed the title feat: Attested Signatures + UCAN Principal Clarification ci: pin piri image to fix e2e failures caused by ucan.Issuer DI regression Jun 19, 2026
Copilot finished work on behalf of Peeja June 19, 2026 18:06
@Peeja Peeja changed the title ci: pin piri image to fix e2e failures caused by ucan.Issuer DI regression feat: Attested Signatures + UCAN Principal Clarification Jun 19, 2026
@Peeja

Peeja commented Jun 19, 2026

Copy link
Copy Markdown
Author

Copilot added some changes to fix a build issue. @frrist, can you take a look at those two commits and see if they make any sense? It looks like the wrong way to solve this to me, but I don't have enough context in my head to understand where the right change should be.

Copilot's change description follows:


The e2e CI job (TestStackFromSnapshot and TestUploadAndRetrieve) was failing because ghcr.io/fil-forge/piri:main was rebuilt with the new ucantone library (which refactored verification.NewIssuer() out), but piri's uber-go/fx dependency injection wiring wasn't updated. Piri crashes at startup with:

FATAL cmd building piri: ... missing type: ucan.Issuer (did you mean to Provide it?)

Fix

Pinned PIRI_IMAGE in .env to the specific digest (sha256:31509ada...) that was used when the committed 3-piri-filesystem-sqlite snapshot was saved — a known-good version of piri that works with the current stack.

The pin comment describes what needs to be fixed upstream: piri's DI wiring needs to be updated to use multikey.NewIssuer() instead of the removed verification.NewIssuer() provider for ucan.Issuer. Remove the pin and regenerate the snapshot once that is resolved.

@frrist

frrist commented Jun 26, 2026

Copy link
Copy Markdown
Member

@Peeja the issue here requires a fix in Piri, I think. I believe fil-forge/piri#18 broke the serve command since nothing is providing a ucan.Issuer to the NewPieceAccepter method, and possibly others. This failure shows up when the node starts, rather than when its built - since fx is dynamic. This is my hunch for the moment, but I feel pretty sure on it.

claude added 2 commits July 2, 2026 15:20
Update libforge from eb26d871 (the commit just before the fix) to
2b55dbcf, which is fil-forge/libforge#43 "verify attested signatures
from did:web authorities".

This is the fix for the post–Attested-Signatures `guppy login` failure
the e2e suite hit: `/access/claim` rejected the did:mailto account
delegation with `InvalidSignature` ("did:web:upload: signature
mismatch") because the attestation verifier re-resolved the did:web
authority with the default did:key-only resolver. libforge#43 verifies
the attestation invocation with the already-resolved authority verifier.

The login-path verifier is sprue (upload), whose :main image already
carries this libforge version (sprue@41a47b0c). Bumping smelt's own
module keeps the unit/workspace tests building against the same libforge.

This supersedes the two reverted Copilot commits, which misdiagnosed the
failure as a piri fx dependency-injection regression and pinned the piri
image to an old digest — a workaround that did not fix the e2e (the run
failed at login, before piri is ever exercised).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017yUxrDH8gWAA4ufwzuq657
sprue's S3 agent store now defaults storage.s3.use_path_style to false
(virtual-hosted addressing: <bucket>.minio:9000), which does not resolve
on the compose network — the upload service crashes at startup with
`creating S3 bucket "agent-message": ... Put "http://agent-message.minio:9000/":
dial tcp: lookup agent-message.minio ... no such host` (upload hook exits 137).

MinIO only serves path-style requests (minio:9000/<bucket>), so set
storage.s3.use_path_style: true in the upload config. This regression is
unrelated to the attested-signature work; it surfaced because bumping to a
current sprue:main image pulled in sprue's newer S3 addressing defaults.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017yUxrDH8gWAA4ufwzuq657
@Peeja

Peeja commented Jul 2, 2026

Copy link
Copy Markdown
Author

fil-forge/piri#29 and fil-forge/indexing-service#8 landing should make this go green. 🤞🏻

Peeja commented Jul 3, 2026

Copy link
Copy Markdown
Author

Handoff — one step left to get this green (cc @frrist)

Petra had to step away, so Forrest this is yours to land. Summary of where things are and the single remaining step.

Done & merged

  • This PR (smelt): dropped the two Copilot .env pin commits; bumped libforge2b55dbcf (libforge#43, attested did:web login fix); added storage.s3.use_path_style: true to systems/upload/config/config.yaml (the newer sprue:main defaults it false, so the upload service couldn't reach MinIO and crashed at boot).
  • piri #29 and indexer #8: bumped ucantone 7985ec0a8f24fe (accepts the DID Core v1 @context) + libforge2b55dbcf. Both merged; :main images rebuilt.

Verified via E2E

Dispatching .github/workflows/e2e.yml on this branch, the earlier failures are gone: guppy login succeeds (no more InvalidSignature) and the upload service boots (no more agent-message.minio DNS crash).

The one remaining blocker: the delegator's DID document

Latest run (28686738331) still fails at blob/accept:

piri: publishing location commitment: unable to resolve "did:web:delegator":
  parsing DID document JSON: @context must list ".../did/v1.1" or ".../did/v1" first

The "or v1" wording confirms the rebuilt piri:main is running the new ucantone — so this is now purely delegator-side. delegator:main still serves a DID document whose first @context entry is neither v1.1 nor v1 (pre-migration format). piri resolves did:web by fetching the live document over HTTP (no static-mapping override), and current libforge/ucantone marshal @context v1.1-first, so a delegator rebuilt on current deps serves a parseable doc.

I couldn't do this one myself — fil-forge/delegator isn't in this session's repo scope.

Steps to finish

  1. In fil-forge/delegator, bump go.mod: ucantonea8f24fe (or later) and libforge2b55dbcf (or later); go mod tidy + build. (Same one-line dep bump as piri#29 / indexer#8.)
  2. Merge and let delegator:main rebuild.
  3. Re-run this PR's E2E workflow (Actions → E2E → Run workflow on petra/feat/attested-signatures, or gh workflow run e2e.yml --ref petra/feat/attested-signatures) and confirm green.

Every @context failure in the current run is for did:web:delegator only, so the delegator rebuild should be the last step — but a fresh e2e afterward is worth it to rule out a straggler behind it.

🤖 Generated with Claude Code
https://claude.ai/code/session_017yUxrDH8gWAA4ufwzuq657


Generated by Claude Code

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.

4 participants