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_pauseThe 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:
| Index | Slot | Exact card ID |
|---|---|---|
0 | register | storyteller.card.route_discontinuance_register.v1 |
1 | source_row | storyteller.card.route_discontinuance_source_row.v1 |
2 | route_or_asset | storyteller.card.route_discontinuance_route_or_asset.v1 |
3 | discontinuance_pressure | storyteller.card.route_discontinuance_pressure.v1 |
4 | partial_viability | storyteller.card.route_discontinuance_partial_viability.v1 |
5 | claimant | storyteller.card.route_discontinuance_claimant.v1 |
6 | harmed_reader | storyteller.card.route_discontinuance_harmed_reader.v1 |
7 | carrier_anchor | storyteller.card.route_discontinuance_carrier_anchor.v1 |
8 | handler | storyteller.card.route_discontinuance_handler.v1 |
9 | proof_bridge | storyteller.card.route_discontinuance_proof_bridge.v1 |
10 | salvage_floor | storyteller.card.route_discontinuance_salvage_floor.v1 |
11 | future_reader | storyteller.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_pendingEach 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_pendingEvery 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
1and 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
1resolvesnotice_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
7resolvesunregistered_defaultand 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.json5public/data/storytellerRite+nodes.json5public/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
7arms default; - expiry arms default or hides the unresolved source row;
private_suppressionis documented or implemented as default-arming;- default terminals overlap, retain pending flags, or omit the counterreceipt;
- the static source row preselects
notice_pauseor 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.