# Orphan visits

View and manage orphan visits — 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/orphan-visits
- The whole map: https://featkpr.com/map/shlink (markdown: https://featkpr.com/map/shlink.md)
- Module: Visit — 6 features in that band
- Status: code-only, awaiting a source
- HTTP operations: DELETE /rest/v{version:1|2|3}/visits/orphan, GET /rest/v{version:1|2|3}/visits/orphan
- Evidence: 2 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): Orphan visits
- Name (what it does): View and manage orphan visits
- Model: anthropic/claude-sonnet-5
- Mode: decide
- Confidence: 0.6
- Named at: 2026-09-24T00:15:47Z
- Naming record: 789f9b48338918c51341858bcd7f803aaf89cc39253d8dc39e63af4427f42c78
- Judge record: caa7579b7665d6750e7e67f356822c7e2df6e065200d51bbd6f8b8473ea111a3

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

- Drawn in: Visit
- 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

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

### 1. DELETE /rest/v{version:1|2|3}/visits/orphan

- Kind: api_operation
- Rung: route
- Found by: mezzio.action_routes
- Extractor key: `route|DELETE|Shlinkio\Shlink\Rest\Action\Visit\DeleteOrphanVisitsAction|version`
- Commit: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Anchored at: `module/Rest/src/Action/Visit/DeleteOrphanVisitsAction.php` line 16, bytes 466-495
- Blob: 1ce2c54527a42ba8f488b3b785f93252c7c537e36b9d7536b10485e5f6d460e3

Quoted from the source, exactly:

```
ROUTE_PATH = '/visits/orphan'
```

### 2. GET /rest/v{version:1|2|3}/visits/orphan

- Kind: api_operation
- Rung: route
- Found by: mezzio.action_routes
- Extractor key: `route|GET|Shlinkio\Shlink\Rest\Action\Visit\OrphanVisitsAction|version`
- Commit: 4a8fee47d48bcb949d6a5729ef32994f1f41464e
- Anchored at: `module/Rest/src/Action/Visit/OrphanVisitsAction.php` line 14, bytes 336-365
- Blob: aeba581c9e2139de7bbc3cc544d64494b0c0a3c5d3967f76c4a0181469847ecc

Quoted from the source, exactly:

```
ROUTE_PATH = '/visits/orphan'
```

## 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

- [Non-orphan visits](https://featkpr.com/map/shlink/non-orphan-visits) — GET /rest/v{version:1|2|3}/visits/non-orphan
- [Overall visit stats](https://featkpr.com/map/shlink/overall-visit-stats) — GET /rest/v{version:1|2|3}/visits
- [Domain visit stats](https://featkpr.com/map/shlink/domain-visit-stats) — GET /rest/v{version:1|2|3}/domains/{domain}/visits
- [Short URL visit stats](https://featkpr.com/map/shlink/short-url-visit-stats) — GET /rest/v{version:1|2|3}/short-urls/{shortCode}/visits
- [Tag visit stats](https://featkpr.com/map/shlink/tag-visit-stats) — GET /rest/v{version:1|2|3}/tags/{tag}/visits

## Also here

- This page as HTML: https://featkpr.com/map/shlink/orphan-visits
- The whole map: https://featkpr.com/map/shlink
- The whole map as markdown: https://featkpr.com/map/shlink.md
