{"ok":true,"checkedAt":"2026-07-17T20:53:49.514Z","contractVersion":"moral-trade-financial-settlement-controls-v0.1-2026-06","purpose":"Public validator-backed contract for first-class platform-fee, FX, notification, time-authority, challenge-window, and payout-milestone controls before Moral Trade real-money previews, locks, captures, releases, default outcomes, public metrics, or release-gate promotions.","validation":{"status":"pass","validatorName":"moral-trade-financial-settlement-controls-contract","validatorVersion":"moral-trade-financial-settlement-controls-validator-v0.1","contractVersion":"moral-trade-financial-settlement-controls-v0.1-2026-06","checks":[{"id":"first_class_tables","label":"Financial settlement controls use first-class record tables","status":"pass","evidence":"moral_trade_platform_fee_policies, moral_trade_platform_fee_disclosures, moral_trade_fx_policies, moral_trade_fx_rate_snapshots, moral_trade_notification_policies, moral_trade_material_notice_records, moral_trade_time_authority_policies, moral_trade_deadline_records, moral_trade_challenge_window_records, moral_trade_payout_milestone_records"},{"id":"policy_snapshot_subjects","label":"Fee, FX, notice, time, challenge, and milestone policies are immutable snapshot subjects","status":"pass","evidence":"platform_fee, fx, notification, time_authority, challenge_window, payout_milestone"},{"id":"control_coverage","label":"Control keys cover fee/FX disclosure, notices, server deadlines, challenges, and milestones","status":"pass","evidence":"platform_fee_policy, platform_fee_disclosure, fx_policy, fx_rate_snapshot, notification_policy, material_notice_record, time_authority_policy, server_deadline_record, challenge_window_record, payout_milestone_record, payout_milestone_evidence, payout_destination_binding"},{"id":"high_risk_transitions","label":"Capture, default, payout release, public metrics, and release promotion are gated","status":"pass","evidence":"draft_preview:0, public_preview:4, matched_trade_lock:9, payment_authorization:9, payment_capture:9, challenge_window_default:5, payout_milestone_release:12, public_metric_publication:4, release_gate_promotion:12"},{"id":"non_claims","label":"Contract states fees and FX cannot inflate moral metrics","status":"pass","evidence":"Platform fees, FX spreads, and conversion fees are not moral-trade volume, QF signal, threshold progress, or recipient impact. | A client clock, browser-local timezone, mutable display string, or unsynchronized job cannot decide rights expiry or money movement. | A captured payment is not releasable until the payout milestone, evidence, notice, challenge window, and destination controls pass."},{"id":"sample_evaluations","label":"Synthetic samples include draft pass, lock pass, and payout block","status":"pass","evidence":"pass, pass, blocked"},{"id":"privacy_boundary","label":"Public contract does not expose private settlement artifacts","status":"pass","evidence":"Public contract output never exposes payment credentials, raw provider settlement reports, raw FX provider payloads, private notice payloads, participant identities, exact bank or wallet details, reviewer notes, raw evidence, internal fee ledgers, participant-specific fee/FX/payment records, or participant-specific deadline records."}],"blockers":[]},"publicContract":{"failClosedRule":"Missing, mutable, stale, under-review, blocked, superseded, hidden-fee, stale-FX, metric-inclusion, failed-notice, client-clock, unresolved-challenge, missing-evidence, changed-destination, or unreleasable milestone states block the affected transition.","privacyBoundary":"Public contract output never exposes payment credentials, raw provider settlement reports, raw FX provider payloads, private notice payloads, participant identities, exact bank or wallet details, reviewer notes, raw evidence, internal fee ledgers, participant-specific fee/FX/payment records, or participant-specific deadline records.","firstClassRecordTables":["moral_trade_platform_fee_policies","moral_trade_platform_fee_disclosures","moral_trade_fx_policies","moral_trade_fx_rate_snapshots","moral_trade_notification_policies","moral_trade_material_notice_records","moral_trade_time_authority_policies","moral_trade_deadline_records","moral_trade_challenge_window_records","moral_trade_payout_milestone_records"],"policySnapshotSubjects":["platform_fee","fx","notification","time_authority","challenge_window","payout_milestone"],"transitionKeys":["draft_preview","public_preview","matched_trade_lock","payment_authorization","payment_capture","challenge_window_default","payout_milestone_release","public_metric_publication","release_gate_promotion"],"controlKeys":["platform_fee_policy","platform_fee_disclosure","fx_policy","fx_rate_snapshot","notification_policy","material_notice_record","time_authority_policy","server_deadline_record","challenge_window_record","payout_milestone_record","payout_milestone_evidence","payout_destination_binding"],"failClosedStatuses":["missing","under_review","blocked","stale","superseded","mutable","currency_mismatch","bundled_into_moral_volume","expired","spread_hidden","fee_not_separated","included_in_moral_volume","included_in_qf_signal","included_in_threshold_progress","included_in_impact_claim","failed","unconfirmed_channel","client_clock_used","unsynchronized_job","mutable_display_time","expired_without_notice","defaulted_against_participant","destination_mismatch","evidence_missing","challenge_open","unverified","changed_after_lock"],"nonClaims":["Platform fees, FX spreads, and conversion fees are not moral-trade volume, QF signal, threshold progress, or recipient impact.","A client clock, browser-local timezone, mutable display string, or unsynchronized job cannot decide rights expiry or money movement.","A captured payment is not releasable until the payout milestone, evidence, notice, challenge window, and destination controls pass."],"transitions":[{"key":"draft_preview","requiredControls":[],"userFacingBlockerCategory":"Draft-only preview can proceed without settlement controls"},{"key":"public_preview","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy"],"userFacingBlockerCategory":"Real-money preview needs frozen fee, FX, notice, and time policies"},{"key":"matched_trade_lock","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy","platform_fee_disclosure","fx_rate_snapshot","material_notice_record","server_deadline_record","challenge_window_record"],"userFacingBlockerCategory":"Lock needs fee/FX disclosure, notices, deadlines, and challenge window"},{"key":"payment_authorization","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy","platform_fee_disclosure","fx_rate_snapshot","material_notice_record","server_deadline_record","challenge_window_record"],"userFacingBlockerCategory":"Authorization needs frozen fee, FX, notice, and server-time evidence"},{"key":"payment_capture","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy","platform_fee_disclosure","fx_rate_snapshot","material_notice_record","server_deadline_record","challenge_window_record"],"userFacingBlockerCategory":"Capture needs current fee/FX disclosure, notices, and challenge evidence"},{"key":"challenge_window_default","requiredControls":["notification_policy","material_notice_record","time_authority_policy","server_deadline_record","challenge_window_record"],"userFacingBlockerCategory":"Challenge defaults need delivered notice and server-side deadlines"},{"key":"payout_milestone_release","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy","platform_fee_disclosure","fx_rate_snapshot","material_notice_record","server_deadline_record","challenge_window_record","payout_milestone_record","payout_milestone_evidence","payout_destination_binding"],"userFacingBlockerCategory":"Payout release needs releasable milestone, evidence, notice, and destination"},{"key":"public_metric_publication","requiredControls":["platform_fee_policy","platform_fee_disclosure","fx_policy","fx_rate_snapshot"],"userFacingBlockerCategory":"Public metrics need fee and FX exclusions"},{"key":"release_gate_promotion","requiredControls":["platform_fee_policy","fx_policy","notification_policy","time_authority_policy","platform_fee_disclosure","fx_rate_snapshot","material_notice_record","server_deadline_record","challenge_window_record","payout_milestone_record","payout_milestone_evidence","payout_destination_binding"],"userFacingBlockerCategory":"Release promotion needs all settlement controls resolved"}],"sampleEvaluationStatuses":{"draft_preview":"pass","matched_trade_lock":"pass","payout_milestone_release":"blocked"},"contractTests":["financial_settlement_controls_first_class_records","draft_preview_passes_without_settlement_controls","lock_requires_fee_fx_notice_time_and_challenge_controls","payment_capture_blocks_hidden_fee_fx_notice_and_client_clock_failures","payout_milestone_release_blocks_missing_evidence_destination_and_open_challenge","api_health_spec_migration_schema_and_types_publish_settlement_controls_contract"]},"blockers":[]}