JavaRush /Курси /Claude code /Risk-класифікація і capability envelope

Risk-класифікація і capability envelope

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

1. Класифікація ризику відбувається раніше за перший prompt

У багатьох розробників ланцюжок до цього моменту виглядав приблизно так: побачили issue, відкрили Claude, сформулювали задачу — а про ризик подумали вже по ходу. На pet-проєкті це ще можна пережити; у Commerce OS це вже імпровізація з елементами цирку.

Класифікація ризику потрібна не заради бюрократії і не заради гарної таблички в Notion. Вона відповідає на дуже приземлене запитання: яким буде blast radius помилки, якщо Claude зробить зайве. Правка README.md і правка production-конфіга платежів — це зовсім різні наслідки, а Claude при цьому старанний однаково. Проблема не в старанності, а в тому, що старанний асистент із доступом не туди — це вже маленький виробничий інцидент.

Раніше на safety було легко дивитися з хвоста процесу: tests, review, quality gates, merge. Із production питання зміщується лівіше: спочатку — що Claude взагалі можна доручити, потім закріпити межі в репозиторії, не тягнути в сесію зайві дані, ризиковані кроки запускати в дешевому середовищі, і лише потім підходити до релізу.

Корисно одразу розвести чотири сутності, які легко переплутати:

Шар Головне запитання
Task spec Що саме ми робимо
План перевірки Чим ми доведемо, що зробили правильно
Risk classification Наскільки небезпечна сама задача
Capability envelope Що саме дозволено Claude в межах цієї задачі

Risk classification з’являється до prompt і до execution. Це не quality gate перед merge: gate питає «чи можна пропускати результат далі?», а класифікація — «який режим роботи взагалі допустимий із самого початку?».

Наочно це виглядає так:

flowchart TD
    A["Нова задача"] --> B["Класифікація ризику"]
    B --> C["Capability envelope"]
    C --> D["Task spec / prompt"]
    D --> E["Робота Claude"]
    E --> F["Checks / review / gate"]

Якщо зовсім по-простому, раніше ви відповідали лише на два запитання: «що робимо?» і «як перевіримо?». Тепер додається третє: «наскільки небезпечно взагалі починати це таким способом?». Саме це запитання рятує команди від фрази «ну хто ж міг подумати, що правка конфіга виявиться важливішою за саму фічу».

2. Shortcut: low-risk, review-required, high-risk

Гарна новина: у щоденній роботі вам не потрібен комітет із філософії ризиків. Для більшості задач вистачає дуже грубого, але корисного shortcut, який можна прогнати буквально за п’ять секунд. Його мета не в академічній точності. Його мета — вчасно зупинити занадто бадьорий старт.

Ось базова схема:

Що зачіпає задача Рівень ризику Практичний сенс
production, база даних, секрети, shared infrastructure, незворотні дії high-risk Claude може готувати план, але не виконувати
Код, конфіги, залежності, API-контракти review-required Claude може допомагати, але робота відбувається під review і з явними межами
Документація, README, невеликий локальний refactor із тестами low-risk Можна працювати з мінімальним тертям
Якщо ви не впевнені review-required Не вгадуємо оптимізмом

На перший погляд правило грубе. І так, спеціально: воно розраховане на того, хто вирішує швидко по задачі з backlog, а не на техліда, який пише політику на квартал уперед. Якщо вам, щоб класифікувати задачу, потрібно пів години сперечатися, low-risk це чи review-required, значить shortcut уже спрацював: показав, що задача не така вже й очевидна.

Дуже важливо зрозуміти останній рядок: якщо не впевнені, за замовчуванням — review-required, не low-risk. Це правило потрібне не тому, що світ злий, а тому, що невизначеність сама по собі підвищує ризик. Коли ви їдете в тумані, нормальний водій не тисне на газ зі словами «так, мабуть, там пряма».

А ось на цьому місці часто спотикаються: зміна конфігурації теж зазвичай review-required, хоча виглядає майже як текст. Конфіги люблять ламати не гірше за код — просто роблять це мовчки і з виглядом невинного YAML-файлу.

3. Однієї мітки замало — потрібен capability envelope

Одна мітка review-required корисна приблизно як наліпка «обережно» на дверях: вона каже, що всередині серйозне, але що саме робити, чого не робити і де вогнегасник — не сказано. Тому після risk label потрібна наступна річ — capability envelope, тобто контур дозволених можливостей для цієї конкретної задачі. Найзручніший формат тут — короткий шаблон, який підходить і для RISK_CLASSIFICATION.md, і для PR description, і для handoff note:

## Capability envelope

Рівень ризику: review-required
Дозволені інструменти: Read, Edit у `support/**`, run tests
Потрібні схвалення: human PR review
Потрібні перевірки: unit tests, integration tests, lint
Заборонені дії: edits у `payments/**`, `migrations/**`, `.env*`
Очікуваний відкат: revert PR, regression test залишається

Шість полів, кожне — за своє:

Поле Що воно означає Навіщо воно потрібне
Risk level Коротка мітка ризику Щоб усі говорили однією мовою
Allowed tools Що Claude взагалі дозволено використовувати Щоб не було прихованого розширення можливостей
Required approvals Хто має ухвалити проміжне або фінальне рішення Щоб у задачі був людський власник
Required checks Які перевірки є обов’язковими Щоб verification не вигадувалася заднім числом
Forbidden actions Що заборонено навіть якщо «здається зручним» Щоб відсікти корисне, але небезпечне overreach
Rollback expectation Як відкочуємося, якщо все пішло не туди Щоб не сподіватися на магічне «полагодимо зверху»

Зверніть увагу на корисну деталь: capability envelope не підміняє task spec. Task spec скаже: «виправити сортування refund-запитів». Envelope скаже: «редагувати лише support-частину, у payments не лізти, після змін — такі-то перевірки». Тобто одна сутність відповідає за сенс задачі, а інша — за межі поведінки.

І ще один практичний момент щодо міри: low-risk задачам не потрібен роман у десяти главах, для них envelope може бути дуже коротким. High-risk задачі, навпаки, майже завжди вимагають явної заборони на виконання і режиму plan-only. Не треба однаково докладно оформлювати все підряд, інакше люди перестануть читати документ уже на третьому README fix.

4. Shortcut на задачах Commerce OS

Щоб не жити в абстракції, давайте прогонимо shortcut на знайомих задачах із Commerce OS. На папері майже все виглядає очевидно, але в реальному backlog раптом з’ясовується, що «маленька правка» і «безпечна правка» — далеко не синоніми.

Ось кілька типових прикладів:

Задача Класифікація Чому
Оновити команду локального запуску в README.md low-risk Документація, немає production-поведінки
Виправити сортування refund-запитів у support inbox review-required Код і сценарій користувача
Змінити схему відповіді публічного refund API review-required API-контракт і ризик регресії
Запустити ручний SQL проти production БД high-risk Production + data mutation
Ротувати production Stripe key high-risk Секрети та зовнішня інтеграція

Найкорисніше дивитися на прикордонні випадки. Припустімо, у вас задача: «трохи поправити конфіг feature flag». Новачок легко скаже: «це ж просто конфіг, майже як текстовий файл». А на практиці конфіг може вимкнути половину checkout-потоку, змінити доступи або зламати сумісність. Тому в цьому shortcut зміни конфігів за замовчуванням ідуть у review-required. Не тому, що всі конфіги однаково страшні, а тому, що shortcut захищає від занадто раннього оптимізму.

Тепер приклад із support-потоку. Виправлення сортування refund-запитів — це review-required. Тут не потрібно оголошувати надзвичайний стан, але й не можна писати prompt у стилі «Claude, швидко поправ і заодно почисть усе навколо». Правильний режим — обмежити область support/**, заборонити payments/**, вимагати regression test і diff review. Жодної драми, просто дисципліна.

А ось rotation production key — уже зовсім інша розмова. Тут Claude корисний як підготовник матеріалів: plan, checklist, rollback window, список залежних сервісів. Але не як виконавець. І це важлива зміна інтонації. У low-risk ви можете просити «онови». У review-required — «спочатку досліди й запропонуй план». У high-risk — «нічого не виконуй, лише підготуй матеріали». Одна лише зміна дієслова сильно зменшує шанс випадково зробити зайве.

5. RISK_CLASSIFICATION.md у Workflow Kit

Щоб класифікація не жила лише в голові однієї охайної людини в команді, її потрібно перетворити на артефакт. У нашому курсі таким артефактом стає RISK_CLASSIFICATION.md із Workflow Kit. Це важлива деталь: документ живе не всередині конкретної фічі Commerce OS, а в метарівні командного workflow.

Добрий RISK_CLASSIFICATION.md має бути коротким, жорстким до невизначеності й читатися за хвилину. Наприклад, так:

# RISK_CLASSIFICATION.md

## Швидка класифікація
- production / DB / secrets / спільна інфраструктура / масове видалення -> high-risk
- code / config / dependencies / API contracts -> review-required
- docs / README / small local refactor with tests -> low-risk
- якщо не впевнені -> review-required

## Шаблон capability envelope
Рівень ризику:
Дозволені інструменти:
Потрібні схвалення:
Потрібні перевірки:
Заборонені дії:
Очікуваний відкат:

Так, вона коротка — і саме тому її реально читатимуть. А якщо перетворити цей файл на корпоративний роман із тридцятьма винятками, студенти, розробники і навіть сам Claude почнуть сприймати документ як інтерʼєр, а не як інструмент.

Зазвичай далі команда робить дві корисні речі. По-перше, посилається на цей файл із CLAUDE.md, щоб у Claude був той самий словник, що й у людей. По-друге, вставляє capability envelope у PR description для review-required і high-risk задач — тоді ревʼюер бачить не просто diff, а одразу контекст: який ризик, що дозволено, що заборонено, які перевірки обов’язкові:

## Capability envelope
Рівень ризику: review-required
Дозволені інструменти: Read, Edit у `support/**`, run tests
Потрібні перевірки: unit + integration tests
Заборонені дії: `payments/**`, `migrations/**`, `.env*`
Очікуваний відкат: revert PR

Зверніть увагу, як швидко такий блок охолоджує хаос. Розмова в ревʼю перестає звучати як «я наче поправив, подивіться» — і починає звучати як «ось у яких межах велася задача і чому diff виглядає саме так». Для production-команди це дуже доросла різниця.

6. Постановка задачі після класифікації

Найпрактичніший наслідок сьогоднішньої теми видно не в документах, а в тому, як ви формулюєте задачу для Claude: один і той самий issue за різної класифікації отримує різні стартові дієслова, різний обсяг роботи і різний рівень свободи. І, чесно кажучи, це одна з найкорисніших звичок усього модуля.

Для low-risk задач формулювання може звучати майже прямолінійно:

Онови `README.md`: команда запуску змінилася на `./gradlew bootRun`.
Зачепи лише документацію.
Покажи підсумковий diff.

Жодної драми — швидка зрозуміла правка без зайвого процесу.

Для review-required тон змінюється:

Задача review-required: виправити сортування refund-запитів у support inbox.
Спочатку досліди affected files і запропонуй короткий план.
Не змінюй `payments/**`, `migrations/**` і `.env*`.
Після плану дочекайся підтвердження.

Зверніть увагу, як з’являється фраза «спочатку досліди й запропонуй план». Це і є застосування класифікації на практиці — не якийсь далекий policy-файл, а конкретна робоча інтонація.

Для high-risk тон змінюється сильніше:

Задача high-risk: підготувати план для rotation production Stripe key.
Нічого не виконуй і не редагуй.
Підготуй checklist, rollback notes, список залежностей і ризиків.

Тут Claude перетворюється з виконавця на аналітика й редактора артефактів. І це абсолютно нормально: іноді найкращий спосіб використати AI — не дати йому зробити дію, а дати добре підготувати людину до цієї дії.

Із цієї ж логіки виростає ще одна корисна звичка. Якщо під час роботи ви раптом розумієте, що low-risk задача зачіпає API-контракт або вимагає походу до продової бази, ви не «дотискаєте» старий prompt, а перекласифіковуєте задачу: змінюєте capability envelope і лише потім продовжуєте. Це здається дрібницею, але саме в таких дрібницях workflow перестає бути красивою схемою на слайді і стає страховкою від самовпевненої дурості.

Але capability envelope живе на рівні конкретної задачі. Якщо заборона на payments/** або .env* є лише в одному task spec, вона занадто крихка: наступна задача буде сформульована інакше, і межа розчиниться. Тому envelope для задачі потрібен разом із загальним baseline репозиторію, де чутливі зони закріплені не як побажання в prompt, а як загальна policy.

Коли команда звикає до цієї мови, перше запитання по новій задачі за участю AI звучить уже не «який тут prompt написати?», а «який тут ризик?». І ось із цього моменту у вас з’являється не просто Claude в проєкті, а керована система роботи з ним.

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