Skip to content

docs(nips): add profile-attestation owner path to NIP-IA#732

Merged
tlongwell-block merged 2 commits into
mainfrom
eva/nip-ia-profile-attestation
May 23, 2026
Merged

docs(nips): add profile-attestation owner path to NIP-IA#732
tlongwell-block merged 2 commits into
mainfrom
eva/nip-ia-profile-attestation

Conversation

@tlongwell-block
Copy link
Copy Markdown
Collaborator

Summary

Adds a second owner-of-agent proof source to NIP-IA's consent=owner archival path: Published Profile Attestation. A relay MAY accept an owner's kind:9035/kind:9036 request by reading the NIP-OA auth tag from the target's own latest kind:0 profile, instead of requiring the owner to attach a retained credential to the request.

Why

The existing owner-of-agent path requires the owner to have kept the NIP-OA auth tag the agent issued at provisioning — an out-of-band credential that can be lost. The profile path removes that requirement: the agent already publishes its auth tag on its own profile, so the proof lives on the relay as long as the profile does. This is exactly the zombie-agent case the NIP opens with — the agent key is gone, but its profile attestation survives, and the owner needs only their own key.

What it does

  • New Published Profile Attestation subsection under §Owner-of-Agent Requests (the existing path becomes Request-Borne Credential); both produce the same consent=owner delta.
  • Deterministic, profile-only: the relay MUST use the target's latest valid kind:0 resolved at request time. No fallback to older profiles or non-profile events — so a target revokes this path by republishing its profile without a valid auth tag.
  • Explicit failure modes: zero, multiple (per NIP-OA, multiple = no valid tag), or invalid auth tags all fail the proof source.
  • Condition clauses not evaluated on this path. The profile is a standing ownership declaration; like the request-borne path, it reuses the NIP-OA signing preimage as identity-binding owner-of-target evidence in a NIP-IA-specific context — not full event-level NIP-OA provenance verification. (New Implementation Gotcha docs(readme): clarify desktop setup #4.)
  • Auditable proof reference: the delta uses a marked ["e", "<profile-event-id>", "", "proof", "<target-pubkey>"] tag, distinct from the request e tag.
  • Updates the zombie-agent example and adds two Invalid Cases rows.

Verification

  • git diff --check clean; balanced fenced code blocks; one file changed (+34 / −2).
  • Reviewed for nostr-protocol/nips standards conformance by Max (sprout agent) against the upstream NIPs corpus: deterministic latest-profile semantics, single identity-binding rationale, explicit multi-auth failure, unambiguous proof reference.

Adds a second owner-of-agent proof source for `consent=owner` archival:
the relay MAY read the NIP-OA `auth` tag from the target's own latest
`kind:0` profile instead of requiring the owner to attach a retained
credential to the request. This covers the zombie-agent case where the
owner key survives but no saved credential does — the proof lives on the
relay as long as the profile does.

Profile-only and deterministic: latest valid `kind:0` resolved at request
time, no fallback to older profiles or non-profile events, so revocation
by republishing without the tag is honored. Multiple/zero/invalid `auth`
tags all fail the proof source. Condition clauses are not evaluated on
this path (the profile is a standing ownership declaration, reusing the
NIP-OA preimage as identity-binding evidence in a NIP-IA-specific context,
matching the request-borne path's rationale). Proof reference uses a
marked `["e", <profile-id>, "", "proof", <target-pubkey>]` tag distinct
from the request `e` tag.

Updates §Owner-of-Agent Requests (split into Request-Borne Credential and
Published Profile Attestation), gotcha #4, the zombie example, and two
Invalid Cases rows.

Signed-off-by: Tyler Longwell <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: Max (sprout agent) <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
@tlongwell-block tlongwell-block requested a review from a team as a code owner May 23, 2026 02:27
@tlongwell-block tlongwell-block merged commit bd93649 into main May 23, 2026
13 checks passed
@tlongwell-block tlongwell-block deleted the eva/nip-ia-profile-attestation branch May 23, 2026 02:30
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.

1 participant