跳转到内容

8. 理解并迁移旧版 0.2 Pack

这是独立的迁移练习,不是 VN Pack 的下一次修订。下载本课的 start(0.2 宿主配置,修订 20)和 finished(0.3,修订 21)。它们描述同一个温室情境。之后的发布练习会回到第 7 课的作品分支。

旧版 Pack 将读者命名为角色 visitor,在 actors 中声明 Rowan,在 canon 中记录初始干燥土壤,并提供 shared_care 事件卡。入口连接出场角色、已确立事实与读者已知事实。experience 描述角色扮演约定;instructions 是对象,与 0.3 的字符串形式不同。

使用本站确切的 0.2 宿主配置 Schema。便携 Playground 的 0.2 Schema 可能不同。新的教学校验器支持附带的宿主快照,但不能取代旧版服务的准入审核。来源记录保留 proposed,因此示例有意保持未达到准入条件的状态。

0.2 概念 本练习在 0.3 中的处理
actors 与参与者 persona Rowan 变成角色读者卡;读者自主性与 Rowan 的行为写入 instructions
公开的初始 canon 事实 dry_soil 变成始终选取的公开内容块,表述为到来时的事实
event_cards.shared_care 已完成照料的观察答案、状态更新规则与引导;不强制结果
opening_text entries[].opening 的段落列表,以及准确的对话标注
入口角色与知识关系图 明确的指令、公开内容与稳定入口/卡片 ID;不是直接复制关系图

完成稿有意把照料重新设计为可重复的状态增量,上限为 2;旧版事件则只能发生一次。这是作者选择的行为变化,不是自动向后兼容。干燥土壤的历史事实在浇水后仍然成立,因为它说的是土壤在到来时很干。当前湿润度则由状态表达。

对照两份完整 JSON,在身份含义未变的地方保留 pack_id、arrival 和 rowan。移除过时的旧版结构,不要将它们留在新协议旁边。拆分文字后重新计算段落摘要,将新修订号设为 21。

分别校验 start/pack.json 与 finished/pack.json,工具会选择各自对应的确切 Schema。试着只修改起始稿的 protocol_version,它应当失败;随后撤销这次实验。手动检查隐私和知识假设:本练习只有公开事实,没有展示秘密信息的迁移。

真实迁移时保留备份,记录有意改变的行为,执行服务语义检查,并私下重放重要选择。已有旅程保留原来的 Pack 修订;发布新修订并不会自动迁移它们的保存状态。

在本地检查作品

在解压目录中创建环境并安装一次固定版本的依赖,然后检查两份文件。修改之后再次检查起始稿。每课都可以使用相同命令。

macOS / Linux

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python check.py start/pack.json
.venv/bin/python check.py finished/pack.json

Windows PowerShell

py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe check.py start/pack.json
.venv\Scripts\python.exe check.py finished/pack.json

完成稿的预期输出: Structural check passed: Creator Pack 0.3 随后显示确切 Schema SHA-256。这是结构检查,不代表服务准入或真实试玩通过。

完成稿中的可用片段

此片段直接取自经过检查的下载文件,并非完整 Pack。请在 start/pack.json 中修改相应字段,或对照 finished/pack.json。

{
  "legacy_canon": [
    {
      "id": "dry_soil",
      "entry_ids": [
        "arrival"
      ],
      "statement": "访客到来时,幼苗的土壤是干的。",
      "kind": "initial_state",
      "origin": {
        "basis": "creator_design",
        "source_refs": [],
        "review": "proposed"
      },
      "disclosure": "public",
      "reveal_condition": {
        "literal": true
      }
    }
  ],
  "migrated_content": [
    {
      "id": "dry_soil",
      "entry_ids": [
        "arrival"
      ],
      "text": "访客到来时,幼苗的土壤是干的。",
      "selection": "always",
      "when": {
        "op": "literal",
        "value": true
      }
    }
  ],
  "migrated_actor": {
    "id": "rowan",
    "kind": "actor",
    "display_name": "Rowan",
    "introduction": "耐心的温室照料者,还愿意为一株幼苗和一位访客留些时间。",
    "entry_ids": [
      "arrival"
    ],
    "reveal_when": {
      "op": "literal",
      "value": true
    }
  }
}

查询相关字段: content · reader_cards · runtime

下一课