fix: 修复上游健康巡检并同步已审查的市场引用 (#207)

Upstream health checks could select a different branch ending in `main`,
index internal skills or lowercase reference documents, treat a valid
pinned path as broken after an upstream move, and close the tracking
issue while unpinned or unknown entries remained. Resolve exact refs and
tracked filenames, compare the installed snapshot, and drive issue
decisions from structured results.

Refresh 26 reviewed pointers, pin DingTalk and Matt Pocock collections,
remove the deleted merge-conflict skill, and add the six new public
children with reviewed translations. Synchronize sidecars, observed
release facts, license evidence and external dependency disclosures.
Identical-tree Agent pins and their versions remain unchanged. The
per-entry review is recorded in
`docs/upstream-health-189-remediation.md`.

Validation: 99 unit tests pass; all nine pinned collections reproduce;
catalog/i18n and translation-freshness checks pass; online health checks
all 41 external entries with zero broken, actionable or unknown results.
Existing catalog warnings decrease from 123 to 105 with no new warning
groups. Python/workflow shell syntax and whitespace checks pass.

Closes #189.
This commit is contained in:
2026-10-05 08:13:13 -07:00
committed by GitHub
parent 04042d44bf
commit 26a3a4a82a
65 changed files with 1461 additions and 502 deletions

View File

@@ -34,25 +34,27 @@ jobs:
id: check
run: |
set +e
uv run --quiet scripts/catalog/check_upstream_health.py --format markdown > report.md
uv run --quiet scripts/catalog/check_upstream_health.py --format markdown --summary-file summary.json > report.md
code=$?
set -e
if [ "$code" -gt 1 ]; then
echo "health check crashed with exit code $code" >&2
exit "$code"
fi
echo "broken=$([ "$code" = 1 ] && echo true || echo false)" >> "$GITHUB_OUTPUT"
if grep -qE '^### (Broken|Undeclared upstream skills|Updates available) ' report.md; then
echo "actionable=true" >> "$GITHUB_OUTPUT"
else
echo "actionable=false" >> "$GITHUB_OUTPUT"
fi
python3 - <<'PY' >> "$GITHUB_OUTPUT"
import json
from pathlib import Path
summary = json.loads(Path("summary.json").read_text())
for key in ("broken", "actionable", "unknown"):
print(f"{key}={str(summary[key]).lower()}")
PY
cat report.md >> "$GITHUB_STEP_SUMMARY"
- name: Update tracking issue
env:
GH_TOKEN: ${{ github.token }}
ACTIONABLE: ${{ steps.check.outputs.actionable }}
UNKNOWN: ${{ steps.check.outputs.unknown }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
set -euo pipefail
@@ -69,7 +71,7 @@ jobs:
} > body.md
issue=$(gh issue list --label "$label" --state open --limit 1 --json number --jq '.[0].number // empty')
if [ "$ACTIONABLE" = "true" ]; then
if [ "$ACTIONABLE" = "true" ] || [ "$UNKNOWN" = "true" ]; then
if [ -n "$issue" ]; then
gh issue edit "$issue" --body-file body.md
else