diff --git a/docs/open-source-readiness/HANDOFF_2026-07-28.md b/docs/open-source-readiness/HANDOFF_2026-07-28.md index 61644478..ae3364c4 100644 --- a/docs/open-source-readiness/HANDOFF_2026-07-28.md +++ b/docs/open-source-readiness/HANDOFF_2026-07-28.md @@ -1,96 +1,66 @@ -# DeepCode 实施交接提示词(2026-07-28) +# DeepCode 实施交接状态(更新于 2026-07-29) > 用途:在新会话中从 GitHub 远程继续实施,不依赖旧容器、旧工作区或未推送文件。 > > 远程仓库:`https://github.com/yuanchenglu/deepcode.git` +> Canonical 可复制提示词:[`SESSION_HANDOFF_PROMPT.md`](./SESSION_HANDOFF_PROMPT.md) ## 当前远程状态 - 开发分支:`develop` - 发布/默认分支:`master` +- 当前已确认开发基线:`develop@ea9d848e29dc9ae04ace7c5e1f12921157c224ed` - S1-02-C:PR #2,已合入 `develop@babc3080f9d5c5c90dcf4abb16a0149e6dbc1eb8` - S1-02-D:PR #6,已合入 `develop@c848bc537e8c5677c36a360dd00122745a2f5b2e` -- S1-02-E:PR #7 `fix(identity): close DeepCode coexistence boundaries`,已 squash 合入 `develop@1ad663ee07aa5ba72a333f9d2dc1ba3fe981be90` -- PR #7 最终 clean docs head:`ebc6365f4b110bb90e56abc48daf8dc9cf00fe30` -- 最终 CI:typecheck #120 / id `30355593747` SUCCESS;test #122 / id `30355593871` SUCCESS -- test #122 首次 Linux HttpApi 尝试在 Effect phase 遭遇单次 runner stall 并触发 15 分钟 timeout;未修改代码或门禁,仅重跑失败 job,HttpApi artifact `httpapi-2` / id `8687319884` 成功。 -- 当前代码、测试、CI、inventory 与 evidence 均在远程;不存在必须依赖旧容器的修改。 +- S1-02-E:PR #7,已合入 `develop@1ad663ee07aa5ba72a333f9d2dc1ba3fe981be90` +- S1-02 合并状态收口:PR #9,typecheck #124 与 test #126 全绿,已 squash 合入 `develop@ea9d848e29dc9ae04ace7c5e1f12921157c224ed` +- PR #8 已关闭且未合并:原因是分支命名不符合根 `AGENTS.md`,并遗漏生成的 `.pyc` 清理;PR #9 已完成替代。 +- 当前有效代码、测试、CI、inventory、evidence、计划与交接信息均在 GitHub 远程;不存在必须依赖旧容器的修改。 ## 计划进度 - 产品发布判断:`NO-GO` - 第一阶段:`IN_PROGRESS` + - 父级任务卡:2/9 `DONE` - S1-01A:`DONE` - S1-01B:`NOT_STARTED` - S1-02-A/B/C/D/E 与父任务:`DONE` - - S1-03:下一唯一代码任务 - - S1-04、S1-05:按 PLAN 可并行,但不得与 S1-03 重叠修改 + - S1-03:下一唯一代码任务,当前 `NOT_STARTED` + - S1-04、S1-05:尚未开始;虽可并行,但新会话默认只领取 S1-03 - S1-06~S1-08:受前置任务阻塞 -- 第二阶段:`NOT_STARTED`,受 Gate 1 阻塞 -- 第三阶段:`NOT_STARTED`,受 Gate 2 与 Design Gate 阻塞 +- 第二阶段:0/8,`NOT_STARTED`,受 Gate 1 阻塞 +- 第三阶段:0/8,`NOT_STARTED`,受 Gate 2 与 Design Gate 阻塞 +- 全计划按父级任务卡计数:2/25 `DONE`;该计数不代表加权工程量百分比。 ## S1-02 最终结论 -- DeepCode 只默认读取/写入 `deepcode.json(c)`、`.deepcode`、DeepCode Global Path、数据库、日志、项目缓存与环境变量。 -- OpenCode-only 和双配置并存测试证明 `.opencode` / `opencode.json(c)` 不被默认加载或修改。 +- DeepCode 默认只读写 `deepcode.json(c)`、`.deepcode`、DeepCode Global Path、数据库、日志、项目缓存与 `DEEPCODE_*` 环境变量。 +- `.opencode` / `opencode.json(c)` 不会被默认加载或修改。 - TUI、插件、MCP、ACP、OAuth、Provider headers、Agent/Plan/Session 和 shell 生命周期均已隔离。 - 安装、upgrade fail-closed、卸载前后 OpenCode shell/目录保持不变。 - 最终 inventory 4,168 行全部分类,未分类用户边界为 0。 -- launcher、bin、publish、归档、checksum、rollback、purge 和 Release channel 明确属于 S1-03。 +- launcher、bin、publish、归档、checksum、rollback、purge 和 Release channel 属于 S1-03,不得重新归入 S1-02。 -## 开发流程规范 - -第一优先:功能分支 → PR → 完整 CI → squash 合入 `develop`。 - -只有 PR/CI 持续异常且完成根因分析、最小修复后仍不可解决,才允许直推 `develop`。不得关闭检查、删除失败测试、恢复 OpenCode fallback 或跳过 Windows/Linux unit、E2E、typecheck、HttpApi、lifecycle/config/permission 门禁。 - -## 可复制到新会话的提示词 +## 下一唯一任务:S1-03 -```text -@GitHub yuanchenglu/deepcode +目标:统一 DeepCode CLI 构建、安装、升级与卸载。 -请从 GitHub 远程仓库继续实施 DeepCode 三阶段交付计划。不要依赖任何旧容器、旧工作区或未推送本地文件;GitHub 远程仓库是唯一事实源。 +必须完成: -一、首先完整读取并遵守 -1. 仓库根 AGENTS.md -2. docs/open-source-readiness/PLAN.md(应为 v1.3 或更新) -3. docs/open-source-readiness/HANDOFF_2026-07-28.md -4. docs/open-source-readiness/evidence/S1-02/README.md -5. docs/open-source-readiness/evidence/S1-02/test-results/S1-02-E-boundary-audit.md -6. 已合并 PR #7:fix(identity): close DeepCode coexistence boundaries +1. 唯一制品命名 `deepcode--.`,归档内部二进制为 `deepcode`。 +2. 修复 package bin、build、postinstall、版本检测、upgrade、rollback、uninstall 的 DeepCode 身份与下载源。 +3. Alpha 只启用 DeepCode-owned GitHub Release/curl 渠道;未迁移渠道必须 fail-closed。 +4. 下载后验证 SHA-256,再原子替换;升级失败自动回滚。 +5. uninstall 与 `--purge` 只删除 manifest 中的 DeepCode 所有物,OpenCode/Oh-my-OpenAgent 始终不变。 +6. 建立 fake release server/fixture 测试,覆盖错误哈希、下载中断、权限不足、幂等安装、回滚与卸载。 -二、重新核验远程实时状态 -- develop、master 当前 HEAD -- PR #7 已合并状态和 merge commit -- develop 上 PLAN/evidence/HANDOFF 是否完整 -- 当前开放 PR、分支和最新 CI - -已知基线: -- S1-02-D 已合入 develop@c848bc537e8c5677c36a360dd00122745a2f5b2e -- S1-02-E 已合入 develop@1ad663ee07aa5ba72a333f9d2dc1ba3fe981be90 -- 最终 PR head ebc6365f4b110bb90e56abc48daf8dc9cf00fe30 -- typecheck #120 / 30355593747:SUCCESS -- test #122 / 30355593871:SUCCESS -- Linux/Windows unit、lifecycle、完整 config/permission、E2E、generated client、HttpApi 全绿 - -三、执行逻辑 -1. 不重做 S1-02,不恢复任何 OpenCode 用户 fallback。 -2. 从最新 develop 创建独立功能分支,领取 PLAN 的下一唯一代码任务 S1-03。 -3. 先建立失败基线与 evidence,再做最小实现,完整 CI 全绿后 squash 合入 develop。 -4. 不提前实施 S1-04 或后续 Release 门禁;跨任务文件冲突必须先在 PLAN/evidence 中明确。 - -四、S1-03 目标 -- 建立 DeepCode-owned launcher、二进制/归档命名和跨平台构建矩阵。 -- 建立可信 GitHub Release/manifest/checksum/SBOM 路径。 -- upgrade 只读取 DeepCode-owned channel;支持失败回滚。 -- uninstall 与 --purge 只删除 DeepCode,自始至终保持 OpenCode/Oh-my-OpenAgent 不变。 -- 不宣称官网可安装,除非 S1-01B/S1-07 的真实官网与部署证据已完成。 +## 开发流程规范 -请自主执行,不要只做状态汇报。完成当前可完成工作后,明确列出:已合入 develop 的内容、当前分支/PR/commit、完整 CI、修改文件、证据、下一唯一执行点和外部阻塞。 -``` +完整的五仓统一 PR/异常直推规范、commit 模板和技术债务路径已写入 [`SESSION_HANDOFF_PROMPT.md`](./SESSION_HANDOFF_PROMPT.md)。执行时还必须遵守根 `AGENTS.md`:DeepCode 分支名最多三个单词、用连字符分隔、不得使用斜杠或 `feat/`、`fix/` 前缀。 ## 交接边界 -- 本文件不替代 PLAN;新会话必须重新读取 GitHub 实时状态。 -- S1-02 已完成并合入,不得在 S1-03 中重新引入 OpenCode 默认配置、路径、环境变量、安装或升级渠道。 -- 产品继续为 NO-GO,直到 Gate 1 全部通过。 +- GitHub 远程是唯一事实源;新会话必须重新核验 `develop`、开放 PR、分支和 CI。 +- 不重做 S1-02,不恢复 OpenCode 用户 fallback。 +- 不提前宣称官网可安装;产品保持 `NO-GO`,直到 Gate 1 全部通过。 +- 会话结束前,即使不能合入 `develop`,也必须把有效工作推送到远程功能分支,并更新 PLAN/evidence/handoff。 diff --git a/docs/open-source-readiness/PLAN.md b/docs/open-source-readiness/PLAN.md index 8916140e..20b8e2d1 100644 --- a/docs/open-source-readiness/PLAN.md +++ b/docs/open-source-readiness/PLAN.md @@ -1,7 +1,7 @@ # DeepCode 三阶段交付总计划(Implementation-ready Master Plan) -> 文档版本:1.3 -> 基线日期:2026-07-27 +> 文档版本:1.4 +> 基线日期:2026-07-29 > 当前状态:Implementation in progress(计划执行中,产品当前仍为 NO-GO) > 分支拓扑:`develop` 为实施基线;`master` 为 GitHub 默认/发布分支;里程碑通过审查后从 `develop` 合入 `master` > 文档定位:本目录唯一的跨阶段执行总计划 @@ -11,22 +11,25 @@ | 日期 | 版本 | 变更 | 依据 | | ---------- | ---: | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| 2026-07-29 | 1.4 | 回填 PR #9 合并收口、最终远程基线与父级任务卡计数;新增 canonical 会话交接提示词并固化五仓开发流程规范 | PR #9、typecheck #124、test #126、GitHub 远程状态 | | 2026-07-28 | 1.3 | 完成 S1-02-D/E 与父任务验收;回填 PR #6/#7、双平台全链 CI、字符串分类和下一唯一任务 S1-03 | PR #6、PR #7、typecheck #120、test #122 与 evidence | | 2026-07-28 | 1.2 | 回填实际实施进度、PR/CI 基线与远程交接入口;明确 S1-02-D 为 IN_REVIEW、S1-02-E 为下一执行点 | PR #2、PR #6、GitHub Actions 与远程分支复核 | | 2026-07-27 | 1.1 | 明确 `develop` 开发、`master` 发布的分支拓扑;将 S1-01 拆为仓库基线与官网止损,解除外部官网权限对代码任务的依赖死锁 | 远端仓库元数据与执行一致性复核 | | 2026-07-27 | 1.0 | 将交付重构为“官网可安装 → 完整能力 → 设计驱动的 WebUI/Electron”三阶段,并补齐任务级输入、步骤、测试、证据和门禁 | 用户目标澄清、源码与现有开源准备文档复核 | -## 当前执行快照(2026-07-28) +## 当前执行快照(2026-07-29) > 本节记录实施事实,不替代各任务卡验收条件。CI、PR 和分支状态变化时,后续执行者必须以 GitHub 实时状态复核。 | 范围 | 当前状态 | 已完成 | 当前执行点 / 阻塞 | | --- | --- | --- | --- | | 产品发布判断 | `NO-GO` | 计划已达到可执行标准并进入实施 | Gate 1 尚未通过,官网与可信 Release 安装闭环尚未完成 | -| 第一阶段 | `IN_PROGRESS` | S1-01A `DONE`;S1-02-A/B/C/D/E 与父任务 `DONE` | 下一唯一代码任务 S1-03;S1-01B、S1-04、S1-05 及后续 Stage 1 任务仍未完成 | -| 第二阶段 | `NOT_STARTED` | 无 | 受 Gate 1 阻塞,不得提前宣称完整 Provider/Harness/Agent/Gateway 能力 | -| 第三阶段 | `NOT_STARTED` | 无 | 受 Gate 2 和设计门禁阻塞,不得提前大规模改造 WebUI/Electron | +| 第一阶段 | `IN_PROGRESS` | 父级任务卡 2/9 `DONE`:S1-01A、S1-02;S1-02-A/B/C/D/E 5/5 `DONE` | 下一唯一代码任务 S1-03;S1-01B、S1-04、S1-05 及 S1-06~S1-08 尚未完成 | +| 第二阶段 | `NOT_STARTED` | 父级任务卡 0/8 `DONE` | 受 Gate 1 阻塞,不得提前宣称完整 Provider/Harness/Agent/Gateway 能力 | +| 第三阶段 | `NOT_STARTED` | 父级任务卡 0/8 `DONE` | 受 Gate 2 和 Design Gate 阻塞,不得提前大规模改造 WebUI/Electron | + +> 按父级任务卡计数,当前为 2/25 `DONE`。该计数仅表示门禁任务完成数量,不代表加权工程量百分比;S1-02 是已完成的高风险基础任务。 ### 已落入远程的实施基线 @@ -34,7 +37,9 @@ - PR #6 / S1-02-D 已通过完整门禁并 squash 合入 `develop@c848bc537e8c5677c36a360dd00122745a2f5b2e`。 - PR #7 / S1-02-E 已通过完整门禁并 squash 合入 `develop@1ad663ee07aa5ba72a333f9d2dc1ba3fe981be90`。 - PR #7 最终 clean docs head:`ebc6365f4b110bb90e56abc48daf8dc9cf00fe30`;typecheck #120 / `30355593747`、test #122 / `30355593871` 全部 SUCCESS。HttpApi 首次尝试在 Effect phase 遭遇 runner stall 并触发 15 分钟 timeout;同一 run 仅重跑失败的 Linux unit job后,HttpApi artifact `httpapi-2` 成功,未修改或放宽门禁。 -- 代码、测试、CI boundary gate、inventory 和 evidence 均已推送到远程,不依赖旧容器中的未提交文件。 +- PR #8 因分支名不符合根 `AGENTS.md` 且遗漏生成的 `.pyc` 清理而关闭、未合并;由合规分支上的 PR #9 取代。 +- PR #9 / S1-02 post-merge closeout 已通过 typecheck #124 / `30359898506`、test #126 / `30359898493`,并 squash 合入 `develop@ea9d848e29dc9ae04ace7c5e1f12921157c224ed`。 +- 代码、测试、CI boundary gate、inventory、evidence 与交接基线均已推送到 GitHub 远程,不依赖旧容器中的未提交文件。 ### S1-02 当前完成度 @@ -48,7 +53,15 @@ S1-02-A/B/C/D/E 与父任务已完成。下一唯一代码执行点是 **S1-03**。S1-03 完成前,不得发布 DeepCode launcher/归档或恢复任何上游 updater。 -远程交接入口:[HANDOFF_2026-07-28.md](./HANDOFF_2026-07-28.md)。该文件包含可直接粘贴到新会话的完整提示词、分支/PR/Commit 基线、流程纪律和下一执行逻辑。 +远程交接状态:[HANDOFF_2026-07-28.md](./HANDOFF_2026-07-28.md)。可直接粘贴到新会话的 canonical 提示词:[SESSION_HANDOFF_PROMPT.md](./SESSION_HANDOFF_PROMPT.md)。新会话必须先读取 GitHub 实时状态,不能把旧容器或提示词中的 SHA 当作高于远程的事实源。 + +### 统一开发流程与远程保存纪律 + +- 第一优先始终是:合规功能分支 → Pull Request → 完整 CI → squash 合入 `develop`。 +- PR/CI 持续异常时,必须先定位根因并区分代码、测试、环境或规则问题;能修复则修复,不能解决才允许直推 `develop`。 +- 直推 commit 必须包含 `## 问题原因` 和 `## 技术债务`;技术债务还可按项目约定写入 `TECH_DEBT.md` / `BUG_LIST.md`。 +- 无论是否完成合并,每次会话结束前都必须把有效代码、测试、证据、计划和交接信息推送到远程分支;不得把旧容器作为唯一保存位置。 +- 五仓统一规范及完整 commit 模板见 [SESSION_HANDOFF_PROMPT.md](./SESSION_HANDOFF_PROMPT.md)。 --- diff --git a/docs/open-source-readiness/SESSION_HANDOFF_PROMPT.md b/docs/open-source-readiness/SESSION_HANDOFF_PROMPT.md new file mode 100644 index 00000000..59aa1702 --- /dev/null +++ b/docs/open-source-readiness/SESSION_HANDOFF_PROMPT.md @@ -0,0 +1,186 @@ +# DeepCode 新会话交接提示词 + +以下代码块可直接完整复制到新的 ChatGPT / Codex 会话。 + +````text +@GitHub yuanchenglu/deepcode + +你现在接手 GitHub 仓库 `yuanchenglu/deepcode` 的三阶段交付计划实施工作。 + +## 一、事实源与启动检查 + +GitHub 远程仓库是唯一事实源。不要依赖任何旧容器、旧工作区、未推送文件或口头记忆。 + +开始前必须从远程完整读取并遵守: + +1. 根目录 `AGENTS.md` +2. `docs/open-source-readiness/PLAN.md`(应为 v1.4 或更新) +3. `docs/open-source-readiness/HANDOFF_2026-07-28.md` +4. `docs/open-source-readiness/SESSION_HANDOFF_PROMPT.md` +5. `docs/open-source-readiness/evidence/S1-02/README.md` +6. `docs/open-source-readiness/evidence/S1-02/test-results/S1-02-E-boundary-audit.md` +7. PR #7、PR #9 及其最终 CI + +随后重新核验: + +- `develop`、`master` 当前 HEAD +- 开放 PR、远程功能分支、最新 commits +- 当前 HEAD 的 GitHub Actions 状态 +- PLAN、evidence、handoff 与实际远程状态是否一致 +- 是否存在任何尚未合并但已推送的有效工作 + +提示词记录的已知代码基线为: + +- S1-02-E:PR #7,合入 `develop@1ad663ee07aa5ba72a333f9d2dc1ba3fe981be90` +- S1-02 post-merge closeout:PR #9,typecheck #124 / `30359898506`、test #126 / `30359898493` 全绿,合入 `develop@ea9d848e29dc9ae04ace7c5e1f12921157c224ed` + +若 GitHub 实时状态更新,以实时远程状态为准。 + +## 二、当前计划进度 + +- 产品发布判断:`NO-GO` +- 第一阶段:`IN_PROGRESS`,父级任务卡 2/9 `DONE` +- S1-01A:`DONE` +- S1-01B:`NOT_STARTED` +- S1-02-A/B/C/D/E 与父任务:`DONE` +- S1-03:下一唯一代码任务,当前 `NOT_STARTED` +- S1-04、S1-05:尚未开始 +- S1-06~S1-08:受前置任务阻塞 +- 第二阶段:0/8,受 Gate 1 阻塞 +- 第三阶段:0/8,受 Gate 2 与 Design Gate 阻塞 +- 全计划按父级任务卡计数:2/25 `DONE`,该数字不是加权工程量百分比 + +不要重做 S1-02,不得恢复任何 OpenCode 默认配置、路径、环境变量、安装、升级、服务、身份或用户 fallback。 + +## 三、下一唯一任务 S1-03 + +从最新 `develop` 创建符合根 `AGENTS.md` 的短功能分支,领取 `S1-03 统一 CLI 构建、安装、升级与卸载`。 + +目标: + +1. 建立唯一 DeepCode launcher、bin 和归档命名:`deepcode--.`,归档内部二进制为 `deepcode`。 +2. 修复 package bin、build、postinstall、版本检测、upgrade、rollback、uninstall 的 DeepCode 身份和下载源。 +3. Alpha 只启用 DeepCode-owned GitHub Release/curl 渠道;brew/npm/choco/scoop 等未迁移渠道必须禁用或明确 fail-closed,不能回退上游。 +4. 下载到临时目录,验证 SHA-256 后原子替换 `~/.deepcode/bin/deepcode`。 +5. 升级保留上一版本,失败自动回滚;同版本重复安装必须幂等。 +6. uninstall 只删除 DeepCode manifest 所有物;默认保留用户数据,`--purge` 必须列清单并二次确认。 +7. 建立 fake release server/fixture 测试,覆盖错误哈希、下载中断、权限不足、重复安装、升级回滚和卸载。 +8. OpenCode 和 Oh-my-OpenAgent 的命令、配置、数据库与目录树在完整生命周期前后必须保持不变。 + +先建立失败基线和 evidence,再做最小实现。不得提前实施 S1-04、S1-06 或官网发布。 + +## 四、五仓统一开发流程规范 + +本规范适用于以下 5 个项目: + +- `deepseekagent` +- `deepcode` +- `deepseek_runtime` +- `llm-harness-agent` +- `oh-my-deepseek-harness` + +Remote:`https://github.com/yuanchenglu/<项目名>.git` + +分支策略: + +- 开发分支:`develop` +- 发布分支:`master` +- `develop` 已取消 PR 强制保护,可以直接推送;但直推仅是异常兜底,不是默认流程 +- DeepCode 还必须遵守根 `AGENTS.md`:分支名最多三个单词、用连字符分隔、不得使用斜杠或 `feat/`、`fix/` 前缀 + +### 第一优先:PR 流程 + +1. 创建功能分支 +2. 提交 Pull Request +3. 等待完整 CI 通过 +4. 处理所有有效 review thread +5. squash 合入 `develop` +6. 按项目 `docs/` 下的权威计划文档领取和更新任务 +7. PR 标题与描述必须清晰说明变更范围、原因、影响、测试和证据 + +### 第二优先:异常处理与直推 + +只有 PR 流程持续异常,例如 CI 环境不可用、测试依赖无法安装、规则冲突或平台故障时,才执行: + +1. 先分析原因:明确是代码、测试、环境、权限还是规则问题 +2. 尝试最小修复:代码或配置问题必须直接修复并重跑 +3. 无法在当前环境解决时,才允许直推 `develop`,避免有效工作因会话或容器销毁而丢失 + +不得把真实代码缺陷伪装成环境问题;不得删除失败测试、关闭安全校验、放宽权限、恢复 OpenCode fallback 或静默吞错。 + +### 直推 `develop` 的 commit 纪律 + +Commit 信息必须包含「问题原因」和「技术债务」: + +```text +type(scope): <变更说明> + +## 问题原因 +<说明 PR/CI 为什么无法通过,根因、已尝试的修复和验证结果> + +## 技术债务 +- <遗留问题 1> +- <遗留问题 2> +``` + +示例: + +```text +feat(auth): add login ticket validation + +## 问题原因 +CI 环境的 Playwright 依赖版本与锁定版本不一致,E2E 在 CI 无法启动;已定位为 runner 环境问题并完成本地与可用平台验证。 + +## 技术债务 +- 统一 Playwright 版本锁定 +- 单独修复 CI E2E runner 镜像 +``` + +### 技术债务记录 + +二选一,推荐同时在 commit 中写明: + +- `deepseekagent` → `docs/TECH_DEBT.md` 或 `docs/BUG_LIST.md` +- `deepcode` → `docs/BUG_LIST.md` +- `deepseek_runtime` → `docs/TECH_DEBT.md` +- `oh-my-deepseek-harness` → `docs/TECH_DEBT.md` +- `llm-harness-agent` → 根目录 `TECH_DEBT.md` + +文档条目格式: + +```text +[YYYY-MM-DD] 描述 | 遗留原因 | 状态 +``` + +核心原则: + +- 能走 PR 就走 PR,直推是兜底方案 +- 直推必须解释原因和遗留问题 +- 技术债务必须可发现、可追踪 +- 会话结束前必须把所有有效代码、测试、证据、计划和交接信息推送到 GitHub 远程 +- 即使不能合入 `develop`,也必须创建或复用远程功能分支保存工作 + +## 五、S1-03 验证与收口 + +至少运行并保存: + +```bash +cd packages/opencode +bun typecheck +bun test test/installation +./script/build.ts +``` + +同时保留现有完整门禁:Linux/Windows unit、E2E、typecheck、lifecycle、完整 config/permission、generated client、HttpApi 和 OpenCode coexistence inventory。 + +完成当前可完成工作后,必须更新 PLAN/evidence/handoff,并明确列出: + +- 已合入 `develop` 的 commit +- 当前远程分支、PR 和 head SHA +- 完整 CI run 与结论 +- 修改文件和测试证据 +- 尚未解决的技术债务或外部阻塞 +- 下一唯一执行点 + +请直接执行,不要只做状态汇报。不要依赖旧容器,也不要让任何有效修改只存在于本地。 +````