Oxygen Reserve Gap Assignment Lens / 呼吸储备缺口指派 Lens

This lens observes whether 呼吸储备缺口指派线 correctly handles the uncovered remainder after oxygen-like reserve play has made source cover legible.

The oracle is simple: a partly covered oxygen-backed obligation cannot become clean closure until the gap has a holder, reader scope, proof or explicit absence, and future route effect.

This lens observes:

It is observed through:

Design intent

The mesh now correctly prevents several regressions around oxygen:

  1. source rows cannot be mixed into one clean pool;
  2. senior and junior readers can be ranked;
  3. partial relief can be priced as rebate, haircut, consent debt, makegood, clawback, or recovery.

The remaining failure risk is subtler: after all that correct work, the uncovered remainder can still be omitted. A future route may read partial cover with valid provenance as closed obligation. This lens prevents that collapse.

Must pass

1. Entry is state-triggered by partial cover plus gap pressure

Required entry evidence:

entry_state:
  trigger_kind: state_pressure
  obligation_visible: true
  partial_cover_or_scope_limited_cover_visible: true
  source_provenance_row_visible_or_explicit_absence: true
  gap_kind_visible: true
  proposed_or_missing_gap_holder_visible: true
  protected_reader_visible_or_explicit_absence: true
  burdened_or_excluded_reader_visible_or_explicit_absence: true
  future_reader_or_route_effect_possible: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_gap_amount_trigger: true
  no_raw_oxygen_count_trigger: true
  no_raw_fan_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if the storyline opens from fixed timing, raw deficit amount, raw oxygen count, raw fan count, chapter quota, dashboard state, lens health, or generic late-game pressure.

2. Source provenance or explicit absence survives into the gap docket

呼吸储备缺口案卷 must preserve the source obligation, accepted cover, source scopes, gap kind, and explicit absence when provenance is missing.

Required row shape:

gap_docket_required:
  source_provenance_row_id: <row id or explicit_absence>
  source_obligation: <obligation>
  obligation_state_before: <partial or short state>
  usable_cover_sources: []
  gap_kind: amount_short | scope_short | proof_short | mandate_short | care_short | timing_short | authority_short | explicit_absence
  gap_holder_before: <holder or explicit_absence>
  protected_reader: <reader or explicit_absence>
  burdened_or_excluded_reader: <reader or explicit_absence>
  proof_or_absence: <proof or explicit_absence>
  future_reader_or_route_effect: <effect>

The lens fails if the docket says only oxygen short, money owed, reserve balanced, sponsor covered, fans accepted, or delay.

3. The gap holder is named or absence is priced

The gap holder after assignment must be one of:

  • sponsor;
  • producer license;
  • fan/public queue;
  • archive escrow;
  • route asset;
  • recovery shelf;
  • claimant;
  • worker carrier;
  • split holder;
  • blocked holder;
  • explicit absence with default.

The lens fails if the implementation lets holder absence behave like clean closure.

4. Protected and burdened readers diverge

At least two reader surfaces must be visible unless one is explicitly absent with reason:

  • sponsor reader;
  • fan/public reader;
  • ward or care reader;
  • archive/lawful reader;
  • route-asset reader;
  • producer-license reader;
  • broadcast-reality reader;
  • recovery reader.

A passing result cannot satisfy all readers with the same short payment.

5. Assignment rite prices every playable branch

呼吸储备缺口指派 must resolve or explicitly block these branch families:

BranchRequired reliefRequired cost/scarRequired future state
Sponsor true-upobligation or slot pressure fallssponsor capture, contract capture, public distrustsponsor-only, accepted-with-scope, unwind-required
Producer underwriteroute has named backinglicense encumbrance, inspection heat, management pressureaccepted-with-cost, costlier, indemnity-shelf
Fan/public queue creditpublic legitimacy or fan oxygen legibility improvesrefund delay, fan resentment, audit pressurepublic-only, refund-audit, fan-audit
Archive gap escrowfalse closure and double use blockedarchive debt, public delay, sponsor hostility, inspection heatlawful-only, proof-required, release-gated
Route-asset rationprotected person or care line survivescare debt, handler burden, excluded-reader resentmentringfenced, route-asset-only, costlier
Recovery conversionunsafe closure blocked and repair remains possibledowngrade, delay, indemnity pricerecovery-only, salvage-floor, indemnity-shelf
Split gapone reader proceeds within scopecontradiction pressure, source ambiguity, omitted-reader hostilitysplit-required, addendum-required, costlier
Visible blockfalse clean closure preventedmakegood, clawback, priority, or recovery pressure risesblocked, downgraded, rerouted
Gap capture defaultimmediate report may closehidden holder becomes challenge surfacecaptured, false-closed, hostile, blocked, recovery-only

6. Default is durable

呼吸储备缺口默认 must fire or arm when:

  • no gap holder is assigned;
  • a sponsor true-up is reused as public closure;
  • a fan/public queue credit is reused as sponsor or lawful closure;
  • archive escrow is reused as fan acceptance;
  • a route-asset ration is hidden from the protected reader;
  • recovery conversion is filed as full settlement;
  • source provenance is missing and the absence is not priced;
  • the burdened reader is hidden.

Required default payload:

default_required:
  event_seen_or_armed: storyteller.event.oxygen_reserve_gap_default.v1
  source_gap_row_id: <gap row id or explicit_absence>
  false_clean_claim: <claim>
  capturing_reader: <reader>
  hidden_gap_holder: <holder or explicit_absence>
  burdened_or_excluded_reader: <reader or explicit_absence>
  gap_state_after: captured | false_closed | hostile | blocked | split_required | costlier | recovery_only | contradiction_pending | equivalent
  future_reader_or_route_effect: <effect>
  counter_deltas_min: 3

A default that changes only money, oxygen total, mood, or reputation fails.

7. Future reader consumes gap state

At least one future reader must consume the assignment result before treating the obligation as usable:

The lens fails if the gap row is written but later routes ignore it.

Negative examples

Fail these implementations:

bad_examples:
  - payment_result: sponsor_covered
    missing: gap_holder protected_reader burdened_reader future_effect
  - payment_result: reserve_balanced
    missing: source_provenance_row gap_kind reader_scope
  - payment_result: fans_accepted_partial_shortfall
    missing: mandate proof burdened_reader default_if_reused
  - payment_result: route_asset_released
    missing: care_gap ration_holder future_route_effect
  - payment_result: archive_escrowed
    missing: public_addendum burdened_reader release_gate

Replay/session evidence expectation

storyline_id: storyteller.storyline.oxygen_reserve_gap_assignment.v1
session_id: lens-oxygen-reserve-gap-assignment-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  obligation_visible: true
  partial_cover_or_scope_limited_cover_visible: true
  source_provenance_row_visible_or_explicit_absence: true
  gap_kind_visible: true
  proposed_or_missing_gap_holder_visible: true
  protected_reader_visible_or_explicit_absence: true
  burdened_or_excluded_reader_visible_or_explicit_absence: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.oxygen_reserve_gap_docket.v1
  rite: storyteller.rite.oxygen_reserve_gap_assignment.v1
branch_runs:
  assignment_branch:
    selected_posture: sponsor_true_up | producer_underwrite | fan_public_queue_credit | archive_gap_escrow | route_asset_ration | recovery_conversion | split_gap | visible_block
    gap_state_after: <state>
    assigned_gap_holder_after: <holder or explicit_absence>
    protected_reader_state_after: <state>
    burdened_reader_state_after: <state or explicit_absence>
    future_reader_or_route_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default_branch:
    event_seen_or_armed: storyteller.event.oxygen_reserve_gap_default.v1
    false_clean_claim: <claim>
    capturing_reader: <reader>
    hidden_gap_holder: <holder or explicit_absence>
    future_reader_or_route_effect: <effect>
assertions:
  - primary_links_exist
  - entry_is_state_triggered
  - partial_cover_does_not_become_clean_closure
  - source_provenance_or_explicit_absence_visible
  - gap_holder_visible_or_defaulted
  - protected_and_burdened_readers_diverge
  - assignment_has_relief_cost_and_future_effect
  - default_is_durable
  - future_reader_consumes_gap_state
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Non-goals

  • Not raw deficit accounting.
  • Not a global oxygen economy.
  • Not a replacement for provenance, priority, rebate, clawback, makegood, recovery, or salvage.
  • Not a fixed upkeep cadence.
  • Not valid unless uncovered gap state changes future play.