## ADDED Requirements

### Requirement: Close a tag
An owner SHALL be able to close one of their tags. Closing sets status `closed`: the public page shows the tag is unavailable, data is kept, and scans do not alert.

#### Scenario: Owner closes a tag
- **WHEN** the owner closes their tag
- **THEN** the tag status is `closed`, the public page shows it unavailable, and no alerts are sent

#### Scenario: Closed tag page
- **WHEN** a visitor opens a closed tag
- **THEN** they see an "unavailable / closed" message

### Requirement: Move tag data
An owner SHALL be able to move a tag's details to another tag code. The target must exist in the registry and be unset; after the move the target is active with all copied details, and the source tag is closed.

#### Scenario: Move to a replacement tag
- **WHEN** the owner moves tag A to unset tag B
- **THEN** tag B is bound with all of A's details, and tag A becomes `closed`

#### Scenario: Invalid target
- **WHEN** the target code does not exist, is already owned, or is the same tag
- **THEN** the move is rejected with an error

### Requirement: Legacy URL redirect
`GET /` with a `productid` query parameter SHALL redirect to `/t/{productid}`.

#### Scenario: Old QR URL
- **WHEN** a visitor opens `/?x=5&productid=CODE`
- **THEN** they are redirected to `/t/CODE`
