# DayTrace **Repository Path**: tooka/DayTrace ## Basic Information - **Project Name**: DayTrace - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: feat/daytrace-time-river-mvp - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-05 - **Last Updated**: 2026-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
DayTrace 日晷标志

DayTrace

记录每天做了什么,看见时间流向,建立属于自己的时间档案。

DayTrace 是一款私密的原生微信小程序。它帮助用户快速记录真实发生过的活动, 通过一天的时间河流、日历回看和保守的月度统计,逐渐形成可追溯的个人时间档案。 项目坚持三个原则: - **记录事实,不评价生活。** 未记录时间只是空白,不是失败、待办或完成率。 - **宁可不给结论,也不制造结论。** 月度数据不足或覆盖度差异过大时,不展示增减判断。 - **数据属于用户。** 所有云数据按可信微信身份隔离,并支持恢复、导出和可验证删除。 ## 功能 ### 今天 - 一句话快速记录,输入过程中自动保存本地草稿 - 原生时间选择、分类、描述与时间重叠校验 - 完整覆盖 00:00–24:00 的时间河流 - 已记录时长、未记录时长、条目数与分类占比 - 已记录片段可查看,空白片段可直接补记 - 离线 outbox、幂等重试和待同步状态 ### 回看 - 月历切换与历史日期回看 - 今日、已记录、未记录、未来日期的无障碍状态 - 所选日期的记录时长和条目概览 - 从过去空白日期进入补记 ### 统计 - 月度已记录时长、有记录天数和日均时长 - 按已记录时长计算分类占比 - 分类统计下钻到构成数字的源记录 - 进行中月份只与上月等长区间比较 - 仅在两段数据均至少有 7 个记录日,且记录量差异不超过 30% 时给出比较结论 ### 我的 - 分类新增、重命名、颜色、排序、归档与恢复 - 同一微信身份的跨设备云数据恢复 - 版本化 JSON 数据导出 - 可恢复、可核验的全量在线数据删除 - 删除后 generation 栅栏阻止旧设备重新写回历史数据 ## 不做什么 当前版本不包含提醒、AI、日程规划、长日记、社交、广告、支付或位置能力。 DayTrace 记录已经发生的生活,不替用户安排未来。 ## 技术架构 ```text 微信小程序页面 ├─ domain/ 纯函数、时间区间、统计、导出格式 ├─ state/ 页面状态、缓存、恢复与错误降级 └─ services/ 本地存储、云 API、同步、导出与删除 │ ▼ 可信 CloudBase 云函数 API ├─ 微信上下文解析 owner,忽略客户端伪造身份 ├─ generation 栅栏阻止删除后旧写入复活 ├─ 日锁文档 + 事务保证同一天时间段不重叠 ├─ export lease 保证导出快照一致 └─ deletion state machine 完成全访问封锁与可恢复清理 │ ▼ CloudBase 经典文档数据库 + 临时文件存储 ``` ### 已冻结的关键决策 - [持久化后端:CloudBase 经典文档数据库](docs/decisions/0001-persistence-backend-document-database.md) - [写路径并发:日锁文档 + 事务](docs/decisions/0002-write-path-concurrency-model.md) - 跨进程操作名由共享定义维护,真实 API 闸门仍手写字面量作为外部观察者 - 派生统计读时计算,不持久化第二份可能漂移的事实 ## 项目结构 ```text DayTrace/ ├─ miniprogram/ 小程序生产代码 │ ├─ pages/ 今天、记录、回看、统计、我的 │ ├─ components/ 时间河流、摘要、编辑器、统计组件 │ ├─ domain/ 跨端纯领域逻辑 │ ├─ state/ 客户端状态层 │ └─ services/ 本地存储、云 API、同步与隐私能力 ├─ services/ TypeScript 云函数源代码 ├─ cloudfunctions/ 微信云函数部署入口/构建产物目录 ├─ scripts/ 部署、真实云闸门、发布治理 ├─ tests/ 单元、组件、工具链测试 ├─ docs/ │ ├─ decisions/ 架构决策 │ ├─ specs/ 数据契约和机器证据 │ ├─ runbooks/ 部署、删除、备份与回滚手册 │ └─ release/ 发布清单、隐私、无障碍与提审材料 └─ .trellis/ 项目规范与任务归档 ``` ## 本地开发 ### 环境要求 - Node.js 24 - npm 11 - 微信开发者工具 Stable - 已开通的微信小程序 AppID - 已绑定的 CloudBase 传统模式环境 ### 安装 ```powershell git clone https://gitee.com/tooka/DayTrace.git Set-Location DayTrace git switch feat/daytrace-time-river-mvp npm install ``` 使用微信开发者工具导入仓库根目录。若用于自己的小程序,需要修改: 1. `project.config.json` 中的 `appid` 2. `miniprogram/config/cloud-env.ts` 中的 CloudBase 环境 ID 3. 脚本运行时的 `DAYTRACE_ENV_ID` 不要提交上传私钥、云登录态、临时下载能力或任何用户数据。仓库已忽略常见密钥文件, 但秘密仍应放在仓库外部。 ### 初始化云环境 ```powershell $env:DAYTRACE_ENV_ID="<你的 CloudBase 环境 ID>" npm run provision:collections npm run deploy:functions npm run gate:persistence npm run gate:api ``` 集合权限和索引需要按 [控制台配置清单](docs/runbooks/backend-console-release-blockers.md)人工配置并独立复核。 全量删除还要求为 `daytrace-api` 云函数配置真实的备份保留期: ```text DAYTRACE_BACKUP_RETENTION_DAYS=<控制台实际显示的整数天数> ``` 不得根据套餐或文档示例猜测该值。 ## 质量验证 ### 基础检查 ```powershell npm run typecheck npm test npm run scan:secrets ``` ### 真实云与页面检查 运行前需在微信开发者工具中开启“服务端口”。 ```powershell npm run gate:persistence npm run gate:api npm run check:runtime-management npm run check:record npm run check:timeline npm run check:stats npm run check:categories npm run check:restore-export npm run check:delete ``` 端到端脚本使用专用日期或 synthetic owner,并在前后清理夹具;删除检查不会删除 开发者工具当前登录的主账号。 ### 测试策略 | 层级 | 主要验证 | |---|---| | 单元测试 | 领域不变量、状态机、外部响应解码 | | 组件测试 | 数据投影、事件与交互状态 | | WXML 无障碍 | 可识别名称、错误播报、焦点顺序 | | API 闸门 | 真实身份、owner 隔离、幂等、并发、导出与删除 | | 持久化闸门 | 集合、事务、日锁和运行时能力 | | 页面 E2E | 各层接线、真实落云、密集布局几何 | 关键测试均要求通过变异证明它们真的会失败,相关纪律见 [测试有效性规范](.trellis/spec/testing/index.md)。 ## 发布 ```powershell npm run gate:release ``` 退出码: - `0`:自动门禁与人工证据均满足,可进入上传 - `2`:自动门禁通过,但仍有人工或生产环境 blocker - `1`:执行或一致性检查失败 Preview 和上传默认都是 dry-run: ```powershell npm run release:preview npm run release:upload ``` 真实执行需要仓库外部私钥、匹配的 AppID、干净且与证据一致的提交,以及精确的 版本确认词。详细规则见 [发布说明](docs/release/README.md)。 当前机器发布状态以 [release-evidence.json](docs/release/release-evidence.json) 为准。自动检查通过不代表 已经完成真实设备、读屏、微信控制台、备案、生产 smoke 或 24 小时观察。 ## 隐私与数据安全 - 不请求手机号、位置、头像、昵称、相册或系统日历权限 - owner 只取自可信微信云函数上下文 - 跨用户访问返回不可区分的 not-found 语义 - 导出对象和临时下载能力视为 bearer secret,不写入日志 - 在线删除完成前不会显示成功 - 平台备份按生产控制台实际保留策略自然过期,不用于分析或正常恢复 详见: - [隐私数据清单](docs/release/privacy-data-inventory.md) - [数据删除手册](docs/runbooks/data-deletion.md) - [备份保留说明](docs/runbooks/backup-retention.md) - [秘密矩阵](docs/release/secret-matrix.md) ## 当前状态 Phase 1 的产品功能、恢复/导出、全量删除和发布自动化已经实现。 仓库当前**不等于已可发布**:权限/索引独立复核、真实设备与读屏、微信隐私声明、 服务类目、备案材料、生产部署证据、Preview artifact、production smoke 和 24 小时观察 仍由机器发布证据作为 blocker 管理。 ## 文档入口 - [权威实施计划](docs/plans/2026-08-03-001-feat-daytrace-time-river-mvp-plan.md) - [数据模型](docs/specs/data-model.md) - [短语解析契约](docs/specs/phrase-entry-parsing.md) - [后端部署手册](docs/runbooks/backend-deployment.md) - [回滚矩阵](docs/runbooks/backend-rollback-matrix.md) - [发布检查清单](docs/release/release-checklist.md) - [提审文案草案](docs/release/submission-copy.md) ## 许可证 当前仓库未声明开源许可证。除非仓库所有者另行授权,代码默认保留全部权利。