chore(onboarding): 完成炼境自身 Codex 接入
建立 canonical project context、Codex MCP 配置、项目级炼境 skill 与能力包版本记录,并补齐蓝图任务和复盘证据。 Rules-Applied: R03,R10,R13
This commit is contained in:
parent
28e65b3d1c
commit
b6d7490254
19
.agents/skills/lian-jing/SKILL.md
Normal file
19
.agents/skills/lian-jing/SKILL.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
name: lian-jing
|
||||||
|
description: 读取炼境项目健康状态,并使用炼境 MCP 的项目管理、Gitea 与交付能力。
|
||||||
|
---
|
||||||
|
|
||||||
|
# 炼境项目技能
|
||||||
|
|
||||||
|
开始项目工作时,先读取根 `AGENTS.md` 与 `.lian-jing/context.json` 取得 `project_id`。`.claude/liangjing.json` 仅为旧项目的 Claude 兼容投影,不能作为长期身份来源。
|
||||||
|
|
||||||
|
如果当前客户端已发现 `lian-jing` MCP:
|
||||||
|
|
||||||
|
1. 所有 MCP 调用显式传入 `project_id`。
|
||||||
|
2. 优先调用 `get_diagnostics`,将其作为当前项目健康状态的事实来源。
|
||||||
|
3. 在 Node/pnpm 项目运行包管理命令前调用 `get_toolchain_status(project_id)`;`ready_managed` 时通过 `mise exec -- pnpm ...` 执行,其他状态先报告实际版本与 executable 证据。
|
||||||
|
4. 只有用户明确确认本次下载安装后,才可调用 `prepare_toolchain(project_id, confirmed=true)`;不得为适配客户端 bundled runtime 而修改项目版本或 lockfile。
|
||||||
|
5. 交付、Gitea、CI、蓝图等平台状态优先通过 MCP 查询,不凭静态文档猜测。
|
||||||
|
6. 合并 PR 前调用 `get_delivery_status(project_id)`,向用户展示 PR 编号、完整 head SHA、CI 与 review。只有当前用户明确确认该 PR 与 SHA 后,才调用 `merge_pull_request(project_id, pr_number, expected_head_sha, confirmed=true)`;合并后再次读取交付状态。不得自行推断确认。
|
||||||
|
|
||||||
|
如果 MCP 未出现,说明 Codex 项目配置尚未被加载、项目未被信任,或炼境未运行。说明该限制后继续完成不依赖 MCP 的本地工作;不得伪造诊断结果。
|
||||||
@ -457,7 +457,7 @@ modules:
|
|||||||
area: infra
|
area: infra
|
||||||
status: in_progress
|
status: in_progress
|
||||||
progress: 14
|
progress: 14
|
||||||
note: "P1 与 P3-A 已完成:Gitea 1.22.6 真实 deployment context/时间/URL/SHA 已归一化,并修复 skipped-as-success 误判;P3-B~E 待执行。首轮只交付 MCP 闭环,不建 staging、不开放 SSH/部署/回滚写操作,UI 待 2~4 周收益观测后决定。"
|
note: "P1、P3-A 与 P3-S1 已完成:交付状态聚合、Gitea 1.22.6 deployment signal 归一化及炼境自身 Codex 接入均已闭环;P3-S2 安全合并门禁已实现并通过本地/MCP 负向验证,待新 PR 的 CI 与用户针对具体 SHA 确认后完成正向合并验收。P3-B~E 待执行;首轮不开放 SSH/部署/回滚写操作。"
|
||||||
position: [2000, 800]
|
position: [2000, 800]
|
||||||
|
|
||||||
- id: agent-client-capability-packs
|
- id: agent-client-capability-packs
|
||||||
|
|||||||
@ -309,6 +309,20 @@ v1 不新增 deployment history 表。最近部署时间和过程状态来自 Gi
|
|||||||
- acceptance: "[cargo test] 使用脱敏后的真实 Gitea 1.22 `/statuses/{sha}` payload 运行 deployment signal 归一化测试 → success/pending/failure、context、updated_at、target_url 与目标 SHA 均被保留,无关 CI context 不得误判为部署;若真实 payload 不含独立 deploy signal,则由既有 workflow 发布稳定 context 后用同一测试通过。"
|
- acceptance: "[cargo test] 使用脱敏后的真实 Gitea 1.22 `/statuses/{sha}` payload 运行 deployment signal 归一化测试 → success/pending/failure、context、updated_at、target_url 与目标 SHA 均被保留,无关 CI context 不得误判为部署;若真实 payload 不含独立 deploy signal,则由既有 workflow 发布稳定 context 后用同一测试通过。"
|
||||||
- done_note: "2026-09-22:通过炼境 MCP 实证 Gitea 1.22.6 为 run #525/#529 发布独立 context,API 为 `CI — DeepSeek Agent / deploy-api (push)`;保留 target SHA、target_url、created_at/updated_at,并发现/修复 skipped job 被编码为 status=success + description=Has been skipped 的误判风险。既有 workflow 无需修改;cargo test --lib 全量通过,实机 get_delivery_status 已将 run #529 deploy-api/deploy-web 正确归一化为 skipped。"
|
- done_note: "2026-09-22:通过炼境 MCP 实证 Gitea 1.22.6 为 run #525/#529 发布独立 context,API 为 `CI — DeepSeek Agent / deploy-api (push)`;保留 target SHA、target_url、created_at/updated_at,并发现/修复 skipped job 被编码为 status=success + description=Has been skipped 的误判风险。既有 workflow 无需修改;cargo test --lib 全量通过,实机 get_delivery_status 已将 run #529 deploy-api/deploy-web 正确归一化为 skipped。"
|
||||||
|
|
||||||
|
### ✅ P3-S1. 炼境自身 Codex 接入闭环
|
||||||
|
- status: done
|
||||||
|
- complexity: M
|
||||||
|
- files: AGENTS.md, .claude/commands/envoy.md, .agents/skills/lian-jing/SKILL.md, .codex/config.toml, .lian-jing/context.json, .lian-jing/capability-packs.json
|
||||||
|
- acceptance: "agent_verify: [MCP] `get_diagnostics()` 返回本地服务状态;`verify_onboarding(dev-manager-tauri)` → canonical context、Codex skill、MCP 与能力包全部 ready;`get_delivery_status(dev-manager-tauri)` → 能读取 PR #13 的 SHA、CI 与 review。不得从旧 `.claude/liangjing.json` 猜测身份或提取 Gitea token。"
|
||||||
|
- done_note: "2026-09-22:通过既有 inject_mcp 迁移旧上下文,apply_onboarding_pack 升级托管基线,verify_onboarding 11/11;经 MCP 实测读取 PR #13(SHA 0141b8b、CI passed),用户确认后由 merge_pull_request 合并,合并后开放 PR 状态为 none。当前 Codex 任务不支持热加载新 MCP 配置,原生客户端发现留待新任务验证。"
|
||||||
|
|
||||||
|
### 🔵 P3-S2. Agent PR 合并安全门禁
|
||||||
|
- status: in_progress
|
||||||
|
- complexity: M
|
||||||
|
- depends: P3-S1. 炼境自身 Codex 接入闭环
|
||||||
|
- files: src-tauri/src/commands/gitea.rs, src-tauri/src/mcp_tools.rs, docs/ai-context/git-workflow.md, src-tauri/resources/onboarding/git-workflow.md.tmpl, src-tauri/resources/onboarding/.agents/skills/lian-jing/SKILL.md, src-tauri/resources/onboarding/.lian-jing/capability-packs.json, plugins/lian-jing-codex/skills/lian-jing/SKILL.md
|
||||||
|
- acceptance: "agent_verify: [cargo test] `merge_pull_request` 在 confirmed=false、expected_head_sha 与远端不一致、PR 非 open、CI pending/failure 或 review changes_requested 时拒绝且不执行 merge;仅在 PR open、SHA 一致、CI passed、无阻塞 review 且 confirmed=true 时允许执行;[MCP schema] confirmed 与 expected_head_sha 均为必填;合并后重新调用 get_delivery_status 可读取真实结果。"
|
||||||
|
|
||||||
### 📋 P3-B. Enterprise System 不可变 revision 与版本健康端点
|
### 📋 P3-B. Enterprise System 不可变 revision 与版本健康端点
|
||||||
- status: todo
|
- status: todo
|
||||||
- complexity: M
|
- complexity: M
|
||||||
|
|||||||
@ -19,3 +19,4 @@
|
|||||||
{"content":"【炼境使者回传】来源: dev-manager-tauri(炼境自身)\n类型: validated_practice\n置信度: confirmed\n影响范围: all_projects\n内容: 任务卡动工前做多角度辩证收缩实测显著降返工——3 张初稿卡辩证后 1 张否决(自动触发伤择)、1 张载体翻转(hook→ingest 层)、1 张补两处设计缺陷,直做会错 2/3;实施后 U3/B4 零返工、U1 仅一轮实调返工\n建议炼境: update_convention","created_at":"2026-07-15 23:16:03","id":92,"project_id":"2c5b54ef-5570-42ab-8c41-8ed1e2cd21dc","source":"mcp"}
|
{"content":"【炼境使者回传】来源: dev-manager-tauri(炼境自身)\n类型: validated_practice\n置信度: confirmed\n影响范围: all_projects\n内容: 任务卡动工前做多角度辩证收缩实测显著降返工——3 张初稿卡辩证后 1 张否决(自动触发伤择)、1 张载体翻转(hook→ingest 层)、1 张补两处设计缺陷,直做会错 2/3;实施后 U3/B4 零返工、U1 仅一轮实调返工\n建议炼境: update_convention","created_at":"2026-07-15 23:16:03","id":92,"project_id":"2c5b54ef-5570-42ab-8c41-8ed1e2cd21dc","source":"mcp"}
|
||||||
{"content":"【炼境使者回传】来源: dev-manager-tauri(炼境自身)\n类型: workflow_hypothesis\n置信度: under_validation\n影响范围: all_projects\n内容: verify_onboarding「lefthook 检查段」按键名匹配是名义匹配非语义匹配——等价功能不同键名(如 scripts 老写法、项目自定义键)会被误报缺失;enterprise-system 6/7 的 fail 尚未核实是缺失还是改名定制\n建议炼境: log_for_review","created_at":"2026-07-15 23:16:07","id":93,"project_id":"2c5b54ef-5570-42ab-8c41-8ed1e2cd21dc","source":"mcp"}
|
{"content":"【炼境使者回传】来源: dev-manager-tauri(炼境自身)\n类型: workflow_hypothesis\n置信度: under_validation\n影响范围: all_projects\n内容: verify_onboarding「lefthook 检查段」按键名匹配是名义匹配非语义匹配——等价功能不同键名(如 scripts 老写法、项目自定义键)会被误报缺失;enterprise-system 6/7 的 fail 尚未核实是缺失还是改名定制\n建议炼境: log_for_review","created_at":"2026-07-15 23:16:07","id":93,"project_id":"2c5b54ef-5570-42ab-8c41-8ed1e2cd21dc","source":"mcp"}
|
||||||
{"content":"【复盘】notes 档案分片双写 + backfill 自愈(governance-feedback-loop 缺口①地基)\n任务类型: MCP工具\n复杂度: M\n实际轮数: 1轮(预估1-2轮)\n是否返工: 否\n有效策略: 动工前辩证翻转归宿设计(集中式→按项目分片),翻转依据全部来自侦察事实(安装态进程定位不了炼境仓库/usage.json 先例本就 per-project/可拆除性按项目成立);实现前把 project_root 重构出 DI 版而非复制 WSL 转换逻辑,单一实现;三个测试对着 acceptance 逐条写(双写匹配/回填幂等+死登记跳过/并发不交错),110 全绿一次过;PR #5 CI 双侧绿后 MCP 合并\n遗留风险: MCP 实调(append 双写 + backfill 存量落盘)待重建安装后终验——本条笔记即终验样本(重建后跑 backfill_notes_archive,应出现在 dev-manager-tauri/.blueprint/notes-archive.jsonl 尾部);WSL 项目分片路径未真机验;子项目档案文件的 git 收编节奏未约定(沿 usage.json 惯例)\n附带产出: /ship 体检实补3处(push 提前信号/新文件占比口径/机械阈值归 lint);/envoy 体检零改动收官——两项均早已消化,沉淀教训「分诊定态前先核实目标文件现状」","created_at":"2026-09-11 22:27:48","id":164,"project_id":"dev-manager-tauri","source":"mcp"}
|
{"content":"【复盘】notes 档案分片双写 + backfill 自愈(governance-feedback-loop 缺口①地基)\n任务类型: MCP工具\n复杂度: M\n实际轮数: 1轮(预估1-2轮)\n是否返工: 否\n有效策略: 动工前辩证翻转归宿设计(集中式→按项目分片),翻转依据全部来自侦察事实(安装态进程定位不了炼境仓库/usage.json 先例本就 per-project/可拆除性按项目成立);实现前把 project_root 重构出 DI 版而非复制 WSL 转换逻辑,单一实现;三个测试对着 acceptance 逐条写(双写匹配/回填幂等+死登记跳过/并发不交错),110 全绿一次过;PR #5 CI 双侧绿后 MCP 合并\n遗留风险: MCP 实调(append 双写 + backfill 存量落盘)待重建安装后终验——本条笔记即终验样本(重建后跑 backfill_notes_archive,应出现在 dev-manager-tauri/.blueprint/notes-archive.jsonl 尾部);WSL 项目分片路径未真机验;子项目档案文件的 git 收编节奏未约定(沿 usage.json 惯例)\n附带产出: /ship 体检实补3处(push 提前信号/新文件占比口径/机械阈值归 lint);/envoy 体检零改动收官——两项均早已消化,沉淀教训「分诊定态前先核实目标文件现状」","created_at":"2026-09-11 22:27:48","id":164,"project_id":"dev-manager-tauri","source":"mcp"}
|
||||||
|
{"content":"【复盘】P3-S1 炼境自身 Codex 接入闭环\n任务类型: MCP工具\n复杂度: M\n实际轮数: 2轮(预估2轮)\n是否返工: 否\n有效策略: 先由 inject_mcp 建立工具无关 canonical context,再由 apply_onboarding_pack 分发版本化能力包;最终通过 verify_onboarding 11/11 与 get_delivery_status 实机调用验证,未读取或复制 Gitea token。\n遗留风险: 当前 Codex 任务不能热加载新 MCP 配置,需在新任务验证原生工具发现;个人 marketplace 指向的 lian-jing-codex 源目录缺失,仓库插件源码已更新但本机插件缓存尚未刷新。\nauto_applied_rules: R10,R13\nrule_effectiveness: R10=有效,R13=有效","created_at":"2026-09-22 21:08:45","id":175,"project_id":"dev-manager-tauri","source":"mcp"}
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
在子项目会话结束时扫描体系级洞察、回传给炼境。Use at the end of a session in a managed project.
|
||||||
|
|
||||||
<!-- 由炼境托管:重跑接入包会用最新模板覆盖本文件,请勿在此做项目定制 -->
|
<!-- 由炼境托管:重跑接入包会用最新模板覆盖本文件,请勿在此做项目定制 -->
|
||||||
|
|
||||||
你是**炼境使者**——在子项目会话里代表炼境执行现场感知与回传。
|
你是**炼境使者**——在子项目会话里代表炼境执行现场感知与回传。
|
||||||
|
|||||||
4
.codex/config.toml
Normal file
4
.codex/config.toml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# LIANJING_MCP_MANAGED_START
|
||||||
|
[mcp_servers.lian-jing]
|
||||||
|
url = "http://127.0.0.1:27190/mcp"
|
||||||
|
# LIANJING_MCP_MANAGED_END
|
||||||
29
.lian-jing/capability-packs.json
Normal file
29
.lian-jing/capability-packs.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"schema_version": 1,
|
||||||
|
"packs": [
|
||||||
|
{
|
||||||
|
"pack_id": "base-onboarding",
|
||||||
|
"version": "1.3.0",
|
||||||
|
"supported_clients": ["codex", "claude"],
|
||||||
|
"project_artifacts": [
|
||||||
|
"AGENTS.md",
|
||||||
|
".agents/skills/lian-jing/SKILL.md",
|
||||||
|
".lian-jing/context.json"
|
||||||
|
],
|
||||||
|
"self_check": "verify_onboarding",
|
||||||
|
"upgrade_hint": "调用 apply_onboarding_pack(project_id) 更新版本化基线;项目身份上下文由 inject_mcp(project_id) 创建或迁移。该升级仅覆盖炼境托管的接入包文件,不覆盖项目定制或手工 MCP 配置。"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pack_id": "toolchain-node-pnpm",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"supported_clients": ["codex", "claude", "human-shell"],
|
||||||
|
"project_artifacts": [
|
||||||
|
".nvmrc",
|
||||||
|
"package.json#packageManager",
|
||||||
|
"mise.toml"
|
||||||
|
],
|
||||||
|
"self_check": "get_toolchain_status",
|
||||||
|
"upgrade_hint": "重跑 apply_onboarding_pack(project_id) 可为已声明 .nvmrc 与 pnpm packageManager 的项目补充分离版本事实的最小 mise resolver;已有 mise.toml 永不覆盖。"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
.lian-jing/context.json
Normal file
4
.lian-jing/context.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"project_id": "dev-manager-tauri",
|
||||||
|
"schema_version": 1
|
||||||
|
}
|
||||||
18
AGENTS.md
18
AGENTS.md
@ -100,7 +100,7 @@ docs/templates/ 炼境接入包模板草案(设计层)
|
|||||||
- [ ] `src/lib/commands.ts` 的封装覆盖了所有 `src-tauri/src/commands/` 下的 command 吗?
|
- [ ] `src/lib/commands.ts` 的封装覆盖了所有 `src-tauri/src/commands/` 下的 command 吗?
|
||||||
- [ ] 接入包模板(`resources/onboarding/`)和 `docs/templates/` 内容一致吗?
|
- [ ] 接入包模板(`resources/onboarding/`)和 `docs/templates/` 内容一致吗?
|
||||||
|
|
||||||
<!-- BLUEPRINT_MANAGED_START version="1.11.0" -->
|
<!-- BLUEPRINT_MANAGED_START version="1.12.0" -->
|
||||||
## 项目蓝图
|
## 项目蓝图
|
||||||
|
|
||||||
本项目使用 `.blueprint/` 目录维护项目全景架构图,驱动需求讨论和任务管理。
|
本项目使用 `.blueprint/` 目录维护项目全景架构图,驱动需求讨论和任务管理。
|
||||||
@ -138,7 +138,7 @@ docs/templates/ 炼境接入包模板草案(设计层)
|
|||||||
完整规则(迭代管理、阻塞处理、复盘笔记等)详见 `.blueprint/CONVENTIONS.md`。
|
完整规则(迭代管理、阻塞处理、复盘笔记等)详见 `.blueprint/CONVENTIONS.md`。
|
||||||
<!-- BLUEPRINT_MANAGED_END -->
|
<!-- BLUEPRINT_MANAGED_END -->
|
||||||
|
|
||||||
<!-- ONBOARDING_MANAGED_START version="1.7.0" -->
|
<!-- ONBOARDING_MANAGED_START version="1.9.0" -->
|
||||||
> ⚠️ 本块由炼境版本化托管,升级时**整块原位覆盖**——项目定制请写到块外,块内手改必丢(2026-07-15 炼境自身实锤丢失 5 段定制后新增本警示)。
|
> ⚠️ 本块由炼境版本化托管,升级时**整块原位覆盖**——项目定制请写到块外,块内手改必丢(2026-07-15 炼境自身实锤丢失 5 段定制后新增本警示)。
|
||||||
|
|
||||||
## 核心开发约束
|
## 核心开发约束
|
||||||
@ -186,6 +186,20 @@ docs/templates/ 炼境接入包模板草案(设计层)
|
|||||||
见 `docs/ai-context/git-workflow.md`(分支策略 + Conventional Commits + Rules-Applied trailer + PR 规范)。
|
见 `docs/ai-context/git-workflow.md`(分支策略 + Conventional Commits + Rules-Applied trailer + PR 规范)。
|
||||||
**commit 必须符合 Conventional Commits**(lefthook 强制),炼境据此采集飞轮数据。
|
**commit 必须符合 Conventional Commits**(lefthook 强制),炼境据此采集飞轮数据。
|
||||||
|
|
||||||
|
## 炼境项目上下文与能力包
|
||||||
|
|
||||||
|
- `.lian-jing/context.json` 是项目 `project_id` 的工具无关单一事实来源;不要从客户端项目 UI、用户级插件或全局配置推断项目身份。
|
||||||
|
- `.claude/liangjing.json` 只是旧项目的 Claude 兼容投影。只发现它时,调用 `inject_mcp(project_id)` 迁移,而不是手工复制或猜测 ID。
|
||||||
|
- `.lian-jing/capability-packs.json` 记录炼境托管基线的版本。`verify_onboarding(project_id)` 报告 `legacy`、`version_mismatch` 等状态时,按其 `detail` 中的升级提示处理。
|
||||||
|
- `apply_onboarding_pack(project_id)` 只更新炼境明确托管的接入包文件;项目自己的业务规则、测试、部署声明和手工定义的同名 MCP server 仍归项目所有,不能被升级覆盖。
|
||||||
|
|
||||||
|
### Node/pnpm 工具链
|
||||||
|
|
||||||
|
- Node 精确版本以 `.nvmrc` 为事实源,pnpm 精确版本以 `package.json#packageManager` 为事实源;不要追随 IDE、Codex 或全局 PATH 的 bundled runtime。
|
||||||
|
- Node+pnpm 项目由炼境分发最小 `mise.toml`,只启用上述标准声明,不重复保存版本;已有手写 `mise.toml` 永不覆盖。
|
||||||
|
- 开始运行 pnpm 命令前调用 `get_toolchain_status(project_id)`。返回 `ready_managed` 时使用 `mise exec -- pnpm ...`;`mismatch/conflict/unavailable` 时先报告证据。
|
||||||
|
- `prepare_toolchain(project_id, confirmed=true)` 会下载/安装项目声明版本,只有用户明确确认本次机器状态变更后才能调用;不得为消除告警而修改项目版本或 lockfile。
|
||||||
|
|
||||||
## agent 按钮与验证路径
|
## agent 按钮与验证路径
|
||||||
|
|
||||||
功能的本体是代码层的能力;UI 按钮是它给人的投影,**agent 按钮**是给 agent 的投影
|
功能的本体是代码层的能力;UI 按钮是它给人的投影,**agent 按钮**是给 agent 的投影
|
||||||
|
|||||||
@ -47,7 +47,7 @@ docs/templates/ 炼境接入包模板草案(agents-meta-rules
|
|||||||
- 代码重构/简化:/simplify → /code-review
|
- 代码重构/简化:/simplify → /code-review
|
||||||
- 发现深层问题:/Dev-deep-think
|
- 发现深层问题:/Dev-deep-think
|
||||||
|
|
||||||
<!-- BLUEPRINT_MANAGED_START version="1.11.0" -->
|
<!-- BLUEPRINT_MANAGED_START version="1.12.0" -->
|
||||||
## 项目蓝图
|
## 项目蓝图
|
||||||
|
|
||||||
蓝图工作流规则统一维护在 @AGENTS.md 的 BLUEPRINT_MANAGED 区(跨工具单一来源,勿在此复制)。
|
蓝图工作流规则统一维护在 @AGENTS.md 的 BLUEPRINT_MANAGED 区(跨工具单一来源,勿在此复制)。
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user