清理对外材料里的中转管理后台 + 把规矩变成测试

用户定的新规矩:
「你对外公开的数据里不要包含那个中转站管理的页面,你就只能提官网」

用户确认的范围:只清理「我对外的公开发言」
(发布说明 / 更新日志 / 官网 / README / 我给出的汇报),
服务端 zip 里的运维文档保留(装服务器的人需要它),
源码实现保留(路径是功能本身,藏起来没法维护)。

清掉的内容:
  * CHANGELOG.md:1.8.0 条目里"管理后台重做"整段、
    "管理页显示成一屏源码"、"管理页标题被切掉";
    1.7.1 条目里**直接写出的路径 /zhongzhuanzhan**、
    "管理入口从官网上移除";1.7.0 的"管理页加图标"
  * RELEASE-1.8.0.md:第四节「中转管理后台完全重做」整节删掉,
    改成「官网重新设计」

新增 _build/test_public_clean.py(15 项)并加进套件(阶段 3b7):
  * CHANGELOG / README / docs 里不许出现
    zhongzhuanzhan、/admin、管理后台、管理页、管理入口、admin_password
  * 官网渲染出来的 HTML 逐词检查,且站内链接只允许
    指向 /download/、/shot/、首页、图标、页内锚点
  * 发布说明里不许出现安装教程类内容(用户要求只放更新内容)

  为什么写成测试:文档没人看。这一天里我因为"以为记住了"
  翻了三次车,所以把规矩变成会红的断言。

新增 docs/项目规矩.md:把用户历次明确的约束集中记下来
(发布流程、对外清洁度、版本号、产物组成、README 规则、
白色简洁设计、改完必须验、测试工具不能当干扰源),
新会话接手时先读这个。

顺带修的工程问题(今天反复踩的坑):
  * 用 PowerShell 的 @"..."@ 嵌 Python 去改 .ps1 时,
    PowerShell 会先把 $var 展开成空,写进去一堆反斜杠
    -> verify_all.ps1 被写坏,& 语法报错
    现在改 .ps1 一律用 Python 读写文件
  * re.sub 的替换串会解释反斜杠转义,
    `"\\test_public_clean.py"` 里的 \t 变成制表符,
    路径成了 "_build<TAB>est_public_clean.py"
    -> 用 lambda 替换,避开转义

验收:全量回归 34 个阶段全部通过(含新的清洁度守卫)。
This commit is contained in:
xmz7891
2026-10-07 12:15:32 +08:00
parent 2f70e5bb49
commit 351171e6ea
11 changed files with 625 additions and 49 deletions
+130
View File
@@ -0,0 +1,130 @@
# 项目规矩(每次改动都要遵守)
> 这份文件是给**开发和发布**看的硬性约束。新会话接手时先读这个。
---
## 一、发布流程:先给用户,用户验完才推送
> 用户原话:「你以后就这样,你先把所有东西给我,我运行没问题再告诉你帮我推送」
**每次发版必须按这个顺序:**
1. 本地把**所有产物**构建完成
2. 跑测试(全量回归 + 安装包周期 + 发布验收)
3. **把产物交给用户**去验证
4. **等用户明确说「可以推」之后**,才创建 Gitee 发布 / 上传发布附件
❌ **绝对不能**自己构建完就直接建发布。
✅ 代码提交到 `main` 是可以的(那不是"发布")。
---
## 二、对外公开的内容里**不许出现中转管理后台**
> 用户原话:「你对外公开的数据里不要包含那个中转站管理的页面,你就只能提官网」
**"对外公开"包括:**
- 发布说明(Gitee release notes)
- `_build/CHANGELOG.md`(它会变成发布说明)
- 官网页面(`relay/landing.py` 渲染出来的)
- `README.md`
- **我(AI)在对话里给出的总结、汇报、方案**
- 任何我会贴给用户看、或用户可能转给别人的材料
**只能提官网 `https://relay.xxmxxs.top`。**
**不要说**:`/zhongzhuanzhan`、`/admin`、"管理后台"、"管理页"、
"管理入口"、管理密码之类。
### 边界(用户已确认)
| 范围 | 要不要清理 |
|---|---|
| 发布说明 / 更新日志 / 官网 / README / 我的对外汇报 | ✅ **必须清理** |
| 服务端 zip 里的运维文档(`README-server.txt`、`AFTER-INSTALL.txt` 等) | ❌ **保留** —— 那是给装服务器的人看的,删了他不知道怎么运维 |
| 仓库源码里的实现(`relay/relay.py` 等) | ❌ **保留** —— 路径是功能本身,藏起来没法维护 |
| `_build/` 里的一次性脚本、`_tests/` | ❌ 保留(内部工程材料) |
### 换一种说法
需要提到"能看设备列表 / 删设备 / 看流量"这类能力时,说:
> 「在官网下载,需要管理时看服务端 zip 里的说明文档」
不要直接把管理页摆出来。
---
## 三、发版必须更新版本号
> 用户原话:「自行更新版号」
每次上传都要升版本号。版本号散落在多处,**用脚本统一改**:
```powershell
python _build\bump_180.py # 改版本号时把里面的 OLD/NEW 改掉
```
⚠️ `.ps1` 文件必须保留 **UTF-8 BOM**,否则 PowerShell 按 GBK 读会中文乱码 + 语法报错。
用 `edit` 工具改 `.ps1` 会吃掉 BOM,改完要补:
```powershell
python _build\fix_ps1_bom.py
```
---
## 四、发布产物的组成
| 平台 | 产物 | 说明 |
|---|---|---|
| Windows | `ykxmz-setup-X.Y.Z.exe` | **安装包**,不是 agent zip。用户要双击就能装 |
| 服务端 | `ykxmz-server-X.Y.Z.zip` | 随身 WiFi / Linux |
| 手表 | `ykxmz-watch-X.Y.Z.apk` | 直接给 APK,不打 zip |
**发布说明只放更新内容**(用户原话:「以后只放更新内容」),不要放安装教程之类的。
---
## 五、README 只在功能变化时更新
> 用户原话:「以后只放更新内容」/ 修 bug 不用动 README
功能变了才更新 `README.md`;纯 bug 修复不用。
---
## 六、设计理念:白色简洁
> 用户原话:「所有东西都要白色简洁,这是我的设计理念」
官网、管理后台、文档、任何界面 —— 一律白色、简洁、克制。
配色令牌见 `relay/landing.py` 顶部(`#ffffff` / `#fafbfc` / `#e6e8eb` /
`#1a1d21` / `#6b7280` / `#2563eb`)。
---
## 七、改完必须立刻验
这一天里我因为"改完没验"翻了三次车:
1. 替换管理页时**把 `main()` 入口一起删了** → relay 起不来,systemd 重启 24 次,
所有接口 000。教训:**"删到文件末尾"之前必须先确认末尾有什么。**
2. 引用了**从没定义过的 `ADMIN_PATH` 常量** → 管理页 NameError。
3. 改了 `_send()` 的调用**没传 Content-Type** → 浏览器把整页 HTML
当纯文本显示。**当时只验了 HTTP 200 和字节数,两个都对。**
→ **200 不等于页面能看,响应头也得看。**
**规矩**:任何改动之后,至少跑一遍
「管理页 + 官网 + 关键接口 + 响应头」的回归。
---
## 八、测试工具自身不能成为干扰源
测可用率时,我后台还跑着一个观察任务在并发打接口,
测出 80%、20% 的失败 —— 停掉它立刻变成 100%。
**测稳定性之前,先确认没有别的任务在打同一个接口。**