# ADR-0005 — Required element_type parameter

**Status:** Accepted
**Date:** 2026-05-05
**Deciders:** JT, Claude (in dialogue)
**Supersedes:** none

> *This ADR was drafted by AI (Claude Opus 4.7) during the CP-10 build.*

## Context

Pre-CP-10, element ref resolution was split across three surfaces:
`get_character_refs` (canonical), `pipeline/lib/elements.py::_resolve_refs`
(props with auto-fallback), and `get_location_refs` (third path).

The auto-fallback in `_resolve_refs` tried character refs first, then
fell through to a legacy `picks/` scanner. On slug collision (a "KIT"
character and a "KIT" prop), the wrong refs were silently returned.

## Decision

Single canonical entry point `core.ref_resolver.get_element_refs(
element_id, project, element_type, phase=None)` requires `element_type`
as a positional parameter. Auto-detection on slug collision is forbidden.

The orchestrator builds a `{slug: element_type}` lookup from
`casting_state.json` once at init; callers pass the explicit type.

## Consequences

**Silent-bug class eliminated.** Slug collisions raise — no wrong refs
returned.

**Legacy `picks/` scanner deleted.** Missing canonical refs raise
`MissingCanonicalRefsError` (visible failure per Law 4).

**Migration cost.** All in-tree callers updated in Phase 1 of CP-10.
External scripts must update their calls.
