Remedy Preclusion / 救济失权机制

Remedy Preclusion is the mechanic that prevents a service row from becoming universal waiver.

The recent mesh can already prove that a capacity notice was served, a callback carrier was assigned, a substitute carrier was fit-tested, a counterreceipt was heard, or a capacity row was scoped. The missing aftershock is finality overreach: a later reader says service exists, so the next remedy is barred.

This mechanic asks a narrower question: did the served row actually give this barred claimant a real opportunity to answer this specific remedy?

Inputs

inputs_required:
  source_service_row: <row id>
  source_surface: capacity_notice_service | reader_rebuttal_notice | callback_carrier_collision | excluded_counterreceipt | substitute_carrier | broadcast_capacity_liability | equivalent
  service_state_before: served | split_served | proxy_served | lawful_served | public_served | sponsor_served | callback_required | substituted | quarantined | false_served | unserved | equivalent
  served_reader_or_claimant: <reader or explicit_absence>
  omitted_or_deferred_reader: <reader or explicit_absence>
  claimant_trying_to_bar: <actor>
  barred_claimant_or_reader: <reader>
  remedy_at_risk: callback | correction | refund | counterreceipt | lawful_appeal | public_addendum | route_delay | capacity_reserve | witness_protection | substitute_fit_review | equivalent
  proof_of_actual_opportunity_or_absence: <proof or explicit_absence>
  future_reader_or_route: <reader route package proof window or broadcast reality surface>

The mechanic fails if it evaluates only served: true.

State machine

preclusion_state_machine:
  unchecked:
    on_valid_source_and_barred_remedy: contested_preclusion
  contested_preclusion:
    branches:
      accept_scoped_preclusion: scoped_preclusion
      rebut_preclusion: preclusion_rebutted
      reopen_remedy: remedy_reopened
      lawful_appeal: lawful_only
      public_addendum: public_only
      substitute_or_callback_rework: split_required
      quarantine_service: quarantined
      false_preclusion_default: false_precluded
  scoped_preclusion:
    future_reader_must_name_scope: true
  preclusion_rebutted:
    future_reader_must_offer_remedy_or_cost: true
  remedy_reopened:
    callback_or_addendum_required: true
  quarantined:
    future_route_blocked_until_rework: true
  false_precluded:
    event: storyteller.event.false_preclusion_default.v1

Valid conclusions

A conclusion is valid only when the result mutates relief, cost, and future route state.

valid_result:
  preclusion_state_after: scoped_preclusion | preclusion_rebutted | remedy_reopened | lawful_only | public_only | sponsor_only | quarantined | false_precluded | recovery_only | contradiction_pending
  barred_claimant_state_after: protected | delayed | hostile | lawful_only | public_only | bought_off | blocked | recovery_only | equivalent
  source_service_state_after: preserved_for_named_scope | narrowed | challenged | quarantined | defaulted | false_clean | equivalent
  future_reader_or_route_effect: addendum_required | callback_required | costlier | audit_required | route_delay | public_only | lawful_only | sponsor_capture | blocked | hostile | recovery_only | contradiction_pending
  counter_deltas:
    relief: [<delta>]
    cost: [<delta>]
    future: [<delta>]

Invariants

hard_rules:
  service_is_not_universal_waiver: true
  public_notice_is_not_lawful_waiver: true
  lawful_notice_is_not_public_consent: true
  sponsor_countercopy_is_not_fan_consent: true
  proxy_service_is_not_artist_boundary_waiver: true
  callback_to_one_reader_is_not_callback_to_all: true
  substitute_service_is_not_fit_review_waiver: true
  omitted_reader_remains_visible: true
  future_reader_consumes_preclusion_state: true
  no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger: true

Observable surfaces

This mechanic is observed through:

It receives source rows from 容量告知送达队列线, 读者反驳通知线, 回叫承载撞车线, 被排除者反回执挑战线, 替代承载征调线, and 播出容量责任级联线.