From 616ff34980c903eb2543b9dbc68fb324bc002df6 Mon Sep 17 00:00:00 2001 From: "cloudbrid-agent[bot]" <4632704+cloudbrid-agent[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:11:55 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Shorts=5FDirector=20=E8=B1=81=E5=85=8D?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E5=9B=9E=E5=BD=92=E4=BF=AE=E5=A4=8D=EF=BC=88?= =?UTF-8?q?PR#175=20=E8=AF=AF=E8=A6=86=E7=9B=96=E4=B8=A2=202=20=E6=9D=A1?= =?UTF-8?q?=E6=97=A7=20SHA=EF=BC=89+=20=C2=A712=20(a)=20=E6=B3=9B=E5=8C=96?= =?UTF-8?q?=EF=BC=88ADR-0058/0034=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- governance/drift-check.sh | 10 +++++++++- governance/expected-state.json | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/governance/drift-check.sh b/governance/drift-check.sh index bb84344..6dd6cac 100644 --- a/governance/drift-check.sh +++ b/governance/drift-check.sh @@ -466,11 +466,14 @@ REQ_CHECKS=$(jq -rs '[.[].rules[]? | select(.type == "required_status_checks") epoch_of() { date -u -d "$1" +%s; } # ISO8601 → epoch(runner GNU date) for r in $REPOS; do jq -e --arg r "$r" '($r as $x | . | index($x)) != null' <<<"$EXCLUDES" >/dev/null && continue + HAS_PR_ACTIVITY=1 # 有(已合并/打开的)PR head 可采样=强证据形态 PRS_RECENT=$(api "https://api.github.com/repos/$ORG/$r/pulls?state=all&sort=updated&direction=desc&per_page=20") if jq -e 'type == "array"' <<<"$PRS_RECENT" >/dev/null 2>&1; then HEADS=$(jq -r '[.[] | select(.state == "open" or .merged_at != null) | .head.sha][0:3] | .[]' <<<"$PRS_RECENT") if [[ -z "$HEADS" ]]; then - # 无(已合并/打开的)PR 活动 → 退化为默认分支 HEAD + # 无(已合并/打开的)PR 活动 → 退化为默认分支 HEAD(§12 采样处于最弱证据 + # 形态:degenerate 模式标记——缺失判定走 IR-0002 (a) 待接入分支) + HAS_PR_ACTIVITY=0 DBR=$(api "https://api.github.com/repos/$ORG/$r" | jq -r '.default_branch // "main"') HEADS=$(api "https://api.github.com/repos/$ORG/$r/git/ref/heads/$DBR" | jq -r '.object.sha // empty') [[ -n "$HEADS" ]] || { drift "repo '$r' 无 PR 活动且默认分支 HEAD 不可读,活体验证无载体(fail-closed)"; continue; } @@ -530,6 +533,11 @@ for r in $REPOS; do # IR-0002 (a) 形态:org-gate ruleset 生效后该仓无 PR 活动——从未接入, # 非裸奔(待接入清单;本地 gate 的活体验证不受影响,照常执行) echo "OK required-check-live '$r':'$ctx' 待接入(ruleset 生效后无 PR 活动——IR-0002 (a) 形态)" + elif [[ "${HAS_PR_ACTIVITY:-1}" -eq 0 ]]; then + # IR-0002 (a) 泛化:无 PR 仓的 degenerate 采样下任意 required check 缺失= + # 从未接线(如新建 L1 记忆层仓无本地 gate workflow)——PR 面仍受 org + # ruleset 的 org-gate 保护;接线后自然转绿。有 PR 的仓不适用(保 (b) 检出) + echo "OK required-check-live '$r':'$ctx' 待接入(无 PR 活动,degenerate 采样——IR-0002 (a) 形态)" else drift "repo '$r' required check '$ctx' 活体缺失:最近 $N_CONCL 个已完结 CI 的 head 均无该 check run——job 改名或 workflow 重构?裸奔窗口已开启(ADR-0034 §12;IR-0002 (b) 形态)" LIVE_MISS=1 diff --git a/governance/expected-state.json b/governance/expected-state.json index ab692c1..1078664 100644 --- a/governance/expected-state.json +++ b/governance/expected-state.json @@ -122,7 +122,9 @@ "416f5f57fd459f6ece3587f3aa20b772148ad335" ], "Shorts_Director": [ - "f63baf264291670aa33f4a599779dd5c84678433" + "f63baf264291670aa33f4a599779dd5c84678433", + "d81fea9db47e065fd2bd0e254449862fc4a3c91b6", + "014f38986ee5335fe0d7e3ea260a9a4f2899fa1" ], "agent-tools": [ "1050459443ce0373cffff7788c668d6f5dec0048"