{"ok":true,"checkedAt":"2026-07-17T20:54:55.912Z","contractVersion":"moral-trade-agreement-amendments-v0.1-2026-06","purpose":"Fail-closed agreement-amendment governance for locked donation offsets and pledge swaps: append-only amendment records, before/after hashes, renewed confirmations, non-retroactivity checks, notice, reviewer quality, baseline integrity, and neutral review before material changes can alter obligations or become reliance-bearing.","validation":{"status":"pass","validatorName":"moral-trade-agreement-amendments-contract","validatorVersion":"moral-trade-agreement-amendments-validator-v0.1","contractVersion":"moral-trade-agreement-amendments-v0.1-2026-06","checks":[{"id":"record-table-coverage","label":"Agreement amendments have first-class policy and amendment records","status":"pass","evidence":"moral_trade_agreement_amendment_policies, moral_trade_agreement_amendment_records"},{"id":"enforcement-record-table-coverage","label":"Agreement amendments have append-only enforcement records","status":"pass","evidence":"moral_trade_agreement_amendment_enforcement_records"},{"id":"enforcement-route-coverage","label":"Agreement amendments expose authenticated append-only enforcement","status":"pass","evidence":"POST /api/moral-trade/agreement-amendments/enforce authenticated"},{"id":"policy-subject-coverage","label":"Agreement amendments are frozen policy-snapshot subjects","status":"pass","evidence":"agreement_amendment"},{"id":"transition-coverage","label":"Donation offsets, pledge swaps, corrections, pauses, evidence changes, and destination changes are covered","status":"pass","evidence":"donation_offset_material_change, pledge_swap_material_change, post_lock_correction, pause_or_early_termination, evidence_standard_change, destination_change"},{"id":"subject-type-coverage","label":"Locked offsets, locked pledge swaps, lock proposals, and cleared agreements are covered","status":"pass","evidence":"locked_donation_offset, locked_pledge_swap, matched_trade_lock_proposal, cleared_trade_agreement"},{"id":"amendment-type-coverage","label":"Amendment types cover correction, mutual modification, pause, termination, schedule, compensation, destination, baseline, privacy, and other changes","status":"pass","evidence":"correction, mutual_modification, pause, early_termination, evidence_standard_change, schedule_change, compensation_change, destination_change, baseline_correction, privacy_change, other"},{"id":"amendment-state-coverage","label":"Amendment states include draft, presented, confirmed, approved, applied, rejected, withdrawn, stale, and superseded","status":"pass","evidence":"draft, presented, confirmed, approved, applied, rejected, withdrawn, superseded, stale"},{"id":"fail-closed-coverage","label":"Fail-closed statuses cover parent edits, retroactivity, retyped evidence, renewed confirmations, neutral review, notice, and hashes","status":"pass","evidence":"policy_missing, policy_mutable, policy_stale, policy_superseded, amendment_missing, amendment_unconfirmed, amendment_not_approved, amendment_not_applied, amendment_rejected_or_withdrawn, amendment_stale, amendment_superseded, parent_record_edit_detected, retroactive_performance_change, evidence_claim_retyped, exposure_increase_without_confirmation, funds_redirect_without_confirmation, compensation_change_without_confirmation, cancellation_rights_narrowed, privacy_change_without_confirmation, donor_of_record_change_without_confirmation, third_party_obligation_change_without_confirmation, renewed_confirmation_missing, renewed_confirmation_stale, participant_confirmation_scope_mismatch, neutral_review_missing, notice_missing, reviewer_quality_missing, baseline_integrity_missing, before_terms_hash_missing, after_terms_hash_missing, policy_snapshot_bundle_missing, invalid_amendment_hash, invalid_policy_hash"},{"id":"transition-definition-coverage","label":"Every amendment transition lists required records and blocked transitions","status":"pass","evidence":"donation_offset_material_change:2, pledge_swap_material_change:2, post_lock_correction:2, pause_or_early_termination:2, evidence_standard_change:2, destination_change:2"},{"id":"sample-evaluation-coverage","label":"Sample evaluations prove a post-lock correction can pass and a burden-shifting pledge-swap change blocks","status":"pass","evidence":"post_lock_correction:pass, pledge_swap_material_change:blocked"},{"id":"contract-test-coverage","label":"Contract lists route, schema, health, and fail-closed tests","status":"pass","evidence":"agreement_amendment_contract_validator, agreement_amendment_evaluator_fail_closed, agreement_amendment_route_contract, agreement_amendment_enforce_route_contract, agreement_amendment_schema_contract, agreement_amendment_enforcement_record_schema_contract, agreement_amendment_health_contract"}],"blockers":[]},"publicContract":{"privacyRule":"Public agreement-amendment contract responses expose only static table names, transition names, amendment types, state codes, validation blockers, and sample pass/block states; they never expose private amendment narratives, participant identities, confirmation payloads, reviewer notes, payment details, private baselines, or counterparty-specific terms.","failClosedRule":"Parent-record edits are not amendments: missing, stale, unapproved, unapplied, rejected, withdrawn, or superseded amendment records; retroactive performance changes; evidence-claim retyping; exposure increases; fund redirects; compensation changes; cancellation-right narrowing; privacy, donor-of-record, or third-party-obligation changes without renewed confirmation; missing neutral review; missing notice; missing reviewer-quality or baseline-integrity checks; missing before/after terms hashes; missing policy snapshot bundle; or invalid hashes block material post-lock changes.","enforcementRule":"Authenticated agreement-amendment enforcement writes only owner-scoped append-only enforcement records. Enforcement records can prove pass or blocked gate status, but they cannot apply amendments, edit parent records, authorize material changes, authorize payment, authorize reliance, or publish public metrics.","firstClassRecordTables":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"enforcementRecordTables":["moral_trade_agreement_amendment_enforcement_records"],"enforcementRoute":{"method":"POST","path":"/api/moral-trade/agreement-amendments/enforce","auth":"authenticated","stateMutation":"append_only_enforcement_record"},"policySnapshotSubjects":["agreement_amendment"],"transitions":["donation_offset_material_change","pledge_swap_material_change","post_lock_correction","pause_or_early_termination","evidence_standard_change","destination_change"],"subjectTypes":["locked_donation_offset","locked_pledge_swap","matched_trade_lock_proposal","cleared_trade_agreement"],"amendmentTypes":["correction","mutual_modification","pause","early_termination","evidence_standard_change","schedule_change","compensation_change","destination_change","baseline_correction","privacy_change","other"],"amendmentStates":["draft","presented","confirmed","approved","applied","rejected","withdrawn","superseded","stale"],"confirmationStates":["missing","stale","scope_mismatch","passed","not_required_for_stage"],"failClosedStatuses":["policy_missing","policy_mutable","policy_stale","policy_superseded","amendment_missing","amendment_unconfirmed","amendment_not_approved","amendment_not_applied","amendment_rejected_or_withdrawn","amendment_stale","amendment_superseded","parent_record_edit_detected","retroactive_performance_change","evidence_claim_retyped","exposure_increase_without_confirmation","funds_redirect_without_confirmation","compensation_change_without_confirmation","cancellation_rights_narrowed","privacy_change_without_confirmation","donor_of_record_change_without_confirmation","third_party_obligation_change_without_confirmation","renewed_confirmation_missing","renewed_confirmation_stale","participant_confirmation_scope_mismatch","neutral_review_missing","notice_missing","reviewer_quality_missing","baseline_integrity_missing","before_terms_hash_missing","after_terms_hash_missing","policy_snapshot_bundle_missing","invalid_amendment_hash","invalid_policy_hash"],"transitionDefinitions":[{"key":"donation_offset_material_change","protectedBoundary":"locked donation offsets cannot change amount, ratio, baseline, destination, donor treatment, evidence standard, or remedy by editing parent records","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["payment_capture","public_completed_claim","payout_release"]},{"key":"pledge_swap_material_change","protectedBoundary":"locked pledge swaps require append-only amendment records, renewed confirmations, and neutral review before burden-shifting changes can become reliance-bearing","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["performance_start","matched_trade_lock_update","reliance_bearing_preview"]},{"key":"post_lock_correction","protectedBoundary":"corrections may clarify terms only when before/after hashes prove no retroactive performance or evidence-claim change","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["terms_snapshot_update","evidence_acceptance","cleared_agreement_update"]},{"key":"pause_or_early_termination","protectedBoundary":"pause or early termination cannot narrow cancellation rights, redirect funds, or change compensation without affected confirmations and neutral review where required","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["performance_pause","early_termination","refund_or_carry_forward"]},{"key":"evidence_standard_change","protectedBoundary":"evidence standards cannot be changed after lock to convert old evidence into a different claim type","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["evidence_review","impact_claim_publication","breach_remedy"]},{"key":"destination_change","protectedBoundary":"destination changes require renewed confirmation, policy snapshots, notice, and recipient/destination review before capture, payout, or public money claims","requiredRecords":["moral_trade_agreement_amendment_policies","moral_trade_agreement_amendment_records"],"blocksTransitions":["payment_capture","destination_reuse","public_money_metric"]}],"agreementAmendmentSampleEvaluationStatuses":{"post_lock_correction":"pass","pledge_swap_material_change":"blocked"},"contractTests":["agreement_amendment_contract_validator","agreement_amendment_evaluator_fail_closed","agreement_amendment_route_contract","agreement_amendment_enforce_route_contract","agreement_amendment_schema_contract","agreement_amendment_enforcement_record_schema_contract","agreement_amendment_health_contract"]},"blockers":[]}