docs(nip-fi): fix pinned NIP source links and identifier-classification contradiction

Review findings from Mari and Quinn on #5946 at 2511d1baf:

- Repoint the pinned NIP-42/NIP-98 source links from a nonexistent
  upstream commit (404) to the resolved commit
  6d2979b3f503a8539c983efbcdcf901bbcf9ed23 (both 200).
- NIP-FI-EDGE no longer classifies transport_contract_id as
  interoperability-critical, which contradicted core's exclusive
  deployment-local classification. The value stays deployment-local;
  the contract semantics EDGE contributes to it are what is normative.
- Core's rejection-and-privacy absolute ("never of private server
  state") now carries the authorization_unavailable carve-out its own
  table and NIP-FI-CONF already relied on.

Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
Signed-off-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
This commit is contained in:
Eva
2026-08-17 22:32:29 -04:00
parent 2511d1baff
commit 513e03b069
2 changed files with 13 additions and 7 deletions

View File

@@ -19,9 +19,13 @@ The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHALL**, **SHALL NOT**,
**OPTIONAL** are to be interpreted as described in BCP 14 when, and only when,
they appear in all capitals.
`transport_contract_id` and every identifier serialized by this document are
interoperability-critical. Local adapter revision identifiers and key identifiers
are deployment-local and MUST NOT appear in public discovery.
Every identifier this document serializes on the wire — header names, the
profile identifier, provenance envelope fields, and proof transport codes — is
interoperability-critical. `transport_contract_id` remains deployment-local as
core classifies it: its value is opaque outside a deployment, while the
canonical contract semantics this profile contributes to it are normative and
fixed here. Local adapter revision identifiers and key identifiers are
deployment-local and MUST NOT appear in public discovery.
## Common trusted-edge requirements

View File

@@ -447,8 +447,10 @@ assertion revalidation material is destroyed on expiry, close, or invalidation.
## Rejection and privacy
Public class is a function only of evidence the requester supplied, never of
private server state. Under the private-posture rule, even `key_mismatch` joins
the private-state anonymity set.
private per-principal server state; `authorization_unavailable` is the sole
exception and reveals only that a required authoritative dependency is
unreadable, never any per-principal fact. Under the private-posture rule, even
`key_mismatch` joins the private-state anonymity set.
| Private condition | Public class | Nostr prefix and exact text | HTTP response |
|---|---|---|---|
@@ -578,8 +580,8 @@ atomically. Availability failures deny rather than degrade to Nostr-only access.
## Sources
- NIP-42 authentication: <https://github.com/nostr-protocol/nips/blob/6d2979b369329748734c66846989e453270ced03/42.md>
- NIP-98 HTTP authentication: <https://github.com/nostr-protocol/nips/blob/6d2979b369329748734c66846989e453270ced03/98.md>
- NIP-42 authentication: <https://github.com/nostr-protocol/nips/blob/6d2979b3f503a8539c983efbcdcf901bbcf9ed23/42.md>
- NIP-98 HTTP authentication: <https://github.com/nostr-protocol/nips/blob/6d2979b3f503a8539c983efbcdcf901bbcf9ed23/98.md>
- JWT BCP: <https://www.rfc-editor.org/rfc/rfc8725>
- JWT access-token profile: <https://www.rfc-editor.org/rfc/rfc9068>
- Non-normative composed model: [NIP-FI-MODEL.md](NIP-FI-MODEL.md)