docs(04): capture phase context

This commit is contained in:
unanmed 2026-09-18 09:06:35 +08:00
parent f86f19ea89
commit 01fe37fdb0
2 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,119 @@
# Phase 4: 渲染适配与双布局 - Context
**Gathered:** 2026-09-18
**Status:** Ready for planning (incremental — 本次仅锁定第一步)
<domain>
## Phase Boundary
阶段 4 的最终目标ROADMAP渲染端通过新数据层接口驱动并同时支持移动端与桌面端布局REND-01、REND-02
**重要:本阶段无法一次规划完毕。** 用户明确要求增量规划,本次讨论只规划**第一步**
> 收集当前所有与数据端接口不匹配的渲染端实现(含依赖数据端的渲染行为),形成对账文档,作为后续计划如何拆分实施的依据。数据端未提供而渲染端需要的接口、双方错配等,单独成节写入该文档,便于后续处理。
第一步是**只读清点**,不修改任何代码。后续步骤待第一手对账结果出来后另行规划。
</domain>
<decisions>
## Implementation Decisions
### 增量规划方式
- **D-01:** 阶段 4 采用增量规划,不一次性产出完整计划;本 CONTEXT 仅锁定第一步(对账),后续步骤待对账结果出来后再规划。
- **D-02:** 第一步交付物为对账文档 `.planning/phases/04-render-adaptation/04-RENDER-INTERFACE-AUDIT.md`;该步为只读清点,不改任何代码。
### 对账范围与基准
- **D-03:** 被查对象限定 `packages-user` 下的 `client-base``client-modules` 两个渲染端包。`packages` 偏向第三方库、本身不影响渲染端与数据端,不查;其余 packages-user 子包(`entry-client`、`legacy-plugin-client`、`legacy-plugin-data`、`data-fallback`)不纳入本次第一步。
- **D-04:** 数据端 `data-common` / `data-base` / `data-system` / `data-state` 不作为被查对象,仅作为接口基准(契约源为各自 `types.ts`、`core.ts`、`ins.ts` 等)。
- **D-05:** 用户会同步修改数据端**实现**,但接口签名不变;对账一律以「接口」为准,不受实现变动影响。
### 问题分类与记录粒度
- **D-06:** 问题按三类划分:① 错配(渲染端按旧形状/旧签名调用,数据端接口已变);② 数据端缺失(渲染端需要而数据端未提供的接口);③ 多余旧路径(渲染端仍在走已被新接口取代的 legacy/旧路径)。
- **D-07:** 每条记录精确到接口名,并包含其所属文件、问题描述、影响等内容。
- **D-08:** 采用单文档分节组织;「数据端缺失接口」独立成节,便于后续单独处理。
### 执行方式
- **D-09:** 允许派子代理进行只读扫描(不得修改任何文件)。
### the agent's Discretion
- D-07 的「影响」字段具体写法、「多余旧路径」是否需要进一步细分,交由 AI 在对账执行时按实际情况把握,但不得据此扩大范围。
</decisions>
<canonical_refs>
## Canonical References
**Downstream agents MUST read these before planning or implementing.**
### Project and phase requirements
- `.planning/PROJECT.md` — 项目架构、双端分离、AI 实现边界与质量约束
- `.planning/REQUIREMENTS.md` — REND-01 / REND-02 需求
- `.planning/ROADMAP.md` — Phase 4 目标、成功标准与相邻阶段边界Phase Details → Phase 4
- `.planning/STATE.md` — 当前仓库状态与既有决策
- `dev.md` — 项目结构与开发原则;「双端分离」章节定义 `@user/client-base`(系统层)与 `@user/client-modules`(实现层)
### Data-side interface baselines (基准,不是被查对象)
- `packages-user/data-common/src/types.ts` — L0 `IDataCommon` 契约
- `packages-user/data-base/src/types.ts` — L1 `IStateBase` 契约
- `packages-user/data-system/src/types.ts` — L2 `IStateSystem` 契约
- `packages-user/data-state/src/types.ts` — L3 `ICoreState` 契约
- `packages-user/data-state/src/core.ts` — 顶层装配与 legacy 初始化路径
- `packages-user/data-state/src/ins.ts` — 既有单例入口
- `packages-user/data-common/src/replay/types.ts` — 录像命令/沙箱/状态契约
- `packages-user/data-common/src/store/types.ts` — Tile raw-data 与事件访问契约
- `packages-user/entry-data/src/mota.ts``Mota` 注册表与 `r()`/`rf()` 渲染调用门控
- `packages-user/data-base/src/game.ts``hook` / `gameListener` 渲染通知机制
### Render side under audit (被查对象)
- `packages-user/client-base/src/index.ts` — 渲染系统层入口
- `packages-user/client-modules/src/index.ts` — 渲染实现层入口
### Prior phase context
- `.planning/phases/03-data-completion/03-CONTEXT.md` — 数据端完成阶段的接口边界与已锁定决策D-01..D-28、S-01..S-05
</canonical_refs>
<code_context>
## Existing Code Insights
> 本次未对渲染端代码做实际扫描(用户要求讨论阶段不由 AI 先行探索)。以下来自既有 `.planning/codebase/` 分析文档,仅作方向参考;对账执行时以实际代码为准。
### Reusable Assets
- `@user/client-base``packages-user/client-base/src/`)— 渲染端系统层,负责渲染核心系统(`load/`、`material/`
- `@user/client-modules``packages-user/client-modules/src/`)— 渲染端实现层,依赖系统层实现渲染与用户交互(`render/`、`action/`、`fallback/`
- `hook` / `gameListener``packages-user/data-base/src/game.ts`)— 数据端向渲染端发布通知的既有机制
- `Mota.r()` / `Mota.rf()``packages-user/entry-data/src/mota.ts`)— 数据端调用渲染端代码的唯一受控入口
### Established Patterns
- 依赖方向单向:`src → packages-user → packages`;数据端分层 `data-common → data-base → data-system → data-state`
- 双端分离:渲染端只向数据端发消息,不向数据端推送更新;数据端无 DOM
- 公共契约以 `types.ts` + barrel 导出表达接口设计归用户AI 不得自行发明公共接口行为
### Integration Points
- 渲染端读取游戏状态的耦合点即对账重点:需判定其读取的是新数据层接口还是 legacy 全局
- `packages-user/entry-client/src/create.ts` 为渲染端组合根(本次不在被查范围,但对账时可作为理解接线方式的参考)
</code_context>
<specifics>
## Specific Ideas
- 「收集当前所有与数据端接口不匹配的渲染端实现」——不止显式调用,依赖数据端的渲染**行为**也可能不匹配,需一并清点。
- 数据端缺失接口与错配项要单独成节,便于用户后续处理(用户会自行决定其在数据端或渲染端解决)。
- 对账以接口为准,不受用户并行修改数据端实现的影响。
</specifics>
<deferred>
## Deferred Ideas
- 阶段 4 的后续步骤(实际适配实施、移动端/桌面端双布局实现)——待第一步对账结果出来后另行规划。
- 已确认不在本次第一步范围:`packages` 全部、`entry-client`、`legacy-plugin-client`、`legacy-plugin-data`、`data-fallback`。
</deferred>
---
*Phase: 4-渲染适配与双布局*
*Context gathered: 2026-09-18*

View File

@ -0,0 +1,80 @@
# Phase 4: 渲染适配与双布局 - Discussion Log
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
**Date:** 2026-09-18
**Phase:** 4-渲染适配与双布局
**Areas discussed:** 第一步范围(对账)、被查子包、文档组织、交付路径
---
## 讨论主导权
用户明确要求:讨论阶段由用户主导,不由 AI 先行探索代码,也不由 AI 自行分析需求并提问。AI 在用户说明计划前不得开启子代理扫描项目。
**Notes:** 用户指出「先别开子代理看项目,我还没说这阶段要干啥」。
---
## 第一步范围(对账)
用户提出的第一步计划:收集当前所有与数据端接口不匹配的渲染端实现(含依赖数据端的渲染行为);数据端未提供而渲染端需要的接口、双方错配等单独写到文档中,便于后续处理。这一步只读清点、不改代码,作为后续计划拆分实施的依据。
---
## 被查子包
| Option | Description | Selected |
|--------|-------------|----------|
| client-base | 渲染系统层 | ✓ |
| client-modules | 渲染实现层 | ✓ |
| entry-client | 渲染端组合根 | |
| legacy-plugin-client / legacy-plugin-data | legacy 插件 | |
| data-fallback | legacy 全局桥接兼容层 | |
**User's choice:** 仅 client-base、client-modules。
**Notes:** 用户另说明:范围「仅 packages-user」`packages` 偏向第三方库、本身不影响渲染端与数据端,不查。
---
## 文档组织
| Option | Description | Selected |
|--------|-------------|----------|
| 单文档分节 | 04-RENDER-INTERFACE-AUDIT.md 内分「错配 / 数据端缺失接口 / 多余旧路径」,缺失项独立小节 | ✓ |
| 两份文档 | 对账清单 + 缺失接口登记各一份 | |
**User's choice:** 单文档分节。
---
## 交付路径
| Option | Description | Selected |
|--------|-------------|----------|
| 是,按 GSD 走 | discuss → /gsd-plan-phase 404-01 = 该对账)→ execute 产出文档,全程只读 | ✓ |
| 否,先停在这 | 暂不进入 plan | |
**User's choice:** 是,按 GSD 走。
**Notes:** 用户强调「严格按 GSD 流程走」。
---
## 命名确认
| 对象 | 命名 | 确认 |
|------|------|------|
| 阶段目录 | `04-render-adaptation` | ✓ |
| 对账文档 | `04-RENDER-INTERFACE-AUDIT.md` | ✓ |
---
## the agent's Discretion
- 「影响」字段的具体写法、「多余旧路径」是否进一步细分,由 AI 在执行对账时按实际情况把握,但不得据此扩大范围。
## Deferred Ideas
- 阶段 4 后续步骤(实际适配实施、双布局实现)——待对账结果出来后规划。
- 明确不纳入本次第一步:`packages` 全部、`entry-client`、`legacy-plugin-*`、`data-fallback`。