Skip to content

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

Open
Casper-Mars wants to merge 2 commits into
Terry-Mao:mainfrom
Casper-Mars:task/w_01M6J6HY9W7DW3CYVWGG4HP6P2
Open

Casper-Mars wants to merge 2 commits into
Terry-Mao:mainfrom
Casper-Mars:task/w_01M6J6HY9W7DW3CYVWGG4HP6P2

Conversation

@Casper-Mars

Copy link
Copy Markdown

Fixes #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

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

Risk

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

How to revert

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


说明:项目分支 feature/AICF-1 只存在于本人 fork(对原仓库无 push 权限,无法在上游创建该分支),因此本 PR 的 base 取上游 main;Fixes #334 会在合并时关闭对应 issue。

原因: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
@Terry-Mao

Copy link
Copy Markdown
Owner

@kratos-ci-bot /review

This branch has not been deployed

No deployments
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.

bug: PR 正文校验会拒绝合法的 Markdown 二级标题写法

2 participants