# Фаза 57. tsc в npm test ## Зависимости Нет. Скрипт `typecheck` уже есть; `npm test` его не вызывает. ## Зачем Журнал срезов 1 и 7: дубликат ключа в `strings.ts` / поле в клиенте зелёный в vitest и красный на `npm run build`. Агент гоняет `npm test` и мержит дыру. ## Задачи - [ ] `package.json` → `"test":` сначала `tsc -b` (`typecheck`), потом `vitest run`. Без `&&` скрывать код выхода typecheck - [ ] Убрать петлю `"hschool-client": "file:"` из `dependencies`; `npm test` и `npm run build` без неё - [ ] `AGENTS.md` Commands и Testing policy: клиентский `npm test` включает typecheck - [ ] `test:watch` по-прежнему только vitest — typecheck на каждый файл в watch не нужен ## Тесты, без которых фаза не закрыта - [ ] `npm --prefix src/HSchool.Client test` гоняет tsc и vitest и проходит на текущем дереве - [ ] Дубликат ключа в одном объекте `strings.ts` (ru или en) делает `npm test` красным без `npm run build` - [ ] В `package.json` нет зависимости `hschool-client` - [ ] `npm --prefix src/HSchool.Client run build` проходит ## Критерий готовности - Обычный агентский `npm test` ловит TS2300/TS1117 - Watch-режим не стал вдвое медленнее из-за полного `tsc -b` на каждый файл ## Стоп Не тащить eslint ради одного дубликата. Не включать клиентский TS в stamp AppHost (фаза 49). Не бампить протокол. Не трогать сейв и HTTP.