Dormant Claim Breach / 休眠认领破口

Dormant Claim Breach is the event fired when an old claim row becomes relevant again but the current surface has no valid seat for it.

It exists for long-campaign continuity: Storyteller already creates correction rows, stabilization liabilities, enforcement orders, ending scars, handler burdens, public receipts, and route-asset custody states. Those rows should not vanish between crises, but they also should not all explode at once. This event makes a resurfaced claim visible when the player hides it, over-defers it, routes it to the wrong surface, or lets a rival claimant narrate first.

Event promise

A breach must prove four things:

  • which earlier row resurfaced;
  • why the current state made it relevant;
  • which seat, carrier, or proof was missing or refused;
  • what future play became harder, hostile, recovery-only, captured, or costlier.

The breach is not a reminder popup. It mutates the game state.

State-triggered entry

Fire this event only from state, never from a fixed numbered turn.

Valid entry requires all of:

  1. a prior ledger, docket, ticket, scar, burden, receipt, or route asset row exists;
  2. the row is unresolved, deferred, disputed, watchlisted, recovery-only, hostile, captured, public-only, lawful-only, sponsor-only, or false-owner-risk;
  3. a current surface requests a resource, proof, handler, claimant, correction, custody action, enforcement action, ending eligibility, or public statement that the row can materially affect;
  4. the row was not seated, merged, routed, retired with scar, or explicitly deferred with collateral;
  5. at least one claimant can benefit from the omission.

Breach families

Forgotten row

The row existed in an earlier branch but is absent from the current offer set.

Required outcome:

breach_family: forgotten_row
future_route_effect_any: [costlier, blocked, recovery_only, hostile_claim]
required_deltas_min: 3

Wrong seat

The row is surfaced, but sent to a rite that cannot name its claimant, carrier, or proof anchor.

Required outcome:

breach_family: wrong_seat
wrong_surface: <surface id>
correct_surface_hint: correction_slot | archive_enforcement | stabilization_handoff | ending_scar | handler_burden | production_triage | equivalent
future_route_effect_any: [reroute_required, costlier, delayed, public_only, lawful_only]

Rival narrates first

The player defers the row without collateral, allowing sponsor, inspector, archive, fan public, editor, pirate, proxy, witness, or route claimant to frame it.

Required outcome:

breach_family: rival_narrates_first
rival_claimant: sponsor | inspector | archive | fan_public | editor | pirate | proxy | witness | route_claimant
future_route_effect_any: [captured, hostile_narration, counterbroadcast_ready, false_owner_risk_up]

Overloaded resurfacing

Too many matured rows are offered without finite capacity, making the choice meaningless.

Required outcome:

breach_family: overloaded_resurfacing
selected_rows_required: true
unselected_rows_gain_state_any: [watchlisted, deferred_with_collateral, hostile, default_ready]

False quiet

The row is marked resolved without proof, claimant accounting, or scar.

Required outcome:

breach_family: false_quiet
future_route_effect_any: [clean_laundering_blocked, audit_required, recovery_only, contradiction_pending]

Counter and state deltas

Every breach must change at least three counters or durable states. At least one must explain immediate relief or pressure avoided, and at least one must explain long-term cost.

Suggested states:

  • dormant_claim_pressure
  • resurfacing_debt
  • claim_queue_integrity
  • future_correction_cost
  • future_enforcement_cost
  • ending_scar_state
  • handler_refusal_pressure
  • route_asset_custody
  • public_receipt_distrust
  • sponsor_stop_loss_pressure
  • inspection_heat
  • archive_debt
  • edit_debt
  • black_screen_pressure
  • false_owner_risk

Output payload

event: storyteller.event.dormant_claim_breach.v1
source_row:
  source_surface: <prior storyline or mechanism>
  source_session_id: <prior session>
  source_seed: <prior seed>
  row_id: <stable row id>
  row_state_before: <state>
current_surface:
  surface_id: <current rite, event, storyline, or route>
  why_relevant: <state condition, not turn count>
missing_or_failed:
  absent_field_any: [seat, carrier, proof_anchor, claimant_harmed, capacity, collateral, route_sink]
breach_result:
  breach_family: forgotten_row | wrong_seat | rival_narrates_first | overloaded_resurfacing | false_quiet
  claimant_benefited: <claimant>
  claimant_harmed: <claimant>
  row_state_after: breached | hostile | captured | recovery_only | costlier | deferred_with_collateral | contradiction_pending
  future_route_effect: <effect>
  counter_deltas: {}

Integration notes

Non-goals

  • Not a random delayed event.
  • Not a turn-count timer.
  • Not a dashboard warning.
  • Not a generic punishment for leaving work unresolved.
  • Not a way to fire every old debt at once.
  • Not a clean expiry rule; unresolved rows must become seated, routed, deferred with collateral, retired with scar, or breached.