Branch Reward Vesting Lens / 分支奖励归属固化 Lens

This lens observes whether 分支奖励归属固化线 and 分支奖励归属固化机制 correctly make positive branch rewards playable before future routes spend them.

The oracle is: a successful branch reward is not a universal clean key. A sponsor credit, public goodwill bump, archive fast-lane, lawful forbearance, handler favor, route-asset privilege, schedule cushion, audience oxygen lift, fan delegate trust, access window, or proof shortcut can be earned and still require owner, reader scope, excluded reader, cost, and future effect before reuse.

This lens observes:

It is observed through:

Observable promise

A passing implementation proves that a reward can be positive without becoming clean. The source success remains true, but the future reward must be vested before it can unlock a route, patch broadcast reality, satisfy a sponsor package, bridge branch eligibility, enter a loadout, satisfy a lawful annex, or support management closure.

The implementation must answer:

  • what source success created the reward;
  • whether the reward object exists or is explicitly absent;
  • who provisionally owns it;
  • which future reader wants to spend it;
  • who is excluded or subordinated by that spend;
  • what scope, proof bridge, handler, and cost apply;
  • which branch posture was chosen;
  • what future route effect follows.

The lens fails if the game stores only reward_unlocked, bonus_available, goodwill_up, sponsor_credit_plus, fastlane_active, favor_available, or route_discount.

Entry oracle

entry_state_required:
  trigger_kind: state_pressure
  source_success_present: true
  source_success_kept_true: true
  reward_object_present_or_explicit_absence: true
  reward_spendable_by_future_reader: true
  provisional_owner_or_explicit_absence_visible: true
  candidate_spend_reader_visible: true
  excluded_or_subordinated_reader_visible_or_explicit_absence: true
  future_reader_or_route_consumes_reward: true
  player_can_vest_split_escrow_convert_transfer_spend_forfeit_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_reward_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry opens from fixed chronology, chapter quota, raw victory count, raw reward count, dashboard status, lens health, generic post-success pacing, generic economy upkeep, or achievement progress.

Docket oracle

分支奖励归属案卷 or equivalent must record:

docket_required:
  row_id: <stable id>
  source_success:
    source_surface: <storyline rite event card route asset or explicit_absence>
    source_result_kept_true: true
    source_beneficiary: <reader actor route asset or explicit_absence>
  reward_object:
    reward_id: <stable reward id or explicit_absence>
    reward_kind: sponsor_credit | public_goodwill | archive_fastlane | lawful_forbearance | handler_favor | route_asset_privilege | schedule_cushion | audience_oxygen_lift | fan_delegate_trust | access_window | proof_shortcut | equivalent
    reward_state_before: unvested | provisional | claimed | disputed | scoped | escrowed | spent_unvested | captured | explicit_absence | equivalent
    spendable_by_future_reader: true
  custody:
    provisional_owner_or_absence: sponsor | producer_license | public_fan | archive | inspector | editor | artist_boundary | handler | route_asset | claimant | explicit_absence | equivalent
    candidate_spend_reader: sponsor | lawful_reader | public_fan | archive | inspector | editor | route_asset | management | broadcast_reality | equivalent
    excluded_or_subordinated_reader: <reader claimant or explicit_absence>
    accepted_scope_or_absence: <scope or explicit_absence>
  vesting:
    selected_posture: vest_to_beneficiary | split_by_reader | escrow_reward | convert_to_route_asset | transfer_with_receipt | spend_now_with_scar | forfeit_or_quarantine | default_capture
    handler_or_absence: <handler or explicit_absence>
    proof_bridge_or_absence: <proof receipt basis row or explicit_absence>
    cost_or_scar_or_absence: <cost scar or explicit_absence>
  result:
    reward_state_after: vested | split_required | escrowed | route_asset_scoped | transferred | spent_with_scar | quarantined | forfeited | captured_default | recovery_only | equivalent
    future_route_effect: accepted_with_scope | costlier | public_only | lawful_only | sponsor_only | route_asset_required | bridge_required | blocked | contradiction_pending | recovery_only | equivalent

The lens fails if the row names a reward without owner, spend reader, excluded reader, proof bridge or explicit absence, selected posture, and future route effect.

Hearing oracle

分支奖励归属听证 or equivalent must require concrete assignment:

assignment_required:
  docket: storyteller.card.branch_reward_vesting_docket.v1
  selected_reward_row: <row id>
  source_success: <surface id>
  reward_object_or_absence: <reward or explicit_absence>
  provisional_owner_or_absence: <owner or explicit_absence>
  candidate_spend_reader: <reader>
  excluded_or_subordinated_reader: <reader or explicit_absence>
  selected_posture: vest_to_beneficiary | split_by_reader | escrow_reward | convert_to_route_asset | transfer_with_receipt | spend_now_with_scar | forfeit_or_quarantine | default_capture
  handler_or_absence: <handler or explicit_absence>
  proof_bridge_or_absence: <recognized basis reward receipt route asset proof public receipt lawful annex or explicit_absence>
  cost_or_scar_or_absence: <cost scar or explicit_absence>
  future_reader_or_route: <reader route rite package proof window or explicit_absence>

The lens fails if sponsor money, public goodwill, legal wording, archive stamp, editor checksum, producer authority, or a famous handler can spend the reward without these slots.

Branch divergence oracle

A satisfying implementation must expose at least six constructive branch families plus default/capture, or explicitly block unavailable families with state reasons.

BranchRequired reliefRequired costRequired future effect
Vest to beneficiaryreward owner can spend with clarityrival reader pressure, scope cost, public distrust, sponsor pressure, or archive debt risesaccepted_with_scope
Split by readermultiple readers get scoped accessambiguity, bridge debt, handler burden, or future collision risessplit_required
Escrow rewardfalse spend blockeddelay, archive debt, sponsor pressure, public distrust, or inspection heat risesbridge_required or blocked_until_bridge
Convert to route assetreward becomes playable objectcustody, maintenance, loadout, or route-asset pressure risesroute_asset_required
Transfer with receiptreward moves to a new ownertransfer debt, notice cost, claimant hostility, or public receipt pressure risestransferred_with_receipt
Spend now with scarcurrent route opensreward is spent, reader-limited, costlier, or contradiction-pendingaccepted_with_scar
Forfeit or quarantineunsafe future reward use blockedcurrent route loses perk, slows, or becomes recovery-onlyblocked or recovery_only
Default capturefastest desk gains short reliefreward capture, hidden reader, false universal, drift, or hostile reader hardenscaptured, hostile, contradiction_pending, recovery_only

The lens fails if every branch returns reward_ready, perk_claimed, all_readers_accept, or one generic pressure delta.

No positive reward universal key

Required evidence:

no_reward_universal_key:
  source_success_kept_true: true
  reward_state_after_not_clean_universal: true
  owner_visible_or_explicit_absence: true
  spend_scope_visible_or_explicit_absence: true
  excluded_reader_visible_or_explicit_absence: true
  future_route_effect_not_clean_universal: true

The lens fails if one positive reward cleanly satisfies sponsor, public/fan, lawful/archive, inspector, editor, handler, artist-boundary, claimant, route asset, management, and broadcast-reality readers.

Default oracle

未固化奖励捕获默认 must fire or arm when:

  • owner is absent;
  • spend scope is absent;
  • excluded reader is hidden;
  • proof bridge is absent without explicit absence;
  • future route consumes reward as clean;
  • a desk files itself as owner before vesting;
  • transfer has no receipt;
  • split reward is reported as universal;
  • public, lawful, sponsor, archive, route asset, management, and broadcast-reality readers all receive the same clean reward.

Required default payload:

default_required:
  event: storyteller.event.unvested_reward_capture_default.v1
  source_success_or_absence: <source result or explicit_absence>
  reward_object_or_absence: <reward or explicit_absence>
  reward_kind_or_absence: sponsor_credit | public_goodwill | archive_fastlane | lawful_forbearance | handler_favor | route_asset_privilege | schedule_cushion | audience_oxygen_lift | fan_delegate_trust | access_window | proof_shortcut | explicit_absence | equivalent
  missing_or_failed_vesting:
    owner: present | absent
    spend_scope: present | absent
    excluded_reader: present | absent
    proof_bridge: present | absent
    cost_or_scar: present | absent
    future_reader: present | absent
  default_actor: sponsor | management | archive | inspector | editor | public_fan | lawful_reader | route_asset | handler_absence | producer_absence | broadcast_reality | equivalent
  false_clean_claim: reward_is_universal | sponsor_credit_equals_public_acceptance | lawful_forbearance_equals_approval | goodwill_spendable_by_management | archive_fastlane_equals_truth | route_privilege_equals_custody | handler_favor_is_free | schedule_cushion_clears_deferred_reader | equivalent
  captured_reward_owner: <actor reader or explicit_absence>
  hidden_or_subordinated_reader: <reader claimant or explicit_absence>
  reward_state_after: captured_default | false_universal | sponsor_only | lawful_only | public_only | route_asset_captured | spent_unvested | contradiction_pending | recovery_only | equivalent
  future_route_effect: costlier | blocked | hostile | sponsor_only | lawful_only | public_only | route_asset_required | bridge_required | contradiction_pending | recovery_only | equivalent
  counter_deltas_min: 3

The default fails if it only removes a bonus, changes mood, displays warning text, or increments generic danger without mutating future play.

Future consumption oracle

At least one downstream surface must consume reward state:

  • route bundle loads reward only as a scoped route asset;
  • sponsor package checks sponsor-only, split, or captured state;
  • public receipt checks public-only, hidden-reader, or transfer receipt state;
  • lawful annex checks escrow, bridge, or forbearance scope;
  • archive route checks fast-lane debt or inspection cost;
  • branch eligibility checks the reward as bridge, bond, or false-unavailable pressure;
  • management closure is blocked or costed by unvested reward state;
  • broadcast reality hardens, rejects, or marks the captured reward story as contradiction-pending.

If the reward result never changes future play, the lens is incomplete.

Replay evidence shape

lens_id: storyteller.lens.branch_reward_vesting.v1
session_id: lens-branch-reward-vesting-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_success_present: true
  source_success_kept_true: true
  reward_object_present_or_explicit_absence: true
  reward_spendable_by_future_reader: true
  provisional_owner_or_explicit_absence_visible: true
  candidate_spend_reader_visible: true
  excluded_or_subordinated_reader_visible_or_explicit_absence: true
  future_reader_or_route_consumes_reward: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.branch_reward_vesting_docket.v1
  rite: storyteller.rite.branch_reward_vesting_hearing.v1
source_reward:
  source_surface: <surface id>
  reward_kind: <kind or explicit_absence>
  provisional_owner_or_absence: <owner or explicit_absence>
  candidate_spend_reader: <reader>
  excluded_or_subordinated_reader: <reader or explicit_absence>
branch_runs:
  constructive_branch:
    selected_posture: vest_to_beneficiary | split_by_reader | escrow_reward | convert_to_route_asset | transfer_with_receipt | spend_now_with_scar | forfeit_or_quarantine
    reward_state_after: <state>
    owner_state_after: <state>
    excluded_reader_state_after: <state>
    future_route_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default_branch:
    selected_posture: default_capture
    event_seen_or_armed: storyteller.event.unvested_reward_capture_default.v1
    default_actor: <actor>
    false_clean_claim: <claim>
    hidden_or_subordinated_reader: <reader or explicit_absence>
    reward_state_after: captured_default | false_universal | sponsor_only | lawful_only | public_only | recovery_only | equivalent
downstream_read:
  future_reader_or_route: <reader route rite package proof window or broadcast reality>
  consumed_reward_state: <state>
  route_effect_after_read: <effect>
assertions:
  - entry_is_state_triggered
  - source_success_kept_true
  - reward_object_visible_or_explicit_absence
  - owner_scope_and_excluded_reader_visible_or_explicit_absence
  - reward_is_not_universal_key
  - branch_outcomes_diverge
  - success_has_cost
  - default_is_durable
  - future_reader_consumes_reward_state
  - no_fixed_turn_day_week_raw_reward_count_dashboard_or_lens_health_trigger

Progress metric

branchRewardVestingProgress = 0..10:

  • 0: no source success or reward object.
  • 1: source success remains true and reward object or explicit absence is visible.
  • 2: reward is identified as future-spendable.
  • 3: provisional owner or explicit absence is visible.
  • 4: candidate spend reader is visible.
  • 5: excluded or subordinated reader is visible or explicitly absent.
  • 6: 分支奖励归属案卷 enters play.
  • 7: 分支奖励归属听证 exposes assignment slots.
  • 8: constructive branch mutates reward state, cost, and future route effect.
  • 9: 未固化奖励捕获默认 creates durable capture when skipped or underfilled.
  • 10: downstream reader consumes reward state before route unlock, proof use, package closure, loadout, or broadcast fact.

Non-goals

  • Not a global economy.
  • Not a perk shop.
  • Not achievement tracking.
  • Not raw reward-count satisfaction.
  • Not fixed-turn reward cleanup.
  • Not a dashboard or governance page.
  • Not a replacement for basis recognition, dividend claim, relief callback, counterparty reliance, branch eligibility, or route loadout compatibility.
  • Not valid unless positive reward state changes future playable acceptance.