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>
7.2 KiB
7.2 KiB
| name | description |
|---|---|
| lian-jing | 读取炼境项目健康状态,并使用炼境 MCP 的项目管理、Gitea 与交付能力;遇到炼境模板、约定或工具的摩擦时回传炼境。 |
炼境项目技能
开始项目工作时,先读取根 AGENTS.md 与 .lian-jing/context.json 取得 project_id。.claude/liangjing.json 仅为旧项目的 Claude 兼容投影,不能作为长期身份来源。
如果当前客户端已发现 lian-jing MCP,所有调用都遵守两条通用边界(与炼境 MCP 服务器说明一致):
- 只读查询、登记不含秘密的开发需求元数据(
register_project_test_account、register_project_dev_variable)与回传炼境(report_envoy_return)可直接调用;其他写操作仅在用户明确确认目标与影响后调用,下文安装工具链、合并 PR、生成 CI workflow 是它的具体场景。 - 状态
unavailable/unknown不得当作成功:如实报告实际状态,不据此宣称完成。
具体用法:
- scoped MCP 连接已由 URL 绑定当前
project_id,项目级调用可省略project_id;若 server initialize 明确报告 legacy,迁移前才显式传入 canonicalproject_id,绝不传其他项目 ID。 - 优先调用
get_diagnostics,将其作为当前项目健康状态的事实来源。 - 在 Node/pnpm 项目运行包管理命令前调用
get_toolchain_status(project_id);ready_managed时通过mise exec -- pnpm ...执行,其他状态先报告实际版本与 executable 证据。 - 只有用户明确确认本次下载安装后,才可调用
prepare_toolchain(project_id, confirmed=true);不得为适配客户端 bundled runtime 而修改项目版本或 lockfile。 - 交付、Gitea、CI、蓝图等平台状态优先通过 MCP 查询,不凭静态文档猜测。
- 合并 PR 前调用
get_delivery_status(project_id, pr_number),按 PR 编号读取:head 分支与 head SHA 以 Gitea 为准,不受主工作区当前分支影响,在独立 worktree 分支上交付同样适用(不传pr_number时只看主工作区当前分支)。向用户展示 PR 编号、完整 head SHA、CI 与 review。只有当前用户明确确认该 PR 与 SHA 后,才调用merge_pull_request(project_id, pr_number, expected_head_sha, confirmed=true);合并后再次读取交付状态。不得自行推断确认。 - 生成 CI workflow 时先调用
plan_cicd_workflow(project_id, workflow_type),向用户展示目标文件、变更类型、content_digest、工具链来源与所需 secret 名称;只有用户明确确认这份摘要后,才以同一 digest 调用apply_cicd_workflow(..., confirmed=true)。该流程只写项目 workflow,不配置 secret、不触发 CI 或部署;不得通过 MCP 传服务器地址、命令、路径或 secret 值,部署类配置先由用户在炼境 UI 保存。 - 需要测试账号或开发变量(登录自验、沙箱 key 等)时,先调用
list_project_dev_variables查找:已配置则用read_project_test_account/read_project_dev_variable单项读取;没有则先登记需求——测试账号用register_project_test_account登记名称、目标系统、非生产环境与用途,开发变量用register_project_dev_variable登记名称与用途——再请用户在炼境项目 UI「开发变量」中填写。不得在对话中向用户索要明文密码,不得登记生产账号,不得把读到的值写入受 Git 跟踪的文件。读取因缺少项目认证被拒时,如实报告并改用项目原有配置方式,不得绕过认证。若 lian-jing 工具中根本没有list_project_dev_variables,说明当前客户端连的是全局地址/mcp而非本项目地址,按下方configured一步处理。 - 遇到体系级摩擦时,按下方「遇到摩擦时回传炼境」调用
report_envoy_return。
遇到摩擦时回传炼境
炼境根据各项目回传的摩擦改进分发给所有项目的模板、约定与工具。Claude Code、Codex、DSH(DeepSeek Harness)都用同一个入口:report_envoy_return。回传只追加一条信号,不改任何代码或配置,所以不必逐条征得用户同意;回传后在给用户的总结里列出编号即可。
以下情况直接回传:
- 炼境分发的东西出错或碍事:AGENTS.md 托管块、本技能、
/envoy、lefthook、CONVENTIONS、MCP 工具的行为或返回。即使只在本项目复现也要回传,scope填this_project - 用户说「回传」「告诉炼境」「记给炼境」
以下情况先过硬门槛:有经验的工程师会不会事先想到这一点?会,或者只在本项目的特定组合下才成立,就不回传,留在本项目处理。
- 某种做法有具体代价或验证结果,并且换个项目也成立
- 会影响多个项目的体系改进假设(即使还没验证)
回传方法:
- 每条洞察单独调用一次
report_envoy_return:kind(template_bug / validated_practice / workflow_hypothesis)、confidence、scope(this_project / all_projects / project_type:<类型>,按复现范围填)、content(一句话写清现象和证据)、suggestion(fix_template / update_convention / log_for_review)、client(claude=Claude Code,codex=Codex,dsh=DeepSeek Harness,其他填 other)。项目地址已绑定project_id,可以省略;只连到全局地址时,显式传.lian-jing/context.json里的project_id。 - 只有能说出至少一条具体代价或验证结果(如「返工 2 轮」「在 X 场景实测有效」)时,
confidence才填confirmed;否则填under_validation。 - 不得写入凭据、密钥、账号、内网地址或生产数据:回传内容会同时写进本项目的
.blueprint/notes-archive.jsonl,随项目进入 Git。 - 同一会话里已经回传过的洞察,不要换个说法再报一次。把返回的编号
#note_id写进给用户的总结,例如「已回传炼境 N 条(#编号)」。 - 子项目只回传、不处置:
resolve_envoy_return、list_envoy_returns属于炼境控制面会话,即使在工具列表里看到也不要调用。 - 工具列表里没有
report_envoy_return时,按下方降级顺序排查。仍不可用,就把待回传内容按上述字段整理成文本交给用户,由用户转交炼境会话;不要改用append_project_note等其他写入工具代替。
如果 MCP 未出现,按以下顺序降级,不猜测状态:
configured:确认当前客户端的lian-jing指向http://127.0.0.1:<port>/mcp/projects/<canonical project_id>——Codex 看项目.codex/config.toml,Claude Code 看~/.claude.json中本项目的 local 条目(优先于 user 级全局条目),DSH 看~/.dsh/cordis.patch.yml。缺失或仍指向全局/mcp时通过炼境重新inject_mcp,手工同名 server 不覆盖。reachable:配置正确后检查 loopback 服务;连接拒绝表示炼境未运行,先启动正式安装版并保持托盘进程。reload:服务可达但当前会话看不到工具时,新建会话或重载客户端;不要反复改配置或复制凭证。- 仍不可用时,明确报告停在哪一层,继续完成不依赖 MCP 的本地工作;不得伪造诊断、项目 ID、凭证或远端状态。