feat(onboarding/parity): 接入包改写托管块前检测块外未提交改动,给出混合文件预警(P10) #29
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/agent-client-parity-p10"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
目标
蓝图 agent-client-parity 的 P10(S 级):apply_onboarding_pack 往带有项目未提交改动的文件里升级炼境托管块时,会制造「同一文件混有炼境与项目两种来源改动」的混合文件(2026-10-01 enterprise 的 git-workflow.md 即此例),按「禁止字符串手术」无法拆分提交。本 PR 让接入包在这种情况下对该文件给出明确预警;默认仍只改托管块、不改块外内容。
改动
TemplateResult新增可选warning(缺省时不序列化;src/lib/commands.ts同步为warning?: string)。apply_onboarding_pack在模板分发与 buff 蓝图规则同步前后夹一层检测(dispatch_templates_with_mixed_file_check):AGENTS.md、docs/ai-context/git-workflow.md、CLAUDE.md跑git --no-optional-locks status --porcelain --untracked-files=all -- <文件>;有改动再取git show HEAD:./<文件>(不在 HEAD 中按空内容算:未跟踪、仅暂存、尚无提交)。BLUEPRINT_MANAGED标记提为blueprint.rs的pub(crate)常量,检测与 upsert 共用。apply_onboarding_pack:单项目输出在该文件行下加 ⚠️ 行,批量输出追加混合文件清单;工具描述同步。docs/ai-context/project-context.yaml契约说明同步;蓝图 P10 标 ✅,记录验证与已知限制;manifest 进度 50→55。自验
cargo test --locked(src-tauri):lib 270 passed / 5 ignored / 0 failed。outside_managed_content_strips_blocks_and_ignores_eol_and_blank_lines:纯函数,剔除两种块、忽略 CRLF 与空行、不在 HEAD 时有块外内容才算、残缺块按块外处理。mixed_file_warning_only_for_uncommitted_changes_outside_managed_blocks:临时 git 仓库,走与 apply 相同的检测夹层 + 真实sync_blueprint_rules。git-workflow.md 块外未提交改写 →updated且带预警,块外改写原样保留,托管块升到模板版本;未跟踪 CLAUDE.md 含项目内容 → 补appended结果并预警;与 HEAD 一致的 AGENTS.md 照常升级、无预警;全部提交后只改托管块版本并整体转 CRLF → 升级且全部无预警、不补 CLAUDE.md 行。mixed_file_warning_is_silent_outside_git:非 git 目录升级无预警(--nocapture确认没有走「临时目录在仓库内」的跳过分支)。pnpm typecheck通过;pnpm test(vitest)16 passed;lefthook pre-commit / commit-msg 通过;.gitea/scripts/check-commit-msg.mjs本地通过。没验什么
🤖 Generated with Claude Code
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>