--- title: Checkpoint 2026-09-29 22:51:28 UTC [2fdc51067a] type: checkpoint permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-51-28-utc-2fdc51067a stable_id: 27de0ed5-9250-4b4c-8a65-bbca569181ac scope: project memory_type: checkpoint project_id: 25464650-ed5d-440e-b362-190f2852d451 usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 status: active revision: 1 request_id: n-connect-n1n2-20260930-ready created_at: '2026-09-29T22:51:28.201592+00:00' updated_at: '2026-09-29T22:51:28.201592+00:00' tags: - ready-to-merge - line-N - n1 - n2 - feat/n-connect --- # 检查点:连接 N · N1+N2 ready-to-merge ## 完成内容 - N1 `internal/listener`:首字节识别(放回)、10s 超时、TLS(无 NextProtos)、证书按 mtime 每小时重载、admin 分离与 404、通道 Listener、路由骨架、受信任代理 XFF、端口 0 写 listen.addr/admin.addr。 - N2 `internal/broker`:mochi InlineClient 装配约束、coder/websocket `/mqtt`、连接随机代号、心跳校正、Authenticator 接口(默认拒绝)、每端串行上行队列 256、下行大小检查与大帧名额、QoS 选择由 PublishOpts。 - 未改 `cmd/nixmsg`、未改 `internal/protocol` 帧定义、未做 N3。 ## 分支 / 路径 - 分支:`feat/n-connect`(已推送 origin,未推 main,未强推) - 工作树:`E:\code\NixMsg-wt\n` - tip:`151707ba093b8d4bab6dc24414a556c4bd8a9bfb` - 基于:`origin/main` @ `22c56d1` - 提交: 1. `6e5179f` feat: 实现端口识别、TLS 证书重载与路由骨架 2. `151707b` feat: 实现 WebSocket、mochi broker 与下行发布 ## 验证 - 工作树内 `task check` 通过(web build、embeddist、golangci-lint 0、go test 含 listener/broker)。 ## 总控合并时要接的入口 1. `listener.New(Options{Listen, AdminListen, DataDir, CertFile, KeyFile, AllowPlaintext, TrustedProxies, ClientHandler, AdminHandler, OnMQTT})` → `Start`/`Close`;`OnMQTT` 调 `broker.AttachTCP`。 2. `listener.NewMux(RoleClient|RoleAdmin|RoleShared, Handlers{MQTT: broker.WSHandler(proxies), ...})`。 3. `broker.New(Options{Authenticator, Uplink})`;`wire` 里 `Downlink`/`Conns` 用 `*broker.Broker`。 4. N3 前 Authenticator 用 Reject 或临时 Allow;N3 替换真实登录。 ## DEVIATIONS - `docs/DEVIATIONS.md`「连接 N」五条(未接线 cmd、addr 仅 port0、默认拒绝登录、大帧释放、OnPublishDropped 仅日志)。 ## 没做完 - N3 登录/会话令牌/握手/顶号/30s 握手超时。 - cmd/nixmsg 接线。 - OnPublishDropped → M 线清推送标记。 - 大帧确认超时释放(依赖 M)。 ## 给下个会话 - 可 ff-merge `feat/n-connect`;勿改主工作区并行开发;勿强推 main。 - 主工作区若有无关 `?? 2.0` 勿动。