二七王:shared 同步脚本改放仓库根目录

同步是跨端动作(源在 server、目标在 client),不属于任何一端,
故 sync_shared.cmd 放根目录而非 client/scripts/。

同时写明单向流水线纪律:只改服务端 shared,改完跑脚本同步;
前端副本只读,本地改动会被覆盖,由字节一致守卫测试兜底。
验收补一条:CLAUDE.md「常用命令」需同步收录该脚本。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-26 18:42:52 +08:00
co-authored by Claude Opus 5
parent 849de06194
commit 0f29c2e08c
@@ -82,8 +82,8 @@ client/js/01_SubGame/codes/
ui/ ui/
LayoutSolver.js LayoutSolver.js
SubGameHooks.js 本阶段为空骨架 SubGameHooks.js 本阶段为空骨架
client/scripts/ <仓库根>/
sync_shared.cmd / sync_shared.ps1 sync_shared.cmd / sync_shared.ps1 跨端同步脚本,放根目录(见 §7.4)
client/tests/ client/tests/
_load.js _assert.js run.js test_*.js _load.js _assert.js run.js test_*.js
``` ```
@@ -288,10 +288,20 @@ trump_rank ───────→ id_to_code
### 7.4 前端同步 ### 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、可编辑范围) 4. `git config core.hooksPath .githooks` 下提交通过机械红线校验(严格 ES5、可编辑范围)
5. 常量层与清单 §3 / §5 / §6 逐条对应,无遗漏、无臆造条目 5. 常量层与清单 §3 / §5 / §6 逐条对应,无遗漏、无臆造条目
6. 业务代码零裸值:`core/`、`ui/` 里不出现任何精灵 ID、坐标、时长的字面量 6. 业务代码零裸值:`core/`、`ui/` 里不出现任何精灵 ID、坐标、时长的字面量
7. `CLAUDE.md`「常用命令」一节补上根目录的 `sync_shared.cmd`(该节现在写的是「仓库里唯一的脚本」,新增后须同步修订)
--- ---