Branch Reward Vesting / 分支奖励归属固化机制
Branch Reward Vesting is the mechanism for positive rewards created by successful branches before those rewards can be spent by future routes.
It closes a narrow gap in the current mesh. Storyteller already handles recognition basis, dividend claims, relief callbacks, counterparty reliance, branch eligibility, and route loadout compatibility. Those systems mostly protect against false closure, owed obligations, wrong reliance, missing choices, and incompatible bundles.
This mechanism protects the opposite regression: a reward earned by one success becomes a clean universal key because nobody vested it.
Mechanism promise
A positive reward must become an owned, scoped, replay-visible route object before future play can consume it.
The mechanism answers:
What success created the reward, who owns it, which reader may spend it, who is excluded, what bridge or cost is required, and what future route changes when it is spent or captured?
Boundaries with adjacent systems
- 播出确认基准线 defines which version of a result is counted. This mechanism defines who can spend the positive affordance created by that result.
- 播出盈余认领线 handles surplus value and claimants. This mechanism also covers non-monetary rewards such as access windows, handler favor, fast-lane trust, route privilege, and public goodwill.
- 救济回叫义务线 handles the callback owed by relief. This mechanism handles the reward side even when no callback is immediately visible.
- 相对方信赖撤回线 starts after someone has already acted on a false-clean authority. This mechanism starts earlier, before the reward is spent as clean authority.
- 分支资格回执线 records unavailable choices. This mechanism records successful-choice rewards that would otherwise become unscoped perks.
- 路线装配兼容线 checks whether multiple assets can coexist. This mechanism determines whether a reward can become one of those assets in the first place.
- Branch Reward Afteruse Receipt starts later, when an already resolved reward state is cited by another reader as clean proof or permission.
State-triggered entry
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
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: trueInvalid entries include fixed chronology, chapter quota, raw victory count, raw reward count, dashboard status, lens health, generic post-success pacing, or global economy upkeep.
Reward objects
Valid reward kinds include local equivalents of:
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.
A reward is valid only if a future reader can spend, cite, bundle, report, transfer, or contest it.
Core objects
| Object | Purpose | Required observation |
|---|---|---|
branch_reward_vesting_docket | card storing reward ownership and spend scope | source success, reward object, owner, spend reader, excluded reader, future effect |
branch_reward_vesting_hearing | rite assigning or refusing reward use | selected posture, handler/proof/cost, reward state after |
unvested_reward_capture_default | default when reward is spent or captured before vesting | default actor, false-clean claim, hidden reader, future effect |
future_reward_consumer | downstream route or reader | consumes scoped, split, escrowed, transferred, spent, captured, or recovery-only reward state |
Reward states
reward_states:
unvested:
owner_visible: false
spend_scope_visible: false
provisional:
owner_candidate_visible: true
future_spend_not_safe: true
vested:
owner_visible: true
accepted_scope_visible: true
split_required:
multiple_readers_scoped: true
escrowed:
spend_waits_for_bridge: true
route_asset_scoped:
reward_can_enter_route_loadout: true
transferred:
receipt_required: true
spent_with_scar:
current_use_allowed: true
future_cost_visible: true
quarantined:
clean_use_blocked: true
captured_default:
default_actor_owns_first_story: true
false_universal:
event_required: storyteller.event.unvested_reward_capture_default.v1
recovery_only:
scar_preserving_reuse_only: trueBranch families
A satisfying implementation exposes at least six non-equivalent constructive branches plus default/capture, or blocks unavailable branches with state reasons:
vest_to_beneficiary— source beneficiary receives scoped spend right.split_by_reader— reward becomes reader-specific rather than universal.escrow_reward— reward cannot be spent until bridge/proof/notice exists.convert_to_route_asset— reward becomes a maintained route object with custody pressure.transfer_with_receipt— reward moves to a different owner with receipt and debt.spend_now_with_scar— current route may spend it immediately, but future acceptance narrows.forfeit_or_quarantine— unsafe reward use is blocked or retired.default_capture— fastest desk captures the reward as false-clean advantage.
Every constructive branch must produce relief, cost, and a future route or reader effect.
Card contract
分支奖励归属案卷 or equivalent must include:
docket_required:
source_success:
source_surface: <surface>
source_result_kept_true: true
source_beneficiary: <reader actor route asset or explicit_absence>
reward_object:
reward_id: <reward or explicit_absence>
reward_kind: <kind>
reward_state_before: unvested | provisional | claimed | disputed | scoped | escrowed | spent_unvested | captured | explicit_absence | equivalent
custody:
provisional_owner_or_absence: <owner or explicit_absence>
candidate_spend_reader: <reader>
excluded_or_subordinated_reader: <reader 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: <bridge or explicit_absence>
cost_or_scar_or_absence: <cost or explicit_absence>
result:
reward_state_after: <state>
future_route_effect: <effect>The mechanism fails if a positive reward is represented only as reward_unlocked, bonus_available, goodwill_up, credit_plus, or route_discount.
Default contract
未固化奖励捕获默认 fires or arms when:
- reward owner is absent;
- spend scope is absent;
- excluded reader is hidden;
- proof bridge is absent without explicit absence;
- the reward is consumed by future route as clean;
- a desk files itself as owner before vesting;
- a transferred reward has no receipt;
- split reward is reported as universal acceptance;
- public, lawful, sponsor, archive, route asset, management, and broadcast-reality readers all receive the same clean reward.
Future-reader consumption
The mechanism is incomplete unless at least one downstream surface reads the reward state:
- route bundle loads reward only as scoped route asset;
- sponsor package checks sponsor-only or split state;
- public receipt checks public-only or hidden reader state;
- lawful annex checks escrow or forbearance scope;
- archive route checks fast-lane debt;
- branch eligibility checks reward as bridge, bond, or false unavailable pressure;
- broadcast reality hardens or rejects a captured reward story.
When a downstream surface tries to reuse the resolved reward state beyond the named owner and scope, Branch Reward Afteruse Receipt must create the afteruse docket instead of letting the old vesting row stand in as clean universal permission.
Replay evidence contract
mechanic_id: storyteller.mechanic.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
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
branch_result:
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
reward_state_after: <state>
future_route_effect: <effect>
counter_deltas:
relief: []
cost: []
future: []
assertions:
- 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_count_dashboard_or_lens_health_triggerNon-goals
- Not a global economy layer.
- Not a perk shop.
- Not achievement tracking.
- Not a dashboard.
- Not fixed-turn upkeep.
- Not a duplicate of basis, dividend, callback, reliance, eligibility, or loadout systems.
- Not valid unless a positive reward changes future playable acceptance.