JavaRush /Курси /Claude code /CODEBASE_INVENTORY.md

CODEBASE_INVENTORY.md — карта проєкту

Claude code
Рівень 7 , Лекція 2
Відкрита

1. Розмову потрібно перетворювати на артефакт

Розмова з Claude про новий codebase здається майже розв’язанням: він підсумовує структуру, перелічує модулі, каже, де що лежить. Але все це живе всередині сесії. Сесії закінчуються й засмічуються — через кілька днів залишається відчуття розумної наради без протоколу.

Тому discovery треба фіксувати у файлі — щоб наступне запитання до проєкту починалося не з нуля. CODEBASE_INVENTORY.md — робоча карта місцевості: де логіка, як запускати, де тести, що не чіпати без підготовки, що ви ще не зрозуміли.

flowchart TD
    A[Discovery по репозиторію] --> B[Запитання з evidence]
    B --> C[Чернетка CODEBASE_INVENTORY.md]
    C --> D[Перевірка файлів і команд]
    D --> E[Робоча карта проєкту]

Без файлу завтра ви знову запитаєте: «А де обробка замовлень?» З inventory відкрили файл і за хвилину відновили картину.

2. README.md і CODEBASE_INVENTORY.md: колеги

Inventory легко сплутати з README. Але README відповідає: «Що це і як підняти?» Inventory: «Як усередині орієнтуватися, щоб щось зрозуміти або змінити?»

Артефакт Головне запитання Для кого корисний насамперед Що в ньому зазвичай є
README.md
Що це за проєкт і як його запустити? Новий розробник, зовнішній читач, рев’юер репозиторію призначення проєкту, швидкий старт, залежності, базові команди
CODEBASE_INVENTORY.md
Як цей проєкт влаштований ізсередини і де що шукати? Розробник, який досліджує або змінює код модулі, відповідальність частин системи, точки входу, тести, конфіги, небезпечні зони, відкриті запитання

На Commerce OS це видно. README скаже: «ecommerce-платформа, backend на Spring Boot, frontend на Next.js» — досить, щоб стартувати. Але де обробляються повернення, чому ai-assist/ ризикована — README мовчить.

README — вхідні двері. Inventory — план будівлі.

3. Зміст CODEBASE_INVENTORY.md

Перший inventory тягне в крайності: запхати все підряд або обмежитися трьома рядками. Робочий — короткий і насичений: не переказує код, а допомагає орієнтуватися. Набір розділів стабільний.

Розділ Що ви туди записуєте Приклад для Commerce OS
Стек і технології Мови, основні фреймворки, база даних Java 25, Spring Boot, React, Next.js, PostgreSQL
Модулі та їхня відповідальність Великі папки і за що кожна відповідає orders/ — кошик, оформлення, статуси
Точки входу Звідки стартує застосунок або окремі потоки HTTP-контролери, frontend entry, фонові задачі
Корисні команди Як запустити, зібрати й протестувати проєкт
./gradlew test
,
npm run dev
Тести Де лежать тести і що покривають backend integration tests, frontend tests
Конфіги Які конфігураційні файли важливі application.yml, .env.example, frontend config
Зони підвищеного ризику Що змінювати особливо обережно payments/, migrations/, чутливі інтеграції
Відкриті запитання Що поки незрозуміло і потребує перевірки звідки береться confidence score в ai-assist/

На старті вистачить каркаса:

# CODEBASE_INVENTORY.md

## Стек і технології

## Модулі та відповідальність

## Точки входу

## Корисні команди

## Тести і конфіги

## Мапа залежностей

## Потоки виконання

## Зони підвищеного ризику

## Відкриті запитання

Dependency map і Runtime flows спочатку можуть бути порожніми — inventory зростає разом із розумінням проєкту. Для нетривіальних тверджень залишайте коротке посилання на джерело: файл, метод, тест або команду.

В inventory потрапляють і незрозумілі частини: «не підтверджено, потрібно перевірити» корисніше за вигадане пояснення.

4. Збірка inventory разом із Claude Code

Inventory не пишуть наодинці — Claude корисний. Але тільки якщо тримаєте звичку з минулого заняття: кожне важливе твердження спирається на файл, тест або команду. Інакше він напише гладкий текст, що не збігається з кодом.

Рухайтеся в три проходи:

Прохід Що робимо Що отримуємо
Перший Просимо Claude зібрати чернетку за структурою Швидкий огляд проєкту
Другий Перевіряємо спірні місця за файлами і командами Підтверджені факти
Третій Скорочуємо формулювання і додаємо ризик-зони Робочий навігаційний артефакт

Запит першого проходу:

Допоможи зібрати чернетку CODEBASE_INVENTORY.md для цього репозиторію.

Потрібні розділи:
- стек і основні технології
- модулі та їхня відповідальність
- точки входу
- корисні команди запуску і тестів
- тести і конфіги
- зони підвищеного ризику
- відкриті запитання

Для кожного важливого твердження вкажи файл або команду, на яку ти спираєшся.
Якщо щось не перевірено — познач як "не підтверджено".
Пиши коротко: це навігаційна карта, а не переказ коду.

Результат не приймайте за готовий файл. Відкрийте згадані файли, запустіть команди. Написав, що backend стартує через Gradle, — перевірте. Назвав payments/ зоною ризику — переконайтеся, що там повернення та інтеграції з платіжним провайдером. Докази не зберігайте: достатньо посилань.

Claude збирає каркас, ви перетворюєте його на карту. Inventory зростає з перевіреного контексту.

5. Перша робоча версія для Commerce OS

Давайте подивимося на першу живу версію для Commerce OS. Довгою їй бути не потрібно: файл на шість екранів перестає бути навігацією.

# CODEBASE_INVENTORY.md

## Стек і технології
- Backend: Java 25, Spring Boot, Gradle Wrapper (`build.gradle`)
- Frontend: React + Next.js, Node.js (`frontend/package.json`)
- Сховище: PostgreSQL (`docker-compose.yml`, `application.yml`)

## Модулі та відповідальність
- `catalog/` — товари, категорії, пошук (`catalog/`)
- `orders/` — кошик, оформлення замовлення, статуси (`orders/`)
- `payments/` — оплата, повернення, інтеграція з PSP (`payments/`, `RefundController.java`)
- `support/` — тікети, відповіді, ескалації (`support/`)
- `ai-assist/` — класифікація тікетів і підказки оператору (`ai-assist/`, `application.yml`)

Файл описує відповідальність модулів, а не переказує класи. Напишете «OrderService.java містить placeOrder, cancelOrder…» — отримаєте каталог методів, який не читають.

Команди:

./gradlew bootRun   # запуск backend у режимі розробки
./gradlew test      # запуск backend-тестів
npm run dev         # запуск frontend у режимі розробки
npm test            # запуск frontend-тестів

Секція команд часто найкорисніша: через тиждень ви не пам’ятаєте, як стартував проєкт, а тут усе в одному місці.

Секцію тестів і конфігів фіксуйте стисло:

## Тести і конфіги
- backend-конфіг: `src/main/resources/application.yml`
- frontend-налаштування: `frontend/package.json`, `next.config.*`
- основні backend-тести лежать поруч із backend-модулями (`src/test`)
- частина поведінки `ai-assist/` покрита слабо, потрібно уточнювати за кодом і тестами (`ai-assist/`, `src/test`)

Останній рядок не вдає, що все зрозуміло, — він чесно позначає зону невизначеності.

6. Зони ризику і відкриті запитання — цінна частина файлу

Головне в inventory — не перелічити модулі, а зафіксувати що тут небезпечно і що ви поки не зрозуміли. Це економить час, коли ви повернетеся змінювати код, а не досліджувати.

## Зони підвищеного ризику
- `payments/` — повернення, статуси платежів, ризик подвійного списання (`payments/RefundController.java`, `payments/RefundService.java`)
- `migrations/` — змінювати тільки після перевірки і review (`migrations/`)
- `ai-assist/` — частина поведінки залежить від конфігів і покрита тестами не повністю (`ai-assist/`, `src/main/resources/application.yml`)

Запис попереджає: сюди не можна з настроєм «зараз швиденько підчистимо». Особливо в payments/ — гроші, статуси платежів, повернення: ціна помилки висока.

Відкритих запитань не соромтеся. Вони означають, що ви не вигадали відповіді там, де даних не вистачило.

## Відкриті запитання
- звідки `ai-assist/` отримує confidence score — не підтверджено, потрібен пошук за `git grep "confidence"`
- де описана політика retry для повернень у `payments/` — поки не знайдено, перевірити `git grep "retry" payments/`
- чи є окремий фоновий потік перерахунку метрик окрім основного HTTP-шляху — не підтверджено, дивитися `jobs/` і планувальники

Такі записи — золото: завтра не згадуєте болісно «там було щось незрозуміле, а що саме — забув». Inventory працює як зовнішня пам’ять проєкту — і для Claude, і для вашого мозку.

7. Inventory не має стати марним сувеніром

Головна небезпека — писати inventory «надто правильно»: красиво, відполіровано й марно. Шлях у цю пастку — сплутати навігацію з переказом коду: почнете перелічувати класи й методи — файл продублює репозиторій.

Погано:
- `OrderService.java` містить 14 методів для обробки замовлення, зокрема
  `placeOrder`, `cancelOrder`, `recalculateDiscount`, `notifyCustomer`...

Добре:
- `orders/` — кошик, оформлення замовлення, статуси та історія замовлення

Другий коротший і відповідає на запитання «куди йти за замовленнями?». Перший лише створює ілюзію деталізації.

Друга пастка — змішувати факти й здогадки без маркування. Не впевнені — пишіть прямо: «ймовірно», «не підтверджено». У великих codebase проєкт майже ніколи не зрозумілий повністю, і inventory це визнає.

І головне: inventory — живий артефакт. Дізналися про новий модуль — додали. Знайшли приховану точку входу — уточнили. Зона ризику розпливчаста — переписали.

Перша версія може бути короткою. Але якщо вона відповідає на три запитання — де шукати, як запускати і що небезпечно змінювати — inventory уже працює. А коли додадуться dependency map і runtime flows, проєкт перестає бути темним лісом.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ