⁉️ВИ відповіли, на якому ви рівні AI-роботи. Я зробив для вас Карту, як рухатись далі.
Минулого тижня я запитав, на якому етапі
у вас інтеграція AI в розробку. Проголосувало
95 людей.
Що показало опитування: 66% вже активно використовують AI. Але тільки 30% дійшли до структурованого підходу: skills, MCP, SDD.
Більшість зараз між "просто запускаю агент"
і "будую систему".
Зробив для вас карту 5 рівнів зрілості. Подивіться, де ви, і як рухатися далі.
Деталі по кожному рівню - за посиланням:
🔗 https://telegra.ph/Rozshifrovka-rekomendacіj-po-rіvnyah-05-10
Пишіть у коментарях, де ви на цій карті🧑🏼💻
Минулого тижня я запитав, на якому етапі
у вас інтеграція AI в розробку. Проголосувало
95 людей.
Що показало опитування: 66% вже активно використовують AI. Але тільки 30% дійшли до структурованого підходу: skills, MCP, SDD.
Більшість зараз між "просто запускаю агент"
і "будую систему".
Зробив для вас карту 5 рівнів зрілості. Подивіться, де ви, і як рухатися далі.
Деталі по кожному рівню - за посиланням:
🔗 https://telegra.ph/Rozshifrovka-rekomendacіj-po-rіvnyah-05-10
Пишіть у коментарях, де ви на цій карті🧑🏼💻
❤5👏4👍2
Дроп: jscpd v4.1.0 🎩
🚨Що нового:
→ AI Reporter (--reporters ai) - компактний вивід для feeding у LLM
→ MCP Server та Agent Skill для AI-агентів - підключайте через те, що любите
→ Підтримка Apex, CFML, GDScript
🫢Якщо ваш агент задихається на copy-paste у згенерованому коді - спробуйте AI reporter.
🏁Швидкий старт зі скілом:
✔️Скіл працює з Claude, Cursor, Copilot, Gemini та іншими.
До речі, якщо ще не знали - skills.sh це реєстр з купою корисних скілів, не тільки наш.
npm: npmjs.com/package/jscpd
https://github.com/kucherenko/jscpd
🚨Що нового:
→ AI Reporter (--reporters ai) - компактний вивід для feeding у LLM
→ MCP Server та Agent Skill для AI-агентів - підключайте через те, що любите
→ Підтримка Apex, CFML, GDScript
🫢Якщо ваш агент задихається на copy-paste у згенерованому коді - спробуйте AI reporter.
🏁Швидкий старт зі скілом:
npx skills add kucherenko/jscpd✔️Скіл працює з Claude, Cursor, Copilot, Gemini та іншими.
До речі, якщо ще не знали - skills.sh це реєстр з купою корисних скілів, не тільки наш.
npm: npmjs.com/package/jscpd
https://github.com/kucherenko/jscpd
❤3👍2🔥2😁1
Спостереження тижня📊:
Кількість статей "AI замінить програмістів"📉 зменшилась.
Кількість статей "Як працювати з AI-агентом ефективно" 📈 виросла.
Це гарний сигнал - спільнота переходить від страху до прагматики. 🧠 Те саме було з ChatGPT у 2023, з Docker у 2014, з Cloud у 2010.
🦕Кожна нова технологія проходить три фази:
1. Це нас замінить.
2. Це все не працює нормально.
3. Це звичайний інструмент у наборі.
🛠️ AI-агенти зараз посеред другої фази. Третя - за 12-18 місяців.
Якщо встигнете опанувати дисципліну роботи з ними зараз 🏃♂️, то будете на перших ролях, коли всі підтягнуться🏆
Кількість статей "AI замінить програмістів"📉 зменшилась.
Кількість статей "Як працювати з AI-агентом ефективно" 📈 виросла.
Це гарний сигнал - спільнота переходить від страху до прагматики. 🧠 Те саме було з ChatGPT у 2023, з Docker у 2014, з Cloud у 2010.
🦕Кожна нова технологія проходить три фази:
1. Це нас замінить.
2. Це все не працює нормально.
3. Це звичайний інструмент у наборі.
🛠️ AI-агенти зараз посеред другої фази. Третя - за 12-18 місяців.
Якщо встигнете опанувати дисципліну роботи з ними зараз 🏃♂️, то будете на перших ролях, коли всі підтягнуться🏆
👍10❤6🔥2
Привіт, Math.random()!
Пропонуємо вам ознайомитися з isitagentready.com - це сервіс від Cloudflare, який перевіряє, чи готовий ваш сайт до AI-агентів.
Не до SEO.
Не до користувачів.
А до ChatGPT, Claude, Copilot, Cursor та інших агентів, які все частіше стають “інтерфейсом” до інтернету.
Сайт аналізує:
• robots.txt для AI-ботів
• доступність Markdown-контенту
• MCP / Agent Skills
• OAuth discovery
• API catalog
• agent-ready протоколи
По суті - це перші кроки до “SEO для AI”.
Схоже, скоро питання буде не “Чи знайде вас Google?”, а “Чи зможе ваш продукт зрозуміти та використати AI-агент?”
🔗 Досліджуйте тут: https://isitagentready.com
Пропонуємо вам ознайомитися з isitagentready.com - це сервіс від Cloudflare, який перевіряє, чи готовий ваш сайт до AI-агентів.
Не до SEO.
Не до користувачів.
А до ChatGPT, Claude, Copilot, Cursor та інших агентів, які все частіше стають “інтерфейсом” до інтернету.
Сайт аналізує:
• robots.txt для AI-ботів
• доступність Markdown-контенту
• MCP / Agent Skills
• OAuth discovery
• API catalog
• agent-ready протоколи
По суті - це перші кроки до “SEO для AI”.
Схоже, скоро питання буде не “Чи знайде вас Google?”, а “Чи зможе ваш продукт зрозуміти та використати AI-агент?”
🔗 Досліджуйте тут: https://isitagentready.com
Is Your Site Agent-Ready?
Scan your website to see if it's ready for AI agents. Check for llms.txt, MCP, agent skills, and other agent-friendly standards.
🔥7👍5❤2
🎩 Дроп: jscpd v4.2.0
🧩Cross-format detection - головна фіча. Тепер блок коду в одному форматі матчиться з блоком в іншому
🚀 Скрипт у .vue файлі - з
.ts файлом. Code block у Markdown - з .py файлом. Цього не вміє жоден з конкурентів
🔎223 підтримуваних формати - додали 71
новий в одному релізі. Apex, CFML, GDScript,
Svelte, Astro та ще 70+. Найбільший приріст
мов за всю історію проєкту📈
⚡️+11.5% швидше - замінив prismjs на
власний reprism-based engine.
Виміряно на реальному проєкті: 1126ms → 997ms на скані 548 файлів
🔍 Shebang detection - скрипти без розширень (з #!/usr/bin/env python3) тепер автоматично визначаються
🏎️Швидкий старт для AI agents:
Працює з Claude, Cursor, Copilot, Gemini 🤖
🏁Швидкий старт для людей:
У npm: npmjs.com/package/jscpd
changelog: github.com/kucherenko/jscpd/blob/master/CHANGELOG.md
P.S. Якщо jscpd колись зекономив вам час, прошу
підтримати на opencollective.com/jscpd
🧩Cross-format detection - головна фіча. Тепер блок коду в одному форматі матчиться з блоком в іншому
🚀 Скрипт у .vue файлі - з
.ts файлом. Code block у Markdown - з .py файлом. Цього не вміє жоден з конкурентів
🔎223 підтримуваних формати - додали 71
новий в одному релізі. Apex, CFML, GDScript,
Svelte, Astro та ще 70+. Найбільший приріст
мов за всю історію проєкту📈
⚡️+11.5% швидше - замінив prismjs на
власний reprism-based engine.
Виміряно на реальному проєкті: 1126ms → 997ms на скані 548 файлів
🔍 Shebang detection - скрипти без розширень (з #!/usr/bin/env python3) тепер автоматично визначаються
🏎️Швидкий старт для AI agents:
npx skills add kucherenko/jscpd
Працює з Claude, Cursor, Copilot, Gemini 🤖
🏁Швидкий старт для людей:
npx jscpd ./path
У npm: npmjs.com/package/jscpd
changelog: github.com/kucherenko/jscpd/blob/master/CHANGELOG.md
P.S. Якщо jscpd колись зекономив вам час, прошу
підтримати на opencollective.com/jscpd
❤4🔥3👏3
Поки тиша на каналі - я писав статтю на HackerNoon.
Запустив jscpd на 49 проектах з GitHub, які створені AI-агентами. Хотів виміряти скільки коду вони копіпастять.
Знайшов інше🤯
Перший проект у рейтингу за дуплікацією виявився не AI-додатком, а бібліотекою скілів для AI-агентів.
Другий - теж
бібліотека скілів.
Третій - фреймворк
для агентів.
‼️Тобто інфраструктура, яка вчить AI писати чистий код, сама на 30-40% складається з повторів.
Стаття пройде editorial review - кину посилання. А поки що почитайте сирі дані:
🔗 kucherenko.github.io/cpd-vibe-coding-report
Цікаво подивитись на свій проект jscpd-ом?
Запустив jscpd на 49 проектах з GitHub, які створені AI-агентами. Хотів виміряти скільки коду вони копіпастять.
Знайшов інше🤯
Перший проект у рейтингу за дуплікацією виявився не AI-додатком, а бібліотекою скілів для AI-агентів.
Другий - теж
бібліотека скілів.
Третій - фреймворк
для агентів.
‼️Тобто інфраструктура, яка вчить AI писати чистий код, сама на 30-40% складається з повторів.
Стаття пройде editorial review - кину посилання. А поки що почитайте сирі дані:
🔗 kucherenko.github.io/cpd-vibe-coding-report
Цікаво подивитись на свій проект jscpd-ом?
❤8🔥3👏3
🥷 SDK - це вже не просто обгортка над API, а шар контролю, де AI-лаби воюють за dev experience.
Робив pip install openai?
Ти вже користувався Stainless, просто не знав про це.
Вчора Anthropic купив його за $300M+ і закрив для всіх, крім себе.
Де це торкнеться тебе 👇
🟢 SDK OpenAI/Google у проді - не заберуть, але за 6-12 міс стиль може змінитись.
🟢 Будуєш на MCP - Anthropic володіє і протоколом, і тулзами.
AI-лаби воюють вже не за модель, а за інфраструктуру між нею і кодом.
DX - не маркетинг, а позиція на ринку 🎯
Робив pip install openai?
Ти вже користувався Stainless, просто не знав про це.
Вчора Anthropic купив його за $300M+ і закрив для всіх, крім себе.
Де це торкнеться тебе 👇
🟢 SDK OpenAI/Google у проді - не заберуть, але за 6-12 міс стиль може змінитись.
🟢 Будуєш на MCP - Anthropic володіє і протоколом, і тулзами.
AI-лаби воюють вже не за модель, а за інфраструктуру між нею і кодом.
DX - не маркетинг, а позиція на ринку 🎯
❤5🔥3👏3👍2
🏗 Як виглядає проект, де AI-агенти не імпровізують
Money Tracker - PWA для трекінгу фінансів.
⚒️Svelte 5 + Bun + Hono + SQLite. Multi-user auth, multi-currency, OCR чеків. Збудовано через Gangsta Agents:
🟢 Кожна фіча - окремий Heist із 6 фаз. Артефакти лежать у docs/gangsta/. Видно ВСЕ - не тільки код, а й чому саме так
🟢 First-run setup: 2 раунди Grilling до коду. Адвокат знайшов TOCTOU race condition. Don викинув env-змінні. До імплементації не дійшло - ідея була не готова
🟢 Auth-Heist: 59 тестів, 0 фейлів. 12 Work Packages, кожен трасується до пункту контракту
🟢 Ledger зберігає Commandments: "Never delete refresh tokens on first use". Уроки виплачені кров'ю - наступний агент їх читає до коду
🟢 Negative Constraints - гейт, який Devils-Advocate перевіряє автоматично
Часто AI-фреймворки показують теорію без коду або код-приклади без реальної історії розробки.
Money Tracker - живий продукт. Всі рішення задокументовані. Всі відкинуті альтернативи зафіксовані.
Money Tracker - PWA для трекінгу фінансів.
⚒️Svelte 5 + Bun + Hono + SQLite. Multi-user auth, multi-currency, OCR чеків. Збудовано через Gangsta Agents:
🟢 Кожна фіча - окремий Heist із 6 фаз. Артефакти лежать у docs/gangsta/. Видно ВСЕ - не тільки код, а й чому саме так
🟢 First-run setup: 2 раунди Grilling до коду. Адвокат знайшов TOCTOU race condition. Don викинув env-змінні. До імплементації не дійшло - ідея була не готова
🟢 Auth-Heist: 59 тестів, 0 фейлів. 12 Work Packages, кожен трасується до пункту контракту
🟢 Ledger зберігає Commandments: "Never delete refresh tokens on first use". Уроки виплачені кров'ю - наступний агент їх читає до коду
🟢 Negative Constraints - гейт, який Devils-Advocate перевіряє автоматично
Часто AI-фреймворки показують теорію без коду або код-приклади без реальної історії розробки.
Money Tracker - живий продукт. Всі рішення задокументовані. Всі відкинуті альтернативи зафіксовані.
👍4🔥4❤3👏1
⚔ The Grilling: чому без adversarial review AI агент реалізує першу згенеровану ідею
Подивився 4 фреймворки spec-driven development:
• Spec Kit (88k)
• OpenSpec (37k)
• BMad (44k)
• Gangsta Agents (new)
У трьох з чотирьох немає головного: механізму, який ламає погану ідею ДО коду.
Як це працює в реальності:
🤖Агент пропонує рішення.
🧠Воно виглядає логічно.
✅Тести зелені.
🧑🏼💻Code review проходить.
Через тиждень виявляється, що архітектурно це глухий кут. Або security діра. Або переписувати все…
Чому? Бо ніхто не атакував ідею, поки була змога її дешево змінити.
The Grilling - це формалізована суперечка трьох ролей:
🟡Proposer - пропонує архітектуру
⚫️Devils-Advocate - зобов'язаний атакувати: вразливості, regression risks, порушення constitution
🔵Synthesizer - інтегрує валідні атаки і фідбек Don-а
🔴 Don (ти - User) - найвища інстанція. Жоден етап не проходить перевірку без твого прямого схвалення.
Мінімум 2 раунди. Максимум 7. Вихід тільки за Nash Equilibrium - коли Devils-Advocate не може підняти жодне нове валідне заперечення.
Це не "ну подебатили і досить". Це математичний критерій зупинки. Без критерію зупинки суперечка триває, поки всі не втомились.
🚨І перемагає не найкраща ідея, а найгучніший голос.
У BMad є свій reviewer, але без Nash. У Spec Kit і OpenSpec немає взагалі - тільки через розширення.
Чому це важливо в епоху AI 👇
Агент без атаки на ідею пише ту, яка прийшла першою.
Це не баг моделі.
Це властивість процесу.
Агент - не архітектор.
Він виконавець.
Питання до вас 💬
У вашій команді хтось ОБОВ'ЯЗКОВО шукає проблеми в пропозиції до того, як її імплементують? Чи це робить ваш лід на ретро - коли вже пізно?
А завтра поясню, чому «Правильний код» ≠ «правильна система»
Подивився 4 фреймворки spec-driven development:
• Spec Kit (88k)
• OpenSpec (37k)
• BMad (44k)
• Gangsta Agents (new)
У трьох з чотирьох немає головного: механізму, який ламає погану ідею ДО коду.
Як це працює в реальності:
🤖Агент пропонує рішення.
🧠Воно виглядає логічно.
✅Тести зелені.
🧑🏼💻Code review проходить.
Через тиждень виявляється, що архітектурно це глухий кут. Або security діра. Або переписувати все…
Чому? Бо ніхто не атакував ідею, поки була змога її дешево змінити.
The Grilling - це формалізована суперечка трьох ролей:
🟡Proposer - пропонує архітектуру
⚫️Devils-Advocate - зобов'язаний атакувати: вразливості, regression risks, порушення constitution
🔵Synthesizer - інтегрує валідні атаки і фідбек Don-а
🔴 Don (ти - User) - найвища інстанція. Жоден етап не проходить перевірку без твого прямого схвалення.
Мінімум 2 раунди. Максимум 7. Вихід тільки за Nash Equilibrium - коли Devils-Advocate не може підняти жодне нове валідне заперечення.
Це не "ну подебатили і досить". Це математичний критерій зупинки. Без критерію зупинки суперечка триває, поки всі не втомились.
🚨І перемагає не найкраща ідея, а найгучніший голос.
У BMad є свій reviewer, але без Nash. У Spec Kit і OpenSpec немає взагалі - тільки через розширення.
Чому це важливо в епоху AI 👇
Агент без атаки на ідею пише ту, яка прийшла першою.
Це не баг моделі.
Це властивість процесу.
Агент - не архітектор.
Він виконавець.
Питання до вас 💬
У вашій команді хтось ОБОВ'ЯЗКОВО шукає проблеми в пропозиції до того, як її імплементують? Чи це робить ваш лід на ретро - коли вже пізно?
А завтра поясню, чому «Правильний код» ≠ «правильна система»
GitHub
gangsta/docs/heist-pipeline.md at master · kucherenko/gangsta
AI agentic skills framework for spec-driven development, built on the organizational model of mafia. - kucherenko/gangsta
❤9👍3🔥2😁1
Vibe coding vs Spec-Driven Development (SDD)
Різниця не в швидкості.
Різниця в тому, хто головний.
🤖У vibe coding головний - агент:
- ти кидаєш промпт, він вирішує як;
- пише код, який проходить тести і працює на щасливому шляху;
- і це все одно може бути не та система.
Бо "правильний код" - властивість тексту. Тести зелені, лінтер мовчить.
А "правильна система" - властивість сенсу. Робити те, що треба, у тому контексті, що є, не ламаючи сусіднє.
Між ними прірва.
Туди провалюються проекти, які стартували з "та тут на тиждень роботи" і закінчились "давайте перепишемо з нуля". Код був ідеальний. Задум - ніколи не зафіксований.
⚖️У SDD головна - специфікація. The Spec is Law:
- агент не співавтор, який імпровізує;
- він виконавець контракту;
- якщо код суперечить спеці - переписуємо спеку першою, через процедуру;
- ніколи навпаки;
- ніколи "ну він же сам так вирішив, нехай буде".
Що це міняє на практиці 👇
Це не про "більше документації". Це про те, хто диктує: твій задум чи імпровізація агента🥊
Різниця не в швидкості.
Різниця в тому, хто головний.
🤖У vibe coding головний - агент:
- ти кидаєш промпт, він вирішує як;
- пише код, який проходить тести і працює на щасливому шляху;
- і це все одно може бути не та система.
Бо "правильний код" - властивість тексту. Тести зелені, лінтер мовчить.
А "правильна система" - властивість сенсу. Робити те, що треба, у тому контексті, що є, не ламаючи сусіднє.
Між ними прірва.
Туди провалюються проекти, які стартували з "та тут на тиждень роботи" і закінчились "давайте перепишемо з нуля". Код був ідеальний. Задум - ніколи не зафіксований.
⚖️У SDD головна - специфікація. The Spec is Law:
- агент не співавтор, який імпровізує;
- він виконавець контракту;
- якщо код суперечить спеці - переписуємо спеку першою, через процедуру;
- ніколи навпаки;
- ніколи "ну він же сам так вирішив, нехай буде".
Що це міняє на практиці 👇
🤖Vibe coding: вимоги живуть в історії чату.
⚖️SDD: у документі, який є джерелом правди.
———
🤖Vibe coding: агент вирішує архітектуру на ходу.
⚖️SDD: архітектура зафіксована до першого рядка.
———
🤖Vibe coding: помилку знаходиш на проді.
⚖️SDD: погана ідея вмирає на етапі рев'ю спеки.
———
🤖Vibe coding: кожна сесія - чистий аркуш.
⚖️SDD: рішення і відмови зберігаються між сесіями.
———
🤖Vibe coding швидкий рівно до моменту, коли треба зрозуміти, що там відбувається.
⚖️SDD повільний на старті - і швидкий усе інше життя проекту.
Це не про "більше документації". Це про те, хто диктує: твій задум чи імпровізація агента🥊
👍9❤4🔥2
42% дублів. Не в коді від AI - у файлах, що вчать AI не дублювати‼️
Я просканував 49 AI-згенерованих проектів на GitHub
🍋У 7.24 млн рядків коду:
🔁 25 612 дубльованих блоків
📊 7,98% середнє дублювання
⚠️ 45 із 49 проектів - з дублями
Думав, найгірші — «vibe-coded» застосунки, зліплені за вихідні з AI. Виявилось - ні. 6–9%. Вище норми, але не критично.
А далі - головний парадокс.
Skill-бібліотеки - markdown-інструкції, що вчать Claude, Cursor, Gemini й Codex поводитись правильно - дали 30–42% дублів
Я підтримую jscpd 13 років. Бачив багато дублів. Але це нова форма: шар, що вчить машини дисципліни, - найменш дисциплінований у стеку
Повна методологія, топ-10 і застереження 👇
🔗https://hackernoon.com/what-49-vibe-coded-github-projects-revealed-about-ai-code-duplication
Я просканував 49 AI-згенерованих проектів на GitHub
🍋У 7.24 млн рядків коду:
🔁 25 612 дубльованих блоків
📊 7,98% середнє дублювання
⚠️ 45 із 49 проектів - з дублями
Думав, найгірші — «vibe-coded» застосунки, зліплені за вихідні з AI. Виявилось - ні. 6–9%. Вище норми, але не критично.
А далі - головний парадокс.
Найвищий рівень дублювання спостерігався в інфраструктурі, створеній для того, щоб AI-агенти генерували чистий кодSkill-бібліотеки - markdown-інструкції, що вчать Claude, Cursor, Gemini й Codex поводитись правильно - дали 30–42% дублів
Я підтримую jscpd 13 років. Бачив багато дублів. Але це нова форма: шар, що вчить машини дисципліни, - найменш дисциплінований у стеку
Повна методологія, топ-10 і застереження 👇
🔗https://hackernoon.com/what-49-vibe-coded-github-projects-revealed-about-ai-code-duplication
❤6👍5🔥3
Історія про те, як AI-агенти нескінченно повторюють одні й ті самі помилки - бо система не вміє їх запам’ятовувати
На прикладі Money Tracker. Це не теоретичний edge case - це 1-2% мобільних сесій у поганій мережі.
У нас є Ledger - файл колективної пам’яті проекту. Туди потрапляють уроки, «виплачені» попередніми Heist-ами. Наступний агент читає їх ДО того, як писати код.
Один з найдорожчих рядків там:
«Never delete refresh tokens on first use; mark them as consumed.»
Звідки він з'явився 👇
Auth-Heist.
Реєстрація + логін + refresh-token rotation.
Класична схема: при оновленні access-token-у refresh теж ротується. Старий стає недійсним. Виглядає безпечно.
Перша імплементація виглядала логічно:
🔺 клієнт приходить з refresh-token;
🔺 сервер одразу видаляє його з БД
🔺 видає новий;
🔺 повертає клієнту.
Проблема знайшлась у тестах race condition.
Сценарій:
🔴 Клієнт надсилає запит А з refresh-токеном.
🔴 Сервер видаляє токен, видає новий, відповідає.
🔴 Відповідь губиться у мережі - timeout або обрив.
🔴 Клієнт ретраїть з тим самим refresh-токеном.
🔴 Сервер: "Цього токена немає в БД"
😡Logout. Юзер злий.
Що означає: погана ідея пройшла гейт. Дорого виправляли.
Рішення: не видаляти токени. Маркувати як consumed. У БД лишається запис, при ретраї сервер бачить consumed=true і повертає кеш попередньої відповіді або новий refresh, якщо вікно ретраю активне.
І найважливіше 👇
Цей рядок тепер у Ledger, у файлі, який Reconnaissance ОБОВ'ЯЗКОВО читає до кожного нового Heist-у з auth-тематикою.
Тобто наступний агент, який торкатиметься токенів, отримає це як ввідні. Без шансу пропустити.
❗️Чому це важливо
Більшість команд "вчаться на своїх помилках" неформально:
🚩Це означає - не вчаться.
🚩Урок живе в голові того, хто помилився.
🚩Звільнився - урок зник.
🚩Прийшов новий розробник - повторив помилку.
Ledger - це механізм, який робить інституційну пам'ять примусовою❗️
Скільки коштує ваше “ми це вже проходили, але я забув”?
На прикладі Money Tracker. Це не теоретичний edge case - це 1-2% мобільних сесій у поганій мережі.
У нас є Ledger - файл колективної пам’яті проекту. Туди потрапляють уроки, «виплачені» попередніми Heist-ами. Наступний агент читає їх ДО того, як писати код.
Один з найдорожчих рядків там:
Звідки він з'явився 👇
Auth-Heist.
Реєстрація + логін + refresh-token rotation.
Класична схема: при оновленні access-token-у refresh теж ротується. Старий стає недійсним. Виглядає безпечно.
Перша імплементація виглядала логічно:
🔺 клієнт приходить з refresh-token;
🔺 сервер одразу видаляє його з БД
🔺 видає новий;
🔺 повертає клієнту.
Проблема знайшлась у тестах race condition.
Сценарій:
🔴 Клієнт надсилає запит А з refresh-токеном.
🔴 Сервер видаляє токен, видає новий, відповідає.
🔴 Відповідь губиться у мережі - timeout або обрив.
🔴 Клієнт ретраїть з тим самим refresh-токеном.
🔴 Сервер: "Цього токена немає в БД"
😡Logout. Юзер злий.
Що означає: погана ідея пройшла гейт. Дорого виправляли.
Рішення: не видаляти токени. Маркувати як consumed. У БД лишається запис, при ретраї сервер бачить consumed=true і повертає кеш попередньої відповіді або новий refresh, якщо вікно ретраю активне.
І найважливіше 👇
Цей рядок тепер у Ledger, у файлі, який Reconnaissance ОБОВ'ЯЗКОВО читає до кожного нового Heist-у з auth-тематикою.
Тобто наступний агент, який торкатиметься токенів, отримає це як ввідні. Без шансу пропустити.
❗️Чому це важливо
Більшість команд "вчаться на своїх помилках" неформально:
🚩Це означає - не вчаться.
🚩Урок живе в голові того, хто помилився.
🚩Звільнився - урок зник.
🚩Прийшов новий розробник - повторив помилку.
Ledger - це механізм, який робить інституційну пам'ять примусовою❗️
Не "було б добре пам'ятати", а "наступний агент не зможе працювати, не прочитавши".
Скільки коштує ваше “ми це вже проходили, але я забув”?
GitHub
GitHub - kucherenko/gangsta-money-tracker-example
Contribute to kucherenko/gangsta-money-tracker-example development by creating an account on GitHub.
❤7👍3👏2