anenreo个人数字操作系统文档

← 返回首页

自建业务实体与动态记录

# anenreo 自建业务实体与动态记录

## 目标

允许用户在 PC 数据模型中心创建新的业务实体,例如学习资料、宠物、收藏品或投资项目,并通过字段、字典、表单和视图定义形成真实可录入、可查询、可版本化的数据链路。

## 关键边界

动态实体不是任意代码生成器。配置可以决定字段、控件、分组、字典、时间和附件类型,但不能写入任意 Vue、JavaScript、SQL 或 HTTP 脚本。权限、加密、事务、幂等、删除和高风险规则仍由后端确定性代码实施。

## 数据结构

- `entity_type_definition`:实体语义、来源、存储策略、隐私和生命周期。
- `field_definition`:字段类型、字典、时间精度、附件种类、敏感等级和 AI 策略。
- `relation_type_definition`:实体之间的有向关系、基数和审核规则。
- `form_definition` / `form_version`:创建、编辑、审核和移动采集表单版本。
- `view_definition`:列表、卡片、详情、时间轴、日历、看板和图谱视图定义。
- `dynamic_record` / `dynamic_record_revision`:正式动态记录及不可变修订历史。

## 完整运行链路

```text
PC 创建实体
→ 添加字段并绑定字典/时间/附件
→ 发布表单
→ Web 或移动端读取已发布表单
→ 动态渲染并校验
→ DynamicRecordService 事务写入当前记录与修订
→ 列表、详情、编辑、归档、恢复、销毁和导出
```

## Web 与移动端

Web 提供完整数据模型配置与自建实体工作台;移动端只消费已经发布的实体和表单,提供列表、创建、详情和编辑,不允许修改 Schema、Provider 或密钥。

## 版本与删除

- 实体、字段、表单和视图均有 revision。
- 系统视图模板为只读,只能克隆为用户视图后修改。
- 动态记录支持归档、恢复、永久销毁和修订历史。
- 永久销毁不等于普通归档,必须经过明确确认并留下审计事件。

## 2026-09-30 移动交互修复

移动 UIUX 修复:创建和编辑按单次意图冻结原输入;创建沿用原幂等键,收到写回执后仅 GET 恢复。PUT 编辑仍依赖原修订,不宣称后端支持编辑幂等。授权或维护失败可显式重新核验能力,版本冲突先比较而非覆盖草稿。移动写入恢复的真实端到端运行验收仍为 `not_run`。

## 2026-09-30 PC 写入恢复

新建通用记录或自建实体遇到授权或维护错误后保留草稿;重新核验按钮只回读会话能力和当前资源或配置,明确写权限且核验成功后才解锁手动重试。不会自动发送旧写请求;维护是否允许写入仍由服务端提交时裁决。自建实体恢复不调用会卸载表单的配置刷新,避免丢失草稿。401/403/503 控制器替身回归通过,真实服务恢复验收仍为 `not_run`。

## 2026-09-30 移动分页与阅读补齐

MOB-07/10:动态记录列表新增可选 cursor,继续按更新时间倒序并用 ID 打破同时间并列;游标绑定 owner、实体类型及状态,最多读取 100+1 项,坏游标失败关闭。移动列表追加失败保留已载入页,详情返回保留筛选并刷新目标。详情按 schema 呈现时间、地点、字典、附件与关联标题;未知字典值不变空,未知结构仅技术模式可展开。高敏字段不在普通阅读层展开,文件正文需独立 `file:read` 和服务端授权。服务端分页的真实 PostgreSQL 验证见下节;H5、真机、浏览器交互与阅读验收仍为 `not_run`。

## 2026-09-30 游标时间边界修复与 PostgreSQL 证据

游标在读取记录 SQL 前验证真实日历、闰年、小时分钟秒和 PostgreSQL 支持的时区偏移,拒绝不存在的日期、零年份、越界时间及偏移。校验保留原始时间字符串与最多六位微秒,不使用 Date 序列化截断精度;更新时间与 ID 排序、owner/实体/状态绑定保持原合同。

真实 PostgreSQL 16.15 复现了修复前的错误:`2026-02-30T00:00:00Z` 被 JavaScript 日期解析归一化后通过游标校验,进入记录查询并触发数据库 `22008`。修复后的原样编译服务在隔离新库执行全部 85 份迁移,生产触发器保持开启;四组自建实体输入通过生产 DTO 校验,281 条合成当前记录与对应修订同事务落库。

- 237 条活动记录按 100、100、37 分页完整返回,同更新时间按 ID 倒序,无缺失、重复或跨 owner 泄漏。
- 同一 JavaScript 毫秒内的 7 条不同微秒或相同微秒记录,以每页 1 条完整遍历,原始 PostgreSQL 微秒游标保持精度。
- owner、实体、状态绑定,坏游标、limit+1、上限、空页及只写权限拒绝均通过实际服务查询验证。
- 13 个非法日历、时间和偏移输入在记录 SQL 前返回 400;9 种合法闰日、ISO 与 PostgreSQL 原始时间格式仍可执行,其中 `+15:59` 和 `-15:59` 经真实数据库确认可接受,`±16:00` 经真实数据库确认不可接受。
- 定向源码单元回归为 31/31;API 构建与 SQL/worker 资产校验通过。此处仅证明编译服务和真实 PostgreSQL 行为,不代表 HTTP、H5、真机或浏览器验收,也不提升模块完成状态。

对应源码回归:`apps/api/test/unit/uiux-dynamic-record-pagination.spec.ts`。本次运行证据标识:`cursor-pg-evidence-20260930T163437Z`(修复前)与 `cursor-pg-evidence-20260930T164304Z`(修复后);精确源码与编译产物由各次证据的哈希清单标识。

## 2026-10-01 Web 条件表单事件复核

普通模块表单和自建实体表单在接收子控件值与校验事件时重新查找当前可见绑定,拒绝隐藏、只读、提交中、写入禁用及未知字段的迟到事件。子控件先发出的校验清空与随后值更新必须共同拒绝,避免原模型未改却解除非法原文的提交阻止;阻止期间既有错误不得被清除或替换。普通模块字段映射保留已发布的 `isMultiple`,附件、字典选择和关联编辑器使用原多值合同。

解析错误只对当前可见字段阻止提交;隐藏字段的既有合法业务值不静默删除。字段重新显示后,原解析错误仍须明确修正,可见 JSON 错误不能提交旧模型。新增真实 Vue setup 合成回归覆盖这些行为;服务端字段校验、真实浏览器控件及可访问性验收保持独立。


## 2026-10-02 表单输入精简

普通模块与自建实体的可选摘要、时间和来源集中在“更多信息”,新建默认收起、编辑默认展开;折叠保留控件挂载及原始草稿。标题、隐私、领域必填字段和编辑原因继续可见,相关校验错误展开补充信息;不降低服务端必填或隐私规则,不自动推断领域事实。

本批为客户端源码候选;合成端口和编译组件回归不等于真实浏览器、设备、API、数据库或 Provider 验收。此类运行均 not_run,Catalog 仍为 24 项 implemented_local、168 项 partial。

2026-10-02 逐图审计后的界面修复候选

移动清单缺少 typeKey 时显示路由错误,不请求空类型记录且不生成空类型创建链接;只有权限、类型和 schema 齐备才开放新建。筛选零结果与真实空列表区分,清单控制项使用现有主题。PC 清单使用现有 anenreo 令牌,不引入另一套主题。

本节记录客户端源码修复;本批浏览器明暗主题、实际点击、读屏、原生设备与真实 API/数据库验收仍为 not_run。不会据样式、模板或状态测试提升领域完成度;既有权限、隐私、幂等、版本及回读合同保持独立。

第二批:99b9ff16 之后的源码修复

PC 自建实体清单先确定可用实体再应用检索,区分尚无可用清单与检索无匹配,并提供清除搜索恢复入口;不把配置实体的总数冒充当前可用清单数量。

第三批:f207ad73 图像复核后的源码候选

PC 自建实体“已发布”徽章保留 success-soft 背景,局部覆写为现有主题正文前景;没有改发布状态、配置能力或其他徽章。

本次变更后的真实浏览器复验仍为 not_run,不能用旧截图或本地合同测试关闭真实交互失败。

第七批:2026-10-02 有效记录的阅读展示

940beae3 的同运行学习资料实例首次获得列表、新建、详情、编辑四条 PC 路由的浅深截图。只读列表/详情修正限当前已有页面:列表工具栏与卡片网格、详情阅读分栏、字段行及修订间距使用现有主题令牌,保留筛选、链接与原操作行为。

详情按字段 dictionaryCode 读取当前 owner 的普通字典快照,解析单选、多选及绑定标签;重复字典合并读取,失败提供只读重试。缺失标签失败关闭,不用原始代码冒充业务名称;技术模式只追加安全代码。模型、身份变化与卸载使迟到标签失效。未重新设计既有附件或未知结构的全部呈现,也不改变字段值、写入事件或请求体。

四文件候选经独立复核:同一最终测试对冻结基线 8 失败/2 通过,候选 10/10 通过;真实 scoped 样式编译与类型检查另有记录。这是源码/组件证据,第七批修正后的浏览器像素、真实标签读取和交互仍待同提交 CI;有效实例已截图不等于自建实体全部业务验收。

第八批:2026-10-02 移动摘要错误与滚动目标

MobileCustomEntityForm 保留原摘要输入,在实际包装节点提供 mobile-field-summary,并在字段旁显示现有安全 visibleErrors.summary 错误文本及 alert 语义。既有 serverErrors 监听器的 uni.pageScrollTo 因而有真实目标;没有新增焦点 API,不将测试中的滚动调用当作浏览器已滚动或读屏通过。

本次只调整模板错误呈现和定位节点,脚本、请求体、字段更新、pending/frozen、权限与提交合同保持。新增七项组件回归在冻结基线 2 失败/5 通过,候选 7/7;相关四文件 21/21 通过。第七 CI 未启动,第八批无真实浏览器、设备或数据库验收,模块完成状态不变。

第九批:自建表单条件原文恢复

自建表单的非法 JSON 原文现随当前父实例和字段键保留在内存,条件隐藏仍卸载编辑器,重新显示只恢复经校验仍非法的文字及安全解析提示。隐藏期间的提交只含原合法 payload;重新显示后必须明确修正或清空才能通过。可编辑事件守卫、已发布条件、权限和领域提交合同不变,原文不进入持久化、日志或请求。

实际编译父子组件并使用 Vue 内存 renderer 覆盖隐藏/分区隐藏、修正与清空、迟到事件、新实例隔离和独立编辑器模型重置;Nuxt 控件由替身承接,不证明后修复浏览器或真实 API/数据库。不会扩大为同一已挂载父表单切换 initial 记录的重置保证,也不升级自建实体或任何领域完成状态。

2026-10-25 H5详情重显刷新

自建详情onLoad只取得记录身份,onShow读取详情、Schema、修订和能力;从编辑页面返回时不复用旧版本。onHide、会话切换和卸载使旧请求代次失效,旧响应不能恢复旧正文或写入入口。实际setup生命周期回归及正式浏览器返回检查通过;不改变写权限、幂等或提交合同。