lanrtop
97578b2261
feat(onboard/parity): 一键接入 MCP 与 Tauri 投影、Codex 信任计 pending_user 与仓库布局说明(P8e)
...
Push & PR Check / check (push) Successful in 1m27s
Push & PR Check / check (pull_request) Successful in 1m6s
- MCP 新增 plan_onboarding(readOnly)与 onboard_project(幂等写操作):schema 各自单独成函数,
dispatch 一行委托到 mcp_inject 生产入口(中间只做 JSON 类型解析);全局与项目路由都可见,
项目路由强制本项目、跨项目返回 scope_violation;onboard_project required 含 expected_digest
与 confirmed;共用可选选项 bypass_permissions / skip_targets;进 STRUCTURED_TOOLS 并给一行摘要
- Tauri 新增同名 async 命令(async fn + spawn_blocking),commands.ts 同步 OnboardOptions、
OnboardingPlan、OnboardReport 类型与 planOnboarding / onboardProject 封装
- 统筹决定(P8d 审查 ⑩):L1 Codex 列仅因 codex_project_untrusted 未就绪的格不计入 done,
completion 单列「Codex 信任」(pending_user),next_actions 保留 codex_trust;仓库子目录与
worktree 补 next_action repo_layout 说明为何到不了 done;非 git 维持不能 done
- 契约同步:project-context.yaml、agent-button-system.md、AGENTS.md 架构速查;P8d 卡记统筹决定落地
- cargo test 413 passed / 0 failed / 6 ignored;pnpm typecheck、pnpm test 通过;三轮 10 处变异全部被杀
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 19:50:21 +09:00
lanrtop
57665768b1
feat(onboard/parity): onboard_project 编排本体与接入报告,apply_onboarding_pack 改 async(P8d)
...
- 新增 onboard/apply.rs:计划与应用共用同一份演算(本机七步 token/shim/claude/codex/dsh/
product_group_buff/git_hooks + 项目文件);apply 依次项目级运行锁(busy)→ 预检(failed)→
确认(refused)→ 接入写锁内重算计划核对 digest 与阻断项(refused),以上零写入;之后按依赖
执行 identity、project_files、git_hooks、product_group_buff、token → shim → 三端适配器,
某步失败只阻断依赖它的步骤(blocked(dep=…)),整体 partial,不自动回滚;随后 L1(未完成的
客户端一端整列 blocked、不起进程)与 L0
- 新增 onboard/report.rs:status done/partial/failed/refused/busy,「完成」只按三端可用子集;
repo_changes(git status --porcelain / diff --stat,非 git 为 unavailable)、HEAD 不变断言、
建议提交信息、next_actions(Gitea 注明默认公开、CI、飞轮、工具链、lefthook、Codex 信任、
重启 DSH GUI、Claude trust、重开已打开的会话)
- 计划单列 bypass_permissions,可按项目取消(写显式 defaultMode=default 记住选择)
- 下沉:本机七步组装、token_step/outcome_status、控制面判定、lefthook install、独立产品组建组
移入 onboard(可注入),commands 与 mcp_inject 改为薄包装;生产入口
mcp_inject::plan_onboarding / onboard_project 供 P8e 投影一行委托
- L1 Cell 增 dep、Cause 增 dependency(commands.ts 同步);project-context.yaml、AGENTS.md 同步
- cargo test 394 passed / 0 failed / 6 ignored;pnpm typecheck 通过;三轮变异验证
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 15:24:39 +09:00
lanrtop
5b804bb967
feat(onboard/parity): L1 零模型三端检查 probe_client_parity(P4a)
...
Push & PR Check / check (push) Successful in 1m3s
新增 onboard::probe_l1:不调用模型、零额度,按 Claude Code、Codex、DSH
各自实际生效的配置给出 A–F × 三端矩阵,每格带状态、证据等级与归因。
- 客户端自省:Claude 在项目目录 claude mcp get 取生效条目,再以坏模型名
跑 claude -p(只挂该条目、读到 system/init 即止)取 skills/工具/连接状态;
Codex 用 codex mcp get --json(看不到条目而项目有配置 → codex_project_untrusted);
DSH 读托管块白名单并核对会话插件 sha256,版本读安装包 app.asar。
- 认证链重放:按客户端方式执行稳定 shim 取认证头(只在进程内使用),
在该端配置的地址上 initialize(clientInfo=lian-jing-l1-probe)、tools/list
(与 tools_list_result_for_project 比对)、get_diagnostics、
list_project_dev_variables、read_project_test_account(LJ_PROBE_<nonce>)。
归因 shim_missing / helper_failed / auth_failed / unreachable / route_global 等;
未安装记 not_installed,控制面 Claude 与 DSH 记 not_applicable,均不计失败。
- 进程、HTTP、客户端定位经 ProcessRunner / McpHttp / ClientLocator 注入;
ClientAdapter 新增 l1_facts;本体入口 mcp_inject::probe_client_parity。
- 投影:MCP probe_client_parity(仅全局路由,readOnly)、Tauri async command、
commands.ts 类型与封装;mcp_server 不把 l1 探针计入真实客户端初始化。
- T1:project-context.yaml 补 MCP 工具与 Tauri command 契约;蓝图 P4a 记实现与验证。
cargo test 349 passed / 0 failed / 6 ignored;pnpm typecheck 通过;
实机冒烟 enterprise 三端 18 格 ready(1.4–1.6 秒)。
Rules-Applied: R01
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 12:29:56 +09:00
lanrtop
479f4ac2cd
fix(onboard/parity): 处置 P8c 独立审查——Codex 信任改进 next_actions、存在即跳过只判存在、token 步区分 needs_repair(P8c)
...
- Codex 未信任不再并入 blocked:计划新增 codex_trust 与 next_actions 字段,未信任或读不出
Codex 配置只进 next_actions,不阻断、不进 digest;「本机步骤 → 阻断项」抽成纯函数 machine_step_blocker。
- WriteSink 新增 exists():dispatch_one 只判存在,已存在的非 UTF-8 文件(UTF-16 lefthook.yml 等)
恢复为 skipped(修复 apply_onboarding_pack 回归);全托管文件读不出仍记 failed。
- token 步改用只读 mcp_auth_token_state 区分 Present / Missing / NeedsRepair,needs_repair 记 needs_human,
与 get_or_create_mcp_auth_token 的分支一一对应;is_project_injected 仍只作「已接入」判据。
- Codex 信任去掉未验证的祖先目录规则,候选为项目根 + git 主仓库根(worktree 继承主仓库信任);
键解析按 TOML 规则处理字面量键、基本字符串转义、[projects] 内联表与点号键;删掉非法 TOML 的假阳性用例。
- 写入序列只留一份:抽出 write_project_identity_files_with,inject 与 plan 共用;删除 write_project_mcp_files_with。
- digest 绑定 update 文件的写入前哈希(before_sha256),模块文档写明准确语义。
- 新增 WriteFailure,阻断项指向真正出错的文件;本机 codex 步指向 .codex/config.toml,blocked 按(target, reason)去重。
cargo test 318 passed / 0 failed / 5 ignored(新增 7 条),cargo check 0 warning;两轮变异验证均被对应用例捕获。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 10:53:41 +09:00
lanrtop
ea8ed26191
chore(merge): 合并 master(PR #34 重复登记修复 U1/U2)到 P8c 分支
...
自动合并,无冲突(mcp_inject.rs、commands/onboarding.rs、mcp_tools.rs 双方改动区域不重叠)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 09:58:15 +09:00
lanrtop
ef2c7fd593
feat(onboard/parity): 写入汇 WriteSink 与写入前计划 plan_onboarding(P8c,待独立审查)
...
Push & PR Check / check (push) Successful in 1m2s
一键接入改写子项目受版本管理的文件,人在确认前必须看得到改什么;计划与 apply 走同一段
分发代码、只换写入汇,所以「看到的」就是「将写的」。
- lib.rs:WriteSink trait(read/write,内容忽略行尾未变不写)与 DiskSink
- 接入包模板分发、蓝图规则同步、项目身份与 MCP 投影(context、settings 兼容条目、
liangjing、Codex 托管块)全部改经写入汇;原入口改为 DiskSink 薄包装,行为不变
- onboard/plan.rs:PlanSink 只记录不落盘、后续步骤读到前面步骤的待写内容;
write_project_files 为 plan 与 apply 共用的写入序列;plan_onboarding 给出逐文件
create/update/noop、有上限的 diff、混合文件预警(P10 前移到写入前)、身份冲突、
手写条目与共享项目键阻断项,并对计划算 digest
- mcp_inject:plan_onboarding 生产入口与本机侧预计动作(token、稳定入口、三端只读
状态、Codex 信任),只读、不起子进程
- 新增测试:空仓库全 create 且目录快照字节不变、apply 后两次计划全 noop 且 digest
相同、CRLF 判 noop、内容/本机状态变化 digest 变化、混合文件与身份冲突阻断、
手写 Codex 条目与共享键阻断、记录汇覆盖与撤销、diff 截断、Codex 信任解析;
cargo test 307 passed
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 09:35:24 +09:00
lanrtop
e57da3aebb
fix(mcp-single-server): 删除登记只清本项目托管条目,沉默项目统计每条 commit 只归属一个 workspace,注入状态带项目名(U1、U2)
...
Push & PR Check / check (push) Successful in 1m34s
Push & PR Check / check (pull_request) Successful in 1m1s
同路径重复登记(dev-manager-tauri 与 2c5b54ef 并存)暴露的三处问题:
- remove_project_files_mcp 按路径解析目录后无条件删 Codex 管理块与 settings 条目,
删 UUID 那条会连带切断规范 ID 的 Codex 接入;改为只删 URL 属于本 project_id
或不是炼境项目路由(旧格式)的条目
- silent_projects 的「ID 或路径」任一匹配让一行吃到多条登记的并集(真机 147 / 86),
改为每条 commit 先按直接 ID、再按 buff 路径归属唯一 workspace
- get_diagnostics 注入状态只打 ID,enterprise-system 的 UUID 被误读成炼境重复登记;
改为「名称 (`id`)」,已删除的登记标注未登记
Rules-Applied: R06,R07
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 09:22:25 +09:00
lanrtop
59f2c9d5fb
fix(onboard/parity): P8b 审查修复——未装记 not_installed、手写保留留痕、成功日志后移、只读判定误判(P8b 审查)
...
Push & PR Check / check (push) Successful in 1m0s
Push & PR Check / check (pull_request) Successful in 1m3s
独立审查 agent 只读审查 d1b9b05(未发现死锁、重入或崩溃),十条发现处置:
- Claude apply:无全局配置且找不到 CLI 记 not_installed,与 DSH、static 同口径
- 手写条目保留(manual_kept)时补日志:DSH 照原文案,Codex 带 project_id
- 「MCP 配置注入成功」移到三端收敛之后,Codex 失败时改记 warn「注入失败」,
诊断不再把失败显示成成功
- 控制面 Claude 静态判定:遮蔽全局注册的残留 local 条目报 missing
- 嵌套项目:根目录是 git 根时只认等于根目录的键,否则取最具体的键
- 适应度测试改为递归;registry() 注明适配器暂寄 mcp_inject 的传递依赖
- 状态名对齐设计:skipped 改为 not_applicable{control_plane|wsl} 与 deferred
- 只读判定:读失败与 YAML 解析失败报 unavailable,Codex 块与手写同名表并存、
标记错序报 needs_human,DSH 块外手写报 manual_kept;client_static_status 改用
与注入同源的 project_root
- 修正「目录不存在」假阳性用例,补 hard_failure、inject 回执、apply 映射、
clients 不影响 pass 的测试;cargo test 300 passed,两处变异验证失败如期
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 08:52:25 +09:00
lanrtop
d1b9b0564e
feat(onboard/parity): 客户端适配器注册表与三端结构化注入结果,onboard 模块投影无关适应度测试(P8b、A1a)
...
Push & PR Check / check (push) Successful in 1m2s
Push & PR Check / check (pull_request) Successful in 59s
一键接入(P8)编排前置:Claude local 与 DSH 托管块的成败原来只写日志,inject_mcp
笼统回「已配置 Codex 与 Claude」,失败会被报成成功(R4)。
- 新增 src-tauri/src/onboard/:ClientId、ClientOutcome(converged/applied/refreshed/
removed/manual_kept/other_project/not_installed/skipped/missing/unavailable/
needs_human/failed)、ClientAdapter(detect/static_status/apply)与 registry();
适应度测试 onboard_module_is_projection_free 机器校验本体不依赖投影层
- 三端适配器实现在 mcp_inject,注册表反向接入;注入经 registry() 逐端 apply,
新增 inject_project_mcp_report,inject_project_mcp 签名与「Codex 失败即整体失败」
语义不变
- sync_claude_local / ensure_dsh_patch 抽出依赖注入版,每条分支返回结构化结果,
日志类别与文案不变;upsert_codex_mcp_config 返回 converged/applied/manual_kept
- verify_onboarding(MCP)附加 clients 只读三端状态,不计入 checks、不影响 pass;
inject_mcp 回执逐端列出实际结果
- 行为变化(有意):Codex 手写同名 server 改记 manual_kept 不再阻断 Claude/DSH;
WSL 项目 Claude local 记 skipped 不再起 CLI
- 新增 9 条测试(假 CLI 覆盖 Claude 全部分支、临时 DSH 目录四态);cargo test
295 passed;契约同步 project-context.yaml,AGENTS.md 架构速查补 onboard/
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 08:25:04 +09:00
lanrtop
1e3989d0d7
feat(delivery/mcp): get_delivery_status 支持按 pr_number/branch 查询,结论绑定 Gitea head SHA(使者回传 #203)
...
Push & PR Check / check (push) Successful in 1m0s
Push & PR Check / check (pull_request) Successful in 1m2s
Enterprise 2026-10-03 实测:为避开主工作区里其他会话的在制品,在独立 worktree
分支上开 PR 交付时,get_delivery_status 只读主工作区当前分支,返回「当前分支没有
开放 PR」、CI 停在主工作区 HEAD,传 pr_number 也被忽略,只能用 git ls-remote 与
get_ci_status(commit_sha) 兜底。
- MCP schema 新增可选 pr_number(优先)与 branch;都不给时保持原行为
- pr_number:GET /pulls/{n} 取 head 分支与 head SHA,CI 与 review 均绑定该 PR;
PR 不存在(404)返回 not_found,与 Gitea 不可达(unavailable)区分;
同时传 branch 且与 PR head 分支不一致时以 pr_number 为准并在 detail 提示
- branch:匹配该分支的开放 PR 并以其 head SHA 查 CI;无开放 PR 时取 Gitea 上
该分支 head SHA;远端分支不存在时 CI 为 unknown
- 顶层新增 target(mode/pr_number/branch/head_sha/source/detail),
pull_request.data 增 head_sha;git 字段仍反映主工作区,既有字段兼容
- 取值校验在能力本体 DeliveryQuery 单点实现,MCP 只解析 JSON 类型;显式给出的
非法值直接报错,不静默回退主工作区
- Gitea 读取拆为本地/PR/分支三种目标,凭证存储注入以便合成 Gitea 测试;
merge_pull_request 门禁代码未改
- lian-jing skill 第 6 条改为 get_delivery_status(project_id, pr_number),
base-onboarding 1.8.0→1.9.0(BASE_ONBOARDING_PACK_VERSION、模板
capability-packs.json、TEMPLATE_FINGERPRINTS);Codex 插件 skill 同步
- 契约说明同步 docs/ai-context/project-context.yaml;蓝图 P3-F 标 ✅
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 06:22:09 +09:00
lanrtop
32e947b622
fix(onboarding/parity): lian-jing skill 免确认例外补列 register_project_dev_variable,第 8 条开发变量改用对应登记工具(P7 审查修复)
...
Push & PR Check / check (push) Successful in 1m2s
Push & PR Check / check (pull_request) Successful in 59s
服务器说明 MCP_SERVER_INSTRUCTIONS 的免确认例外是泛称「不含秘密的开发需求元数据」,
register_project_test_account 与 register_project_dev_variable 都属于;skill 新增的
通用边界括注只列了前者,开发变量登记会被误读为须用户确认的「其他写操作」。同源旧
问题:skill 第 8 条把「开发变量(沙箱 key 等)」也只指向 register_project_test_account。
- skill 例外括注同时列出两个登记工具
- 第 8 条拆分:测试账号用 register_project_test_account 登记名称、目标系统、非生产
环境与用途;开发变量用 register_project_dev_variable 登记名称与用途
- base-onboarding 1.8.0 尚未发布,不再升版本,仅更新 TEMPLATE_FINGERPRINTS 摘要
- server_instruction_universal_rules_are_in_skill 加断言:服务器说明含「开发需求元
数据」,skill 写操作确认规则所在行同时含该泛称与两个登记工具名
- 蓝图 P7 known_limits 把「措辞与服务器说明一致」精确为「两条规则核心句逐字一致」,
并记录本次例外与第 8 条的修正
测试:cargo test --locked 全量通过(lib 273 passed / 5 ignored,0 failed)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 05:43:32 +09:00
lanrtop
e13599fbbd
feat(onboarding/parity): lian-jing skill 补写操作确认与 unavailable/unknown 两条通用边界,接入包升至 1.8.0
...
Push & PR Check / check (push) Successful in 59s
Push & PR Check / check (pull_request) Successful in 1m0s
P7 实测 Codex 不把 MCP 服务器说明带入模型上下文,服务器说明里的「其他写操作
须用户明确确认」「unavailable/unknown 不得当作成功」在 skill 中只有分场景表述。
现把两条作为通用边界写进 lian-jing skill 模板开头(同一模板双投影到 .agents
与 .claude),措辞与服务器说明一致;只读查询、登记开发需求元数据、回传炼境
列为无需确认的例外,与 skill「回传不必逐条征得同意」相容。
- base-onboarding 1.7.0→1.8.0(BASE_ONBOARDING_PACK_VERSION、模板
capability-packs.json、TEMPLATE_FINGERPRINTS 指纹)
- mcp_server 新增 server_instruction_universal_rules_are_in_skill:服务器说明与
skill 任一侧缺这两条即失败
- 蓝图 agent-client-parity P7 known_limits 记录已补齐
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 05:25:18 +09:00
lanrtop
c9b951dd30
fix(onboarding/parity): 混合文件预警收窄空白归一、失败时不丢预警、测住改写判断(P10 审查修复)
...
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)
...
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
7595c37d22
test(onboarding): 托管模板指纹测试,改内容未升版本即失败
...
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
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
c4241f075d
fix(mcp/parity): 更正 Codex Desktop 取认证失败的根因,撤销基于错误前提的 exe 副本逻辑
...
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
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
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
f4e75dc91f
feat(onboarding): lian-jing skill 双投影到 Claude,接入包升至 1.6.0
...
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
663a723b3b
feat(dev-variables): 修改时显式查看原值,并提示 agent 先查炼境测试账户
...
Push & PR Check / check (push) Successful in 1m5s
Push & PR Check / check (pull_request) Successful in 1m9s
- 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>
2026-09-30 14:22:54 +09:00
lanrtop
02b9f1ec36
feat(delivery): observe production revision with dual evidence
...
Read project-owned production profile, verify Gitea deploy context and public version probe, and surface explicit degraded states.
Feature-Confirmed: true
2026-09-23 10:37:07 +09:00
lanrtop
327f3d78ab
feat(agent/access): 强化项目级运行态接入
...
MCP 改为 loopback 并绑定项目 scope,补齐越界拒绝、风险元数据和结构化状态。
新增分层 readiness、配置迁移与设置页投影;正式安装版可选择登录自启动,debug 与非安装路径明确拒绝。
Feature-Confirmed: true
Rules-Applied: R01,R06,R07,R08,R10,R12,R13
2026-09-23 03:21:38 +09:00
lanrtop
806205b8b0
feat(cicd): add safe agent workflow projection
...
Push & PR Check / check (push) Successful in 1m0s
Push & PR Check / check (pull_request) Successful in 58s
Add preview-and-apply workflow commands with digest confirmation, project boundary checks, and MCP/Tauri projections. Sync onboarding capability packs and Codex skill guidance.
Feature-Confirmed: true
Rules-Applied: R01,R02,R06,R07,R12,R13
2026-09-22 23:27:34 +09:00
lanrtop
28e65b3d1c
feat(gitea): 增加 Agent PR 安全合并门禁
...
合并前重新校验 PR、head SHA、CI 与 review,并用 Gitea head_commit_id 在服务端绑定用户确认的提交。同步 MCP schema、接入模板与 Codex skill 契约。
Feature-Confirmed: true
Rules-Applied: R06,R07,R10,R12
2026-09-22 21:07:55 +09:00
lanrtop
ead35ad12a
feat(toolchain): 增加项目级运行时能力包
...
以 .nvmrc 与 packageManager 作为 Node/pnpm 版本事实,新增 Windows-only 的状态诊断、受控 mise 准备、MCP/Tauri/UI 双投影及 onboarding 自检。
Feature-Confirmed: true
Rules-Applied: R01,R04,R06,R07,R08,R10,R12
2026-09-22 01:08:31 +09:00
lanrtop
057c2b3a10
fix(onboarding): recognize custom lefthook checks
Push & PR Check / check (pull_request) Successful in 1m1s
2026-09-21 22:42:03 +09:00
lanrtop
c9f19e2916
fix(onboarding): enforce canonical skill context
Push & PR Check / check (pull_request) Successful in 58s
2026-09-21 22:02:58 +09:00
lanrtop
f04b80f201
fix(onboarding): preserve identity mismatch signal
Push & PR Check / check (push) Successful in 1m34s
Push & PR Check / check (pull_request) Successful in 1m13s
2026-09-21 19:28:27 +09:00
lanrtop
f5b66aba4a
feat(onboarding): version capability packs
...
Feature-Confirmed: true
2026-09-21 19:23:54 +09:00
lanrtop
122864f340
feat(onboarding): add capability pack status
...
Feature-Confirmed: true
2026-09-21 18:33:12 +09:00
e1e7ffb3b4
Merge branch 'master' into feat/project-capability-control-plane
Push & PR Check / check (push) Successful in 1m0s
Push & PR Check / check (pull_request) Successful in 1m1s
2026-09-21 16:48:26 +08:00
lanrtop
383b5b35d7
feat(delivery): add project delivery status
...
Push & PR Check / check (push) Successful in 1m0s
Push & PR Check / check (pull_request) Successful in 58s
Feature-Confirmed: true
2026-09-21 15:16:40 +09:00
lanrtop
ed83f2874a
feat(onboarding): add Codex MCP project integration
...
Push & PR Check / check (pull_request) Successful in 57s
Push & PR Check / check (push) Successful in 1m3s
Feature-Confirmed: true
2026-09-21 12:35:10 +09:00
lanrtop
473cf7e92b
fix(onboarding/dispatch): 空路径登记防护——拒绝分发而非写进进程 cwd
...
批量实调实锤:两条空路径登记(银龙集团应用/agent编排界面)使
Path::new("") 变相对路径,接入包整套写进了 dev 进程的 src-tauri/。
apply_onboarding_pack 入口拦截空/不存在路径(单点防护),批量 SQL
同步过滤空串,回归测试驻军。
Rules-Applied: R06,R07
2026-07-15 19:53:47 +09:00
lanrtop
1672b071e4
feat(onboarding/upgrade-channel): 全托管文件升级通道 + 批量重分发(U1)
...
Push & PR Check / check (push) Successful in 51s
Push & PR Check / check (pull_request) Successful in 51s
三档升级语义落地:envoy.md/blueprint-gate.cjs 切全托管
(内容不一致即覆盖,CRLF 归一化防抖动),文件头加托管声明;
verify_onboarding 第 7 项「lefthook 检查段齐全」从内嵌模板自省
键集合,零硬编码;MCP apply_onboarding_pack 缺省 project_id
时批量分发全部已登记项目,替代 batch_apply.py 手摇脚本。
Rules-Applied: R06,R07
Feature-Confirmed: true
2026-07-15 14:20:22 +09:00
lanrtop
2fe576b75a
feat(mcp/diagnostics): get_diagnostics 新增使者回传覆盖率「沉默项目」信号(B4)
...
Push & PR Check / check (push) Successful in 49s
近 30 天有 commit 采集但零使者回传的已登记项目浮出水面,
提示去该项目跑 /envoy——回流触发不自动化(辩证决策 2026-07-15),
用可观测性让遗忘可见,人留在过滤环里。
Rules-Applied: R06,R07
2026-07-15 14:10:28 +09:00
lanrtop
f04eb6e766
feat(onboarding): 接入包 v1.6.0——蓝图机器门控双层实现
...
A: feat: 提交须含 Feature-Confirmed: true trailer
- lefthook.yml.tmpl commit-msg 新增 feature-confirmed 命令
- AGENTS.md.tmpl 需求对齐协议补 trailer 说明
B: pre-commit 检查未关闭 🔵 任务卡(warn only)
- 新增 .claude/hooks/blueprint-gate.cjs(CommonJS,兼容 ESM 项目)
- lefthook.yml.tmpl pre-commit 新增 blueprint-gate 命令
- onboarding.rs dispatch 新增 blueprint-gate.cjs
Feature-Confirmed: true
2026-07-15 13:38:32 +09:00
lanrtop
ce3ef6e14e
feat(onboarding): 接入包模板 AGENTS.md v1.4.0——acceptance 分层/Playwright 版本锁定/API typecheck 提示/envoy 命令纳入分发
2026-07-09 16:09:55 +09:00
lanrtop
1c44bfe30a
test(onboarding): 版本号从模板动态取,消除硬编码
...
Push & PR Check / check (push) Successful in 1m0s
模板升版(1.2.0→1.3.0)暴露测试硬编码版本号——每次升版测试必断。
改为 extract_managed_block + block_version 动态取,升版不再碰测试。
2026-07-06 22:59:24 +09:00
lanrtop
f68d172687
fix(onboarding): Windows PATH 兜底补 lefthook.cmd shim 解析
...
Push & PR Check / check (push) Successful in 48s
pnpm add -g lefthook 安装的是 .cmd shim,CreateProcess 对裸名
"lefthook" 只解析 .exe,导致 PATH 兜底永远 missing_binary
(批量接入 6 项目实测踩坑)。兜底顺序改为逐候选尝试:
本地 .bin → 全局 lefthook → 全局 lefthook.cmd(仅 Windows)。
Rules-Applied: R10
2026-07-04 11:33:11 +09:00
lanrtop
ccf87ae09a
feat(onboarding): V1 接入生效验收——lefthook 分发即激活 + verify_onboarding 六项检查链
...
Push Check / check (push) Successful in 45s
分发成功 ≠ 功能生效:接入包此前只写 lefthook.yml 从不激活,
文件在 hook 死 → conventional 不强制 → 飞轮数据脏。
- apply_onboarding_pack 分发后自动 lefthook install(本地 .bin 优先/
PATH 兜底/静默),OnboardingReport 新增 hook 三态
- 新 MCP 工具 verify_onboarding:管理块版本/hook 真挂/origin 命中
Gitea 实例/CI workflow 存在/近 30 天飞轮数据 六项检查链 JSON
- 判定纯函数化 5 条单测 + in-memory DB 全链集成测试
- commands.ts 补 TemplateResult 缺失的 updated/appended 态(T1 旧债)
- AGENTS.md 去掉写死的工具计数(防腐:以 tools_list_result 自省为准)
Rules-Applied: R01,R06,R07,R13
2026-07-04 08:27:39 +09:00
lanrtop
3b9de9a23c
refactor(mcp)+fix(ci)+fix(test): 三项优化
...
Push Check / check (push) Failing after 1m7s
- CI: pr-check 改为 push master 触发 + tsc --noEmit(原 branches: [main] 永不触发)
- mcp_server.rs 拆分:mcp_tools.rs(工具schema+dispatch+实现)+ mcp_webhook.rs(webhook+测试)
mcp_server.rs 从 1385 行瘦身至 145 行(纯协议路由层)
- mcp_tools 新增工具 schema 完整性测试(73 passed,较之前 +2 条)
- onboarding 测试版本号跟进 v1.1.0 → v1.2.0(模板版本升级后断言未同步)
2026-07-03 21:38:20 +09:00
lanrtop
6efde66c42
feat(onboarding): T1 模板版本化三态分发 + B1 CONVENTIONS 1.10.0(R12/R13) + B2 agent 按钮章节
...
- dispatch_versioned:不存在写全新 / 有标记同版本跳过 / 版本不同原位升级块 / 无标记末尾追加块,块外用户内容永不触碰
- AGENTS.md.tmpl 重写为三分区:用户 TODO 区 + ONBOARDING_MANAGED v1.1.0 块(含 agent 按钮与验证路径章节)+ 四支柱防腐元规则
- git-workflow.md.tmpl 全文入管理块 v1.1.0
- CONVENTIONS 升 1.10.0:R12 边界单点实现、R13 验收路径须真实走通(含载体就近选择表)
- lefthook.yml 保持存在即跳过(用户深度定制不适用块机制)
Rules-Applied: R05-skip, R12, R13
2026-07-03 13:23:41 +09:00
lanrtop
5f8b2e8bec
feat(onboarding): 接入包模板分发 + apply_onboarding_pack 后端
...
dispatch_templates 向项目种入 AGENTS.md/lefthook.yml/git-workflow.md 标准模板(蓝本取自 enterprise-system,已通用化),不存在才写、绝不覆盖用户已有;apply_onboarding_pack 组合模板分发 + apply_blueprint_buff 返回 OnboardingReport。含 3 内嵌模板 + 不覆盖单测 + commands.ts 封装。前端 UI 待接。
2026-06-19 13:00:22 +09:00