Skip to content

[Grok/dsh 06] 会话恢复与单一执行写入者 #138

Description

@Blackman99

Parent

#132

Ticket: 06

Status: ready-for-agent

User Stories: 28, 59, 62, 75(见父规格)

What to build

用户退出再启动后能恢复同一 dsh 会话;第二个客户端不能绕过活动会话的执行与写入所有者。

Acceptance criteria

  • 正常退出、强制终止和未完成工具结果的恢复保持已持久化内容,显示中断/未知状态,不自动重放副作用。
  • 竞争启动、断线、旧连接迟到写入被可靠仲裁;不得假设未验证的 dsh 跨进程锁已经存在。
  • 会话显示与持久化记录一致,源数据未损坏;不能安全取得写入权时明确拒绝。
  • 独立重跑 02—06 的启动、流、文件、审批、取消、恢复全链路,证明只有 dsh 执行核心后才开放后续功能实施。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. Blackman99 commented on Sep 20, 2026

    @Blackman99
    OwnerAuthor

    按用户2026-09-20的实施授权领取 Ticket06 / #138;本次只记录领取,未启动实施工作者,也不表示已实现。已重新读取 #132 及全部80票正文/评论和实际 blocked-by;当前只有本票就绪(native 177 边与正文前置均只解锁 #138),未领取任何被阻塞后继。

    实施必须从独立集成树精确基线 b2280d173275906bbbb5ec38756b2b9971d242e1 开始。前置 #137 已关闭,其同一提交已保留在 rewrite/grok-dsh-20260920;两位独立 grok-4.6 审查及集成证据见 #137 (comment) 。#136/#135/#134/#133 仍为已集成关闭基线 #136 (comment) 、#135 (comment) 、#134 (comment) 与 #133 (comment) 。

    范围按原验收:正常退出、强制终止和未完成工具结果的恢复保持已持久化内容,显示中断/未知状态,不自动重放副作用;竞争启动、断线、旧连接迟到写入被可靠仲裁,不得假设未验证的 dsh 跨进程锁已经存在;会话显示与持久化记录一致,源数据未损坏,不能安全取得写入权时明确拒绝;独立重跑 02—06 的启动、流、文件、审批、取消、恢复全链路,证明只有 dsh 执行核心后才开放后续功能实施。后续实施/审查子代理使用 grok-4.6。仅在实施、独立审查和集成验收通过后关闭。main、现有未跟踪文件及其他工作树不改动;不授权付费资源,#212仍须新的明确最终发布/默认切换批准。

  2. self-assigned this
    on Sep 20, 2026
  3. Blackman99 commented on Sep 20, 2026

    @Blackman99
    OwnerAuthor

    已完成并集成到独立分支 rewrite/grok-dsh-20260920,HEAD 提交:dc09422 。feat 提交:c0a82f4 。该范围是对已审查 worker HEAD 445b3d1f7ee9d1e5b1c51c796a2add20b79b48cc 的 b2280d1..445b3d1 cherry-pick(68903ae feat + 445b3d1 fix),tree 相同 8c8d8d4d0a8d26eb19dc08d55be01bed4a003d4c。两位独立 grok-4.6 审查员对该精确 worker HEAD 均批准且无剩余问题(首轮 68903ae 的 pending 恢复 / Windows fail-open / owner 过早释放 / resume PTY drain 已在 445b3d1 修复)。

    集成控制器在隔离集成树独立复跑(TMPDIR=/tmp):typecheck、首次 80 文件 / 2233 通过 + 1 项 afterEach ENOTEMPTY 清理竞态后重跑 80 文件 / 2234 通过(含 scripts/rust-acp-protocol.spec.mjs 15/15:list/resume、第二写入者拒绝、中断工具不重放、断线后继任者 resume)、cargo fmt、严格 Clippy(--offline -D warnings)、Rust workspace 30+61+2+379 项测试(含 resumes_closed_fake_session_and_refuses_an_active_owner、acquire_records_pid_and_second_lock_is_refused、projects_interrupted_unknown_tools、stale_owner_prompt_is_refused、shutdown_reaps_child_before_owner_release)、pnpm run build + build:rust(native SHA-256 d9fd2b36230fa68ea3163890e89e38e73ee1a7c1fa2035d89d6f82d72f6575d2)、packed 安装产物 PTY scripts/rust-resume-pty-test.py PASS(证据 /tmp/codsh-rust-resume-7te6qsvi,五案 exit 0,note.txt 仍 alpha\n,均含 1049l)、隔离套件 scripts/rust-pty-test.py PASS(.scratch/rust-pty-1789906762823917000)、流式回合 PTY PASS(/tmp/codsh-rust-turn-hwzzc9k8)、文件工具 PTY PASS(/tmp/codsh-rust-file-3wxxx_f3,noteAfterAllow ALPHA\n)、取消 PTY PASS(/tmp/codsh-rust-cancel-emyw9eux,note 仍 alpha\n)、41 项 legacy wrapper/input/session e2e。

    实际 UI:--continue 恢复同一 dsh 会话 f3378baf-1c95-4d15-ba69-43e68c37f7a7 (resumed) 并保留 TOKEN_RESUME_ONE/TWO;竞争 --resume 显示 Write owner refused: session f3378baf-… is already running (pid 52066);SIGKILL 后 --resume d6a2a73f-… (resumed) 将未完成工具显示 unknown + [interrupted],无 pending/in_progress,note.txt 仍 alpha\n,后续 TOKEN_AFTER_CRASH 可跑。真实 dsh @deepseek-ai/dsh@0.1.5-rc.2。

    变更仅为 opt-in codsh --rust 经 released dsh ACP session/list + session/resume 与本进程 exclusive write owner。未改 main(仍 43b5da1),未链入官方 agent 核心,未发布 npm,未做默认切换。Linux/Windows PTY 仍未在本主机验证。#132 spec 与后继票仍不关闭。#212 仍须新的明确最终发布/默认切换批准。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions