Answerability Seat Assignment Lens / 应责席指派 Lens

This lens observes whether 应责席指派线 and 应责席指派机制 correctly make post-success accountability targetable.

A passing implementation proves that proof, public contrition, legal conversion, operator consensus, management metric, or route-asset rescue is not clean until the game records who remains answerable to the next reader, or records the empty seat as a durable fact.

The lens fails if accountability is only flavor, if a proxy cleans every future route, if a low-rank worker can be scapegoated with no state change, if 阮停 cannot be recruited/missed/hostile, or if eligibility depends on a fixed turn count.

This lens observes:

It is observed through:

Observable promise

When a prior resolution becomes usable, the game must ask who remains reachable by the next counterclaim.

Valid answerability outcomes include:

  • producer or management seat;
  • artist or harmed performer seat;
  • sponsor or sponsor proxy seat;
  • inspector or lawful body seat;
  • protected worker/operator seat;
  • public delegate seat;
  • split seat by reader;
  • preserved empty seat;
  • false-clean default with proxy capture, worker scapegoat, public scar, or recovery-only consequence.

These outcomes must not collapse. A sponsor proxy, lawful body, worker seat, artist seat, public delegate, and empty chair cannot all satisfy the same future route.

Must pass

1. Entry is state-triggered

Required evidence:

entry_state:
  trigger_kind: state_pressure
  source_resolution_id: <id>
  source_resolution_present: true
  source_resolution_has_future_reader: true
  unresolved_harm_or_obligation_present: true
  proposed_or_missing_answerable_body_visible: true
  future_route_or_reader_can_change: true
  at_least_one_candidate_or_explicit_absence: true
  no_fixed_turn_trigger: true

The lens fails if entry uses fixed numbered turn, day/week interval, chapter quota, raw page/card count, relationship threshold without future reader, dashboard state, or lens-health state.

2. Source resolution and future reader are named

The replay must name the prior success and the next reader that wants to consume it.

source_resolution:
  source_surface: public_contrition | proof_burden | management_metric | broadcast_legality | operator_conclave | route_asset | equivalent
  relief_or_success_recorded: <state>
  leftover_obligation: <obligation>
  future_reader_or_route: <reader_or_route_id>

The lens fails if the surface only says someone should answer or accountability pressure rises without a future reader.

3. Docket records candidates, proxy, absence, and future cost

应责席案卷 or equivalent must record candidate seats, proposed holder, proxy or explicit absence, proof anchor, refusal/coercion state, blocked future choices, and default risk.

Required row shape:

docket:
  card: storyteller.card.answerability_seat_docket.v1
  candidate_seats_min_or_explicit_absence: 1
  proposed_seat_holder: <holder_or_empty>
  proxy_or_absence: <proxy_or_absence>
  proof_anchor_or_absence: <anchor_or_absence>
  refusal_or_coercion_state: none | refused | coerced | absent | proxy_sent | cropped_out
  blocked_or_costlier_future_choices_min: 1
  default_risk_any:
    - empty_seat_default
    - proxy_capture
    - worker_scapegoat
    - false_clean_answerability

4. Rite is assignable

应责席指派 or equivalent must require concrete slots:

assigned_slots:
  docket: storyteller.card.answerability_seat_docket.v1
  source_resolution_id: <id>
  future_reader_or_route: <reader_or_route_id>
  proposed_seat_holder: producer | artist | sponsor | inspector | worker | public_delegate | editor | archive | proxy | empty_seat
  candidate_actor_or_absence: <actor_id | explicit_absence>
  proxy_or_absence: <proxy_id | explicit_absence>
  proof_anchor_or_absence: <anchor | explicit_absence>
  handler_or_absence: ruan_ting | shen_luo | han_yanshuang | baiya | yu_lan | production | public_witness | inspector | sponsor | none
  seat_cost_accepted_or_absence: <cost | explicit_absence>

The lens fails if a famous handler, sponsor payment, legal seal, or public apology fills the seat without naming holder, proxy/absence, cost, and future reader.

5. Branches diverge

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

  • producer/management seat;
  • artist/harmed performer seat;
  • sponsor/proxy seat;
  • inspector/lawful body seat;
  • worker/operator seat;
  • public delegate seat;
  • split seat;
  • empty seat preserved;
  • false-clean/default.

Each branch must differ by seat state, cost surface, future reader acceptance, and failure/default risk.

6. 阮停 has recruit / miss / hostile states

Empty-Seat Usher must have at least three reachable states:

ruan_ting_state_after_any:
  - encountered
  - recruited_empty_seat_usher
  - missed
  - hostile_empty_seat_witness

The lens fails if she is only a lore NPC, if she is always recruited, if ignoring her has no durable effect, or if coercing her creates no hostile witness pressure.

7. Success has relief, cost, and future effect

Every successful branch must mutate at least three surfaces:

counter_deltas:
  relief: [<at_least_one>]
  cost: [<at_least_one>]
  future: [<at_least_one>]

Expected surfaces:

  • answerability_clarity;
  • empty_seat_risk;
  • false_answerability_clean;
  • producer_license_pressure;
  • management_pressure;
  • public_receipt_legitimacy;
  • public_receipt_distrust;
  • sponsor_stop_loss_pressure;
  • contract_capture;
  • inspection_heat;
  • bureau_favor_debt;
  • artist_trust;
  • artist_boundary_risk;
  • worker_exposure;
  • worker_scapegoat_risk;
  • protected_witness_payroll_due;
  • route_asset_integrity;
  • seat_split_debt;
  • future_counterclaim_cost;
  • recovery_only_pressure.

8. Empty-seat default mutates future play

Hidden, missing, falsely proxied, or coerced seats are reasons to select the explicit suppress/default posture. In the executable contract, 应责空席默认 is armed only by a fully assigned choice 9; missing input or expiry never arms it.

Required event evidence:

default_event:
  event: storyteller.event.empty_answerability_seat_default.v1
  source_resolution_id: <id>
  future_reader_or_route: <reader_or_route_id>
  missing_or_corrupted_field: <field>
  default_filer: sponsor | management | inspector | archive | public_absence | schedule_board | proxy | worker_scapegoat | route_claimant | equivalent
  false_clean_claim: <claim>
  beneficiary_of_empty_seat: <actor_or_surface>
  harmed_or_displaced_reader: <reader_or_explicit_absence>
  seat_state_after_any:
    - sponsor_proxy_capture
    - false_clean_answerability
    - lawful_only_body_default
    - worker_scapegoat
    - empty_seat_public_scar
    - recovery_only_answerability
  route_effect_after: blocked | costlier | sponsor_only | lawful_only | archive_only | hostile | correction_required | recovery_only

The lens fails if default only changes dialogue, reputation, or budget.

9. No universal clean proxy

The implementation must reject any branch where one proxy, one legal body, one sponsor adjuster, one worker, one public delegate, or one empty chair satisfies all future public, lawful, sponsor, artist, worker, archive, management, and route-asset readers without split or cost.

Allowed shortcut outcomes:

  • proxy capture;
  • public distrust;
  • lawful-only route;
  • sponsor-only route;
  • worker scapegoat;
  • public scar;
  • split answerability;
  • recovery-only route.

10. Replay provenance exists

Passing evidence must include seed/session id, all thirteen exact assignments, branch result, 阮停 state, counter deltas, and future route effect. The destructive replay must also include the exact default event action. State-pressure entry is proved by runtime metadata and the focused test, because the CLI evidence sessions begin from the full Storyteller hand.

Replay evidence expectation

lens_id: storyteller.lens.answerability_seat_assignment.v1
shared_replay_lens_id: storyteller-lens-character-ruan-ting-empty-seat-usher-v1
session_id: lens-storyteller-lens-character-ruan-ting-empty-seat-usher-v1-<timestamp>
seed: <deterministic-seed>
metadata_contract:
  trigger_kind: state_pressure
  source_resolution_id: <id>
  source_resolution_present: true
  source_resolution_has_future_reader: true
  unresolved_harm_or_obligation_present: true
  proposed_or_missing_answerable_body_visible: true
  future_route_or_reader_can_change: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.answerability_seat_docket.v1
  rite: storyteller.rite.answerability_seat_assignment.v1
  character: storyteller.character.ruan_ting_empty_seat_usher.v1
branch_result:
  selected_posture: protect_recruit_usher | seat_producer_management | seat_artist_with_boundary | accept_sponsor_proxy_with_receipt | seat_inspector_lawful_body | guard_worker_from_scapegoat | publicize_absence | split_answerability | preserve_empty_seat | suppress_or_default
  selected_seat_holder: <holder_or_empty>
  proxy_or_absence: <proxy_or_absence>
  proof_anchor_or_absence: <anchor_or_absence>
  seat_state_after: <state>
  ruan_ting_state_after: encountered | recruited_empty_seat_usher | missed | hostile_empty_seat_witness | not_present
  event_seen_or_armed: storyteller.event.empty_answerability_seat_default.v1 | not_armed
  future_reader_or_route_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []
assertions:
  - primary_links_exist
  - entry_is_state_triggered
  - source_resolution_and_future_reader_named
  - answerable_body_or_empty_seat_visible
  - docket_records_candidates_proxy_absence_and_future_cost
  - rite_requires_assignment_slots
  - branch_families_diverge
  - ruan_ting_has_recruit_miss_hostile_states
  - success_has_relief_cost_and_future_effect
  - empty_seat_default_mutates_future_play
  - no_universal_clean_proxy
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Progress metric

answerabilitySeatAssignmentProgress = 0..10:

  • 0: no answerability seat surface exists.
  • 1: source resolution and future reader are visible.
  • 2: candidate or explicit empty seat is visible.
  • 3: docket records proposed holder, proxy/absence, proof anchor, blocked future choice, and default risk.
  • 4: rite can be assigned with concrete slots.
  • 5: at least six branch families are offered or explicitly blocked.
  • 6: selected branch mutates relief, cost, and future route effect.
  • 7: 阮停 can be encountered and at least one recruit/miss/hostile path is reachable.
  • 8: false-clean/proxy/worker-scapegoat shortcut fires or arms default.
  • 9: future route or reader acceptance changes durably.
  • 10: replay evidence includes seed/session/source/future reader/docket/assignment/branch/阮停 state/default/counter deltas and no fixed trigger.

Runtime evidence

The lens now observes exact executable evidence rather than prose presence:

  • thirteen exact in-hand assignments, ten ordered rite choices, and five executable default terminals;
  • source/public rollup parity for all fourteen cards, the rite, and the event;
  • lens/replays/ruan-ting-empty-seat-usher.recruit.replay.json for choice 0 recruitment;
  • lens/replays/ruan-ting-empty-seat-usher.hostile-default.replay.json for choice 9 into default option 3;
  • lens/storyteller-ruan-ting-empty-seat-usher.runtime.test.ts for rejection, reachability, exclusivity, pending cleanup, and replay reexecution.

This evidence instantiates one fixed public-contrition row (public_contrition.receipt.17public_counterclaim). The broader source/reader schema remains a design envelope until additional rows are materialized.

The replays carry source: storyteller, normalized character-lens provenance, durable session evidence, and verified SHA-256 integrity.

Non-goals

  • Not governance.
  • Not count padding.
  • Not a generic apology, guilt, or reputation lens.
  • Not proof-burden reassignment.
  • Not management metric compression.
  • Not a clean proxy selector.
  • Not fixed-turn content.