Du Mian Call-Sheet Captain Lens / 杜眠通告单长 Lens
This lens observes whether Call-Sheet Captain and 杜眠通告单长线 turn live-floor truth into a concrete RPG state.
A pass requires a pressured live-floor lane, an official call-sheet claim, a contradictory real floor state, the actual 杜眠 card, assignable reassignment, divergent recruit/public/proxy/skeleton/silence/default outcomes, durable hostile or deliberately missed states, and a future reader that consumes the person-state.
Executable evidence boundary
Page existence and Du Mian-shaped flags are not enough. The runtime oracle requires all eleven exact assignments listed by Call Sheet Reassignment, including card.du_mian_call_sheet_captain, the selected runner lane, the scope-only unselected board row, and storyteller.card.call_sheet_branch_cost_surface.v1. That generic cost card proves the selected branch’s accepted cost, not universal overtime. accept_absence is a choice made after assigning Du Mian, not an alternate captain input. Recruit proof must end with route_asset.du_mian_call_sheet_captain; hostile proof must truly resolve event.crew_refusal_default, clear du_mian.default_pending, event.crew_refusal_default.armed, and future_route.du_mian_recovery_pending, and retain no clean route asset.
Passing durable evidence is:
lens/replays/du-mian-call-sheet-captain.recruit.replay.json;lens/replays/du-mian-call-sheet-captain.hostile-default.replay.json;lens/storyteller-du-mian-call-sheet-captain.runtime.test.ts.
Primary observation link
This lens observes:
- Call-Sheet Captain;
- 杜眠通告单长线;
- 直播现场班组负荷线;
- 直播现场班组负荷机制;
- Broadcast Schedule;
- Blackout Incidents;
- Route Assets and Custody.
It is observed through:
Gap this lens targets
The live-floor mechanism already proves that a slot needs real crew coverage. This lens targets the character seam: the captain who knows the floor can still be reduced to a boolean helper unless the implementation records what happened to her warning.
The lens fails if:
- the official call sheet equals real safe coverage;
- legal, archive, sponsor, or edit success substitutes for a pressured crew lane;
- 杜眠 only grants a generic safety bonus;
- her warning can be silenced without hostile or recovery cost;
- management proxy state counts as clean safety;
- a future route consumes the floor state without reading whether she was protected, captured, missed, or made hostile.
Must pass
1. Entry is state-triggered
entry_state_required:
trigger_kind: state_pressure
source_slot_or_operation_present: true
source_slot_family: live_broadcast | rehearsal | security_clearance | memorial | correction | emergency_patch | public_testimony | fan_oxygen_queue | route_asset_handoff | equivalent
pressured_crew_lane_present: true
official_call_sheet_claim_visible: true
real_floor_contradiction_visible: true
du_mian_card_and_person_state_visible: true
harmed_reader_if_suppressed_visible: true
future_slot_or_route_reads_floor_state: true
player_can_trust_recruit_pay_publicize_force_silence_or_record_absence: true
non_neutral_default_exists: true
no_fixed_turn_trigger: true
no_fixed_day_or_phase_trigger: true
no_raw_staff_count_trigger: true
no_dashboard_or_lens_health_trigger: trueThe lens fails if entry comes from fixed chronology, raw staff count, chapter quota, lens health, generic affinity, or a management dashboard.
2. Official claim and real contradiction are separate
Call Sheet Load Ledger must record the official claim separately from the real floor contradiction.
floor_truth_required:
official_call_sheet_claim: safe | staffed | sponsor_paid | legally_ordered | editor_ready | archive_cleared | schedule_priority | equivalent
real_floor_contradiction: runner_thin_while_board_is_exhausted
selected_lane: runner
lane_state_before: thin
unselected_board: scope_only
risk_if_warning_silenced_or_absence_accepted: crew_refusal | blackout_skeleton | hostile_leak | absent_captainThe lens fails if the implementation only stores slot_staffed: true or crew_problem: true.
3. The actual 杜眠 card and person-state are visible
captain_state_required:
captain: card.du_mian_call_sheet_captain
du_mian_state_before: unseen | call_sheet_warning | floor_crew_advocate | neutral_call_sheet_captain | management_pressure_proxy | public_safety_witness | blackout_skeleton_lead | suppressed_floor_voice | hostile_call_sheet_leak | missed_by_clean_ruling
absence_semantics: accept_absence_is_a_selected_disposition_not_an_input_card
warning_scope: selected_lane | slot_safety | public_safety | route_asset_movement | blackout_risk | proof_delivery | audience_gate | oxygen_floor | equivalent
harmed_reader_if_suppressed: crew_lane | public_safety | witness | route_asset | fan_public | archive_reader | schedule_board | broadcast_reality | equivalent
future_reader: live_floor_crew_load | broadcast_schedule | blackout_incident | production_triage | stale_dispatch | route_asset_reader | management_compression | equivalentThe lens fails if she is only a helper tag, flavor witness, affinity state, or nameless worker token.
4. Ledger keeps captain state separate from lane state
The ledger must keep four locks separate:
ledger_locks_required:
slot_lock:
source_slot: <slot_or_operation_id>
slot_family: <family>
future_route_risk_if_explicitly_unworked: blocked | costlier | narrowed | blackout_risk | recovery_only | equivalent
lane_lock:
selected_lane: runner
lane_state_before: thin
unselected_board: scope_only
refusal_risk_before: none | low | armed | live | defaulted
blackout_risk_before: none | low | armed | live
captain_lock:
du_mian_state_before: <state>
warning_scope: <scope>
trust_or_pressure_state: trusted | neutral | pressured | suppressed | hostile | missed
reader_lock:
harmed_reader_if_suppressed: <reader>
future_reader: <reader>
state_if_silenced_or_absent: suppressed_floor_voice | hostile_call_sheet_leak | crew_refusal_default | blackout_skeleton_default | route_recovery_only | equivalentThe lens fails if captain state is overwritten by lane state or if her warning disappears after the lane resolves.
5. Reassignment has full slots
Call Sheet Reassignment must require all eleven exact assignments:
assignment_required:
ledger: card.call_sheet_load_ledger
source_slot: storyteller.card.call_sheet_memorial_correction_source_slot.v1
selected_lane: storyteller.card.call_sheet_runner_lane_input.v1
lane_state_before: storyteller.card.call_sheet_runner_thin_state.v1
call_sheet_captain_or_absence: card.du_mian_call_sheet_captain
handler_or_absence: storyteller.card.call_sheet_production_desk_handler.v1
support_or_absence: storyteller.card.call_sheet_branch_cost_surface.v1
response: storyteller.card.call_sheet_selected_response.v1
selected_option: rest_rotate | pay_overtime | recruit_captain | publicize_safety | management_proxy | force_skeleton | silence_warning | accept_absence
unselected_lane_or_absence: storyteller.card.call_sheet_board_lane_unselected.v1
unselected_board_semantics: scope_only
harmed_reader_if_suppressed: storyteller.card.call_sheet_harmed_floor_reader.v1
future_reader: storyteller.card.call_sheet_future_slot_reader.v1Generic choices such as listen to her, pay staff, call legal, run the show, or mark safe fail unless these slots are present.
6. Branches diverge by person-state
A satisfying implementation must expose these branch families or block unavailable families with state reasons:
recruit_captain;neutral_rotation;pay_overtime;publicize_safety;management_proxy;force_skeleton;silence_warning;accept_absence.
Branches must differ by 杜眠 state, selected lane state, slot state, harmed reader state, counter deltas, and future route effect.
Branch assertions
branch_assertions:
recruit_captain:
du_mian_state_after: floor_crew_advocate
relief_any: [crew_refusal_risk_visible, blackout_risk_down, future_floor_truth_available]
cost_any: [management_deniability_down, inspection_heat_up, schedule_pressure_up]
future_effect_any: [safer_route_unlocked_with_cost]
neutral_rotation:
du_mian_state_after: neutral_call_sheet_captain
selected_runner_lane_after: rested | rotated | narrowed
unselected_board_after: scope_only
relief_any: [crew_refusal_risk_down, blackout_risk_down]
cost_any: [schedule_pressure_up, overtime_debt_up, other_lane_load_up]
future_effect_any: [future_slot_costlier_not_hostile]
pay_overtime:
du_mian_state_after: neutral_call_sheet_captain | floor_crew_advocate
relief_any: [slot_cancellation_risk_down, broadcast_reliability_up]
cost_any: [overtime_debt_up, payroll_pressure_up, staff_fatigue_up, sponsor_capture_up]
future_effect_any: [debt_due, future_refusal_risk]
publicize_safety:
du_mian_state_after: public_safety_witness
relief_any: [crew_trust_up, public_safety_legitimacy_up]
cost_any: [inspection_heat_up, sponsor_stop_loss_pressure_up, public_exposure_up]
future_effect_any: [public_only, lawful_only, costlier]
management_proxy:
du_mian_state_after: management_pressure_proxy
relief_any: [immediate_slot_dispute_down, sponsor_or_schedule_pressure_down]
cost_any: [crew_trust_down, false_safety_armed, public_distrust_up]
future_effect_any: [captured_by_management_or_sponsor]
force_skeleton:
du_mian_state_after: blackout_skeleton_lead
relief_any: [immediate_schedule_pressure_down]
cost_any: [skeleton_crew_scar_up, blackout_risk_up, staff_fatigue_up]
future_effect: recovery_only
silence_warning:
du_mian_state_after: suppressed_floor_voice
relief_any: [immediate_slot_dispute_down]
cost_any: [crew_trust_down, hostile_call_sheet_leak_up, inspection_heat_armed]
future_effect_any: [default_ready, hostile, recovery_only]
accept_absence:
emitted_event: event.crew_refusal_default
exact_default_pairs:
- crew_refusal / slot_delayed
- sponsor_schedule / blackout_skeleton_default
- hostile_leak / public_safety_leak
- absent_captain / slot_blocked
du_mian_state_after_any: [public_safety_witness, blackout_skeleton_lead, hostile_call_sheet_leak, missed_by_clean_ruling]
selected_runner_lane_after: defaulted
unselected_board_after: scope_only
cost_any: [crew_refusal_live, blackout_skeleton_default, public_safety_leak, route_recovery_only]
future_effect_any: [blocked, costlier, hostile, recovery_only]Every constructive branch must have relief, cost, and future mutation.
7. Default event is durable
Crew Refusal Default arms only after the explicit silence_warning or accept_absence choice writes all three pending flags. Merely leaving the quick rite unassigned does not fire an event in the current engine. Hidden ledgers, absent lanes, and false management safety remain narrative risks until one of those explicit default branches is selected.
Required default record:
default_required:
event: event.crew_refusal_default
source_slot: slot.live.memorial_correction_floor_01
selected_lane: runner
unselected_board: scope_only
du_mian_arming_state: suppressed_floor_voice | missed_by_clean_ruling
arming_choice: silence_warning | accept_absence
default_actor: crew_refusal | sponsor_schedule | hostile_leak | absent_captain
default_state: slot_delayed | blackout_skeleton_default | public_safety_leak | slot_blocked
harmed_reader: crew_lane_and_public_safety
future_route_effect: costlier | recovery_only | hostile
counter_deltas_min: 3The default fails if it changes only mood, money, generic staffing, generic reputation, or hidden relationship value.
No universal safe call sheet
No branch may make one captain state satisfy every schedule, sponsor, archive, public, crew, route-asset, legal, and broadcast-reality reader cleanly.
no_universal_safe_call_sheet:
official_claim_visible: true
real_floor_contradiction_visible: true
actual_du_mian_card_and_post_choice_state_visible: true
harmed_reader_if_suppressed_visible: true
at_least_one_reader_narrowed_or_costed: true
future_reader_effect_not_clean_universal: trueReplay evidence shape
lens_id: storyteller.lens.character.du_mian_call_sheet_captain.v1
session_id: lens-du-mian-call-sheet-captain-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
trigger_kind: state_pressure
source_slot_or_operation_present: true
pressured_crew_lane_present: true
official_call_sheet_claim_visible: true
real_floor_contradiction_visible: true
du_mian_card_and_person_state_visible: true
harmed_reader_if_suppressed_visible: true
future_slot_or_route_reads_floor_state: true
no_fixed_turn_trigger: true
offered:
npc_card: card.du_mian_call_sheet_captain
card: card.call_sheet_load_ledger
rite: rite.call_sheet_reassignment
branch_result:
selected_posture: recruit_captain | neutral_rotation | pay_overtime | publicize_safety | management_proxy | force_skeleton | silence_warning | accept_absence
du_mian_state_after: <state>
selected_runner_lane_after: <state>
unselected_board_after: scope_only
slot_state_after: <state>
future_reader_effect: <effect>
counter_deltas:
relief: []
cost: []
future: []
default_branch:
event_seen_or_armed: event.crew_refusal_default
accepted_absence_is_branch_state_not_input: true
default_actor: crew_refusal | sponsor_schedule | hostile_leak | absent_captain
default_state: slot_delayed | blackout_skeleton_default | public_safety_leak | slot_blocked
assertions:
- primary_links_exist
- entry_is_state_triggered
- official_claim_and_real_floor_contradiction_visible
- actual_du_mian_card_and_person_state_visible
- ledger_locks_separate
- all_eleven_exact_assignment_slots_present
- branch_outcomes_diverge
- every_success_has_relief_cost_and_future_effect
- suppression_proxy_miss_hostile_are_durable
- default_event_is_durable
- no_universal_safe_call_sheet
- no_generic_affinity_staff_count_or_dialogue_only_resolution
- no_fixed_turn_day_phase_raw_staff_dashboard_or_lens_health_triggerProgress metric
duMianCallSheetCaptainProgress = 0..10: floor pressure visible, official claim visible, contradiction visible, 杜眠 state visible, ledger locks separate, reassignment offered, constructive branches diverge, suppression/default mutates future play, future reader consumes her person-state, and replay proves recruit/miss/hostile/captured outcomes without universal safe call sheet.
Non-goals
- Not a generic crew morale check.
- Not a fixed-turn recruitment scene.
- Not a staff-count dashboard.
- Not a free mitigation button.
- Not another live-floor mechanism; this is the character lens for the captain inside that mechanism.
- Not valid if 杜眠’s state is only dialogue, affinity, or a one-time safety modifier.