feat(ci): scheduled channel-health checks (user-perspective drift detection)#152
Merged
Conversation
Closes the last automatable mile of the Claude Code plugin channel. `claude plugin install axme-code@claude-community` installs the SHA pinned in anthropics/claude-plugins-community, not our plugin repo HEAD — and through April-June 2026 that pin silently stayed at v0.2.9 because bumping it was a manual PR no process owned. New open-marketplace-pr job (needs: sync-plugin-repo): - reads the fresh AxmeAI/axme-code-plugin HEAD and the currently pinned SHA from upstream marketplace.json; no-ops when equal - branches off UPSTREAM main in the AxmeAI fork (one-line diff regardless of fork staleness), replaces the SHA with a count==1 + JSON-parse assertion, force-pushes the standing `bump-axme-code` branch - updates any open bump PR in place, else creates one — consecutive releases never stack duplicate PRs The Anthropic maintainers' review/merge stays manual by design (their supply-chain gate). release.sh postflight still verifies the pin, so a stalled upstream PR is loudly visible at the next release. Token note: uses MARKETPLACE_PR_TOKEN if set, else PLUGIN_REPO_TOKEN. Creating PRs on a foreign public repo requires a classic PAT scope (public_repo); if PLUGIN_REPO_TOKEN is fine-grained to the plugin repo only, add MARKETPLACE_PR_TOKEN. YAML validated; embedded script passes bash -n. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The previous commit on this branch added a CI job that auto-opens a SHA-bump PR to anthropics/claude-plugins-community. Reality check (2026-06-11): that repo is a READ-ONLY MIRROR — a bot auto-closed our manual PR #63 within minutes, and the official docs state Anthropic's own pipeline bumps approved plugins' pins automatically on plugin-repo pushes, with a nightly catalog sync. An auto-PR job would just generate auto-closed noise. Reverted. What CAN be owned on our side is detection — the June postmortem's real gap was that three channels drifted for weeks with all-green pipelines. New channel-health.yml (Mon+Thu cron + manual dispatch) verifies, from the user's perspective: 1. npm latest == newest v* release 2. Open VSX latest == newest extension-v* release 3. plugin-repo manifest == newest v* release 4. marketplace SHA pin == plugin-repo HEAD (48h grace for Anthropic's auto-bump + nightly sync) On drift: opens/updates a tracking issue and fails the run. release.sh postflight + header updated to describe the real pin process (auto-bump + nightly sync + 48h grace + escalation via clau.de/plugin-directory-submission) instead of instructing a PR that gets auto-closed. Downgraded that postflight finding from err to warn since lag <48h is expected behavior. YAML validated; both shell payloads pass bash -n. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The first commit on this branch added a CI job auto-opening a SHA-bump PR to
anthropics/claude-plugins-community. That approach is dead on arrival: the repo is a read-only mirror — a bot auto-closed our manual PR #63 within minutes, pointing to clau.de/plugin-directory-submission. Per the official docs, Anthropic's own pipeline bumps approved plugins' pins automatically when we push to the plugin repo, and the public catalog syncs nightly. The second commit reverts the job.So the honest answer to "как сделать, чтобы CI при теге релизил везде, включая plugin-канал":
Our pipeline already ends where it should. The open question is why the pin sat at April's v0.2.9 through three pushes — either their auto-bump postdates April, or their pipeline silently rejects our updates (e.g. a scanner flagging the bundled SDK). Today's v0.6.1 push is the live test: if the pin hasn't moved to
0fcab28within 24–48h, we escalate through the submission channel.What this PR actually ships:
channel-health.ymlThe June postmortem's real gap wasn't a missing release step — it was that three channels drifted for weeks while every pipeline was green, because nothing checked what a fresh user receives. New scheduled workflow (Mon+Thu + manual dispatch) verifies from the user's side:
latestv*release tagextension-v*release tagplugin.jsonv*release tagOn any drift: opens (or comments on) a tracking issue
Channel health: distribution drift detectedand fails the run. Would have caught the v0.2.9 freeze in 2 days instead of 2 months — and will catch the current pin within days if Anthropic's auto-bump doesn't fire for v0.6.1.Also updates
scripts/release.sh(header + postflight) to describe the real pin process instead of instructing a PR that gets auto-closed; pin lag <48h downgraded err→warn since it's expected behavior.Verification
channel-health.ymlparses; embedded script passesbash -n; same jq paths verified against live data todayrelease-binary.ymlrestored byte-identical to mainbash -n scripts/release.shcleangh workflow run channel-health.ymlfor a live fire (expected today: pin check inside 48h grace → green or pin-only finding)🤖 Generated with Claude Code