build(git-sync): пакет @docmost/git-sync в develop, code-only (#326 step 1 / PR-A) #327

Merged
vvzvlad merged 2 commits from feat/293-A-git-sync-package into develop 2026-07-04 07:02:26 +03:00
Collaborator

Summary

Шаг 1 плана #326 (PR-A): приземляю код пакета @docmost/git-sync в develop, code-only, без функционала. Исходники конвертера+движка жили только на ветке #119; в develop лежал лишь мёртвый скомпилированный build/. Теперь весь пакет (src + ~700 тестов) под CI, но потребителей в develop нет — git-sync полностью инертен (grep git-sync по apps/server/src пусто), рантайм develop не меняется.

Это разблокирует #293 (вынести общий пакет-конвертер из ПРИЗЕМЛЁННЫХ исходников develop) и позволяет функционалу #119 лечь ПОСЛЕДНИМ, уже с каноническим форматом.

  • packages/git-sync: src (lib-конвертер + engine) + тест-корпус + конфиги.
  • Удалён мёртвый закоммиченный packages/git-sync/build/ из develop; gitignore на него (собирается в CI/Docker, не коммитим — нет дрейфа src/build).
  • pnpm-lock.yaml: добавлен importer @docmost/git-sync (без пакета в lock — CI-блокер, урок F1).
  • БЕЗ серверной интеграции / загрузчика / Dockerfile-рантайма (это приходит с #119 на шаге 6).

relates to #293, #326 · #119 приземляется шагом 6

How verified (прогоны приложены)

  • packages/git-sync tscEXIT 0, без ошибок.
  • vitest runTest Files 51 passed (51); Tests 711 passed | 1 expected-fail (712); 0 failures; 0 type errors.
  • pnpm install --frozen-lockfile (CI-проверка) → EXIT 0 («Lockfile is up to date, resolution step is skipped»).
  • grep -rl "@docmost/git-sync" apps/server/srcпусто (потребителя нет, рантайм инертен).

Checklist

  • develop не исполняет синк — приземлён только код+тесты (guardrail 1 #326)
  • нет серверной интеграции/загрузчика/Dockerfile-рантайма
  • git-sync/build не коммитим (gitignore), мёртвый build удалён
  • пакет в pnpm-lock, frozen-lockfile зелёный
  • отчёт с выводом тестов (guardrail 5)

Примечание: тест schema-editor-ext-contract.test.ts импортирует @docmost/editor-ext без явной deps в package.json git-sync (резолвится через workspace-hoist) — пред-существующая особенность ветки, перенёс as-is; можно уточнить отдельно.

## Summary Шаг 1 плана #326 (PR-A): приземляю **код** пакета `@docmost/git-sync` в develop, **code-only**, без функционала. Исходники конвертера+движка жили только на ветке #119; в develop лежал лишь мёртвый скомпилированный `build/`. Теперь весь пакет (src + ~700 тестов) под CI, но **потребителей в develop нет** — git-sync полностью инертен (`grep git-sync` по `apps/server/src` пусто), рантайм develop не меняется. Это разблокирует #293 (вынести общий пакет-конвертер из ПРИЗЕМЛЁННЫХ исходников develop) и позволяет функционалу #119 лечь ПОСЛЕДНИМ, уже с каноническим форматом. - `packages/git-sync`: src (lib-конвертер + engine) + тест-корпус + конфиги. - Удалён мёртвый закоммиченный `packages/git-sync/build/` из develop; gitignore на него (собирается в CI/Docker, не коммитим — нет дрейфа src/build). - `pnpm-lock.yaml`: добавлен importer `@docmost/git-sync` (без пакета в lock — CI-блокер, урок F1). - **БЕЗ** серверной интеграции / загрузчика / Dockerfile-рантайма (это приходит с #119 на шаге 6). relates to #293, #326 · #119 приземляется шагом 6 ## How verified (прогоны приложены) - `packages/git-sync` `tsc` → **EXIT 0**, без ошибок. - `vitest run` → **Test Files 51 passed (51); Tests 711 passed | 1 expected-fail (712); 0 failures; 0 type errors.** - `pnpm install --frozen-lockfile` (CI-проверка) → **EXIT 0** («Lockfile is up to date, resolution step is skipped»). - `grep -rl "@docmost/git-sync" apps/server/src` → **пусто** (потребителя нет, рантайм инертен). ## Checklist - [x] develop не исполняет синк — приземлён только код+тесты (guardrail 1 #326) - [x] нет серверной интеграции/загрузчика/Dockerfile-рантайма - [x] git-sync/build не коммитим (gitignore), мёртвый build удалён - [x] пакет в pnpm-lock, frozen-lockfile зелёный - [x] отчёт с выводом тестов (guardrail 5) Примечание: тест `schema-editor-ext-contract.test.ts` импортирует `@docmost/editor-ext` без явной deps в package.json git-sync (резолвится через workspace-hoist) — пред-существующая особенность ветки, перенёс as-is; можно уточнить отдельно.
agent_coder added 1 commit 2026-07-04 06:22:29 +03:00
The git-sync converter + engine source lived only on the #119 branch; develop
had just the dead compiled build/. Bring the whole package (src + ~700 tests)
onto develop under CI, with NO consumer wired — git-sync stays fully inert in
develop (nothing in apps/server imports it), so runtime behavior is unchanged.
This unblocks #293 (extract the shared converter package from the landed source)
and lets #119's functionality land LAST, already writing the canonical format
(per the #326 landing order).

- packages/git-sync: src (lib converter + engine) + test corpus + configs.
- Remove develop's dead committed packages/git-sync/build/; gitignore it
  (built in CI/Docker via pnpm build, never committed — no src/build drift).
- pnpm-lock.yaml: add the @docmost/git-sync importer (a missing workspace
  package in the lock is a CI blocker). `pnpm install --frozen-lockfile` passes.
- NO server integration / loader / Dockerfile runtime changes (those come with
  #119 at step 6).

Verified: tsc clean; vitest 711 passed | 1 expected-fail, 0 failures, 0 type
errors; pnpm --frozen-lockfile EXIT 0; apps/server has no git-sync import.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agent_coder added the review/needs label 2026-07-04 06:22:32 +03:00
Collaborator

Проверка PR-A против #326 шаг 1 — почти PASS, один блокер

Проверено независимо (fetch + diff по деревьям, не по описанию):

Скоуп чистый: 130 файлов = 128 внутри packages/git-sync + pnpm-lock.yaml + .gitignore. Ни apps/, ни Dockerfile, ни загрузчика.
Исходники байт-в-байт идентичны голове feat/git-sync (diff src/test/configs пуст) — канон/отсебятина не протащены, guardrail 3 соблюдён.
build/ удалён и заигнорен с комментарием про CI/Docker.
Lockfile: аддитивный importer packages/git-sync с пиннами (1 строка удалена — шум); --frozen-lockfile заявлен зелёным.
Инертность develop подтверждена: потребителей нет.

Блокер: не выметен закоммиченный packages/git-sync/node_modules — 31 файл. Он пред-существует в develop (приехал туда вместе с мёртвым build/), на feat/git-sync его НЕТ — ветка чистая, а этот PR, базированный на develop, его унаследовал и оставил. Содержимое — ровно класс F2, за который уже был вердикт мейнтейнера 06-21:

  • ~20 pnpm-симлинков в ../../../../node_modules/.pnpm/... (раскладка стора, регенерируется установкой);
  • 11 шимов в node_modules/.bin/ (esbuild, tsc, vitest, …);
  • вкоммиченный vitest-кэш node_modules/.vite/vitest/.../results.json — находка ещё из ревью #119 round-0.

Причина, почему это вообще коммитится: в корневом .gitignore паттерн /node_modules анкерный — вложенные packages/*/node_modules не игнорируются.

Что сделать

  1. git rm -r --cached packages/git-sync/node_modules (31 файл) в этом же PR — вычистка мусора пакета это его мандат, как и build/.
  2. .gitignore: сделать паттерн неанкерным (node_modules/) либо добавить packages/*/node_modules/ — чтобы класс закрылся, а не инстанс.
  3. После фикса — прогон vitest + --frozen-lockfile в чистом чекауте (guardrail 5, вывод приложить): симлинки в сторе могли маскировать нехватку зависимостей.

Заметка не-блокер: честно отмеченный тобой импорт @docmost/editor-ext без явной devDependency — добавь явную devDep либо здесь, либо первым коммитом #293 stage 1, чтобы contract-тест не зависел от hoist-раскладки.

После пунктов 1–3 с моей стороны возражений к мержу нет.

## Проверка PR-A против #326 шаг 1 — почти PASS, один блокер Проверено независимо (fetch + diff по деревьям, не по описанию): ✅ **Скоуп чистый**: 130 файлов = 128 внутри `packages/git-sync` + `pnpm-lock.yaml` + `.gitignore`. Ни `apps/`, ни Dockerfile, ни загрузчика. ✅ **Исходники байт-в-байт идентичны голове `feat/git-sync`** (diff src/test/configs пуст) — канон/отсебятина не протащены, guardrail 3 соблюдён. ✅ **build/ удалён и заигнорен** с комментарием про CI/Docker. ✅ **Lockfile**: аддитивный importer `packages/git-sync` с пиннами (1 строка удалена — шум); `--frozen-lockfile` заявлен зелёным. ✅ **Инертность develop подтверждена**: потребителей нет. ❌ **Блокер: не выметен закоммиченный `packages/git-sync/node_modules` — 31 файл.** Он пред-существует в develop (приехал туда вместе с мёртвым build/), на `feat/git-sync` его НЕТ — ветка чистая, а этот PR, базированный на develop, его унаследовал и оставил. Содержимое — ровно класс F2, за который уже был вердикт мейнтейнера 06-21: - ~20 pnpm-симлинков в `../../../../node_modules/.pnpm/...` (раскладка стора, регенерируется установкой); - 11 шимов в `node_modules/.bin/` (esbuild, tsc, vitest, …); - **вкоммиченный vitest-кэш** `node_modules/.vite/vitest/.../results.json` — находка ещё из ревью #119 round-0. Причина, почему это вообще коммитится: в корневом `.gitignore` паттерн `/node_modules` **анкерный** — вложенные `packages/*/node_modules` не игнорируются. ### Что сделать 1. `git rm -r --cached packages/git-sync/node_modules` (31 файл) в этом же PR — вычистка мусора пакета это его мандат, как и build/. 2. `.gitignore`: сделать паттерн неанкерным (`node_modules/`) либо добавить `packages/*/node_modules/` — чтобы класс закрылся, а не инстанс. 3. После фикса — прогон vitest + `--frozen-lockfile` в **чистом чекауте** (guardrail 5, вывод приложить): симлинки в сторе могли маскировать нехватку зависимостей. Заметка не-блокер: честно отмеченный тобой импорт `@docmost/editor-ext` без явной devDependency — добавь явную devDep либо здесь, либо первым коммитом #293 stage 1, чтобы contract-тест не зависел от hoist-раскладки. После пунктов 1–3 с моей стороны возражений к мержу нет.
vvzvlad added review/changes-requested and removed review/needs labels 2026-07-04 06:28:58 +03:00
agent_coder added 1 commit 2026-07-04 06:34:17 +03:00
PR-A inherited a committed packages/git-sync/node_modules (31 files: pnpm store
symlinks, .bin shims, and a committed vitest .vite cache) that arrived in develop
with the dead build/ — the F2 junk class. The root .gitignore `/node_modules` is
anchored, so nested packages/*/node_modules slipped through.

- git rm --cached the 31 files.
- .gitignore: `/node_modules` -> `node_modules/` (non-anchored) so nested package
  node_modules are ignored at any depth — closes the class, not just this instance.
- Add explicit "@docmost/editor-ext": "workspace:*" devDependency to git-sync
  (schema-editor-ext-contract.test imported it via hoist; now declared).

Re-verified in a clean checkout (all from local store, no network):
pnpm install --frozen-lockfile EXIT 0; git-sync tsc EXIT 0; vitest 51 files,
711 passed | 1 expected-fail, 0 failures; schema-editor-ext-contract 2/2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author
Collaborator

Починил блокер (коммит 5edd75da).

Блокер (закоммиченный packages/git-sync/node_modules, 31 файл): fixed.

  1. git rm -r --cached packages/git-sync/node_modules — 31 файла из индекса (.bin-шимы, .pnpm-симлинки, вкоммиченный vitest-кэш .vite/.../results.json). git ls-files packages/git-sync/node_modules → пусто.
  2. Закрыл КЛАСС в .gitignore (не инстанс): строка 7 /node_modules → неанкерный node_modules/ — теперь вложенные packages/*/node_modules игнорятся на любой глубине. Пруф: git check-ignore packages/git-sync/node_modules/.bin/esbuild печатает путь (ignored).
  3. Заметка-не-блокер тоже закрыл: добавил явную "@docmost/editor-ext": "workspace:*" в devDependencies git-sync (contract-тест больше не висит на hoist-раскладке).

Ре-верификация в чистом чекауте (guardrail 5, всё из локального стора, без сети):

  • pnpm install --frozen-lockfileEXIT 0.
  • packages/git-sync tscEXIT 0.
  • vitest run51 files, 711 passed | 1 expected-fail (712), 0 failures, 0 type errors.
  • schema-editor-ext-contract.test.ts изолированно → 2 passed (проходит с явной editor-ext deps).

Финальный diff: .gitignore / packages/git-sync/package.json / pnpm-lock.yaml (M) + 31 удаление node_modules (D). Больше ничего.

Починил блокер (коммит `5edd75da`). **Блокер (закоммиченный `packages/git-sync/node_modules`, 31 файл): fixed.** 1. `git rm -r --cached packages/git-sync/node_modules` — 31 файла из индекса (.bin-шимы, .pnpm-симлинки, вкоммиченный vitest-кэш `.vite/.../results.json`). `git ls-files packages/git-sync/node_modules` → пусто. 2. **Закрыл КЛАСС в .gitignore** (не инстанс): строка 7 `/node_modules` → неанкерный `node_modules/` — теперь вложенные `packages/*/node_modules` игнорятся на любой глубине. Пруф: `git check-ignore packages/git-sync/node_modules/.bin/esbuild` печатает путь (ignored). 3. **Заметка-не-блокер тоже закрыл**: добавил явную `"@docmost/editor-ext": "workspace:*"` в devDependencies git-sync (contract-тест больше не висит на hoist-раскладке). **Ре-верификация в чистом чекауте (guardrail 5, всё из локального стора, без сети):** - `pnpm install --frozen-lockfile` → **EXIT 0**. - `packages/git-sync` `tsc` → **EXIT 0**. - `vitest run` → **51 files, 711 passed | 1 expected-fail (712), 0 failures, 0 type errors**. - `schema-editor-ext-contract.test.ts` изолированно → **2 passed** (проходит с явной editor-ext deps). Финальный diff: `.gitignore` / `packages/git-sync/package.json` / `pnpm-lock.yaml` (M) + 31 удаление node_modules (D). Больше ничего.
agent_coder added review/needs and removed review/changes-requested labels 2026-07-04 06:34:38 +03:00
vvzvlad merged commit f5d19f9728 into develop 2026-07-04 07:02:26 +03:00
Sign in to join this conversation.