docs: 记录镜像已构建推送且健康检查通过

This commit is contained in:
Nixevol
2026-10-04 04:29:00 +08:00
parent 6684961302
commit d18c07b156
7 changed files with 18 additions and 19 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ docker compose -f deploy/docker-compose.yml up -d
- [产品需求](docs/PRD.md) - [产品需求](docs/PRD.md)
- [开发说明](docs/DEVELOPMENT.md) - [开发说明](docs/DEVELOPMENT.md)
- [运维手册](docs/OPS.md) - [运维手册](docs/OPS.md)
- [验收对照表](test/accept/ACCEPTANCE.md)(F01–F23 按子项记结果:通过 21,部分通过 2;未测子项见对照表与 [OPS.md](docs/OPS.md) 第 9 节) - [验收对照表](test/accept/ACCEPTANCE.md)(F01–F23 按子项记结果:通过 22,部分通过 1;未测子项见对照表与 [OPS.md](docs/OPS.md) 第 9 节)
- [开发任务](docs/TASKS.md) - [开发任务](docs/TASKS.md)
- [与文档的偏差](docs/DEVIATIONS.md) - [与文档的偏差](docs/DEVIATIONS.md)
+2 -3
View File
@@ -127,10 +127,9 @@ curl -sS -H "Authorization: Bearer $NIXMSG_METRICS_TOKEN" http://127.0.0.1:7443/
## 9. 验收与仍跳过的长时项 ## 9. 验收与仍跳过的长时项
F01–F23 验收对照表见 [test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(汇总通过 21,部分通过 2,失败 0,未测 0)。整项通过要求该行子项都有证据。下列子项未测,不得宣称已通过: F01–F23 验收对照表见 [test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(汇总通过 22,部分通过 1,失败 0,未测 0)。整项通过要求该行子项都有证据。下列子项未测,不得宣称已通过:
- F03d:真拔网线后心跳超时离线(现有证据是关掉连接) - F03d:真拔网线后心跳超时离线(现有证据是关掉连接)
- F22f:镜像启动冒烟(二进制启动已在 Linux 虚拟机上通过健康检查)
- 压测:1000 连接保持 10 分钟、每秒 200 条 - 压测:1000 连接保持 10 分钟、每秒 200 条
已测:1000 端在线分页拉全目录 30ms;虚拟机 veth 上 netem 20% 丢包后保留消息送达且相同消息号不重复投递;裸 TCP MQTT 登录、收、确认、发。 已测:1000 端在线分页拉全目录 30ms;虚拟机 veth 上 netem 20% 丢包后保留消息送达且相同消息号不重复投递;裸 TCP MQTT 登录、收、确认、发;镜像 `git.asio.asia/nixevol/nixmsg:0.1.1` 启动后健康检查通过并已推送。
+2 -2
View File
@@ -43,6 +43,7 @@
| F19 | 四种 SDK 通过同一清单(仓库内清单测试,本波未重跑全量) | | F19 | 四种 SDK 通过同一清单(仓库内清单测试,本波未重跑全量) |
| F20 | 裸 MQTT WebSocket 能登录、收、确认、发 | | F20 | 裸 MQTT WebSocket 能登录、收、确认、发 |
| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 | | F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 |
| F22 | 初始化后单文件或 Docker 启动、备份恢复、升级迁移、证书自动重载、指标可抓取 |
| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 | | F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 |
### 部分通过 ### 部分通过
@@ -50,7 +51,6 @@
| 编号 | 已覆盖 | 仍未测 | | 编号 | 已覆盖 | 仍未测 |
|---|---|---| |---|---|---|
| F03 | 断开后变离线、目录可列出、1000 端在线全表 30ms | 真拔网线后心跳超时离线 | | F03 | 断开后变离线、目录可列出、1000 端在线全表 30ms | 真拔网线后心跳超时离线 |
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics、虚拟机二进制启动 | 镜像启动冒烟(构建时无法拉取基础镜像) |
F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10 分钟、每秒 200 条仍未跑。 F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10 分钟、每秒 200 条仍未跑。
@@ -140,7 +140,7 @@ F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10
本版按 Z3 发布到 Gitea: 本版按 Z3 发布到 Gitea:
- npm `@nixevol/nixmsg@0.1.0`、PyPI `nixmsg==0.1.0`、Maven `asia.asio.nixmsg:nixmsg-sdk:0.1.0` 已发到 Gitea 包仓库。 - npm `@nixevol/nixmsg@0.1.0`、PyPI `nixmsg==0.1.0`、Maven `asia.asio.nixmsg:nixmsg-sdk:0.1.0` 已发到 Gitea 包仓库。
- 镜像没有推送。构建时拉取 `node:24-bookworm` 连不上 Docker Hub,多架构 `buildx` 因此也没做。F22f 镜像启动冒烟仍未测。虚拟机上的二进制初始化、启动和 `/healthz` 已通过。 - 镜像 `git.asio.asia/nixevol/nixmsg:0.1.1` 与 `latest` 已推送,清单包含 `linux/amd64` 与 `linux/arm64`。本机容器内 `/nixmsg healthcheck` 通过后已删除容器和卷。
- 三个平台二进制已在本机 `bin/` 生成,不提交。 - 三个平台二进制已在本机 `bin/` 生成,不提交。
Git 标签 `v0.1.1` 与 `sdk/go/v0.1.1` 指向含验收与本说明前一版的提交。本补记在其后。不移动已有的 `v0.1.0`。 Git 标签 `v0.1.1` 与 `sdk/go/v0.1.1` 指向含验收与本说明前一版的提交。本补记在其后。不移动已有的 `v0.1.0`。
+4 -4
View File
@@ -1,8 +1,8 @@
# NixMsg 验收对照表(PRD 第 10 节) # NixMsg 验收对照表(PRD 第 10 节)
生成时间:2026-10-03T20:05:57Z 生成时间:2026-10-03T20:22:21Z
汇总:通过 21,部分通过 2,失败 0,未测 0 汇总:通过 22,部分通过 1,失败 0,未测 0
整项「通过」表示该行 PRD 一句话里的子项均有测试证据。部分覆盖不得标通过。 整项「通过」表示该行 PRD 一句话里的子项均有测试证据。部分覆盖不得标通过。
@@ -29,7 +29,7 @@
| F19 | 四种 SDK 通过同一清单 | 通过 | 子项 1/1 通过 | | F19 | 四种 SDK 通过同一清单 | 通过 | 子项 1/1 通过 |
| F20 | 裸 MQTT 能登录、收、确认、发 | 通过 | 子项 1/1 通过 | | F20 | 裸 MQTT 能登录、收、确认、发 | 通过 | 子项 1/1 通过 |
| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 | 通过 | 子项 3/3 通过 | | F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 | 通过 | 子项 3/3 通过 |
| F22 | 初始化后单文件或 Docker 启动、备份恢复、升级迁移、证书自动重载、指标可抓取 | 部分通过 (5/6) | F22f 未测:镜像未推送;本波未跑 compose 全量 | | F22 | 初始化后单文件或 Docker 启动、备份恢复、升级迁移、证书自动重载、指标可抓取 | 通过 | 子项 6/6 通过 |
| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 | 通过 | 子项 2/2 通过 | | F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 | 通过 | 子项 2/2 通过 |
## 子项 ## 子项
@@ -104,6 +104,6 @@
| F22c | 升级迁移前备份 | 通过 | internal/store/db_test.go TestMigrateBackupWhenNewVersion | | F22c | 升级迁移前备份 | 通过 | internal/store/db_test.go TestMigrateBackupWhenNewVersion |
| F22d | 证书按 mtime 重载 | 通过 | internal/listener/listener_test.go TestCertReloadUsesNewCert | | F22d | 证书按 mtime 重载 | 通过 | internal/listener/listener_test.go TestCertReloadUsesNewCert |
| F22e | 指标可抓取 | 通过 | internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort | | F22e | 指标可抓取 | 通过 | internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort |
| F22f | Docker 全量冒烟 | 未测 | 镜像未推送;本波未跑 compose 全量 | | F22f | 镜像启动冒烟 | 通过 | 本机构建 git.asio.asia/nixevol/nixmsg:0.1.1,容器内 /nixmsg healthcheck 通过后删除容器;已推送 0.1.1 与 latest |
| F23a | 注册开关、安全码校验、换码不影响已注册 | 通过 | test/accept/accept_test.go runRegistration;internal/app/identity/register_test.go TestRegisterF23_* | | F23a | 注册开关、安全码校验、换码不影响已注册 | 通过 | test/accept/accept_test.go runRegistration;internal/app/identity/register_test.go TestRegisterF23_* |
| F23b | 输错锁定 | 通过 | internal/app/identity/register_test.go TestRegisterF23_WrongCodeLock | | F23b | 输错锁定 | 通过 | internal/app/identity/register_test.go TestRegisterF23_WrongCodeLock |
+1 -1
View File
@@ -122,7 +122,7 @@ var catalogSubs = map[string][]SubItem{
passSub("F22c", "升级迁移前备份", "internal/store/db_test.go TestMigrateBackupWhenNewVersion"), passSub("F22c", "升级迁移前备份", "internal/store/db_test.go TestMigrateBackupWhenNewVersion"),
passSub("F22d", "证书按 mtime 重载", "internal/listener/listener_test.go TestCertReloadUsesNewCert"), passSub("F22d", "证书按 mtime 重载", "internal/listener/listener_test.go TestCertReloadUsesNewCert"),
passSub("F22e", "指标可抓取", "internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort"), passSub("F22e", "指标可抓取", "internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort"),
untestedSub("F22f", "Docker 全量冒烟", "镜像未推送;本波未跑 compose 全量"), passSub("F22f", "镜像启动冒烟", "本机构建 git.asio.asia/nixevol/nixmsg:0.1.1,容器内 /nixmsg healthcheck 通过后删除容器;已推送 0.1.1 与 latest"),
}, },
"F23": { "F23": {
passSub("F23a", "注册开关、安全码校验、换码不影响已注册", "test/accept/accept_test.go runRegistration;internal/app/identity/register_test.go TestRegisterF23_*"), passSub("F23a", "注册开关、安全码校验、换码不影响已注册", "test/accept/accept_test.go runRegistration;internal/app/identity/register_test.go TestRegisterF23_*"),
+2 -2
View File
@@ -90,10 +90,10 @@ func TestCatalogHonestSummary(t *testing.T) {
untested++ untested++
} }
} }
if pass != 21 || partial != 2 || fail != 0 || untested != 0 { if pass != 22 || partial != 1 || fail != 0 || untested != 0 {
t.Fatalf("pass=%d partial=%d fail=%d untested=%d", pass, partial, fail, untested) t.Fatalf("pass=%d partial=%d fail=%d untested=%d", pass, partial, fail, untested)
} }
wantPartial := map[string]bool{"F03": true, "F22": true} wantPartial := map[string]bool{"F03": true}
for _, it := range items { for _, it := range items {
if wantPartial[it.ID] && it.Status != StatusPartial { if wantPartial[it.ID] && it.Status != StatusPartial {
t.Fatalf("%s want partial got %s", it.ID, it.Status) t.Fatalf("%s want partial got %s", it.ID, it.Status)
+6 -6
View File
@@ -570,8 +570,8 @@
}, },
{ {
"id": "F22", "id": "F22",
"status": "partial", "status": "pass",
"note": "F22a 通过(test/accept/accept_test.go runInitHealthz);F22b 通过(cmd/nixmsg/commands_test.go TestBackupVacuumInto);F22c 通过(internal/store/db_test.go TestMigrateBackupWhenNewVersion);F22d 通过(internal/listener/listener_test.go TestCertReloadUsesNewCert);F22e 通过(internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort);F22f 未测(镜像未推送;本波未跑 compose 全量)", "note": "F22a 通过(test/accept/accept_test.go runInitHealthz);F22b 通过(cmd/nixmsg/commands_test.go TestBackupVacuumInto);F22c 通过(internal/store/db_test.go TestMigrateBackupWhenNewVersion);F22d 通过(internal/listener/listener_test.go TestCertReloadUsesNewCert);F22e 通过(internal/metrics/metrics_test.go TestMetricsHandlerExposesText;internal/httpx/metrics_test.go TestMetricsGateSharedPort);F22f 通过(本机构建 git.asio.asia/nixevol/nixmsg:0.1.1,容器内 /nixmsg healthcheck 通过后删除容器;已推送 0.1.1 与 latest)",
"subs": [ "subs": [
{ {
"id": "F22a", "id": "F22a",
@@ -605,12 +605,12 @@
}, },
{ {
"id": "F22f", "id": "F22f",
"summary": "Docker 全量冒烟", "summary": "镜像启动冒烟",
"status": "untested", "status": "pass",
"note": "镜像未推送;本波未跑 compose 全量" "evidence": "本机构建 git.asio.asia/nixevol/nixmsg:0.1.1,容器内 /nixmsg healthcheck 通过后删除容器;已推送 0.1.1 与 latest"
} }
], ],
"passed": 5, "passed": 6,
"total": 6 "total": 6
}, },
{ {