公开表达与个人灯塔
公开与延续 技术代码 publishing
把私密记录转换为经过脱敏和审核的公开文章、主页和内容。
模块职责
- 把私密记录转换为经过脱敏和审核的公开文章、主页和内容。
- 维护“公开表达与个人灯塔”内部对象的生命周期与隐私边界。
- 通过稳定公共接口与其他模块协作,禁止跨模块直接修改数据表。
明确不负责
- 不直接处理其他模块的领域规则。
- 不把用户原文静默替换为AI生成内容。
- 不在浏览器或移动端复制服务端权限判断。
结构化字段
| 字段 | 中文名 | 编辑类型 | 必填 | 敏感性 | 业务说明 |
|---|---|---|---|---|---|
channel | 发布渠道 | select | 是 | 普通 | 用于记录“发布渠道”的业务值。 |
sourceRecordId | 来源记录编号 | text | 否 | 普通 | 用于记录“来源记录编号”的业务值。 |
publicTitle | 公开标题 | text | 是 | 普通 | 用于记录“公开标题”的业务值。 |
publicContent | 公开正文 | textarea | 是 | 普通 | 用于记录“公开正文”的业务值。 |
redactionNotes | 脱敏说明 | textarea | 否 | 普通 | 用于记录“脱敏说明”的业务值。 |
publishStatus | 发布状态 | select | 是 | 普通 | 用于记录“发布状态”的业务值。 |
publishedAt | 发布时间 | datetime | 否 | 普通 | 用于记录“发布时间”的业务值。 |
externalId | 外部平台编号 | text | 否 | 普通 | 用于记录“外部平台编号”的业务值。 |
八项可执行功能
| 编号 | 功能 | 规划版本 | 完成状态 | 独立外部边界 | 执行策略 |
|---|---|---|---|---|---|
PUB-001 | 公开副本 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | publish |
PUB-002 | 脱敏审核 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | verify |
PUB-003 | 文章发布 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 外部 blocker:等待真实账号、设备或授权 | publish |
PUB-004 | 公众号草稿 | V1.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 外部 blocker:等待真实账号、设备或授权 | record |
PUB-005 | 朋友圈草稿 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 外部 blocker:等待真实账号、设备或授权 | record |
PUB-006 | 公开主页 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | publish |
PUB-007 | 个人灯塔 | V2.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | record |
PUB-008 | 发布与撤回审计 | V3.0 | 部分实现:领域闭环尚未完成,功能入口失败关闭 | 无独立外部边界注记 | analyze |
本模块状态:partial 8 · 独立外部 blocker 3。状态由专用规则、聚合持久化、PC/移动行为和自动测试共同决定;外部 blocker 与历史 Provider 记录只作独立注记,不提升完成度。
HTTP 与数据生命周期
该模块使用 Record Kernel /api/v2/records/publishing 统一提供创建、列表、详情、修改、归档、恢复、修订历史、执行历史和功能入口;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/publishing.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 行为和当前自动测试共同证明。
R32 分类编码进度
R32 AUD-050~052、056~060、063 已编码待统一测试:公开副本核验 Timeline/Memory/Knowledge 来源事实;写入冻结输入与会话,回执后仅 GET 对账;按资源自身主键读取;多行文本与 PATCH 遗漏字段正确区分;草稿渠道不写实际发布状态;审计按完整排序键分页。移动端业务页面和真实外部账号仍为独立缺口。
R32 移动发布工作台
移动入口 /pages/publishing/index 提供公开副本、脱敏审核、渠道内容、主页、灯塔、审计和修订历史。来源按名称选择并自动读取版本,副本关联由选项选择;各类列表保留分页入口。
写入沿用专用 API 的 current/revision/audit 核对。已回执的重试只 GET;结果待确认时冻结表单,登录变更清理表单与临时请求。通用移动记录入口重定向到专用工作台。
外部渠道 Provider 未接通,不能标为外部发布完成。本批移动代码待统一测试及真实设备验收。
R08 L19:公开副本分阶段处理
PC 的公开表达首页与新建入口接入专用工作台。先选择已有来源,读取实际修订和摘要,再独立填写脱敏内容;不从私有原文自动补正文。标题建议仅取当前脱敏输入,并由用户显式采用。
保存创建的是 REVIEW_REQUIRED 待审核副本,管理读取按 owner 与 publishing:read 权限执行;PUBLIC 标记不代表已匿名发布,也不称为私有草稿。仅待审核项可提交审核;批准且 PUBLIC 的已保存副本可预览并确认发布。发布或撤回后按服务端状态展示动作,撤回为终态。
发布预览绑定已回读副本及修订;输入变化后清除确认。取消预览无写请求;发布不自动发送渠道或发布个人主页。未保存输入和不确定请求保留在当前任务,回读与幂等合同不变。
本批验证限源码与模板编译;跨端真实发布、匿名读取和撤回仍待统一业务验收。
2026-09-30 后续统一门禁修复
双端公开副本使用实际专用入口、typed API 与 current/revision/audit 核对,替代旧静态门禁中的不可达客户端假设。缺失版本或审计时保留待确认回执,重试只 GET、不重复 POST;来源编号、修订与摘要仍由专用读取核验。Mobile 版本展示由技术偏好控制,全部八项功能仍保持 partial。
本批提供状态、真实模板渲染及客户端边界自动测试;不据此宣称浏览器、真实数据库、设备或外部服务验收。结果对应本地集成工作树,最终提交与运行编号由统一报告绑定。
2026-10-01 真实截图后的共享主题修复候选
ee2144a0 深色截图中的发布卡片和输入仍为固定白色。共享工作台的正文、表面、边界、状态与表单改为消费既有全局语义令牌,主色操作使用 on-primary;保留既有品牌横幅,不改脱敏、审核、发布或撤回逻辑。源码与客户端测试是局部证据,浏览器浅深色复测仍待最终提交。
来源筛选原生名称
实际 H5 截图审查发现来源筛选输入只有占位说明,原生控件无辅助技术名称。该字段显式绑定“筛选已载入来源”,沿用共享指令的节点替换和卸载生命周期;不读取查询值生成名称,也不改来源权限、选择、脱敏副本或发布流程。新的浏览器原生名称复核仍需最终提交证据。
2026-10-02 逐图审计后的界面修复候选
PC 任务入口及渠道选择同步 aria-pressed;渠道为具名普通按钮组,不改变发布、审核与独立确认流程。
本节记录客户端源码修复;本批浏览器明暗主题、实际点击、读屏、原生设备与真实 API/数据库验收仍为 not_run。不会据样式、模板或状态测试提升领域完成度;既有权限、隐私、幂等、版本及回读合同保持独立。
第二批:99b9ff16 之后的源码修复
PC 副本审核分区只有一张内含预览的卡片,因此改为单列,避免预览占用不存在的第二列。匿名主页预览名称与标语使用 h2/h3;工作台根节点使用 section,顶层 h1 提供路由焦点。不改变发布、脱敏、审核或撤回规则。
M12/M13 上下文恢复与持续标签
M13:移动来源检索持续显示“筛选已载入来源”,填写后仍能识别范围。原 v-model、占位说明和待确认禁用判断保留,不新增检索权限、发布或上传动作。
新增真实浏览器与设备验证仍为 not_run,不提高业务完成状态。
2026-10-03 Web 副本选择与同会话写入恢复切片
本节记录 Web 实施切片及验证边界;独立源码/定向复核 GO,仍不代表 Publishing 全部业务或上线验收。主页关联和渠道绑定改为按公开标题、中文状态及更新时间明确选择,免手输 copyId;只允许 PUBLIC 且 APPROVED/PUBLISHED 新选。渠道必选,主页允许明确不关联;APPROVED 可绑定草稿但主页发布仍要求副本已 PUBLISHED。
候选独立读取、分页去重,未在首屏的历史关联按原编号补读;不可读、撤回或不合资格时保留关联身份并显示不可用,不静默变成 null,不默认首项。刷新、分页、迟到请求不得覆盖脏稿。主页发布只针对严格核实的已保存对象:改关联或解绑未保存时禁止发布,已保存 slug 只读。渠道也必须区分未保存创建输入和实际已保存发布对象。
Publishing 专用单一内存 attempt 状态覆盖副本 5、渠道 2、主页 4、灯塔 4,共 15 个 mutation。冻结原输入、路由、revision 和 key;unknown 只恢复原请求,收到可信回执后只 GET current/revision/audit,不重复写入。稍后核实不清 key、receipt 或业务锁;确认结果在当前有效组件消费前保留。会话变化同步清旧 owner 的页面和恢复数据,旧响应不得复活。
恢复承诺仅限同浏览器 JavaScript 运行时、同登录 session 的组件卸载与重挂载;整页硬刷新、进程退出、跨 session 不支持持久恢复。正文和恢复数据不写 localStorage、sessionStorage、IndexedDB 或日志;内存消失不等于服务端回滚。beforeunload 提示不保证拦截强制关闭。
API/store 与真实组件定向测试、适用 Web 测试、类型检查、构建及文档保留已取得证据;Node 合同仍有缺 pwsh 的既有环境失败,完整记录见本日中文设计、实施计划和验证文档。真实 API 服务、PostgreSQL、外部 Provider、登录浏览器及设备验收本批仍为 not_run;组件/store/mock 证据不等于真实外部发布。既有权限、owner、状态机和严格回读不降低,Catalog 的 partial 与外部 blocker 不提升。
2026-10-03 Web 未知写入重放安全
本节收紧前节 unknown 恢复的发送边界,不改变已有回执只读核实。普通操作从实际首次 send 前一次性记录 wall/mono 起点,固定23小时保守窗口;任一时钟达到边界、倒退、不可读或累计 elapsed 差超过一分钟即永久阻止原 attempt 重放,时钟恢复也不解禁。无可靠 mono 仍可首发,但 unknown 不可重放;重试、defer、重挂载不能续期。门禁位于 store 唯一发送入口,覆盖同命令 start、resume 和十五 mutation(包括 PATCH),不只禁按钮。
publish-channel 一旦进入 send,任何没有合法 receipt 的错误都视为 unknown,永久禁止该 attempt 第二次 POST;请到对应渠道人工核实,原草稿与锁保留。普通首次拒绝仅认可真实 WebApiRequestError、非空 requestId 和非 fallback 的精确领域码/status;通用400/403或带 requestId 的fallback也不能证明零写。曾经 unknown 后不因后来错误清锁。
已有合法 receipt 的 current/revision/audit GET 与正确 outcome 消费不限23小时,也不受时钟异常阻断;在途首发跨窗迟到合法回执仍可核实。阻断持续显示原因,保留冻结输入、key、草稿与业务锁;显式“稍后核实”只允许导航,不自动换key、解锁或伪造成功。恢复仍仅同运行时同session,硬刷新或退出不支持持久恢复,内存消失不等于服务端回滚。
默认外部 Provider 不可用,本节说明条件性风险而非实际重复外发事故。23小时客户端窗口不保证任意服务端提前过期、服务器时钟异常或超长网络排队下的 exactly-once;ARTICLE 外部副作用不能由本地事务回滚撤销,草稿渠道不冒充真实发布。本批真实 Provider、登录浏览器、API/PostgreSQL 与设备验收仍为 not_run;无服务测试、源码复核与根验证以本日专门证据文档为准,partial 与外部 blocker 不提升。
2026-10-03 Web 已选发布对象历史入口
已明确选中的公开副本、渠道内容、公开主页和灯塔可按保存名称直接查看审计或修订,免抄编号。0/1/N列表不默认首项;未保存新稿或列表已消失对象不成为来源,脱敏区仍查公开副本。入口冻结点击身份和会话并再次核对当下选择,旧对象按钮不能借新对象读取;脏稿标题、正文与理由保留。
目标类型或编号同步变化即失效旧读并清两页、名称、错误与忙态;同目标刷新也先清页。同页重开与跨页各只请求一对GET。两页成功且票据有效、每行类型及编号均匹配捕获目标后才一起发布,任一失败或错目标整对拒绝。未读、加载、失败和成功空页明确区分,旧success/catch/finally不得覆盖新上下文或结束新加载。
高级手动查询保留原五类型,显式展开后可用;修改输入即清快捷名称。保存名称不代表历史快照名称。默认中文资源与状态,结果编号、hash和精确修订号仅技术模式展示;只读默认第一页最多50条,计数称“本页”,尚有后续不等于完整总数。
busy或未稍后核实的pending禁止快捷导航;显式稍后核实后仅普通GET,不确认、消费或释放原写attempt,不改input/key/receipt/写锁,也不代替用户defer。历史错误独立,原写入错误与重放阻断提示保留;既有23小时双钟、渠道unknown禁重发、回执只GET及精确outcome消费不变。普通历史成功不是原写入严格对账,恢复仍仅同运行时同session。
最终两路径独立复核GO;七套定向215例通过(新增57、既有158),根Web全量2220例通过,类型与文档冻结前构建通过。Node仍有18项既有pwsh缺失失败;无服务组件/mock/store证据不等于真实HTTP、PostgreSQL、登录浏览器、设备或Provider验收,这些本批均not_run。Mobile/API未重跑,Catalog与外部blocker不提升。详见本日《发布对象历史入口本地源码候选证据》及其中明确标识的工作区外部证据;文档冻结后的最终资源构建由根另行记录。
2026-10-03 Mobile 同目标历史刷新与原子续页
移动历史已有结果后再次刷新,先同步清双方页及游标,再读取一对GET;两路成功、所有行匹配捕获目标且会话/页面/票据仍有效才原子发布。任一路失败不再展示旧结果或旧更多入口,显示局部错误与显式重试;无目标、加载、失败、成功空页分别表达。原有A→B清页和空闲同页签GET作为回归保留,不称为新发现的正常入口缺陷。
续页冻结双方原页和各自cursor,两路结果共同校验后才追加可续侧;失败保留完整已读前缀及原cursor,显式按原cursor重试,不先推进成功侧。已耗尽侧沿原合同仍发GET但保留其整个原页,绝不重复追加首页;全部耗尽后零续页请求。完整刷新建立新链;目标错配和损坏cursor按局部防御失败关闭,不冒称已发现跨owner泄漏,不承诺两路GET的事务快照。
历史状态独立,不清原mutation error/notice/blockedExternal,不改表单标题、正文、理由、关联或确认。历史loading仍参与原锁;session变化及卸载后的迟到结果不回写、不关闭新加载。pending/receipt时入口与直接调用均继续锁住,零历史GET、不确认或消费原写入,不清input/key/receipt。普通历史成功不替代严格写入回读,也不代表新增Mobile全面写入恢复。copy无默认选择、其他三类原有首项fallback保留;离开历史后的资源加载填表不在本片脏稿承诺内。
独立局部复核GO;作者五套定向89例通过(新增50、既有39),独立新增套50例通过;根Mobile全量159文件2110例、类型与H5构建通过,冻结前静态门通过。Node领域5例通过,generic为802通过/18既有pwsh缺失失败/3跳过,整体exit 1;不称全绿。Web/API全量本批未重跑,最终Web文档资源构建由根在本节冻结后另行记录。真实HTTP、PostgreSQL、登录浏览器、设备和Provider均not_run;Catalog的partial与外部blocker不提升。详见本日《移动发布历史刷新本地源码候选证据》及其中明确标识的工作区外部日志。
2026-10-13 Mobile 公开副本正文容量候选
移动公开副本正文的原 maxlength=12000 对齐既有创建和修改 DTO/领域的100000,仅改这一控件约束并补充中文说明。保留原 trim、独立脱敏输入、来源与隐私、修订、幂等及 current/revision/audit 回读。保存仍为待审核副本;公开发布仍需原审核、预览及明确确认。
新增测试计划覆盖完整页/工作台、真实 Uni resolved/native 容量、12001及100000创建修改、100000预填、原失败保稿与恢复;独立未改领域仍拒绝100001和敏感/控制字符。内存宿主不实施浏览器截断,合成传输与来源端口不等于真实HTTP、DTO或数据库验收。独立源码GO后,基线H0两项通过、RED两项精准失败于实际Uni resolved12000对100000;候选新36项、原Publishing66项及原支持28项全通过,Mobile生产类型和六静态门通过。双次collection与执行完整身份相符;候选测试stderr为空,完整性保留两项既有共享包装器警告。最终文档生成在本节冻结时尚待新副本验证,后续结果由交付README登记,不提前计为通过。
本批不改Web公开正文和移动渠道的独立12000限制,不作双端容量对齐声明。真实浏览器、IME、读屏、设备、认证服务、PostgreSQL、Provider及部署仍not_run;Publishing八项partial与外部blocker保持。
2026-10-13 Web 公开副本正文容量候选
Web独立公开正文的maxlength=12000对齐既有创建和修改DTO/领域100000,仅修改这一原生控件约束并补充中文说明。script/style、trim、来源引用、隐私、修订、幂等、current/revision/audit回读、审核、预览和明确发布确认保持。刚发布的Mobile容量节与全部旧字节保留;两端渠道正文的独立12000不在本片范围。
独立源码复核GO后,v2基线H0两项通过、RED两项精准失败于完整原生textarea的12000对100000。候选新增37及未改Publishing七套215全部通过,原Nuxt类型和六静态门通过。三次stock JSON的新37身份及顺序相同,没有另行collection调用;两组候选测试stderr为空。完整性保留两项既有共享包装器警告。v1的Nuxt传递router加载失败零收集,未计产品RED;v2只修测试加载,原日志保留。
完整Web路由/工作台/原生Vue事件覆盖12001/100000创建修改、原100001领域拒绝、失败保稿、原键恢复、回执后只GET和发布确认。内存宿主不实施浏览器maxlength截断;合成传输与纯规则异常端口不等于真实HTTP、DTO或数据库。最终文档生成在本节冻结时尚待新副本验证,后续结果由交付摘要登记。Publishing八项partial与外部blocker保持;真实浏览器、IME、读屏、设备、认证HTTP、PostgreSQL、Provider和部署仍not_run。
2026-10-16 Web 管理副本游标分页源码候选
公开副本管理列表增加50条游标续页、去重、已载入计数和失败原游标重试;不会复用关联picker的PUBLIC及审核资格过滤,也不自动选择首项。副本与脱敏切换刷新第一页后,缺席的明确已选对象按原copyId补读;详情成功只更新current,不覆盖用户草稿或saved修订。
详情失败、错身份或倒退修订保留身份与草稿并关闭该对象动作;列表403/404还会关闭整页缓存的旧权限。后续列表不能自动解禁,重新核实或再次明确选择须取得有效详情。current暂缺不变成新建,另建须显式操作。较晚旧响应不能跨页面或会话恢复数据;pending与defer、原幂等冻结、严格回读、审核、隐私、预览发布和撤回确认保持。
已完成隔离本地focused验证:候选新57条及原Publishing八文件252条全部通过;基线原252条通过,新57条首失败按显式调用合同、缺失入口、状态和补读调用独立归因。双臂原Nuxt全生产类型、补充strict类型及五共享包构建通过。原文档链在本节验收说明同步前执行两轮,非本批生成漂移已完整留证并从发布候选排除;最终七文件状态的静态复检由同日证据与原始记录绑定。完整Web套件、Web生产构建、API/Mobile全套、真实HTTP/PostgreSQL、登录浏览器、读屏、设备、Provider和部署仍not_run。组件合成网络测试不等于服务或生产验收,Publishing八项partial与外部blocker不提升,详见同日设计、实施计划与验证证据。
2026-10-25 PUB-007 独立匿名灯塔
新增匿名GET /api/v2/publishing/public/lighthouses/:lighthouseId,仅返回title/direction/principles/publishedAt。单条查询绑定current PUBLISHED、confirmed、publishedAt与精确LIGHTHOUSE发布revision快照;服务再核对身份、版本、hash和状态。草稿、撤回、损坏或缺确认快照404,响应no-store,不泄漏owner、修订、hash、私有来源或当前草稿。
现Lighthouse合同没有privacyLevel;公开授权是具备publishing:publish权限且confirmed=true的用户对冻结已保存方向明确发布,不虚构PRIVATE/SECRET分类校验,也不从其他模块私有原文补正文。双端发布前审阅冻结内容,说明无需登录可读,取消零写,再次确认才发布;原版本/会话/未知写入及撤回历史GET核对保留。
公开页使用独立omit凭据运输,失败清旧正文并拒绝迟到恢复。PC精确公开路由与Mobile冷启动只放行规范灯塔编号;其他私有页保持认证。根真实PG HTTP2/2中的匿名用例已证明草稿404、发布后200、撤回后404及owner历史保持,不能继续把真实PG记为未运行。
双端SFC/路由回归、类型与第二轮构建通过;清洁匿名浏览器、手机冷启动、主题/读屏、全权限与失败恢复仍独立待验。撤回不能收回访客已经保存或复制的内容,不由PUBLISHED状态单独推导访客可见。