{"title":"After RubyGems: Can Major Package Registries Make Agent-Scale Publishing Reviewable Before Release?","description":"All three registries document workflow-bound, short-lived publishing authority, but that control does not itself require human review. In the reviewed public materials, npm documents a registry-native staged path with a maintainer 2FA release gate; RubyGems and PyPI can publish directly from trusted workflows unless maintainers add an external CI approval rule.","dataset_id":"spd:after-rubygems-can-major-package-registries-make-agent-scale-publishing-reviewable-before-release-9d7c6e22","canonical_url":"https://superpowerdaily.com/research/after-rubygems-can-major-package-registries-make-agent-scale-publishing-reviewable-before-release-9d7c6e22","version_url":"https://superpowerdaily.com/research/after-rubygems-can-major-package-registries-make-agent-scale-publishing-reviewable-before-release-9d7c6e22/versions/v1","version":"v1","snapshot_hash":"6e8c14b3798e741dd6cf60ebfe20f9556108776dce6e1ce97ef2f54681b6fe4a","date_created":"2026-09-19T00:01:09.539Z","date_modified":"2026-09-19T00:01:09.539Z","license":{"name":"Superpower Daily data reuse terms","url":"https://superpowerdaily.com/terms"},"license_url":"https://superpowerdaily.com/terms","temporal_coverage":"2026-09-16","coverage_note":"The comparison is bounded to supplied public records available through September 16, 2026. It covers RubyGems, npm, and PyPI documentation and one RubyGems incident disclosure; it does not assess undisclosed controls, operational effectiveness, or CI-provider settings beyond what the registry materials describe.","measurement_technique":["Evidence matrix plan: normalize official public documentation into identity binding, credential lifetime, direct release, staging, human approval, provenance, registration limits, publish limits, revocation, account or incident records, and public incident disclosures.","Classify each control as documented availability, registry-native enforcement, external workflow configuration, or not documented in the reviewed materials.","Keep release provenance separate from incident forensics: a workflow receipt does not establish a complete incident record.","Use only the supplied official RubyGems, npm, and PyPI evidence, checked through September 16, 2026."],"methodology":["Evidence matrix plan: normalize official public documentation into identity binding, credential lifetime, direct release, staging, human approval, provenance, registration limits, publish limits, revocation, account or incident records, and public incident disclosures.","Classify each control as documented availability, registry-native enforcement, external workflow configuration, or not documented in the reviewed materials.","Keep release provenance separate from incident forensics: a workflow receipt does not establish a complete incident record.","Use only the supplied official RubyGems, npm, and PyPI evidence, checked through September 16, 2026."],"metrics":[{"label":"Verified observations","value":"6","detail":"6 measured fields"},{"label":"Supported claims","value":"9","detail":"9 material findings"},{"label":"Cited sources","value":"12","detail":"12 primary or authoritative"},{"label":"Research score","value":"85","detail":"Automated topic and evidence score"}],"columns":[{"key":"entity","label":"Entity"},{"key":"metric","label":"Metric"},{"key":"value","label":"Value"},{"key":"unit","label":"Unit"},{"key":"observed","label":"Observed"},{"key":"source","label":"Source"},{"key":"transform","label":"Transform"}],"data":[{"unit":"hour","value":"up to one hour","entity":"npm","metric":"documented possible token-revocation delay","source":"https://docs.npmjs.com/revoking-access-tokens","observed":"2026-09-16","transform":null},{"unit":"requests/10 minutes/IP","value":"100 requests per 10 minutes per client IP","entity":"RubyGems","metric":"documented signup limit","source":"https://guides.rubygems.org/rubygems-org-rate-limits","observed":"2026-09-16","transform":null},{"unit":"requests/hour","value":"400 requests per hour","entity":"RubyGems","metric":"documented successful gem-push limit","source":"https://guides.rubygems.org/rubygems-org-rate-limits","observed":"2026-09-16","transform":null},{"unit":"configurations/package","value":"up to 10","entity":"npm","metric":"maximum trusted publishers per package","source":"https://docs.npmjs.com/trusted-publishers","observed":"2026-09-16","transform":null},{"unit":"minutes","value":"no more than 15 minutes after authorization","entity":"PyPI","metric":"maximum Trusted Publishing token lifetime","source":"https://docs.pypi.org/trusted-publishers/security-model","observed":"2026-09-16","transform":null},{"unit":"packages, lower bound","value":"more than 500","entity":"RubyGems","metric":"packages yanked in May spam campaign","source":"https://blog.rubygems.org/2026/09/11/update-may-spam-publishing-campaign.html","observed":"2026-09-11","transform":null}],"sources":[{"url":"https://blog.rubygems.org/2026/09/11/update-may-spam-publishing-campaign.html","name":"RubyGems","title":"An update on the May spam-publishing campaign on rubygems.org","records":1},{"url":"https://docs.pypi.org/trusted-publishers/security-model","name":"PyPI","title":"docs.pypi.org","records":1},{"url":"https://docs.pypi.org/attestations/publish/v1","name":"PyPI","title":"docs.pypi.org","records":0},{"url":"https://docs.pypi.org/trusted-publishers/using-a-publisher","name":"PyPI","title":"docs.pypi.org","records":0},{"url":"https://guides.rubygems.org/rubygems-org-rate-limits","name":"RubyGems","title":"guides.rubygems.org","records":2},{"url":"https://guides.rubygems.org/security","name":"RubyGems","title":"guides.rubygems.org","records":0},{"url":"https://guides.rubygems.org/trusted-publishing","name":"RubyGems","title":"guides.rubygems.org","records":0},{"url":"https://pypi.org/help","name":"PyPI","title":"pypi.org","records":0},{"url":"https://docs.npmjs.com/revoking-access-tokens","name":"npm","title":"Revoking access tokens | npm Docs","records":1},{"url":"https://docs.npmjs.com/staged-publishing","name":"npm","title":"Staged publishing for npm packages | npm Docs","records":0},{"url":"https://docs.npmjs.com/trusted-publishers","name":"npm","title":"Trusted publishing for npm packages | npm Docs","records":1},{"url":"https://docs.npmjs.com/viewing-package-provenance","name":"npm","title":"Viewing package provenance | npm Docs","records":0}],"provenance":{"publisher":"Superpower Daily","source_count":12,"source_urls":["https://blog.rubygems.org/2026/09/11/update-may-spam-publishing-campaign.html","https://docs.pypi.org/trusted-publishers/security-model","https://docs.pypi.org/attestations/publish/v1","https://docs.pypi.org/trusted-publishers/using-a-publisher","https://guides.rubygems.org/rubygems-org-rate-limits","https://guides.rubygems.org/security","https://guides.rubygems.org/trusted-publishing","https://pypi.org/help","https://docs.npmjs.com/revoking-access-tokens","https://docs.npmjs.com/staged-publishing","https://docs.npmjs.com/trusted-publishers","https://docs.npmjs.com/viewing-package-provenance"],"methodology":["Evidence matrix plan: normalize official public documentation into identity binding, credential lifetime, direct release, staging, human approval, provenance, registration limits, publish limits, revocation, account or incident records, and public incident disclosures.","Classify each control as documented availability, registry-native enforcement, external workflow configuration, or not documented in the reviewed materials.","Keep release provenance separate from incident forensics: a workflow receipt does not establish a complete incident record.","Use only the supplied official RubyGems, npm, and PyPI evidence, checked through September 16, 2026."],"snapshot_hash":"6e8c14b3798e741dd6cf60ebfe20f9556108776dce6e1ce97ef2f54681b6fe4a"},"distributions":{"csv":"https://superpowerdaily.com/api/research/after-rubygems-can-major-package-registries-make-agent-scale-publishing-reviewable-before-release-9d7c6e22/versions/v1?format=csv","json":"https://superpowerdaily.com/api/research/after-rubygems-can-major-package-registries-make-agent-scale-publishing-reviewable-before-release-9d7c6e22/versions/v1?format=json"}}