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.
Primary observation link
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: trueThe 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 | equivalentThe 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_onlyThe 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]Sponsor-hush assertion
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_triggerNon-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.