diff --git a/docs/RELEASE.md b/docs/RELEASE.md new file mode 100644 index 0000000..90ca99c --- /dev/null +++ b/docs/RELEASE.md @@ -0,0 +1,136 @@ +# NixMsg 0.1.0 交付说明 + +| 项 | 内容 | +|---|---| +| 版本 | 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` 为准) | +| 对应 | [PRD.md](./PRD.md)、[DEVELOPMENT.md](./DEVELOPMENT.md)、[TASKS.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](./OPS.md) 运维、Docker Compose / Dockerfile 定稿(镜像未推送) + +## 2. F01–F23 验收结果 + +来源:[test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(生成时间 2026-09-30T00:26:12Z)。对照表汇总:通过 14,失败 0,未测 9。 + +### 通过 + +| 编号 | 一句话 | +|---|---| +| F01 | 批量开通整批校验、停用、删除群主转让、删除后同编号重开不串数据 | +| F02 | 新设备登录后旧设备自动退出、换 IP 用令牌重连、两种密码锁定、重置密码后被踢、服务器故障不误报密码错误 | +| F05 | 崩溃不丢已提交消息,消息号去重和冲突,密码门生效,配额生效 | +| F06 | 群成员收到同一份,入群前不补,发送者不收到自己的 | +| F08 | 弱网最终送达且应用层不重复,重启后续传 | +| F09 | 保留时间从发送时刻起算,超时过期 | +| F12 | 延迟窗口内撤回对方收不到 | +| F13 | 未推送必撤成功;群部分确认得到部分撤回 | +| F16 | 群主权限、退出后不再收到、解散后同编号新群不收旧消息 | +| F17 | 后台管端、管注册、管群、查记录,响应里没有正文;API 令牌可用且不能越权 | +| F20 | 裸 MQTT 能登录、收、确认、发 | +| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 | +| F22 | 初始化后单文件或 Docker 启动、备份恢复、升级迁移、证书自动重载、指标可抓取 | +| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 | + +### 未测 + +| 编号 | 一句话 | 原因(摘自对照表) | +|---|---|---| +| F03 | 断开后状态及时变离线,全表可列出 | directory.list / 断开后离线状态未在本波单独断言 | +| F04 | 只通知订阅了的端 | presence.watch 订阅通知未覆盖 | +| F07 | 256 KiB 通过,超出拒绝,接收上限生效 | 256 KiB 边界与接收上限未覆盖 | +| F10 | 短断线送到,长断线丢弃,服务器重启后宽限内重连送到 | 抖动宽限长短断线未单独拨钟 | +| F11 | 发送方离线后到点仍发送 | 发送方离线后定时到点发送未覆盖 | +| F14 | 回执能补送给当时离线的发送方 | 回执补送未覆盖 | +| F15 | 输一次记住、改密失效、回复免密、进群仍要密码、防多账号轮流猜 | 对话密码授权链路未覆盖 | +| F18 | 送达后正文消失;记录天数 0 时连记录消失;防重仍在 | 正文删除与记录天数 0 未覆盖 | +| F19 | 四种 SDK 通过同一清单 | 对照表仍标未测(属 S1/S2);本轮交付回归已另跑四套 SDK 测试,见第 4 节 | + +### 失败 + +无。 + +## 3. 偏差(供负责人回来审阅) + +完整正文见 [DEVIATIONS.md](./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 + +## 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`) | + +## 5. 构建与启动 + +请直接按仓库文档操作,此处不重复步骤: + +- 构建、交叉编译、Docker 本地构建与启动示例:[README.md](../README.md) +- 配置项、备份、升级、证书、时钟、指标:[docs/OPS.md](./OPS.md) +- 配置样例:`deploy/config.example.yaml`、`deploy/config.docker.yaml` + +常用入口:`task check` / `task build`,然后 `admin init` + `serve`(见 README)。 + +## 6. 未发布 SDK 包与镜像的原因 + +按本次总控收尾要求:**不创建 Gitea package 令牌**,因此: + +- **未** `npm` / `pip` / Maven 发布到 Gitea 包仓库(`@nixevol/nixmsg`、`nixmsg`、`asia.asio.nixmsg:nixmsg-sdk`) +- **未** `docker push`(含 `git.asio.asia/nixevol/nixmsg` 的版本标签与 `latest`) +- **未** 执行多架构 `buildx` 正式推送 + +有 package 读写令牌且负责人授权后,再按 [TASKS.md](./TASKS.md) 第 3 节与 Z3、以及 README / OPS 中的发布命令补做。 + +## 7. 标签 + +在本交付说明提交(含 `docs/RELEASE.md`)上打附注标签 `v0.1.0` 与 `sdk/go/v0.1.0` 并推送到 `origin`(若远端已存在同名标签则不覆盖,见当时操作记录)。