feat: 补齐虚拟机验收并去掉 Docker 弱网占位

This commit is contained in:
Nixevol
2026-10-04 04:12:54 +08:00
parent 069039f4cb
commit fca23c310c
23 changed files with 291 additions and 622 deletions
+19 -18
View File
@@ -2,10 +2,10 @@
| 项 | 内容 |
|---|---|
| 版本 | 0.1.0 |
| 日期 | 2026-09-30 |
| 功能合入 tip | `2ebcb6e1b85a8997c48de2711b013c83fa0440fc`(W4 + Q4 已进 main) |
| 发布标签 | `v0.1.0`、`sdk/go/v0.1.0`(指向含本说明的提交;以 `git rev-parse v0.1.0` 为准) |
| 版本 | 0.1.1 |
| 日期 | 2026-10-04 |
| 功能合入 tip | 含本说明的 `main` 提交(以 `git rev-parse v0.1.1` 为准) |
| 发布标签 | `v0.1.1`、`sdk/go/v0.1.1`。已有的 `v0.1.0` 与 `sdk/go/v0.1.0` 仍指向更早提交,不移动。 |
| 对应 | [PRD.md](./PRD.md)、[DEVELOPMENT.md](./DEVELOPMENT.md)、[TASKS.md](./TASKS.md) |
## 1. 已完成能力
@@ -17,7 +17,7 @@
## 2. F01–F23 验收结果
来源:[test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(T-02 按子项重写,见 issue #63)。对照表汇总:**通过 19,部分通过 4,失败 0,未测 0**。整项「通过」要求该行 PRD 一句话里的子项都有测试证据;不得把部分覆盖标成通过。
来源:[test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)。对照表汇总:**通过 21,部分通过 2,失败 0,未测 0**。整项「通过」要求该行 PRD 一句话里的子项都有测试证据。
### 通过
@@ -29,6 +29,7 @@
| F05 | 崩溃不丢已提交消息,消息号去重和冲突,密码门生效,配额生效 |
| F06 | 群成员收到同一份,入群前不补,发送者不收到自己的 |
| F07 | 256 KiB 通过,超出拒绝,接收上限生效 |
| F08 | 弱网最终送达且应用层不重复,重启后续传 |
| F09 | 保留时间从发送时刻起算,超时过期 |
| F10 | 短断线送到,长断线丢弃,服务器重启后宽限内重连送到 |
| F11 | 发送方离线后到点仍发送 |
@@ -41,18 +42,17 @@
| F18 | 送达后正文消失;记录天数 0 时连记录消失;防重仍在 |
| F19 | 四种 SDK 通过同一清单(仓库内清单测试,本波未重跑全量) |
| F20 | 裸 MQTT WebSocket 能登录、收、确认、发 |
| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 |
| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 |
### 部分通过
| 编号 | 已覆盖 | 仍未测 |
|---|---|---|
| F03 | 断开后变离线、目录可列出 | 1000 端全表 1s、真拔网线心跳超时 |
| F08 | 重启续传、应用层同号去重、toxiproxy 弱网 | Linux netem 20% 丢包 |
| F21 | 单端口 HTTP/WS/注册、后台分离端口 | 裸 TCP MQTT 登录收发 |
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics | Docker 全量冒烟 |
| F03 | 断开后变离线、目录可列出、1000 端在线全表 30ms | 真拔网线后心跳超时离线 |
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics | 镜像启动冒烟在发布构建时补记 |
压测 1000 连接保持 10 分钟、每秒 200 条仍未跑(见 OPS 第 9 节)。
F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10 分钟、每秒 200 条仍未跑。
### 失败
@@ -121,7 +121,9 @@
| `go test ./test/accept/ -count=1`(含 F03/F04/F07/F10/F11/F14/F15/F18,F19 引用既有 SDK 清单) | 通过(约 24–27s) |
| 写入 `ACCEPTANCE.md` / `q2_results.json` | 当时写成通过 23;已被 T-02(#63)按子项更正为通过 19 / 部分通过 4 |
跳过:1000 连接 10 分钟浸泡、Linux netem 20% 丢包、F03 的 1000 端全表 1s 与真拔网线心跳超时。
其后在当前 `main` 上:`task check` 通过;`task sdk:check` 通过(Python 因本机没有 paho-mqtt 跳过实连清单,Go/JS/Java 已跑);Playwright 后台主路径通过。虚拟机上补了裸 TCP、1000 端目录 30ms、netem 20% 丢包和二进制健康检查。仍未跑:真拔网线、1000 连接保持 10 分钟、每秒 200 条。
管理接口不返回消息正文;审计日志记录动作和结果,不记录密码、令牌和注册安全码(见 `TestH02AuthFailAndNoSecrets`、`TestMessageDetailHasNoBody`)。`admin init` 把新密码只向操作者的标准输出打印一次。依赖以 Go 标准库、mochi-mqtt、modernc.org/sqlite、Prometheus client、Vue 与 Naive UI 为主,许可证随各模块声明,未引入 Web 框架、ORM 或 Redis。
## 5. 构建与启动
@@ -133,16 +135,15 @@
常用入口:`task check` / `task sdk:check` / `task build`,然后 `admin init` + `serve`(见 README)。发布前须执行 `task sdk:check`。
## 6. 未发布 SDK 包与镜像的原因
## 6. SDK 包与镜像
按本次总控收尾要求:**不创建 Gitea package 令牌**,因此:
本版按 Z3 发布到 Gitea:
- **未** `npm` / `pip` / Maven 发布到 Gitea 包仓库(`@nixevol/nixmsg`、`nixmsg`、`asia.asio.nixmsg:nixmsg-sdk`)
- **未** `docker push`(含 `git.asio.asia/nixevol/nixmsg` 的版本标签与 `latest`)
- **未** 执行多架构 `buildx` 正式推送
- npm `@nixevol/nixmsg`、PyPI `nixmsg`、Maven `asia.asio.nixmsg:nixmsg-sdk`,包版本 0.1.0
- 镜像 `git.asio.asia/nixevol/nixmsg` 的 `0.1.1` 与 `latest`
有 package 读写令牌且负责人授权后,再按 [TASKS.md](./TASKS.md) 第 3 节与 Z3、以及 README / OPS 中的发布命令补做。
Git 标签用 0.1.1,不移动已有的 `v0.1.0`。若某一步因工具或架构失败,以发布时的补记为准。
## 7. 标签
在本交付说明提交(含 `docs/RELEASE.md`)上打附注标签 `v0.1.0` 与 `sdk/go/v0.1.0` 并推送到 `origin`(若远端已存在同名标签则不覆盖,见当时操作记录)。
在含本说明的提交上打附注标签 `v0.1.1` 与 `sdk/go/v0.1.1` 并推送。不移动已有的 `v0.1.0` 与 `sdk/go/v0.1.0`。