Skip to content

feat(registry): support verified repository renames - #209

Merged
adrighem merged 1 commit into
masterfrom
feat/registry-repo-rename
Oct 29, 2026
Merged

adrighem merged 1 commit into
masterfrom
feat/registry-repo-rename

Conversation

@adrighem

Copy link
Copy Markdown
Owner

Unblocks #208 (refs #208).

Problem: A forge rename changes repository.url, so the registry identity no longer matches repository_identity in release_index.json. generate_release_index.py --update then fails with Previous release repository no longer matches registry., which blocks index refresh for every plugin.

Change:

  • Optional repository.previous_identities (canonical host/owner/repo). Validation rejects malformed entries, self-reference, duplicates, and identities already claimed by another package.
  • Generator accepts previous releases and tombstones recorded under a listed identity. Lineage carries over and new release_ids use the new identity. On GitHub it checks that the old and new names resolve to the same numeric repo ID; a mismatch keeps the prior release and reports certification_failed. Unlisted identity changes still fail.
  • Client treats index entries, installed metadata, Git checkouts, lookups and channel prefs under a listed identity as the same package. Live provider candidates must match the current identity.
  • plugin.py regenerated; CONTRIBUTING documents the field.

Not included: the luxtronikex registry change, which lands via #208 plus previous_identities after this merges.

Tests: full suite passes locally; validate_plugins.py passes.

🤖 Generated with Claude Code

Registry v2 packages may list repository.previous_identities: canonical
host/path identities the repository had before a forge rename. Listed
identities are validated (canonical, no self-reference, no duplicates,
no collision with another package's current or previous identity).

The release index generator accepts previous releases and tombstones
recorded under a listed identity, so lineage carries over monotonically
and the next certified release moves to the new identity. For GitHub it
first checks that the old and new names resolve to the same numeric
repository ID; a mismatch keeps the prior release and reports
certification_failed. Unlisted identity changes still fail generation.

The client treats indexed releases, installed release metadata, Git
checkouts, lookups and channel preferences recorded under a listed
identity as the same package. Live provider candidates must still match
the current identity.

plugin.py regenerated with generate_plugin.py. The luxtronikex rename lands via PR #208.

refs #208

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adrighem
adrighem merged commit 353a448 into master Oct 29, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant