| 1 | # Retired workspace drafts / 停用旧工作区草稿 |
| 2 | |
| 3 | Desktop no longer offers the previous workspace-draft workflow. This applies |
| 4 | equally to empty drafts, settings-only drafts, unsent content and unfinished |
| 5 | draft submissions. There is no project badge, draft page, recovery notice, |
| 6 | automatic migration or replay. New Conversation and navigation use formal |
| 7 | sessions directly, without waiting for or updating the old draft store. |
| 8 | |
| 9 | Existing `desktop/drafts-v1.sqlite` files are left in place and are not read by |
| 10 | the normal application lifecycle. This is a product retirement, not a storage |
| 11 | rewrite: historical compatibility implementations remain available for fixture |
| 12 | verification, but are disconnected from the current application flow. Downgrade |
| 13 | to an older binary can still expose that binary's own draft behavior. |
| 14 | |
| 15 | Already-created formal sessions and their chat history are retained. Current |
| 16 | formal-session input lives in `desktop/session-ui-v1.sqlite` and still saves |
| 17 | across switches/restarts. The shell exit callbacks now belong directly to that |
| 18 | input owner, preserving attachment completion, save-error exit veto and resumed |
| 19 | editing after a cancelled exit. |
| 20 | |
| 21 | | Contract | Old data | Current behavior | Previous-version behavior | |
| 22 | | --- | --- | --- | --- | |
| 23 | | Draft SQLite | File retained unchanged | No lifecycle reads, migration, reconciliation or UI entry | Existing old reader/writer format unchanged | |
| 24 | | Formal input SQLite | Existing inputs retained | Normal save, conflict handling and exit barrier | Format unchanged | |
| 25 | | Session / workspace registry | Formal sessions and history retained | Normal creation and navigation | Format unchanged | |
| 26 | | Shell exit hooks | Historical callback names retained | Flush only formal input | Shell/renderer callback contract unchanged | |
| 27 | |
| 28 | Regression coverage checks formal creation and saved-tab restore against a |
| 29 | corrupt historical draft database, dropping unfinished draft presentation while |
| 30 | retaining formal history, and formal input's attachment/save exit barrier. |
| 31 | Retirement also applies when saving reconciled tab preferences fails: the |
| 32 | fallback must not resurrect draft operation ownership, and an unpersisted |
| 33 | identity repair must not start a runtime. |
| 34 | Workspace-identity conflicts retain formal sessions for repair, including empty |
| 35 | ones. Saved-tab restore no longer runs the retired empty-session cleanup or |
| 36 | loads its draft-store evidence. |
| 37 | The old badge and draft-composer override assertions were removed because those |
| 38 | UI contracts are retired. Historical draft runtime fixtures use the same |
| 39 | `draft-op-` operation namespace as the old production writer. |
| 40 | |
| 41 | ## 中文 |
| 42 | |
| 43 | 旧工作区草稿全部停用,不再区分是否包含文字或设置。项目旁不再显示“旧版草稿”, |
| 44 | 也没有独立草稿页面、恢复提示或自动迁移。旧的未发送内容和未完成草稿提交不再 |
| 45 | 恢复或重发。新建与切换会话直接走正式会话流程,不依赖旧草稿数据库是否可读。 |
| 46 | |
| 47 | 旧数据库文件留在原处,当前应用生命周期不读取、不改写。兼容实现仍供历史夹具 |
| 48 | 验证使用,但已从当前产品流程断开。降级到旧客户端仍可能看到旧客户端自己的 |
| 49 | 草稿行为。已创建的正式会话及聊天记录不变;正式会话的新输入保存功能继续保留。 |
| 50 | |
| 51 | 正常退出仍等待新版输入及附件保存,保存失败保留窗口;取消退出后继续编辑。 |
| 52 | 数据库、会话、工作区和 Shell 回调格式均未改变。 |
| 53 | |
| 54 | 回归覆盖旧草稿库损坏时的新建和恢复、未完成草稿入口的移除、正式聊天记录保留, |
| 55 | 以及新版输入与附件的退出保存。旧草稿徽标和编辑器覆盖逻辑的断言随功能停用移除; |
| 56 | 历史运行时夹具使用与原生产代码一致的 `draft-op-` 操作标识。 |
| 57 | 标签页配置写回失败时也不恢复旧草稿操作;尚未保存成功的身份修复不得自动启动运行时。 |
| 58 | 工作区身份冲突时保留正式会话供修复,包括空会话;标签页恢复不再触发旧空会话清理, |
| 59 | 也不再通过该清理流程读取旧草稿库。 |
| 60 |