# description
Shared enums and reusable types referenced by other v0.2 schemas. Not a standalone payload. Extends v0.1 with explicit L1/L2/L3 disclosure tiers, verification attribution, and federation primitives.

# $defs.DisclosureTier.description
L1 = agent-to-agent public surface (mirrors a standard job ad). L2 = agent-to-agent after interest is signalled by either party (vacancy-initiated in discovery, seeker-initiated on direct apply); mirrors application-form screening. L3 = human-to-human after vacancy poster releases (carries identity, compensation specifics, calendar). Posters configure per-field which tier reveals which information; defaults are sensible for the 90% case.

# $defs.ConversationState.description
State machine for a single seeker↔vacancy handshake. Disclosure is monotonic (advances only, consent at each step); declined / not_advanced / expired are terminal. The single entry state is l1_fired for BOTH directions — an agent-autonomous fire (initiated_by=agent) and a human direct apply (initiated_by=human; see l1-fire.json and seeker-application.json) enter the same machine. 'seeker_applied' is the prose name for the human-initiated case, not a distinct state. REPORTING INVARIANT: human interaction that creates signal is reported back to the counterparty (see signal.json); agent-scale discovery that no human acted on terminates silently — the thousands of ambient L1/L2 conversations a passive seeker fans across do not emit per-failure signals.

# $defs.TrustTier.description
Inherited from v0.1 §6 with one addition (challenge_response_verified) for ATSes that pass webhook challenge in addition to DNS.

# $defs.VerificationMethod.title
Verification method used to attest a vacancy account

# $defs.Verification.title
Verification block — federation primitive

# $defs.Verification.description
Attests how a vacancy account or seeker agent was verified. The verifier field allows ANY party to issue attestations — Kitsuno is the launch verifier but the protocol does not require Kitsuno as gatekeeper. ATSes can self-verify; future protocol parties can become verifiers.

# $defs.Verification.properties.verifier.description
Domain of the party that performed verification (e.g., 'kitsuno.ai', 'somerecruiter.com'). Allows federated attestations.

# $defs.Verification.properties.verifier_signature.description
Optional cryptographic signature from the verifier over (method, tier, verified_at, subject_id). Detached signature; verification keys published at <verifier>/.well-known/handshake-v0.2/verifier-keys.json

# $defs.Verification.properties.expires_at.description
Optional — attestations MAY expire and require re-verification.

# $defs.PostingVisibility.title
Posting visibility — whether company identity is named at L1

# $defs.PostingVisibility.description
named = company identity surfaces at L1. confidential = identity withheld until L3, with industry + size_band optional at L1 for signal.

# $defs.AgentIdentifier.description
Stable agent identifier in the pattern scheme:identifier (e.g., 'kitsuno.agent/u/<id>', 'externalats.agent/v/<id>').

# $defs.TierOverrides.title
Per-field tier overrides — poster-controlled disclosure assignment

# $defs.TierOverrides.description
Sparse map of field-name → DisclosureTier. Absent fields use protocol defaults (see /handshake/v0.2/defaults). Posters use this to move e.g. salary from default L1 to L2 (with EU pay-transparency banner nudge), or client_identity from default L3 to L1 for non-confidential roles. Keys are the field names from VacancyCard.

# $defs.HmacSignature.description
Format: 't=<unix_ts>,v1=<hex_hmac_sha256>'. Signed body is '<unix_ts>.<request_body_bytes>'. Receivers reject signatures older than 5 minutes.