# Short URL redirect rules

Configure redirect rules for a short URL — one feature of the frozen shlink map, read out of the product's own
source at commit 4a8fee47d48b and named by a model. Nothing below was typed by a person: every
figure, path, line and quote on this page is from the exported bundle the map is drawn from.

- Page: https://featkpr.com/map/shlink/short-url-redirect-rules
- The whole map: https://featkpr.com/map/shlink (markdown: https://featkpr.com/map/shlink.md)
- Module: RedirectRule — 1 feature in that band
- Status: code-only, awaiting a source
- HTTP operations: GET /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules, PATCH /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules, POST /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules
- Evidence: 3 citations across 2 files, all at commit 4a8fee47d48bcb949d6a5729ef32994f1f41464e

## What it is called, and who called it

The name is a model's answer, recorded as advice with the confidence it gave — not a fact
read out of the code. The citations below are the facts.

- Label (what the map draws): Short URL redirect rules
- Name (what it does): Configure redirect rules for a short URL
- Model: anthropic/claude-sonnet-5
- Mode: decide
- Confidence: 0.6
- Named at: 2026-09-24T00:15:47Z
- Naming record: 4cb5a322848d54cbb7c9edfe680cf4244ee1bd388f2e914c19e6759dbe327742
- Judge record: caa7579b7665d6750e7e67f356822c7e2df6e065200d51bbd6f8b8473ea111a3

## Which module it sits in, and how that was decided

- Drawn in: RedirectRule
- The module the judge gave it: Settings
- How the module was decided: the founding candidate's component (candidate.extracted.component, invariant 26's module). The judge's module_overlay is 'Settings' for every feature in this store: the naming run was given the BookStack target config (its spend.recorded is titled 'auto-e2e init_naming bookstack'), so it answered in BookStack's module vocabulary. The API's own /spine still returns that one Settings band; this bundle does not.

## The evidence

3 citations in 2 files. Each is quoted exactly
as it was read, and every one is pinned at commit 4a8fee47d48bcb949d6a5729ef32994f1f41464e.

### 1. GET /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules

- Kind: api_operation
- Rung: route
- Found by: mezzio.action_routes
- Extractor key: `route|GET|Shlinkio\Shlink\Rest\Action\RedirectRule\ListRedirectRulesAction|version,shortCode`
- Commit: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Anchored at: `module/Rest/src/Action/RedirectRule/ListRedirectRulesAction.php` line 18, bytes 614-667
- Blob: 6201c35d85dc05e8a705a84861084b3eeb528b9df234038bd98b8ac2a0522ea4

Quoted from the source, exactly:

```
ROUTE_PATH = '/short-urls/{shortCode}/redirect-rules'
```

### 2. PATCH /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules

- Kind: api_operation
- Rung: route
- Found by: mezzio.action_routes
- Extractor key: `route|PATCH|Shlinkio\Shlink\Rest\Action\RedirectRule\SetRedirectRulesAction|version,shortCode`
- Commit: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Anchored at: `module/Rest/src/Action/RedirectRule/SetRedirectRulesAction.php` line 20, bytes 712-765
- Blob: d59dcdd9a378be5b1cd1b8d2bc978238258c72a4d0dc695a3064736850a72cbc

Quoted from the source, exactly:

```
ROUTE_PATH = '/short-urls/{shortCode}/redirect-rules'
```

### 3. POST /rest/v{version:1|2|3}/short-urls/{shortCode}/redirect-rules

- Kind: api_operation
- Rung: route
- Found by: mezzio.action_routes
- Extractor key: `route|POST|Shlinkio\Shlink\Rest\Action\RedirectRule\SetRedirectRulesAction|version,shortCode`
- Commit: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Anchored at: `module/Rest/src/Action/RedirectRule/SetRedirectRulesAction.php` line 20, bytes 712-765
- Blob: d59dcdd9a378be5b1cd1b8d2bc978238258c72a4d0dc695a3064736850a72cbc

Quoted from the source, exactly:

```
ROUTE_PATH = '/short-urls/{shortCode}/redirect-rules'
```

## What is empty here

These are zero. They are printed with their values rather than left out, because a
section quietly missing reads as a section that is full.

- Scenarios under it (`tree.total`): 0
- Scenarios covered (`coverage`): 0 of 0, by 0 tests
- Tests (`tests`): 0
- Screens (`screens`): 0
- Flows it belongs to (`flows`): 0
- Merge requests that touched it (`touched_by + recent_requests`): 0
- Open questions (`open_questions`): 0

This feature has been READ, not crawled and not run: its status is `code-only, awaiting a source`.

Across the whole map: 0 scenarios, 0 tests, 0 screens, 0 flows, 0 merge requests and 0 open questions, over 20 features.

## Where these came from

- Product: shlink
- Bundle: frozen, as of store sequence 78, 2026-09-24T00:15:47Z
- Commit every citation is pinned at: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Events hash: 94dd0b7f8b14cfcc343621afa488b4c894c89e44920e5cd245e8617c2ea2e1c7
- View hash: 2100871e52c9ef1eb925163f933ccf397c663b2ef7af46b66cdf42579202d6b3
- `events_hash` hashes the event rows this bundle was built from; `view_hash` hashes the rendered view and is what `ae view hash` prints for the same store. Two digests of one store, never equal to each other.
- Repository: https://github.com/shlinkio/shlink — the --repo flag, a declared input. The store holds only a commit: no candidate or blob payload carries a repository or a URL. Never present this as a store fact.
- The event census behind the map, the 2 refused batches and what the naming cost: https://featkpr.com/map/shlink.md

## The rest of this module

Short URL redirect rules is the only feature in the RedirectRule band.

## Also here

- This page as HTML: https://featkpr.com/map/shlink/short-url-redirect-rules
- The whole map: https://featkpr.com/map/shlink
- The whole map as markdown: https://featkpr.com/map/shlink.md
