Audience Grievance Merge Register / 观众申诉并案登记

Audience Grievance Merge Register is the in-world card for the moment when many audience, fan, claimant, witness, caption, oxygen, access, or public-receipt complaints appear to describe the same crisis but do not carry the same harm.

It prevents two opposite failures:

  • treating every complaint as a separate queue item until management pressure becomes raw-count noise;
  • merging complaints into one clean incident and erasing minority harm, excluded fans, alternate proof, or a hostile future reader.

The card is not a support-ticket UI. It is a playable route object: a merge decision can open relief, create backlash, arm a counterreceipt, change audience stability, or make a future branch lawful-only, public-only, sponsor-only, hostile, or recovery-only.

Fixed executable row

The runtime-backed v1 card is a fixed Storyteller row, not a generic row builder:

fixed_register_row:
  register_id: audience.merge.blackout.09
  source_surface: crisis_ledger
  incident_key_or_absence: blackout.incident.09
  candidate_cohorts:
    - cohort_id: caption_access_row_09
      cohort_surface: caption_user
      grievance_claim: caption_layer_erased_the_live_egress_instruction
      harm_type: miscaption
      proof_carrier_or_absence: caption_log_09
      represented_count_posture: named_scope
    - cohort_id: fan_oxygen_row_09
      cohort_surface: oxygen_holder
      grievance_claim: stability_patch_consumed_the_promised_oxygen_allocation
      harm_type: oxygen_loss
      proof_carrier_or_absence: oxygen_row_09
      represented_count_posture: batch_scope
  clean_merge_beneficiary: stability_table
  harmed_if_merged_cleanly: caption_user
  future_reader_or_route: public_contrition
  future_route_effect: public_addendum_required
  default_risk: proof_carrier_contamination

The broader schema and accepted-value lists below are the future design envelope. Only the fixed row above is currently runtime-proven.

game-content/storyteller/cards/audience-grievance-merge-register-runtime.json5 contains ten cards: nine starter assignments and one scarred output. The nine exact assignments are registerstoryteller.card.audience_grievance_merge_register.v1, source_surfacestoryteller.card.audience_grievance_source_surface.v1, incident_keystoryteller.card.audience_grievance_incident_key.v1, cohort_onestoryteller.card.audience_grievance_caption_cohort_row.v1, cohort_twostoryteller.card.audience_grievance_oxygen_cohort_row.v1, beneficiarystoryteller.card.audience_grievance_clean_merge_beneficiary.v1, harmed_readerstoryteller.card.audience_grievance_harmed_reader.v1, future_readerstoryteller.card.audience_grievance_future_reader.v1, and handlerstoryteller.card.audience_grievance_merge_handler.v1. The default-only output is storyteller.card.overmerged_grievance_counterreceipt.v1.

The rite offers exactly eight explicit choices: indexes 0..7 are merge_as_one_scoped, split_by_harm, split_by_reader, representative_lead, reject_duplicate_with_scar, publish_conflict, quarantine_proof, and default_clean_merge. Only choice 7 arms default. Missing, substituted, off-hand, choiceless, and repeated reviews fail without arming it. The armed event resolves through exactly five terminals: false_duplicate_denial, universal_representative_closure, public_apology_overreach, proof_carrier_contamination, or broadcast_reality_false_closure.

Card promise

When the producer is asked to merge, split, reject, or publish audience grievances, the register records:

  • source crisis, receipt, ledger row, queue, or explicit absence;
  • grievance cohort ids and claimant surfaces;
  • alleged same incident and disputed harm type;
  • proof carrier for each cohort;
  • who benefits if the grievances are merged cleanly;
  • who is harmed if they are merged out;
  • which future route, apology, correction, oxygen row, access row, or counterreceipt will consume the merge state.

The card fails if it records only duplicate, same issue, handled, spam, merged ticket, low priority, or public sentiment without route consequences.

Required fields

audience_grievance_merge_register:
  register_id: <stable id>
  source_surface: crisis_ledger | claimant_floor | fan_oxygen | audience_stability | blackout_residue | fan_token | public_contrition | receipt_counterclaim | route_asset | explicit_absence | equivalent
  incident_key_or_absence: <incident id or explicit_absence>
  candidate_cohorts:
    - cohort_id: <stable id>
      cohort_surface: fan_public | oxygen_holder | access_holder | caption_user | witness | claimant | sponsor_audience | lawful_reader | archive_reader | artist_public | equivalent
      grievance_claim: <short in-world claim>
      harm_type: oxygen_loss | access_loss | miscaption | witnessed_erasure | refund_loss | false_stability | public_silencing | lawful_exclusion | sponsor_substitution | route_asset_capture | equivalent
      proof_carrier_or_absence: fan_token | oxygen_row | caption_log | witness_stub | egress_row | receipt_packet | crisis_docket | explicit_absence | equivalent
      represented_count_posture: named_scope | batch_scope | delegated_scope | disputed_scope | explicit_absence
  merge_question:
    proposed_merge_state: unmerged | merge_as_one | split_by_harm | split_by_reader | representative_lead | reject_duplicate | publish_conflict | quarantine
    clean_merge_beneficiary: sponsor | management | archive | public_table | stability_table | lawful_reader | route_asset | fan_delegate | explicit_absence | equivalent
    harmed_if_merged_cleanly: fan_public | oxygen_holder | caption_user | witness | claimant | lawful_reader | archive_reader | artist | route_asset | explicit_absence | equivalent
  future_consumption:
    future_reader_or_route: <reader route rite event ending scar or explicit_absence>
    future_route_effect: apology_scoped | correction_required | oxygen_recheck | access_recheck | counterreceipt_armed | stability_relief | lawful_annex_required | public_addendum_required | hostile | recovery_only | contradiction_pending | equivalent

Valid register states

StateUseRequired consequence
unmergedcomplaints remain separate because proof or harm divergesqueue pressure persists, but erasure risk falls
merge_as_onecomplaints are tied to one incident keystability relief or desk relief rises; excluded-cohort risk is named
split_by_harmsame incident, different harm typesmultiple remedies become visible with handler cost
split_by_readersame proof, different future readersroute becomes lawful-only, public-only, fan-only, or archive-contested
representative_leadone cohort can speak first but not for allmandate pressure and excluded-reader notice are required
reject_duplicatea cohort is refused as already representedcounterreceipt, hostility, or recovery-only pressure must arm
publish_conflictmerge conflict is public/lawful/archive visiblepublic legitimacy may rise while sponsor or stability pressure worsens
quarantinemerge would contaminate proof or route accessroute delay and recovery cost rise

Default posture

The broader design treats a silent collapse as a missing register. The current strict runtime does not turn that omission into an automatic event: a missing, substituted, off-hand, choiceless, or repeated rite attempt fails without arming default. The executable default is reached only after all nine exact cards are assigned and choice 7, default_clean_merge, is explicitly selected. Its later terminal must remember:

  • which cohort was merged out;
  • which proof carrier was treated as duplicate;
  • who gained by calling it the same complaint;
  • which future reader receives a false-clean incident key;
  • what scar remains when the harmed cohort reappears.

Adjacency boundary

This card is adjacent to but distinct from:

Audience Grievance Merge Register applies at the merge edge: before a complaint cluster becomes one incident, one apology, one correction, one oxygen recheck, or one denied duplicate.

Its local authority is limited to the named incident-key grouping and preservation of the cohort, harm, and proof rows. It does not perform claimant intake, alter crisis-ledger relief/debt, stabilize audience attention, audit proof lineage or representative mandate, decide route-asset ownership, assign an answerability seat, or resolve the later counterreceipt challenge. It grants no universal merge, representation, proof equivalence, clean closure, consent, or universal route authority.

Runtime and replay evidence

The focused test lens/storyteller-audience-grievance-merge-register.runtime.test.ts proves exact card source/lens metadata, the fixed row, strict slot binding, default-only counterreceipt, and parity with public/data/storytellerCards.json5. lens/replays/audience-grievance-merge-register.split-by-harm.replay.json proves all nine cards assigned to choice 1; lens/replays/audience-grievance-merge-register.overmerged-default.replay.json proves the same packet assigned to choice 7 and terminal event option 3.