diff --git a/docs/superpowers/specs/2026-08-26-二七王前端A-地基与逻辑层-design.md b/docs/superpowers/specs/2026-08-26-二七王前端A-地基与逻辑层-design.md index 3548964..aaf31c5 100644 --- a/docs/superpowers/specs/2026-08-26-二七王前端A-地基与逻辑层-design.md +++ b/docs/superpowers/specs/2026-08-26-二七王前端A-地基与逻辑层-design.md @@ -82,8 +82,8 @@ client/js/01_SubGame/codes/ ui/ LayoutSolver.js SubGameHooks.js 本阶段为空骨架 -client/scripts/ - sync_shared.cmd / sync_shared.ps1 +<仓库根>/ + sync_shared.cmd / sync_shared.ps1 跨端同步脚本,放根目录(见 §7.4) client/tests/ _load.js _assert.js run.js test_*.js ``` @@ -288,10 +288,20 @@ trump_rank ───────→ id_to_code ### 7.4 前端同步 -- `client/scripts/sync_shared.cmd` + `sync_shared.ps1`(仿既有 `build_spine_data.cmd` 范式):把 `server/games/erqiwang/shared/*.js` 拷到 `client/js/01_SubGame/codes/shared/` -- 副本**逐字节一致**——浏览器无 `module`,尾部守卫自动跳过,同一份文件两个运行时都能跑 -- 前端副本**只读**(红线:`codes/shared/` 不在前端改,改服务端权威源后跑同步脚本) -- **防漂移守卫**:`client/tests/test_shared_sync.js` 断言两份文件内容逐字节相等,漂移即红 +**单向流水线,方向不可逆**: + +``` +server/games/erqiwang/shared/ ← 唯一可修改处(权威源) + │ sync_shared.cmd + ▼ +client/js/01_SubGame/codes/shared/ ← 只读副本,任何情况下都不在前端改 +``` + +- **脚本位置:仓库根目录** `sync_shared.cmd` + `sync_shared.ps1`(`.cmd` 调 `.ps1`,仿既有 `client/scripts/build_spine_data.cmd` 的范式)。它是**跨端**的工程动作——源在 `server/`、目标在 `client/`,不属于任何一端,故不放 `client/scripts/`。 +- 脚本行为:把 `server/games/erqiwang/shared/*.js` 覆盖拷贝到 `client/js/01_SubGame/codes/shared/`,并打印同步了哪些文件。**只有这一个方向**,脚本不提供反向同步。 +- 副本**逐字节一致**——浏览器无 `module`,尾部 `module.exports` 守卫自动跳过,同一份文件两个运行时都能跑。 +- 纪律(写进脚本头注释与 `codes/shared/` 目录说明):**改动一律落在服务端 `shared/`,改完跑一次根目录的 `sync_shared.cmd`**;前端副本的任何本地修改都会在下次同步时被覆盖。 +- **防漂移守卫**:`client/tests/test_shared_sync.js` 断言两份文件内容逐字节相等——忘了同步、或有人手改了前端副本,测试立刻红。这条守卫比人工纪律可靠。 --- @@ -346,6 +356,7 @@ config/*(纯数据,最先)→ shared/cards.js → core/* → ui/LayoutSolv 4. `git config core.hooksPath .githooks` 下提交通过机械红线校验(严格 ES5、可编辑范围) 5. 常量层与清单 §3 / §5 / §6 逐条对应,无遗漏、无臆造条目 6. 业务代码零裸值:`core/`、`ui/` 里不出现任何精灵 ID、坐标、时长的字面量 +7. `CLAUDE.md`「常用命令」一节补上根目录的 `sync_shared.cmd`(该节现在写的是「仓库里唯一的脚本」,新增后须同步修订) ---