ProverCoderAI
378 subscribers
19 photos
22 links
Download Telegram
Channel created
В чём суть канала?
Я буду постить кучу спама (по теме) о том, как прувать вайбкод
Будет КУЧУ КУЧУ разных мыслей
КУЧУ КУЧУ разных идей
Видосики буду скидывать, которые мотивируют на определённые идеи

В общем что стоит ожидать?
1) Контент про компиляторы
2) Архитектура (Патерны проектирования, парадигмы программирования)
3) Тулинг для разработки (Статический/динамический анализ кода. Всякие CLI тулы)
4) Промты для агентов
5) Возможно и сами агенты (Но это малая часть контента)

Я автор проектов @ton_ai_core и PublicRus (в игре Раст)
https://github.com/orgs/publicrust/repositories
https://github.com/orgs/ton-ai-core/repositories

Конечная цель:
Разработать новую парадигму программирования специально созданную под AI кодинг
Что бы код сам себя прувал и давал БЫСТРУЮ обратную связь, что бы агент мог работать по 20часов + полностью автономно

Это как раз главная проблема текущих всех ВАЙБКОД платформ
Они полный шлак
Никто из них не пытается прувать код

@ProverCoderAI
9
ProverCoderAI pinned «В чём суть канала? Я буду постить кучу спама (по теме) о том, как прувать вайбкод Будет КУЧУ КУЧУ разных мыслей КУЧУ КУЧУ разных идей Видосики буду скидывать, которые мотивируют на определённые идеи В общем что стоит ожидать? 1) Контент про компиляторы 2)…»
Вот самый базовый пример

Попросил Lovable cделать мне тапалку
И разумеется, что ж мы получим в коде?

Они специально отключают везде какую либо проверку на "any"
    "noImplicitAny": false,


А "any" создаёт билиберду в коде
Никто из них не пытается использовать хоть какие-то линтеры

А Lovable каждый день генерирует людям кучу проектов
И создаёт впечатление того, что вайбкодинг это через 10 лет, а не настоящее

Позор таким платформам
Много раз пытался связаться с их разработчиками и предлагал помощь, что бы улучшить их продукт

ВЕРДИКТ:
В большинстве случаев, когда вайбкод не работает это проблема не в LLM а в халатности разработчиков, которые не хотят прувать код
5
Сейчас я разрабатываю vibecode-linter
[ERROR] /home/user/TradingBot/src/telegram/bot.ts:78:30 @ton-ai-core/suggest-members/suggest-imports (ESLint) — Variable "Comman1dHandlers" is not defined. Did you mean:
- CommandHandlers
- console
- Console

--- git diff (workspace, U=3) -------------------------
@@ -75,7 +75,7 @@ export class TelegramNotificationBot implements TelegramBot {
75 | logger: options.logger,
76 | });
77 |
- | this.commandHandlers = new CommandHandlers({
+ 78 | this.commandHandlers = new Comman1dHandlers({
^^^^^^^^^^^^^^^^
79 | gateway: this.gateway,
80 | dbManager: options.dbManager,
81 | appConfig: options.config,
---------------------------------------------------------------

--- git diff b001809..b1662a1 -- src/telegram/bot.ts | cat
b1662a1 (2025-09-30) by skulidropek: устранение дубликатов
b001809 (2025-09-28) by skulidropek: implement code review
@@ -75,7 +75,7 @@
73 | logger: options.logger,
74 | });
75 |
- 76 | this.handlers = new BaseHandlers({
+ 78 | this.commandHandlers = new CommandHandlers({
79 | gateway: this.gateway,
---------------------------------------------------------------

Full list: git log --follow -- src/telegram/bot.ts | cat

📊 Total: 16 errors (3 TypeScript, 5 ESLint, 8 Biome), 11 warnings.

Это тула, которая описывает полностью весь контекст ошибок (анализаторов, компилятора) в удобно для AI представлении с максимальным контекстом
Например с выводом git diff айдишниками комитов и гит историей
Так я же строю фильтр "важности ошибок"
Потому что я исправляю все ошибки в коде (любые даж если это вариниги) но у них всё равно есть приоритет (Какие-то сперва должны быть исправлены, а только потом другие)

Так же из коробки отображает дубли в коде
user@arch ~/vibecode-linter (main)> npm run lint

> @ton-ai-core/vibecode-linter@0.2.0 lint
> npx tsx src/main.ts src/

🔍 Linting directory: src/
🔧 Running ESLint auto-fix on: src/
🔧 Running Biome auto-fix on: src/
Biome auto-fix completed (3 passes)
ESLint auto-fix completed

📊 Total: 0 errors (0 TypeScript, 0 ESLint, 0 Biome), 0 warnings.

=========================== DUPLICATE #1 ===========================
A: src/linters/typescript.ts:115-120 │ B: src/types/exec-helpers.ts:22-27
-------------------------------------------┆------------------------------------------
115 │ const hasStdout = │ 22 │ const hasStdout =
116 │ typeof error === "object" && │ 23 │ typeof error === "object" &&
117 │ error !== null && │ 24 │ error !== null &&
118 │ "stdout" in (error as { stdout?: string }); │ 25 │ "stdout" in (error as { stdout?: string });
119 │ if (!hasStdout) { │ 26 │ if (!hasStdout) {
120 │ return []; │ 27 │ return null;

=========================== DUPLICATE #2 ===========================


Это единственный проект такой в своём роде для вайбкодинга
Есть один конкурент, но они занимаются анализаторами ток
4
ProverCoderAI
@ton-ai-core/suggest-members/suggest-imports (ESLint) — Variable "Comman1dHandlers" is not defined. Did you mean:
- CommandHandlers
- console
- Console
Если кто-то задался вопросом что эт за ошибка то такая с контекстом
Это мой SMB анализатор
Он нужен для продвинутого контекста NotFound ошибки

Сама ошибка "NotFound" заводит LLM в ступор и не объясняет как исправить её (только гадать)
Я решил это исправить на уровне ошибки
Используя 3 алгоритма поиска по тексту
Я показываю что мог иметь ввиду LLM
// Member errors
Property "get1Item" does not exist on type "Storage". Did you mean:
- getItem(key: string): string | null
- setItem(key: string, value: string)
- removeItem(key: string)

// Module path errors
Cannot find module "./HamsterKo1mbatPage.css". Did you mean:
- ./HamsterKombatPage.css
- ./HamsterKombatPage.tsx
- ./HamsterKombatPage
- ./
- ../ThemeParamsPage

// Variable errors
Variable "saveRe1f" is not defined. Did you mean:
- saveRef
- saveState
- state
- screen
- Screen
3
Есть ещё интересный тулинг (который не до конца доделан) это продвинутые логи

Я отображаю стек вызовов (последние 5) лога
Тем самым его можно скормить LLM что бы он мог верифицировать соответствует ли ваш код вашему ТЗ (Ну или найти багу в коде)

Хотел я ещё вывести стек значений, но там пока сложнее
В питоне например с этим всё в разы проще
В питоне можно из коробки и стек значений и стек вызовов выводить
Это наверное единственный плюс питона
Во всём остальном питон для ИИ кодинга это худший выбор (Об этом тоже будет)
2
Хочу так же поделиться своим промтом, который я использую для кодинга
Этот промт у меня под любую Vibecode cистему (Сodex, Claude Code, Cline и всё подряд)

РОЛЬ: Математик-программист.

ЦЕЛЬ: Давать проверяемые решения через формализацию и строгую типизацию в функциональной парадигме.

Всегда начинай свой ответ с поставление задачи Deep Research "I am looking for code that does <requested functionality>, is there existing code that can do this?" Любое решение строится на инвариантах и проверяемых источниках. Код рождается только после доказуемого понимания задачи.

ОБЯЗАТЕЛЬНО:
1) Никогда не использовать `any`, `unknown`, `eslint-disable`, `ts-ignore`.
2) При любом изменении кода оставлять "рациональные" комментарии:
// CHANGE: <краткое описание>
// WHY: <почему изменено, ссылка на инвариант/дефект>
// QUOTE(TЗ): "<дословная цитата требования>"
// REF: <REQ-ID из RTM или номер сообщения пользователя>
// SOURCE: <ссылка и дословная цитата, если использован внешний источник>
3) Для публичных API — TSDoc-комментарии c описанием, параметрами, возвращаемым значением и инвариантами.
4) Сообщать proof-обязательства в PR: инварианты, предусловия/постусловия, вариантная функция, сложность O(time)/O(mem).
5) Коммиты по Conventional Commits с указанием области и причин. Для breaking — явный BREAKING CHANGE.
6) На каждый REQ-ID — тест(ы) и ссылка из RTM.
7) Верификация: `npm run lint` и `npm test` должны проходить.

КОМАНДЫ:
- Линт: `npm run lint`
- Тесты: `npm test`


Я пытаюсь придерживаться концепции "Лёгкой доказуемости" так что бы код описывал то что он делает и его можно было "легко" покрыть тестами
Я заметил, что если ЛЛМ просить отвечать как "математик" то он начинает искать ИНВАРИАНТЫ (подводные камни) и только потом пишет код
А для более "простой доказуемости" я хочу придерживаться функциональной парадигмы программирования. Потому что именно в функциональной парадигме проще всего описывать тесты (Меньше всего конечных инвариантов которые надо описать)

А на счёт "рациональных комментариев" так просто проще работать с ТЗ. Когда ЛЛмка что-то делает она описывает цитату того что было сказано, а за частую я не пишу чёткого ТЗ и если мне надо будет вернуться в код через долгое время то я очень быстро пойму почему было это реализовано.
// CHANGE: Extracted helper to parse duplicate location from message
// WHY: Reduces complexity and line count of parseSarifReport
// QUOTE(LINT): "Function has a complexity of 17. Maximum allowed is 8"
// REF: ESLint complexity, max-lines-per-function
// SOURCE: n/a
/**
* CHANGE: Factor out regex matching and validation to reduce complexity of parseDuplicateLocation
* WHY: Keep cyclomatic complexity under threshold while preserving invariants
* QUOTE(ТЗ): "Исправить все ошибки линтера"
* REF: REQ-LINT-FIX, ESLint complexity
*/
7🔥1