{"ok":true,"checkedAt":"2026-07-17T20:52:42.549Z","contractVersion":"moral-trade-batch-clearing-objective-v0.1-2026-06","purpose":"Fail-closed batch-clearing objective governance for donation-offset batch allocation before scarce matches can affect matching, lock, clearing, payment capture, reliance, public metrics, or release promotion.","validation":{"status":"pass","validatorName":"moral-trade-batch-clearing-objective-contract","validatorVersion":"moral-trade-batch-clearing-objective-validator-v0.1","contractVersion":"moral-trade-batch-clearing-objective-v0.1-2026-06","checks":[{"id":"first-class-record-table","label":"Contract names first-class batch-clearing objective records","status":"pass","evidence":"moral_trade_batch_clearing_objective_records"},{"id":"policy-snapshot-subject","label":"Contract names batch_clearing_objective policy snapshots","status":"pass","evidence":"batch_clearing_objective"},{"id":"objective-type-coverage","label":"Contract covers safe matched volume, participant count, residual minimization, and manual-review objectives","status":"pass","evidence":"maximize_safe_matched_volume, maximize_safe_participant_count, minimize_unmatched_residual, manual_review"},{"id":"deterministic-tie-break-coverage","label":"Contract covers seeded hash, pro-rata frozen capacity, and round-robin hash tie-break rules","status":"pass","evidence":"seeded_deterministic_hash, pro_rata_by_frozen_capacity, round_robin_by_hash, reviewer_approved_manual, manual_review"},{"id":"prohibited-allocation-rule","label":"Contract prohibits moral score, operator preference, public pressure, timestamp races, private-cap leakage, and database order","status":"pass","evidence":"Matched volume alone cannot justify allocation. Scarce matches cannot be allocated by moral score, operator preference, public pressure, timestamp races, private-cap leakage, database order, protected traits, or hidden reviewer preference."},{"id":"prohibited-driver-enum","label":"Contract enumerates prohibited allocation drivers","status":"pass","evidence":"moral_score, operator_preference, public_pressure, timestamp_race, private_cap_leakage, database_order, protected_trait, hidden_reviewer_preference"},{"id":"transition-coverage","label":"Contract requires objective results for candidate generation, lock, clearing, capture, reliance, public metrics, and release promotion","status":"pass","evidence":"match_candidate_generation, matched_trade_lock, clearing_run, payment_capture, reliance, public_metric_publication, release_gate_promotion"},{"id":"sample-evaluation-coverage","label":"Contract includes passing and blocked sample evaluations","status":"pass","evidence":"clearing_run:pass, matched_trade_lock:blocked"},{"id":"contract-test-coverage","label":"Contract lists validator, objective-result, prohibited-driver, route, and schema tests","status":"pass","evidence":"batch_clearing_objective_contract_validator, batch_clearing_objective_result_test, batch_clearing_prohibited_allocation_driver_test, batch_clearing_objective_route_contract, batch_clearing_objective_schema_contract"}],"blockers":[]},"publicContract":{"privacyRule":"Public batch-clearing objective contract responses expose only static rules, table names, enums, validation blockers, and sample pass/block states. They never expose raw input bundles, private caps, exact participant constraints, ranked participant rows, reviewer notes, or allocation membership.","failClosedRule":"Donation-offset batch clearing requires a frozen objective, immutable policy, deterministic tie-break/fairness rule, input-bundle hash, excluded-record hash, reproducible objective result hash, reproducibility check, and non-blocking review. Missing, mutable, stale, manual-review, blocked, superseded, or unreproducible objective results block scarce allocation, lock, capture, reliance, public metrics, and release promotion.","deterministicTieBreakRule":"Scarce matches must use a deterministic fairness rule such as seeded hash, pro-rata frozen capacity, or round-robin-by-hash over frozen input and excluded-record bundles.","prohibitedAllocationRule":"Matched volume alone cannot justify allocation. Scarce matches cannot be allocated by moral score, operator preference, public pressure, timestamp races, private-cap leakage, database order, protected traits, or hidden reviewer preference.","reproducibilityRule":"Every objective result must be replayable from the frozen objective policy, deterministic algorithm version, input-bundle hash, excluded-record hash, tie-break fairness policy, and result hash.","firstClassRecordTables":["moral_trade_batch_clearing_objective_records"],"policySnapshotSubjects":["batch_clearing_objective"],"subjectTypes":["donation_offset_batch","donation_offset_offer_pool","matched_trade_lock_proposal","cleared_trade_agreement","public_metric_batch","release_gate"],"objectiveTypes":["maximize_safe_matched_volume","maximize_safe_participant_count","minimize_unmatched_residual","manual_review"],"tieBreakFairnessRuleTypes":["seeded_deterministic_hash","pro_rata_by_frozen_capacity","round_robin_by_hash","reviewer_approved_manual","manual_review"],"allocationDrivers":["objective_score","frozen_capacity","participant_confirmed_bounds","seeded_hash","moral_score","operator_preference","public_pressure","timestamp_race","private_cap_leakage","database_order","protected_trait","hidden_reviewer_preference"],"prohibitedAllocationDrivers":["moral_score","operator_preference","public_pressure","timestamp_race","private_cap_leakage","database_order","protected_trait","hidden_reviewer_preference"],"resultStates":["draft","reproducible","under_review","non_blocking","blocked","superseded"],"policyStatuses":["resolved_immutable","missing","mutable","stale","superseded"],"transitions":[{"key":"draft_preview","requiresObjectiveResult":false,"requiresDeterministicTieBreak":false,"userFacingBlockerCategory":"Batch-clearing objective evidence is preview-only until the objective and fairness policy are frozen"},{"key":"match_candidate_generation","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Candidate generation waits for a frozen batch objective, deterministic tie-break rule, and reproducible objective result"},{"key":"matched_trade_lock","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Final lock cannot allocate scarce matches by moral score, operator preference, public pressure, timestamp race, private-cap leakage, or database order"},{"key":"clearing_run","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Batch clearing requires a reproducible objective result over frozen inputs and excluded records"},{"key":"payment_capture","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Payment capture waits for deterministic allocation evidence instead of timestamp, database-order, or operator-selected scarce matches"},{"key":"reliance","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Reliance-bearing states require non-blocking batch-objective evidence with privacy-safe allocation drivers"},{"key":"public_metric_publication","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Public metrics can count only reproducible objective results, not manually preferred or pressure-driven scarce allocations"},{"key":"release_gate_promotion","requiresObjectiveResult":true,"requiresDeterministicTieBreak":true,"userFacingBlockerCategory":"Release promotion requires frozen objective policy, deterministic fairness rule, and prohibited-driver counters"}],"batchClearingObjectiveSampleEvaluationStatuses":{"clearing_run":"pass","matched_trade_lock":"blocked"},"prohibitedAllocationDriverCounts":{"clearing_run":0,"matched_trade_lock":2},"contractTests":["batch_clearing_objective_contract_validator","batch_clearing_objective_result_test","batch_clearing_prohibited_allocation_driver_test","batch_clearing_objective_route_contract","batch_clearing_objective_schema_contract"]},"blockers":[]}