Route Discontinuance Register Lens / 路线停办登记 Lens

This lens observes whether Route Discontinuance Register turns one residual route stop into executable Storyteller state. A passing implementation must earn the D17 completion and company-cleanup pending flags through play, begin from one unselected source row, require a full twelve-card disposition, and materialize the downstream salvage-floor row only through the exact notice-pause result.

Fixed crossread oracle

upstream:
  rite: storyteller-rite-d17-lost-and-found-night
  required_completion_flag: complete_storyteller-rite-d17-lost-and-found-night
  choice: accept_company_lost_property_transfer
  pending_flag: storyteller_d17_company_cleanup_pending
  row_id: transfer.company_cleanup.d17
  surface: route_asset_custody
  route_or_asset: route.d17.lost_property_night
  state: company_cleanup_transfer_open
fixedSourceRow:
  row_id: route-discontinuance.d17.company_cleanup_open
  discontinuance_pressure: sponsor_capture
  partial_viability: viable_with_public_notice
  claimant: public_fan
  harmed_reader: public_fan
  carrier_before: card-storyteller-shen-mansheng
  handler: producer
  proof_bridge: public_notice
  selected_posture: unselected
  state_after: pending_selected_posture
  future_reader: memorial_receipt_route
  future_effect: pending_selected_posture
noticePauseMaterialization:
  row_id: route-discontinuance.d17.public_pause
  source_row_id: route-discontinuance.d17.company_cleanup_open
  selected_posture: notice_pause
  state_after: paused_under_notice
  carrier_after: public_table
  salvage_floor_after: public_notice
  future_reader: memorial_receipt_route
  future_effect: public_only
  required_runtime_flags:
    - route_discontinuance.branch.notice_pause
    - route_discontinuance.state.paused_under_notice
    - future_route.public_only
downstreamConsumer:
  card: storyteller.card.salvage_floor_docket.v1
  row_id: floor.public_notice.d17
  discontinuance_register_row: route-discontinuance.d17.public_pause
  expected_source_state_after: paused_under_notice
  future_route: memorial_receipt_route
  eligible_only_when_branch: notice_pause

The two rows are not aliases. The source row carries unselected / pending_selected_posture; the public-pause row is an output visible only with all three notice-pause flags. The seven other branch results must not expose it. The lens also fails if any stable ID is replaced with a replay session, timestamp, generic “D17 route,” thematic tag, or inferred linkage. Session IDs remain evidence provenance only.

Must pass

1. Exact runtime packet

The implementation owns exactly three runtime source files under game-content/storyteller: route-discontinuance-register.json5, route-discontinuance-review.json5, and unregistered-discontinuance-default.json5. Every object must use source: storyteller; source and all three public Storyteller rollups must agree.

The card packet contains exactly twelve starter assignment cards plus one default-only counterreceipt. The starter slot order is:

IndexSlotExact card ID
0registerstoryteller.card.route_discontinuance_register.v1
1source_rowstoryteller.card.route_discontinuance_source_row.v1
2route_or_assetstoryteller.card.route_discontinuance_route_or_asset.v1
3discontinuance_pressurestoryteller.card.route_discontinuance_pressure.v1
4partial_viabilitystoryteller.card.route_discontinuance_partial_viability.v1
5claimantstoryteller.card.route_discontinuance_claimant.v1
6harmed_readerstoryteller.card.route_discontinuance_harmed_reader.v1
7carrier_anchorstoryteller.card.route_discontinuance_carrier_anchor.v1
8handlerstoryteller.card.route_discontinuance_handler.v1
9proof_bridgestoryteller.card.route_discontinuance_proof_bridge.v1
10salvage_floorstoryteller.card.route_discontinuance_salvage_floor.v1
11future_readerstoryteller.card.route_discontinuance_future_reader.v1

Each slot accepts only its matching card, and every assigned card must be present in hand. storyteller.card.unregistered_discontinuance_counterreceipt.v1 cannot appear in the starter hand or satisfy a slot.

2. Strict resolution

The review is one-shot. Missing, substituted, off-hand, or incomplete assignments; an omitted choice; and a repeated attempt must all fail without setting any default-pending flag or granting the counterreceipt.

Only a fully assigned review with an explicit valid choice can mutate state.

The rite also requires complete_storyteller-rite-d17-lost-and-found-night and storyteller_d17_company_cleanup_pending. Replays must obtain them by executing D17 choice index 1 and resolving storyteller.event.shen_mansheng_company_custody_window.v1 before the target review; seeded prerequisite flags do not satisfy replay evidence.

Expiry has the exact consequence unresolved_review_remains_visible_without_arming_default, with expiryArmsDefault: false. It keeps route-discontinuance.d17.company_cleanup_open unresolved and visible but cannot select a posture, arm the event, grant the counterreceipt, or materialize the public-pause row.

3. Eight ordered branches

The rite must expose exactly these ordered branch IDs:

branches:
  0: registered_stop -> registered -> blocked_with_notice
  1: notice_pause -> paused_under_notice -> public_only
  2: transfer_carrier -> transferred -> carrier_required
  3: convert_recovery_only -> recovery_only -> recovery_only
  4: public_abandonment -> publicly_abandoned -> public_audit_required
  5: private_suppression -> privately_suppressed -> hostile_if_challenged
  6: reopen_with_bond -> reopened_with_bond -> bond_required
  7: unregistered_default -> default_pending -> unregistered_discontinuance_pending

Each branch must write one distinct branch/state/future result. The lens fails if the branches are prose aliases or if all readers accept the same clean disappearance.

Choice 1 alone must materialize route-discontinuance.d17.public_pause. floor.public_notice.d17 is eligible only when the exact branch/state/future flags are notice_pause, paused_under_notice, and public_only. Each of the other seven branches must leave the public-pause row absent, even when it preserves a local proof or salvage candidate.

4. One explicit default gate

Only branch unregistered_default, choice index 7, may arm storyteller.event.unregistered_discontinuance_default.v1. Choices 0 through 6 clear pending state.

private_suppression is a registered but narrow and risky posture in runtime v1. It does not arm the event. The lens fails if Wiki or code preserves the old draft claim that private suppression itself defaults.

5. Six exclusive terminals

The event must expose exactly these six terminal IDs:

terminals:
  - sponsor_clean_cancellation -> captured -> sponsor_only
  - inspector_lawful_stop -> lawful_only -> lawful_appeal_required
  - archive_absence -> blocked -> public_addendum_required
  - public_abandonment_claim -> public_only -> fan_refund_required
  - operator_betrayal -> hostile -> carrier_required
  - broadcast_reality_erasure -> recovery_only -> ending_scar_pending

Every terminal clears all pending state, writes one terminal/state/future result, and grants the default-only counterreceipt. The counterreceipt preserves the narrator and scar; it is not authority to erase, own, settle, or reopen the route.

6. Deterministic replay evidence

lens/replays/route-discontinuance-register.notice-pause.replay.json must prove:

  • D17 choice index 1 and the Shen Mansheng custody event establish both source-gate flags before target review;
  • all twelve exact starter cards are held and assigned;
  • target choice index 1 resolves notice_pause;
  • the default event remains unavailable;
  • the counterreceipt is absent;
  • the pending source row remains inspectable;
  • only this branch materializes the public-pause row with all three downstream eligibility flags.

lens/replays/route-discontinuance-register.broadcast-erasure.replay.json must prove:

  • the same played D17 and Shen prerequisites;
  • the same exact assignment packet;
  • target choice index 7 resolves unregistered_default and arms the event;
  • the public-pause row remains absent;
  • the event resolves broadcast_reality_erasure;
  • every pending flag clears;
  • the broadcast-reality terminal/state/future scar persists;
  • the event-only counterreceipt is gained;
  • the upstream choice and pending source row remain inspectable.

7. Evidence topology

The binding, evaluator, focused runtime test, two replay artifacts, five Wiki canon pages, three source files, and three public rollups must name the same lens, objects, branch order, default gate, and crossread.

Required public evidence:

  • public/data/storytellerCards.json5
  • public/data/storytellerRite+nodes.json5
  • public/data/storytellerEvent+nodes.json5

Authority stays local

The packet can record only the fixed route’s source, selected discontinuance posture, claimant, harmed reader, carrier, handler, proof candidate, branch-qualified salvage floor, default narrator, and downstream reader. It cannot grant consent, ownership, waiver, settlement, legal validity, proof truth, sponsor authority, inspector authority, archive authority, operator guilt, salvage title, route clearance, universal broadcast truth, or clean universal disappearance.

Fail conditions

The lens fails if:

  • the lane opens from fixed chronology, raw count, dashboard state, or lens health;
  • the completed D17 source rite/choice or company-cleanup pending flag is missing, seeded instead of played in replay evidence, or replaced with session identity;
  • any starter slot is optional, accepts a substitute, or accepts an off-hand card;
  • the counterreceipt starts in hand;
  • branch order or IDs drift;
  • any choice other than index 7 arms default;
  • expiry arms default or hides the unresolved source row;
  • private_suppression is documented or implemented as default-arming;
  • default terminals overlap, retain pending flags, or omit the counterreceipt;
  • the static source row preselects notice_pause or a completed state;
  • any branch other than notice pause exposes route-discontinuance.d17.public_pause;
  • notice pause lacks one of its exact branch/state/future flags or cannot be consumed by storyteller.card.salvage_floor_docket.v1;
  • broadcast erasure becomes clean universal disappearance;
  • source, public, test, evaluator, replay, Wiki, and binding evidence disagree.

Progress metric

routeDiscontinuanceRegisterProgress = 0..10:

  • 0: route vanishes or remains prose.
  • 2: played source gate and pending source row exist.
  • 4: twelve exact starter assignments and event-only counterreceipt are enforced.
  • 6: all eight branch IDs and strict failure paths are tested.
  • 8: one-choice default gate and six terminal repairs are tested.
  • 9: notice-pause-only materialization and downstream crossread are exact.
  • 10: source/public/test/evaluator/binding and both deterministic replays agree.