2.5 KiB
2.5 KiB
真实文档发布
本分支依赖 linked-guidance #7(ee69749)和 wiki-email-auth #6 后续安全修复 c27fa4f。先合并账户及协议依赖,再合并本 PR。使用现有 PostgreSQL、014 账户迁移后执行 015;无需 SMTP 变更。
/write:已验证邮箱账户创建、加载并发布下一版本,支持结构化表单和受限 XML;预览通过/api/documents/preview校验并解析条件链接,不写数据库。/documents与/documents/:id?revision=N:真实用户文档列表与固定版本阅读。主页可链接这两个入口,现有/guide可对user-ID 委托resolveDocument或链接/documents/:id。首页与导航已接入真实发布入口;原型阅读页保留独立样例。/api/documentsGET 列表,POST 创建/发布;/api/documents/:idGET 单篇、POST 下一版、DELETE 作者撤下;?format=xml&revision=N返回规范 XML。未指定版本为发现用途,实际采用需固定 revision。user-<author UUID>-<slug>命名空间独立于静态 catalog,服务端和数据库均校验作者前缀,同一短名可由不同作者分别发布。条件链接可引用静态样例或真实文档;缺失版本明确展示,不自动请求外站、不静默换最新版。撤下后列表及 latest 不再展示,历史固定版本仍然公开可读。- 邮箱会话仅由新接口校验,不授予管理员 API 权限。发布是公开行为;目前没有草稿服务、私有文档、恢复撤下或账户删除功能。tags 是发现元数据,通过 XML 可重复的 tag 元素往返保存。
- 数据库通过行锁分配下一版本并拒绝过时编辑,触发器禁止修改/删除已发布内容。数据库所有者仍可执行数据库维护,触发器不是对数据库管理员的安全隔离。
用户手动合并到 main 后,由 ces-control CI 执行验证:严格 XML 单元测试;PostgreSQL 真实发布、所有权、并发版本冲突、不可变内容和撤下保留历史的集成测试。PR 不自动部署,服务器视觉验收须用户手动合并且部署成功后再执行。
首页现已通过 /api/documents 加载真实发布摘要,并在 GuidanceShell 提供用户文档与发布入口。/guide 继续只读取静态协议样例,不覆盖主 chat 的阅读实现。
编辑器自动加载已验证账户前缀。发布成功提供精确版本链接;网络或服务失败保留输入并显示错误,XML 模式成功后推进待编辑版本。严格 XML 校验另拒绝无效 Unicode、CDATA 终止符和非 XML 空白。