周期事项与生活维护
行动与成长 技术代码 routine
记录周期事项、上次完成、下次到期、逾期和维护台账。
模块职责
- 记录周期事项、上次完成、下次到期、逾期和维护台账。
- 维护“周期事项与生活维护”内部对象的生命周期与隐私边界。
- 通过稳定公共接口与其他模块协作,禁止跨模块直接修改数据表。
明确不负责
- 不直接处理其他模块的领域规则。
- 不把用户原文静默替换为AI生成内容。
- 不在浏览器或移动端复制服务端权限判断。
ROU-005~ROU-008 后端纵向切片(Catalog 仍保持 partial;PC/Mobile/IAB 验收尚未完成)
- ROU-005 使用
routine_maintenance_entry与 append-only revision(0046 提交时当前投影守护):状态固定为PLANNED→DUE→IN_PROGRESS→COMPLETED/SKIPPED/CANCELLED,title 1~200、note/reason 0~2000;SKIPPED/CANCELLED 必须 reason,终态非 COMPLETED 的 completedAt 必须为空。 - ROU-006 使用 owner-scoped
routine_reminder和本地 outbox:ELIGIBLE→QUEUED→PROCESSING→SENT→ACKED,stale/fail-closed 分支为 SUPPRESSED/FAILED/BLOCKED_EXTERNAL;policy 只通过GET/PATCH /api/v2/routine/items/:routineId/reminder-policy修改,普通 item PATCH 不再接受 reminderPolicy。dispatch 仅由 branded MAINTENANCE worker 的routine:notify调用;外部 channel/provider 未配置或未完成时保持blocked_external/FAILED,不伪造 SENT/SUCCESS,owner 只能读取和 ACK。 - ROU-007 由
0045_routine_relationship_cycle.sql建立 typedroutine_relationship_cycle与 append-onlyroutine_relationship_contact联系时间线;Routine 只能经 Relationship public port 读取六字段id/displayName/privacyLevel/status/revision/contentHash,不读取 Relationship generic payload。routine:read/routine:write采用 OWNER scope,public port 另校验record:read;缺权限返回 403,跨 owner、SECRET/LEGACY_ONLY/ARCHIVED/SEALED、不可见或未知资源统一 404,port/依赖未就绪返回 503。专用 cycle API 支持绑定/解绑、contact 和 futuresnoozedUntil;绑定按boundAt + intervalDays推导 nextDueAt,contact 按contactedAt + intervalDays重算并追加不可变联系事件,snooze 只保留未来延后投影,DUE/PAUSED 由服务端读取投影。 - ROU-008 只使用确定性
ROUTINE_MEDIAN_V1:最近最多 12 个正间隔,至少 5 个样本,中位数四舍五入并受当前周期 ±25% 与 1~3650 边界限制。preview 持久化 7 天候选,confirmationToken 用服务端 HMAC 派生且只保存 hash;apply 只接受 candidateHash、confirmationToken、expectedRevision 和明确确认,成功后必须回读 item、schedule revision 与候选状态;建议周期变化时新增 schedule/item/public revision 并在审计 metadata 标记 scheduleChanged=true,建议周期与当前周期相同时仍可确认并将 adaptation 标记为 APPLIED、appliedRevision 保持当前 revision,审计 metadata 标记 scheduleChanged=false,但不新增零变化 revision。 - 上述 typed 表、公共 revision、审计和幂等写入在同一事务内完成;本说明只记录后端合同/实现边界,Routine 八项 Catalog 仍为
partial,PC、Mobile 和 IAB 真实运行验收尚未完成,不能据此标记为 completed 或 implemented_local。
结构化字段
| 字段 | 中文名 | 编辑类型 | 必填 | 敏感性 | 业务说明 |
|---|---|---|---|---|---|
routineName | 周期事项名称 | text | 是 | 普通 | 用于记录“周期事项名称”的业务值。 |
area | 生活领域 | text | 是 | 普通 | 用于记录“生活领域”的业务值。 |
intervalDays | 执行间隔(天) | number | 是 | 普通 | 用于记录“执行间隔(天)”的业务值。 |
lastCompletedAt | 最近完成时间 | datetime | 否 | 普通 | 用于记录“最近完成时间”的业务值。 |
nextDueAt | 下次到期时间 | datetime | 否 | 普通 | 用于记录“下次到期时间”的业务值。 |
reminderPolicy | 提醒策略 | textarea | 否 | 普通 | 用于记录“提醒策略”的业务值。 |
completionNote | 最近完成说明 | textarea | 否 | 普通 | 用于记录“最近完成说明”的业务值。 |
active | 是否启用 | boolean | 否 | 普通 | 用于记录“是否启用”的业务值。 |
八项可执行功能
| 编号 | 功能 | 规划版本 | 完成状态 | 独立外部边界 | 执行策略 |
|---|---|---|---|---|---|
ROU-001 | 周期事项定义 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | schedule |
ROU-002 | 上次完成时间 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | record |
ROU-003 | 下一次计划 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | schedule |
ROU-004 | 完成记录 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | record |
ROU-005 | 生活维护台账 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | record |
ROU-006 | 逾期提醒 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | notify |
ROU-007 | 关系维护周期 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | schedule |
ROU-008 | 自适应周期 | V3.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | schedule |
本模块状态:partial 8。状态由专用规则、聚合持久化、PC/移动行为和自动测试共同决定;外部 blocker 与历史 Provider 记录只作独立注记,不提升完成度。
HTTP 与数据生命周期
该模块使用 Record Kernel /api/v2/records/routine 统一提供创建、列表、详情、修改、归档、恢复、修订历史、执行历史和功能入口;POST/GET /api/v2/records/:moduleCode、GET/PATCH /api/v2/records/:moduleCode/:recordId、POST /archive、POST /restore、GET /revisions、GET /executions、POST /features/:featureId;共 9 条获批路由,无 DELETE。Identity typed 快照的通用写入失败关闭,typed 读取也必须使用 v2 专用接口;非 typed legacy core 仅保留只读兼容。 v2 不提供永久销毁,旧 v1 兼容链不从新页面调用。创建和更新先经 SystemRecordPolicyPort,由内核外的 SystemRecordPolicyRegistry 依次执行专用规范化、跨字段规则和 Catalog 字段规则;带键 cache miss 先取得事务内幂等预占,再执行无副作用策略;策略失败会让预占与数据库、审计副作用共同回滚,成功 cache hit 则直接精确恢复首次 revision。功能地址会先校验目录归属;partial 功能统一返回 HTTP 501 FEATURE_NOT_IMPLEMENTED,且不新增修订、执行、审计或幂等记录。迁移维护 active 时普通写返回 HTTP 503 SYSTEM_MAINTENANCE,读接口继续可用。MEM-001 至 MEM-008 的通用功能地址均返回对应专用地址错误,必须改用各自的 /api/v2/memory/... 专用入口。
参数化代码入口
apps/api/src/kernel/recordsapps/api/src/record-policiesapps/api/src/feature-registryapps/web/app/pages/modules/[moduleCode]apps/web/app/composables/useRecordKernel.tsapps/mobile/src/pages/module/index.vueapps/mobile/src/pages/recorddocs-site/modules/routine.htmlMobile 使用 /pages/module/index?module=... 与 /pages/record/* query 容器;MEM-001 使用 /pages/memory/text/create,MEM-002 至 MEM-008 使用 /pages/memory/text/detail 专用治理详情,TAX-001 至 TAX-008 共用 /pages/taxonomy/tags/index 的标签、分类、合并、编号、标题、AI 候选和审计专用交互。 旧 24×5 包装页和 descriptor 副本不属于当前架构。
设计原因
模块目录提供稳定业务语义和白名单;RecordAggregate 只负责公共记录生命周期,不解释 payload。SystemRecordPolicyRegistry 在内核外精确覆盖 Catalog 24 个模块,保留 Routine、Decision、Memory、Interview 的专用规范化,并拒绝未登记模块。Batch 003 固定规范大写 ULID、标题 200/摘要 1000 字符合同、payload 顶层覆盖与 payloadRemove 删除语义、受控 JSON 资源上限、递归敏感字段治理、幂等最小引用和精确 revision/execution 回放。0009 只追加 summary CHECK 与 owner/module[/status] + id DESC 匹配索引。 该等价层与公共加固仅保持普通记录合同,不代表领域功能完成;领域完成仍必须由专用规则、类型化持久化、PC/Mobile 行为和当前自动测试共同证明。