跳轉到

ugc-fork

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

Implementation authority 產品 canon/流程 全域索引
ugc-fork.md UGC 機制 · 衍生 流程.md §2

Fork 偵測的技術流程圖(兩階段判定 / 物理指紋對照 / 決策樹 / 指紋版本)。模組實作見 ugc-fork.md;Fork 衍生樹 / 分潤等業務流程見 流程/衍生.md

兩階段判定流程

flowchart TD
    Start[上傳請求] --> NearestSearch[在 ledger 找最近 AABB 候選]
    NearestSearch --> Loop{有候選?}
    Loop -->|否| PassOrigin[視為原創<br/>pass-through]
    Loop -->|是| Stage1[Stage 1<br/>幾何快篩]

    Stage1 --> GeoDiff{幾何差異達門檻?}
    GeoDiff -->|是| Next[下一個候選]
    Next --> Loop
    GeoDiff -->|否| Stage2[Stage 2<br/>分組物理指紋]

    Stage2 --> ByType{零件類型}
    ByType -->|chassis/body/weapon| Rigid[剛體指紋]
    ByType -->|tire/roller| Rolling[滾動指紋]
    ByType -->|motor/battery| Functional[功能指紋<br/>mesh + sidecar]
    ByType -->|chip| Chip[chip 指紋<br/>mesh + skill]
    ByType -->|track| Track[場地多維指紋]

    Rigid --> Classify[雙標準分類]
    Rolling --> Classify
    Functional --> Classify
    Chip --> Classify
    Track --> Classify

    Classify --> Action{差異範圍}
    Action -->|< strict| ForceFork[強制 fork]
    Action -->|strict-loose| SuggestFork[提示 fork<br/>玩家自選]
    Action -->|≥ loose| Pass[直通]

    Pass --> Next
    SuggestFork --> Done[上傳完成]
    ForceFork --> ForkFlow[標 parent CID]
    ForkFlow --> Done
    PassOrigin --> Done

    classDef local fill:#e8f3ec,stroke:#3f8f5f,stroke-width:1.4px,color:#173525;
    classDef consensus fill:#fdf3df,stroke:#c08a2d,stroke-width:1.4px,color:#3d2c0d;
    classDef chain fill:#e7eefb,stroke:#3f6bb0,stroke-width:1.4px,color:#152848;
    classDef fail fill:#fae9e7,stroke:#b4544a,stroke-width:1.4px,color:#471d18;
    class PassOrigin,Pass local
    class SuggestFork consensus
    class Done chain
    class ForceFork fail

5 組指紋對照

欄位定義與差異計算(rigidDiff 取最大分量 / functionalDiff・chipDiff OR 邏輯)見 程式架構/ugc-fork.md §3;物理量一律整數量化(mg / μm / μm² / μm³)。

graph TB
    subgraph 剛體類
        Rigid[mass_mg / com_um xyz<br/>inertia_mg_um2 xyz / surfaceArea_um2]
        Rigid --> ChassisX[chassis: 無補充]
        Rigid --> BodyX[body: frontalArea_um2]
        Rigid --> WeaponX[weapon: weaponBranchHash<br/>(mechanism / main_mesh_node /<br/>max_angle_deg 雜湊)]
    end

    subgraph 滾動類
        Rolling[mass_mg / radius_um / width_um<br/>rollingInertia_mg_um2]
        Rolling --> RollingX[tire / roller: 皆無補充<br/>(胎面由 mesh + material 反映)]
    end

    subgraph 功能類
        Functional[mesh: mass_mg + volume_um3]
        Functional --> MotorS[motor sidecar:<br/>torqueRatio_pct]
        Functional --> BatteryS[battery sidecar:<br/>configuredOutputW]
    end

    subgraph chip
        Chip[mesh: mass_mg + volume_um3<br/>skill: slotCount + skillSlots<br/>(skill + allocationPct、字母排序)]
    end

    subgraph 場地類
        Track[pathLength_mm / avgWidth_mm<br/>turnCount / surfaceArea_mm2<br/>elevationRange_mm / checkpointCount]
    end

    classDef local fill:#e8f3ec,stroke:#3f8f5f,stroke-width:1.4px,color:#173525;
    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 Rigid chain
    class Rolling,Functional,Track consensus
    class Chip local

雙標準決策樹(單一指紋類型)

flowchart LR
    Diff[物理指紋差異] --> A{< strict?}
    A -->|是| Force[強制 fork<br/>標 parent CID]
    A -->|否| B{< loose?}
    B -->|是| Suggest[提示 fork<br/>玩家可選獨立 or fork]
    B -->|否| Pass[通過<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;
    classDef fail fill:#fae9e7,stroke:#b4544a,stroke-width:1.4px,color:#471d18;
    class Pass local
    class Suggest consensus
    class Force fail

OR 邏輯(功能類、chip)

flowchart TD
    Start[功能類 fingerprint] --> Calc[計算 mesh diff + sidecar diff]
    Calc --> Check1{任一 ≥ loose?}
    Check1 -->|是| Pass[視為原創]
    Check1 -->|否| Check2{兩者皆 < strict?}
    Check2 -->|是| Force[強制 fork]
    Check2 -->|否| Suggest[提示 fork]

    classDef local fill:#e8f3ec,stroke:#3f8f5f,stroke-width:1.4px,color:#173525;
    classDef consensus fill:#fdf3df,stroke:#c08a2d,stroke-width:1.4px,color:#3d2c0d;
    classDef fail fill:#fae9e7,stroke:#b4544a,stroke-width:1.4px,color:#471d18;
    class Pass local
    class Suggest consensus
    class Force fail

fingerprint version 流程

flowchart TD
    UpgradeAlgo[fingerprint 算法升級<br/>version v1 → v2] --> NewUpload[新 UGC 用 v2 計算]
    UpgradeAlgo --> OldKeep[既有 UGC 仍標 v1<br/>不重算]

    NewUpload --> Compare{比對候選}
    OldKeep --> Compare
    Compare --> SameVer{同版本?}
    SameVer -->|是| Match[正常分組比對]
    SameVer -->|否| PassThrough[跨版本 pass-through<br/>視為原創]

    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 UpgradeAlgo consensus
    class PassThrough chain