{
  "scope": "静态源码架构复核；改进为建议，非已实施；项目定位为Web应用",
  "revision": "326ea0a335dbfa05d26845ce603d4bf9fb62e5ac",
  "layers": [
    [
      "启动与应用壳",
      "Next / React；RootClientComponent提供Redux，Main执行初始化与生命周期管理。",
      "SvelteKit入口按路由组合布局和页面节点。",
      "启动负责接线，业务初始化按职责拆开；框架差异本身不决定优劣。",
      [
        "CMP-A01",
        "CMP-A02"
      ],
      [
        "SUP02",
        "L09"
      ]
    ],
    [
      "页面与交互编排",
      "首页、登录、游戏路由；RouterMgr；统一弹窗工厂和自动弹窗队列。",
      "共享页面壳；网址驱动弹窗宿主；按定义检查限制和关闭条件。",
      "可恢复入口与自动任务分别管理。登录/活动入口可进入URL，奖励继续使用队列。",
      [
        "CMP-I02",
        "CMP-I03",
        "CMP-I04",
        "CMP-I05"
      ],
      [
        "L14",
        "L15"
      ]
    ],
    [
      "领域与游戏边界",
      "供应商iframe与Unity适配器负责连接、超时、降级和退出。",
      "共享游戏壳处理可用状态；Dice等内建游戏自己维护单局与自动模式。",
      "gogogold保留适配器边界，统一加载阶段；不复制内建下注状态机。",
      [
        "GUI04",
        "GUI05",
        "GUI06"
      ],
      [
        "L01",
        "L05",
        "D09",
        "SUP24"
      ]
    ],
    [
      "状态与会话归属",
      "Redux保存账号和余额；Zustand管理目录、分类与偏好；会话恢复及切换另有调用链。",
      "组件上下文约束会话store；共享偏好存储；游戏账本按单局编号协调事件。",
      "每类数据明确权威来源、写入入口、账号作用域和失效时机，避免重复所有者。",
      [
        "CMP-I01",
        "PD03",
        "PD04",
        "PD05",
        "PD06",
        "PD07"
      ],
      [
        "UI07",
        "UI09",
        "D22",
        "D23"
      ]
    ],
    [
      "基础设施",
      "共享请求拦截器、超时/重试、短缓存、广播通道、LCPGate、图片与资源加载工具。",
      "GraphQL/游戏HTTP/订阅通道；依赖预载、按需组件和图像工具。",
      "协议服务于业务，不因参考站而迁移协议。先补取消、脱敏和观测边界。",
      [
        "PD01",
        "PD02",
        "PD08",
        "GUI03",
        "GUI09"
      ],
      [
        "API-03",
        "API-12",
        "API-19",
        "SUP03"
      ]
    ],
    [
      "服务器与外部系统",
      "登录、余额快照和供应商通信是可见客户端合同；未审计gogogold服务器实现。",
      "只能看到客户端接口与响应处理，未取得真实服务器源码。",
      "授权、资金与开奖的最终判断由服务器负责。客户端检查只改善早期反馈和状态协调。",
      [
        "PD03",
        "PD05",
        "GUI04"
      ],
      [
        "API-23",
        "D18",
        "UI36"
      ]
    ]
  ],
  "ownership": [
    [
      "身份与会话",
      "gogogold：登录恢复、token刷新与账号状态；Stake：上下文中的session。",
      "服务器身份为权威；前端会话仅为客户端视图。",
      "切账号时标记身份版本；旧请求和账号相关缓存不得发布到新会话。"
    ],
    [
      "GC / SC余额",
      "gogogold：userInfo快照、显示单位与回大厅刷新。Stake：本局事件账本与真实余额同步。",
      "余额快照/事件应各自遵守服务器合同。",
      "定义版本是否单调、币种单位及允许覆盖的字段；合同未确认前不随意丢弃旧版本响应。"
    ],
    [
      "目录与偏好",
      "gogogold：目录store与选择性持久化；Stake：偏好store与cookie。",
      "目录来自服务；界面偏好由用户选择。",
      "区分公共目录、账号收藏、最近记录与界面习惯；逐项规定持久化和切账号失效。"
    ],
    [
      "游戏实例",
      "gogogold：iframe/Unity实例及加载任务。Stake：游戏壳与具体游戏控制器。",
      "当前实例拥有监听、计时器和资源句柄。",
      "退出有统一dispose入口；迟到消息和异步结果须绑定当前实例。"
    ],
    [
      "弹窗",
      "gogogold：工厂管理资源，管理器管理显示，队列管理自动调度。Stake：URL与弹窗定义。",
      "显示状态与加载资源分开。",
      "避免队列、URL与组件同时争夺打开状态；入口恢复只覆盖可恢复的业务弹窗。"
    ]
  ],
  "risks": [
    [
      "P1",
      "旧账号响应发布到新会话",
      "首页effect依赖userId，但已见cleanup只清Live定时器，缺少等价的响应身份检查。",
      "静态风险，未复现",
      "复用KYC当前身份校验方式，响应发布前检查身份/请求代次。",
      "延迟账号A请求，切到B后再返回A：B的目录、收藏和定时任务不被覆盖。",
      [
        "CMP-I08",
        "PD03",
        "PD07"
      ],
      [
        "L03"
      ]
    ],
    [
      "P1",
      "超时与外部取消没有统一生效",
      "共享请求存在内部timeout controller；传入外部signal时，fetch选外部signal。",
      "代码路径已确认，运行效果待验证",
      "将超时、外部取消和页面退出合成一个有效信号，并区分取消原因。",
      "仅超时、仅外部取消、二者同时发生：请求均能终止，计时器被清理，取消不会误触重试。",
      [
        "PD02"
      ],
      [
        "API-12"
      ]
    ],
    [
      "P1",
      "内容与日志的信任边界",
      "富文本组件当前直接输出content；调试路径接收完整配置和响应。",
      "代码路径已确认，线上影响未知",
      "先追踪内容源/服务端清洗与生产日志开关；按输出位置补清洗和字段脱敏。",
      "不可信标签/属性被阻止；授权头、密码和验证码不会进入相关日志。",
      [
        "CMP-I06"
      ],
      [
        "SEC03",
        "SEC07"
      ]
    ],
    [
      "P2",
      "游戏退出后的任务归属",
      "iframe与Unity已有不同的保护/销毁机制，尚不能由局部函数推出全链路清理完成。",
      "架构核验项",
      "让游戏会话适配器统一拥有消息订阅、加载任务和dispose职责。",
      "进入后立即退出、连续切换游戏：旧实例不回写，监听和资源任务得到释放。",
      [
        "GUI04",
        "GUI05",
        "GUI06"
      ],
      [
        "SUP24"
      ]
    ],
    [
      "P2",
      "首屏门控被当成速度结论",
      "已有LCPGate、分区懒挂载、图片优先级和录屏按分支加载，尚无同条件性能对照。",
      "机制确认，收益未测",
      "记录门控完成原因与关键资源时序，再为首页和游戏入口设预算。",
      "同设备/网络测量LCP、CLS、INP；能解释超时兜底、接口等待、图片和SDK成本。",
      [
        "GUI01",
        "GUI03",
        "GUI09",
        "CMP-I04"
      ],
      [
        "SUP03",
        "SUP32"
      ]
    ]
  ],
  "decisions": [
    [
      "保留现有React / Next与共享请求底座",
      "现有能力已覆盖容器、弹窗、缓存与加载。框架和协议迁移没有当前证据支持。",
      "代价是继续治理已有接口和状态边界；不以重写替代问题定位。"
    ],
    [
      "把“会话版本”作为异步发布边界",
      "账号相关异步结果先证明属于当前会话，再写入共享状态；不要求每个公开请求都登录。",
      "版本标记需要与登录、退出、切账号统一接线；取消请求本身仍不足以替代回写检查。"
    ],
    [
      "以游戏会话适配器统一生命周期",
      "供应商能力仍由iframe/Unity适配器实现，对外暴露加载、就绪、失败和退出阶段。",
      "需要逐一适配供应商协议；共享壳不承担供应商内部规则。"
    ],
    [
      "渐进收敛状态所有权",
      "先建立状态清单与写入入口，再合并重复逻辑；保留Redux/Zustand现有明确职责。",
      "短期仍是双状态库。是否收敛为一种，需由重复所有权和实际维护成本决定。"
    ],
    [
      "安全和性能以边界验证验收",
      "保护覆盖具体输出/请求/会话，性能覆盖具体设备与场景；代码评分不替代验证。",
      "需要针对性运行验证和观测数据，不能仅靠静态报告给出达标结论。"
    ]
  ]
}