支持App Run并行开发并修复资源画布
新增App Run独立开发profile并隔离端口、数据库、Tauri身份与AppData 常驻资源排列切换并避免布局状态挤压操作入口 显式扩展资源画布横向滚动范围并收敛依赖图可见连线 补充启动器、资源布局、界面回归测试与项目文档
This commit is contained in:
@@ -1,5 +1,21 @@
|
||||
# 决策记录
|
||||
|
||||
## 2026-08-06 app-run 以独立开发 profile 支持多工作树并行运行
|
||||
|
||||
- 背景:多个 Git worktree 能隔离代码和分支,但不会隔离宿主机端口、Tauri identifier、AppData、数据库或本地 data dir。默认 AGC 固定使用 `3080 / 8082 / 8083 / 3101`,另一工作树运行时当前窗口可能被同名实例混淆,默认启动器则会为避免串台直接失败关闭。
|
||||
- 决策:保留 `npm run agc` 默认行为,新增 `npm run agc:app-run`;两者复用同一 `start-tauri-dev.mjs` 与 `start-dev-stack.mjs`。`app-run` profile 使用 `3081 / 8084 / 8085 / 3103`、专用数据库与 SpacetimeDB data dir,并通过独立 Tauri 配置隔离 identifier、AppData 和窗口标题。profile 随 Tauri 子进程环境传给 `beforeDevCommand`,禁止只切 Vite 而继续连接默认后端。
|
||||
- 边界:不修改、停止或复用其它工作树进程,不改默认 AGC、game-chat release、生产配置或业务契约;未知 profile 和 profile 自身端口冲突均失败关闭。
|
||||
- 验证方式:启动器单测锁定 profile 端口、数据库、data dir、3081 预检、Tauri config 与环境传递;配置门禁锁定专用脚本、identifier、标题和 devUrl;并行 smoke 同时核对默认端口仍由另一工作树持有,app-run 端口进程 cwd 指向当前工作树。
|
||||
|
||||
|
||||
## 2026-08-06 资源依赖画布移除任务流虚线并常驻布局切换
|
||||
|
||||
- 背景:真实项目会把大量任务产物投影到文档区,灰色 task-flow 聚合主线与分支仍形成大面积交叉,遮挡卡片并增加阅读负担;同时布局状态提示的最小内容宽度可能挤压右侧“按依赖 / 按类型”入口,资源聚焦态还会主动隐藏整组入口。
|
||||
- 决策:Rust `ProjectResourceGraph` 继续保留 task flow、producer、环和 dependency depth,供可信自动排列与诊断使用;前端 `ResourceDependencyOverlay` 只绘制明确的橙色 `asset-reference`,不再绘制灰色 task-flow 虚线或 marker。资源列表态与中央聚焦态均常驻“按依赖 / 按类型”切换;切换按钮放入不可收缩的独立控件组,工具栏状态文案只能截断或隐藏,不能把操作入口挤出。画布内容宽度显式按最右卡片外边界、section 内边距与 dependency 视觉 gutter 计算,不能依赖绝对定位卡片隐式撑开横向滚动范围。
|
||||
- 边界:不修改 manifest、资源图 Tauri DTO、依赖深度、layout sidecar、SpacetimeDB 或资源卡拖动边界;type 模式继续不挂载 SVG,dependency 模式仍使用完整 Rust 拓扑排列资源。
|
||||
- 验证方式:SVG 单测断言含 task flow 的 read model 只产生精确引用 path;AppSurface 覆盖独立布局切换控件组、type 模式卸载图层和聚焦态切换按钮常驻;布局模型以最右 `x` 断言滚动内容宽度包含卡片、列间距、`64px` gutter 与 section 内边距;追加 shell typecheck、编码检查与 `git diff --check`。
|
||||
- 关联文档:`docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`、`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
|
||||
|
||||
## 2026-08-04 工作台 P2/P6 以不可变子版本和编辑态参数文件实现显式写入
|
||||
|
||||
- 背景:P1 已建立唯一可运行版本和不可变快照,P3-P5 已建立一次性会话、正式切片和可信悬停信息;飞书后续要求资源替换与数值微调,但禁止原地改版本、运行中热写 iframe、信任展示文案或让自然语言生成任意代码 / 路径。
|
||||
|
||||
@@ -59,6 +59,14 @@ AI 游戏创作独立客户端常用短命令:
|
||||
npm run agc
|
||||
```
|
||||
|
||||
同一台开发机上已有另一工作树运行默认 AGC 时,当前 `app-run` 工作树使用独立 profile:
|
||||
|
||||
```bash
|
||||
npm run agc:app-run
|
||||
```
|
||||
|
||||
该 profile 固定使用 Vite `3081`、API `8084`、BgFilter worker `8085`、SpacetimeDB `3103`,并隔离数据库、SpacetimeDB data dir、Tauri identifier、AppData 和窗口标题。它不会探测、复用或停止默认 profile 的 `3080 / 8082 / 8083 / 3101` 进程;`npm run agc` 的默认行为保持不变。
|
||||
|
||||
需要构建只能打开“游戏运行 + 聊天”页面的独立 release 包时使用:
|
||||
|
||||
```bash
|
||||
@@ -314,7 +322,7 @@ npm run ai-game-creator-shell:agent-runtime:real-e2e -- --config-dir <AppData> -
|
||||
|
||||
定向命令必须实际匹配到 V1.10 用例,`0 tests` 不算通过。真实 Provider fixture 不得把工具顺序、processId、readiness 文本所在 chunk 或 OS PID 写进任务提示;验收器只按持久 action identity、fixture 计数、私有输出和公共泄漏扫描判定。三项门禁实际通过后才能把日期、Provider、数量和 PASS 结果写入技术方案或 decision log;未运行或被外部配置阻断时只记录 `BLOCKED` / 未验收事实。
|
||||
|
||||
`npm run agc` 会启动 Tauri 开发客户端;其 `beforeDevCommand` 通过 `npm run agc:serve` 先完成壳 typecheck,再启动或复用配套 SpacetimeDB、`api-server` 和固定 `127.0.0.1:3080` Vite。开发态只打开游戏创作聊天入口使用 `npm run agc:game-chat -- [--project-path <absolute-path>]`。只需要浏览器预览同一客户端时可用 `npm run agc:serve`;只启动配套后端和数据库时可用 `npm run agc:backend -- --database <name>`。
|
||||
`npm run agc` 会启动默认 Tauri 开发客户端;其 `beforeDevCommand` 通过 `npm run agc:serve` 先完成壳 typecheck,再启动或复用配套 SpacetimeDB、`api-server` 和固定 `127.0.0.1:3080` Vite。并行工作树使用 `npm run agc:app-run`,启动器把 `app-run` profile 通过子进程环境传给同一 `beforeDevCommand`,改用独立 `3081 / 8084 / 8085 / 3103` 端口、数据库、data dir 和 Tauri identity;禁止手工只改 Vite 端口而继续连接默认后端或 AppData。开发态只打开游戏创作聊天入口使用 `npm run agc:game-chat -- [--project-path <absolute-path>]`。只需要浏览器预览同一客户端时可用 `npm run agc:serve`;只启动配套后端和数据库时可用 `npm run agc:backend -- --database <name>`。
|
||||
|
||||
Linux 多用户共享同一台机器开发时,本地 dev 脚本会为当前 Linux 用户分配一个固定端口段并写入系统级注册表 `/var/tmp/genarrative-dev-port-ranges/registry.json`,自动分配从 `10000-10099` 开始,每段 100 个端口,五个 dev 服务依次使用 `start` 到 `start + 4`,其中 BgFilter worker 固定为 `start + 4`。可用 `GENARRATIVE_DEV_PORT_RANGE` 或 `npm run dev -- --port-range` 手动指定端口段用于特殊场景;注册表会阻止不同用户使用相同或重叠段,并让同一用户后续启动继续复用自己已占用的固定段。该机制只在 Linux 生效,Windows 把第五个服务纳入原有统一端口探测与漂移逻辑。
|
||||
|
||||
|
||||
@@ -14,6 +14,14 @@
|
||||
- 关联:相关文件、文档、提交或 Issue
|
||||
```
|
||||
|
||||
## 多工作树只隔离代码,不会自动隔离 AGC 运行资源
|
||||
|
||||
- 现象:两个工作树同时运行 `npm run agc` 时,后启动者因 `3080` 已占用而失败,或用户在两个同名窗口间误把另一工作树的页面当作当前修改结果。
|
||||
- 原因:worktree 只隔离 Git 工作目录;端口、Tauri identifier、AppData、SpacetimeDB 数据库和 data dir 都属于宿主机共享资源。只修改 Vite 端口仍会让代理、Runner 或数据库串到默认实例。
|
||||
- 处理:默认工作树继续使用 `npm run agc`;当前 app-run 使用 `npm run agc:app-run`,由统一 profile 同时隔离 `3081 / 8084 / 8085 / 3103`、数据库、data dir、Tauri identifier、AppData 和窗口标题。不要手工终止无法证明归属的进程,也不要只覆盖单个端口。
|
||||
- 验证:分别用 `lsof -a -p <pid> -d cwd -Fn` 核对两组监听进程 cwd;app-run 窗口标题必须为“AI 游戏创作 · App Run”,Vite marker API target 必须指向 app-run 的实际 API。
|
||||
- 关联:`apps/ai-game-creator-shell/scripts/start-tauri-dev.mjs`、`apps/ai-game-creator-shell/scripts/start-dev-stack.mjs`、`apps/ai-game-creator-shell/src-tauri/tauri.app-run-dev.conf.json`、`docs/【开发运维】本地开发验证与生产运维-2026-05-15.md`。
|
||||
|
||||
## Linux 生产脚本门禁不能假设本地也是 GNU userland
|
||||
|
||||
- 现象:macOS 本地运行维护页、生产 API 部署和 Rust 产物门禁时,依次出现 `mv: illegal option -- T`、`mapfile: command not found`、`/usr/bin/cp` / `/usr/bin/chmod` 不存在,以及 `.rlib` 明明含有 `.o` 却报告“没有可扫描成员”;安全修复计划还会把 `/var/folders` 到 `/private/var/folders` 的系统别名误判为用户符号链接。
|
||||
|
||||
Reference in New Issue
Block a user