Files
brain/docs/superpowers/plans/2026-06-21-graphify-tools-scope-plan.md
T

4.3 KiB
Raw Blame History

План: scope авто-обновления графа под пост-сплит (graphify-tools-scope)

Цель

Внести изменение из спеки 2026-06-21-graphify-tools-scope-design: tools/ в scope инкрементального обнователя, app/ убран, *.test.mjs исключены; константы экспортируемы; тест-файл переписан под новый контракт; амендмент ADR-017. RED-первым, без коммита.

["test-driven-development"]
[
  {"op":"Edit","object":"tools/graphify-safe-update.test.mjs","ref":"D3"},
  {"op":"Bash","object":"npx vitest run tools/graphify-safe-update.test.mjs --config vitest.config.tools.mjs --reporter dot","ref":"D3"},
  {"op":"Edit","object":"tools/graphify-safe-update.mjs","ref":"D2"},
  {"op":"Bash","object":"npx vitest run tools/graphify-safe-update.test.mjs --config vitest.config.tools.mjs --reporter verbose","ref":"D2"},
  {"op":"Edit","object":"docs/adr/ADR-017-knowledge-graph-tooling.md","ref":"D4"}
]
[
  {"id":"vc-scopes","kind":"EXTRACTED","ref":"tools/graphify-safe-update.mjs","anchor":"const ALLOWED_SCOPES = ["},
  {"id":"vc-filter","kind":"EXTRACTED","ref":"tools/graphify-safe-update.mjs","anchor":"export function filterInScope("},
  {"id":"vc-adr","kind":"EXTRACTED","ref":"docs/adr/ADR-017-knowledge-graph-tooling.md","anchor":"Стратегия обновлений"}
]

Содержание шагов (точные правки, без заглушек)

Шаг 1 — RED: переписать тест (tools/graphify-safe-update.test.mjs):

  • импортировать ALLOWED_SCOPES, SCAN_EXCLUDE_DIRS из ./graphify-safe-update.mjs (вместо локальных копий);
  • утверждения нового контракта: tools/x.mjs — сохраняется; tools/x.test.mjs — отбрасывается; app/... — отбрасывается; docs/, .claude/ — сохраняются; dir-исключения без регресса; прямая проверка: ALLOWED_SCOPES.includes('tools/') === true, .includes('app/') === false, SCAN_EXCLUDE_DIRS.includes('.test.mjs') === true.

Шаг 2 — прогон RED: ожидается FAIL (текущий код: app/ в scope, tools/ вне, нет .test.mjs-исключения, константы не экспортированы).

Шаг 3 — GREEN: правка модуля (tools/graphify-safe-update.mjs):

  • export const ALLOWED_SCOPES = ['docs/', '.claude/', 'tools/']; (+export, +tools/, app/);
  • export const SCAN_EXCLUDE_DIRS = ['node_modules/', 'vendor/', '__pycache__/', '.git/', '.test.mjs']; (+export, +.test.mjs);
  • поведенческий путь (AST-разбор + build_merge + to_json) НЕ трогать.

Шаг 4 — прогон GREEN: ожидается PASS (отличается от шага 2 репортёром — не дубль).

Шаг 5 — амендмент ADR-017 (docs/adr/ADR-017-knowledge-graph-tooling.md, §«Стратегия обновлений»):

  • пометить мотивацию исключения tools/ как историческую (контекст прежнего большого монорепо);
  • зафиксировать пост-сплит правило: tools/ в scope (прод-код управляющего слоя), *.test.mjs и удалённый app/ исключены.

Переговоры

Круг 1

Порядок RED-первым (тест → прогон RED → код → GREEN), а не «код → тесты». Обоснование: это TDD-дисциплина, которую судья (DR-1) требует жёстко — RED-прогон ДО починки. Рекомендация «код сначала» из вердикта по спеке мягче этого гейта; при конфликте приоритет у TDD. Шаги 2 и 4 — разные команды (--reporter dot vs --reporter verbose), дублей нет. Verify-шаги не-readonly (прогон vitest пишет), указатель двигают. Зелёность полным сводом — отдельно через produce-verify-receipt на коммите (вне этого плана).