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.
Primary observation link
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.json5—storyteller.card.declined_offer_receipt_docket.v1;game-content/storyteller/rites/declined-offer-reconciliation.json5—storyteller.rite.declined_offer_reconciliation.v1;game-content/storyteller/events/unanswered-offer-afterbid.json5—storyteller.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_turnresolvingignore_afterbidat option index5, thenevent_choiceresolvingrecord_hostile_afterbidat option index0.
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: trueThe 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 | noneThe 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_triggerProgress 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.