Commit Graph

417 Commits

Author SHA1 Message Date
lanrtop
cce7d92ee0 docs(blueprint/agent-client-parity): P7 实测服务器说明仅 Claude/DSH 带入模型上下文,保留 skill 引导
All checks were successful
Push & PR Check / check (push) Successful in 1m1s
Push & PR Check / check (pull_request) Successful in 1m3s
三端无头探针(node 桩 MCP 服务,实验组 initialize 带含唯一标记的 instructions,
对照组不带)结论为部分支持:Claude Code 2.1.173 与 DSH headless 答出标记、
对照组答 NONE;Codex 0.155.0-alpha.9.2 两组都答 NONE、输入 token 完全相同,
桩服务日志证明 initialize 与 tools/list 均成功、模型能调用桩工具,说明已送达
客户端却没进入模型。

按 acceptance 不迁移:引导提示仍以 lian-jing skill 与 AGENTS.md 托管块为三端
单一来源,mcp_server.rs 与 skill 均不改。

- 蓝图 P7 标 ✅,记录结论、三端证据与 known_limits(Codex TUI/桌面版与 SSE
  未验、真实说明未实测、服务器说明中两条通用规则在 skill 只有分场景表述)
- agent-button-system.md「本地 Agent 控制面的稳定边界」增一条:服务器说明只是
  增强层,三端都须遵守的引导不得只写在服务器说明里
- manifest 中 agent-client-parity 进度 55 → 64,note 补 P7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 05:02:12 +09:00
13dc75203b Merge pull request 'feat(onboarding/parity): 接入包改写托管块前检测块外未提交改动,给出混合文件预警(P10)' (#29) from feat/agent-client-parity-p10 into master
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
2026-10-03 03:36:32 +08:00
lanrtop
c9b951dd30 fix(onboarding/parity): 混合文件预警收窄空白归一、失败时不丢预警、测住改写判断(P10 审查修复)
All checks were successful
Push & PR Check / check (push) Successful in 1m2s
Push & PR Check / check (pull_request) Successful in 1m5s
P10 审查核实的三处缺陷:

- 块外比较原先逐行 trim_end 并丢弃全部空行,项目在块外删空行(Markdown 两段
  并成一段)或加行尾空格(硬换行)时判为无改动,升级后不预警却产生混合文件。
  改为 CRLF 统一为 LF、托管块原位换成占位符,只把文末占位符连同其前空白按
  trim_end 归一(正好抵消炼境追加托管块时的 trim_end + 空行);文中托管块两侧
  的空行与行尾空格照常比较——炼境只原位替换文中的块,不碰两侧。
- dispatch_templates_with_mixed_file_check 先 `then()?` 后标注:buff 先同步蓝图
  规则改写了 AGENTS.md/CLAUDE.md、再写 DB 失败时,预警随 Err 一起丢失。改为
  无论成败先标注,失败时把混合文件名并入错误信息;无混合文件则原样返回错误。
- 「块外有未提交改动但托管块已是最新、本次不改写」组合没有测试,删掉 annotate
  的改写判断测试照样全绿。主场景测试补情形三。

测试:新增 outside_managed_whitespace_edits_count_as_changes、
mixed_file_warning_survives_failure_after_write,主场景补情形三;纯函数测试的
期望值随归一化收窄更新("# 标题\n项目内容" → "# 标题\n\n项目内容",保留「之前
追加的块尚未提交、只多出块前空行」不算改动的断言)。变异自检:三处修复逐一回退,
对应测试各自失败,已还原。cargo test --locked:lib 272 passed / 5 ignored,0 failed;
pnpm typecheck 通过。契约文档 project-context.yaml 与蓝图 P10 卡同步。

Rules-Applied: R07,R12
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 04:32:39 +09:00
lanrtop
13aa3a1a8c feat(onboarding/parity): 接入包改写托管块前检测块外未提交改动,给出混合文件预警(P10)
All checks were successful
Push & PR Check / check (push) Successful in 1m2s
Push & PR Check / check (pull_request) Successful in 59s
2026-10-01 enterprise 的 git-workflow.md 在有项目未提交改写时被升级了托管块,
同一文件混有炼境与项目两种来源的改动,按「禁止字符串手术」无法拆分提交,只能交人定案。
管家应在制造混合文件时明确告知,而不是事后由人发现。

- TemplateResult 新增可选 warning(序列化时缺省省略,前端类型同步)
- apply_onboarding_pack 在模板分发与 buff 蓝图规则同步前后夹一层检测:写入前对
  AGENTS.md、docs/ai-context/git-workflow.md、CLAUDE.md 跑 git status,有改动再取
  HEAD:./<文件>(不在 HEAD 中按空内容算),两边去掉 ONBOARDING_MANAGED 与
  BLUEPRINT_MANAGED 块后比较(忽略行尾与空行);写入后只对本次确被改写的文件预警,
  文案含文件名与「块外有未提交改动,升级后将成为混合文件」
- 只提示不阻断,块外内容照旧不动;git 不可用、非仓库或命令失败一律静默;
  git status 带 --no-optional-locks,不抢 index.lock
- CLAUDE.md 只由蓝图规则同步改写,不在模板结果里,预警时补一条结果
- BLUEPRINT_MANAGED 标记提为 blueprint.rs 的 pub(crate) 常量,检测与 upsert 共用
- MCP 单项目输出在该文件行下加预警行,批量输出追加混合文件清单;工具描述同步;
  炼境 UI 接入包结果行下显示预警
- 契约文档 project-context.yaml 同步;蓝图 P10 标 ✅ 并记录验证与已知限制

验证:cargo test --locked lib 270 passed / 5 ignored;新增 3 个测试(纯函数、临时 git
仓库三种情形、非 git 目录),变异自检(探测强制返回 true 时两个场景测试均失败);
pnpm typecheck 与 pnpm test 通过。

Rules-Applied: R01,R06,R12
Feature-Confirmed: true

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:58:28 +09:00
lanrtop
dd2d7ca369 docs(blueprint/governance-feedback-loop): 缺口①按代理终验收口标 ✅,记录 enterprise #181 合并
All checks were successful
Push & PR Check / check (push) Successful in 1m1s
用户委托检查会话代为终验:无摩擦不误报、DSH 0.2 可加载 skill 已实测;主动回传转运行期观察,由 B4 沉默项目信号兜底。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 03:32:06 +09:00
lanrtop
82a8530ad7 docs(blueprint/governance-feedback-loop): 缺口①更正 DSH 技能加载结论,记录代理终验与 enterprise 入库 PR
All checks were successful
Push & PR Check / check (push) Successful in 1m2s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:51:37 +09:00
lanrtop
b5671eed28 docs(blueprint/governance-feedback-loop): 缺口①记录 enterprise 接入包分发与 DSH 技能路径发现,待人终验
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:16:08 +09:00
lanrtop
b73d361413 docs(blueprint/governance-feedback-loop): 记录 59 条回传补录的独立复核与用户裁决——carded/watching 接受现状
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 02:05:50 +09:00
lanrtop
151d7adb20 docs(blueprint/governance-feedback-loop): 缺口①上线实证——三端探针通过、59 条历史回传补录清零,待人终验
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:55:11 +09:00
lanrtop
7595c37d22 test(onboarding): 托管模板指纹测试,改内容未升版本即失败
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
全托管文件(envoy.md / SKILL.md)按内容覆盖,但 verify_onboarding 只凭
capability-packs.json 版本判落后——只改内容忘升 BASE_ONBOARDING_PACK_VERSION
时 verify 永远 ready,子项目收不到更新。升版规则此前只有文档约束。

- 新增 managed_template_fingerprints_track_versions:「版本号 → 摘要」登记表
  TEMPLATE_FINGERPRINTS 钉住 resources/onboarding/**(↔ BASE 版本)与
  AGENTS / git-workflow 管理块(↔ 块首 version);摘要前 CRLF→LF 归一化
- capability-packs.json 与 BASE 相等复用既有断言,补可读报错
- onboarding-sync.md 说明该测试

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:49:36 +09:00
f948c4c802 Merge pull request 'feat(mcp/envoy): 使者回传闭环——回执 + 三端回传入口' (#28) from feat/governance-feedback-loop into master
All checks were successful
Push & PR Check / check (push) Successful in 1m6s
2026-10-03 00:44:03 +08:00
lanrtop
c6ebc2d775 docs(blueprint/governance-feedback-loop): 缺口① 立卡使者回传闭环,记录实现、审查与自验,进行中
All checks were successful
Push & PR Check / check (push) Successful in 1m30s
Push & PR Check / check (pull_request) Successful in 1m2s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:16:12 +09:00
lanrtop
3095df3d2a feat(mcp/envoy): 使者回传闭环——回执 + 三端回传入口
回传只进不出:list_envoy_returns 无处置状态、LIMIT 50 把更早的回传静默挤掉;
入口只有 Claude /envoy,08-23 后 enterprise 主力转 DSH/Codex 即零回传。

- envoy.rs 业务本体(连接注入)+ envoy_dispositions 回执表(migrate 补表)
- report_envoy_return(项目级,Claude/Codex/DSH 在项目地址均可用):字段枚举校验、
  内容压单行限长、兜底拒绝明显凭据;同项目 1 天内同内容未处置幂等返回原编号
  (IMMEDIATE 事务防并发重复);复用 append_project_note 的档案双写
- resolve_envoy_return(控制面):landed/carded 必填落点、reason 必填、允许更正
- list_envoy_returns 默认只列未处置(带编号),附已处置计数,超出展示上限明说;
  LEFT JOIN 不再丢掉登记已删项目的回传;include_resolved 可审计回执
- lian-jing skill 新增「遇到摩擦时回传炼境」;/envoy 改为指向该入口的薄指引
  (保留扫描与分类硬门槛,炼境分发物出错免门槛,身份改读 .lian-jing/context.json);
  AGENTS 托管块加一行指路(1.9.0→1.10.0),能力包 base-onboarding 1.6.0→1.7.0
- 删除炼境仓库内 Codex 迁移遗留的 source-command-envoy 技能(读旧身份文件、走旧写入路径)
- 契约与架构文档同步:project-context.yaml、project-brief.md、AGENTS.md、agents-meta-rules.md

Rules-Applied: R05,R06,R12
Feature-Confirmed: true

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:15:40 +09:00
lanrtop
b537847db7 docs(blueprint/blueprint-buff): B1 终验通过,标记完成
All checks were successful
Push & PR Check / check (push) Successful in 1m0s
PR #27 合并后主仓库拉取,buff 处理含共享文件改动的提交批次,无任何卡片被误标 🔵。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 20:03:55 +09:00
9da19cecaa Merge pull request 'feat(blueprint/buff): files 重叠推断降为兜底,同批已有显式推进则不推断' (#27) from feat/blueprint-buff into master
All checks were successful
Push & PR Check / check (push) Successful in 1m2s
2026-10-02 18:40:52 +08:00
lanrtop
1778ca21d9 docs(blueprint/blueprint-buff): B1 记录实现与自验证据,挂触发条目结案,待人终验
All checks were successful
Push & PR Check / check (push) Successful in 1m2s
Push & PR Check / check (pull_request) Successful in 1m3s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:52:24 +09:00
lanrtop
4a37438a58 fix(credential): 修复并行测试偶发失败——Credential Manager 调用串行化,模拟 Gitea 改阻塞读
All checks were successful
Push & PR Check / check (push) Successful in 1m29s
全量并行 cargo test 10 次失败 3 次(单跑稳定通过),两个独立根因:

- 同进程并发 CredWriteW/CredDeleteW 会丢更新:写入并校验成功的凭据随后读回 NOT_FOUND,
  删除成功的条目又被并发写回。R10 readiness 报 needs_repair、开发变量试点报「凭证引用缺失」
  均源于此(诊断日志证实无跨测试删除;8 线程压力实验直接复现)。windows_store 的
  put/get/delete 经进程级锁串行,生产中 MCP 与 UI 并发写凭据同样受益;跨进程不在保护范围
- Windows 上从 nonblocking listener accept 的 socket 继承 nonblocking,set_read_timeout
  不生效,请求晚到即 WouldBlock。mcp_server 两处模拟 Gitea 补 set_nonblocking(false),
  与 commands/gitea.rs 既有写法一致

验证:修复后全量并行 cargo test 连续 30 次 0 失败(247 passed、5 ignored)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:52:05 +09:00
lanrtop
b7987e160f feat(blueprint/buff): files 重叠推断降为兜底,同批已有显式推进则不推断
两阶段锁下真正在做的卡提交落地时已是 🔵/✅,files 重叠只能碰到仍为 📋 的卡,
命中共享热点文件(mcp_tools.rs / onboarding.rs 等)的多是未开工卡。
回放 master 240 个 first-parent 提交:旧算法命中 50 次,明确正确仅 3 次;
新规则 50 → 5,PR #24/#25/#26 对 P6/P7/P8/A4 的误标全部消除。

- 本批蓝图 diff 新增 🔵/✅/🔴 标题行(非原样搬移)→ 归属已显式,不做 files 推断
- last_commit 非 HEAD 祖先(checkout/reset/rebase)→ 跳过;git 出错记日志
- 同一批次全程使用轮询读到的 HEAD sha,判定口径一致
- 匹配修正:去掉反向后缀、后缀须落在 / 边界、尾逗号空项丢弃、「、」「,」作分隔
- 蓝图同步提示词:核实仅共用文件的 🔵 可降回 📋 并写明原因
- 补 buff.rs 首批测试(纯函数 + 临时 git 仓库端到端)

Rules-Applied: R09
Feature-Confirmed: true

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:49:56 +09:00
lanrtop
ae6de1d324 docs(blueprint/blueprint-buff): 立卡 B1 files 重叠推断降为兜底,进行中
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:32:02 +09:00
79853b71f2 Merge pull request 'feat(mcp/parity): DSH 桌面 GUI 按工作区连项目地址(会话级插件,P9)' (#26) from feat/agent-client-parity-p9 into master
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
2026-10-02 15:37:48 +08:00
lanrtop
f8d658b790 docs(blueprint/agent-client-parity): P9 人终验通过,标记完成
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
Push & PR Check / check (pull_request) Successful in 1m6s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 16:32:21 +09:00
lanrtop
fe0458fe97 fix(mcp/parity): P9 审查修复——受限子代理不挂载、条目 id 带版本、插件缺失守卫、规范路径键
All checks were successful
Push & PR Check / check (push) Successful in 1m6s
Push & PR Check / check (pull_request) Successful in 1m4s
对抗审查(11 个 agent,6 条成立,均 low):
- 受限子代理(toolFilter)会绕过限制:挂在子代理自己作用域的工具不受过滤。改为经 tools.view 判断,
  受限或无法判断即不挂;根会话与未受限子代理照常挂载
- 版本号只编进文件名时,运行中的 DSH 不会重载新插件(同 id 只改 name 不重载):条目 id 改为
  lianjing-session-mcp-v1,与文件名同一版本;新增内容哈希测试,改插件漏升版本即失败;块外手写按前缀拒绝
- 插件文件缺失时 DSH 0.1.x 启动失败:条目加 `disabled: !!js` 文件存在性守卫
- GUI 会话工作目录是 realpath:白名单同时写入登记路径的规范形态(junction、8.3 短名)
- 补测试:分层停止哨兵、取认证失败与超时(.cmd 夹具)、受限/未受限/无法判断的子代理
- 蓝图如实更正首轮端到端只有插件一行;补测完整托管块

验证:cargo test 247 passed;vitest 16 passed(插件 8 条)、typecheck 通过;完整托管块端到端在
DSH 0.2.0-rc.2 与 0.1.5-rc.2 上项目会话带认证连上项目地址、其他会话无请求;插件文件缺失时两版都正常启动。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:04:54 +09:00
lanrtop
f21345bf1a feat(mcp/parity): DSH 桌面 GUI 按工作区连项目地址(会话级插件,P9)
DSH 桌面版只有一个 Host 进程、启动目录固定,托管块的 !!js 只在启动时求值,拿不到会话信息;
web/acp 同样一个进程服务多个工作区。改由炼境分发一个会话级插件:会话创建(agent/created)时
按会话工作目录匹配炼境登记的项目白名单,命中才在该会话作用域挂连项目专用地址的 mcp-client,
同名工具覆盖全局 lian-jing,其他会话不受影响。

- 插件随二进制打包(resources/dsh/lianjing-session-mcp.v1.mjs),刷新 DSH 托管块时写到
  %USERPROFILE%\.lian-jing\dsh\;文件名带版本号(Node 按 URL 缓存 ESM)
- 托管块在全局行之后追加插件条目(port、shim、roots 以 JSON 写入);插件文件写失败时只保留全局行
- 插件防御:headless 交给全局行;特性探测不符即降级为全局;取认证 ≤3 秒、整次挂载 ≤5 秒;
  所有回调吞掉异常(Host 对未处理异常会崩溃,agent/created 串行失败会让会话创建失败)
- 块外手写的 lianjing-session-mcp 条目同样拒绝覆盖

验证:cargo test 246 passed;vitest 插件用例 6 条通过、typecheck 通过;端到端在 DSH 0.2.0-rc.2
与 0.1.5-rc.2 上,项目会话经真实稳定入口带认证连上项目地址,其他会话无请求。

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 13:33:45 +09:00
239d9fdd83 Merge pull request 'fix(onboarding): 接入写入幂等——内容不变不重写,Codex 托管块不再累积空行' (#25) from fix/onboarding-idempotent-writes into master
All checks were successful
Push & PR Check / check (push) Successful in 59s
2026-10-02 12:06:28 +08:00
53af8c36d8 Merge pull request 'feat(mcp/parity): 三端经稳定 helper 入口连项目专用地址(P1 + P3)' (#24) from feat/agent-client-parity into master
All checks were successful
Push & PR Check / check (push) Successful in 1m5s
2026-10-02 12:05:16 +08:00
lanrtop
019d81c60e fix(onboarding): 审查修复——JSON 按语义比较,CI workflow 与生成文件同内容不重写
All checks were successful
Push & PR Check / check (pull_request) Successful in 1m3s
对抗审查(9 个 agent,2 条成立):
- settings.json / context.json 改为按 JSON 语义比较:Claude Code 改写后键序与末尾换行不同,
  按文本比较仍会让每次注入整文件重排
- plan_cicd_workflow 忽略行尾判 noop:原按字节比较,autocrlf 检出的同内容 workflow 会被判 update,
  并请用户确认一次无变化的写入;apply 与 generate_workflow 只在内容变化时落盘
- 同类遗漏统一改用 write_if_content_changed:agent_infra 生成文件(未变时报 skipped)、notes-archive 回填
- lib.rs 抽出 same_text_ignoring_eol,与 write_if_content_changed 共用同一比较规则

验证:cargo test 245 passed / 5 ignored(新增 JSON 语义与 CI CRLF 回归断言)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:51:33 +09:00
lanrtop
d098905f28 fix(onboarding): 接入写入幂等——内容不变不重写,Codex 托管块不再累积空行
enterprise 未提交改动归属梳理发现两处炼境侧缺陷:
- Codex 托管块自带结尾换行,又原样保留 END 之后的换行,每次注入多一个空行(enterprise 已累积 16 行)
- sync_blueprint_rules 与注入在内容不变时也用 LF 重写文件:子项目开 core.autocrlf,CRLF 检出的
  同内容文件被 git status 误报为改动,修改时间也被刷新,干扰改动归属判断

修复:
- lib.rs 新增 write_if_content_changed(忽略行尾比较,内容不变不写)
- sync_blueprint_rules 的 CONVENTIONS 与 AGENTS/CLAUDE 托管块、context.json、.claude/settings.json、
  Codex 托管块统一改用它;托管块未变时返回 unchanged
- Codex 托管块写入吸收 END 之后的空行,块外后续内容以一个空行分隔
- 蓝图记 P3b(本修复)、P10(接入包升级前检测块外未提交改动,待做),P9 补可行性实测记录

验证:cargo test 246 passed;实测 enterprise 注入后 .codex/config.toml 末尾空行 16→0,
再次注入四个托管文件修改时间均不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:35:18 +09:00
lanrtop
c4241f075d fix(mcp/parity): 更正 Codex Desktop 取认证失败的根因,撤销基于错误前提的 exe 副本逻辑
All checks were successful
Push & PR Check / check (push) Successful in 1m37s
Push & PR Check / check (pull_request) Successful in 1m2s
2b0a55a 判断「Codex Desktop(MSIX)看不见其安装后在 AppData 下新建的顶层目录」是错的:当时的对照
目录本身也是在 Claude 桌面版的包环境里建的。真正原因:worktree 版炼境由 Claude 桌面版(MSIX)里的
agent 启动,继承了其包环境,写到 %LOCALAPPDATA%\lian-jing 的入口被重定向进
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\,只有 Claude 的进程树看得到。
对照:经 WMI 启动的非包进程在 AppData 下新建的顶层目录,Codex 包内可见;%USERPROFILE% 根不做重定向。

- 入口迁至 %USERPROFILE%\.lian-jing\bin 仍是正解(与炼境在什么环境里启动无关),保留
- 撤销「exe 在 AppData 下就复制副本」逻辑及其测试:exe 总在真实路径上,前提不成立(按「退出」原则)
- 更正代码注释、verify_onboarding 的 Legacy 提示、契约文档与蓝图 P3 返工记录

验证:cargo test 243 passed / 5 ignored(删去 2 个只测副本逻辑的测试)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:31:59 +09:00
lanrtop
cca3bf9db1 fix(mcp/parity): 审查修复——shim 单行退出、副本刷盘后改名、DSH 仅 headless 按目录路由
All checks were successful
Push & PR Check / check (push) Successful in 1m28s
Push & PR Check / check (pull_request) Successful in 1m5s
对抗审查(14 个 agent,3 条核实成立)与 DSH 桌面版只读调研的修复:

- shim 改为调用与退出同一行(`& call exit /b %%ERRORLEVEL%%`):cmd 在命令返回后按字节偏移重读
  批处理,入口恰在 helper 运行期间被改写时,分行写法会执行到错位片段(实测 exit 9009)
- helper exe 副本 sync_all 后再改名:避免断电留下残缺副本却因同名被一直复用
- 旧副本改为入口写好之后再清理;旧位置入口写失败时暂不清理,避免入口悬空
- DSH 托管块只在 headless profile 按启动目录路由:web/acp/tui 一个进程可服务多个工作区,
  按启动目录会让别的工作区会话连到该项目并带上认证(跨项目越权);profile 取 profileContext.name,
  DSH 0.1.x 无该服务时退回看启动参数
- AGENTS.md 入口路径补全反斜杠;蓝图立 P9(DSH 桌面 GUI 会话级插件,待人确认)

验证:cargo test 245 passed;shim 认证成功 exit 0 / 92 字节、错误 digest exit 1;DSH url 表达式按
Loader 方式求值 7 种情形均符合预期;四路零凭据探针(Codex 包内、Codex 包外、Claude、DSH 无头)复跑通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:06:14 +09:00
lanrtop
2b0a55adcd fix(mcp/parity): helper 入口迁至 %USERPROFILE%,修复 Codex Desktop(MSIX)取认证失败
人终验发现 Codex Desktop 会话里 lian-jing 完全未加载,Codex 日志为 headers helper exit 1。
根因:Codex Desktop 是 MSIX 打包应用,看不见它安装之后在 %LOCALAPPDATA% / %APPDATA% 下新建的
顶层目录(Invoke-CommandInDesktopPackage 在包上下文对照实测:lian-jing 与新建对照目录均不可见,
与 ACL 无关;已有目录内的新文件、%USERPROFILE% 下的新目录可见)。原验收用包外的 codex exec,未覆盖。

- shim 迁至 %USERPROFILE%\.lian-jing\bin\;Codex 配置、Claude local 条目、DSH 托管块统一引用新入口
- 炼境 exe 位于 AppData 下(安装版默认位置)时,按大小+修改时间指纹复制到入口目录,清理旧副本;
  复制失败退回直接调用当前 exe 并记 warn
- 旧 %LOCALAPPDATA% 入口迁移期同步写入;verify_onboarding 把旧写法报 Legacy 引导 inject_mcp 升级
  (测试断言随之由 Ready 改为 Legacy,理由同上)
- 新增 helper 副本与 AppData 判定测试

复验:Codex 包内(等价 Desktop)、Codex 包外、Claude、DSH 无头四路零凭据探针均返回「开发需求未登记」
(修复前 Codex 包内为「工具不可用」);cargo test 245 passed / 5 ignored。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 18:58:50 +09:00
lanrtop
1888f71626 docs(blueprint/agent-client-parity): P1 收尾审查记录与已知限制更新为 claude mcp get 为准的方案
All checks were successful
Push & PR Check / check (push) Successful in 1m32s
Push & PR Check / check (pull_request) Successful in 1m5s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 16:57:26 +09:00
lanrtop
0a92a5b695 fix(mcp/parity): 收尾审查修复——Claude 现状以 claude mcp get 为准,接入命令移出界面线程
收尾对抗审查指出:只读扫描 ~/.claude.json 的结论不能代表 Claude 在项目目录实际生效的条目
(共享项目键、worktree、目录迁移下会误删他项目条目或漏写),且同步 CLI 调用会阻塞界面线程。

- 快路径只认「项目根或其祖先目录键下」的一致托管条目;其余一律在项目目录执行
  `claude mcp get lian-jing` 取实际生效条目,按归属决策:本项目托管条目 → 刷新/移除
  (写入失败用原条目回滚);他项目托管条目或手写条目 → 不碰并记录;无 local 条目 → 写入
- 输出无法识别、CLI 出错或目录不存在时一律不写,只记 warn
- 全局迁移需 claude CLI 与 git-bash 均可用才置完成标记;批量重注入的成员复查失败计入错误
- 删组/移出组先删成员关系再清 MCP 配置,避免并发重注入把项目加回;调 CLI 前释放数据库连接
- delete_group / add_group_member / remove_group_member / delete_project / update_settings /
  apply_blueprint_buff 改为 #[tauri::command(async)],在线程池执行
- 新增 parse_claude_mcp_get / lianjing_project_of / key_covers_root 单元测试

实测(enterprise):稳态注入 174ms 不起 CLI;条目缺失 → 写入;过期 helper → 刷新;
手写条目 → 保留;三种情况 claude mcp get 均为 Local 且 Connected;经 shim 零凭据探针认证通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 16:55:28 +09:00
lanrtop
92e6450403 docs(blueprint/agent-client-parity): 更新 P1 审查记录与已知限制为最终方案
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:41:08 +09:00
lanrtop
5f6ea586f8 fix(mcp/parity): 最终审查修复——Claude 条目写入回归 claude CLI,只读扫描认领
最终审查指出直接编辑 ~/.claude.json 须复刻 Claude 私有机制(git 根 / worktree→主仓库 /
NFC 键推导、.claude.json.lock 锁协议、CLAUDE_CONFIG_DIR 与旧版 .config.json、BOM/符号链接/
fsync/键顺序),随 Claude 升级易失效,违背「标准优先、私有机制只进适配层」。

- 写入一律经 claude CLI(cwd=项目目录,同步、带 20 秒超时),由 Claude 自己负责键、锁与路径
- 只读扫描按 URL 中 /mcp/projects/<id> 认领炼境托管条目(不依赖键推导);已一致则不起 CLI
  (实测稳态注入 0.04 秒),手写条目不碰;项目目录已不存在时只记录残留、不写文件
- 全局注册只读确认已存在就跳过 CLI;配置路径按 Claude 规则解析,容忍 BOM
- 批量重注入在锁内复查组成员关系,已移出组的项目不再注入、不重建 token

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:38:36 +09:00
lanrtop
1f90dcdeb0 docs(blueprint/agent-client-parity): P1/P3 完成,记录三端验收与审查证据
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:44:00 +09:00
lanrtop
fc8492b88b fix(mcp/parity): 第三轮审查修复——Claude 条目改为直接编辑配置,接入操作加进程锁
- Claude local 条目不再经 claude CLI(cwd=项目目录)+ 后台队列管理,改为直接编辑
  ~/.claude.json 中本项目键下的 mcpServers.lian-jing:同步、毫秒级、原子替换,只动该字段;
  不依赖项目目录存在,消除删除本地文件夹时的竞态、目录移动后旧条目无法清理、队列丢任务/卡死
- 项目键用真实长路径(实测 8.3 短路径键不被 Claude 识别);手写条目不碰
- 注入、移除、根目录迁移在进程锁内串行;移除时最先删 token,后续清理收集错误统一返回
- 根目录迁移:旧根解析不出也迁移;重新注入失败归入 mcp_inject 并补刷 DSH;DSH 补丁写入加锁

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:37:37 +09:00
lanrtop
7b702a9d88 docs(blueprint): 新建 architecture-evolution 模块,记录技术栈评估与 A1–A4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:49:59 +09:00
lanrtop
e4214cd839 fix(mcp/parity): 第二轮审查修复——串行同步队列、白名单持久剔除、诊断分类
- Claude local 同步统一投递到单个后台串行队列(注册与移除同队列、按提交顺序),
  消除并发 claude CLI 竞态与「注入后立即移除」留下孤儿条目;移除路径不再阻塞界面
- DSH 白名单只收有项目 token 的项目,退组/移除后剔除持久;控制面项目写 null 停止哨兵,
  不再越过它匹配到已登记的上级目录;Rust 与 JS 两端键规范化对齐(重复分隔符、盘符根、UNC)
- 客户端侧同步日志改为 mcp_client_sync 分类,不覆盖诊断中每个项目的注入结果
- 批量重注入只在末尾刷新一次 DSH;启动刷新移到后台线程
- 项目根目录/平台变更时迁移客户端配置(清旧根 Claude 条目,已接入项目在新根重新注入)
- SSE 消息路由仅在会话属于该项目时才移除;注入模块的进程调用统一 silent_cmd

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:39:23 +09:00
lanrtop
0bf5bd6994 docs(blueprint/agent-client-parity): 立卡 P8 一键接入
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:58:09 +09:00
lanrtop
0c40e1a5c9 fix(mcp/parity): 对抗审查 9 项修复——控制面保留全局、DSH 改登记白名单
- 控制面项目(context.json mcp_scope=global,炼境自身已声明)不写 Claude local 条目、
  不入 DSH 白名单,避免遮蔽全局注册与跨项目工具(审查 high)
- DSH 托管块内嵌炼境登记的「项目根目录→project_id」白名单,不再以任意目录里的
  context.json 作为取 token 依据;LOCALAPPDATA/SystemRoot 须为绝对路径
- remove_project_mcp 同步清理 Claude local 条目并剔除 DSH 白名单;SSE 消息路由复核登记
- Claude local 只替换炼境托管条目,手写不覆盖,替换失败回滚;改走 silent_cmd 并移至后台线程
- 手写 DSH 条目改用 serde_yaml 检测(引号/注释/流式写法),无法解析时保守拒绝
- shim 中 exe 路径的 % 转义为 %%;注入日志 context 统一为 JSON,诊断查询防御非 JSON 行

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:48:41 +09:00
lanrtop
9a1635a225 docs(blueprint/agent-client-parity): P1 进行中
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:43:58 +09:00
lanrtop
ebf43d71c0 feat(mcp/parity): 三端经稳定 helper 入口连项目专用地址
- P3:炼境启动写 %LOCALAPPDATA%\lian-jing\bin\lianjing-mcp-header.cmd 指向当前 exe;
  Codex 项目配置改为引用该入口,不再写本机 exe 绝对路径;verify_onboarding 对旧写法报可升级
- P1:inject_mcp 以 local scope 为 Claude 注册项目专用地址 + headersHelper(不进仓库);
  DSH 机器级补丁写托管块,!!js 按启动目录选项目地址并经 cmd 调用同一入口,项目外回退全局
- 服务端:scoped route 拒绝未登记的 project_id(404,数据库不可用同样拒绝)

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:40:08 +09:00
lanrtop
5d15520e73 docs(blueprint/agent-client-parity): 定位为 agent 客户端兼容层,立卡 P6/P7
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 09:53:48 +09:00
lanrtop
f4e75dc91f feat(onboarding): lian-jing skill 双投影到 Claude,接入包升至 1.6.0
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
- 同一模板同时写 .agents/skills(Codex、DSH)与 .claude/skills(Claude Code)
- verify_onboarding 新增「Claude 炼境技能已分发」检查
- skill 降级步骤改为三端通用,提示无开发变量工具即连的是全局地址
- capability-packs supported_clients 增加 dsh

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 09:11:32 +09:00
lanrtop
8babc545c3 docs(blueprint/agent-client-parity): H2/H4 零凭据实测成立,三端可共用 shim
All checks were successful
Push & PR Check / check (push) Successful in 1m33s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 08:58:27 +09:00
lanrtop
bbdc98b93f docs(blueprint/agent-client-parity): 记录 H1–H4 实测与对抗复核结果
All checks were successful
Push & PR Check / check (push) Successful in 1m14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 22:03:02 +09:00
lanrtop
d1e75d2270 docs(blueprint): 新建 agent-client-parity 模块,记录三端无头基线
All checks were successful
Push & PR Check / check (push) Successful in 1m26s
- 三端(Claude Code / Codex / DSH 桌面版)同一只读任务的 A–F 矩阵作为基线证据
- 立 P1–P5:统一项目专用地址、Claude skill 投影、稳定 helper 入口、
  探针固化、落地兜底;原 V17/V18 迁入 P1/P3
- manifest 项目描述同步为「管家」定位

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 19:12:03 +09:00
lanrtop
487ea86806 docs(blueprint/dev-variables): V17+V18 合并设计——稳定 helper 入口与各客户端认证
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:34:30 +09:00
lanrtop
9aa70eefd9 docs(blueprint/dev-variables): 记录 Enterprise 真实分发与取值证据,立卡 V14–V18
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:22:45 +09:00
6105c3d4a3 Merge pull request 'feat(dev-variables): 项目开发变量与测试账户补给(V1–V11)' (#23) from feat/project-dev-variables into master
All checks were successful
Push & PR Check / check (push) Successful in 1m7s
2026-09-30 13:35:23 +08:00