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
🎮 «Додати лідерборд у Tetris». Тривіально?
Прогнали цю «просту» фічу через adversarial review ДО специфікації.
Один раунд.
Devil's Advocate знайшов три діри:
1) Порушення constitution - буфер імені в чистому state machine, від якого залежать 261 тест.
2) Race condition - game-over через events-масив, який renderer спорожнить першим. Тригер губиться.
3) Stored XSS — імена з localStorage в DOM через innerHTML.
3️⃣ діри.
1️⃣ раунд.
0️⃣ рядків коду.
Найдешевший момент: вбити погане рішення поки воно ще не записане як істина.
Стаття 👉 https://dev.to/kucherenko/the-grilling-29d1
Прогнали цю «просту» фічу через adversarial review ДО специфікації.
Один раунд.
Devil's Advocate знайшов три діри:
1) Порушення constitution - буфер імені в чистому state machine, від якого залежать 261 тест.
2) Race condition - game-over через events-масив, який renderer спорожнить першим. Тригер губиться.
3) Stored XSS — імена з localStorage в DOM через innerHTML.
3️⃣ діри.
1️⃣ раунд.
0️⃣ рядків коду.
Найдешевший момент: вбити погане рішення поки воно ще не записане як істина.
Стаття 👉 https://dev.to/kucherenko/the-grilling-29d1
👍5❤3👏3
1. 🌐 WebMCP - MCP приходить у браузер.
Google представив стандарт, де сайт сам повідомляє агенту свої можливості. Агент не вгадує інтерфейс наосліп.
Цінність: час освоювати AEO (Agent Engine Optimization) - оптимізацію сайту під AI-агентів, що заходять замість юзера.
2. 🎯 Claude Opus 4.8 (28.05)
Головна фіча - чесність: модель у 4 рази рідше пропускає власні баги без позначки. Додали effort control - самі вирішуєте, скільки токенів витрачати.
Цінність: Anthropic визнав те, через що болить spec-driven - агент впевнено бреше про прогрес. Тепер борються на рівні моделі.
3. 🪱 Атака на TanStack (11.05)
Скомпрометували 42 пакети через дірку в GitHub Actions. Версії пушнув легітимний процес, не крадені токени.
Цінність: ставили того дня - оновіть секрети, перевірте GitHub Actions.
4. 🔄 Remix 3 у беті
Фреймворк, народжений у React-екосистемі, відвʼязався від React зовсім. Розворот для тих, хто знав його як альтернативу Next.js.
Цінність: будуєте на Remix - розберіться, на чому він тепер стоїть.
Google представив стандарт, де сайт сам повідомляє агенту свої можливості. Агент не вгадує інтерфейс наосліп.
Цінність: час освоювати AEO (Agent Engine Optimization) - оптимізацію сайту під AI-агентів, що заходять замість юзера.
2. 🎯 Claude Opus 4.8 (28.05)
Головна фіча - чесність: модель у 4 рази рідше пропускає власні баги без позначки. Додали effort control - самі вирішуєте, скільки токенів витрачати.
Цінність: Anthropic визнав те, через що болить spec-driven - агент впевнено бреше про прогрес. Тепер борються на рівні моделі.
3. 🪱 Атака на TanStack (11.05)
Скомпрометували 42 пакети через дірку в GitHub Actions. Версії пушнув легітимний процес, не крадені токени.
Цінність: ставили того дня - оновіть секрети, перевірте GitHub Actions.
4. 🔄 Remix 3 у беті
Фреймворк, народжений у React-екосистемі, відвʼязався від React зовсім. Розворот для тих, хто знав його як альтернативу Next.js.
Цінність: будуєте на Remix - розберіться, на чому він тепер стоїть.
👍9❤5👏2
10 топових безкоштовних AI-курсів, які я б рекомендував кожному розробнику 🚀
Якщо ви тільки починаєте свій шлях в AI - наступний допис буде для новачків
🥷 Екосистема Anthropic & Claude
Практичні навчальні модулі та гайди з розробки AI-агентів та інтеграції Claude
1) Claude Code in Action
2) Introduction to MCP
3) MCP: Advanced Topics
4) Introduction to Agent Skills
5) Building with the Claude API
🎓 Фундаментальна база (LLM & ML)
Курси, які дадуть глибоке розуміння того, що відбувається "під капотом" нейромереж
1) Harvard CS50: Intro to AI with Python
2) DeepLearning: Finetuning LLMs
3) Building Language Models on AWS
🛠️ Практичні інструменти: Microsoft & Google
Готові рішення для щоденного прискорення розробки
1) GitHub Copilot for VS
2) GenAI for Developers
Зберігайте в закладки та прокачуйте скіли на практиці!
Не проблема розпочати курс - проблема не кинути його 😅
Як у вас?
👍 - доводив(ла) хоча б один курс до кінця
👎 - кидав(ла) майже одразу
Частина 1: Для інженерів.
Якщо ви тільки починаєте свій шлях в AI - наступний допис буде для новачків
🥷 Екосистема Anthropic & Claude
Практичні навчальні модулі та гайди з розробки AI-агентів та інтеграції Claude
1) Claude Code in Action
2) Introduction to MCP
3) MCP: Advanced Topics
4) Introduction to Agent Skills
5) Building with the Claude API
🎓 Фундаментальна база (LLM & ML)
Курси, які дадуть глибоке розуміння того, що відбувається "під капотом" нейромереж
1) Harvard CS50: Intro to AI with Python
2) DeepLearning: Finetuning LLMs
3) Building Language Models on AWS
🛠️ Практичні інструменти: Microsoft & Google
Готові рішення для щоденного прискорення розробки
1) GitHub Copilot for VS
2) GenAI for Developers
Зберігайте в закладки та прокачуйте скіли на практиці!
Не проблема розпочати курс - проблема не кинути його 😅
Як у вас?
👍 - доводив(ла) хоча б один курс до кінця
👎 - кидав(ла) майже одразу
👍14❤7👎3
Найдорожча помилка з потужним інструментом - застосовувати його скрізь.
The Grilling - фаза, де ідея проходить структуровану атаку, перш ніж стати специфікацією. Proposer захищає рішення, Devil's Advocate шукає діри, Synthesizer переписує після кожного раунду.
Сесія завершується, коли Devil's Advocate не має валідних заперечень і Don не має питань - обидва тиски вичерпані одночасно. Nash Equilibrium.
Але є зміни, де цей процес завдає більше шкоди, ніж користі:
▪️ Тайпо, бамп залежностей - агенти вигадують заперечення, щоб заповнити раунди. Система переходить в театр.
▪️ Чистий рефактор із зеленим baseline - потрібна перевірка збереження поведінки, не атака ідеї.
▪️ Прототипування - adversarial review вбиває дослідження.
▪️ Прод горить, фікс малий - пропусти, задокументуй, рухайся.
Правило: скільки коштуватиме відкотити це, якщо ти помиляєшся?
Більше за review → гриль. Менше → ні.
Rigor - це не ганяти всі гейти щоразу. Це розуміти, який гейт важливий у конкретний момент
Part 2 серії про Gangsta Agents
The Grilling - фаза, де ідея проходить структуровану атаку, перш ніж стати специфікацією. Proposer захищає рішення, Devil's Advocate шукає діри, Synthesizer переписує після кожного раунду.
Сесія завершується, коли Devil's Advocate не має валідних заперечень і Don не має питань - обидва тиски вичерпані одночасно. Nash Equilibrium.
Але є зміни, де цей процес завдає більше шкоди, ніж користі:
▪️ Тайпо, бамп залежностей - агенти вигадують заперечення, щоб заповнити раунди. Система переходить в театр.
▪️ Чистий рефактор із зеленим baseline - потрібна перевірка збереження поведінки, не атака ідеї.
▪️ Прототипування - adversarial review вбиває дослідження.
▪️ Прод горить, фікс малий - пропусти, задокументуй, рухайся.
Правило: скільки коштуватиме відкотити це, якщо ти помиляєшся?
Більше за review → гриль. Менше → ні.
Rigor - це не ганяти всі гейти щоразу. Це розуміти, який гейт важливий у конкретний момент
Part 2 серії про Gangsta Agents
👍7❤2🔥2👏1
Multi-agent debate ≠ The Grilling.
Виглядають однаково: два агенти сперечаються, третій синтезує. Але вирішують різні задачі.
🤔 Три відмінності:
1. Grounding. Дебати працюють на тому, що в промпті - дві LLM ввічливо галюцинують одна одній. Grilling не стартує, поки ground truth не перевірено.
2. Ціль. Дебати шукають найкращу версію позиції. Grilling питає - чи варто її тримати взагалі. Легітимний результат включає «вбити ідею повністю».
3. Зупинка. Дебати - за розкладом, фіксовані раунди. Grilling — на рівновазі: жодного нового валідного заперечення І жодної залишкової тривоги у Don.
Дебати зупиняються на «досить сперечатися». Grilling - на «нема що валідного атакувати». Маєш вердикт, що пережив атаку.
Однакова обгортка. Зовсім різний механізм усередині.
Part 2 👉 https://dev.to/kucherenko/the-grilling-29d1
Виглядають однаково: два агенти сперечаються, третій синтезує. Але вирішують різні задачі.
🤔 Три відмінності:
1. Grounding. Дебати працюють на тому, що в промпті - дві LLM ввічливо галюцинують одна одній. Grilling не стартує, поки ground truth не перевірено.
2. Ціль. Дебати шукають найкращу версію позиції. Grilling питає - чи варто її тримати взагалі. Легітимний результат включає «вбити ідею повністю».
3. Зупинка. Дебати - за розкладом, фіксовані раунди. Grilling — на рівновазі: жодного нового валідного заперечення І жодної залишкової тривоги у Don.
Дебати зупиняються на «досить сперечатися». Grilling - на «нема що валідного атакувати». Маєш вердикт, що пережив атаку.
Однакова обгортка. Зовсім різний механізм усередині.
Part 2 👉 https://dev.to/kucherenko/the-grilling-29d1
👍10🔥4❤3
jscpd v5: 83 секунди → 3.4 секунди
Copy-paste detector для коду тепер у 24–37 разів швидший - повне переписування engine на Rust.
Реальні цифри (10 прогонів, Apple Silicon, v4 Node.js проти v5):
→ 548 файлів: 1.03с → 0.03с (34x)
→ 9K файлів, 164 MB: 15.8с → 0.43с (37x)
→ 17K файлів, 902 MB: 83с → 3.4с (24x)
Чому різниця така велика:
Зник startup overhead - на малому репозиторії майже весь 1.03с був запуском Node.js, ще до
сканування. Нативний бінарник стартує миттєво.
Тепер усі ядра - старий engine був однопотоковий, новий спалює 7.3с CPU за 3.4с реального часу.
І головне: drop-in заміна. Ті самі прапорці, конфіг, 223 формати.
Встановлення те саме -
Запустіть на своєму найбільшому репозиторії і напишіть результат у коментарях)
github.com/kucherenko/jscpd
Copy-paste detector для коду тепер у 24–37 разів швидший - повне переписування engine на Rust.
Реальні цифри (10 прогонів, Apple Silicon, v4 Node.js проти v5):
→ 548 файлів: 1.03с → 0.03с (34x)
→ 9K файлів, 164 MB: 15.8с → 0.43с (37x)
→ 17K файлів, 902 MB: 83с → 3.4с (24x)
Чому різниця така велика:
Зник startup overhead - на малому репозиторії майже весь 1.03с був запуском Node.js, ще до
сканування. Нативний бінарник стартує миттєво.
Тепер усі ядра - старий engine був однопотоковий, новий спалює 7.3с CPU за 3.4с реального часу.
І головне: drop-in заміна. Ті самі прапорці, конфіг, 223 формати.
Встановлення те саме -
npm install -g jscpd.Запустіть на своєму найбільшому репозиторії і напишіть результат у коментарях)
github.com/kucherenko/jscpd
🔥9👍7❤2👏2
AI-агенти швидкі, але некеровані? Gangsta Agents повертає контроль: кожен агент знає роль, кожен код починається зі специфікації 🎯
Як це влаштовано:
🔸 Spec Before Code — фаза Sit-Down завершується підписаним Contract. Без нього жоден Worker не пише код.
🔸 Battle-Tested Skills — розвідка, TDD-дрили, дебаг через допит, стратегії виходу. Кожна навичка — чистий markdown-файл.
🔸 Правило 1% — якщо є хоча б 1% шансу, що скіл застосовний, ти його викликаєш. Без раціоналізацій. Без скорочень.
🔸 Мультиагентна оркестрація — Underboss декомпозує, Crew Leads оркеструють, Workers виконують паралельно. Gangsta Agents Family масштабується.
🔸 Мультиплатформність — нативні інтеграції: Claude Code, GitHub Copilot, Gemini CLI, OpenCode, Codex. Cursor — через npx skills add.
І кожен phase gate проходить лише зі схваленням Don (user) 🤝
👉 https://gangsta.page
Як це влаштовано:
🔸 Spec Before Code — фаза Sit-Down завершується підписаним Contract. Без нього жоден Worker не пише код.
🔸 Battle-Tested Skills — розвідка, TDD-дрили, дебаг через допит, стратегії виходу. Кожна навичка — чистий markdown-файл.
🔸 Правило 1% — якщо є хоча б 1% шансу, що скіл застосовний, ти його викликаєш. Без раціоналізацій. Без скорочень.
🔸 Мультиагентна оркестрація — Underboss декомпозує, Crew Leads оркеструють, Workers виконують паралельно. Gangsta Agents Family масштабується.
🔸 Мультиплатформність — нативні інтеграції: Claude Code, GitHub Copilot, Gemini CLI, OpenCode, Codex. Cursor — через npx skills add.
І кожен phase gate проходить лише зі схваленням Don (user) 🤝
👉 https://gangsta.page
👍6❤2🔥2👏1
А ви знали, що більше знайдених дублікатів не означає кращий пошук? Іноді це лише більше… помилок.
Я постійно вдосконалюю свій jscpd, тож вирішив перевірити, як справляються інші. Зібрав сім інструментів і прогнав на одній базі: 547 файлів, 150+ форматів, для всіх однакові умови.
І ось що показали цифри.
Багато клонів, мало сенсу:
⚠️ Duplo - 162 мс, 518 клонів, найбільше з усіх. Зіставляє сирий текст без токенізації, реагує на відмінності у форматуванні - тому більшість збігів false positives.
Майже нічого не бачить:
⚠️ Fallow dupes - 164 мс, 10 клонів. Аналізує лише JS/TS, решту 513 файлів із 547 не опрацьовує - непридатний для багатомовних баз.
Повільні й обмежені в покритті:
⚠️ Simian - 964 мс, 424 клони. Звітує агрегованими блоками, без поділу на мови - не зрозуміти, у якій секції коду дублікат.
⚠️ PMD CPD - 36 с, 56 клонів. Ретельний у межах однієї мови, але повільний: опрацював лише 71 файл із 547.
Один клон різниці - і 32 рази у швидкості. Переписування на Rust дало приріст, зберігши якість виявлення:
✅ jscpd v5 (Rust) - 84 мс, 212 клонів.
✅ jscpd v4 (JavaScript) - 2.7 с, 211 клонів.
Суть у тому, що велике число знайдених клонів нічого не гарантує. Текстові інструменти швидкі, але завищують кількість збігами, яких насправді немає. Точні працюють повільно або бачать лише кілька форматів. Токенізація дозволяє не вибирати: тримає і швидкість, і точність водночас.
Це перший із трьох розборів цього бенчмарку. Далі - як інструменти розпізнають дублікати між різними форматами файлів, і скільки токенів з'їдає звіт кожного з них під час роботи з LLM (частина 2)
🔗 Повний бенчмарк: jscpd.dev/benchmarks/detection-speed
💻 GitHub: github.com/kucherenko/jscpd
☕ Підтримати: opencollective.com/jscpd
Я постійно вдосконалюю свій jscpd, тож вирішив перевірити, як справляються інші. Зібрав сім інструментів і прогнав на одній базі: 547 файлів, 150+ форматів, для всіх однакові умови.
І ось що показали цифри.
Багато клонів, мало сенсу:
⚠️ Duplo - 162 мс, 518 клонів, найбільше з усіх. Зіставляє сирий текст без токенізації, реагує на відмінності у форматуванні - тому більшість збігів false positives.
Майже нічого не бачить:
⚠️ Fallow dupes - 164 мс, 10 клонів. Аналізує лише JS/TS, решту 513 файлів із 547 не опрацьовує - непридатний для багатомовних баз.
Повільні й обмежені в покритті:
⚠️ Simian - 964 мс, 424 клони. Звітує агрегованими блоками, без поділу на мови - не зрозуміти, у якій секції коду дублікат.
⚠️ PMD CPD - 36 с, 56 клонів. Ретельний у межах однієї мови, але повільний: опрацював лише 71 файл із 547.
Один клон різниці - і 32 рази у швидкості. Переписування на Rust дало приріст, зберігши якість виявлення:
✅ jscpd v5 (Rust) - 84 мс, 212 клонів.
✅ jscpd v4 (JavaScript) - 2.7 с, 211 клонів.
Суть у тому, що велике число знайдених клонів нічого не гарантує. Текстові інструменти швидкі, але завищують кількість збігами, яких насправді немає. Точні працюють повільно або бачать лише кілька форматів. Токенізація дозволяє не вибирати: тримає і швидкість, і точність водночас.
Це перший із трьох розборів цього бенчмарку. Далі - як інструменти розпізнають дублікати між різними форматами файлів, і скільки токенів з'їдає звіт кожного з них під час роботи з LLM (частина 2)
🔗 Повний бенчмарк: jscpd.dev/benchmarks/detection-speed
💻 GitHub: github.com/kucherenko/jscpd
☕ Підтримати: opencollective.com/jscpd
👍5🔥4❤1👏1
AI не замінить розробників.
Але він уже замінює тих, хто не розуміє, як будуються AI-системи. Питання лише в тому, чи встигнете ви адаптуватися.
За останні пів року вимоги до Senior+ рівня змінилися радикально. Ось мій roadmap на карті вище — орієнтир, куди вкладати час, поки вікно можливостей відкрите, а конкуренції в цих темах ще мало.
Повний розбір — на DOU
🔗 https://dou.ua/forums/topic/60053/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🔥3👀1
Дуже легко. Показую.
Той самий код, ті самі 212 дублікатів. Один інструмент пошуку копіпасту віддає AI звіт на 2 800 токенів, інший — на 158 000.
Різниця — це ваші гроші, спалені на токенах.
Проблема:
Більшість інструментів видають «важкі» звіти, не оптимізовані для LLM — величезні JSON або неструктуровані дані. Вони забивають контекстне вікно, сповільнюють відповідь і роздувають вартість кожного запиту.
А тепер наочно. Ефективність на 212 клонах:
🔴 Гроші на вітер — не для LLM:
• Duplo — 158 000 токенів, величезний JSON із купою false positives
• PMD CPD — 21 000 токенів, розкидані по 34 файлах
🟡 Частково придатні:
• Simian — 15 000 токенів, без структурованих метаданих
• Fallow — 400 токенів, та це не економія: він просто бачить мізерну частину коду
🟢 Готові до роботи з AI — економно:
• jscpd@5 — 2 800 токенів
• jscpd@4 — 2 700 токенів
• jscpd-rs — 3 000 токенів
У jscpd є окремий флаг --reporters ai — компактний звіт без зайвого шуму, створений саме для AI-пайплайнів.
⚠️ Важлива ремарка:
Токени на клон не можна порівнювати між інструментами напряму — кожен визначає «клон» по-своєму. Порівнюйте лише всередині однієї групи.
Висновок:
Коли звіт іде в LLM, його розмір — це прямі витрати вашого часу й бюджету. Той самий результат можна віддати економно або спалити на ньому гроші. Обирайте інструменти, які поважають ваш токен-ліміт.
Це друга з трьох частин про порівняння Copy-Paste Detector (CPD) інструментів. Частина 1 — про швидкість. Далі — як інструменти бачать дублікати між різними форматами файлів.
🔗 Бенчмарк токенів: jscpd.dev/benchmarks/ai-token-efficiency
💻 GitHub: github.com/kucherenko/jscpd
☕ Підтримати: opencollective.com/jscpd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏2❤1🔥1
Я перевірив ті самі компоненти — від hello до таблиці з фільтром — і написав їх на кожному фреймворку. Однакова функціональність, один токенізатор:
🟢 Svelte — 598 токенів
🟡 React — +25%
🔴 Angular — +38%
+38% — це не про стиль коду. Це рядок у вашому рахунку за API. Бо код тепер читають не люди, а агенти — тисячі разів на місяць. На кожному рев'ю, кожному «полагодь оце», кожному прогоні ви платите за зайве знову і знову.
А тепер парадокс, який ламає інтуїцію. У Svelte НАЙГІРШЕ стиснення у всій групі — його синтаксис погано лягає в токенізатор. І він однаково виграє. Чому? Бо коду треба менше: ти пишеш count++ — решту добудовує компілятор. У React ти пишеш ту саму сантехніку руками. І платиш за кожен символ.
Висновок простий: усе, що ви пишете явно — має ціну. Усе, що виводить компілятор — безкоштовне.
Повне дослідження — таблиці в доларах по 10 моделях 👀у статті на Hacker Noon
Це частина 1 з 5. Далі — мови, де анотації типів у TypeScript додають +63% до ціни за ту саму логіку 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3👀3
🛡 OWASP випустив Top 10 загроз для LLM
Окремий Top 10 для LLM (з 18.11.2024), у 2025-2026 став обов'язковим, як веб-Top 10. Prompt injection - на 1 місці другий рік поспіль.
✅ Перед тим як пускати агента в робоче репо: постав human-approval на деструктивні команди (видалення, push у main) і обмеж доступ агента до прод-середовища.
💸 GitHub перевів Copilot на оплату за токени
З 1 червня всі плани Copilot рахують AI Credits за токенами (1 кредит = $0.01). Code completions лишились безкоштовними.
✅ Розділи задачі за вартістю: дешеві моделі на рутину (тести, доки, рефакторинг), флагмани - лише на архітектуру. Інакше рахунок наприкінці місяця здивує.
📄 Формат правил проекту AGENTS.md підтримали OpenAI, Google (Jules), Cursor і Factory
Замість зоопарку (CLAUDE.md, .cursorrules, свій файл у Copilot) - один файл, який розуміють Codex, Gemini, Aider, opencode. 60k+ проєктів, курує Agentic AI Foundation (Linux Foundation).
✅ Поклади в корінь репо AGENTS.md зі стандартами (naming, структура, патерни, тести). Claude Code поки не читає його нативно - роби симлінк CLAUDE.md на нього.
🐙 OpenCode - один із найпопулярніших open-source агентів (170k+ ⭐ на GitHub)
Термінальний агент під MIT, 75+ провайдерів, LSP-діагностика повертається в модель після кожної правки.
✅ Не хочеш залежати від одного вендора - постав OpenCode і підключи свої моделі (хоч локальні через Ollama).
🤖 GitHub відкрив Copilot SDK для всіх
2 червня. Агентний рушій можна вбудувати у свої тули: повний runtime (планування, тули, правки файлів, MCP), 6 мов, підписка не потрібна.
✅Робиш внутрішні тули - збери на ньому CI-асистента, генератор release notes чи review-бота, не пишучи власну оркестрацію.
Що з цього вже у твоєму процесі?
👍 - працюю так, не новина
👀 - забираю собі кілька пунктів
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👀6👍5👏1
🍋jscpd має 1,5 млн завантажень на тиждень. І я не вгадую, що в ньому покращити. Я це вимірюю.
⁉ Як зрозуміти, чого вартий твій продукт порівняно з іншими?
‼️ Запустити бенчмарк 🚀
Я взяв 7 copy-paste детекторів і прогнав усі на одній базі: 547 файлів, 223 формати, однакові умови для всіх.
Результати показав тут:
⚡️ Швидкість
🪙 Токени
🧩 Формати - сьогодні, фінальна 👇
👀 Дуже часто Copy-Paste Detector каже, що «дублікатів немає». Але він просто не зазирнув всередину ваших Vue- та Svelte-файлів. Сучасний файл - це не суцільний текст: один .vue, .svelte чи .astro містить кілька мов одразу - скрипт, стилі, шаблон. У markdown - YAML і блоки коду. І те, як інструмент це читає, вирішує все.
Існує 2 види інструментів:
🔴 Flat-text - порівнюють усе з усім: CSS зі скриптом, шаблон зі стилями. Або шум, або сліпота: звіт каже «чисто», а копіпаст лишається в коді.
🟢 Section-aware - спершу парсить файл, ділить на мови, і лише потім порівнює CSS із CSS, скрипт зі скриптом. Це вміє лише движок jscpd.
👨🏻💻Окремо про markdown: код усередині .md jscpd дістає з блоку й порівнює як код, а не як текст документації. Дубль, схований у прикладі коду, більше не проходить повз.
Результат: знайти дублікати між різними форматами (наприклад, однаковий CSS у .svelte та .astro) здатні лише три інструменти. І всі - на jscpd.
💡 Висновок.
У сучасних проектах дублікати ховаються не в тексті, а в структурі. Інструмент, який бачить лише текст, у найгіршому випадку звітує «чисто» - і ви вірите цьому звіту. Якщо інструмент не розуміє секцій усередині файлу - він не розуміє frontend.
🔗 Бенчмарк форматів: jscpd.dev/benchmarks/cross-format
💻 GitHub:github.com/kucherenko/jscpd
☕ Підтримати:opencollective.com/jscpd
А ваш CPD точно бачить дублікати у .vue і .svelte - чи просто каже «чисто»?
👍 Бачить, я перевіряв
👀 Не знаю - піду перевірю
😱 Тепер боюся дивитися
Сьогодні - про внутрішню кухню роботи над open-source проектом.
⁉ Як зрозуміти, чого вартий твій продукт порівняно з іншими?
‼️ Запустити бенчмарк 🚀
Я взяв 7 copy-paste детекторів і прогнав усі на одній базі: 547 файлів, 223 формати, однакові умови для всіх.
Результати показав тут:
⚡️ Швидкість
🪙 Токени
🧩 Формати - сьогодні, фінальна 👇
👀 Дуже часто Copy-Paste Detector каже, що «дублікатів немає». Але він просто не зазирнув всередину ваших Vue- та Svelte-файлів. Сучасний файл - це не суцільний текст: один .vue, .svelte чи .astro містить кілька мов одразу - скрипт, стилі, шаблон. У markdown - YAML і блоки коду. І те, як інструмент це читає, вирішує все.
Існує 2 види інструментів:
🔴 Flat-text - порівнюють усе з усім: CSS зі скриптом, шаблон зі стилями. Або шум, або сліпота: звіт каже «чисто», а копіпаст лишається в коді.
🟢 Section-aware - спершу парсить файл, ділить на мови, і лише потім порівнює CSS із CSS, скрипт зі скриптом. Це вміє лише движок jscpd.
👨🏻💻Окремо про markdown: код усередині .md jscpd дістає з блоку й порівнює як код, а не як текст документації. Дубль, схований у прикладі коду, більше не проходить повз.
Результат: знайти дублікати між різними форматами (наприклад, однаковий CSS у .svelte та .astro) здатні лише три інструменти. І всі - на jscpd.
💡 Висновок.
У сучасних проектах дублікати ховаються не в тексті, а в структурі. Інструмент, який бачить лише текст, у найгіршому випадку звітує «чисто» - і ви вірите цьому звіту. Якщо інструмент не розуміє секцій усередині файлу - він не розуміє frontend.
💻 GitHub:
☕ Підтримати:
А ваш CPD точно бачить дублікати у .vue і .svelte - чи просто каже «чисто»?
👍 Бачить, я перевіряв
👀 Не знаю - піду перевірю
😱 Тепер боюся дивитися
👍7❤3😱3👀2