fix(cqrs): 修正恢复主线与评审提示

- 修复 cqrs-rewrite 跟踪文档的下次恢复建议,使当前主线阶段与 Phase 8 保持一致
- 补充 cqrs-rewrite trace,记录本次 PR review 复核结论与恢复点更新
- 优化 gframework-pr-review 输出,明确 open thread 中的 Addressed in commit 文案仍需本地验证
This commit is contained in:
GeWuYou 2026-04-19 11:39:21 +08:00
parent c44b0667b5
commit acd638e807
3 changed files with 42 additions and 1 deletions

View File

@ -25,6 +25,7 @@ GIT_ENVIRONMENT_KEY = "GFRAMEWORK_WINDOWS_GIT"
USER_AGENT = "codex-gframework-pr-review"
CODERABBIT_LOGIN = "coderabbitai[bot]"
REVIEW_COMMENT_ADDRESSED_MARKER = "<!-- <review_comment_addressed> -->"
VISIBLE_ADDRESSED_IN_COMMIT_PATTERN = re.compile(r"\s*Addressed in commit\s+[0-9a-f]{7,40}", re.I)
DEFAULT_REQUEST_TIMEOUT_SECONDS = 60
REQUEST_TIMEOUT_ENVIRONMENT_KEY = "GFRAMEWORK_PR_REVIEW_TIMEOUT_SECONDS"
@ -359,6 +360,10 @@ def classify_review_thread_status(latest_comment: dict[str, Any]) -> str:
return "open"
def contains_visible_addressed_commit_text(body: str) -> bool:
return bool(VISIBLE_ADDRESSED_IN_COMMIT_PATTERN.search(body))
def build_latest_commit_review_threads(comments: list[dict[str, Any]]) -> list[dict[str, Any]]:
comment_threads: dict[int, dict[str, Any]] = {}
@ -557,6 +562,12 @@ def format_text(result: dict[str, Any]) -> str:
lines.append(f" Root by {root_comment['user']}: {collapse_whitespace(root_comment['body'])}")
if latest_comment["id"] != root_comment["id"]:
lines.append(f" Latest by {latest_comment['user']}: {collapse_whitespace(latest_comment['body'])}")
if contains_visible_addressed_commit_text(root_comment["body"]) or contains_visible_addressed_commit_text(
latest_comment["body"]
):
lines.append(
" Note: thread is still open; treat the visible 'Addressed in commit ...' text as unverified until local code matches."
)
lines.append("")
lines.append(f"Test reports: {len(result['test_reports'])}")

View File

@ -470,7 +470,7 @@
1. 查看 `ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md`
2. 确认当前恢复点 `CQRS-REWRITE-RP-042` 已对应到最新提交
3. 优先继续执行 `ai-plan/migration/CQRS_MODULE_SPLIT_PLAN.md` 中的 Phase 7
3. 优先继续执行 `ai-plan/migration/CQRS_MODULE_SPLIT_PLAN.md` 中的 Phase 8当前主线
- 先决定是否正式支持旧 `GFramework.Core.Abstractions.Cqrs*` / `GFramework.Core.Cqrs.Extensions` public namespace 兼容,还是明确要求消费端迁到当前 `GFramework.Cqrs*` 路径
- 再评估 `CqrsCoroutineExtensions` 是否保留在 `GFramework.Core`,或连同所需协程辅助一起形成更小的可迁移边界
4. 在 runtime 项目真正承接实现后,再处理 source-generator、meta package 与消费端 transitive 依赖的迁移

View File

@ -1412,3 +1412,33 @@
1. 若继续沿用当前 PR 驱动修复流程,可直接用 `$gframework-pr-review` 复查后续 PR 的 CodeRabbit 评论与测试状态
2. 若要验证本轮本地修正已经消除远端 latest head review threads需要在提交并推送当前分支后重新执行 `$gframework-pr-review`
## 2026-04-19
### 阶段PR review 复核与 FPR 输出澄清RP-043
- 建立 `CQRS-REWRITE-RP-043` 恢复点
- 复核 PR `#253` 时确认:
- `ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md` 的“下次恢复建议”仍把主线写成 `Phase 7`
- 这与 tracking 顶部当前阶段 `Phase 8` 不一致,恢复时会造成执行顺序歧义
- 进一步检查 `$gframework-pr-review` 脚本后确认:
- 该评论并非“未覆盖”,而是已出现在 latest head commit 的 open review threads 中
- 我先前误把评论正文里可见的 `Addressed in commit ...` 文案当成了“已经本地验证修复”
- 实际脚本只会在 CodeRabbit thread 带有隐藏 marker `<!-- <review_comment_addressed> -->` 时才将状态归类为 `addressed`
- 已据此完成两项修正:
- 将 tracking 中的恢复主线更新为 `Phase 8当前主线`
- 调整 `fetch_current_pr_review.py` 输出:当 open thread 里出现 `Addressed in commit ...` 文案但线程并未真正 closed/addressed 时,显式提示“仍需本地验证,不要视为已解决”
### 验证
- `sed -n '469,475p' ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md`
- 结果:通过
- 备注:恢复建议已切到 `Phase 8当前主线`
- `python3 -m py_compile .codex/skills/gframework-pr-review/scripts/fetch_current_pr_review.py`
- 结果:通过
- 备注:脚本语法正确
### 下一步
1. 推送当前分支后重新执行 `$gframework-pr-review`,确认 PR `#253` 的 latest head review threads 是否已收敛
2. 若后续仍保留 CodeRabbit 的 `Addressed in commit ...` 文案但 thread 继续 open优先以 latest thread 状态和本地文件事实为准,不再按文案字面判定