feat(schedule): 待办提醒推送、行事历仅展示提醒与管理 API

单次提醒 worker 投递、local 时间写入校验、未来 7 天提醒列表与忽略/批量删除;行事历去掉事项重复展示。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-06-30 02:02:58 +08:00
parent 7906f3c36d
commit 14f46cf318
20 changed files with 2453 additions and 452 deletions
@@ -0,0 +1,67 @@
# 103 发布 0630002 — 回退说明
**发布编号:** `20260630-013953-7906f3c`
**Git commit** `7906f3c`(分支 `0630002`
**发布时间:** 2026-06-30
## 本次内容
- **修复删除无效**MySQL `source_snapshot_json` 经 mysql2 返回为 object 时,`JSON.parse(object)` 抛错导致 `relative_path` 为空,工作区 HTML 未清理,列表同步后页面「复活」
- 新增 `parseJsonColumn()`,统一解析 JSON 列(`mindspace-pages.mjs``mindspace-page-sync.mjs`
- 删除 purge 失败时增加 warn 日志
## 103 自动备份(发布脚本已创建)
| 类型 | 路径(103 上) |
|------|----------------|
| 全量 live 备份 | `/Users/john/Project/backups/memind/memind-full-20260630-013953-7906f3c-before.tar.gz` |
| 持久目录备份 | `/Users/john/Project/backups/memind/memind-persisted-20260630-013953-7906f3c-before.tar.gz` |
| 旧源码归档 | `/Users/john/Project/archives/Memind-source-before-20260630-013953-7906f3c` |
| 当前 live | `/Users/john/Project/Memind`(无源码 runtime |
## 健康验证
```bash
ssh 58.38.22.103 'curl -sf http://127.0.0.1:8081/api/status && echo'
```
## 回退到上一版 runtime0630001
**103** 上执行:
```bash
RELEASE_ID=20260630-013953-7906f3c
PREV_RELEASE=20260630-012244-66ca0b3
APP_DIR=/Users/john/Project/Memind
ARCHIVE=/Users/john/Project/archives/Memind-source-before-${RELEASE_ID}
PORTAL_LABEL=cn.tkmind.memind-portal
LAUNCHD_GUI="gui/$(id -u)"
launchctl bootout "${LAUNCHD_GUI}/${PORTAL_LABEL}" 2>/dev/null || true
lsof -tiTCP:8081 -sTCP:LISTEN | xargs kill -9 2>/dev/null || true
mv "${APP_DIR}" "${APP_DIR}.failed-runtime-${RELEASE_ID}"
# 若需回到 0630001 runtime,从全量备份解压或保留的 runtime artifact 恢复
tar -xzf /Users/john/Project/backups/memind/memind-full-${PREV_RELEASE}-before.tar.gz -C /Users/john/Project
launchctl bootstrap "${LAUNCHD_GUI}" "${HOME}/Library/LaunchAgents/${PORTAL_LABEL}.plist"
launchctl kickstart -k "${LAUNCHD_GUI}/${PORTAL_LABEL}"
curl -sf http://127.0.0.1:8081/api/status
```
## 从全量 tar 恢复(极端情况)
```bash
cd /Users/john/Project
mv Memind "Memind.broken-$(date +%Y%m%d-%H%M%S)"
tar -xzf backups/memind/memind-full-20260630-013953-7906f3c-before.tar.gz
# 再启动 Portal LaunchAgent
```
## 本地复现 / 再发版
```bash
git checkout 0630002
npm run verify:mindspace-publish-guards:full
bash scripts/release-portal-runtime-prod.sh --yes
```