{"ok":true,"checkedAt":"2026-07-17T20:53:18.927Z","contractVersion":"moral-trade-direct-pair-clearing-v0.1-2026-06","purpose":"Fail-closed direct-pair clearing governance for two-party or invite-linked donation-offset and pledge-swap previews without autonomous outreach or shortcuts around ordinary lock, review, privacy, payment, and atomic-settlement gates.","validation":{"status":"pass","validatorName":"moral-trade-direct-pair-clearing-contract","validatorVersion":"moral-trade-direct-pair-clearing-validator-v0.1","contractVersion":"moral-trade-direct-pair-clearing-v0.1-2026-06","checks":[{"id":"first_class_records","label":"Direct-pair clearing records are first-class records","status":"pass","evidence":"moral_trade_direct_pair_clearing_records"},{"id":"policy_snapshot_subjects","label":"Policy snapshots include direct-pair clearing","status":"pass","evidence":"direct_pair_clearing"},{"id":"trade_type_scope","label":"Launch direct-pair scope is limited to donation offsets and pledge swaps","status":"pass","evidence":"donation_offset, pledge_swap"},{"id":"state_coverage","label":"Contract lists direct-pair, review, and policy states","status":"pass","evidence":"9/6/5"},{"id":"transition_requirements","label":"Preview, lock, payment, metric, and release transitions require direct-pair checks","status":"pass","evidence":"direct_pair_preview, matched_trade_lock, payment_authorization, payment_capture, public_metric_publication, release_gate_promotion"},{"id":"no_autonomous_outreach","label":"Contract blocks autonomous outreach and background-networking substitution","status":"pass","evidence":"Direct-pair mode may use a user-supplied known counterparty or invite-linked pair, but the platform must not perform autonomous outreach, scrape contacts, disclose contact details, or convert a broad preview into a contacted counterparty."},{"id":"privacy_boundary","label":"Contract blocks counterparty identity, direct contact, exact cap, private note, and private surplus leakage","status":"pass","evidence":"Public direct-pair surfaces may show only coarse direct-pair or batch mode, invitation/known-counterparty status, confirmation status, and ordinary-gate status. Counterparty identity, direct contact details, exact caps, private notes, private surplus estimates, source hashes, and reviewer notes stay private unless a frozen disclosure policy, privacy grant, user-safety review, and participant confirmation allow bounded disclosure."},{"id":"sample_evaluations","label":"Sample evaluations include required pass, required fail-closed, and inactive paths","status":"pass","evidence":"pass, blocked, pass"},{"id":"contract_tests","label":"Contract declares focused direct-pair clearing tests","status":"pass","evidence":"direct_pair_clearing_contract_validator, direct_pair_clearing_fail_closed_without_record, direct_pair_clearing_blocks_autonomous_outreach, direct_pair_clearing_blocks_missing_confirmation_or_gate, direct_pair_clearing_route_health_api_schema_wiring"}],"blockers":[]},"publicContract":{"failClosedRule":"Direct-pair clearing is a special case of the exchange kernel, not background networking. Missing, mutable, stale, one-sided, non-consented, privacy-leaking, autonomous-outreach, ungated, or compensated-action direct-pair records block lock, payment, capture, public metrics, and release promotion.","noAutonomousOutreachRule":"Direct-pair mode may use a user-supplied known counterparty or invite-linked pair, but the platform must not perform autonomous outreach, scrape contacts, disclose contact details, or convert a broad preview into a contacted counterparty.","privacyBoundary":"Public direct-pair surfaces may show only coarse direct-pair or batch mode, invitation/known-counterparty status, confirmation status, and ordinary-gate status. Counterparty identity, direct contact details, exact caps, private notes, private surplus estimates, source hashes, and reviewer notes stay private unless a frozen disclosure policy, privacy grant, user-safety review, and participant confirmation allow bounded disclosure.","firstClassRecordTables":["moral_trade_direct_pair_clearing_records"],"policySnapshotSubjects":["direct_pair_clearing"],"tradeTypes":["donation_offset","pledge_swap","compensated_moral_action","manual_review"],"allowedLaunchTradeTypes":["donation_offset","pledge_swap"],"directPairStates":["draft","invited","previewed","both_confirmed","locked","expired","withdrawn","superseded","blocked"],"reviewStates":["not_started","under_review","non_blocking","blocked","manual_review","superseded"],"policyStatuses":["resolved_immutable","missing","mutable","stale","superseded"],"transitions":[{"key":"direct_pair_preview","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair preview needs a frozen two-party record, both confirmations, and ordinary lock/review/privacy gates"},{"key":"matched_trade_lock","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair lock needs both confirmed parties and cannot bypass ordinary gates"},{"key":"payment_authorization","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair payment authorization waits for both-party consent and ordinary payment gates"},{"key":"payment_capture","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair capture cannot proceed unless the pair is atomically locked and payment/privacy gates pass"},{"key":"public_metric_publication","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair metrics need a privacy-safe, confirmed, ordinary-gated clearing record"},{"key":"release_gate_promotion","requiresFrozenRecordWhenApplicable":true,"requiresBothPartyConfirmation":true,"requiresOrdinaryGates":true,"userFacingBlockerCategory":"Direct-pair release promotion needs evidence that the path is not autonomous outreach or a shortcut around gates"}],"directPairSampleEvaluationStatuses":{"matched_trade_lock":{"status":"blocked","blockers":["direct_pair_trade_type_not_allowed:direct-pair:blocking:compensated_moral_action","direct_pair_background_networking_not_blocked:direct-pair:blocking","direct_pair_both_party_confirmation_missing:direct-pair:blocking","direct_pair_user_safety_not_non_blocking:direct-pair:blocking:under_review","direct_pair_state_not_confirmed_or_locked:direct-pair:blocking:invited","direct_pair_ordinary_gate_status_not_passed:direct-pair:blocking:under_review","direct_pair_counterparty_identity_public:direct-pair:blocking","direct_pair_autonomous_outreach_attempted:direct-pair:blocking","eligible_direct_pair_clearing_record_missing"],"directPairRequired":true,"eligibleRecordCount":0,"confirmedRecordCount":0,"noBackgroundNetworkingCount":0},"direct_pair_preview":{"status":"pass","blockers":[],"directPairRequired":false,"eligibleRecordCount":0,"confirmedRecordCount":0,"noBackgroundNetworkingCount":0}},"contractTests":["direct_pair_clearing_contract_validator","direct_pair_clearing_fail_closed_without_record","direct_pair_clearing_blocks_autonomous_outreach","direct_pair_clearing_blocks_missing_confirmation_or_gate","direct_pair_clearing_route_health_api_schema_wiring"]},"blockers":[]}