7.2 KiB
NixMsg 0.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、DEVELOPMENT.md、TASKS.md |
1. 已完成能力
- 服务端:端登录与会话令牌、在线目录、单聊/群发、离线保留、延迟/定时/撤回/回执、自助注册、管理 API、Prometheus
/metrics、SQLite 存储、单端口多协议(HTTP / WebSocket MQTT / TCP MQTT) - 管理后台网页:接真实
/api/admin,Playwright 主路径 e2e - SDK:Go、JS/TS、Python、Java/Android(源码与接入清单测试在仓库内;包未发布,见第 5 节)
- 部署文档:README 构建与启动、OPS.md 运维、Docker Compose / Dockerfile 定稿(镜像未推送)
2. F01–F23 验收结果
来源:test/accept/ACCEPTANCE.md。对照表汇总:通过 21,部分通过 2,失败 0,未测 0。整项「通过」要求该行 PRD 一句话里的子项都有测试证据。
通过
| 编号 | 一句话 |
|---|---|
| F01 | 批量开通整批校验、停用、删除群主转让、删除后同编号重开不串数据 |
| F02 | 新设备登录后旧设备自动退出、换 IP 用令牌重连、两种密码锁定、重置密码后被踢、服务器故障不误报密码错误 |
| F04 | 只通知订阅了的端 |
| F05 | 崩溃不丢已提交消息,消息号去重和冲突,密码门生效,配额生效 |
| F06 | 群成员收到同一份,入群前不补,发送者不收到自己的 |
| F07 | 256 KiB 通过,超出拒绝,接收上限生效 |
| F08 | 弱网最终送达且应用层不重复,重启后续传 |
| F09 | 保留时间从发送时刻起算,超时过期 |
| F10 | 短断线送到,长断线丢弃,服务器重启后宽限内重连送到 |
| F11 | 发送方离线后到点仍发送 |
| F12 | 延迟窗口内撤回对方收不到 |
| F13 | 未推送必撤成功;群部分确认得到部分撤回 |
| F14 | 回执能补送给当时离线的发送方 |
| F15 | 输一次记住、改密失效、回复免密、进群仍要密码、防多账号轮流猜 |
| F16 | 群主权限、退出后不再收到、解散后同编号新群不收旧消息 |
| F17 | 后台管端、管注册、管群、查记录,响应里没有正文;API 令牌可用且不能越权 |
| F18 | 送达后正文消失;记录天数 0 时连记录消失;防重仍在 |
| F19 | 四种 SDK 通过同一清单(仓库内清单测试,本波未重跑全量) |
| F20 | 裸 MQTT WebSocket 能登录、收、确认、发 |
| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 |
| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 |
部分通过
| 编号 | 已覆盖 | 仍未测 |
|---|---|---|
| F03 | 断开后变离线、目录可列出、1000 端在线全表 30ms | 真拔网线后心跳超时离线 |
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics | 镜像启动冒烟在发布构建时补记 |
F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10 分钟、每秒 200 条仍未跑。
失败
无。
3. 偏差(供负责人回来审阅)
完整正文见 DEVIATIONS.md。以下只列小节标题,不抄全文:
- T0.1 2026-09-30
- L-WIRE 2026-09-30
- L-UPLINK 2026-09-30
- T0.2 2026-09-30
- T0.3 2026-09-30
- T0.5 2026-09-30
- T0.4 2026-09-30
- P1 2026-09-30
- P2 2026-09-30
- P3 2026-09-30
- P4 2026-09-30
- N1 / N2 2026-09-30
- N3 2026-09-30
- M1 2026-09-30
- M2 / M3 / M4 2026-09-30
- I1 2026-09-30
- I2 / I3 / I4 2026-09-30
- I5 2026-09-30
- A1 2026-09-30
- A2 2026-09-30
- A3 2026-09-30
- 后台网页 W(W1–W3 假数据与分页等条目)
- W4 2026-09-30
- S1.1 传输层可注入假实现(Go / JS)
- S1.2 Go autopaho
OnConnectionUp内握手改异步 - S1.3 重连退避与「稳定在线 60s」状态机自管
- S1.4 Go 模块许可证标注
- S1.5 JS 回调命名与文档概念名
- S1.6 任务 1–3 当时未做范围(已被 S1.7 取代)
- S1.7 2026-09-30 任务 4–5 接入清单与打包文档
- S2-PY/JAVA 1–3 2026-09-30
- S2-PY/JAVA 4–5 2026-09-30
- Q1 / Q4 骨架 2026-09-30
- Q2 第一部分(已合并功能验收)2026-09-30
- Q2 补齐 + Q3(本机 Windows)2026-09-30
- Q4 定稿 + Q5 文档 2026-09-30
- Q accept-rest 补测 2026-09-30
4. 本轮验证
合并 feat/w4-e2e、feat/q-release-docs 后,在 main(功能 tip 2ebcb6e,含本说明的发布提交)执行:
| 项 | 结果 |
|---|---|
task check |
通过 |
go test ./test/... |
通过(accept / chaos / harness / load / report) |
task w:e2e(W4 合并后) |
通过(1 passed) |
sdk/go:go test ./... |
通过 |
sdk/js:npm test |
通过(23 passed) |
sdk/python:venv + pytest |
通过(22 passed);测完已删本地 .venv |
sdk/java:mvn test |
通过(scoop maven 3.9.16;测完已删 target) |
其后在 feat/accept-rest 补齐短时间验收并更新对照表:
| 项 | 结果 |
|---|---|
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 |
其后在当前 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. 构建与启动
请直接按仓库文档操作,此处不重复步骤:
- 构建、交叉编译、Docker 本地构建与启动示例:README.md
- 配置项、备份、升级、证书、时钟、指标:docs/OPS.md
- 配置样例:
deploy/config.example.yaml、deploy/config.docker.yaml
常用入口:task check / task sdk:check / task build,然后 admin init + serve(见 README)。发布前须执行 task sdk:check。
6. SDK 包与镜像
本版按 Z3 发布到 Gitea:
- npm
@nixevol/nixmsg、PyPInixmsg、Mavenasia.asio.nixmsg:nixmsg-sdk,包版本 0.1.0 - 镜像
git.asio.asia/nixevol/nixmsg的0.1.1与latest
Git 标签用 0.1.1,不移动已有的 v0.1.0。若某一步因工具或架构失败,以发布时的补记为准。
7. 标签
在含本说明的提交上打附注标签 v0.1.1 与 sdk/go/v0.1.1 并推送。不移动已有的 v0.1.0 与 sdk/go/v0.1.0。