diff --git a/.github/workflows/org-gate.yml b/.github/workflows/org-gate.yml index 744676c..6495b0a 100644 --- a/.github/workflows/org-gate.yml +++ b/.github/workflows/org-gate.yml @@ -91,11 +91,17 @@ jobs: echo "::error::agent-registry/decisions 清单拉取失败——ADR 存在性无法校验(fail-closed)" exit 1 fi + # 补充 PR 自身新增的 ADR 文件(新增 ADR 在合入前不在 main 分支清单中——仅靠 + # 主线清单会误判幽灵 ADR;与 agent-registry gate.yml 同逻辑:PR head 的 + # decisions/ 文件同样计入存在性校验)。 + PR_ADR_LISTING=$(gh api "$PR_API/files?per_page=100" --paginate \ + --jq '.[] | select(.filename | startswith("decisions/")) | .filename | capture("^decisions/(ADR-[0-9]{4}-[^/]+)$") | .captures[0].string' 2>/dev/null) + ADR_LISTING=$(printf '%s\n%s' "$ADR_LISTING" "$PR_ADR_LISTING" | grep -v '^$' | sort -u) MISSING=0 for ref in $( { echo "$PR_TITLE"; echo "$PR_BODY"; } | grep -oE "$ADR_RE" | sort -u ); do num="${ref#ADR-}" grep -q "^ADR-${num}-" <<<"$ADR_LISTING" || { - echo "::error::引用的 ${ref} 在 agent-registry/decisions/ 无对应文件(幽灵 ADR)"; MISSING=1; } + echo "::error::引用的 ${ref} 在 agent-registry/decisions/(含 PR head)无对应文件(幽灵 ADR)"; MISSING=1; } done exit $MISSING