mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-09-01 15:56:58 +00:00
c035f50fixed a hand-built tag rkey in DeleteManifestHandler and shipped with no test. The hazard is not specific to that handler: io.atcr.tag rkeys come from RepositoryTagToRKey, which encodes "/" as "~", so any code building one by hand targets a record that does not exist — and deleteRecord being idempotent makes that a silent no-op. The local view looks right and the tag returns on the next backfill. The by-digest path now builds tag rkeys too (594d73b), so it could reintroduce exactly this bug. TestManifestDelete_NestedRepoTagRKey pins it there: push to stream/cache, delete by digest, and assert the tag is no longer listed. Listing is what catches a survivor — TagStore.All reads the records back from the PDS and filters by repository, so a stale one is still reported. Mutation-verified by hand-building the rkey as "repo:tag": the nested test fails with the tag still listed, and TestManifestDelete passes unchanged. That second half is the point — every existing delete test uses a flat repository name, and a flat name cannot reproduce this bug at all. batch11-nested-rkey.mjs drives the same property through the UI handler thatc035f50actually fixed, asserting against the PDS record rather than the page, since the page looks correct either way until a backfill runs. It needs an interactive appview login in the Playwright profile and is not yet run; the session that exists belongs to a different browser profile. Two instrument notes are baked in: probe /settings rather than the repo page to detect a session, because /r/ renders for anonymous visitors and can never report a missing one, and use maxRedirects:0, because RequireAuth 302s and a followed redirect surfaces as a confusing 405 on DELETE /login. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SeaUS5AFPX9gqCahoLRMRh