当前标准:journey-map.v2
情景训练首页只展示一个故事集:
旅日模拟器。故事内按五个主线日章纵向展开,完成当天一条完整路线即可解锁次日;
回溯其他选择会逐渐补全当天地图,五个主线日章全部掌握后才显示“主线全图已解锁”。Journey 与 Scenario 的边界
Journey 负责跨地点剧情、日章解锁、选择、固定事件和少量跨场景事实;Scenario 仍只负责一个地点、一个主要 NPC 的对话与物理动作。 Agent 不接收 Journey 跳转能力,客户端也不能提交跨节点上下文。Scenario Session 通过journey_run_id + journey_node_id 与一个节点唯一绑定,不能复用自由练习、旧周目或另一日章的 Session。
需要开口的咨询、票务、购物、用餐、预约、寄存和异常处理使用 Scenario;普通乘车、步行、参观、扫码、过闸和时间流逝使用
Event。学习者拥有的移动、递交、支付、装袋、开箱、领取凭证等物理行为继续在 Scenario 内用 Scene Action 表达,不能由台词替代。
模板、日章与编译门
唯一发布模板为:main Chapter 和一个主线完成后解锁的 extra Chapter。每个 Chapter 固定声明
chapter_id、类型、日序、四语言背景、安排、目标、提示、入口节点、结局节点和确定性的完成上下文更新。未来日章在解锁前只公开
匿名 chapter_key、日序和锁定状态,不返回标题、剧情、节点数或分支数。
节点仍分为 choice | scenario | event | ending,并属于且只能属于一个 Chapter。节点可按
progress_scope: core | optional | challenge 区分主线、正常支线和突发挑战,并保留作者指定的行、列布局。
边可以属于独立的探索分组并声明是否计入掌握;跳过可选支线的边不计入掌握。Chapter 之间不使用普通边连接,次日解锁由前一日
完成状态决定。
导入前必须在内存中编译整批候选,拒绝:
- 重复或悬空节点/边、环、跨 Chapter 边、错误入口或结局;
- 不能在实际条件下从入口到达结局、互相重叠的选择条件,或具有多出口的 Event;
- 无效上下文类型、枚举、Scenario Slot 输入/输出映射;
- published Journey 引用不存在、draft 或 retired 的 Scenario;
- 非法布局、未覆盖的 Choice 选项,以及不能确定性选出下一节点的路径。
日章推进、探索与回溯
Run 固定到一个chapter_id。同一用户、同一故事最多有一个活动 Run;进入故事详情不会自动创建 Run,开始、继续、重玩或回溯都由
用户显式触发。
完整到达日章 Ending 的 Run 才会:
- 解锁下一主线日章;
- 将本周目完成的节点和边并入该日章的累计探索;
- 保存可用的 Choice 或多出口 Scenario 检查点。
ended_early、失败提交和 CAS 冲突不会永久解锁内容。重玩某个已发现的检查点时,服务器从该日章最近一次完整周目
恢复节点首次成为 current 时的上下文和前缀,但创建全新的 Scenario Session。已解锁的后续日章不会因前日重玩而撤销。
掌握按独立选择边覆盖计算,不计算路线的笛卡尔积:
- 选择一条主路线并完整通关即可完成当天、解锁次日;
- 计入掌握的正常支线必须至少走过一次;“跳过支线”不增加总分支数;
- 行李损坏、房卡故障等
challenge独立收集,不强迫玩家反复制造事故; - 五个主线 Chapter 都 mastered 后,故事显示“主线全图已解锁”;箱根番外不计入
5/5。
current、completed、discovered 和 locked。锁定节点只返回匿名 map_key 与当前日章布局,锁定边只返回匿名端点;
标题、简介、节点类型、Scenario 引用、选项、边标签和条件都不能泄露。回溯只接受服务器已经返回的可用检查点标识,猜测内部节点 ID
统一按不可用处理。
公开 API
| 接口 | 用途 |
|---|---|
GET /api/journeys | 返回故事集摘要、主线完成/掌握进度和活动日章 Run |
GET /api/journeys/{journey_id} | 返回已解锁日章摘要、匿名未来日锁、最近完成 Run 与活动 Run |
POST /api/journey-runs | 以 journey_id + chapter_id 创建/恢复 Run,可带已下发的节点 ID 与 checkpoint token 回溯 |
GET /api/journey-runs/{run_id} | 读取本周目路线、历史发现、匿名锁定轮廓和回溯点 |
POST .../nodes/{node_id}/advance | 推进当前 Choice 或单出口 Event |
POST .../nodes/{node_id}/start | 创建/恢复与当前 Journey 节点精确绑定的 Scenario Session |
POST .../nodes/{node_id}/settle | 验证绑定 Session 为 passed,提取白名单 Slot 并确定下一节点 |
active_run_id、active_chapter_id、completed_main_chapter_count、total_main_chapter_count 和
main_story_mastered。已解锁日章另返回自己的 active_run_id、latest_completed_run_id、探索统计及挑战完成数;Run 本身固定返回
chapter_id 和该日章的标题、背景、安排、目标与提示。普通创建不带回溯字段;回溯必须同时提交服务器下发的
replay_from_node_id + replay_checkpoint_token。
每次 mutation 都携带 request_id 与 expected_run_version。相同 ID 与相同请求返回原结果,相同 ID 配不同请求返回幂等冲突;
过期版本返回 CAS 冲突。跨用户与不存在的 Run 统一返回 404 journey_not_found。Controller 调用 Data Server 时使用独立服务凭证,
不把用户 JWT 当作 Controller 身份。未知或未解锁日章返回 404 journey_chapter_unavailable;未同时提供回溯节点和 token、token 过期,
或检查点不属于当前用户/故事/日章时统一返回 409 journey_replay_unavailable。
跨日事实只由服务器从最近一次完整通关生成。第二日保存遗失路线、方向、时段、车厢位置与物品描述,并写入
lost_property_status=reported;第四日完成晚间打包与免税品位置盘点后写入 parcel_status=prepared;第五日据此生成通知、领取、寄件和机场核对剧情。客户端不能伪造这些事实。
五日故事内容
以下情节都存在于当前 v2 路线图。其中标明为 Choice/Event 的第一版节点已承载完整旅游动机和因果,但不代表已完成深度 Agent 对话;后续可在不改变日程结构的前提下升级为 Scenario。第二至第四日的路线 Choice 显示主题、代表地点和步行/体力强度,便于按兴趣与当天状态选择。第四日顶层 Choice 明示镰仓、横滨均为整日高体力路线:镰仓户外步行较多且海岸受天气影响,横滨仍有港区步行但室内替代较多。 这一不可变故事固定发生在 2026-10-16~2026-10-20,故事内所有购物均早于 2026-11-01。第一日 · 抵达东京
从成田 T1 或羽田 T3 入境后,共用行李状态 Choice:正常取回、通过 Scenario 报告已取回但破损的行李,或通过 Event 追查到较晚开启的相邻转盘并亲自取回。 两个机场再共用联网 Choice,在“已可联网”和“按当日方案向柜台求助”的 Event 之间选择,然后咨询 N’EX、Skyliner、京急或东京单轨路线并完成票证确认。 抵达新宿后询问出口、提前寄存行李,并按现场实际提供的自助锁定、钥匙、标签、前台记录或本人核验机制完成寄存和领取;玩家保管实际凭据,不预设必有纸质寄存牌。随后在 7-Eleven 或 Gusto 午饭。15:00 前可休息、轻游花园神社,或在伊势丹地下食品层询问礼物的保存、过敏原和包装。 若行李或联网处理将arrival_timing 写为 delayed,条件边会绕过下午 Choice,直接进入休息并跳过花园神社与伊势丹兴趣点。最后完成東横INN新宿歌舞伎町入住,通过房卡正常/失效求助 Choice/Event,亲自带行李进入房间。
第二日 · 东京初印象
- 西东京:明治神宫参拜与御朱印、御守、神宫纪念品、Forest Terrace 午餐、原宿角色礼物,以及使用故事中已取得的 SHIBUYA SKY 当日指定时段票确认入场时间、寄存规则、天气限制和当天开放区域。
- 东东京:在上野公园散步和东京国立博物馆当日开放/摄影标识确认之间做 Choice(首版为 Event),再进入浅草观光咨询、浅草寺参拜、可选授与所、仲见世人形烧/雷おこし、晴空塔票务和 Solamachi 一人用餐 Event。
- 中央东京:东京站与 GRANSTA、皇居区域、丸之内忌口用餐、银座百货礼物、适用日期的免税流程和木村家面包支线。
第三日 · 兴趣主题游
- 东京湾:预约 teamLab 与台场海景是共同核心。顶层 Choice 先选“增加筑地市场文化段”或“从新宿直达艺术与海景核心”。市场线内再在确认营业的小店早餐和有“市场守护”动机的波除神社文化 Event 之间选择;只有已有具体收礼对象且确认店铺营业时才进入筑地礼物 Scenario,否则跳过购物。固定故事日 2026-10-18 为丰洲休市日,不安排公开见学,市场线保留预约与体力余量后继续前往 teamLab;直达线跳过筑地与丰洲市场段。两线在预约 teamLab 汇合,再进入台场用餐和百合海鸥线中断求助。
- 秋叶原:先选择有电器街守护、IT 祈愿/动漫联动动机的神田明神文化支线,或直接前往电器街;汇合后再选新品/中古手办并处理盒损、缺件、限购和适用日期的免税/普通结账。午饭休息后,先独立选择是否体验扭蛋,再独立选择是否因寻找指定漫画、画集、作者或旧版书而前往神保町;神田明神与神保町均为有明确动机的独立可选支线。
- 吉祥寺·三鹰:故事明示玩家已持有 10:00 的三鹰之森预约并在 09:45 前抵达,随后完成交通与寄存、摄影规则、草帽咖啡馆、井之头公园及武藏野伴手礼。
- 新宿轻量路线:新宿御苑带当日不可用时的替代 Event,之后是百货手信、用餐休息、地下通道绕行和都厅展望室。只有玩家确有轻微不适,或需要确认产品能否与正在服用的药同用时,才进入药妆店咨询;需要和不需要药妆帮助的两路都会汇入酒店设施 Choice,再选择洗衣/设施求助 Event 或直接休息。
第四日 · 古都与港都
顶层 Choice 将镰仓标为“整日高体力·户外/海岸天气敏感”,将横滨标为“整日高体力·港区步行/室内替代较多”,让玩家在进入内层路线前先判断全天负荷与天气适配。- 镰仓:先由车站交通 Scenario 比较三条并列主题。寺社文化线包含报国寺、鹤冈八幡宫、当地午餐、鸠サブレー/豆菓子选择、可选长谷寺与大佛;江之电海岸·江之岛线经镰仓高校前到海岸,在江之岛之前设置真实 Choice,可按天气和体力继续登岛,或留在腰越/片濑海岸,两路随后汇合到海岸午饭与地方礼物;首访经典混合线以鹤冈八幡宫/小町通、大佛与便携礼物、公共海岸短停收束。海岸和混合线首版为 Event。
- 横滨:Suica 余额不足、港湾路线、杯面博物馆 Scenario/港口历史 Event、红砖仓库地方礼物,再选中华街点心 Scenario 或锚定山下公园/日本大通区域的横滨发祥西餐 Event;晚间显式选择山下公园—红砖仓库—樱木町港湾夜景步行并进行返程咨询,或直接前往最近车站。
parcel_status=prepared。随后以
story_date=2026-10-19、tax_free_rule_profile=purchase_tax_exemption_until_2026_10_31 和
tax_free_goods_location=none|carry_on|checked|mixed 盘点免税品位置。这只是事实记录,不计入 mastery,也不要求玩家制造四种装箱状态。
第五日 · 把东京带回家
故事内电子票不绑定真实航班号,固定 18:30 起飞返回上海浦东;18:30 不是登机时间。玩家必须先吃基础早餐并补水,再准备一份不依赖东京站排队的便携零食;携带与食用服从场所、交通和安检规则,这些补给不占东京站余量。随后核对票面并选择本周目从成田 T1 或羽田 T3 出发,再完成酒店退房与当日寄存询问。寄存和取回按现场实际提供的钥匙、标签、记录或本人核验机制完成,不预设必有纸质凭据。出发前按当日门店目录或酒店信息确认指定门店仍承办普通常温宅急便;本故事确认后才前往西新宿 Oak Terrace 店完成寄件,紧接的固定 Event 将parcel_status 写为 shipped,而不是等到取大行李时才切换。当前图不包含门店拒收后的 fallback 分支;若现实核验发现该店不承办,本日计划必须先改用另一个已确认承办网点。取回大行李时优先电梯与无台阶路线;移动变慢就跳过附加活动,随后完成东京站遗失物核验。
若 12:40 前完成领取,最多可用 20 分钟在 GRANSTA 补买同事/家人礼物、简单用餐或直接出发;若已接近 13:30,只能直接前往机场。玩家必须在 13:30 前离开东京站、15:30 前抵达机场。到达正确机场和航站楼后,先按第四日盘点,在交付托运行李前完成适用的免税品/海关核对,再进行航空公司值机托运与超重/充电宝处理、安检与出境;必要时进入安检指令确认挑战。
只有显示仍有至少 45 分钟登机余量且不影响 17:40 前到达门区时,才可购买机场土产,否则直接候机;处理登机口变化后,按当日登机牌显示的时间实际登机,并于 18:30 起飞。航站楼、柜台、行李额度、班次和登机口只读取故事票面与当天显示。
五日完成后解锁“箱根·在日留学生篇”。它继续使用在日本有住址的留学生角色,明确不是本次首次赴日游客,也不计入主线完成或掌握。
真实原型来源
Journey 只使用来源能够支持的稳定动线;门店库存、营业、服务可用性和现场规则继续由具体 Scenario 的来源账本与当日可见信息限定。 核心原型包括成田国际到达与 国际出发、 羽田 T3 到达与 国际出发、 明治神宫参拜、御朱印与御守、 东京购物区域指南、 三鹰之森预约票、 镰仓首次到访路线、 镰仓公共空间礼仪和 横滨官方行程。当前不可变 v2 只采用 日本观光厅制度说明中适用于这组 2026 年 10 月固定日期的购买时免税规则,不同时动态建模 2026-11-01 后的 refund 制度。未来制度剧情必须发布新的不可变 Journey 版本,不能只替换知识包。Flutter 表现与版本清理
情景训练首页仅显示一个最大宽度约 900 px 的“旅日模拟器”卡片。故事页以五个DayChapterCard 纵向连接:当前日展开,已完成日可
折叠,未来日显示紧凑锁牌。日卡先展示剧情背景、早中晚安排、目标与提示,再展示该日独立路线图。宽屏图可缩放,平板使用覆盖式
详情层,手机按日和行投影为纵向时间线,同排分支横向分页。
CustomPainter 只绘制箭头;节点由 Material/PhysicalShape 承担形状和阴影。当前节点使用浅色填充、3 px 轮廓和焦点环,节点高度
随内容增长,标题最多两行,详情可滚动。锁定文本不进入 Widget 树或 Semantics;主线、正常支线和突发挑战有不同线型与可访问标签。
v2 启用时,在整批编译成功后的同一事务中删除旧 first_trip_tokyo_day1、tokyo_travel_side_stories 模板及其 Run、节点提交、
检查点和精确绑定 Session;只清理被最新版取代的 Scenario v1 数据。旧探索不迁移。账号、文章、收藏、生词本、画像及无关 v2/v3
数据不在清理范围。