Audience-Jury Seat Map Annotation Afteruse Receipt Mechanic / 观众陪审座位图批注后用回执机制

This mechanism separates three facts that the sponsor recap wants to collapse:

  1. a patron was physically present in or moved through a seat block;
  2. an usher marked that movement on a floorplan;
  3. the patron consented to broadcast, archive, sponsor, or future-route use.

Only the first two can be inferred from Jao Min’s annotation.

Gate contract

The mechanism is armed by seat_audience_jury, but it cannot open until the public trial is complete and the real Jao Min evidence survives.

gate:
  pending_flag: seat_map_annotation.afteruse_pending
  required_flags:
    - complete_storyteller-rite-10-public-trial
    - chapter_one_trial_format.audience_jury
    - st_scale_06_jury_nonattendance_usher.disposition_recorded
  required_cards:
    - card-storyteller-st-scale-06-jury-room-floorplan
    - card-storyteller-st-scale-06-custody-usher-badge
    - storyteller.card.st_scale_06_jury_nonattendance_docket.v1
    - storyteller.card.chapter_two_future_reader.v1
  opens_event: storyteller.event.seat_map_annotation_afteruse_claim.v1

This makes the packet missable without ever treating absence as consent.

Docket contract

The docket must separate the source floorplan, marked rows, original house context, Jao Min or explicit absence, protected displaced-patron row, requested afteruse, current sponsor/editor reader, harmed-patron row, proof docket, selected posture, state after, future reader effect, and counter deltas.

The source docketRows entry stays branch-neutral (pending_entry_option) until review. Seven branchRows then bind each posture to its own after-state, future-reader effect, result code/flag, and exact counter deltas; a default replay therefore cannot carry the certify row by accident.

universalCleanSeatConsent must remain false in the docket, every branch, and both events.

Exact rite contract

The review has ten required slots. Runtime must enable:

enforcement:
  enforceExactSlotAccepts: true
  requiresAssignedCardsInHand: true
  requiresSelectedOption: true
  enforceSelectedOptionRequirements: true
  selected_option_requires_matching_posture_card: true

The seven posture cards are distinct. Selecting choice 4 with the choice-1 posture card must fail even though both are valid evidence cards.

Result-code contract

result_codes:
  1: certify_seat_map_scope
  2: restrict_annotation_reader
  3: attach_usher_bridge
  4: split_house_flow_from_broadcast_consent
  5: publish_displaced_patron_notice
  6: quarantine_seat_map_afteruse
  7: false_seat_map_default

Every option unsets the other six result flags before setting its own. A successful resolution must therefore expose exactly one result flag and the matching seatMapAnnotationResultCode.

Default contract

Choice 7 arms storyteller.event.false_seat_map_annotation_default.v1. The event must use a condition-driven trigger and one resolvable option. Its durable payload records the source floorplan, overbroad consent inference, capturing sponsor/editor reader, protected displaced-patron row, false_clean_default state, recovery_only future effect, and at least three counter deltas.

Top-level event effects or unsupported flag-trigger syntax do not satisfy the mechanism.

Counter surface

Constructive branches mutate progress plus at least two of: patron trust, sponsor capture, editor heat, usher exposure, public proof pressure, continuity liability, archive custody debt, public trust, sponsor heat, and future route cost.

The false event mutates progress, false consent, patron trust, sponsor capture, continuity liability, archive debt, and future route cost.

Non-goals

  • Not metadata-only branch reachability.
  • Not an always-available starter-card rite.
  • Not a generic seat-map or sightline dispute.
  • Not a replacement for Jao Min’s recruitment/missability storyline.
  • Never grants universal audience consent or platform authority.