Declined Offer Receipts Lens / 未采纳报价回执 Lens

This lens observes whether 未采纳报价回执线 and 未采纳报价回执机制 prevent selected-branch-only proof.

A pass cannot be achieved by proving that one branch resolved correctly. The implementation must also preserve material offers that were not chosen when those offers had future readers.

This lens observes:

It is observed through:

Observable promise

Storyteller must prove that a costly choice preserves the opportunity cost that made it costly.

The lens passes only when the replay or state inspection can answer:

What material offers were visible, which offer was selected, which offer was declined, what relief did the declined offer propose, what control or cost did it demand, why was it declined, who recorded or failed to record it, and which future route or reader consumed the receipt or afterbid?

The lens fails if a replay stores only the chosen branch, if declined offers are treated as UI history, if unchosen sponsor/fan/archive/schedule/public/edit/management claims vanish, or if ignored offers never become afterbid pressure.

Exact runtime oracle

The bound runtime packet is:

  • game-content/storyteller/cards/declined-offer-receipt-docket.json5storyteller.card.declined_offer_receipt_docket.v1;
  • game-content/storyteller/rites/declined-offer-reconciliation.json5storyteller.rite.declined_offer_reconciliation.v1;
  • game-content/storyteller/events/unanswered-offer-afterbid.json5storyteller.event.unanswered_offer_afterbid.v1;
  • lens/storyteller-declined-offer-receipts.runtime.test.ts — focused reachability, exclusivity, authority-boundary, and closure proof;
  • lens/replays/declined-offer-receipts.replay.json — three actions in order: create, end_turn resolving ignore_afterbid at option index 5, then event_choice resolving record_hostile_afterbid at option index 0.

The rite must expose exactly six divergent triples: acknowledge_receipt → declined_offer_acknowledged → reader_requires_declined_offer_receipt; defer_obligation → declined_offer_deferred → declined_offer_hearing_required; countercredit_offer → declined_offer_countercredited → narrow_route_or_split_reader_required; publish_offer_table → declined_offer_published → public_offer_table_required; void_offer_with_proof → declined_offer_voided → void_proof_must_travel_with_route; and ignore_afterbid → declined_offer_ignored_pending_afterbid → unanswered_offer_afterbid_pending.

Only ignore_afterbid may arm all four pending flags: declined_offer_receipts.afterbid_pending, event.unanswered_offer_afterbid.armed, future_route.unanswered_offer_afterbid_pending, and broadcast_reality.declined_offer_erased_from_choice_history. The event must then expose exactly three exclusive terminals: record_hostile_afterbid → hostile_afterbid_recorded → future_routes_require_afterbid_receipt; reconstruct_offer_table → offer_table_reconstruction_required → offer_table_reconstruction_required_before_route_reuse; and freeze_contested_surface → contested_surface_frozen → contested_surface_recovery_only_until_reconciled.

The authority boundary is also exact: the docket tracks only preselection material-offer continuity, requires a future reader, and preserves selected/declined scopes. It grants no consent, waiver, settlement, route clearance, archive release, proof truth, sponsor/fan/inspector/editor authority, or universal broadcast authority. The non-overlap with Declined Offer Afteruse Receipt Lens is exact: this lane preserves the offer at selection-time; afteruse governs later reuse.

Must pass

1. Entry is state-triggered

Required evidence:

entry_state:
  trigger_kind: state_pressure
  contested_surface_present: true
  offer_set_visible: true
  offered_choice_count_min: 2
  offers_have_distinct_relief_and_cost: true
  selected_offer_present: true
  declined_offer_can_mutate_future_play: true
  future_reader_or_route_present: true
  player_can_reconcile_or_record_absence: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true

The lens fails if eligibility depends on fixed turn count, day/week interval, chapter quota, raw offer count without conflict, dashboard state, or lens health.

2. Offer set is visible before selection

A satisfying replay must expose the material offers before the selected resolution is applied.

offer_set_before_selection:
  contested_surface_id: <id>
  source_surface: oxygen_claim_exchange | schedule_preemption | faction_commitment | management_compression | scar_convergence | route_asset_custody | equivalent
  material_offers:
    - offer_id: <id>
      offered_by: <faction_or_actor>
      proposed_relief: <relief>
      demanded_control_or_cost: <cost>
      proof_or_collateral: <proof_or_explicit_absence>
      future_reader: <reader>
    - offer_id: <id>
      offered_by: <faction_or_actor>
      proposed_relief: <relief>
      demanded_control_or_cost: <cost>
      proof_or_collateral: <proof_or_explicit_absence>
      future_reader: <reader>

The lens fails if the offer set is reconstructed only from the selected outcome.

3. Selected offer has relief, cost, and future effect

The selected branch must still satisfy the existing Storyteller rule: relief cannot be clean.

selected_resolution:
  selected_offer_id: <id>
  selected_offer_effect:
    relief: <counter_or_state_delta>
    cost: <counter_or_state_delta>
    future_route_effect: <effect>

4. Declined offer row is concrete

未采纳报价回执案卷 or equivalent must record at least one declined offer row with:

declined_offer:
  declined_offer_id: <id>
  offered_by: sponsor | fan_public | archive | inspector | editor | artist | pirate | schedule_board | management | handler | route_asset | equivalent
  proposed_relief: <what the offer would have improved>
  demanded_control_or_cost: <what the offer demanded>
  proof_or_collateral: public_receipt | sponsor_clause | archive_seal | fan_queue | edit_checksum | route_asset | schedule_receipt | explicit_absence | equivalent
  why_declined: incompatible_with_selected | no_proof | too_much_capture | public_harm | consent_violation | schedule_loss | oxygen_debt | archive_debt | equivalent
  receipt_status: acknowledged | deferred | countercredited | published | voided | ignored
  future_reader: <route_or_desk_or_claimant>
  afterbid_risk: hostile_afterbid | coalition_offer | public_objection | sponsor_retaliation | archive_freeze | schedule_surcharge | proof_quarantine | recovery_only | none

The lens fails if declined offers lack future reader, reason declined, receipt status, or afterbid risk.

5. Reconciliation is assignable

未采纳报价复核 or equivalent must require handler/proof assignment or explicit absence.

assignment:
  docket: storyteller.card.declined_offer_receipt_docket.v1
  contested_surface_id: <id>
  selected_offer_id: <id>
  declined_offer_id: <id>
  handler_or_absence: shen_luo | yu_lan | han_yanshuang | baiya | inspector | archive_clerk | fan_coordinator | schedule_clerk | explicit_absence | equivalent
  proof_or_counterweight_or_absence: public_receipt | sponsor_clause | archive_seal | fan_queue | edit_checksum | route_asset | schedule_receipt | explicit_absence | equivalent
  future_reader: <reader>

The lens fails if a famous handler, sponsor payment, legal seal, archive authority, or edit patch can erase a declined offer without naming proof, absence, cost, and future reader.

6. Branches do not collapse

At least six branch families must be represented or explicitly blocked by state:

  • acknowledge;
  • defer;
  • countercredit;
  • publish table;
  • void with proof;
  • ignore afterbid.

Each branch must differ by receipt status, relief, cost, future reader effect, and afterbid risk.

7. Afterbid default is durable

未答报价追喊 is executable only after rite option ignore_afterbid arms the full four-flag pending gate. Missing, underfilled, hidden, or falsely represented receipts must first be expressed through that harmful option; none of the other five rite branches may arm the event.

Required event evidence:

afterbid_event:
  event: storyteller.event.unanswered_offer_afterbid.v1
  contested_surface_id: <id>
  offer_set_id: <id>
  selected_offer_id: <id>
  declined_offer_id: <id>
  offered_by: <faction_or_actor>
  missing_receipt_reason: ignored | missing | underfilled | hidden | falsely_voided | no_handler | no_proof | equivalent
  afterbid_form: hostile_afterbid | coalition_offer | public_objection | sponsor_retaliation | archive_freeze | inspection_surcharge | schedule_surcharge | proof_quarantine | recovery_only | equivalent
  future_reader: <reader>
  state_after: hostile | costlier | frozen | sponsor_only | lawful_only | public_only | split_required | recovery_only | blocked | equivalent
  counter_deltas: {}

The lens fails if ignored declined offers produce only flavor, generic reputation, or no future route state.

8. Selected branch cannot erase unchosen material offers

A selected branch may make a declined offer invalid only by voiding it with proof. Otherwise the declined offer must be acknowledged, deferred, countercredited, published, or allowed to become afterbid pressure.

The lens fails if sponsor settlement, public receipt, archive lien, schedule award, edit checksum, or management report silently deletes all alternatives.

9. At least three deltas exist

Every reconciliation or afterbid must mutate at least three counters or durable states:

  • one relief delta;
  • one cost delta;
  • one future route, reader, claimant, proof, schedule, or custody delta.

Expected surfaces:

  • declined_offer_pressure;
  • hostile_afterbid_risk;
  • future_route_cost;
  • claimant_pressure;
  • coalition_pressure;
  • sponsor_stop_loss_pressure;
  • contract_capture;
  • fan_oxygen_resentment;
  • public_receipt_legitimacy;
  • public_receipt_distrust;
  • archive_debt;
  • archive_signature_legitimacy;
  • inspection_heat;
  • schedule_pressure;
  • off_slot_debt;
  • route_asset_pressure;
  • handler_burden;
  • recovery_only_window.

10. Replay provenance exists

Passing evidence must include seed/session id, offer set before selection, selected offer, selected resolution, declined receipt rows, reconciliation assignment, selected reconciliation branch, afterbid event if any, future reader effect, and counter deltas.

Replay evidence expectation

lens_id: storyteller.lens.declined_offer_receipts.v1
session_id: lens-declined-offer-receipts-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  contested_surface_present: true
  offer_set_visible: true
  offered_choice_count_min: 2
  selected_offer_present: true
  declined_offer_future_reader_present: true
  no_fixed_turn_trigger: true
offer_set_before_selection:
  contested_surface_id: <id>
  source_surface: oxygen_claim_exchange | schedule_preemption | faction_commitment | management_compression | scar_convergence | route_asset_custody | equivalent
  material_offers:
    - offer_id: sponsor_or_archive_or_fan_or_schedule_or_management_offer
      offered_by: <faction_or_actor>
      proposed_relief: <relief>
      demanded_control_or_cost: <cost>
      proof_or_collateral: <proof_or_absence>
      future_reader: <reader>
selected_resolution:
  selected_offer_id: <id>
  relief: <delta>
  cost: <delta>
  future_route_effect: <effect>
declined_receipts:
  - declined_offer_id: <id>
    offered_by: <faction_or_actor>
    proposed_relief: <relief>
    demanded_control_or_cost: <cost>
    why_declined: <reason>
    receipt_status_before: required | missing | equivalent
    future_reader: <reader>
reconciliation_runs:
  acknowledged_branch:
    selected_branch: acknowledge_receipt
    handler_or_absence: <handler_or_absence>
    proof_or_counterweight_or_absence: <proof_or_absence>
    receipt_status_after: acknowledged
    counter_deltas: {}
    future_route_effect: costlier_but_open | reader_requires_receipt | equivalent
  afterbid_branch:
    selected_branch: ignore_afterbid
    event_seen_or_armed: storyteller.event.unanswered_offer_afterbid.v1
    afterbid_form: hostile_afterbid | coalition_offer | public_objection | sponsor_retaliation | archive_freeze | schedule_surcharge | proof_quarantine | recovery_only
    state_after: hostile | costlier | frozen | sponsor_only | lawful_only | public_only | split_required | recovery_only | blocked
    counter_deltas: {}
assertions:
  - primary_links_exist
  - entry_is_state_triggered
  - offer_set_visible_before_selection
  - selected_and_declined_offers_recorded
  - declined_offer_has_future_reader
  - reconciliation_requires_handler_or_absence_and_proof_or_absence
  - branches_do_not_collapse
  - afterbid_default_is_durable
  - replay_evidence_includes_offered_options_and_deltas
  - no_fixed_turn_trigger

Progress metric

declinedOfferReceiptProgress = 0..10:

  • 0: selected branch can resolve while all unchosen offers disappear.
  • 1: contested surface and offer set are visible before selection.
  • 2: at least two material offers have distinct relief and cost.
  • 3: selected offer records relief, cost, and future route effect.
  • 4: at least one declined offer row records offered by, proposed relief, demanded control/cost, and why declined.
  • 5: declined offer row records receipt status and future reader.
  • 6: reconciliation assignment records handler/proof or explicit absence.
  • 7: acknowledge, defer, countercredit, publish, and void produce non-equivalent receipt states.
  • 8: ignore/underfill/falsely-void branch fires or arms 未答报价追喊.
  • 9: future reader consumes a receipt or afterbid state and mutates route availability/cost.
  • 10: replay proves offer set before selection, selected outcome, declined receipt, reconciliation branch, afterbid/default when missing, future reader effect, and counter deltas.

Failure cases

The lens must fail if any of these are true:

  • entry is triggered by fixed turn, day, week, chapter quota, raw count, dashboard state, or lens health;
  • offer set is not visible before selection;
  • declined offers are reconstructed only from selected outcome;
  • declined offers are treated as UI history rather than in-world pressure;
  • selected branch erases all unchosen material offers;
  • declined offer lacks future reader;
  • void branch lacks proof;
  • ignored declined offer creates no afterbid event or durable state;
  • branches collapse into generic future cost;
  • replay lacks offered options, selected branch, declined receipt, assignment, future reader, and deltas.

Non-goals

  • Not a UI branch-history log.
  • Not a generic analytics or governance lens.
  • Not raw count satisfaction.
  • Not a fixed-turn callback.
  • Not an obligation to record inert choices.
  • Not valid unless declined offers materially change future routes, readers, claimants, proof, schedule, or custody state.