S1 revision=5,S2 revision=3
S1 是“回答时保持简洁”;S2 是“所有日期用北京时间”。Turn T已在 S1开始,只拿到 S1 revision=5。
当前讨论的可持续更新快照:把 Session Memory 上移为 Group Memory,同时让最终 v0.0.4 Server 只部署一次、Matrix 不出现整站维护窗。
发布的就是同一个最终 v0.0.4 Server。cutover 前它兼容旧 Session owner;Matrix 淘汰旧实例后,同一镜像自动完成原子 cutover;成功后同一批 Server 无需重部署,下一次请求自动使用 Group owner。
先启动新实例,等 Ready 后再 kill 旧实例,具备没有服务空档的基础。
唯一明确要求停止旧 Server / 专用维护窗的业务动作是 MIA-249 cutover。
migration 254、255–259 additive DDL 与 avatar repair 均不要求整站停机。
仓库 Helm 仍是单副本 Recreate;它不是 Matrix 托管发布的事实来源,未来自托管需另审。
新 Turn会装载升级后的 rollica-work-memory Skill,并得到 Group 内容/revision。已经开始运行的旧 Turn不会被部署中途重新注入 prompt,所以它保留启动时冻结的 owner snapshot 与 revision。
| DBA Schema Package(255–260) | Application Cutover Job | |
|---|---|---|
| 大白话 | 造好新柜子、账本和防误写门锁 | 搬书、填搬运凭证、打开新柜子的内部开关 |
| SQL | DDL:CREATE/ALTER TABLE、column、index、constraint、function、trigger | DML:SELECT、INSERT、UPDATE,以及临时事务锁 |
| 权限 | DBA审批,schema owner / migration role | Matrix自动运行,受限 app/cutover DML role |
| 时机 | 提前完成 | 最终 Server Ready且旧 Server全退后执行一次 |
| 失败 | 不允许进入 cutover | 产品数据整笔回滚,legacy继续服务,Matrix step变红 |
Cutover Job绝不执行 migration,也不建表、加列、建索引、创建或替换 function/trigger。migration 260所需的 rollout/attempt表、activation字段和迟到写保护trigger必须由DBA预先准备。production Server与Job均使用 MULTICA_MIGRATION_MODE=check;schema不完整就零业务写入失败,不能自行补结构。
成功后重跑只返回 already_applied,不会再次append;失败后可基于仍然权威的legacy数据重算。Cutover Job使用不具备DDL权限的数据库role,因此未来代码即使误写 ALTER TABLE,PostgreSQL也会拒绝。
当前 work_group_memory_cutover apply本来就只有读取、事务锁、Group Memory UPDATE/UPSERT、merge evidence INSERT和completion INSERT,没有DDL。online activation可以调整编排和状态机,但不能突破这条权限边界。
用户在线期间可以合法编辑 Memory,早期 manifest漂移是正常的。最终计划必须在持锁事务内重建;若超限则零写入回滚。提交的实际 hash仍持久化审计。是否仅在新的 --online-activate 模式取消 operator-supplied expected hash,仍待实现前确认。
S1 是“回答时保持简洁”;S2 是“所有日期用北京时间”。Turn T已在 S1开始,只拿到 S1 revision=5。
两份文本被确定性拼成完整 Group Memory。
T提交“回答简洁;金额保留两位小数”,但它不知道 S2 的北京时间规则。
普通回复照常完成;Memory调用返回 owner_changed/revision_conflict,让 Agent基于最新 Group全文重试。
待确认 owner change是否返回当前 Group全文/revision;Agent是否自动重读并安全重试一次。
应用层正确实现后,大多数请求都会安全路由。数据库 trigger是最后一道防线,避免 active 后又产生“接口报告成功、Group却看不到”的旧 Session写入。
activation 前决定写 Session,随后被表锁挡住,activation 后恢复;若代码没有复检,可能写回旧 row。
探针或编排异常时,旧 binary多活一小段时间,仍不理解 Group owner。
某条 task-token/CLI写路径若漏用 owner fence,可能绕过 resolver。
重构或人工 SQL误把 grouped Session row当成仍可写。
待 SQL 设计 trigger最终采用直接拒绝,还是仅允许带 exact evidence 的受控写。
cutover不能是 Server后台 fire-and-forget。它必须是 Matrix发布流程等待结果的必需 Job:失败时事务回滚、Server继续 legacy服务,但整次 Group Memory release gate必须变红。
| 呈现位置 | 必须显示 | 作用 |
|---|---|---|
| Matrix 发布步骤 | succeeded/failed、稳定错误码、计数、attempt ID、成功 hash | 发布人第一时间知道是否完成;失败不能标绿 |
| 数据库 rollout 状态 | phase、attempt、时间、结果、非敏感错误码、实际 hash | 重启后仍可回答“切没切成功” |
| MIA-303 | 最终计数、结论、回滚或重试结果 | 正式 Go/No-Go 与跨系统审计 |
Memory正文、用户身份、Group标题与绝对路径不得进入日志或 Issue。当前尚未验证 Matrix已有主动失败通知,所以只能承诺“步骤显式失败 + 持久状态”;若平台没有通知能力,再单独评估飞书等通知及其 Secret/owner成本。
| Phase | 有效 owner | Capability | 行为 |
|---|---|---|---|
legacy | Grouped Session仍用 Session row | 隐藏 | 旧语义正常服务,可重复 preflight |
activating | 持锁事务冻结 | 隐藏 | 无关请求继续,相关写请求等待 |
active | Grouped Session只用 Group row | 公布 | 新语义,旧 owner写入被拒绝 |
失败不增加 waiting 产品状态:事务回到 legacy,但 attempt持久化为 failed,Matrix gate同时失败。
upgrade_required。| 层级 | 影响 |
|---|---|
| Web | changed — activation后刷新 capability;旧 Turn/旧 Client冲突使用清楚的双语反馈。 |
| Desktop | changed — 复用 Shared frontend;cutover无需第二次安装或重启。 |
| Mobile Web / PWA | changed — 与 Web共用能力刷新,无原生 App特例。 |
| Shared frontend | changed — capability刷新、owner/revision conflict和短暂等待状态。 |
| Server | changed — 同一 binary支持 pre-activation旧 owner与 active Group owner。 |
| Database | changed — migration 260、attempt evidence、online activation和迟到写保护。 |
| Daemon / CLI / Runtime | changed — 沿用 MIA-249 Skill升级;不新增 cutover协议,旧 task snapshot兼容冲突。 |
| Deployment | changed — Matrix在滚动完成后运行同镜像 Job并把结果作为 release gate。 |
| Cross-cutting | changed — 零整站停机、版本交叠、失败显性化、幂等重试与回滚成为合同。 |
继续沿用现有 owner resolver、cutover command和 additive schema seam,不新增第二套产品 API。主要冲突面是 startup/activation、Work Context owner resolver、migration 260与部署 runbook;Matrix编排与通用 self-host Helm隔离。