feat(registry): registry.v1 verify, domain-only catalog, and Ruby >= 4.0 - #476
Draft
gildesmarais wants to merge 20 commits into
Draft
feat(registry): registry.v1 verify, domain-only catalog, and Ruby >= 4.0#476gildesmarais wants to merge 20 commits into
gildesmarais wants to merge 20 commits into
Conversation
gildesmarais
marked this pull request as draft
August 22, 2026 14:11
This was referenced Aug 22, 2026
Draft
gildesmarais
force-pushed
the
feat/registry-v1
branch
from
August 22, 2026 15:16
b32ec09 to
40bd681
Compare
Introduce Html2rss::Registry for signed bundle verification, safe tar extraction, catalog building, and validated bundle loading. Port catalog spec expectations and document the registry.v1 contract.
Require explicit registry.id in bundled configs, build catalog entries from manifest file lists only, and add archive pack/extract limits with path traversal and Ed25519 verification hardening.
…terns Reject duplicate registry.id at bundle load, regenerate JSON schema with slug pattern, sync Botasaurus OpenAPI fixture, and expand registry specs.
…y to CatalogEntry
Bundle.load now validates configs once and assembles CatalogEntry rows from those hashes, removing the CatalogBuilder disk re-read on the bundle path.
Drop source/registry from the gem CatalogEntry type so wire fields are owned exclusively by html2rss-web Index at the catalog API edge.
Move the registry.v1 format guide beside the owning module, narrate the Archive → Verifier → Bundle → CatalogBuilder pipeline in registry.rb, and drop the docs/ snowflake exception.
Remove the Archive.pack_io passthrough, privatize Archive and CatalogBuilder internals, and raise required_ruby_version to >= 4.0 without a repo-wide RuboCop TargetRubyVersion boyscout.
Use tmpdir copies for Bundle/Verifier apex tests, hash-driven CatalogBuilder units, shared archive helpers, and drop the thin CatalogEntry mirror spec.
Document single-load bundle path, catalog admission, domain vs wire boundary, and public leaf APIs for the registry.v1 refactor.
gildesmarais
force-pushed
the
feat/registry-v1
branch
from
August 24, 2026 16:26
b8659ce to
5044272
Compare
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.
Summary
registry.v1core:Manifest,Verifier,Archive,Bundle.load,CatalogBuilder, and Ed25519:signed/:integrity_onlytrust modes underlib/html2rss/registry/.BundleRelativePath, byte/file caps, zip-slip / symlink guards) and reject duplicateregistry.idat load; ship 0.28.0 withregistry.id/registry.aliasesschema + validator patterns.Bundle.loadvalidates configs once and builds catalog rows from those hashes (noCatalogBuilderdisk re-read on the bundle path).CatalogEntry: dropsource/registryfrom the gem type so wire fields are owned at the html2rss-web Index edge.Archive.pack_io, privatize Archive / CatalogBuilder internals, raiserequired_ruby_versionto >= 4.0.lib/html2rss/registry/README.md(pipeline narrated fromregistry.rb); record ownership / boundaries inCONTEXT.Stack (registry v1)
Land in order:
Test plan
unset BUNDLE_PATH && mise exec -- make readymise exec -- bundle exec rspec spec/lib/html2rss/registry/CatalogEntryhas nosource/registrykwargs; wire mapping lives in html2rss-web Indexlib/html2rss/registry/README.mdis the format guide (nodocs/registry-v1.mdsnowflake)html2rss.gemspecrequires Ruby>= 4.0