{"ok":true,"checkedAt":"2026-06-13T06:45:23.781Z","contractVersion":"moral-trade-review-workflow-v0.2-2026-06","purpose":"Public contract for the review workflow cards shown on offer detail pages, worked examples, marketplace cards, and homepage preview cards.","validation":{"status":"pass","validatorName":"moral-trade-review-workflow-contract","validatorVersion":"moral-trade-review-workflow-validator-v0.2","contractVersion":"moral-trade-review-workflow-v0.2-2026-06","checks":[{"id":"card-key-coverage","label":"Detail card contract covers every rendered workflow card","status":"pass","evidence":"current_status, action_evidence, baseline_confidence, externality_review, participant_relative_scores, appeal_scope -> current_status, action_evidence, baseline_confidence, externality_review, participant_relative_scores, appeal_scope"},{"id":"status-reason-coverage","label":"Every detail and marketplace card exposes a structured status reason","status":"pass","evidence":"current_status.human_review=human review: the visible status is still a review state, not completion, custody, enforceability, or moral endorsement. | action_evidence.pass=pass: a named proof method and clear evidence locator are present for reviewer inspection. | baseline_confidence.pass=pass: the baseline is stated with enough support to enter counterfactual review. | externality_review.human_review=human review: the mode or causes can affect third parties, incentives, or unrepresented values. | participant_relative_scores.pass=pass: scores are bounded as participant-stated context, not platform ranking. | appeal_scope.human_review=human review: appeals require reviewer handling and must stay within the reviewed issue."},{"id":"factor-code-coverage","label":"Required factor codes appear in rendered samples","status":"pass","evidence":"status_visible, human_review_required, evidence_rule_named, evidence_sufficiency, baseline_stated, baseline_credibility, externality_review_required, participant_relative_scores, no_global_moral_ranking, appealable_review_scope, reviewer_summary"},{"id":"marketplace-factor-priority","label":"Marketplace factor priority is bounded and rendered","status":"pass","evidence":"human_review_required, evidence_rule_named, baseline_credibility, externality_review_required, no_global_moral_ranking"},{"id":"no-global-ranking-and-appeal-scope","label":"No-global-ranking and appeal-scope factors are preserved","status":"pass","evidence":"status_visible, human_review_required, evidence_rule_named, evidence_sufficiency, baseline_stated, baseline_credibility, externality_review_required, participant_relative_scores, no_global_moral_ranking, appealable_review_scope, reviewer_summary"},{"id":"separate-trust-dimensions","label":"Action evidence, baseline confidence, and externality review remain separate","status":"pass","evidence":"current_status, action_evidence, baseline_confidence, externality_review, participant_relative_scores, appeal_scope"},{"id":"participant-copy-templates","label":"Participant copy preserves baseline, evidence, safety, score, and appeal boundaries","status":"pass","evidence":"What would you do if this trade did not happen? Be concrete. Mention your current intention, prior behavior, or any evidence that makes your baseline credible. | Status: Needs evidence. Your draft is structurally complete, but no reviewable proof method has been attached yet. | This proposal cannot be published because it resembles a threat, coercive compensation request, or newly escalated harmful behavior. | This score reflects the participant's own stated priorities. It is not a platform judgment about objective moral value. | If you think this review decision is wrong, appeal the specific claim that was reviewed. Appeals do not reopen unrelated moral disagreements by default."},{"id":"user-facing-blocker-explanation-coverage","label":"User-facing blocker explanations cover review, money, obligation, and appeal/correction effects","status":"pass","evidence":"needs_evidence, baseline_review, privacy_review, safety_review, account_security, reviewer_or_neutral_review, recipient_destination, clearing_confirmation, agreement_change, appeal_correction, production_payout, general_review_pending"},{"id":"user-facing-blocker-privacy-boundary","label":"User-facing blocker explanations avoid raw internal and private-detail terms","status":"pass","evidence":"Evidence is incomplete A reviewable proof artifact is still needed for the exact claim. Attach or request one scoped artifact for the claim being reviewed. No payment capture or payout should proceed from this record. No new locked obligation should be created from this record. If evidence was rejected, use the appeal path for the specific evidence row. Show only the claim scope and safe artifact type; keep private records hidden. Baseline needs review The no-trade baseline needs dated support before anyone relies on it. Add prior-intent, past-behavior, or dated baseline support. Money movement stays blocked for reliance-bearing use. Completion, clearing, and public count claims stay paused. Appeal only the reviewed baseline concern or submit a corrected baseline packet. Show the baseline category only; keep private timing and counterparty facts hidden. Privacy review is incomplete Private details need a narrower disclosure grant or redaction first. Redact exact wishes, contact details, and sensitive constraints before routing. Money is not affected unless the private detail is needed for payment review. No contact introduction or privacy disclosure should proceed yet. Use the correction path for the specific disclosure decision or privacy grant. Show only the safe category; keep detailed personal facts and contact details hidden. Safety or legality review is needed This proposal cannot move forward until a safety reviewer clears it. Pause publication and ask for a narrow safety review of the reviewed issue. No payment, payout, or public money claim should proceed. No new obligation, lock, or completion claim should be created. Use the appeal path for the specific safety decision; do not broaden the dispute. Show only a safe reason category; keep sensitive facts and affected-party details hidden. Account security check is pending A recent account-risk event requires step-up or manual review. Complete the requested account check or wait for manual review. Payment capture and payout release stay blocked. High-risk confirmations, privacy grants, and contact introductions stay paused. Use account recovery or correction if the account-security decision is wrong. Show the account-check category only; keep device and session details hidden. Reviewer check is incomplete A qualified or neutral reviewer still needs to decide this issue. Route the narrow issue to the required reviewer or neutral panel. Money movement stays blocked for the affected release stage. Reliance, clearing, and blocker overrides stay paused. If the review decision is adverse, appeal the specific reviewed issue. Show reviewer status only; keep private review evidence hidden. Recipient or destination is not verified The recipient or payment destination is not ready for money movement. Use a verified recipient and destination record, or request destination review. Capture, payout, reuse, and public money metrics stay blocked. No locked agreement should rely on this destination yet. Use the correction path for the specific recipient or destination rejection. Show destination readiness only; keep bank, wallet, and raw donation-link details hidden. Clearing or confirmation is incomplete The trade is still a preview until frozen matching and confirmations pass. Create or refresh the lock proposal and collect fresh confirmations. Payable and public-completion states stay blocked. No participant has a new locked obligation from this preview. Use the correction path for the specific clearing or confirmation defect. Show only the stage and safe reason; keep individual participant terms hidden. Agreement change needs review A post-lock change needs an explicit amendment record first. Create an amendment with before/after terms and renewed confirmations. Payment or payout tied to the changed terms stays blocked. Existing obligations are not silently changed by this record. Use the correction path for the specific amendment decision or changed term. Show the changed-term category only; keep private terms and counterparties hidden. Appeal or correction case is incomplete The correction path needs notice, deadline, scope, or neutral review. File or complete the bounded appeal case for the reviewed issue. No release, payout, or public reliance should proceed from the disputed decision. The appeal does not reopen settled obligations or waive safety blockers. Use the existing appeal case; keep it limited to the adverse decision under review. Show only appeal status; keep appeal narratives and evidence details hidden. Production or payout gate is not ready Operational checks are not complete enough for release or payout. Wait for the required operational review before publishing money or impact claims. Payout release, public totals, and sponsor-leverage claims stay blocked. No new operational override should be created from this state. Use the correction path for the specific operational check if a record is wrong. Show readiness category only; keep internal operational details hidden. Review is not complete This record cannot move forward until the reviewed issue is resolved. Ask for reviewer triage or submit a correction for the specific issue. No money movement should proceed from this record. No new locked obligation should be created from this record. Use the appeal or correction path only for the issue that was reviewed. Show a safe reason category; keep private facts and internal records hidden."},{"id":"sample-blocker-explanations","label":"Sample blocker explanations prove safety, evidence, and payout categories","status":"pass","evidence":"safety_review:Safety or legality review is needed, needs_evidence:Evidence is incomplete, production_payout:Production or payout gate is not ready"},{"id":"policy-enforced-workflow-path","label":"Source-document workflow diagram is represented as ordered contract steps","status":"pass","evidence":"user_draft -> schema_normalizer -> completeness_check -> anti_threat_policy_engine -> baseline_credibility_assessment -> evidence_checklist_generator -> privacy_redaction_engine -> rule_based_match_engine -> match_card_factor_codes -> human_review -> agreement_room -> evidence_submission -> reviewer_decision -> audit_log_provenance_record"},{"id":"review-state-outcome-coverage","label":"Workflow outcomes cover clarification, block, evidence, challenge, dispute, matchable, and reviewed completion states","status":"pass","evidence":"needs_clarification, blocked, needs_evidence, challenge_window, disputed_unresolved, matchable, completion_reviewed"},{"id":"contract-tests","label":"Review workflow contract test hooks are named","status":"pass","evidence":"review_workflow_contract_validator, offer_review_workflow_card_smoke, user_facing_blocker_explanation_smoke, marketplace_factor_card_smoke, technical_spec_review_workflow_smoke"}],"blockers":[]},"publicContract":{"statuses":["pass","needs_input","human_review","blocked"],"detailWorkflowCards":[{"key":"current_status","label":"Status card","requiredFactorCodes":["status_visible","human_review_required"],"purpose":"Expose whether a record is live, example-only, blocked, or still under review.","statusReasonRule":"Explain why the visible status is pass, needs-input, human-review, or blocked without implying completion.","nextStepRule":"Never imply completion, custody, enforceability, or moral endorsement from a visible status."},{"key":"action_evidence","label":"Action evidence","requiredFactorCodes":["evidence_rule_named","evidence_sufficiency"],"purpose":"Show whether each factual action claim has a named reviewable proof method.","statusReasonRule":"Explain whether a proof method and locator exist, or which evidence boundary keeps the card out of pass.","nextStepRule":"Ask for scoped artifacts before anyone relies on a factual action claim."},{"key":"baseline_confidence","label":"Counterfactual baseline","requiredFactorCodes":["baseline_stated","baseline_credibility"],"purpose":"Keep factual proof separate from the no-trade baseline and counterfactual trust problem.","statusReasonRule":"Explain why the no-trade baseline is credible enough, weak, or still review-bound.","nextStepRule":"Ask what would happen without the trade and what dated evidence supports that claim."},{"key":"externality_review","label":"Externality review","requiredFactorCodes":["externality_review_required","human_review_required"],"purpose":"Name third-party harm, perverse-incentive, and unrepresented-value review before reliance.","statusReasonRule":"Explain which mode or cause trigger requires human review, or why no obvious trigger was detected.","nextStepRule":"Route affected-party standing, remedy, and challenge-window questions to human review."},{"key":"participant_relative_scores","label":"Participant-relative scores","requiredFactorCodes":["participant_relative_scores","no_global_moral_ranking"],"purpose":"Display stated priorities without turning them into an objective platform ranking.","statusReasonRule":"Explain that pass only means scores are bounded as participant-stated context.","nextStepRule":"Use scores only as participant-stated context and preserve the no-global-ranking notice."},{"key":"appeal_scope","label":"Appeal scope","requiredFactorCodes":["appealable_review_scope","reviewer_summary"],"purpose":"Limit appeals to the claim, evidence row, baseline concern, disclosure decision, or policy flag under review.","statusReasonRule":"Explain that appeal handling remains human-reviewed and scoped to the reviewed issue.","nextStepRule":"Do not reopen unrelated moral disagreements by default."}],"policyEnforcedWorkflow":[{"key":"user_draft","label":"User draft","contractSurface":"structured_review_input","enforcement":"structured_input"},{"key":"schema_normalizer","label":"Schema normalizer","contractSurface":"normalizeReviewInput","enforcement":"deterministic_policy"},{"key":"completeness_check","label":"Completeness check","contractSurface":"current_status_card","enforcement":"deterministic_policy"},{"key":"anti_threat_policy_engine","label":"Anti-threat / prohibited-content engine","contractSurface":"current_status_blocked_reason_codes","enforcement":"deterministic_policy"},{"key":"baseline_credibility_assessment","label":"Baseline credibility assessment","contractSurface":"baseline_confidence_card","enforcement":"deterministic_policy"},{"key":"evidence_checklist_generator","label":"Evidence checklist generator","contractSurface":"action_evidence_card","enforcement":"deterministic_policy"},{"key":"privacy_redaction_engine","label":"Privacy / redaction engine","contractSurface":"disclosure_contract","enforcement":"deterministic_policy"},{"key":"rule_based_match_engine","label":"Rule-based match engine","contractSurface":"match_signal_contract","enforcement":"deterministic_policy"},{"key":"match_card_factor_codes","label":"Match card with factor codes and confidence band","contractSurface":"marketplace_factor_priority","enforcement":"deterministic_policy"},{"key":"human_review","label":"Human review","contractSurface":"human_review_required","enforcement":"human_review"},{"key":"agreement_room","label":"Agreement room","contractSurface":"agreement_review_workflow","enforcement":"human_review"},{"key":"evidence_submission","label":"Evidence submission","contractSurface":"provenance_evidence_artifact","enforcement":"provenance"},{"key":"reviewer_decision","label":"Reviewer decision","contractSurface":"review_decision","enforcement":"human_review"},{"key":"audit_log_provenance_record","label":"Audit log / provenance record","contractSurface":"state_transition_event_record","enforcement":"provenance"}],"reviewStateOutcomes":["needs_clarification","blocked","needs_evidence","challenge_window","disputed_unresolved","matchable","completion_reviewed"],"marketplaceFactorPriority":["human_review_required","evidence_rule_named","baseline_credibility","externality_review_required","no_global_moral_ranking","appealable_review_scope"],"participantCopyTemplates":{"baselineHelperText":"What would you do if this trade did not happen? Be concrete. Mention your current intention, prior behavior, or any evidence that makes your baseline credible.","needsEvidenceStatusCopy":"Status: Needs evidence. Your draft is structurally complete, but no reviewable proof method has been attached yet.","safetyWarningCopy":"This proposal cannot be published because it resembles a threat, coercive compensation request, or newly escalated harmful behavior.","importanceScoreNote":"This score reflects the participant's own stated priorities. It is not a platform judgment about objective moral value.","appealCopy":"If you think this review decision is wrong, appeal the specific claim that was reviewed. Appeals do not reopen unrelated moral disagreements by default."},"userFacingBlockerExplanations":[{"key":"needs_evidence","reasonCategory":"Evidence is incomplete","plainLanguageStatus":"A reviewable proof artifact is still needed for the exact claim.","nextAction":"Attach or request one scoped artifact for the claim being reviewed.","moneyEffect":"No payment capture or payout should proceed from this record.","obligationEffect":"No new locked obligation should be created from this record.","appealOrCorrectionPath":"If evidence was rejected, use the appeal path for the specific evidence row.","privacyBoundary":"Show only the claim scope and safe artifact type; keep private records hidden."},{"key":"baseline_review","reasonCategory":"Baseline needs review","plainLanguageStatus":"The no-trade baseline needs dated support before anyone relies on it.","nextAction":"Add prior-intent, past-behavior, or dated baseline support.","moneyEffect":"Money movement stays blocked for reliance-bearing use.","obligationEffect":"Completion, clearing, and public count claims stay paused.","appealOrCorrectionPath":"Appeal only the reviewed baseline concern or submit a corrected baseline packet.","privacyBoundary":"Show the baseline category only; keep private timing and counterparty facts hidden."},{"key":"privacy_review","reasonCategory":"Privacy review is incomplete","plainLanguageStatus":"Private details need a narrower disclosure grant or redaction first.","nextAction":"Redact exact wishes, contact details, and sensitive constraints before routing.","moneyEffect":"Money is not affected unless the private detail is needed for payment review.","obligationEffect":"No contact introduction or privacy disclosure should proceed yet.","appealOrCorrectionPath":"Use the correction path for the specific disclosure decision or privacy grant.","privacyBoundary":"Show only the safe category; keep detailed personal facts and contact details hidden."},{"key":"safety_review","reasonCategory":"Safety or legality review is needed","plainLanguageStatus":"This proposal cannot move forward until a safety reviewer clears it.","nextAction":"Pause publication and ask for a narrow safety review of the reviewed issue.","moneyEffect":"No payment, payout, or public money claim should proceed.","obligationEffect":"No new obligation, lock, or completion claim should be created.","appealOrCorrectionPath":"Use the appeal path for the specific safety decision; do not broaden the dispute.","privacyBoundary":"Show only a safe reason category; keep sensitive facts and affected-party details hidden."},{"key":"account_security","reasonCategory":"Account security check is pending","plainLanguageStatus":"A recent account-risk event requires step-up or manual review.","nextAction":"Complete the requested account check or wait for manual review.","moneyEffect":"Payment capture and payout release stay blocked.","obligationEffect":"High-risk confirmations, privacy grants, and contact introductions stay paused.","appealOrCorrectionPath":"Use account recovery or correction if the account-security decision is wrong.","privacyBoundary":"Show the account-check category only; keep device and session details hidden."},{"key":"reviewer_or_neutral_review","reasonCategory":"Reviewer check is incomplete","plainLanguageStatus":"A qualified or neutral reviewer still needs to decide this issue.","nextAction":"Route the narrow issue to the required reviewer or neutral panel.","moneyEffect":"Money movement stays blocked for the affected release stage.","obligationEffect":"Reliance, clearing, and blocker overrides stay paused.","appealOrCorrectionPath":"If the review decision is adverse, appeal the specific reviewed issue.","privacyBoundary":"Show reviewer status only; keep private review evidence hidden."},{"key":"recipient_destination","reasonCategory":"Recipient or destination is not verified","plainLanguageStatus":"The recipient or payment destination is not ready for money movement.","nextAction":"Use a verified recipient and destination record, or request destination review.","moneyEffect":"Capture, payout, reuse, and public money metrics stay blocked.","obligationEffect":"No locked agreement should rely on this destination yet.","appealOrCorrectionPath":"Use the correction path for the specific recipient or destination rejection.","privacyBoundary":"Show destination readiness only; keep bank, wallet, and raw donation-link details hidden."},{"key":"clearing_confirmation","reasonCategory":"Clearing or confirmation is incomplete","plainLanguageStatus":"The trade is still a preview until frozen matching and confirmations pass.","nextAction":"Create or refresh the lock proposal and collect fresh confirmations.","moneyEffect":"Payable and public-completion states stay blocked.","obligationEffect":"No participant has a new locked obligation from this preview.","appealOrCorrectionPath":"Use the correction path for the specific clearing or confirmation defect.","privacyBoundary":"Show only the stage and safe reason; keep individual participant terms hidden."},{"key":"agreement_change","reasonCategory":"Agreement change needs review","plainLanguageStatus":"A post-lock change needs an explicit amendment record first.","nextAction":"Create an amendment with before/after terms and renewed confirmations.","moneyEffect":"Payment or payout tied to the changed terms stays blocked.","obligationEffect":"Existing obligations are not silently changed by this record.","appealOrCorrectionPath":"Use the correction path for the specific amendment decision or changed term.","privacyBoundary":"Show the changed-term category only; keep private terms and counterparties hidden."},{"key":"appeal_correction","reasonCategory":"Appeal or correction case is incomplete","plainLanguageStatus":"The correction path needs notice, deadline, scope, or neutral review.","nextAction":"File or complete the bounded appeal case for the reviewed issue.","moneyEffect":"No release, payout, or public reliance should proceed from the disputed decision.","obligationEffect":"The appeal does not reopen settled obligations or waive safety blockers.","appealOrCorrectionPath":"Use the existing appeal case; keep it limited to the adverse decision under review.","privacyBoundary":"Show only appeal status; keep appeal narratives and evidence details hidden."},{"key":"production_payout","reasonCategory":"Production or payout gate is not ready","plainLanguageStatus":"Operational checks are not complete enough for release or payout.","nextAction":"Wait for the required operational review before publishing money or impact claims.","moneyEffect":"Payout release, public totals, and sponsor-leverage claims stay blocked.","obligationEffect":"No new operational override should be created from this state.","appealOrCorrectionPath":"Use the correction path for the specific operational check if a record is wrong.","privacyBoundary":"Show readiness category only; keep internal operational details hidden."},{"key":"general_review_pending","reasonCategory":"Review is not complete","plainLanguageStatus":"This record cannot move forward until the reviewed issue is resolved.","nextAction":"Ask for reviewer triage or submit a correction for the specific issue.","moneyEffect":"No money movement should proceed from this record.","obligationEffect":"No new locked obligation should be created from this record.","appealOrCorrectionPath":"Use the appeal or correction path only for the issue that was reviewed.","privacyBoundary":"Show a safe reason category; keep private facts and internal records hidden."}],"sampleUserFacingBlockerExplanations":[{"key":"safety_review","reasonCategory":"Safety or legality review is needed","plainLanguageStatus":"This proposal cannot move forward until a safety reviewer clears it.","nextAction":"Pause publication and ask for a narrow safety review of the reviewed issue.","moneyEffect":"No payment, payout, or public money claim should proceed.","obligationEffect":"No new obligation, lock, or completion claim should be created.","appealOrCorrectionPath":"Use the appeal path for the specific safety decision; do not broaden the dispute.","privacyBoundary":"Show only a safe reason category; keep sensitive facts and affected-party details hidden."},{"key":"needs_evidence","reasonCategory":"Evidence is incomplete","plainLanguageStatus":"A reviewable proof artifact is still needed for the exact claim.","nextAction":"Attach or request one scoped artifact for the claim being reviewed.","moneyEffect":"No payment capture or payout should proceed from this record.","obligationEffect":"No new locked obligation should be created from this record.","appealOrCorrectionPath":"If evidence was rejected, use the appeal path for the specific evidence row.","privacyBoundary":"Show only the claim scope and safe artifact type; keep private records hidden."},{"key":"production_payout","reasonCategory":"Production or payout gate is not ready","plainLanguageStatus":"Operational checks are not complete enough for release or payout.","nextAction":"Wait for the required operational review before publishing money or impact claims.","moneyEffect":"Payout release, public totals, and sponsor-leverage claims stay blocked.","obligationEffect":"No new operational override should be created from this state.","appealOrCorrectionPath":"Use the correction path for the specific operational check if a record is wrong.","privacyBoundary":"Show readiness category only; keep internal operational details hidden."}],"forbiddenUserFacingExplanationTerms":["sha256","policy_hash","source hash","provider payload","reviewer notes","risk signal","session anomaly","exact private","counterparty-specific"],"invariants":["Every detail workflow card must expose at least one factor code, one status-reason code, one status reason, and one next-step instruction.","Marketplace cards must show prioritized factor codes derived from the same workflow contract.","Marketplace cards must inherit the selected detail card status reason.","Every participant-facing block, pause, rejection, or manual-review state maps to a plain-language reason category, next action, money effect, obligation effect, and appeal or correction path where applicable.","User-facing blocker explanations do not expose private facts, source hashes, provider payloads, raw review evidence, account-security details, or sensitive counterparty facts.","Participant-relative scores must preserve no_global_moral_ranking.","Appeals must preserve appealable_review_scope and reviewer_summary factor codes.","Action evidence, baseline confidence, and externality review must remain separate cards."],"sampleDetailCardKeys":["current_status","action_evidence","baseline_confidence","externality_review","participant_relative_scores","appeal_scope"],"sampleDetailCardStatusReasons":[{"key":"current_status","status":"human_review","statusReasonCode":"current_status.human_review","statusReason":"human review: the visible status is still a review state, not completion, custody, enforceability, or moral endorsement."},{"key":"action_evidence","status":"pass","statusReasonCode":"action_evidence.pass","statusReason":"pass: a named proof method and clear evidence locator are present for reviewer inspection."},{"key":"baseline_confidence","status":"pass","statusReasonCode":"baseline_confidence.pass","statusReason":"pass: the baseline is stated with enough support to enter counterfactual review."},{"key":"externality_review","status":"human_review","statusReasonCode":"externality_review.human_review","statusReason":"human review: the mode or causes can affect third parties, incentives, or unrepresented values."},{"key":"participant_relative_scores","status":"pass","statusReasonCode":"participant_relative_scores.pass","statusReason":"pass: scores are bounded as participant-stated context, not platform ranking."},{"key":"appeal_scope","status":"human_review","statusReasonCode":"appeal_scope.human_review","statusReason":"human review: appeals require reviewer handling and must stay within the reviewed issue."}],"sampleMarketplaceFactorCodes":["human_review_required","evidence_rule_named","baseline_credibility","externality_review_required","no_global_moral_ranking"],"sampleMarketplaceStatusReason":{"status":"human_review","statusReasonCode":"externality_review.human_review","statusReason":"human review: the mode or causes can affect third parties, incentives, or unrepresented values."},"contractTests":["review_workflow_contract_validator","offer_review_workflow_card_smoke","user_facing_blocker_explanation_smoke","marketplace_factor_card_smoke","technical_spec_review_workflow_smoke"]},"blockers":[]}