# План v4 — F1: карточка сделки показывает «Город» (GREEN-половина TDD)

## Цель

Завершить TDD-цикл F1 по спеке D1: падающий тест на отображение города уже
написан в `DealDetailBody.spec.ts` и подтверждён красным при полном прогоне
vitest (текст карточки не содержит «Город»). Этот план — GREEN-половина:
минимальная правка компонента до зелёного. Денежных полей правка не касается.

## Метод

Навык `test-driven-development` объявлен в `skills-json` и реально вызывается до
первого мутирующего шага (отдельным шагом-операцией не оформлен: шаг `Skill` на
исполнении не двигает указатель и запирает план — навык обеспечивается
дисциплиной навыков, шагами идут конкретная правка и прогон).

RED уже зафиксирован: при полном прогоне `npm run test:vue` два новых теста
(«Город»+«Москва» и «Город»+прочерк при `city=null`) упали с
`expected ... to contain 'Город'` — фича отсутствует. Витест-фильтр по одному
файлу не используется: позиционный фильтр триггерит квирк `vite-plugin-vuetify
autoImport` («reading config» на коллекции); надёжен только полный прогон.

Шаги:

1. В `DealDetailBody.vue` в секцию «Параметры» добавляется блок «Город» со
   значением `deal.city` (прочерк «—» при пустом/`null`), той же разметкой
   `dt`/`dd`, что у соседних параметров.
2. Полный прогон vitest — оба новых теста зелёные, прочие фронт-тесты остаются
   зелёными.

```skills-json
["test-driven-development"]
```

```steps-json
[
  {"op":"Edit","object":"app/resources/js/components/deals/DealDetailBody.vue","ref":"D1"},
  {"op":"Bash","object":"npm --prefix app run test:vue","ref":"D1"}
]
```

```verified-context-json
[
  {"id":"vc1","kind":"EXTRACTED","ref":"app/resources/js/components/deals/DealDetailBody.vue","anchor":"Стоимость лида"},
  {"id":"vc2","kind":"EXTRACTED","ref":"app/tests/Frontend/DealDetailBody.spec.ts","anchor":"makeDeal"}
]
```

## Переговоры

### Круг 1

Почему план из двух шагов, а не четырёх (red→green): RED-тест уже написан в
`DealDetailBody.spec.ts` и подтверждён красным при полном прогоне (видел падение
по правильной причине — нет фичи). Этот план завершает зелёную половину цикла.
Команда верификации — полный прогон `npm --prefix app run test:vue` без
позиционного фильтра: фильтр по одному файлу ненадёжен (квирк autoImport даёт
ложную «reading config» на коллекции), полный прогон проверен рабочим (946
пройдено, упали только два целевых теста). Шаг 2 — последний и мутирующий-классом
(npm-прогон), указатель закроется штатно. Правка — только отображение поля `city`,
денежные поля не затрагиваются.

### Круг 2 — запрос рекомендации наставника

Наставник, дай, пожалуйста, краткую forward-рекомендацию по этому плану: на что
обратить внимание при добавлении отображения города и достаточно ли двухшаговой
GREEN-половины, раз RED уже подтверждён. Прошлых незакрытых замечаний нет — нужна
твоя содержательная рекомендация вперёд, чтобы вердикт был полным.
