fix: core typecheck without Node types; exact dependency versions (T1.1, O-2) #4

Merged
aep merged 1 commits from feat/3-core-types-pin-deps into main 2026-09-27 21:16:58 +03:00
Owner

Закрывает T1.1 и O-2 из #3 (Follow-ups from #1). Bounded-задача: без OpenSpec change и без плана, дизайн согласован в чате. M-3 и T4.1 остаются открытыми в #3.

Что сделано

  • T1.1: добавлен tsconfig.core.json (extends ./tsconfig.json, types: [], только src/core/**). npm run typecheck выполняет два прохода, build вызывает typecheck. process и Buffer в src/core теперь дают ошибку компиляции. Страж импортов tests/core-boundary.test.ts не менялся.
  • tests/core-types.test.ts компилирует фикстуру tests/fixtures/core-globals/uses-node-globals.ts с двумя конфигами. С корневым конфигом фикстура чистая. С core-конфигом ожидаются ошибки Cannot find name 'process'/'Buffer' и нет ошибок конфигурации, иначе тест прошёл бы ложно при отсутствующем tsconfig.core.json, что и было замечено на red-шаге. Фикстура исключена из include корневого tsconfig.json.
  • O-2: в devDependencies точные версии из lock-файла, добавлен .npmrc с save-exact=true. Тест на версии не добавлялся (решение человека: дублирует lock).
  • В CLAUDE.md описаны двухпроходный typecheck и правило для lock-файла.

Проверка

  • npm run typecheck, npm test (127/127), npm run build: всё зелёное.
  • Проба: временный src/core/_probe.ts с process.env.HOME роняет tsc -p tsconfig.core.json с TS2591. Файл удалён.

Rulings I made

  • R-1: package-lock.json обновлён только в корневых спецификаторах через скрипт, а не через npm install. На macOS npm install вычистил из lock ~530 строк опциональных бинарников @rolldown/binding-* для других платформ. npm ci на результате проходит без изменений lock. Цена ошибки: при расхождении lock и package.json npm ci упадёт, это сразу видно.
  • R-2: временный tsconfig теста создаётся в node_modules/.cache/, а не в системном tmpdir: оттуда не резолвится @types/node (TS2688). Добавлен фильтр ошибок конфигурации (TS5xxx/TS6053/TS2688), чтобы не было ложного прохода. Цена ошибки: тест упадёт на окружении без node_modules, но там не работает и vitest.
  • R-3: build вызывает npm run typecheck, а не дублирует команду tsc. Цена ошибки: нулевая.

Находки

Маркер Находка Статус
T1.1 (#1) Node-глобалы проходят typecheck в src/core fixed aecab76
O-2 (#1) Версии зависимостей не зафиксированы fixed aecab76
O-1 Корневой конфиг с Node-типами компилирует фикстуру без ошибок; исключение из include — гигиена, не необходимость rejected: не дефект, исключение сделано по решению человека

Refs #3

🤖 Generated with Claude Code

https://claude.ai/code/session_01QKHeGuAYh4W1jNdjMConZa

Закрывает T1.1 и O-2 из #3 (Follow-ups from #1). Bounded-задача: без OpenSpec change и без плана, дизайн согласован в чате. M-3 и T4.1 остаются открытыми в #3. ## Что сделано - **T1.1**: добавлен `tsconfig.core.json` (`extends ./tsconfig.json`, `types: []`, только `src/core/**`). `npm run typecheck` выполняет два прохода, `build` вызывает `typecheck`. `process` и `Buffer` в `src/core` теперь дают ошибку компиляции. Страж импортов `tests/core-boundary.test.ts` не менялся. - `tests/core-types.test.ts` компилирует фикстуру `tests/fixtures/core-globals/uses-node-globals.ts` с двумя конфигами. С корневым конфигом фикстура чистая. С core-конфигом ожидаются ошибки `Cannot find name 'process'/'Buffer'` и нет ошибок конфигурации, иначе тест прошёл бы ложно при отсутствующем `tsconfig.core.json`, что и было замечено на red-шаге. Фикстура исключена из `include` корневого `tsconfig.json`. - **O-2**: в `devDependencies` точные версии из lock-файла, добавлен `.npmrc` с `save-exact=true`. Тест на версии не добавлялся (решение человека: дублирует lock). - В CLAUDE.md описаны двухпроходный typecheck и правило для lock-файла. ## Проверка - `npm run typecheck`, `npm test` (127/127), `npm run build`: всё зелёное. - Проба: временный `src/core/_probe.ts` с `process.env.HOME` роняет `tsc -p tsconfig.core.json` с TS2591. Файл удалён. ## Rulings I made - **R-1**: `package-lock.json` обновлён только в корневых спецификаторах через скрипт, а не через `npm install`. На macOS `npm install` вычистил из lock ~530 строк опциональных бинарников `@rolldown/binding-*` для других платформ. `npm ci` на результате проходит без изменений lock. Цена ошибки: при расхождении lock и package.json `npm ci` упадёт, это сразу видно. - **R-2**: временный tsconfig теста создаётся в `node_modules/.cache/`, а не в системном tmpdir: оттуда не резолвится `@types/node` (TS2688). Добавлен фильтр ошибок конфигурации (TS5xxx/TS6053/TS2688), чтобы не было ложного прохода. Цена ошибки: тест упадёт на окружении без `node_modules`, но там не работает и vitest. - **R-3**: `build` вызывает `npm run typecheck`, а не дублирует команду `tsc`. Цена ошибки: нулевая. ## Находки | Маркер | Находка | Статус | |---|---|---| | T1.1 (#1) | Node-глобалы проходят typecheck в src/core | fixed aecab76 | | O-2 (#1) | Версии зависимостей не зафиксированы | fixed aecab76 | | O-1 | Корневой конфиг с Node-типами компилирует фикстуру без ошибок; исключение из include — гигиена, не необходимость | rejected: не дефект, исключение сделано по решению человека | Refs #3 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01QKHeGuAYh4W1jNdjMConZa
aep added 1 commit 2026-09-27 19:09:29 +03:00
T1.1: tsconfig.core.json (types: []) covers src/core; typecheck runs both
passes, so process/Buffer in core fail compilation. tests/core-types.test.ts
compiles a fixture with Node globals under both configs and rejects config
errors as false positives. The fixture is excluded from the root tsconfig.

O-2: devDependencies pinned to the locked versions, .npmrc save-exact=true.
Lock updated only in the root specifiers: npm install on macOS would prune
optional rolldown binaries for other platforms.

Refs #3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QKHeGuAYh4W1jNdjMConZa
aep merged commit 114e5f35ca into main 2026-09-27 21:16:58 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/obsidian-voice-note#4
No description provided.