Route Tag Momentum Collision Lens / 路线标签动量撞车 Lens

This lens observes whether 路线标签动量撞车线 makes accumulated route tags executable before a future route, character gate, forced main, card pool, or ending consumes them.

The passing implementation proves that route momentum is not a hidden route affinity score. It must preserve source rows, scopes, scars, conflicting families, and future reader effect.

Observable promise

A passing implementation must show:

  • at least two source broadcast or legacy rows;
  • at least two conflicting route families;
  • route tag and route tag scope for each source row;
  • scar, cost, rejected reader, or explicit absence for each row;
  • dominant route claim and claiming reader;
  • selected review posture;
  • momentum state before and after;
  • harmed or deferred reader;
  • future reader or route effect;
  • durable default when raw counts or hidden rows create false dominance.

The lens fails if the game records only route score, affinity, dominant route, tag total, ending unlocked, or route progress.

Entry oracle

entry_state_required:
  trigger_kind: state_pressure
  accumulated_route_tags_visible: true
  source_broadcast_or_legacy_rows_min: 2
  conflicting_route_families_min: 2
  dominant_route_claim_visible: true
  future_reader_or_route_consumes_momentum: true
  prior_route_tag_scars_visible_or_explicit_absence: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_route_tag_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens must fail if entry is driven by fixed turn number, day/week interval, chapter quota, raw route tag count, dashboard state, lens health, or generic ending readiness.

Ledger oracle

Route Tag Momentum Ledger or equivalent must record:

docket_required:
  source_broadcast_or_legacy_rows:
    - row_id: <stable row id>
      source_surface: on_screen_slot_readback | weekly_broadcast_cycle_audit | ending_scar_ledger | explicit_absence_register | broadcast_reality_drift | equivalent
      route_tag: company | intimacy | liquidation | resistance | chaos | public_only | lawful_only | sponsor_captured | blackout_fold | recovery_only | equivalent
      route_tag_scope: public | lawful | sponsor | archive | character | route_asset | ending | explicit_absence | equivalent
      scar_or_cost: <scar cost debt contradiction or explicit_absence>
      reader_that_accepted: <reader or explicit_absence>
      reader_that_rejected_or_absence: <reader or explicit_absence>
      future_claim: <route character forced main deck ending or explicit_absence>
  dominant_route_claim:
    claimed_route_family: company | intimacy | liquidation | resistance | chaos | equivalent
    claiming_reader: forced_main | character_gate | deck_unlock | route_asset | ending_reader | sponsor | public_table | equivalent
  conflicting_route_families:
    - <family>
  momentum_state_before: <state>
  selected_posture: bind_dominant_route | split_route_momentum | convert_route_tag | quarantine_false_momentum | spend_momentum_with_scar | publish_route_addendum | false_route_momentum_default
  momentum_state_after: <state>
  harmed_or_deferred_reader: <reader or explicit_absence>
  future_reader_or_route_effect: <effect>

Rite oracle

Route Tag Momentum Review or equivalent must expose:

  • bind_dominant_route
  • split_route_momentum
  • convert_route_tag
  • quarantine_false_momentum
  • spend_momentum_with_scar
  • publish_route_addendum
  • false_route_momentum_default

Each branch must include relief_any, cost_any, and future_effect_any.

Default oracle

False Route Momentum Default must record:

false_route_momentum_default:
  false_momentum_claim:
    claimed_route_family: <family>
    claiming_reader: <reader>
    raw_tag_count_or_hidden_row_used: true
  hidden_or_ignored_inputs:
    source_broadcast_or_legacy_row: <row id or explicit_absence>
    conflicting_route_family: <family or explicit_absence>
    scar_or_cost: <scar cost debt contradiction hidden or explicit_absence>
    rejected_reader: <reader or explicit_absence>
  momentum_state_after: false_dominant | sponsor_captured | hostile_split | blackout_fold | recovery_only | contradiction_pending | equivalent
  future_reader_effect: blocked | costlier | contradiction_pending | addendum_required | ending_scar_required | hostile | recovery_only | equivalent
  counter_deltas_min: 3

The default fails if it is only a route score correction, morale loss, generic drift tick, or UI warning.

No raw-count route dominance

No branch may convert raw tag counts, hidden source rows, or unpriced scars into clean universal momentum.

Required evidence:

no_raw_count_route_dominance:
  source_rows_preserved: true
  conflicting_route_families_visible: true
  scar_or_cost_preserved_or_explicit_absence: true
  raw_route_tag_count_not_sufficient: true
  route_tag_after_not_clean_universal_when_inputs_conflict: true
  future_reader_effect_not_clean_universal: true

Progress metric

  • 0: no accumulated route momentum surface.
  • 1: storyline, mechanism, ledger, rite, event, lens, and sibling binding exist.
  • 2: entry requires state pressure from visible accumulated route rows and future consumption.
  • 3: ledger records source rows, route tags, scopes, scars, dominant claim, conflicts, and future reader.
  • 4: review branches diverge by scope, split, conversion, quarantine, scar spend, addendum, or default.
  • 5: false route momentum default records hidden or ignored inputs and mutates future play.
  • 6: raw route tag count cannot create clean universal momentum.

Replay evidence expectation

lens_id: storyteller.lens.route_tag_momentum_collision.v1
session_id: lens-route-tag-momentum-collision-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  accumulated_route_tags_visible: true
  source_broadcast_or_legacy_rows_min: 2
  conflicting_route_families_min: 2
  no_raw_route_tag_count_trigger: true
offered:
  card: storyteller.card.route_tag_momentum_ledger.v1
  rite: storyteller.rite.route_tag_momentum_review.v1
branch_runs:
  scoped_success:
    selected_posture: bind_dominant_route | split_route_momentum | convert_route_tag | quarantine_false_momentum | spend_momentum_with_scar | publish_route_addendum
    momentum_state_after: <state>
    future_reader_or_route_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default:
    selected_posture: false_route_momentum_default
    event_seen_or_armed: storyteller.event.false_route_momentum_default.v1

Non-goals

  • Not a route score lens.
  • Not an ending picker.
  • Not a replacement for single-broadcast slot readback.
  • Not valid if raw tag count can unlock a future route without source rows, scars, conflicting families, and future reader effect.