create: Checkpoint 2026-09-29 22:00:06 UTC [0a3e2dc9c1]

MemRelay-Operation: checkpoint-save:nixmsg-t03-checkpoint-20260930-l
MemRelay-Resource: ef3be336-00c6-40d7-ae47-77e7994e5e93
This commit is contained in:
2026-09-30 06:00:10 +08:00
parent c81ddeefab
commit 8e64dbe91f
2 changed files with 66 additions and 0 deletions
@@ -0,0 +1,54 @@
---
title: Checkpoint 2026-09-29 22:00:06 UTC [0a3e2dc9c1]
type: checkpoint
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-00-06-utc-0a3e2dc9c1
stable_id: ef3be336-00c6-40d7-ae47-77e7994e5e93
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: nixmsg-t03-checkpoint-20260930-l
created_at: '2026-09-29T22:00:06.111132+00:00'
updated_at: '2026-09-29T22:00:06.111132+00:00'
tags:
- t03
- ready-to-merge
- line-L
- feat/t03-store
---
## T0.3 完成(线 L)
- **任务**:T0.3 internal/store(迁移、建表、写入队列接口)
- **分支**:feat/t03-store
- **工作树**:E:/code/NixMsg-wt/t03(toplevel 确认不是主工作区)
- **基于**:origin/main @ 86dc10a
- **提交**:33db3e7 feat: 实现 SQLite 迁移备份、完整表结构与简单写入队列
- **已推送**:origin/feat/t03-store(普通推送,未推 main、未强推)
### 关键实现
- 保留 0001=SELECT 1;新增 0002_schema.sql(DEVELOPMENT 7.7 全部业务表/索引,含 api_tokens、settings、session_*)
- Migrate:有 pending 且打开前已有 nixmsg.db 时 VACUUM INTO data_dir/backup/pre-migrate-<UTC>.db;失败返回错误
- Open:写连接 DSN+_txlock=immediate MaxOpenConns(1);读池去掉 _txlock;Queue 简单互斥一操作一事务
- serve 改为 store.Open,保留 /healthz 与 listen.addr
### 验证
- task check 通过(web build、embeddist build、golangci-lint 0 issues、go test 全绿)
- 单测:空目录建表、重复启动不重迁、旧库遇新版本有备份、Queue 写入可读
### 偏差(docs/DEVIATIONS.md 总控 L / T0.3)
1. 表在 0002 不改 0001
2. Queue 互斥一事务,合并留给 P2
3. 空库不备份;失败不自动还原
### 未做
- 写入合并(P2)
- 7.8 启动恢复逻辑(属后续消息/平台任务,本任务未做)
- 未改 go.mod(无新依赖)
### 给下个会话
- 复用工作树 E:/code/NixMsg-wt/t03 与分支 feat/t03-store
- 总控审核后 ff-merge;勿在 e:/code/NixMsg 主工作区改
- schema_migrations 由执行器维护,不在 0002 内