Skip to content

fix(pr-body): 识别 CommonMark 合法 H2 写法 (#334) - #1

Closed
Casper-Mars wants to merge 1 commit into
feature/AICF-1from
task/w_01M6J6HY9W7DW3CYVWGG4HP6P2
Closed

Casper-Mars wants to merge 1 commit into
feature/AICF-1from
task/w_01M6J6HY9W7DW3CYVWGG4HP6P2

Conversation

@Casper-Mars

Copy link
Copy Markdown
Owner

Fixes Terry-Mao#334

Summary

validate_pr_body.py 的二级标题正则只接受 ^##[ \t]+…$,既不接受 CommonMark 允许的 0–3 前导空格,也不剥离 ATX 闭合井号。四章齐全但写成 ## Summary ## / ## Summary 的 PR 正文因此被判缺章,create-pr 无法创建或更新 PR。

  • HEADING 改为 ^ {0,3}##[ \t]+(.+?)[ \t]*$;
  • 新增 normalize_heading():仅在「空白 + 一个或多个 # 位于行尾」时剥离闭合井号,## C# 仍是 c#,## Summary ## 补充 仍是 summary ## 补充;
  • fence / HTML 注释屏蔽逻辑一行未改,只在未被屏蔽的行上识别标题;
  • 测试补 3 个正向用例(## Summary、## Summary ##、 ## Summary)与 3 个负向守卫(4 空格缩进、### Summary、##Summary),另加 1 条闭合井号边界用例;既有 9 个用例全部保留。

Testing

环境:python:3.12-slim(Python 3.12.16,与 CI python-version: '3.12' 一致)。

$ python3 -m unittest discover -s .github/aicodingflow-tests
exit 0  → Ran 533 tests … OK

$ python3 -m unittest discover -s .github/aicodingflow-tests -p 'test_validate_pr_body.py' -v
exit 0  → Ran 16 tests … OK(9 既有 + 7 新增)

$ python3 -m unittest discover -s .github/tests
exit 0  → Ran 14 tests … OK (skipped=12)

$ PYTHONPYCACHEPREFIX=/tmp/pyc python3 -m py_compile .github/scripts/*.py
exit 0

既有校验入口端到端(## Summary ## 四章正文):

$ python3 .github/scripts/validate_pr_body.py /tmp/body_ok.md        # H2 带闭合井号
exit 0
$ python3 .github/scripts/validate_pr_body.py /tmp/body_indent.md    # H2 带 3 空格缩进
exit 0
$ python3 .github/scripts/validate_pr_body.py /tmp/body_missing_risk.md
exit 1  → PR body needs non-empty sections: Risk

# 对照组:同一份正文用 base 上的旧脚本
$ python3 /tmp/orig_validate.py /tmp/body_ok.md
exit 1  → PR body needs non-empty sections: Summary, Testing, Risk, How to revert
$ python3 /tmp/orig_validate.py /tmp/body_indent.md
exit 1  → PR body needs non-empty sections: Summary, Testing, Risk, How to revert

即 Terry-Mao#334 的复现条件在旧脚本 exit 1、新脚本 exit 0。

Risk

  • 正则放宽只影响标题识别,必需章节集合、fence / 注释语义均未变,向后兼容;
  • 误剥闭合井号的风险由「空白 + 行尾 #」限定并用 ## C# 用例锁定;
  • 未在 GitHub Actions 上实跑(本 PR 的 CI 会覆盖)。

How to revert

Revert 本 PR 的 merge commit;无需数据或配置迁移。

原因:HEADING 正则不接受 0–3 前导空格、也不剥离 ATX 闭合井号,
`## Summary ##` 被解析成 `summary ##`、`   ## Summary` 完全不匹配,
四章齐全的正文被判缺章,create-pr 无法创建/更新 PR。

改动:
- HEADING 改为 `^ {0,3}##[ \t]+(.+?)[ \t]*$`
- 新增 normalize_heading:仅在「空白 + 行尾 #」时剥离闭合井号,`## C#` 仍是 `c#`
- fence / HTML 注释屏蔽逻辑未改
- 测试补 3 正 3 负,另加 1 条闭合井号不误剥

验证:python3 -m unittest discover -s .github/aicodingflow-tests → 533 tests OK
@Casper-Mars Casper-Mars closed this Nov 4, 2026
@Casper-Mars Casper-Mars reopened this Nov 4, 2026
@Casper-Mars

Copy link
Copy Markdown
Owner Author

已改为向上游 Terry-Mao/AICodingFlow 提跨仓 PR(Terry-Mao#339),此处关闭避免重复评审。

@Casper-Mars Casper-Mars closed this Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant