跳转到内容

ak.schema.invite_receive_policy.v1

← Schemas

Arkret Invite and Contact Receive Policy
ak.schema.invite_receive_policy.v1 · file: schemas/invite-receive-policy.schema.json

Subject-private policy used by a Station to decide which invite delivery or first-contact request introduction evidence may notify the holder. This policy is not written into the target Realm durable event log or the public contact fact log.

* $ · object
Subject-private policy used by a Station to decide which invite delivery or first-contact request introduction evidence may notify the holder. This policy is not written into the target Realm durable event log or the public contact fact log.
* schema · const "ak.schema.invite_receive_policy.v1"
enum: "ak.schema.invite_receive_policy.v1"
* account_id · object · $ref ./common-ids.schema.json#/$defs/account_id
Complete protocol identity for a principal at one Station, including human, Agent, Applet-managed Ghost and integration accounts. It does not imply a human login, provisioning workflow, credential class or authorization. Equality is byte-for-byte equality of both canonical did_core_id components; neither component may be inferred from a DID Document, route, session audience, current service, handle, or local database key. Accounts with the same principal_id at different station_id values are permanently distinct. Principal equality MUST NOT establish account equivalence or any permission inheritance, merging, delegation, substitution or recovery relationship. Account-scoped authority requires independent authorization for the exact AccountId. Permanent loss of a Station does not permit its accounts or PCR lineages to migrate to or revive at another Station; Realm takeover and RealmCommit recovery do not waive this boundary. See models/common-fields.md section 4.2.
* principal_id · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
* station_id · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
* holder_allowed_introduction_kinds · array<$ref #/$defs/introduction_kind>
Allowlist of introduction evidence kinds that may reach holder notification or review.
items · string (enum) · $ref #/$defs/introduction_kind
enum: "locator_ref" "consent_grant" "shared_realm" "handle_claim" "same_station" "explicit_address"
* explicit_address_behavior · string (enum)
Default behavior for explicit_address evidence. Deployments SHOULD default to quarantine or drop, not notify.
enum: "drop" "quarantine" "notify"
handle_claim_behavior · string (enum)
Default behavior for handle_claim evidence. Omitted means quarantine. A subject MAY set notify to allow verified handle-based requests to reach the holder, but the effective value is capped by receive_policy_constraints.
enum: "drop" "quarantine" "notify"
* unknown_invites · string (enum)
Behavior for invite/contact delivery requests without compliant introduction_evidence.
enum: "drop" "quarantine"
consent_profile · string (enum)
Holder-selected invite consent gate profile (consent-model.md section 6.1). Omitted means default. Under require_explicit_consent only verified consent_grant introduction evidence may notify the holder; every other invite or first-contact delivery without an active grant is silently dropped on the holder Station: no quarantine entry, no new-source ledger charge, no holder-private write, and the requester observes the same opaque status=deferred without disclosed_outcome regardless of trust tier or disclosure settings. The profile is subject-private: it is never advertised through ServiceDescribe and MUST NOT be observable by requesters or peer Stations. It is independent of the Realm-level realm_policy_bundle preauth.consent_required flag, which only forces the admission gate to run and selects no profile.
enum: "default" "require_explicit_consent"
new_source_quota · object
Subject-private ceiling on how many previously unseen source peers may make a first contact with this holder. The ceiling is evaluated at the single holder admission chokepoint of identity/consent-model.md section 6.1.1.3 and therefore covers all three first-contact surfaces -- invite delivery, contact delivery and the identity/consent-model.md section 6.1.1 consent request -- not only the surfaces that write a holder_quarantine entry; contact delivery is charged the same way while its carrier is the Contact pending_incoming head. Each member is intersected with the deployment new_source_quota: the effective value is min(subject value, deployment max). An omitted member takes the deployment default. 0 is legal and locks the holder to zero new sources; every further first contact is silently dropped inside the existing opaque deferred equivalence class.
new_sources_per_window · integer
Holder ceiling for the short sliding window declared by receive_policy_constraints.new_source_quota.window_seconds.
new_sources_per_retention · integer
Holder ceiling for distinct new sources inside the long sliding window declared by receive_policy_constraints.new_source_quota.retention_seconds.
allowed_handle_domains · array<$ref #/$defs/domain_name>
Optional subject-private allowlist for canonical handle domains accepted as handle_claim evidence. Empty or omitted means no subject-level domain restriction; deployment constraints may still restrict the effective set.
items · string · $ref #/$defs/domain_name
Canonical IDNA A-label domain. Subdomains are not implied; list each accepted domain explicitly.
pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$
denied_handle_domains · array<$ref #/$defs/domain_name>
Subject-private denylist for canonical handle domains. Matches are rejected before allowed_handle_domains is evaluated.
items · string · $ref #/$defs/domain_name
Canonical IDNA A-label domain. Subdomains are not implied; list each accepted domain explicitly.
pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$
trusted_handle_issuer_ids · array<$ref #/$defs/did_core_id>
Optional subject-private allowlist of handle claim issuers accepted for handle_claim evidence.
items · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
trusted_directory_ids · array<$ref #/$defs/did_core_id>
Optional subject-private allowlist of Directory service DIDs accepted as resolved_by for handle_claim evidence.
items · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
trusted_realm_ids · array<$ref ./common-ids.schema.json#/$defs/realm_id>
items · string · $ref ./common-ids.schema.json#/$defs/realm_id
Retyped ak.realm.create Event token. It therefore carries the same fixed current-v1 0x01/SHA-256 content-address identity and is not selected by Realm state.
pattern: ^ak:realm:[A-Za-z0-9_-]{44}$
trusted_source_ids · array<$ref #/$defs/did_core_id>
items · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
denied_source_ids · array<$ref #/$defs/did_core_id>
items · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
denied_actor_ids · array<$ref ./common-ids.schema.json#/$defs/actor_id>
Per-account/actor block list. Invite delivery whose exact inviter ActorId is in this list MUST be dropped, and disclosure MUST be forced to opaque regardless of the disclosure policy. Accounts with the same principal core at different Stations are distinct.
items · oneOf[2] · $ref ./common-ids.schema.json#/$defs/actor_id
Complete protocol identity for an Event author or Realm member: account carries the exact AccountId for every Station-hosted principal; service identifies a service acting as itself. The discriminator is validated against accepted registration and admission evidence; it never authorizes itself. Account and service are distinct, and no comparison may fall back to a bare principal_id. Agent and integration classification, provisioning, controller binding and credential authorization are independently verified facts, not identity variants. Account actors at different Stations MUST NOT share or inherit authority merely because their principal_id, DID controller or signing key matches, including membership, capability, RealmCommit-signing and recovery authority.
oneOf · oneOf[0] · object
* kind · const "account"
enum: "account"
* account_id · $ref #/$defs/account_id · $ref #/$defs/account_id
oneOf · oneOf[1] · object
* kind · const "service"
enum: "service"
* service_id · string · $ref #/$defs/did_core_id
Canonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern: ^ak:did_core:[a-z0-9]+:[^\s/?#]+$
disclosure · object · $ref #/$defs/disclosure_policy
Graded disclosure policy. Controls whether the invite/contact delivery outcome reveals a real result (delivered/blocked) to the requester, by introduction trust tier. Holder quarantine is never disclosable at any tier: it maps to status=deferred with no disclosed_outcome. Omitted means the default: high_trust=outcome, discovery_trust=opaque, low_trust=opaque.
high_trust · string (enum) · $ref #/$defs/disclosure_level
opaque: only a generic accepted-for-processing status is returned, indistinguishable across exists/not-exists/policy outcomes. outcome: the real delivered|blocked result is disclosed to the inviter. Neither level ever discloses holder quarantine.
enum: "opaque" "outcome"
discovery_trust · string (enum) · $ref #/$defs/disclosure_level
opaque: only a generic accepted-for-processing status is returned, indistinguishable across exists/not-exists/policy outcomes. outcome: the real delivered|blocked result is disclosed to the inviter. Neither level ever discloses holder quarantine.
enum: "opaque" "outcome"
low_trust · string (enum) · $ref #/$defs/disclosure_level
opaque: only a generic accepted-for-processing status is returned, indistinguishable across exists/not-exists/policy outcomes. outcome: the real delivered|blocked result is disclosed to the inviter. Neither level ever discloses holder quarantine.
enum: "opaque" "outcome"

Source