Encounter Availability Routing Lens / 遇见可用性分流 Lens
This lens observes whether 遇见可用性分流线 makes route-critical encounters a playable management/RPG resource instead of leaving every character permanently available.
A passing implementation proves that state pressure from schedule, law, facility access, sponsor capture, editor custody, recovery ward, floor crew, fan mandate, relay, archive custody, or broadcast reality can create a contested encounter window. The replay must show a target or explicit absence, source pressure, at least two access gates, rival or lost encounter, state boundary, future reader, branch choice, costed result, and durable missed/default path.
The lens fails if the package opens from fixed turn number, day count, chapter quota, raw content count, dashboard/lens-health state, or generic relationship availability.
Primary observation link
This lens observes:
- 遇见可用性分流线;
- 遇见可用性分流机制;
- Broadcast Schedule;
- Broadcast Reality;
- Route Assets and Custody;
- 压制;
- 代理人姿态链机制;
- 直播现场班组负荷机制;
- 复原病房出院压迫机制;
- 粉丝委任分裂机制.
It is observed through:
Observable promise
The player must not be allowed to treat a route-critical person as globally available after state choices change access. The game must ask:
- who is needed;
- why they are needed;
- which source pressure created the need;
- which gates now control access;
- what encounter is rival, narrower, or lost;
- which route reader consumes the result;
- what default happens if availability is falsely cleaned.
Must pass
1. Entry is state-driven
Required entry evidence:
entry_state:
trigger_kind: state_pressure
route_critical_target_present: true
target_or_explicit_absence_present: true
source_pressure_present: true
access_gate_count_min: 2
rival_or_lost_encounter_present: true
future_reader_or_route_consumes_result: true
no_fixed_turn_trigger: true
no_fixed_day_or_week_trigger: true
no_raw_count_trigger: trueThe lens fails if entry depends on turn count, day/week interval, chapter quota, raw content count, lens health, or generic social availability.
2. Target and encounter need are visible
The replay must name the person, NPC, role, or explicit absence and why the encounter matters.
target:
target_entity: <character npc role or explicit_absence>
target_kind: recruitable | witness | handler | inspector | editor | sponsor_bridge | fan_delegate | ward_patient | floor_captain | pirate_relay | archive_clerk | equivalent
encounter_need: recruit | interview | testimony | custody_handoff | apology | counterproof | route_unlock | safety_signoff | discharge_hold | correction_slot | equivalentA generic talk to someone or meet the contact action cannot satisfy this lens.
3. Source pressure preserves prior relief and cost
The availability row must show which prior branch created the encounter pressure and what that branch already changed.
source_pressure:
source_system: schedule_contract | broadcast_reality_drift | facility_lockdown | recovery_discharge | fan_delegate_mandate | live_floor_load | proxy_posture | sponsor_capture | archive_custody | equivalent
source_row_or_result_id: <stable id>
preserved_relief: <relief already earned>
preserved_cost: <cost already created>The lens fails if the encounter resets the prior pressure or uses a generic availability flag.
4. At least two access gates are recorded
遇见可用性账本 must record at least two active or absent gates.
Valid gates include:
- schedule;
- legal;
- facility;
- public;
- sponsor;
- editor;
- ward;
- floor;
- relay;
- handler.
The lens fails if one gate cleanly decides access by itself without a rival gate or explicit absence.
5. Rival or lost encounter is named
The implementation must record what becomes narrower, lost, substitute-only, or recovery-only.
rival_or_lost_encounter: <target route or explicit_absence>
availability_before: available | contested | private_only | lawful_only | public_only | sponsor_only | relay_only | ward_held | floor_locked | substitute_only | missed | recovery_onlyOpening an encounter without naming the cost to another route fails.
6. State boundary is not fixed time
The row must name an in-world state boundary:
state_boundary: before_air | before_discharge_signoff | before_route_asset_spent | before_witness_exposed | before_slot_reassigned | before_default_narrator | equivalentThe lens fails if this is encoded as turn N, after X days, chapter number, daily timer, or content-count milestone.
7. Arbitration assignment slots are explicit
遇见窗口仲裁 must require:
assignment:
ledger: storyteller.card.encounter_availability_ledger.v1
selected_row: <row id>
target_entity: <character npc role or explicit_absence>
encounter_need: <need>
source_pressure_id: <stable id>
primary_gate: <gate>
secondary_gate: <gate>
availability_before: <state>
rival_or_lost_encounter: <target route or explicit_absence>
handler_or_absence: <handler or explicit_absence>
state_boundary: <state boundary>
future_reader_or_route: <stable id>Generic choices like call them, ask legal, use sponsor, or send editor fail unless these slots are present.
8. Branches diverge
A satisfying implementation must expose at least six branch families, including one preservation branch and one missed/default branch:
reserve_private_meeting;seat_lawful_interview;broadcast_public_call;trade_sponsor_access;route_through_editor_or_relay;overload_access;defer_substitute_or_default.
Branches must not collapse to the same counter deltas.
9. Branch assertions
Private branch assertion
selected_branch: reserve_private_meeting
availability_after_any: [private_only, available, contested]
relief_any: [witness_exposure_down, route_asset_access_up, source_ambiguity_down, ward_custody_integrity_up]
cost_any: [public_receipt_distrust_up, sponsor_stop_loss_pressure_up, handler_fatigue_up, lawful_access_costlier]
future_effect_any: [private_route_open_with_public_cost, public_route_costlier, follow_up_disclosure_required]Lawful branch assertion
selected_branch: seat_lawful_interview
availability_after_any: [lawful_only, available, recovery_only]
relief_any: [legal_admissibility_up, inspection_contradiction_down, archive_legibility_up]
cost_any: [bureau_favor_debt_up, public_addendum_pressure_up, fan_mandate_fracture_up, schedule_pressure_up]
future_effect_any: [lawful_route_open, public_route_requires_addendum, sponsor_route_costlier]Public branch assertion
selected_branch: broadcast_public_call
availability_after_any: [public_only, relay_only, contested]
relief_any: [public_receipt_legitimacy_up, private_capture_down, fan_delegate_visibility_up]
cost_any: [witness_exposure_up, inspection_heat_up, pirate_exposure_up, sponsor_stop_loss_pressure_up]
future_effect_any: [public_route_open_with_retaliation, lawful_appeal_required, relay_protection_required]Sponsor branch assertion
selected_branch: trade_sponsor_access
availability_after_any: [sponsor_only, available, substitute_only]
relief_any: [sponsor_stop_loss_pressure_down, immediate_slot_pressure_down, schedule_pressure_down]
cost_any: [contract_capture_up, public_receipt_distrust_up, route_asset_capture_up, future_recovery_cost_up]
future_effect_any: [sponsor_route_open_with_capture, public_route_costlier, default_event_armed]Editor or relay branch assertion
selected_branch: route_through_editor_or_relay
availability_after_any: [relay_only, private_only, contested]
relief_any: [retaliation_risk_down, route_asset_access_up, immediate_exposure_down]
cost_any: [edit_debt_up, source_ambiguity_up, relay_custody_risk_up, inspection_heat_up]
future_effect_any: [source_disclosure_required, split_public_lawful_routes, contradiction_pending]Overload branch assertion
selected_branch: overload_access
availability_after_any: [available, recovery_only, substitute_only]
relief_any: [immediate_route_unblocked, slot_saved, proof_contact_made]
cost_any: [crew_load_up, blackout_risk_up, ward_custody_integrity_down, handler_fatigue_up, proxy_hostility_up]
future_effect_any: [access_scar_armed, hostile_followup_armed, recovery_route_required]Miss/default branch assertion
selected_branch: defer_substitute_or_default
availability_after_any: [substitute_only, missed, recovery_only]
event_seen_or_armed: storyteller.event.missed_encounter_default.v1
relief_any: [immediate_overload_down, legal_exposure_down, sponsor_noise_down]
cost_any: [missed_encounter_risk_up, route_asset_access_down, future_recovery_cost_up, public_contradiction_risk_up]
future_effect_any: [route_blocked_until_substitute, recovery_only, hostile_encounter_armed]10. Success has cost
Every successful branch must open or preserve one encounter while increasing, spending, narrowing, or exposing another surface.
Valid costs include:
public_receipt_distrust;sponsor_stop_loss_pressure;handler_fatigue;bureau_favor_debt;fan_mandate_fracture;schedule_pressure;witness_exposure;inspection_heat;pirate_exposure;contract_capture;route_asset_capture;edit_debt;source_ambiguity;relay_custody_risk;crew_load;blackout_risk;ward_custody_integrity_down;future_recovery_cost.
The lens fails if the encounter opens cleanly and no rival encounter, gate, route, or future reader is harmed or narrowed.
11. Future reader consumes availability
The branch must mutate a future reader or route.
Valid effects include:
private_route_open_with_public_cost;lawful_route_open;public_route_requires_addendum;public_route_open_with_retaliation;sponsor_route_open_with_capture;source_disclosure_required;split_public_lawful_routes;access_scar_armed;route_blocked_until_substitute;recovery_only.
Flavor-only meeting text fails.
12. Missed default is durable
错过遇见默认 must fire or be armed when:
- availability ledger is missing;
- rival/lost encounter is not named;
- lawful-only access is reused as public availability;
- sponsor access is filed as neutral;
- private/editor route is reused as public proof;
- public or relay access lacks exposure and lawful appeal cost;
- ward, floor, facility, or handler capacity is spent without scar;
- substitute replaces target without route weakening.
Required default payload:
default_payload:
source_ledger: storyteller.card.encounter_availability_ledger.v1 | explicit_absence
target_entity: <character npc role or explicit_absence>
missing_gate_evidence_present: true
rival_or_lost_encounter_present: true
default_actor: sponsor | inspector_archive | floor_crew | ward_authority | facility_lock | fan_public | editor_mask | pirate_relay | blackout_system | absent_handler | equivalent
availability_after: missed | substitute_only | recovery_only | public_only | lawful_only | sponsor_only | relay_only | equivalent
branch_or_route_blocked: <stable id or none>
substitute_or_recovery_hook: <hook or none>Replay evidence expectation
lens_id: storyteller.lens.encounter_availability_routing.v1
session_id: lens-storyteller-encounter-availability-routing-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
trigger_kind: state_pressure
target_or_explicit_absence_present: true
source_pressure_present: true
access_gate_count_min: 2
rival_or_lost_encounter_present: true
future_reader_or_route_consumes_result: true
no_fixed_turn_trigger: true
no_fixed_day_or_week_trigger: true
offered:
card: storyteller.card.encounter_availability_ledger.v1
rite: storyteller.rite.encounter_window_arbitration.v1
branch_runs:
preservation_branch:
selected_branch: reserve_private_meeting | seat_lawful_interview | broadcast_public_call | trade_sponsor_access | route_through_editor_or_relay
availability_before: <state>
availability_after: <state>
opened_encounter: <target or route>
narrowed_or_lost_encounter: <target route or explicit_absence>
future_reader_or_route_effect: <effect>
counter_deltas:
relief: [<relief>]
cost: [<cost>]
miss_branch:
selected_branch: overload_access | defer_substitute_or_default
event_seen_or_armed: storyteller.event.missed_encounter_default.v1
availability_after: missed | substitute_only | recovery_only | public_only | lawful_only | sponsor_only | relay_only | equivalent
future_reader_or_route_effect: <effect>
assertions:
- primary_links_exist
- entry_is_state_triggered
- target_source_gates_rival_boundary_and_future_reader_visible
- rite_assignment_slots_explicit
- branches_diverge
- success_has_cost
- missed_default_is_durable
- no_fixed_turn_or_day_triggerNon-goals
- Not raw count expansion.
- Not a fixed-time missed scene.
- Not a social hub selector.
- Not a relationship meter.
- Not a governance or dashboard page.
- Not valid if legal, sponsor, editor, schedule, ward, floor, or public access makes every target freely available.