diff --git a/.project-docs/20-architecture/data-flow.md b/.project-docs/20-architecture/data-flow.md index 8c2490b..3c19ec8 100644 --- a/.project-docs/20-architecture/data-flow.md +++ b/.project-docs/20-architecture/data-flow.md @@ -5,13 +5,15 @@ | Flow | Source | Destination | Notes | |---|---|---|---| | 登录续期 | Renderer 活动信号 | Main Works Session | 连续 7 天未使用才清除会话 | -| 一键提交 | 项目配置 | Main → Works Square | Main 打包、自动版本、幂等重试和脱敏 | +| 项目创建 | 新建项目对话框 | Host API → Main 项目初始化 | 创建时固定 `ProjectType`;小游戏/小程序原子生成受控模板,自定义只生成项目空间 | +| 一键提交 | 可发布项目配置 | Main → Works Square | 只对小游戏/小程序开放;Main 打包、自动版本、幂等重试和脱敏 | | 运营发布 | Works Square 审核 | 公共 Runtime | 审核通过后服务端直接发布 | | 真机预览 | 项目空间 | Main → Owner preview / Runtime | 核对 app、version、release 和同源 HTTPS | ## State Ownership - Main 持有刷新凭据、发布 Token、临时 ZIP、幂等键和本地 app/version/review 映射。 +- 项目内 `.niancode/project.json` 保存 `ProjectType`;Main 在配置写入和目录复用时保持其不可变,并在打包时重新读取校验。 - Renderer 仅持有短效公开会话状态、提交展示状态和短时预览 URL。 ## External Interfaces @@ -21,4 +23,4 @@ ## Last Updated -2026-08-08 +2026-08-09 diff --git a/.project-docs/20-architecture/system-overview.md b/.project-docs/20-architecture/system-overview.md index c4c3f34..0b9b51b 100644 --- a/.project-docs/20-architecture/system-overview.md +++ b/.project-docs/20-architecture/system-overview.md @@ -10,6 +10,7 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展 |---|---|---| | Renderer | 项目配置、一键提交状态、真机二维码 | 不接触账号 Token、ZIP、幂等键或本地绝对路径 | | Host API | 校验本地项目请求并投影安全响应 | 只接受回环来源和 JSON mutation | +| Project Configuration & Template | 保存不可变 `ProjectType`,原子生成新项目骨架 | 小游戏/小程序生成受控 Vite 模板;自定义保持最小项目空间 | | Project Packager | 确定性扫描、敏感文件排除与 ZIP 生成 | 限制文件数、包体和目录替换 | | Works Session | 七天真实活动滑动续期 | 刷新凭据由 Main 安全持有 | | Device Preview | 核对本地映射、远端版本和 Release | 待审使用短时 Owner preview;已发布使用精确 Runtime | @@ -17,6 +18,8 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展 ## Important Boundaries - 发布只有现有项目配置底部的一个入口,不新增发布工作台、侧栏或资源卡。 +- `ProjectType` 由创建请求写入项目配置,UI 与 Host API 不提供类型变更;缺少类型的旧配置归一为 `custom`。 +- 本地 `projectType` 只选择产品路径和内部构建 preset,不是可信授权声明;Main 仍需安全打包,服务端仍需独立校验清单和包体。 - 云端确认上传成功后,本地映射失败不能把请求改判为失败;否则会诱导重复提交。 - Renderer 只能获得安全状态字段和可展示的短时预览 URL。 @@ -26,4 +29,4 @@ Makelore 是 Electron 桌面客户端。Renderer 负责项目操作与状态展 ## Last Updated -2026-08-08 +2026-08-09 diff --git a/.project-docs/30-worklog/current-state.md b/.project-docs/30-worklog/current-state.md index 1146de1..f7396a3 100644 --- a/.project-docs/30-worklog/current-state.md +++ b/.project-docs/30-worklog/current-state.md @@ -7,35 +7,39 @@ This file is the integrated default-branch snapshot. Feature tasks record progre - `86ece3a` / `4dde8f3`:客户端登录七天滑动续期及集成提交。 - `724290e` / `dcc92fc`:Main-owned 一键打包提交审核及集成提交。 - `1a19ad9` / `f02e99e`:项目真机预览、待审 Release Owner preview 及集成提交。 +- `493b31c`:客户端三类 `ProjectType`、小游戏/小程序受控发布模板与自定义项目发布隔离。 ## Current Focus -客户端面向非专业用户提供“项目配置中一键提交 → 运营审核通过即发布”的单入口链路,并以项目级真机预览完成待审版本扫码验收。 +客户端面向非专业用户提供“创建小游戏或小程序 → 项目配置中一键提交 → 运营审核通过即发布”的单入口链路,并以项目级真机预览完成待审版本扫码验收;自定义和缺少类型字段的旧项目不提供该入口。 ## Recently Completed - 2026-08-08:合并登录续期、一键发布和真机预览;发布成功后保存精确 app/version/review 映射,Renderer 不接触 Token、ZIP 或本地路径。 - 2026-08-08:补齐跨平台 Electron E2E fixture、Windows ZIP 预检和异常成功响应安全投影。 +- 2026-08-09:新建项目支持小游戏、小程序和自定义三类不可变产品类型;前两类生成固定 Vite 发布模板,自定义及缺少类型字段的旧项目不显示一键提交入口。 ## In Progress -- 使用真实 Works Square、Builder 与 Static Gateway 环境执行客户端提交到运营发布的生产整链验收。 +- 成组集成 Works Square 的 `project_type` 接收/校验后,使用真实 Builder 与 Static Gateway 环境执行客户端提交到运营发布的生产整链验收。 ## Next Recommended Steps -1. 配置真实生产环境,执行“客户端提交 → 构建与浏览器门禁 → 运营批准 → 公共访问”。 -2. 核对待审 Owner preview 的到期刷新、生产监控和告警证据。 +1. 确认服务端只接受可发布的 `mini_game` / `mini_program`,并继续映射到平台受控构建 preset。 +2. 配置真实生产环境,分别执行“小游戏/小程序创建 → 客户端提交 → 构建与浏览器门禁 → 运营批准 → 公共访问”。 +3. 核对待审 Owner preview 的到期刷新、生产监控和告警证据。 ## Open Questions / Blockers -- 本地与模拟上游回归已完成;生产账号和环境变量仍由部署环境提供。 +- 客户端与模拟上游回归已完成;服务端类型契约的成组集成、生产账号和环境变量仍待部署环境确认。 ## Risky Areas - 一键提交已成功但本地预览映射落盘失败时必须保持提交成功,避免用户重复提交;真机预览会明确显示尚不可用。 - 预览 URL 必须绑定当前项目、精确版本和 Release,并保持 Works Square 同源 HTTPS。 - 刷新凭据、发布 Token、ZIP、幂等键和重试只能由 Electron Main 持有。 +- 本地 `projectType` 只决定产品分流和模板选择,不得作为授权依据或替代 Main/服务端的包体校验。 ## Last Updated -2026-08-08 +2026-08-09 diff --git a/.project-docs/30-worklog/task-history.md b/.project-docs/30-worklog/task-history.md index a1439a0..5d513db 100644 --- a/.project-docs/30-worklog/task-history.md +++ b/.project-docs/30-worklog/task-history.md @@ -7,6 +7,7 @@ | 2026-08-07 | 客户端登录七天滑动续期 | Main-owned 刷新凭据与真实活动续期 | README、current-state | | 2026-08-08 | Makelore 一键提交审核 | 项目配置单入口,Main 安全打包与幂等提交 | README、architecture、domain | | 2026-08-08 | 项目真机预览 | 待审 Owner preview 与精确已发布 Runtime | README、architecture、domain | +| 2026-08-09 | 客户端项目类型 | 创建时固定小游戏/小程序/自定义类型;前两类生成受控发布模板 | current-state、architecture、domain | ## Notes diff --git a/.project-docs/30-worklog/tasks/20260809-integrate-project-types-client-6e4b.md b/.project-docs/30-worklog/tasks/20260809-integrate-project-types-client-6e4b.md new file mode 100644 index 0000000..69a1a25 --- /dev/null +++ b/.project-docs/30-worklog/tasks/20260809-integrate-project-types-client-6e4b.md @@ -0,0 +1,97 @@ +# Task: 晋升客户端项目类型功能文档 + +## Identity + +- Task ID: 20260809-integrate-project-types-client-6e4b +- Mode: Integration +- Branch: codex/20260809-integrate-project-types-client-6e4b-integrate-project-types-client +- Worktree: D:\Datas\OthersProjects\makelore-integrate-project-types-client-6e4b +- Base commit: 493b31cff0c0bded4f0ec61622ccd62744773b81 +- Owner: codex +- Status: Completed + +## Scope + +- 对已进入 `main@493b31c` 的客户端项目类型功能执行正式 Integration Gate。 +- 将源任务 `20260809-project-types-impl-3f7a` 中已确认、可长期复用的产品语义最小晋升到 canonical 项目记忆。 +- 只更新项目文档与本集成任务记录,不修改产品代码、不合并或推送 `main`。 + +## Intent And Constraints + +- `ProjectType` 是创建时选择且在 UI/API 中不可变的产品类型;不得与平台内部 `BuildPreset` 混用。 +- `mini_game`、`mini_program` 新建即生成平台受控的 Vite 发布模板;`custom` 与缺少该字段的旧项目不提供一键发布。 +- 本地 `.niancode/project.json` 的 `projectType` 只用于产品分流,不是授权或可信安全边界;Main-owned 打包、Host API 与服务端校验边界保持不变。 +- 现有项目配置中的单一提交入口保持不变,不恢复独立发布工作台。 +- 不为本次晋升扩张到其他待集成任务,也不把尚未完成的服务端和生产整链验收写成已完成事实。 + +## Project Context Loaded + +Task context: +- Task ID: `20260809-integrate-project-types-client-6e4b` +- Mode: Integration +- Branch: `codex/20260809-integrate-project-types-client-6e4b-integrate-project-types-client` +- Worktree: `D:\Datas\OthersProjects\makelore-integrate-project-types-client-6e4b` +- Base commit: `493b31cff0c0bded4f0ec61622ccd62744773b81` +- Other active local tasks: `20260807-makelore-release-client-8c4e`、`20260807-client-login-sliding-7d2a`、`20260806-design-multisession-ui-4e7d`、`20260806-design-enter-send-b83f`、源任务 `20260809-project-types-impl-3f7a`。 +- Overlap or semantic-conflict assessment: 无语义冲突;一键发布任务提供既有 Main-owned/单入口边界,其他 peer 不涉及 ProjectType canonical 晋升。 + +Read: +- `.project-docs/05-agent-entry/memory-index.md` +- `.project-docs/00-brief/project-positioning.md` +- `.project-docs/30-worklog/current-state.md` +- `.project-docs/10-decisions/decision-index.md` +- `.project-docs/20-architecture/system-overview.md` +- `.project-docs/20-architecture/data-flow.md` +- `.project-docs/40-domain/business-rules.md` +- `.project-docs/40-domain/glossary.md` +- `.project-docs/00-brief/success-criteria.md` +- `.project-docs/50-evidence/evidence-index.md` +- `.project-docs/60-reflection/reflection-index.md` +- `.project-docs/80-commitments/commitments.md` +- `.project-docs/90-maintenance/stale-items.md` +- `.project-docs/05-agent-entry/integration-gate.md` +- `.project-docs/30-worklog/task-history.md` +- 源任务与全部活跃 peer 的任务记录。 + +Relevant understanding: +- Project goal: 为非专业用户提供项目配置中的单入口提交审核链路,由 Main 持有本地文件、凭据和安全打包。 +- Current integrated focus: 客户端提交、运营审核即发布以及精确 Release 真机预览;生产整链仍待真实环境验收。 +- Active task scope: 只晋升已经提交并验证的三类项目创建与发布资格语义。 +- Active constraints: 类型不可变;旧项目兼容归一为 `custom`;本地类型不是授权边界;不削弱 Main/Host API 安全边界。 +- Decisions affecting this task: 用户已明确确认小游戏、小程序、自定义项目三类,以及参照微信但服务于自有平台的方向;无相反 accepted ADR。 +- Evidence, reflections, or commitments affecting this task: 源任务记录 310 项聚焦回归、Electron E2E、两类模板真实 `npm ci`/Vite build;生产整链仍是后续事项。 +- Files or modules likely involved: `current-state.md`、`business-rules.md`、`glossary.md`、`system-overview.md`、`data-flow.md`、`task-history.md` 与本任务记录。 +- Unknowns, stale docs, or conflicts: `project-positioning.md`、`success-criteria.md` 仍为模板占位,但不影响本次局部晋升;服务端成组集成和生产验收尚未完成。 + +Gate result: +- Passed + +## Plan + +1. 以 `493b31c` 实现、源任务结果和现有 Main-owned 发布边界为证据,筛选最小 canonical 事实。 +2. 更新当前状态、领域规则、术语、架构/数据流与任务历史;不创建无必要 ADR,不改空泛定位模板。 +3. 执行文档结构检查、task-aware drift、`git diff --check` 和文档差异复核。 +4. 完成本任务记录,提交中文 integration commit,并保持独立分支,不合并或推送 `main`。 + +## Outcome + +- 已在 `current-state.md` 登记源提交 `493b31c`,并把客户端当前焦点收敛为仅小游戏/小程序进入单入口发布链路;服务端成组集成和生产验收继续保持未完成状态。 +- 已在领域规则和术语表固定 `ProjectType`、`BuildPreset`、受控发布模板的边界:类型创建后不可变,两个可发布类型共享内部 Vite preset,`custom` 与缺字段旧项目不提供一键发布。 +- 已在系统概览和数据流记录项目创建/模板生成路径,并明确本地 `projectType` 不是授权边界;Main-owned 文件、凭据、安全打包与服务端独立校验边界不变。 +- 已在任务历史登记本次客户端项目类型集成;未新建 ADR,因为本次是对用户已确认产品方向的事实晋升,没有反转 accepted decision 或引入新的架构选择。 + +## Verification + +- `check_project_docs.py`:通过。 +- `check_doc_drift.py --task-id 20260809-integrate-project-types-client-6e4b`:通过,canonical 写入符合 integration ownership 边界。 +- `git diff --check`:通过;仅有仓库 Windows 工作区既有的 LF/CRLF 提示。 +- 人工复核 `a6fe14a..493b31c` 差异、源任务 Outcome/Verification/Promotion Candidates,以及全部活跃 peer 的 Scope/Constraints:源提交已在当前分支,无语义冲突。 + +## Follow-ups + +- 成组集成 Works Square 服务端 `project_type` 校验,确认只允许 `mini_game`、`mini_program` 进入受控 Vite 构建。 +- 使用真实账号和生产环境分别完成小游戏、小程序的“创建 → 一键提交 → 构建/浏览器门禁 → 运营批准 → 公共访问”整链验收。 + +## Promotion Candidates + +- None;本次已完成源任务中获确认且适用于客户端的 canonical 晋升。 diff --git a/.project-docs/40-domain/business-rules.md b/.project-docs/40-domain/business-rules.md index 202fd9d..7e4e92d 100644 --- a/.project-docs/40-domain/business-rules.md +++ b/.project-docs/40-domain/business-rules.md @@ -2,6 +2,9 @@ ## Durable Rules +- 面向用户的 AI 编程新建流程必须在 `mini_game`、`mini_program`、`custom` 中选择;`ProjectType` 是产品类型,创建后不能通过 UI 或 Host API 修改,未传类型的兼容 API 调用按 `custom` 处理。 +- 新建小游戏和小程序会生成平台固定版本的受控 Vite 发布模板,并可使用项目配置中的单一“提交审核”入口;`custom` 和缺少类型字段的旧项目不提供一键发布。 +- `ProjectType` 不等于 `BuildPreset`:第一期两个可发布产品类型都映射到内部受控 Vite preset;本地 `projectType` 不是授权边界,Main-owned 安全打包、Host API 和服务端包体校验仍必须执行。 - 非专业用户只执行一次“提交审核”;构建通过后由运营审核,审核通过即直接发布。 - 不恢复独立发布上传页或云部署工作台;入口只位于现有项目配置操作区。 - 待审版本只能通过绑定精确 Release 的短时 Owner preview 验收;旧版本、构建中或失败状态不能生成可扫码假象。 @@ -14,4 +17,4 @@ ## Last Reviewed -2026-08-08 +2026-08-09 diff --git a/.project-docs/40-domain/glossary.md b/.project-docs/40-domain/glossary.md index 9b02844..a5a61df 100644 --- a/.project-docs/40-domain/glossary.md +++ b/.project-docs/40-domain/glossary.md @@ -2,3 +2,6 @@ | Term | Meaning | Notes | |---|---|---| +| `ProjectType` | 创建项目时选择且之后不可变的产品类型 | 当前值为 `mini_game`、`mini_program`、`custom`;缺少字段的旧配置按 `custom` 处理 | +| `BuildPreset` | 平台内部用于构建和验收项目包的受控实现 | 不等于 `ProjectType`;第一期小游戏和小程序都使用 Vite preset | +| 受控发布模板 | Main 在新建可发布项目时生成的固定依赖、锁文件和可运行示例 | 保障一键提交的结构基线,但本地模板和 `projectType` 本身都不是授权边界 |