feat(dev-variables): 项目开发变量与测试账户补给(V1–V11) #23

Merged
lanrtop merged 15 commits from feat/project-dev-variables into master 2026-09-30 13:35:23 +08:00
Owner

概要

炼境按项目托管非生产测试账户/开发变量:agent 通过 scoped MCP 登记需求 → 人在项目 UI 一次填写 → 值存 Windows Credential Manager(SQLite 仅元数据与引用)→ agent 经项目级 bearer 认证单项读取。明文出口仅限非生产、低权限、可重置数据(有界例外,见 AGENTS.md「管家准入与退出」)。

设计与逐卡证据:.blueprint/modules/project-dev-variables.md。

本 PR 新增(相对 master)

  • V1–V6:helper 认证头、敏感读取项目绑定、元数据 + 受保护存储、Tauri 命令、项目 UI、agent 登记/状态/读取工具
  • V8–V11:测试账户类型(账号+密码原子存储)、一张卡填写、合成复用验收与契约同步
  • V7(本次补完):ignored 隔离宿主 mcp_server::tests::isolated_dev_variables_client_pilot + 真实 Codex CLI 跨会话试点

自验(agent_verify)

  • 真实 Codex CLI 0.155.0-alpha.9.2 三个独立会话:A 登记 PILOT_LOGIN(local)→ 宿主代人填写合成账户;B 新会话 list → configured=true、read_project_test_account → username 与宿主生成值一致;宿主代人撤销后 C 新会话读取失败。
  • 宿主断言:撤销后全部未配置;临时项目目录无 .env*,任何文件不含 MCP token 或测试密码;MCP 认证材料已删除、临时目录已清理。
  • 无认证 read_project_test_account → HTTP 403;helper exit 0。
  • cargo test --locked 227 passed / 5 ignored;pnpm typecheck exit 0;git diff --check 通过。
  • 审批:仅会话 A 的登记写调用使用单次 --approve-for-me(用户 2026-09-30 授权,沿用 R11 先例);未放宽全局审批策略,读工具无需审批。

没验什么

  • 真实桌面 UI 填写/撤销与日常开发摩擦是否下降:human_verify 待人终验(合并前建议完成)。
  • 正式打包安装版的 helper 路径(本次用 target/debug 构建)。
  • Claude / DeepSeek 等非 Codex 客户端的 bearer helper 取值路径。
  • 真实用户数据库上的 migration(本次全程内存 DB)。
  • 宿主被强制终止时 Drop 不保证执行,可能残留合成 Windows 凭据(无生产权限)。
  • 会话 B 中模型把 list/read 各重复调用 3 次,结果一致,属模型行为。

后续

运行时落地增量(写入被 Git 忽略文件,供项目脚本消费、补齐 worktree)见 docs/tasks/2026-09-30-dev-variables-materialize.md,待本 PR 合并后在模块内立卡 V12–V14。

🤖 Generated with Claude Code

## 概要 炼境按项目托管非生产测试账户/开发变量:agent 通过 scoped MCP 登记需求 → 人在项目 UI 一次填写 → 值存 Windows Credential Manager(SQLite 仅元数据与引用)→ agent 经项目级 bearer 认证单项读取。明文出口仅限非生产、低权限、可重置数据(有界例外,见 AGENTS.md「管家准入与退出」)。 设计与逐卡证据:`.blueprint/modules/project-dev-variables.md`。 ## 本 PR 新增(相对 master) - V1–V6:helper 认证头、敏感读取项目绑定、元数据 + 受保护存储、Tauri 命令、项目 UI、agent 登记/状态/读取工具 - V8–V11:测试账户类型(账号+密码原子存储)、一张卡填写、合成复用验收与契约同步 - V7(本次补完):ignored 隔离宿主 `mcp_server::tests::isolated_dev_variables_client_pilot` + 真实 Codex CLI 跨会话试点 ## 自验(agent_verify) - 真实 Codex CLI 0.155.0-alpha.9.2 三个独立会话:A 登记 `PILOT_LOGIN`(local)→ 宿主代人填写合成账户;B 新会话 `list` → configured=true、`read_project_test_account` → username 与宿主生成值一致;宿主代人撤销后 C 新会话读取失败。 - 宿主断言:撤销后全部未配置;临时项目目录无 `.env*`,任何文件不含 MCP token 或测试密码;MCP 认证材料已删除、临时目录已清理。 - 无认证 `read_project_test_account` → HTTP 403;helper exit 0。 - `cargo test --locked` 227 passed / 5 ignored;`pnpm typecheck` exit 0;`git diff --check` 通过。 - 审批:仅会话 A 的登记写调用使用单次 `--approve-for-me`(用户 2026-09-30 授权,沿用 R11 先例);未放宽全局审批策略,读工具无需审批。 ## 没验什么 - **真实桌面 UI 填写/撤销与日常开发摩擦是否下降**:human_verify 待人终验(合并前建议完成)。 - 正式打包安装版的 helper 路径(本次用 `target/debug` 构建)。 - Claude / DeepSeek 等非 Codex 客户端的 bearer helper 取值路径。 - 真实用户数据库上的 migration(本次全程内存 DB)。 - 宿主被强制终止时 Drop 不保证执行,可能残留合成 Windows 凭据(无生产权限)。 - 会话 B 中模型把 list/read 各重复调用 3 次,结果一致,属模型行为。 ## 后续 运行时落地增量(写入被 Git 忽略文件,供项目脚本消费、补齐 worktree)见 `docs/tasks/2026-09-30-dev-variables-materialize.md`,待本 PR 合并后在模块内立卡 V12–V14。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
lanrtop added 12 commits 2026-09-30 11:48:27 +08:00
test(resource/broker): 添加隔离客户端试点宿主
All checks were successful
Push & PR Check / check (push) Successful in 4m12s
7ae547e1f6
提供仅测试可用的 scoped MCP 临时宿主和合成凭证/Gitea fixture;保留 R11 进行中状态,等待真实客户端会话终验。

Rules-Applied: R02
docs(resource/broker): 记录 R11 客户端试点验收
All checks were successful
Push & PR Check / check (push) Successful in 3m13s
Push & PR Check / check (pull_request) Successful in 3m4s
c2b4c30f50
真实 Codex CLI 经临时 scoped MCP 完成非秘密 readiness、跨项目拒绝与模拟 PR;明确审批门槛及未验证边界。

Rules-Applied: R02,R03
Keep values in Windows Credential Manager, require a project bearer for single-value reads, and preserve existing non-secret MCP behavior.

Feature-Confirmed: true

Rules-Applied: R01,R03,R05,R06,R07,R10,R12,R13
Expose status-only Tauri types and explicit save/revoke actions without caching entered values in React Query.

Feature-Confirmed: true

Rules-Applied: R01,R12,R13
Document V1-V6 evidence and keep V7 in progress until a real Codex tool-call and human UI pilot complete.

Rules-Applied: R03,R05,R10,R13
Three isolated real-client attempts were denied before dispatch by approval policy=never. Keep V7 blocked pending an explicitly approved pilot.

Rules-Applied: R03,R10,R13
新增兼容旧表的账户类型与语义登记,账号密码共用受保护引用;覆盖迁移、失败恢复和重开复用。

Rules-Applied: R05,R06,R07

Feature-Confirmed: true
scoped MCP 只登记非秘密元数据;读取共用 bearer 门槛,并以真实本机 HTTP 合成链路覆盖授权、复用和撤销。

Rules-Applied: R07,R10

Feature-Confirmed: true
项目面板一次提交两个字段到同一 Tauri 本体,列表与 React Query 仅保留非秘密状态。

Rules-Applied: R01,R08

Feature-Confirmed: true
同步 scoped MCP、Tauri DTO 契约及 V8–V11 验收状态;V7 客户端限制与人工终验继续保留。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test(dev-variables/mcp): 以隔离宿主完成 V7 真实 Codex 跨会话试点
All checks were successful
Push & PR Check / check (push) Successful in 1m7s
Push & PR Check / check (pull_request) Successful in 1m5s
9211883a9b
新增 ignored 宿主 isolated_dev_variables_client_pilot:内存 DB + 随机合成账户 +
临时 scoped MCP,认证走真实 helper。真实 Codex CLI 三会话完成登记→代填→跨会话
读取→撤销后读取失败,宿主断言目录无 .env/token/密码且凭据清理。

Rules-Applied: R03,R05,R10,R13
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lanrtop added 2 commits 2026-09-30 13:23:05 +08:00
tauri-plugin-dialog 把 window.confirm 替换为 async 函数,同步判断拿到恒为真的
Promise,撤销测试账户、删除 Gitea 实例/解绑仓库、删除仓库、准备工具链 5 处
破坏性或改机器状态的操作均未弹框即执行(UI 终验发现)。统一 await
@tauri-apps/plugin-dialog 的 confirm,并加源码扫描回归测试防复发。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(dev-variables): 修改时显式查看原值,并提示 agent 先查炼境测试账户
All checks were successful
Push & PR Check / check (push) Successful in 1m5s
Push & PR Check / check (pull_request) Successful in 1m9s
663a723b3b
- V12:新增人用 Tauri command reveal_project_dev_variable(不进 MCP),
  点「修改」预填原账号与密码,密码默认遮罩可切换显示
- V13:lian-jing skill 新增第 8 步——需要测试账号先 list/read,
  没有则登记并请用户在 UI 填写;禁止对话索要明文;base-onboarding 升至 1.5.0
- 契约同步 project-context.yaml;materialize 提案顺延为 V14–V16

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lanrtop added 1 commit 2026-09-30 13:31:49 +08:00
docs(blueprint/dev-variables): 记录两轮 UI 终验结论
All checks were successful
Push & PR Check / check (push) Successful in 1m28s
Push & PR Check / check (pull_request) Successful in 1m4s
57062d6053
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lanrtop merged commit 6105c3d4a3 into master 2026-09-30 13:35:23 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: lanrtop/dev-manager-tauri#23
No description provided.