---
name: eyefi-spindle-slice-port
description: Extracts a single functional slice from legacy Spindle (axis-o3c) into yeshuman with behavior parity and modern structure — tests and API contracts first, minimal ORM and Ninja, one driver or webhook adapter touchpoint. Use when porting a specific Spindle feature into Eyefi or devices app without copying serializer/viewset sprawl.
---

# Eyefi Spindle slice port

## Before coding

1. Read ontology and rules in [eyefi-device-domain](../eyefi-device-domain/SKILL.md) and [reference.md](../eyefi-device-domain/reference.md).

## Workflow (per slice)

1. **Name the slice** and the user-visible outcome (one sentence).
2. **Spindle:** locate **tests** (e.g. `spindle/api/pytests/`), **public API** / serializers that define the contract, and the **minimal** code path. Ignore internal role-specific serializer variants unless a field is truly required.
3. **Map** Spindle terms → Eyefi glossary; add a row to `reference.md` if new.
4. **Yeshuman:** smallest change — models (if needed), one service module, one Ninja route or webhook handler, one vendor adapter method if applicable.
5. **Verify:** parity for the slice’s behavior; no copy-paste of Spindle class hierarchies.

## Rules

- **Behavior parity, structural novelty.**
- **No** full-tree dumps of Spindle in chat or docs; link paths only when useful.
- **No** new FilterSet-per-viewset pattern unless justified.

## When stuck

- Prefer **incremental** extraction: one endpoint or one event type at a time.
