From c04d235acf4d6b3192a326765cde14c5d2f9eeb7 Mon Sep 17 00:00:00 2001 From: randypanding Date: Wed, 19 Aug 2026 03:43:47 +0000 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20governance-drift=20=E8=AF=84?= =?UTF-8?q?=E8=AE=BA=E6=8C=89=E6=BC=82=E7=A7=BB=E6=8C=87=E7=BA=B9=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E2=80=94=E2=80=94=E5=90=8C=E4=B8=80=E6=BC=82=E7=A7=BB?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E6=AF=8F=E6=97=A5=E9=87=8D=E5=A4=8D=E8=AF=84?= =?UTF-8?q?=E8=AE=BA=EF=BC=88=E7=BA=A2=E9=98=9F=20RB-B2=EF=BC=8CADR-0016?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 漂移指纹=报告 sha256,嵌入评论隐藏标记;新评论前查最近 10 条, 指纹已存在且漂移未变化则跳过。漂移内容变化=新指纹=新评论。 --- .github/workflows/governance-drift.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/governance-drift.yml b/.github/workflows/governance-drift.yml index 85915c6..7e3e8be 100644 --- a/.github/workflows/governance-drift.yml +++ b/.github/workflows/governance-drift.yml @@ -38,16 +38,27 @@ jobs: LABEL="auto-drift-report" gh label create "$LABEL" --repo "$REPO" --description "governance-drift 工作流自动报告(勿手工使用)" --color d73a4a >/dev/null 2>&1 || true EXISTING=$(gh issue list --repo "$REPO" --state open --label "$LABEL" --json number --jq 'length') + # 评论去重(红队 RB-B2,ADR-0016 决策 7):漂移指纹=报告内容 sha256。 + # 同一指纹只报一次——未变化的漂移不每日重复评论(防 issue 评论无限膨胀: + # 破玻璃未回填等长期漂移此前每日+1 评论);漂移内容变化=新指纹=新评论。 + FP=$(sha256sum drift-report.txt | cut -d' ' -f1) BODY="自动化检测发现以下漂移(运行 #${{ github.run_id }}): $(cat drift-report.txt) 修复方式:本地跑 \`bash governance/apply.sh\`,或手动改回后跑 \`bash governance/drift-check.sh\` 验证。 - @randypanding" + @randypanding + + " if [[ "$EXISTING" != "0" ]]; then NUM=$(gh issue list --repo "$REPO" --state open --label "$LABEL" --json number --jq '.[0].number') - gh issue comment "$NUM" --repo "$REPO" --body "$BODY" + RECENT=$(gh issue view "$NUM" --repo "$REPO" --json comments --jq '[.comments[].body] | .[-10:] | join("\n---\n")') + if grep -qF "drift-fingerprint: $FP" <<<"$RECENT"; then + echo "漂移指纹 $FP 已在 #$NUM 报告过且内容未变化,跳过重复评论(RB-B2 去重)" + else + gh issue comment "$NUM" --repo "$REPO" --body "$BODY" + fi else gh issue create --repo "$REPO" --title "$TITLE" --body "$BODY" --label "$LABEL" fi From 9514fa2979ff964b1778be2f567f24b5c6afa39d Mon Sep 17 00:00:00 2001 From: randypanding <66171646@users.noreply.github.com> Date: Wed, 19 Aug 2026 04:08:07 +0000 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E6=BC=82=E7=A7=BB=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E7=A8=B3=E5=AE=9A=E6=BC=82=E7=A7=BB=E9=9B=86?= =?UTF-8?q?=E5=90=88=E5=93=88=E5=B8=8C=EF=BC=88review=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit qodo 意见(High):对全量报告计算 sha256,但报告含每次运行都变的 字段——§8 回填时限秒数随时间增长、OK 行的检测窗口/commit 数随日期 漂移——同一未回填漂移每天得到新指纹,去重失效。 修复:指纹只取 DRIFT 行(OK 行是健康度波动非漂移语义)、归一化 "回填时限=NNNs"→"s"、排序去重后 sha256。语义集合不变则指纹 跨日恒定;漂移新增/消除/实质变化才产生新指纹触发新评论。 验证:同一漂移跨日(AGE 秒数/OK 窗口/commit 数全变)指纹不变; 漂移集变化(换 commit sha)指纹变化。 --- .github/workflows/governance-drift.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/governance-drift.yml b/.github/workflows/governance-drift.yml index 7e3e8be..9c69774 100644 --- a/.github/workflows/governance-drift.yml +++ b/.github/workflows/governance-drift.yml @@ -38,10 +38,15 @@ jobs: LABEL="auto-drift-report" gh label create "$LABEL" --repo "$REPO" --description "governance-drift 工作流自动报告(勿手工使用)" --color d73a4a >/dev/null 2>&1 || true EXISTING=$(gh issue list --repo "$REPO" --state open --label "$LABEL" --json number --jq 'length') - # 评论去重(红队 RB-B2,ADR-0016 决策 7):漂移指纹=报告内容 sha256。 + # 评论去重(红队 RB-B2,ADR-0016 决策 7):漂移指纹=稳定漂移集合的 sha256。 # 同一指纹只报一次——未变化的漂移不每日重复评论(防 issue 评论无限膨胀: - # 破玻璃未回填等长期漂移此前每日+1 评论);漂移内容变化=新指纹=新评论。 - FP=$(sha256sum drift-report.txt | cut -d' ' -f1) + # 破玻璃未回填等长期漂移此前每日+1 评论);漂移集变化=新指纹=新评论。 + # 指纹稳定性(评审项:全量报告含每次运行都变的字段——§8 回填时限秒数随 + # 时间增长、OK 行的检测窗口/commit 数随日期漂移,同一漂移会天天得到新 + # 指纹使去重失效):只取 DRIFT 行、归一化时长秒数(回填时限=NNNs→s)、 + # 排序去重后哈希——语义集合不变则指纹跨日恒定,漂移新增/消除/内容实质 + # 变化才产生新指纹。 + FP=$(grep '^DRIFT' drift-report.txt | sed -E 's/回填时限=[0-9]+s/回填时限=s/g' | sort -u | sha256sum | cut -d' ' -f1) BODY="自动化检测发现以下漂移(运行 #${{ github.run_id }}): $(cat drift-report.txt) From 0618fd2ddc28ec36eefe0712348dd0cbeddb1299 Mon Sep 17 00:00:00 2001 From: randypanding <66171646@users.noreply.github.com> Date: Wed, 19 Aug 2026 04:13:58 +0000 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E8=AF=84=E8=AE=BA=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E6=AF=94=E5=AF=B9=20+=20workflow=20=E7=BA=A7?= =?UTF-8?q?=20concurrency=20=E4=B8=B2=E8=A1=8C=E5=8C=96=EF=BC=88coderabbit?= =?UTF-8?q?=20review=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 指纹比对改为该 issue 全部评论(原只看最近 10 条——同一指纹若在 更早的自动评论里会被漏检而重复发布;长期未回填漂移的旧报告正是 这种形态)。 2. 增 workflow 级 concurrency(group: governance-drift,排队不取消): "查指纹→写评论"非原子,两个并发运行可能都未发现指纹而各自评论; 串行化后后发运行等前者落评论后再查指纹,构成原子保护。 --- .github/workflows/governance-drift.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/governance-drift.yml b/.github/workflows/governance-drift.yml index 9c69774..64e2e9d 100644 --- a/.github/workflows/governance-drift.yml +++ b/.github/workflows/governance-drift.yml @@ -6,6 +6,13 @@ on: permissions: {} +# 串行化(coderabbit review:评论去重的"查指纹→写评论"非原子——两个并发运行 +# 可能都未发现指纹而各自评论;workflow 级 concurrency 使同一时刻至多一个检测 +# 运行,后发的排队等前者落评论后再查指纹,构成原子保护) +concurrency: + group: governance-drift + cancel-in-progress: false + jobs: drift-check: runs-on: ubuntu-latest @@ -58,8 +65,10 @@ jobs: " if [[ "$EXISTING" != "0" ]]; then NUM=$(gh issue list --repo "$REPO" --state open --label "$LABEL" --json number --jq '.[0].number') - RECENT=$(gh issue view "$NUM" --repo "$REPO" --json comments --jq '[.comments[].body] | .[-10:] | join("\n---\n")') - if grep -qF "drift-fingerprint: $FP" <<<"$RECENT"; then + # 全量评论比对(coderabbit review:只看最近 10 条时,同一指纹若在 + # 更早的自动评论里会被重复发布——长期未回填漂移的旧报告就是这种形态) + COMMENTS=$(gh issue view "$NUM" --repo "$REPO" --json comments --jq '[.comments[].body] | join("\n---\n")') + if grep -qF "drift-fingerprint: $FP" <<<"$COMMENTS"; then echo "漂移指纹 $FP 已在 #$NUM 报告过且内容未变化,跳过重复评论(RB-B2 去重)" else gh issue comment "$NUM" --repo "$REPO" --body "$BODY"