{"ok":true,"checkedAt":"2026-06-02T19:08:32.904Z","contractVersion":"moral-trade-challenge-appeal-v0.2","purpose":"Public contract for challenge windows and appeal handling: scope each appeal to a reviewed claim, evidence row, baseline concern, disclosure decision, externality trigger, completion state, or policy flag; verify standing and remedy paths; require human review before any state change.","validation":{"status":"pass","validatorName":"moral-trade-challenge-appeal-contract","validatorVersion":"moral-trade-challenge-appeal-validator-v0.1","contractVersion":"moral-trade-challenge-appeal-v0.2","checks":[{"id":"subject-coverage","label":"Contract publishes all challenge and appeal subject types","status":"pass","evidence":"claim, evidence_row, baseline_concern, disclosure_decision, externality_trigger, completion_state, policy_flag"},{"id":"standing-coverage","label":"Contract publishes direct, reviewer, verifier, admin, and affected-party standing","status":"pass","evidence":"participant, counterparty, affected_party, reviewer, admin_safety, external_verifier"},{"id":"trigger-and-outcome-coverage","label":"Contract covers appeal triggers and allowed outcomes","status":"pass","evidence":"duplicate_proof, coercive_baseline, wrong_scope_evidence, material_factual_error, privacy_disclosure_error, externality_remedy_gap, reviewer_conflict, policy_misapplied -> uphold_decision, request_evidence, route_human_review, open_challenge_window, block_reliance, record_remedy, close_unresolved, correct_record"},{"id":"sample-decision-validation","label":"Sample challenge appeal decision validates","status":"pass","evidence":"ready_for_human_review; blockers 0"},{"id":"narrow-appeal-scope","label":"Contract forbids reopening unrelated moral disagreements by default","status":"pass","evidence":"Appeals target only the specific reviewed claim, evidence row, baseline concern, disclosure decision, externality trigger, completion state, or policy flag. | Appeals do not reopen unrelated moral disagreements by default and do not create platform-wide moral rankings. | Participant, counterparty, affected-party, reviewer, admin-safety, and external-verifier standing are explicit; affected-party standing needs a privacy-safe summary. | Externality remedy appeals must name the remedy gap before reliance, completion badges, or public reputation claims proceed. | Requested outcomes are advisory and must be compatible with the appeal trigger before reviewers can route them. | Private details, exact wishes, contact data, raw notes, and sensitive constraints are redacted before reviewer routing. | Every challenge or appeal packet names a provenance activity, traceability step, reason codes, and human reviewer scope. | Safety blocking, matching disclosure, reviewed completion, and dispute resolution remain human-controlled."},{"id":"remedy-and-human-control","label":"Contract preserves remedy handling and human control for dispute resolution","status":"pass","evidence":"Appeals target only the specific reviewed claim, evidence row, baseline concern, disclosure decision, externality trigger, completion state, or policy flag. | Appeals do not reopen unrelated moral disagreements by default and do not create platform-wide moral rankings. | Participant, counterparty, affected-party, reviewer, admin-safety, and external-verifier standing are explicit; affected-party standing needs a privacy-safe summary. | Externality remedy appeals must name the remedy gap before reliance, completion badges, or public reputation claims proceed. | Requested outcomes are advisory and must be compatible with the appeal trigger before reviewers can route them. | Private details, exact wishes, contact data, raw notes, and sensitive constraints are redacted before reviewer routing. | Every challenge or appeal packet names a provenance activity, traceability step, reason codes, and human reviewer scope. | Safety blocking, matching disclosure, reviewed completion, and dispute resolution remain human-controlled."},{"id":"privacy-and-provenance","label":"Contract requires redaction, provenance activity, and traceability","status":"pass","evidence":"specific_reviewed_claim, standing_established, affected_party_standing, evidence_scope_named, duplicate_proof_review, coercive_baseline_review, wrong_scope_evidence_review, material_factual_error_review, privacy_disclosure_review, externality_remedy_review, reviewer_conflict_review, policy_flag_review, challenge_window_required, human_review_required, no_unrelated_moral_disagreement, provenance_activity_required, private_details_redacted"},{"id":"nonmutating-decision-mode","label":"Contract evaluator is non-mutating and scope-only","status":"pass","evidence":"deterministic_challenge_appeal_scope_only; stateMutation false"},{"id":"contract-tests","label":"Challenge appeal contract test hooks are named","status":"pass","evidence":"challenge_appeal_contract_validator, challenge_appeal_evaluate_route_contract, challenge_appeal_scope_smoke, technical_spec_challenge_appeal_smoke"}],"blockers":[]},"publicContract":{"decisioningMode":"deterministic_challenge_appeal_scope_only","stateMutation":false,"subjects":["claim","evidence_row","baseline_concern","disclosure_decision","externality_trigger","completion_state","policy_flag"],"standingCategories":["participant","counterparty","affected_party","reviewer","admin_safety","external_verifier"],"appealTriggers":["duplicate_proof","coercive_baseline","wrong_scope_evidence","material_factual_error","privacy_disclosure_error","externality_remedy_gap","reviewer_conflict","policy_misapplied"],"allowedOutcomes":["uphold_decision","request_evidence","route_human_review","open_challenge_window","block_reliance","record_remedy","close_unresolved","correct_record"],"approvedFactorCodes":["specific_reviewed_claim","standing_established","affected_party_standing","evidence_scope_named","duplicate_proof_review","coercive_baseline_review","wrong_scope_evidence_review","material_factual_error_review","privacy_disclosure_review","externality_remedy_review","reviewer_conflict_review","policy_flag_review","challenge_window_required","human_review_required","no_unrelated_moral_disagreement","provenance_activity_required","private_details_redacted"],"invariants":["Appeals target only the specific reviewed claim, evidence row, baseline concern, disclosure decision, externality trigger, completion state, or policy flag.","Appeals do not reopen unrelated moral disagreements by default and do not create platform-wide moral rankings.","Participant, counterparty, affected-party, reviewer, admin-safety, and external-verifier standing are explicit; affected-party standing needs a privacy-safe summary.","Externality remedy appeals must name the remedy gap before reliance, completion badges, or public reputation claims proceed.","Requested outcomes are advisory and must be compatible with the appeal trigger before reviewers can route them.","Private details, exact wishes, contact data, raw notes, and sensitive constraints are redacted before reviewer routing.","Every challenge or appeal packet names a provenance activity, traceability step, reason codes, and human reviewer scope.","Safety blocking, matching disclosure, reviewed completion, and dispute resolution remain human-controlled."],"sampleDecision":{"status":"ready_for_human_review","outcome":"open_challenge_window","factorCodes":["specific_reviewed_claim","human_review_required","no_unrelated_moral_disagreement","provenance_activity_required","wrong_scope_evidence_review","standing_established","affected_party_standing","evidence_scope_named","challenge_window_required"],"humanReviewRequired":true,"stateMutation":false,"standingAccepted":true,"reviewScope":["evidence_row"],"requiredArtifacts":["prior review decision and reason codes","scoped evidence row and claim linkage"],"privacyActions":["keep appeal packet scoped to redacted evidence and reason codes"],"provenanceActivity":"challenge_window_opened","traceabilityBusinessStep":"challenge_opened","appealScopeStatement":"Appeal only the specific reviewed claim, evidence row, baseline concern, disclosure decision, externality trigger, completion state, or policy flag; unrelated moral disagreements stay out of scope by default.","blockers":[]},"contractTests":["challenge_appeal_contract_validator","challenge_appeal_evaluate_route_contract","challenge_appeal_scope_smoke","technical_spec_challenge_appeal_smoke"]},"blockers":[]}