# Dev Element Indices — design **Дата:** 2026-05-12 **Статус:** утверждено заказчиком в обсуждении (12.05.2026 ночь) **Контекст:** Расширение существующего `DevIndexBadge` (route-level, 28 индексов) до per-element покрытия по всему порталу. Цель — чтобы заказчик в feedback ссылался на конкретный элемент по числу («1030 измени цвет», «543 поменяй текст», «2386 удали»), а Claude однозначно знал, на что указывают. ## 1. Требования ### 1.1. Функциональные - На **каждом** DOM-элементе в `.vue` шаблонах есть атрибут `data-dx=""` в dev/staging. - При hover мыши показывается badge с номером самого глубокого элемента под курсором + краткой меткой (tag + text snippet). - Клавиши `Alt+↑` / `Alt+↓` переключают badge на родителя / первого ребёнка с `data-dx`. - `Alt+Shift+I` — toggle режим: все индексы видны overlay'ем одновременно (мини-badges 8px в углу каждого элемента). - Click по badge — копирует `#` в clipboard. - `Esc` — скрывает текущий badge и выключает overlay-режим. ### 1.2. Стабильность ID - ID, присвоенный элементу, **не меняется** при: - Реордере соседей **другого** тега - Добавлении / удалении соседей **другого** тега - Изменении классов / стилей / атрибутов, не входящих в signature - Минорных правках текста (signature использует первые 24 символа) - ID **может** измениться при: - Перемещении элемента в другой parent / другой файл - Реордере элементов **того же** тега в одном parent (изменение ordinal-among-same-tag) - Полной переписке текста, если текст был единственным distinctive признаком - **Удалённые ID не переиспользуются** — заносятся в tombstone-секцию manifest'а. ### 1.3. Production safety - Plugin не запускается при `NODE_ENV === 'production'`. - `` обёрнут в `v-if="import.meta.env.DEV"` → tree-shake'ится production-bundle'ом. - Ноль `data-dx` атрибутов в production HTML. Ноль bytes overhead в production JS. ### 1.4. Доступность manifest для Claude - `dev-indices.json` commit'ится в репо. - Claude читает manifest через `Read` / `Grep` tools — мгновенный lookup `1030 → file:line:tag:text`. - Дополнительно: CLI `npm run dx ` для CLI-lookup. ## 2. Архитектура Две независимые подсистемы: ### 2.1. Build-time: Vite plugin **Файлы:** `app/vite-plugins/dev-indices/{index,signature,manifest}.ts` **Hook:** `transform()` для `*.vue` источников. Использует `@vue/compiler-sfc` для извлечения `