Risk Forecast Commitment Lens / 风险预测承诺 Lens

This lens observes whether 风险预测承诺线 and 风险预测承诺机制 correctly make forecasts used in management decisions into accountable in-world objects.

The current corpus already has strong after-the-fact surfaces: recognized basis, branch eligibility receipts, capacity liability, grievance merging, faction commitments, and route-asset maintenance. This lens covers the earlier edge: a forecast can decide who is risked before proof arrives. That forecast must be player-facing, branchable, and later checkable.

This lens observes:

It is observed through:

Observable promise

A forecast used to justify a branch cannot remain an invisible probability, safety label, or algorithmic confidence score.

The implementation must answer:

What decision used the forecast, what surface was predicted, who owns the forecast, who benefits if it stays silent, who is harmed if it is wrong, what posture the player chose, and which future surface will test it?

The lens fails if a route can unlock from risk low, safe, predicted success, expected stability, model says yes, confidence score, or probability high without a docket, posture, miss consequence, and future check.

Must pass

1. Entry is state-triggered by a decision using forecast

Required evidence:

entry_state_required:
  trigger_kind: state_pressure
  source_decision_present: true
  decision_uses_forecast_as_justification: true
  forecast_would_change_branch_or_route: true
  predicted_surface_visible: true
  projected_claim_or_explicit_absence_visible: true
  future_check_surface_visible_or_explicit_absence: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_forecast_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry comes from a fixed planning phase, chapter beat, turn number, day/week interval, raw forecast count, dashboard alert, lens health, or generic risk-threshold prompt.

2. Docket row is concrete

风险预测承诺案卷 or equivalent must record:

docket_required:
  forecast_id: <stable id>
  source_decision:
    source_option_set_or_rite: <choice set, rite, card, route, or package>
    decision_label: <decision>
    decision_uses_forecast_as_justification: true
  forecast_surface:
    predicted_surface: fan_oxygen | audience_stability | broadcast_capacity | sponsor_stop_loss | inspection_heat | public_receipt | lawful_acceptance | route_asset | broadcast_reality | producer_license | equivalent
    projected_claim: <claim>
    projected_range_or_threshold: <range threshold or explicit_absence>
    confidence_posture: narrow | wide | contested | withheld | explicit_absence
    proof_basis_or_absence: <basis or explicit_absence>
  accountability:
    forecast_owner: producer | management | sponsor | inspector | archive | editor | fan_public | route_claimant | algorithmic_table | explicit_absence | equivalent
    beneficiary_if_silent: <actor or explicit_absence>
    harmed_if_wrong: <reader or explicit_absence>
    future_check_surface: <surface or explicit_absence>

The lens fails if the row contains only a number, trend, probability, mood, heat score, or abstract risk level.

3. Forecast posture is concrete

风险预测承诺复核 must require a concrete posture before the decision proceeds or is delayed.

posture_required:
  selected_posture: certify_forecast | publish_range | hedge_reserve | attach_dissent | delay_until_reading | suppress_forecast | default_clean_prediction
  reserve_or_hedge_or_absence: <reserve, hedge, bridge, or explicit_absence>
  dissent_row_or_absence: <reader or claimant dissent or explicit_absence>
  miss_state_if_wrong: forecast_miss | hostile_reader | clawback | public_addendum_required | lawful_recheck | sponsor_gate | route_costlier | recovery_only | contradiction_pending

A generic accept risk, use forecast, ignore, proceed, try later, or confidence high result is insufficient.

4. Branch families diverge

At least five constructive branch families plus a default or explicitly blocked state must be playable or state-blocked:

  • certify forecast;
  • publish range;
  • hedge reserve;
  • attach dissent;
  • delay until reading;
  • suppress forecast;
  • default clean prediction.

They must differ by forecast state after, immediate relief, cost/scar, harmed reader posture, reserve/dissent posture, and future route effect.

5. Constructive branch has relief, cost, and future effect

Every constructive branch must mutate at least three durable surfaces:

constructive_result_required:
  selected_posture: certify_forecast | publish_range | hedge_reserve | attach_dissent | delay_until_reading
  forecast_state_after: forecast_certified | range_published | reserve_hedged | dissent_attached | decision_delayed | equivalent
  counter_deltas:
    relief: at_least_one
    cost: at_least_one
    future: at_least_one

Accepted surfaces include forecast owner liability, public receipt legitimacy, public receipt distrust, fan oxygen resentment, audience anxiety, sponsor stop-loss pressure, inspection heat, lawful recheck pressure, route asset pressure, broadcast reality contradiction, producer license pressure, reserve capacity locked, and future recovery cost.

6. Hidden or underfilled forecast defaults

预测失准默认 must fire or arm when a forecast is used cleanly while hiding or underfilling source decision, predicted surface, projected claim, forecast owner, beneficiary, harmed reader, dissent, reserve, or future check.

Required default payload:

default_event_required:
  event: storyteller.event.forecast_miss_default.v1
  source_forecast_id_or_absence: <forecast id or explicit_absence>
  source_decision: <decision>
  predicted_surface: <surface>
  projected_claim_or_absence: <claim or explicit_absence>
  later_check_surface: <surface that tested the forecast>
  miss_kind: threshold_breached | range_hidden | harmed_reader_hidden | reserve_absent | dissent_suppressed | owner_absent | false_clean_prediction | equivalent
  beneficiary_if_silent: <actor or explicit_absence>
  harmed_reader_after: hostile | public_counter | lawful_recheck | oxygen_recheck | sponsor_clawback | route_costlier | recovery_only | contradiction_pending | equivalent
  future_route_effect: public_addendum_required | lawful_recheck_required | sponsor_gate_required | reserve_consumed | route_costlier | blocked | recovery_only | contradiction_pending | equivalent
  counter_deltas_min: 3

The default fails if it only posts warning text, lowers mood, changes a hidden risk score, or narrates that the prediction was wrong without future route mutation.

7. Future surface consumes forecast state

At least one downstream surface must consume the forecast state or default.

Valid consumers include fan oxygen recheck, audience grievance, public addendum, lawful recheck, sponsor gate, broadcast capacity liability, route loadout, route-asset maintenance, producer-license burden, broadcast-reality contradiction, or ending scar.

The lens fails if the forecast ends at explanation text.

8. No invisible probability unlock

A passing implementation must prove:

no_invisible_probability_unlock:
  forecast_changes_branch_or_route: true
  source_decision_named: true
  predicted_surface_visible: true
  owner_beneficiary_harmed_reader_visible_or_explicit_absence: true
  selected_posture_visible: true
  miss_state_or_future_check_visible: true
  route_not_unlocked_by_probability_alone: true

The lens fails if a probability, prediction, stability model, or risk forecast directly unlocks a route without in-world accountability.

Branch assertions

Certify assertion

selected_posture: certify_forecast
forecast_state_after: forecast_certified
relief_any:
  - decision_speed_up
  - sponsor_or_management_confidence_up
  - route_access_preserved
cost_any:
  - forecast_owner_liability_up
  - producer_license_pressure_up
  - harmed_reader_exposure_up
future_effect_any:
  - signed_forecast_can_be_rechecked
  - miss_creates_clawback_or_addendum

Publish range assertion

selected_posture: publish_range
forecast_state_after: range_published
relief_any:
  - public_receipt_legitimacy_up
  - lawful_or_fan_trust_up
cost_any:
  - sponsor_stop_loss_pressure_up
  - audience_anxiety_up
  - inspection_heat_up
future_effect_any:
  - future_reader_accepts_with_range
  - forecast_miss_softened_but_not_erased

Hedge reserve assertion

selected_posture: hedge_reserve
forecast_state_after: reserve_hedged
relief_any:
  - forecast_miss_severity_down
  - recovery_path_preserved
cost_any:
  - current_route_cost_up
  - capacity_or_budget_locked
  - sponsor_or_management_pressure_up
future_effect_any:
  - reserve_consumed_if_miss
  - future_branch_costlier_but_available

Attach dissent assertion

selected_posture: attach_dissent
forecast_state_after: dissent_attached
relief_any:
  - silent_beneficiary_pressure_down
  - harmed_reader_erasure_down
cost_any:
  - handler_burden_up
  - public_or_lawful_conflict_up
future_effect_any:
  - rebuttal_route_armed
  - forecast_can_be_challenged_later

Delay assertion

selected_posture: delay_until_reading
forecast_state_after: decision_delayed
relief_any:
  - false_certainty_down
  - forecast_miss_risk_down
cost_any:
  - schedule_pressure_up
  - audience_churn_up
  - sponsor_stop_loss_pressure_up
future_effect_any:
  - decision_reopens_with_reading
  - unavailable_branch_receipt_may_be_needed

Suppress assertion

selected_posture: suppress_forecast
forecast_state_after: forecast_suppressed
relief_any:
  - immediate_management_pressure_down
cost_any:
  - false_clean_prediction_up
  - harmed_reader_hostility_up
future_effect_any:
  - forecast_miss_default_armed
  - future_recovery_cost_up

Default assertion

selected_posture: default_clean_prediction
forecast_state_after: false_clean_prediction
emitted_event: storyteller.event.forecast_miss_default.v1
future_effect_any:
  - public_addendum_required
  - lawful_recheck_required
  - sponsor_gate_required
  - route_costlier
  - blocked
  - recovery_only
  - contradiction_pending

Replay evidence shape

lens_id: storyteller.lens.risk_forecast_commitment.v1
result: pass | fail
session_id: lens-risk-forecast-commitment-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_decision_present: true
  decision_uses_forecast_as_justification: true
  forecast_would_change_branch_or_route: true
  predicted_surface_visible: true
  no_fixed_turn_trigger: true
docket:
  card: storyteller.card.risk_forecast_commitment_docket.v1
  forecast_id: <stable id>
  source_decision: <decision>
  predicted_surface: <surface>
  projected_claim: <claim>
  forecast_owner: <owner or explicit_absence>
  beneficiary_if_silent: <actor or explicit_absence>
  harmed_if_wrong: <reader or explicit_absence>
  future_check_surface: <surface or explicit_absence>
review:
  rite: storyteller.rite.risk_forecast_commitment_review.v1
  selected_posture: certify_forecast | publish_range | hedge_reserve | attach_dissent | delay_until_reading | suppress_forecast | default_clean_prediction
  assigned_inputs:
    handler_or_absence: <handler or explicit_absence>
    proof_basis_or_absence: <basis or explicit_absence>
    reserve_or_absence: <reserve or explicit_absence>
    dissent_or_absence: <dissent or explicit_absence>
outcome:
  forecast_state_after: forecast_certified | range_published | reserve_hedged | dissent_attached | decision_delayed | forecast_suppressed | false_clean_prediction
  event_seen_or_armed: storyteller.event.forecast_miss_default.v1 | none
  future_route_effect: <effect>
  counter_deltas:
    relief:
      - <relief>
    cost:
      - <cost>
    future:
      - <future effect>
assertions:
  entry_is_state_triggered: true
  forecast_changes_branch_or_route: true
  docket_row_concrete: true
  forecast_posture_is_concrete: true
  branch_families_diverge: true
  constructive_branch_has_relief_cost_and_future_effect: true
  hidden_or_underfilled_forecast_defaults: true
  future_surface_consumes_forecast_state: true
  no_invisible_probability_unlock: true
  no_fixed_turn_day_week_raw_forecast_count_dashboard_or_lens_health_trigger: true

Progress metric

Progress is measured by branch observability, not by number of forecast rows.

  • 20%: a decision that uses a forecast creates a concrete docket row.
  • 40%: the docket records predicted surface, owner, beneficiary, harmed reader, and future check.
  • 60%: the review offers at least five non-equivalent forecast postures.
  • 80%: at least one constructive branch and one suppressed/default branch produce divergent future route effects.
  • 100%: replay proves a future surface consumes the forecast state or forecast miss default with counter deltas.

Failure cases

The lens must fail if any are true:

  • a route unlocks from probability alone;
  • forecast entry is fixed-turn, fixed-day/week, dashboard, lens-health, or raw-count driven;
  • source decision is unnamed;
  • predicted surface is hidden;
  • forecast owner, beneficiary, harmed reader, or future check is missing without explicit absence;
  • certify, publish, hedge, dissent, delay, suppress, and default collapse into the same state;
  • positive branches have no cost;
  • suppression does not arm a miss default;
  • forecast miss changes only flavor or score;
  • replay evidence lacks forecast id, selected posture, future check, route effect, and counter deltas.

Non-goals

  • Not a forecasting UI.
  • Not a probability calculator.
  • Not a generic risk dashboard.
  • Not a fixed planning phase.
  • Not a governance page.
  • Not a raw lens-count satisfier.
  • Not valid unless forecast commitment changes future play.