docs(blueprint): P8g 用户终验通过,P8 一键接入整卡标 ✅,记录终验证据与转后续小修的文案项
All checks were successful
Push & PR Check / check (push) Successful in 1m3s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
lanrtop 2026-10-04 11:39:13 +09:00
parent 0ffaad03fd
commit c0e2e3c133
3 changed files with 10 additions and 6 deletions

View File

@ -511,9 +511,9 @@ modules:
name: 三端客户端对等 name: 三端客户端对等
area: infra area: infra
status: in_progress status: in_progress
progress: 74 progress: 78
updated: 2026-10-04 updated: 2026-10-04
note: "P1/P2/P3/P3b/P7/P9/P10 完成:三端(Claude Code、Codex 含 Desktop、DSH 含桌面 GUI)在 Enterprise 经 %USERPROFILE%\\.lian-jing 稳定入口连项目专用地址,人终验通过。Claude 条目经 claude CLI 写入、以 claude mcp get 为准;DSH 由托管块全局行(headless)+ 会话级插件(GUI/web/acp 按会话工作目录)路由;接入写入幂等;接入包改写块外带未提交改动的托管块文件时给出混合文件预警;P7 实测 MCP 服务器说明仅 Claude/DSH 带入模型上下文、Codex 不带,引导提示保留在 skill。2026-10-03 P8 一键接入设计定稿(docs/tasks/2026-10-03-p8-onboarding-oneclick-design.md):A1 不前置;P4 分 L0 静态 / L1 零模型 / L3 无头会话,P8 只依赖 L1(P4a);拆为 P8-0、P8a–P8g 与 P4-0、P4a–P4e(P8-0、P8a、P4-0 已完成,P8b 适配器注册表与三端结构化注入结果(PR #33,enterprise 实测两次注入三端 converged、零写入)、P8c 写入汇与写入前计划(PR #36)、P4a L1 零模型三端检查(PR #38,enterprise 三端 18 格 ready)、P8d 编排本体(PR #39)、P8e 投影(PR #40)、P8f register_project(PR #37)、P8g UI 一键接入面板(PR #41,2026-10-04)已完成,P8 agent_verify 全部达成、human_verify 待用户终验,端到端:新登记项目 plan→onboard_project done、重复执行全收敛;P8a 把「已接入」统一为有项目 token;P4-0 实测六项假设,Codex 只在目录受信任时加载项目配置、Claude 用无效模型名可零额度取 init 并入 L1),P8 进行中;进度按拆分后卡数重算。待做 P5、P6(基于 P8c 的 WriteSink)。" note: "P1/P2/P3/P3b/P7/P9/P10 完成:三端(Claude Code、Codex 含 Desktop、DSH 含桌面 GUI)在 Enterprise 经 %USERPROFILE%\\.lian-jing 稳定入口连项目专用地址,人终验通过。Claude 条目经 claude CLI 写入、以 claude mcp get 为准;DSH 由托管块全局行(headless)+ 会话级插件(GUI/web/acp 按会话工作目录)路由;接入写入幂等;接入包改写块外带未提交改动的托管块文件时给出混合文件预警;P7 实测 MCP 服务器说明仅 Claude/DSH 带入模型上下文、Codex 不带,引导提示保留在 skill。2026-10-03 P8 一键接入设计定稿(docs/tasks/2026-10-03-p8-onboarding-oneclick-design.md):A1 不前置;P4 分 L0 静态 / L1 零模型 / L3 无头会话,P8 只依赖 L1(P4a);拆为 P8-0、P8a–P8g 与 P4-0、P4a–P4e(P8-0、P8a、P4-0 已完成,P8b 适配器注册表与三端结构化注入结果(PR #33,enterprise 实测两次注入三端 converged、零写入)、P8c 写入汇与写入前计划(PR #36)、P4a L1 零模型三端检查(PR #38,enterprise 三端 18 格 ready)、P8d 编排本体(PR #39)、P8e 投影(PR #40)、P8f register_project(PR #37)、P8g UI 一键接入面板(PR #41,2026-10-04)已完成,P8 一键接入整卡 ✅(2026-10-04 用户终验:UI 新建→预览→确认 7.7 秒 done,三端 L1 18 格 ready,三端桌面会话调通),端到端:新登记项目 plan→onboard_project done、重复执行全收敛;P8a 把「已接入」统一为有项目 token;P4-0 实测六项假设,Codex 只在目录受信任时加载项目配置、Claude 用无效模型名可零额度取 init 并入 L1),P8 进行中;进度按拆分后卡数重算。待做 P5、P6(基于 P8c 的 WriteSink)。"
position: [3500, 950] position: [3500, 950]
- id: architecture-evolution - id: architecture-evolution

View File

@ -213,8 +213,9 @@ skill 只是五个接入面之一,兼容层覆盖全部五面。
- known_limits: "Claude 与 DSH 只验了无头模式,Claude 只用了 sonnet-4-6;Codex 未验 TUI 与桌面版(桌面版可能走 app-server 路径,结论可能不同),也未验 SSE 传输。探针用的是桩服务的中英混合短说明,未用炼境真实说明(中文 238 字、UTF-8 500 字节,远低于 DSH 默认上限 32768 字节)实测。Codex 后续版本若开始带入服务器说明,按「检测行为而非嗅探版本」重跑本探针(P4 固化后纳入矩阵),三端都支持时再迁移。现有服务器说明五条要点中,「先读状态」「canonical project_id」「开发变量先查后登记」在 skill 有对应条目;「其他写操作须用户明确确认」与「unavailable/unknown 不得当作成功」在 skill 与 AGENTS.md 中只有分场景表述(合并 PR、CI workflow、工具链安装;MCP 不可用时不伪造诊断),Codex 会话只能从这些条目与工具描述获知——是否补成通用条目留待下次改 skill 时一并处理(需升接入包版本),本卡不改。 - known_limits: "Claude 与 DSH 只验了无头模式,Claude 只用了 sonnet-4-6;Codex 未验 TUI 与桌面版(桌面版可能走 app-server 路径,结论可能不同),也未验 SSE 传输。探针用的是桩服务的中英混合短说明,未用炼境真实说明(中文 238 字、UTF-8 500 字节,远低于 DSH 默认上限 32768 字节)实测。Codex 后续版本若开始带入服务器说明,按「检测行为而非嗅探版本」重跑本探针(P4 固化后纳入矩阵),三端都支持时再迁移。现有服务器说明五条要点中,「先读状态」「canonical project_id」「开发变量先查后登记」在 skill 有对应条目;「其他写操作须用户明确确认」与「unavailable/unknown 不得当作成功」在 skill 与 AGENTS.md 中只有分场景表述(合并 PR、CI workflow、工具链安装;MCP 不可用时不伪造诊断),Codex 会话只能从这些条目与工具描述获知——是否补成通用条目留待下次改 skill 时一并处理(需升接入包版本),本卡不改。
已补齐(2026-10-03,分支 feat/agent-client-parity-p7-skill-rules):两条已作为通用边界写进 lian-jing skill 模板开头(双投影到 .agents 与 .claude),两条规则的核心句与服务器说明逐字一致;只读查询、登记开发需求元数据与回传炼境明确列为无需确认的例外,与服务器说明的「其他写操作」及 skill「回传不必逐条征得同意」相容。服务器说明的例外是泛称「不含秘密的开发需求元数据」,skill 例外括注同时列出两个登记工具 register_project_test_account 与 register_project_dev_variable(审查修复:初版只列前者,会把开发变量登记误归入须确认的写操作);同批修正 skill 第 8 条——开发变量改用 register_project_dev_variable 登记名称与用途,测试账号仍用 register_project_test_account(初版两者都指向后者)。接入包 base-onboarding 1.7.0→1.8.0(修复在 1.8.0 发布前,未再升版本,只更新指纹);mcp_server 新增 server_instruction_universal_rules_are_in_skill,服务器说明与 skill 任一侧缺这两条即失败,skill 例外行缺任一登记工具也失败。AGENTS.md 托管块未改,仍只有分场景表述;存量项目需重建安装炼境后重跑 apply_onboarding_pack 才拿到新 skill。" 已补齐(2026-10-03,分支 feat/agent-client-parity-p7-skill-rules):两条已作为通用边界写进 lian-jing skill 模板开头(双投影到 .agents 与 .claude),两条规则的核心句与服务器说明逐字一致;只读查询、登记开发需求元数据与回传炼境明确列为无需确认的例外,与服务器说明的「其他写操作」及 skill「回传不必逐条征得同意」相容。服务器说明的例外是泛称「不含秘密的开发需求元数据」,skill 例外括注同时列出两个登记工具 register_project_test_account 与 register_project_dev_variable(审查修复:初版只列前者,会把开发变量登记误归入须确认的写操作);同批修正 skill 第 8 条——开发变量改用 register_project_dev_variable 登记名称与用途,测试账号仍用 register_project_test_account(初版两者都指向后者)。接入包 base-onboarding 1.7.0→1.8.0(修复在 1.8.0 发布前,未再升版本,只更新指纹);mcp_server 新增 server_instruction_universal_rules_are_in_skill,服务器说明与 skill 任一侧缺这两条即失败,skill 例外行缺任一登记工具也失败。AGENTS.md 托管块未改,仍只有分场景表述;存量项目需重建安装炼境后重跑 apply_onboarding_pack 才拿到新 skill。"
### 🔵 P8 — 一键接入:创建/添加子项目即完成三端可用 ### ✅ P8 — 一键接入:创建/添加子项目即完成三端可用
- status: in_progress - status: done
- done_verify: "2026-10-04:子卡 P8-0、P8a–P8g 全部 ✅;agent_verify 见 e2e_verify 与各子卡 merge_verify(master 3228b49 全量 cargo test 414 passed、vitest 29 passed);human_verify 由用户在 P8g 终验中完成(UI 新建→预览→确认 7.7 秒 done,Codex 信任后三端 L1 18 格 ready,Claude Code / Codex / DSH 桌面 GUI 新会话调 LJ_PROBE_NONEXISTENT 均得「开发需求未登记」),证据见 P8g human_verify。"
- complexity: L(2026-10-03 设计评审后拆为 P8-0、P8a–P8g,均为 S/M) - complexity: L(2026-10-03 设计评审后拆为 P8-0、P8a–P8g,均为 S/M)
- depends: P4a(原为 P4;P8 只依赖 L1 零模型检查,不等 L3) - depends: P4a(原为 P4;P8 只依赖 L1 零模型检查,不等 L3)
- acceptance: "agent_verify: [Tauri command / MCP] 对新登记项目 plan_onboarding → 用户确认 → onboard_project(expected_digest, confirmed=true),依次完成 canonical context、接入包分发(规则、skill 双投影、Codex 托管块)、本机三端注册(Claude local、DSH 白名单与会话插件、shim、token),并以 L1 零模型三端矩阵(每格带证据等级)验收,附最近一次 L3 结果及是否过期;重复执行收敛(全部 converged、文件 mtime 不变);接入包对项目文件的改动只报告 diff、不自动提交。human_verify: 在 Claude Code、Codex、DSH 桌面 GUI 各新开会话调 read_project_test_account(name=LJ_PROBE_NONEXISTENT),得「开发需求未登记」。" - acceptance: "agent_verify: [Tauri command / MCP] 对新登记项目 plan_onboarding → 用户确认 → onboard_project(expected_digest, confirmed=true),依次完成 canonical context、接入包分发(规则、skill 双投影、Codex 托管块)、本机三端注册(Claude local、DSH 白名单与会话插件、shim、token),并以 L1 零模型三端矩阵(每格带证据等级)验收,附最近一次 L3 结果及是否过期;重复执行收敛(全部 converged、文件 mtime 不变);接入包对项目文件的改动只报告 diff、不自动提交。human_verify: 在 Claude Code、Codex、DSH 桌面 GUI 各新开会话调 read_project_test_account(name=LJ_PROBE_NONEXISTENT),得「开发需求未登记」。"
@ -333,7 +334,8 @@ skill 只是五个接入面之一,兼容层覆盖全部五面。
### ✅ P8g — UI 一键接入 ### ✅ P8g — UI 一键接入
- status: done - status: done
- merge_verify: "PR #41 CI passed(head c28caf72ee94a2ce9c749de941d9c43ffafc33ee,核对完整 SHA 后合并)→ master 3228b49:pnpm typecheck 通过;pnpm test 5 文件 29 passed(含 onboardView 13 条);全量 cargo test 414 passed / 0 failed / 6 ignored(另一测试二进制 1 passed)。agent_verify 全部达成;human_verify ①–④ 待用户终验。" - merge_verify: "PR #41 CI passed(head c28caf72ee94a2ce9c749de941d9c43ffafc33ee,核对完整 SHA 后合并)→ master 3228b49:pnpm typecheck 通过;pnpm test 5 文件 29 passed(含 onboardView 13 条);全量 cargo test 414 passed / 0 failed / 6 ignored(另一测试二进制 1 passed)。agent_verify 全部达成。"
- human_verify: "2026-10-04 用户终验通过(临时 git 仓库 E:\\code-project\\lj-p8g-ui-test,project_id 5818aa5a-7789-4f4d-a0b3-3b2d433d0a8c):① 「+ 添加项目」选目录保存后弹出接入预览(14 个新建文件、bypassPermissions 与 Codex 信任单列、本机七步、无阻断);③ 在预览里取消,目录 git status 为空、零改动;② 经蓝图治理「一键接入」确认后 7.7 秒得 done(9 步收敛),分步结果、L1 矩阵(Claude/DSH 各 6 格就绪,Codex C–F 待你信任)、「待你提交的 14 个文件」与磁盘一致、HEAD 未变、lefthook 三个钩子已挂;用户在 Codex 桌面版该目录发起对话后信任表写入,重跑 probe_client_parity 三端 18 格 ready、all_applicable_ready=true(Codex 桌面版只「添加项目」不写信任);④ Claude Code、Codex、DSH 桌面 GUI 新会话调 read_project_test_account(LJ_PROBE_NONEXISTENT) 均得「开发需求未登记」(DSH 未传 project_id,会话按工作区绑定本项目)。终验中记下的 UI 文案小问题转后续小修:新建文件的「查看差异」只有一行概要应改行内显示;git_hooks 与 Claude/DSH 行的「已写入」标签重复或不准。"
- complexity: M - complexity: M
- files: src/components/dashboard/OnboardPanel.tsx, src/components/dashboard/onboardView.ts, src/components/dashboard/onboardView.test.ts, src/components/dashboard/ProjectModal.tsx, src/components/dashboard/BatchAddModal.tsx, src/components/manage/NewProjectModal.tsx, src/components/dashboard/BlueprintModal.tsx, src/lib/commands.ts - files: src/components/dashboard/OnboardPanel.tsx, src/components/dashboard/onboardView.ts, src/components/dashboard/onboardView.test.ts, src/components/dashboard/ProjectModal.tsx, src/components/dashboard/BatchAddModal.tsx, src/components/manage/NewProjectModal.tsx, src/components/dashboard/BlueprintModal.tsx, src/lib/commands.ts
- depends: P8e - depends: P8e

View File

@ -66,7 +66,7 @@
| 后续 | P6(依赖 P8c)、P4c / P4d / P4e、A4→P4b、P5 | | | P8 完成后再排 | | 后续 | P6(依赖 P8c)、P4c / P4d / P4e、A4→P4b、P5 | | | P8 完成后再排 |
| 后续小修 | P8f 审查转入:L4 路径归一函数统一到 crate::path_key(含 Codex 信任路径、WSL 发行版与 UNC 换算)、I1 update_project 有效根变化才查重并排除自身、I2 project_root_with_conn 拼接 UNC 形式 wsl_path 的已有缺陷 | S | master | 碰 mcp_inject.rs,P8 主线后再做 | | 后续小修 | P8f 审查转入:L4 路径归一函数统一到 crate::path_key(含 Codex 信任路径、WSL 发行版与 UNC 换算)、I1 update_project 有效根变化才查重并排除自身、I2 project_root_with_conn 拼接 UNC 形式 wsl_path 的已有缺陷 | S | master | 碰 mcp_inject.rs,P8 主线后再做 |
| 后续小修 | backfill_notes_archive 静默跳过非 UTF-8 旧笔记(dev-manager-tauri 有 4 条);PR #34 审查遗留 L3(保留他项目 Codex 块不留痕)、L4(沉默统计并列偏向非规范 ID,补测试)、I1(注释说明两处语义差异)、I2(沉默列表带 id) | S | master | 不碰 P8 热点文件的可并行 | | 后续小修 | backfill_notes_archive 静默跳过非 UTF-8 旧笔记(dev-manager-tauri 有 4 条);PR #34 审查遗留 L3(保留他项目 Codex 块不留痕)、L4(沉默统计并列偏向非规范 ID,补测试)、I1(注释说明两处语义差异)、I2(沉默列表带 id) | S | master | 不碰 P8 热点文件的可并行 |
| 后续小修 | P8g 审查 ④:L1 格子由本体带 pending_user(目前 onboardView.ts 写死 codex_project_untrusted 着色);面板状态机(过期响应、refused 回预览)补组件测试 | S | master | 碰 probe_l1.rs / onboardView.ts | | 后续小修 | P8g 审查 ④:L1 格子由本体带 pending_user(目前 onboardView.ts 写死 codex_project_untrusted 着色);面板状态机(过期响应、refused 回预览)补组件测试;终验记下的文案:新建文件「查看差异」只有一行概要改行内显示,git_hooks 与 Claude/DSH 行「已写入」标签重复或不准 | S | master | 碰 probe_l1.rs / onboardView.ts |
| 待用户 | beast-mode 同路径重复登记(beast-mode / 940dfbb4,无 Gitea 绑定) | — | — | 需写运行中 DB 与删除登记,按 U3 同法准备脚本后交用户执行 | | 待用户 | beast-mode 同路径重复登记(beast-mode / 940dfbb4,无 Gitea 绑定) | — | — | 需写运行中 DB 与删除登记,按 U3 同法准备脚本后交用户执行 |
## 4. 派单与 PR 流水(统筹维护) ## 4. 派单与 PR 流水(统筹维护)
@ -89,6 +89,8 @@
## 5. 待用户处理(统筹会话汇总,按时机) ## 5. 待用户处理(统筹会话汇总,按时机)
- ~~重复登记数据合并~~:已由用户执行完毕并验收(见 §4)。 - ~~重复登记数据合并~~:已由用户执行完毕并验收(见 §4)。
- ~~P8 human_verify~~:2026-10-04 用户终验通过(证据见 P8g 卡 human_verify),**本阶段终点 P8 达成**。
- **P8g 终验临时项目(删除需你确认)**:E:\code-project\lj-p8g-ui-test(project_id=5818aa5a-7789-4f4d-a0b3-3b2d433d0a8c),清理方式同下条;Codex 信任表里另有它的一条信任条目,可在删除后由你清掉或留着。
- **临时文件待用户清理**(deny 规则禁止 agent 删除):E: mp erify_before.json;重复登记会话 %TEMP% 下的 merge_dup.py 等;统筹会话 %TEMP% 下的 lj-p4-0、lj-p7-probe、lj-p9-spike 等探针目录;已合并分支的 worktree(tmp-p7skill-review、tmp-delivery-status-review、tmp-p10-verify-mut、dev-manager-tauri-wt-p8)可用 git worktree remove 清理。 - **临时文件待用户清理**(deny 规则禁止 agent 删除):E: mp erify_before.json;重复登记会话 %TEMP% 下的 merge_dup.py 等;统筹会话 %TEMP% 下的 lj-p4-0、lj-p7-probe、lj-p9-spike 等探针目录;已合并分支的 worktree(tmp-p7skill-review、tmp-delivery-status-review、tmp-p10-verify-mut、dev-manager-tauri-wt-p8)可用 git worktree remove 清理。
- **端到端临时项目(删除需你确认)**:E:code-projectlj-p8-e2e-20261003(project_id=ac73a4bb-a601-4e21-bc0f-7eda71fae4aa)。验收后如需清理:先 unregister_project(删除登记,会同时清 token、Claude local 条目、DSH 白名单与 Gitea 绑定),再手动删除目录。 - **端到端临时项目(删除需你确认)**:E:code-projectlj-p8-e2e-20261003(project_id=ac73a4bb-a601-4e21-bc0f-7eda71fae4aa)。验收后如需清理:先 unregister_project(删除登记,会同时清 token、Claude local 条目、DSH 白名单与 Gitea 绑定),再手动删除目录。
- **需求澄清(不阻塞主线)**:UI「添加项目」不选目录时可建「概念占位」登记(P8f 已保留原行为)。是否要把占位做成显式概念(单独入口、标记为占位、不参与接入),等你决定。 - **需求澄清(不阻塞主线)**:UI「添加项目」不选目录时可建「概念占位」登记(P8f 已保留原行为)。是否要把占位做成显式概念(单独入口、标记为占位、不参与接入),等你决定。