audit: verify soldeer autopublish is wired and current (hazard cat. 10 — dead wiring, cross-org secrets: inherit, [package] identity, registry lag) - #76
Conversation
…10 (dead publish wiring, cross-org secrets: inherit, [package] identity, registry lag / un-bumped next-version) Closes #31 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 40 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
QA evidence for this prose-only skill change (head Every factual claim in the new category was verified against live state before writing it:
Version lockstep (the repo's only CI, replicated locally with nix-store jq 1.8.2): SKILL.md frontmatter == plugin.json == marketplace.json == Internal-consistency sweep of the doc after the edit: the Pass-6 category count is referenced in three places (the scoped-run touch-question enumeration, "The nine stay non-exhaustive", "none of the nine names it") — all three updated to ten; no other "nine"-category references remain ( 🤖 Generated with Claude Code |
|
Reviewed 805df03: ready — Hazard cat. 10 with causes-then-symptom structure, the pre-merge un-bumped-version check today's rain.deploy incident proved out, content-hash over version echo, skipped-never-false registry honesty, composed onto main's cat 9 at 0.29.0, zero unresolved threads. |
Closes #31
What
Adds hazard-surface category 10 — Broken or stale package publish pipeline (soldeer autopublish) to
skills/audit/SKILL.md, so the audit treats a soldeer-published repo whose merge→registry pipeline is broken, mis-wired, or lagging as a finding. It is the producer-side counterpart of Quality #11 (stale soldeer dependencies): #11 audits this repo's pins as a consumer, the new category audits what this repo publishes.Four checks, causes before symptom:
uses:a rainix reusable removed at the pinned ref (the dead tag-triggeredpublish-soldeer.yaml), or a tag-triggered publish that hasn't fired across content-changing merges. MEDIUM, HIGH when the unpublished delta carries a security/correctness fix or deploy-record change consumers pin against.secrets: inherit— a reusableuses:whose owner org differs from the calling repo's, withsecrets: inherit: GitHub disallows it, the run dies atstartup_failure, and the publish silently never runs. Secrets must be passed explicitly. MEDIUM.[package]identity — no[package] name/versioninfoundry.toml;rainix-autopublish's content gate + auto-bump read them. MEDIUM.https://api.soldeer.xyz/api/v1/revision?project_name=<name>, and the one check that also runs pre-merge: underpr:<n>, flag a diff changing published content (src/, excludingsrc/generated/) while[package].versionstill equals the published latest — the post-merge gate enforces that invariant a round trip late. Network honesty mirrors Quality ERC-165 checks: prefer OZ ERC165+super over raw IERC165, plus empty/vacuous impls, half-advertised families, and test coverage #11: unreachable registry ⇒ the check is noted skipped, never reported "current".The Pass-6 scoped-run degradation bullet gains the matching touch-question "(10) change published-package content or its publish wiring", and the two "nine categories" counts become ten.
Evidence (verified live)
S01-Issuer/st0x.deploy—st0x-deploystuck at 0.1.1 through two deploy releases; fixed by ci: soldeer autopublish via rainix-autopublish (unbreak publishing) S01-Issuer/st0x.deploy#239 (migrate to autopublish, merged 2026-07-08) and ci: pass soldeer autopublish secrets explicitly (fix cross-org startup_failure) S01-Issuer/st0x.deploy#240 (explicit cross-org secrets afterstartup_failure).rainlanguage/rain.deploy#21merged new public API at[package] version 0.1.4with 0.1.4 already published (registry shows 0.1.4 published 2026-06-29). The post-mergePackage Releaserun https://github.com/rainlanguage/rain.deploy/actions/runs/30564517433 failed at rainixsoldeer-gatewithfoundry.toml [package].version (0.1.4) is not ahead of the published revision (0.1.4)(exact log line verified) — main went red until bump PR chore(release): bump to 0.1.5 so main's new API can publish rain.deploy#24 landed (merged 17:13:55Z) and 0.1.5 published at 17:14:56Z. The gate exists but fires post-merge; the new pre-merge check is what would have flagged audit: add events-belong-on-the-interface check (Code quality #12) #21 itself.Versioning
0.23.0 → 0.24.0in lockstep across SKILL.md frontmatter,.claude-plugin/plugin.json, and.claude-plugin/marketplace.json; version-hygiene replicated locally with nix-store jq (versions agree, bumped vs base).QA
gh run view --log-failed,api.soldeer.xyz/api/v1/revision?project_name=rain-deploy(0.1.4 @ 2026-06-29, 0.1.5 @ 2026-07-30T17:14:56Z),rainlanguage/rain.deploy#24merged 17:13:55Z, rainix workflow listing (publish-soldeer.yaml 404, rainix-autopublish.yaml present, gate semantics read from its source), and st0x.deploy PRs #239/#240 titles+merge dates.secrets: inherit, (3) missing[package]identity, (4) registry behind source — all four are sub-checks of the new category; the requested Pass-6 placement (generated-artifacts/cross-repo-drift hazard) and the Pass-0-adjacent workflow-config causes are covered by the category text + the scoped-run touch-question, and the stale-soldeer network-honesty clause is mirrored verbatim in spirit ("skipped", never a false "current"). Additionally covers the pre-merge un-bumped-next-version shape the fresh rain.deploy incident demonstrates.🤖 Generated with Claude Code