BEHAVIOR_INVENTORY.md описує бізнес-потоки
`BEHAVIOR_INVENTORY.md` потрібен перед змінами в системі, де важлива фактична поведінка. Це не список файлів і не architectural diagram: кожен запис описує business flow, inputs, observable outputs, existing tests, missing checks і candidate на characterization.
Кандидат має мати явне значення `yes` або `no`. `yes` доречний для high-risk/high-business-criticality flow, uncovered edge case або ситуації, де code і documentation суперечать одне одному.
Схема одного запису
| Поле | Зміст |
|---|---|
| Потік | Назва бізнес-сценарію та його межі |
| Поточна поведінка | Що система фактично робить, із позначенням впевненості |
| Входи | Відтворювані дані, стан, час, flags або події |
| Виходи | Статуси, суми, дати, записи, повідомлення чи side effects |
| Існуючі тести | Тести та рівень, який вони покривають |
| Бракує перевірок | Конкретні uncovered conditions або manual checks |
| Кандидат на characterization | yes / no та коротке обґрунтування |
| Докази | Source, test, config, log або інший anchor |
П’ять обовʼязкових потоків
- pause/resume subscription — перевірте стан підписки, pause interval, resume date і наступне списання;
- partial refund in the middle of billing period — зафіксуйте суму, період, округлення та observable ledger output;
- failed payment followed by successful retry — розділіть failure, retry schedule, повторний успіх і повідомлення користувачу;
- plan switch on billing day — перевірте precedence дати, старий/новий план і суму на межі періоду;
- upgrade/downgrade in the middle of a period — відокремте prorating, effective date, credits і майбутній invoice.
Inputs, outputs і evidence мають бути відтворюваними
Для кожного flow вкажіть мінімальний набір inputs: ідентифікатор стану, timestamp або billing date, plan, amount, feature flag і зовнішню подію, якщо вона потрібна. Outputs мають бути спостережуваними: status transition, invoice/refund amount, next billing date, persisted record або повідомлення. Не записуйте «працює правильно» без конкретного observable result.
Existing tests покажіть із шляхом і рівнем. Якщо тестів немає, це missing check, а не доказ, що behavior неправильний. Розділяйте confirmed facts, assumptions і manual verification так само, як у ARCHITECTURE_CURRENT.md.
Від inventory до characterization candidate
- Виберіть приблизно 10–15 найсильніших кандидатів, а не кожну можливу умову.
- Поставте
yesдля дорогих, невкритих або суперечливих flows; поставтеno, якщо behavior уже достатньо підтверджена і ризик низький. - Запишіть reproducible inputs і observable outputs.
- Додайте evidence anchors і список того, що треба перевірити вручну.
- Передайте high/high entries у RISK_MAP.md з конкретною дією.
- Не пишіть characterization tests у межах цього discovery-завдання.
Канонічне джерело уроку · JavaRush
Відкрити матеріал JavaRush