fix: 修复 P2 三处 Bug

1. get_blueprint_status 对比 effective_conventions_version() 而非
   master_conventions_version(),避免用户版 CONVENTIONS 生效后治理面板
   永远显示「待更新」
2. sync_blueprint_rules 成功消息改用 effective_conventions_version()
3. parse_frontmatter_version_str 修正 break 条件,正确限定在 frontmatter
   范围内解析,防止文档正文中的 version: 行被误匹配
This commit is contained in:
lanrtop 2026-04-08 04:00:40 +09:00
parent 7a81222686
commit f1cecd1601

View File

@ -72,12 +72,14 @@ pub(crate) fn effective_conventions_version() -> String {
/// 从字符串内容解析 frontmatter version 字段。
fn parse_frontmatter_version_str(content: &str) -> Option<String> {
for line in content.lines() {
let mut lines = content.lines();
// 必须以 --- 开头才进入 frontmatter 模式
if lines.next()?.trim() != "---" { return None; }
for line in lines {
if line.trim() == "---" { break; } // 遇到关闭 --- 停止
if let Some(v) = line.strip_prefix("version: ") {
return Some(v.trim().to_string());
}
// frontmatter 结束标志(第二个 ---
if line == "---" && !content.starts_with("---\n") { break; }
}
None
}
@ -1001,10 +1003,11 @@ pub fn get_blueprint_status(project_path: String) -> Result<BlueprintStatus, Str
// 读取 manifest updated 日期
let manifest_updated = read_manifest_updated(&bp_dir.join("manifest.yaml"));
// 判断状态
let rules_current = conventions_version.as_deref() == Some(master_conventions_version())
// 判断状态对比当前生效版本用户版优先fallback 内置)
let effective_ver = effective_conventions_version();
let rules_current = conventions_version.as_deref() == Some(effective_ver.as_str())
&& claude_md_managed
&& claude_md_version.as_deref() == Some(master_conventions_version());
&& claude_md_version.as_deref() == Some(effective_ver.as_str());
let status = if !rules_current {
"rules_outdated".to_string()
@ -1020,7 +1023,7 @@ pub fn get_blueprint_status(project_path: String) -> Result<BlueprintStatus, Str
claude_md_managed,
claude_md_version,
manifest_updated,
master_version: master_conventions_version().to_string(),
master_version: effective_ver,
})
}
@ -1078,7 +1081,7 @@ pub fn sync_blueprint_rules(project_path: String) -> Result<SyncResult, String>
success: true,
conventions_written: true,
claude_md_action: claude_action.clone(),
message: format!("CONVENTIONS.md 已同步至 v{}CLAUDE.md {claude_action}", master_conventions_version()),
message: format!("CONVENTIONS.md 已同步至 v{}CLAUDE.md {claude_action}", effective_conventions_version()),
})
}