# Frontend Contract — Confirmed Data Gate

## Data paths

Confirmed marker dataset:

```text
/data/markers.confirmed.v20260520.json
# source artifact path:
reports/site-pipeline/site-rerun-subnautica2maps-20260520-clean/subnautica2maps/data-confirmed/markers.confirmed.v20260520.json
```

Manifest:

```text
/data/manifest.json
```

## Current status

```yaml
ui_fixture_ready: false
launch_data_ready: false
seo_index_ready: false
confirmed_count: 0
block_reason: confirmed-data-insufficient
```

05B2 fixture data must not be read as confirmed production data.

## Marker fields when data exists

Each confirmed marker must include:

```ts
type ConfirmedSourceType = 'manual_gameplay' | 'official_update_note' | 'licensed_community_submission';
type ConfirmedConfidence = 'confirmed';

interface ConfirmedMarker {
  marker_id: string;
  name: string;
  type: 'resource' | 'poi' | 'blueprint' | 'data_box' | 'biome' | 'wildlife' | 'plant' | 'location';
  subtype: string;
  slug: string;
  coordinates: { x: number; y: number; z: number };
  depth: number | string;
  region: string;
  biome: string;
  description: string;
  route_note_from_lifepod: string;
  route_note_from_current_position_template: string;
  prerequisite_gear: string[];
  nearby_resources: string[];
  nearby_poi: string[];
  verified_game_version: string;
  source_type: ConfirmedSourceType;
  source_url: string | null;
  confidence: ConfirmedConfidence;
  updated_at: string;
  reviewer: string;
  notes: string;
  index_policy: 'index' | 'noindex';
  sitemap_eligible: boolean;
}
```

## Empty state

When `confirmed_count === 0`, frontend must not show resource/location pages as indexable production pages.

Recommended user-facing warning:

```text
Confirmed marker data is not ready yet. We are collecting first-hand or licensed marker evidence before publishing resource locations. Guides are available, but resource and POI pages remain unpublished until verified.
```

Map shell warning if used internally:

```text
Demo mode only — marker locations are not verified and are excluded from search indexing.
```

## Route helper

Route helper can be implemented as a UI shell, but must be disabled for production marker routing until at least one confirmed target marker exists.

Helper guard:

```ts
export function canRouteToMarker(marker: { confidence?: string }) {
  return marker.confidence === 'confirmed';
}
```

## Indexing helper

```ts
export function isMarkerBackedPageIndexable(page: { markers: ConfirmedMarker[] }) {
  return page.markers.some(m =>
    m.confidence === 'confirmed' &&
    ['manual_gameplay', 'official_update_note', 'licensed_community_submission'].includes(m.source_type) &&
    Boolean(m.verified_game_version) &&
    Boolean(m.updated_at)
  );
}
```

## Routing policy

- `/resources/silver`, `/resources/copper`, `/resources/sulfur`: noindex until each has confirmed markers and support copy.
- `/locations/*`: noindex until confirmed POI/location markers exist.
- `/biomes/*`: noindex until confirmed biome-backed coverage exists.
- `/map`: noindex if the map is only an empty shell or fixture demo.
- `/guides/does-subnautica-2-have-a-map` and `/guides/how-to-find-coordinates`: may be index candidates if complete and non-marker-backed.

## Downstream instruction

Do not output `launch_data_ready=true` or `seo_index_ready=true` from this dataset.
