Ledger Custodian / 账簿保管员 Storyline

Bound character: 账簿保管员.

The Ledger Custodian knows the difference between relief that reached a district and relief that merely looked good on a sponsor broadcast. Their storyline begins when an Oxygen Audit Notice forces the player to prove who received fan-oxygen relief, who holds the archive record, and whether the public can inspect the receipt.

The character is deliberately missable. The audit can proceed without them by substituting card.evidence.fan_oxygen_ledger, but the substitute cannot recreate their public testimony or make contested custody clean.

Existing seam this storyline binds

Three focused Storyteller Game CLI replays now prove the playable outcomes; the older parent-lens semantic projection remains historical design evidence only:

  • a public-custody pass assigns npc.ledger_custodian, lowers oxygen debt, raises audit_integrity to 4, and leaves the archive public;
  • a sponsor compromise substitutes card.evidence.fan_oxygen_ledger, lowers debt, and leaves custody contested behind card.rights.temporary_voice_release;
  • a blackout failure assigns explicit absence instead of either living witness or documentary ledger, leaves oxygen debt unchanged, raises inspector pressure, and keeps custody contested.

This storyline makes the character consequences of those outcomes explicit.

Entry state and recruitment window

The offer opens from audit pressure rather than a fixed turn. rite.expose_fan_oxygen_audit_pressure must first expose the four fixed audit surfaces and add two visible fan-oxygen debt. Only then may event.oxygen_audit_notice select one of three exact evidence tuples and record the matching rite choice index:

entry_state:
  trigger_kind: state_pressure
  pressure_rite: rite.expose_fan_oxygen_audit_pressure
  pressure_flag: ledger_custodian.fan_oxygen_audit_pressure_visible
  fan_oxygen_debt_at_least: 2
  event: event.oxygen_audit_notice
  rite: rite.public_oxygen_audit
  active_relief_broadcast: true
  community_archive_present: true
  ledger_slot_open: true
  ledger_custodian_state: living | documentary_substitute | explicit_absence
  no_fixed_turn_trigger: true

The recruitment window closes when rite.public_oxygen_audit resolves or the player commits to substitute/absence. The audit requires an explicit selected option, and runtime rejects a choice unless its branch flag and exact seven assignments match the notice. Closing the window records ledger_custodian.audit_disposition_recorded; only the public branch recruits.

Story beats

Beat 1 — The unclaimed beneficiary column

The audit notice exposes at least one oxygen-relief row whose broadcast receipt does not name a beneficiary or final archive custodian. The Ledger Custodian offers to testify only if their ledger remains attached to the public audit rather than becoming sponsor property.

Beat 2 — Assign the witness or choose an absence

The event and rite leave one of three matched tuples:

  • npc.ledger_custodian + faction.city_inspectorate + storyteller.card.oxygen_audit_no_rights_transfer_receipt.v1;
  • card.evidence.fan_oxygen_ledger + faction.corporate_sponsors + card.rights.temporary_voice_release;
  • storyteller.card.ledger_custodian_explicit_absence.v1 + storyteller.card.oxygen_audit_pressure_absence.v1 + storyteller.card.oxygen_audit_rights_absence.v1.

All three also require the same named future reader, storyteller.card.ledger_custodian_named_future_reader.v1. No branch may treat a missed witness as silently present.

Beat 3 — The archive chooses a posture

The same rite binds exactly seven slots in order: broadcast, ledger, oxygen, archive, pressure_actor, rights_posture, and future_reader. Broadcast, oxygen, archive, and future reader stay fixed; the event-selected ledger/pressure/rights tuple changes together. The custodian is recruitable only on the public tuple.

Beat 4 — The result becomes durable

ledger_custodian_states:
  recruitable:
    window: audit_notice_open
  assigned_public_witness:
    branch: public_custody_pass
    recruited_flag: ledger_custodian.recruited
    route_asset: route_asset.ledger_custodian_audit_witness
    archive_custody: public
    future_use: recurring_audit_witness
  substituted_by_ledger_card:
    branch: sponsor_custody_compromise
    miss_flag: ledger_custodian.missed_for_current_audit
    archive_custody: contested
    future_use: documentary_proof_only
  missed_for_current_audit:
    branch: failure_blackout_audit
    miss_flag: ledger_custodian.missed_for_current_audit
    archive_custody: contested
    fan_oxygen_debt_decreases: false
    future_use: cannot_clean_same_audit

Branch matrix

BranchCharacter stateImmediate reliefCostFuture effect
Recruit public witnessledger_custodian.state.assigned_public_witnessoxygen debt falls; public custodyinspector visibility; no rights transferrecruited recurring witness + route asset
Use ledger substituteledger_custodian.state.substituted_by_ledger_cardoxygen debt fallstemporary rights; contested custodydocumentary proof only; custodian missed
Blackout absenceledger_custodian.state.missed_for_current_auditnonedebt does not fall; blackscreen; contested custodylater-audit recovery only; custodian missed

Recruitability and missability contract

The character is recruited for this route only when all of the following are true:

  • npc.ledger_custodian occupies the audit ledger slot;
  • faction.city_inspectorate occupies pressure_actor;
  • storyteller.card.oxygen_audit_no_rights_transfer_receipt.v1 occupies rights_posture;
  • asset.community_archive is assigned as archive target;
  • the resolved branch is public_custody_pass;
  • final archive custody is public;
  • ledger_custodian.recruited and route_asset.ledger_custodian_audit_witness are recorded.

They are missed for this audit when the player resolves with the evidence-card substitute or the explicit-absence blackout. A later story may reopen contact for a different audit, but it may not rewrite the completed audit.

irreversibility:
  recruited_after_missed: rejected
  public_testimony_implied_by_ledger_card: rejected
  retroactive_cleanup_of_resolved_audit: rejected

Completion oracle

The storyline is complete when the three dedicated CLI artifacts prove all states are reachable and non-equivalent:

  1. ledger-custodian-audit-witness.public.replay.json — recruited/assigned public witness and sole route asset;
  2. ledger-custodian-audit-witness.substitute.replay.json — irreversible miss with documentary evidence and temporary rights;
  3. ledger-custodian-audit-witness.blackout.replay.json — irreversible miss, blackscreen, contested custody, and unchanged debt.

Every terminal replay must record ledger_custodian.audit_disposition_recorded. The substitute and blackout replays must omit both recruitment and the route asset, so missability is more than prose.

Non-goals

  • Not a fixed-turn recruitment encounter.
  • Not a generic archive clerk.
  • Not a free audit_integrity bonus.
  • Not proof that sponsor custody is public custody.
  • Not permission to recruit the custodian after the audit has already recorded their absence.