Rebuttal Recall Collision Lens / 反驳召回撞锁 Lens

This lens observes whether 反驳召回撞锁线 and 反驳召回撞锁机制 correctly make correction-order conflict playable.

A passing implementation proves that when 过期派发召回线 and 读者反驳通知线 touch the same authority row, the game records which correction binds which actor first. It must expose stale recipients, future readers, affected parties, acknowledgement surfaces, unbound surfaces, costs, and future route effects.

The lens fails if recall automatically counts as rebuttal, if rebuttal automatically recalls old instructions, or if every actor silently synchronizes for free.

This lens observes:

It is observed through:

Observable promise

Storyteller must distinguish correction surfaces. A stale dispatch recall binds a holder or recipient of an old instruction. A reader rebuttal notice binds a future reader and affected party response boundary. When both point to the same authority row, the player must decide binding order and accept partial truth.

A pass cannot be achieved by prose callbacks, a universal notify all, generic legal approval, dashboard health, or a single corrected flag.

Must pass

1. Entry requires shared authority and two live correction pressures

Required evidence:

entry_state:
  trigger_kind: state_pressure
  shared_authority_row_present: true
  stale_instruction_still_actionable: true
  future_reader_wants_to_consume_authority: true
  affected_party_or_explicit_absence_present: true
  stale_holder_or_explicit_absence_present: true
  recall_boundary_unresolved_or_partial: true
  rebuttal_boundary_unresolved_or_partial: true
  future_route_can_change_by_binding_order: true
  player_can_assign_arbitration_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry is triggered by fixed turn, day/week, chapter quota, raw number of rows, dashboard state, lens health, or generic production trouble.

2. Recall and rebuttal sides are separate

Rebuttal Recall Collision Docket or equivalent must record both sides:

collision_context:
  shared_authority:
    authority_row_id: <stable row id>
    source_surface: transcript | rehearsal_trace | dispatch | custody_copy | public_receipt | route_asset | sponsor_copy | archive_docket | equivalent
  stale_dispatch_side:
    stale_instruction_id: <instruction id>
    stale_holder_or_absence: <holder or explicit_absence>
    stale_action_if_unrecalled: <action>
    recall_channel_available: <channel or explicit_absence>
  rebuttal_side:
    future_reader: <reader id>
    intended_use: proof | public_receipt | lawful_fact | sponsor_release | final_cut | route_unlock | consent_record | discharge_record | contradiction_close | equivalent
    affected_party_or_absence: <party proxy constituency or explicit_absence>
    rebuttal_boundary_available: <boundary or explicit_absence>

The lens fails if it records only correction_needed: true, row_fixed: true, notice_sent: true, or dispatch_recalled: true.

3. Arbitration slots record binding order and per-actor acknowledgement

Rebuttal Recall Arbitration or equivalent must require:

arbitration_assignment:
  collision_docket: storyteller.card.rebuttal_recall_collision_docket.v1
  shared_authority_row: <row id>
  stale_docket_or_absence: storyteller.card.stale_dispatch_docket.v1 | explicit_absence | equivalent
  rebuttal_ledger_or_absence: storyteller.card.reader_rebuttal_notice_ledger.v1 | explicit_absence | equivalent
  arbitrator_or_absence: <actor or explicit_absence>
  stale_holder_or_absence: <holder or explicit_absence>
  affected_party_or_absence: <party or explicit_absence>
  carrier_or_absence: <carrier or explicit_absence>
  selected_binding_order: recall_first | notice_first | split_bind | freeze_both | public_bridge | sponsor_hush | runner_bridge | default
  acknowledgement_surface_or_absence: signed_stub | checksum | docket_stamp | public_line | witness_receipt | route_asset_tag | explicit_absence
  reader_to_bind: <reader id>
  recipient_to_bind: <recipient id>
  reader_left_unbound_or_absence: <reader or explicit_absence>
  recipient_left_unbound_or_absence: <recipient or explicit_absence>
  accepted_cost_or_absence: <cost or explicit_absence>

The lens fails if acknowledgement is global rather than per actor.

4. Bound and unbound actors are visible

Each resolved branch must expose:

binding_result:
  bound_recipients: []
  bound_readers: []
  unbound_readers_or_explicit_absence: []
  unbound_recipients_or_explicit_absence: []
  acknowledgement_surface: <surface or explicit_absence>
  correction_surface_scope: recall_only | rebuttal_only | split | frozen | public_bridge | sponsor_only | paired_carrier | misbound | equivalent

The lens fails if all readers and recipients are presumed updated without acknowledgement.

5. Branch order changes future acceptance

At least two successful branches and one default branch must produce different future acceptance states.

Required examples or equivalents:

future_acceptance_examples:
  recall_first:
    future_route_effect: late_rebuttal_required | lawful_annex_required | public_counterline_required | recovery_scar
  notice_first:
    future_route_effect: recall_stamp_required | checksum_required | quarantine_required
  split_bind:
    future_route_effect: split_reader_table_required | route_scope_narrowed
  freeze_both:
    future_route_effect: blocked_until_dual_acknowledgement
  public_bridge:
    future_route_effect: public_accepts_with_cost_and_lawful_bridge_required
  sponsor_hush:
    future_route_effect: sponsor_unwind_required | default_armed
  runner_bridge:
    future_route_effect: route_asset_accepts_only_with_tag_or_checksum
  misbound_default:
    future_route_effect: blocked | costlier | lawful_only | public_only | sponsor_only | split_pending | dual_ack_required | recovery_only

The lens fails if counters move but future reader acceptance, stale recipient acceptance, route access, proof tests, or route asset state remain identical.

6. At least five branch families diverge

A satisfying implementation must expose at least five branch families as playable or explicitly blocked by state, including one misbind/default branch:

  • recall_first;
  • notice_first;
  • split_bind;
  • freeze_both;
  • public_bridge;
  • sponsor_hush;
  • runner_bridge;
  • misbound_default.

Each resolved family must differ by:

branch_non_equivalence:
  selected_binding_order: <order>
  acknowledgement_surface: <surface or explicit_absence>
  bound_actor_set: <set>
  unbound_actor_set: <set>
  relief_profile: <relief>
  cost_profile: <cost>
  future_route_effect: <effect>

7. Boundary-specific assertions

Recall-first assertion

selected_branch: recall_first
relief_any: [stale_dispatch_risk_down, false_execution_blocked, custody_clarity_up]
cost_any: [notice_debt_up, affected_party_hostility_up, public_receipt_distrust_up, future_reader_surcharge_up]
future_effect_any: [late_rebuttal_required, lawful_annex_required, public_counterline_required, recovery_scar]
forbidden: [recall_as_consent, recall_as_answer]

Notice-first assertion

selected_branch: notice_first
relief_any: [notice_legitimacy_up, contradiction_legibility_up, public_receipt_legitimacy_up]
cost_any: [stale_dispatch_risk_up, schedule_pressure_up, route_asset_pressure_up, holder_hostility_up]
future_effect_any: [recall_stamp_required, checksum_required, quarantine_required]
forbidden: [rebuttal_as_recall]

Split-bind assertion

selected_branch: split_bind
relief_any: [route_survival_up, reader_scope_legibility_up]
cost_any: [proof_burden_up, handler_burden_up, source_ambiguity_up, public_confusion_up]
future_effect_any: [split_reader_table_required, route_scope_narrowed]
forbidden: [split_bind_as_universal_acceptance]

Freeze-both assertion

selected_branch: freeze_both
relief_any: [false_execution_down, false_authority_down]
cost_any: [inspection_heat_up, schedule_pressure_up, sponsor_stop_loss_pressure_up, route_delay_up]
future_effect_any: [blocked_until_arbitration, blocked_until_dual_acknowledgement]
forbidden: [freeze_as_resolution]

Public-bridge assertion

selected_branch: public_bridge
relief_any: [public_receipt_legitimacy_up, anti_capture_up, stale_instruction_marked_unsafe]
cost_any: [witness_exposure_up, sponsor_pressure_up, public_confusion_up, contradiction_pressure_up]
future_effect_any: [public_accepts_with_cost, lawful_bridge_required]
forbidden: [public_bridge_as_lawful_admissibility]
selected_branch: sponsor_hush
relief_any: [sponsor_stop_loss_pressure_down, immediate_slot_pressure_down]
cost_any: [contract_capture_up, false_notice_risk_up, public_receipt_distrust_up]
future_effect_any: [sponsor_unwind_required, public_or_lawful_repair_required, default_armed]
forbidden: [sponsor_hush_as_clean_closure]

Runner-bridge assertion

selected_branch: runner_bridge
relief_any: [paired_acknowledgement_possible, recipient_and_reader_scope_up]
cost_any: [runner_risk_up, payroll_leak_up, custody_noise_up, stenographer_exposure_up]
future_effect_any: [route_asset_accepts_with_tag, checksum_required, substitute_proof_if_carrier_lost]
forbidden: [carrier_as_free_sync]

Misbound-default assertion

selected_branch: misbound_default
event_seen_or_armed: storyteller.event.recall_rebuttal_misbind.v1
state_after_any: [stale_instruction_executed_without_answer, row_answered_after_old_execution, wrong_reader_bound, false_notice_authority, split_correction_unacknowledged, sponsor_capture_hardened, route_asset_misbound, recovery_only]
future_effect_any: [blocked, costlier, lawful_only, public_only, sponsor_only, split_pending, dual_ack_required, recovery_only]

8. Misbind default is durable

Recall Rebuttal Misbind must fire, arm, or be logged when:

  • recall is filed as rebuttal;
  • rebuttal is filed as recall;
  • stale holder is bound but future reader is unbound;
  • future reader is bound but stale holder is unbound;
  • affected party is hidden without explicit absence;
  • stale holder absence is hidden without explicit absence;
  • acknowledgement surface is missing;
  • sponsor hush is filed as clean closure;
  • split binding lacks a split reader table;
  • no future route effect changes.

The event must mutate future play.

9. Recovery keeps a scar

Accepted recovery scars:

  • late rebuttal required;
  • late recall stamp required;
  • dual acknowledgement required;
  • split reader table required;
  • lawful-only route;
  • public-only route;
  • sponsor unwind required;
  • route asset narrowed;
  • substitute proof required;
  • recovery-only route.

Progress metric

rebuttalRecallCollisionProgress = 0..9:

  • 0: no shared authority conflict exists.
  • 1: shared authority row and stale instruction are visible.
  • 2: future reader and affected party or explicit absence are visible.
  • 3: Rebuttal Recall Collision Docket enters play.
  • 4: Rebuttal Recall Arbitration exposes binding order and acknowledgement slots.
  • 5: bound and unbound readers/recipients are recorded.
  • 6: at least two successful branch orders produce distinct future effects.
  • 7: at least five branch families are playable or explicitly blocked.
  • 8: Recall Rebuttal Misbind creates durable route scar.
  • 9: replay evidence proves no fixed turn/day/week/raw-count/dashboard/lens-health trigger and shows branch-order-dependent future acceptance.

Replay evidence shape

lens_id: storyteller.lens.rebuttal_recall_collision.v1
result: pass | fail
session_id: lens-rebuttal-recall-collision-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  shared_authority_row_present: true
  stale_instruction_still_actionable: true
  future_reader_wants_to_consume_authority: true
  affected_party_or_explicit_absence_present: true
  stale_holder_or_explicit_absence_present: true
  recall_boundary_unresolved_or_partial: true
  rebuttal_boundary_unresolved_or_partial: true
  no_fixed_turn_trigger: true
active_objects:
  collision_docket: storyteller.card.rebuttal_recall_collision_docket.v1
  stale_docket: storyteller.card.stale_dispatch_docket.v1 | equivalent | explicit_absence
  rebuttal_ledger: storyteller.card.reader_rebuttal_notice_ledger.v1 | equivalent | explicit_absence
offered_choices:
  - rite.rebuttal_recall_arbitration
  - recall_first
  - notice_first
  - split_bind
  - freeze_both
  - public_bridge
  - sponsor_hush
  - runner_bridge
  - default
branch_runs:
  recall_first:
    selected_binding_order: recall_first
    bound_recipients: []
    bound_readers: []
    unbound_or_explicit_absence: []
    acknowledgement_surface: <surface>
    future_route_effect: late_rebuttal_required
    counter_deltas:
      stale_dispatch_risk: -1
      notice_debt: +1
      future_reader_acceptance: late_rebuttal_required
  notice_first:
    selected_binding_order: notice_first
    future_route_effect: recall_stamp_required
  split_bind:
    selected_binding_order: split_bind
    future_route_effect: split_reader_table_required
  freeze_both:
    selected_binding_order: freeze_both
    future_route_effect: blocked_until_dual_acknowledgement
  runner_bridge:
    selected_binding_order: runner_bridge
    future_route_effect: route_asset_accepts_with_tag_or_checksum
  misbound_default:
    event_seen_or_armed: storyteller.event.recall_rebuttal_misbind.v1
    future_route_effect: blocked | costlier | lawful_only | public_only | sponsor_only | split_pending | dual_ack_required | recovery_only
assertions:
  - entry_is_state_triggered
  - shared_authority_row_visible
  - recall_and_rebuttal_sides_are_separate
  - binding_order_is_assignable
  - per_actor_acknowledgement_visible
  - bound_and_unbound_actors_recorded
  - branch_order_changes_future_acceptance
  - misbind_default_is_durable
  - recovery_keeps_scar
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Non-goals

  • Not a process/governance lens.
  • Not a raw scale target.
  • Not a turn-number continuation.
  • Not a generic correction lens.
  • Not valid if recall is allowed to erase rebuttal debt.
  • Not valid if rebuttal is allowed to erase stale execution risk.
  • Not valid if future reader acceptance is unchanged across binding order branches.