Wardrobe Evidence Custody Lens / 演出服证物羁押 Lens

This lens observes whether 演出服证物羁押线 correctly prevents a worn object from becoming clean costume, body proof, sponsor image, safety repair, public relic, and recovery collateral at the same time.

A passing implementation proves that the garment row names the wearer or claimed wearer, trace state, custodian, requested use, harmed reader, proof anchor, repair/contamination state, selected posture, and future route effect. It fails if clothing is cosmetic inventory or if a sponsor logo, sanitized patch, or public relic silently proves body presence.

This lens is state-triggered. It must not depend on a fixed numbered turn.

This lens observes:

It is observed through:

Observable promise

Whenever a future route consumes a worn object, the game must answer:

What garment is being used, who wore it or is claimed to have worn it, what trace does it carry, who holds custody, who is harmed, what use is selected, and what future reader or route changes after the choice?

The lens fails if the garment becomes a clean proof object by being visible on screen.

Must pass

1. Entry is state-triggered by garment claim pressure

Required evidence:

entry_state:
  trigger_kind: state_pressure
  garment_asset_present_or_explicit_absence: true
  requested_use_present: true
  wearer_or_claimed_wearer_visible_or_explicit_absence: true
  trace_state_visible_or_explicit_absence: true
  custody_holder_visible_or_explicit_absence: true
  future_reader_or_route_consumes_garment: true
  harmed_reader_or_claimant_visible_or_explicit_absence: true
  player_can_preserve_return_recut_repair_relic_collateralize_split_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_wardrobe_count_trigger: true
  no_raw_card_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry depends on fixed turn number, day/week interval, chapter quota, raw wardrobe count, raw content count, dashboard state, lens health, or generic inventory phase.

2. Docket state is visible

Wardrobe Evidence Docket or equivalent must record:

wardrobe_evidence_row:
  garment_id_or_absence: <wardrobe asset prop cloth uniform ribbon or explicit_absence>
  wearer_or_claimed_wearer: <artist witness double avatar crowd delegate or explicit_absence>
  body_trace_state: clean | blood | burn | oxygen_tag | sweat | repair_stitch | voice_sync_marker | sponsor_logo | memorial_trace | counterfeit | explicit_absence
  custody_holder: artist | wardrobe_desk | sponsor | archive | inspector | editor | fan_public | safety_crew | producer | claimant | explicit_absence
  requested_use: preserve_as_evidence | return_to_wearer | sponsor_recut | safety_repair_reuse | public_relic | recovery_collateral | split_custody | ignore
  harmed_reader_or_claimant: <reader claimant route or explicit_absence>
  proof_anchor_or_absence: <body voice scene camera receipt witness or explicit_absence>
  contamination_or_repair_state: intact | contaminated | sanitized | patched | cut_down | double_pledged | missing | explicit_absence
  future_route_effect: accepted_with_scar | lawful_only | sponsor_only | safety_only | public_only | costlier | blocked | recovery_only

The lens fails if the implementation records only costume, logo, damaged, returned, or inventory item.

3. Assignment slots are explicit

演出服证物分诊 or equivalent must require:

assignment_required:
  rite: storyteller.rite.wardrobe_evidence_triage.v1
  docket: storyteller.card.wardrobe_evidence_docket.v1
  garment_id_or_absence: <wardrobe asset or explicit_absence>
  wearer_or_claimed_wearer: <artist witness double avatar crowd delegate or explicit_absence>
  body_trace_state: <trace state>
  current_custody_holder: <holder or explicit_absence>
  requested_use: preserve_as_evidence | return_to_wearer | sponsor_recut | safety_repair_reuse | public_relic | recovery_collateral | split_custody | ignore
  handler_or_absence: <handler or explicit_absence>
  proof_anchor_or_absence: <proof anchor or explicit_absence>
  harmed_reader_or_claimant_or_absence: <reader claimant or explicit_absence>
  contamination_or_repair_state: <state or explicit_absence>
  selected_posture: preserve_trace | return_with_receipt | sponsor_recut | safety_repair | public_relic | collateralize | split_custody | accept_default

The lens fails if sponsor money, inspector seal, editor checksum, artist consent, or producer authority resolves the garment without these slots.

4. Branch postures diverge

A valid implementation must offer or state-block these branch families:

  • preserve_trace;
  • return_with_receipt;
  • sponsor_recut;
  • safety_repair;
  • public_relic;
  • collateralize;
  • split_custody;
  • accept_default.

Branches must differ by state after, privileged reader, harmed reader treatment, counter deltas, and future route effect.

5. Branch assertions

Preserve trace assertion

selected_posture: preserve_trace
state_after: evidence_preserved_wearer_absent
relief_any: [body_presence_clarity_up, archive_fraud_down, inspection_proof_up]
cost_any: [artist_trust_down, stage_readiness_down, sponsor_stop_loss_pressure_up]
future_effect_any: [lawful_only, accepted_with_scar, wearer_route_costlier]
forbidden: [preserve_as_free_inventory]

Return with receipt assertion

selected_posture: return_with_receipt
state_after: wearer_protected_proof_narrowed
relief_any: [artist_trust_up, consent_integrity_up]
cost_any: [proof_availability_down, public_receipt_distrust_up, sponsor_pressure_up]
future_effect_any: [private_body_route_opened, public_proof_costlier]
forbidden: [return_erases_trace]
selected_posture: sponsor_recut
state_after: sponsor_surface_captured
relief_any: [sponsor_stop_loss_pressure_down, schedule_pressure_down]
cost_any: [contract_capture_up, body_presence_confusion_up, public_receipt_distrust_up]
future_effect_any: [sponsor_only, consent_hearing_required, counterclaim_armed]
forbidden: [logo_as_body_proof]

Safety repair assertion

selected_posture: safety_repair
state_after: safety_repair_erases_trace
relief_any: [live_floor_safety_up, egress_pressure_down, crew_load_down]
cost_any: [evidence_trace_down, archive_fraud_risk_up, future_recovery_cost_up]
future_effect_any: [safety_only, proof_bridge_required, recovery_only]
forbidden: [sanitized_trace_as_clean_proof]

Public relic assertion

selected_posture: public_relic
state_after: public_relic_contested
relief_any: [public_receipt_legitimacy_up, memorial_trace_visibility_up]
cost_any: [sponsor_pressure_up, artist_privacy_pressure_up, inspection_heat_up]
future_effect_any: [public_only, lawful_objection_armed, memorial_afteruse_costlier]
forbidden: [relic_as_uncontested_truth]

Collateralize assertion

selected_posture: collateralize
state_after: recovery_collateral_posted
relief_any: [recovery_route_kept_open, liability_cover_up]
cost_any: [garment_availability_down, double_pledge_risk_up, claimant_hostility_up]
future_effect_any: [collateral_call_armed, costlier, recovery_only]
forbidden: [collateral_as_discharge]

Split custody assertion

selected_posture: split_custody
state_after: split_custody_tagged
relief_any: [two_routes_remain_open, false_clean_body_down]
cost_any: [custody_ambiguity_up, handler_burden_up, double_claim_risk_up]
future_effect_any: [dual_reader_required, future_hearing_required]
forbidden: [split_as_universal_acceptance]

Default assertion

selected_posture: accept_default
state_after: unlogged_reuse_default
event_seen_or_armed: storyteller.event.wardrobe_evidence_default.v1
relief_any: [immediate_slot_burden_down]
cost_any: [counterfeit_body_claim_up, archive_fraud_up, future_recovery_cost_up]
future_effect_any: [blocked, sponsor_only, lawful_only, recovery_only, proof_rebuild_required]
forbidden: [default_as_warning_only]

6. Every constructive branch has relief, cost, and future effect

Every non-default branch must satisfy:

counter_contract:
  relief_min: 1
  cost_min: 1
  future_reader_or_route_effect_min: 1
  trace_or_custody_state_changes: true

The lens fails if a branch only changes item ownership, costume appearance, or immediate UI state.

7. Default event is durable

演出服证物默认 must fire or be armed when the future route consumes a garment without complete custody state, when a false claim is made about the garment, or when repair/sanitization/reuse deletes trace but later claims proof.

default_required:
  event: storyteller.event.wardrobe_evidence_default.v1
  garment_id_or_absence: <wardrobe asset or explicit_absence>
  claimed_wearer_or_absence: <wearer or explicit_absence>
  trace_state_before_or_absence: <trace state or explicit_absence>
  default_actor: sponsor | archive | inspector | editor | wardrobe_desk | safety_crew | fan_public | producer_absence | claimant | equivalent
  false_claim: logo_proves_body | sanitized_means_clean | returned_means_uncontested | relic_means_public_truth | collateral_means_discharged | repair_erases_trace | missing_garment_was_never_proof | equivalent
  harmed_reader_or_claimant: <reader claimant route or explicit_absence>
  state_after: counterfeit_body_claim | sponsor_surface_captured | safety_only_trace_loss | public_relic_contested | proof_chain_broken | collateral_call_armed | recovery_only_garment
  future_route_effect: blocked | costlier | lawful_only | sponsor_only | public_only | proof_rebuild_required | collateral_call_required | recovery_only
  counter_deltas_min: 3

The default fails if it changes only notification, flavor, mood, cosmetic state, or generic reputation.

8. Downstream reader consumes wardrobe state

At least one downstream reader or route must read the resulting garment state:

downstream_consumption_required:
  reader_or_route_any:
    - body_voice_custody_reader
    - sponsor_makegood_reader
    - live_floor_safety_reader
    - memorial_rights_reader
    - recovery_indemnity_reader
    - voice_substitution_reader
    - archive_or_inspector_reader
    - public_receipt_reader
  reads_state_after: true
  respects_future_route_effect: true

The lens fails if the garment state is written but never changes later choices.

Replay evidence shape

lens_id: storyteller.lens.wardrobe_evidence_custody.v1
session_id: lens-wardrobe-evidence-custody-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  garment_asset_present_or_explicit_absence: true
  requested_use_present: true
  wearer_or_claimed_wearer_visible_or_explicit_absence: true
  trace_state_visible_or_explicit_absence: true
  custody_holder_visible_or_explicit_absence: true
  harmed_reader_or_claimant_visible_or_explicit_absence: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.wardrobe_evidence_docket.v1
  rite: storyteller.rite.wardrobe_evidence_triage.v1
branches:
  preserve_trace:
    state_after: evidence_preserved_wearer_absent
    future_route_effect: lawful_only
    deltas:
      body_presence_clarity: +1
      sponsor_stop_loss_pressure: +1
  sponsor_recut:
    state_after: sponsor_surface_captured
    future_route_effect: sponsor_only
    deltas:
      sponsor_stop_loss_pressure: -1
      contract_capture: +1
  safety_repair:
    state_after: safety_repair_erases_trace
    future_route_effect: safety_only
    deltas:
      live_floor_safety: +1
      evidence_trace: -1
  default:
    event_seen_or_armed: storyteller.event.wardrobe_evidence_default.v1
    state_after: counterfeit_body_claim
    future_route_effect: proof_rebuild_required
assertions:
  - primary_links_exist
  - entry_is_state_triggered_by_garment_claim_pressure
  - garment_wearer_trace_custody_requested_use_harmed_reader_and_future_effect_are_visible
  - triage_assignment_slots_are_explicit
  - branch_postures_diverge
  - every_constructive_branch_has_relief_cost_and_future_effect
  - default_event_is_durable
  - downstream_reader_consumes_wardrobe_state
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Progress metric

Progress is branch coverage and state distinction, not content count.

  • 20%: garment row exposes wearer, trace, custodian, requested use, harmed reader, and future effect.
  • 40%: triage assignment slots can be filled or explicitly absent.
  • 60%: at least three constructive branches diverge by state after and future reader.
  • 80%: default event mutates proof, sponsor, safety, relic, or collateral state.
  • 100%: downstream route consumes wardrobe state with replay seed, assignments, outcomes, durable state, and counter deltas.

Non-goals

  • Not fashion lore.
  • Not cosmetic item durability.
  • Not raw prop inventory.
  • Not a fixed wardrobe phase.
  • Not satisfied by prose alone; proof must come from branch state and replay evidence.