跳轉到

Versioning

文件角色:implementation flow 投影;圖與步驟不得另建產品規則或參數 authority。

Implementation authority 產品 canon/流程 全域索引
versioning.md 版本規範 · 升版 流程.md §2

六欄版本

graph LR
    Offer[VersionOffer] --> Client[client_version]
    Offer --> Rapier[rapier_version]
    Offer --> Protocol[protocol_version]
    Offer --> Derive[derive_logic_version]
    Offer --> Builtin[builtin_assets_version]
    Offer --> Economy[economy_config_version]
    Client --> Gate[六欄版本與設定 digest 相容檢查]
    Rapier --> Gate
    Protocol --> Gate
    Derive --> Gate
    Builtin --> Gate
    Economy --> Gate

開賽前版本檢查

sequenceDiagram
    participant Player as Participant
    participant Room as 房間成員
    participant System as 系統

    Player->>Room: 確認 carRotation 並送 ReadyDeclaration
    Room->>System: 全 roster Ready,形成 ReadySet
    System->>Room: 請求各端驗簽並重驗實際 admitted manifests
    Room->>System: client_version + rapier_version + protocol_version<br/>derive_logic_version + builtin_assets_version<br/>economy_config_version + B 軸資產檢核

    System->>System: 比對六欄版本、設定 digest、結構與 B 軸結果

    alt 全部一致
        Room->>System: 全員 ReadySet acknowledgement
        System->>System: 起跑格 commitment/reveal<br/>建立 LockedStartPackage
        System->>Room: 複製鎖定包並啟動倒數
        Room->>Room: 倒數到期進 preloading
    else 有人不符
        System->>Room: ✗ 不接受 acknowledgement,不進倒數
        Room->>Player: 顯示更新、換件或遷移要求
    end

升版提示流程

flowchart TD
    Start([應用啟動]) --> SW[Service Worker 檢查]
    SW --> NewSW{有新 SW?}
    NewSW -->|否| Continue[繼續使用當前版本]
    NewSW -->|是| Banner[顯示「有新版」橫幅]
    Banner --> User{用戶選擇}
    User -->|立即更新| Apply[idle guard 後送 SKIP_WAITING<br/>再重整]
    User -->|稍後| Continue
    Apply --> Continue

    classDef local fill:#e8f3ec,stroke:#3f8f5f,stroke-width:1.4px,color:#173525;
    classDef ui fill:#efeafa,stroke:#7a5cb8,stroke-width:1.4px,color:#2b1d4d;
    class Apply local
    class Banner ui

大版本切割

graph LR
    subgraph V1[v1.x 玩家]
        A[玩家 A v1.2]
        B[玩家 B v1.5]
    end

    subgraph V2[v2.x 玩家]
        C[玩家 C v2.0]
        D[玩家 D v2.1]
    end

    A -.可以對戰.- B
    C -.可以對戰.- D
    A -.major 不同.-x C
    B -.major 不同.-x D

    classDef consensus fill:#fdf3df,stroke:#c08a2d,stroke-width:1.4px,color:#3d2c0d;
    classDef chain fill:#e7eefb,stroke:#3f6bb0,stroke-width:1.4px,color:#152848;
    class V1 chain
    class V2 consensus

Service Worker 生命週期

stateDiagram-v2
    [*] --> Installing: 首次訪問
    Installing --> Installed: assets 全部 cache
    Installed --> Activated: 第一次啟用
    Activated --> Idle: 服務中

    Idle --> CheckUpdate: 重新訪問 / 手動檢查
    CheckUpdate --> Idle: 無新版
    CheckUpdate --> NewInstalling: 有新 SW

    NewInstalling --> Waiting: 新 SW 等待啟用
    Waiting --> NewActivated: UI idle guard 發 SKIP_WAITING

    NewActivated --> Idle: 新版運行

升版風險決策

flowchart TD
    Change[要修改的內容] --> Type{變更類型}
    Type -->|Bug fix 不影響 deterministic| Patch[Patch v1.2.x]
    Type -->|新功能 不影響 deterministic| Minor[Minor v1.x]
    Type -->|破壞 deterministic 或 protocol| Major[Major v2.0]

    Patch --> Easy[輕鬆升版<br/>玩家同 major 相容]
    Minor --> Easy
    Major --> Hard[切割社群<br/>只保留規範定義的短寬限]

    classDef local fill:#e8f3ec,stroke:#3f8f5f,stroke-width:1.4px,color:#173525;
    classDef consensus fill:#fdf3df,stroke:#c08a2d,stroke-width:1.4px,color:#3d2c0d;
    class Easy local
    class Hard consensus