Explicit Absence Register / 明示缺席登记机制

Explicit Absence Register turns an explicit absence field into scoped, replayable evidence only when a future reader wants to consume that absence.

The rule is narrow: a blank must become explicit absence inside local systems, but an explicit absence cannot become clean proof for every later reader unless it carries source row, slot kind, reason, proof or recorded lack, harmed reader, selected posture, cost, and future effect.

Entry Contract

explicit_absence_register_entry:
  trigger_kind: state_pressure
  source_surface_with_absence_field_present: true
  explicit_absence_claim_visible: true
  absent_slot_kind_visible: true
  absence_reason_or_proof_visible_or_contested: true
  citing_reader_or_route_visible: true
  intended_use_of_absence_visible: true
  harmed_reader_or_claimant_if_false_visible_or_explicit_absence: true
  player_response_available: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_absence_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

Invalid entry sources: fixed turn number, day/week interval, chapter quota, raw count of missing fields, dashboard state, lens health, generic legal review, generic UX validation, or a local blank that no future reader consumes.

Absence State Model

explicit_absence_state:
  absence_claim_state: recorded | contested | scoped | protected | substituted | reopened | split | blocked | false_clean | defaulted
  absent_slot_kind: affected_party | carrier | keeper | proof_anchor | speaker | claimant | handler | service_recipient | operator_row | signatory | counter_branch | future_reader | route_asset | equivalent
  absence_reason: protected_silence | unsafe_to_name | impossible_to_serve | missed_window | no_valid_holder | refused | lawful_seal | archive_quarantine | scope_mismatch | unknown_or_contested | equivalent
  reader_scope: public | lawful | sponsor | archive | editor | management | route_asset | fan_public | split | reader_specific | equivalent
  future_reader_or_route_effect: accepted_with_scope | reader_specific_absence | notice_required | proof_required | substitute_required | protected_silence | split_required | blocked | costlier | hostile | recovery_only | false_absence_default

The mechanism fails if absence claim state, reader scope, harmed reader, and future effect do not diverge by branch.

Branch Families

Certify scoped absence

The absence is valid for one named reader and use.

Required mutation: future use becomes accepted-with-scope, while proof burden, audit heat, public distrust, or route cost remains visible.

Narrow absence reader

The same absence can be cited by one reader but not another.

Required mutation: citing reader proceeds narrowly, omitted reader receives addendum, notice, objection, or future surcharge.

Substitute visible carrier

The player replaces the absence with a named carrier, proof object, handler, or route asset.

Required mutation: absence state becomes substituted, route can proceed only with handler burden, exposure, schedule cost, or proof debt.

Reopen notice or proof

The absence is not trusted until affected party, proof anchor, or service route is rechecked.

Required mutation: current clean use pauses, future state becomes notice-required or proof-required, and delay or claimant pressure rises.

Protect silence

The absence is real because naming the person or proof would create harm.

Required mutation: absence becomes protected silence, but payroll, support, lawful escrow, or public addendum cost rises.

Split absence scope

Readers receive incompatible absence answers.

Required mutation: future state becomes split-required or reader-specific, with contradiction pressure or reconciliation cost.

Block clean absence

The absence cannot be consumed yet.

Required mutation: future route becomes blocked, downgraded, costlier, or recovery-only.

False explicit absence default

The absence is consumed cleanly without a valid register.

Required mutation: 伪明示缺席默认 fires or arms.

Counter Contract

Every valid branch mutates at least one item from each group:

counter_contract:
  absence_state_min: 1
  reader_scope_min: 1
  relief_min: 1
  cost_min: 1
  future_route_effect_min: 1

Recommended surfaces:

  • explicit_absence_legibility
  • absence_scope_integrity
  • false_absence_pressure
  • proof_burden
  • notice_debt
  • protected_silence_debt
  • handler_burden
  • inspection_heat
  • archive_debt
  • edit_debt
  • public_receipt_distrust
  • sponsor_stop_loss_pressure
  • route_asset_pressure
  • broadcast_reality_drift
  • future_recovery_cost

Integration Surface

  • Reader Rebuttal Notice decides whether an affected party can answer a cited row. This mechanism decides whether an explicit absence attached to that row can travel as proof.
  • Resume Packet Triage decides the active hand. This mechanism prevents a packet absence from becoming universal clean absence.
  • Hearing Transcript Redaction may protect a speaker or proof anchor, but future readers still need scoped absence.
  • Capacity Notice Service Queue may record an omitted claimant as absent, but capacity cannot be reused cleanly unless the absence scope is visible.
  • Broadcast Signatory Counterclaim may record explicit absence of a signer, but the absence cannot become sponsor release, lawful signature, and public forgiveness at once.

Evidence Shape

mechanic_id: storyteller.mechanic.explicit_absence_register.v1
session_id: lens-explicit-absence-register-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_surface_with_absence_field_present: true
  explicit_absence_claim_visible: true
  absent_slot_kind_visible: true
  no_fixed_turn_trigger: true
docket:
  card: storyteller.card.explicit_absence_docket.v1
  source_absence_row_id: <row>
  absent_slot_kind: <kind>
  absence_reason: <reason>
  citing_reader_or_route: <reader>
assignment:
  rite: storyteller.rite.explicit_absence_review.v1
  selected_posture: certify_scoped_absence | narrow_absence_reader | substitute_visible_carrier | reopen_notice_or_proof | protect_silence | split_absence_scope | block_clean_absence | false_explicit_absence_default
outcome:
  absence_state_after: <state>
  future_reader_or_route_effect: <effect>
  emitted_event: storyteller.event.false_explicit_absence_default.v1 | none_if_valid
  counter_deltas:
    relief: []
    cost: []
    future: []

Non-Goals

  • Not a global missing-field validator.
  • Not a replacement for local cards, rites, or notice systems.
  • Not a reason to create absence rows that no future reader consumes.
  • Not valid if explicit absence is accepted without reader scope and future effect.