# Thin Access Approval fact reader — owner source contract proposal Owner scope: Approval Engine / PIP. Work: APPROVAL-WP-0005-T01, selected source subset of APPROVAL-WP-0002-T01/T05 under CUST-WP-0080. This interprets the existing claim schema 0.1, not a new API/schema/signature or policy grant. Access's B2 implementation stays DENY until its separately reviewed complete successor. ## Authoritative source and guarantee Only server-installed, independently admitted provider origin and transport may GET `/v1/approvals/{id}/claim`, with least-scope `approval:read` credential and exact admitted store tenant. No caller URL/opener/key/verified flag, redirects, environment proxy, caller JSON or public same-channel key bootstrap can supply this provenance. Owner transport must enforce total deadline/size, exact 200 application/json UTF-8, no encoding, duplicate-key/nonfinite/malformed JSON refusal, no retry and bounded errors without bearer/body leakage. Provider unavailability refuses this source join. Never invoke a credential-carrying Python subprocess as the Go adapter; reuse Go's existing transport boundary. At the provider observation, `valid_now: true` AND `binding.human_control: true` means the configured required count of distinct entries is met and every entry has verified `principal_type=human`. `/entries` obtains identities/types only from its authenticator, rejects non-human binds for this declaration, and persists UNIQUE(approval_id, subject_id); `_evaluate` repeats the threshold/human check. It does NOT mean required_count is two, requester/actor/principal is human, directory-derived tenant membership, a particular MFA/assurance level, policy eligibility, uncompromised source, native issuer admission, or continuing validity after the observation. Consumer trusts this owner evaluation instead of fetching identities/counting approvers or revalidating human JWTs. Native issuer/profile acceptance is still T01, not established by synthetic vectors. ## Minimal typed fact validation The submitted claim and fetched observation must each satisfy existing schema 0.1 with exact JSON types; `human_control` must be present and exactly true on this lane despite being historically optional in the generic schema. Require schema_version=0.1, kind=approval-claim, issuer=approval-engine, exact expected approval UUID, state=valid, valid_now=true, consumed=false, reason_code=ok, pdp_path=true and non-null lowercase sha256 pdp_digest. Reject decision-shaped keys and unknown schema members (except optional informational yields_to). The signed/requesting service must never become a human approver by inference. At one captured UTC validation instant now, require zoned RFC3339 timestamps, positive integral ttl_seconds, observed_at<=now