Repository navigation
Releases: turkprogrammer/covercraft
Release list
v0.4.1 — ML-блок обязателен, MariaDB-долг, code-review концепт
[0.4.1] — 2026-10-11
Обязательные факты: ML-блок при ML-требовании вакансии, честное название
MariaDB вместо молчания; детализация code-review и engineerin-практик фита;
пробел «переносится на X» гасится декларацией переносимости, а не фактом.
Fixed
- ML-требование → обязательный отдельный буллет. Перечисление ML внутри
Go-буллета не засчитывается (TestMLVacancy). - MariaDB must-have из вакансии. Молчание → warning; честный пробел → ok
(TestMariaDBGap). - «Переносится на K8s» ≠ факт. декларация переносимости гасится наравне
с «готов освоить» (TestTransfersOntoClauseIsNotFact). - Код-ревью ≠ архитектурные стили. Новый концепт «код-ревью и ревью-культура»;
триггер убран из «архитектурного управления» (TestCodeReviewNotClosedByArchitectureStyles). - Best practices — ложный missing. Концепт «инженерные best practices» +
стоп-словаbest/practice/practices(TestRealGoMLVacancy).
Added
- Регрессионные тесты:
TestMLVacancyRequiresDedicatedMLBlock(audit),
TestMariaDBGapMustBeNamedInLetter(audit),
TestTransfersOntoClauseIsNotFact(fit),
TestCodeReviewNotClosedByArchitectureStyles(fit),
TestRealGoMLVacancy(fit, live-профиль) — все зелёные, CI не сломан.
v0.4.0 — Пресеты + режим qa + стилевая модалка
Новое в v0.4.0
Пресеты системного промпта — именованные шаблоны под разные цели (письмо, ответы рекрутеру, свои заготовки). CRUD через API, хранение в ~/.config/covercraft/presets.json.
Режим qa — пресет можно пометить как «ответы рекрутеру». При генерации сервер пропускает разбор вакансии, fit-вердикт и письменный аудит.
Стилевая модалка подтверждения uiConfirm — нативный confirm() заменён на CSS-модалку в стиле приложения. Кнопки панели блокируются при открытом подтверждении, кнопки самой модалки работают.
Исправления:
- Состояние «без пресета» → возврат
defaultPromptвместо старого текста - Модалка «новый пресет» теперь открывается (был TypeError из-за отсутствующего поля в
els) delPresetсбрасываетcurrentPresetMode
Тесты: добавлены TestPresetModeSelect, TestPresetModeBackfill, TestUiConfirmModal, негативный тест на неизвестный режим.
Полный changelog — CHANGELOG.md.
v0.3.5
[0.3.5] — 2026-10-07
Детерминированная генерация писем (temperature 0.2), обязательные GO-PRIMARY сервисы, расширенный лимит слов (250/350/400), защита ML-секций от дропа.
Added
- Temperature 0.2 по умолчанию — детерминизм генерации
- GO-PRIMARY обязательства: Stable ID, Fraud Engine, Bundle ID, Domain ID, Geo-mapping
- Лимит слов: 250 базовый, 350 при 6+ must-have, 400 для GO-PRIMARY
- Защита ML/Go-секций от вырезания композером (go-primary/fullstack)
Fixed
- Письмо на 380 слов при 7 требованиях больше не ругается
- Live SRE-письмо (210 слов) проходит аудит
Артефакт: dist/covercraft_0.3.5_linux_amd64.tar.gz (sha256 ниже)
v0.3.4
0.3.4 — compose видит факты разделов, анонимизированный ИИ-факт принят аудитом.
Fixed
- Outward-факт «ИИ-инструменты в разработке — постоянное использование» больше не считается фабрикацией: checkAIClaim принимает анон-факт (aiToolAnonFactRe), а не только vendor-имена.
- AI-агентные требования вакансии закрываются анонимизированным буллетом: сигналы концепта «агентские системы и Tool Use» расширены маркерами агентного процесса (постановка задач, делегирование, контроль за инженером).
- Compose-панель не прокручивалась при крупном промпте — тело ограничено и прокручивается, кнопки липнут к низу.
Added
- Compose видит краткую выжимку фактов каждого раздела (excerpt, ≤240 байт по границе руны), а не только заголовки — точнее отбирает релевантное, риск потерять must-have-факт снижен. Защищённые разделы (ФАКТЫ-ОГРАНИЧИТЕЛИ, КОНТАКТЫ) excerpt не получают.
Артефакт: covercraft_0.3.4_linux_amd64.tar.gz
sha256: 490a91f2b97959a1cdd2f7855456cc6f604ba63c62a6e2f14d9df98473dd311c
Рантайм: libwebkit2gtk-4.1-0 (Ubuntu 24.04+). Плагины не нужны.
CoverCraft v0.3.3
CoverCraft v0.3.3 — честная сверка фактической отправки с композером, кириллические мосты фита, триггеры концептов под живые ложные срабатывания, честные пробелы в audit.
Исправлено:
- Честный пробел в VoIP-вакансии (SIP/WebRTC/FreeSWITCH) помечался «фабрикацией»: точка внутри sip.js рвала клаузу, отрицание «не работал/готов освоить» уезжало во вторую половину (audit claimPositively).
- Фит-вердикт не гасился при эхе, считался по уцелевшему письму; автоправка шлёт только релевантные секции; замечание-эхо не слалось модели как дефект.
Добавлено:
- Кириллический мост фита: полностью русское требование (например «опыт с очередями сообщений») закрывается мостом по ключевым словам при подтверждении опыта в письме/профиле.
- Расширены триггеры концептов: «реляционные БД и SQL» (оптимизация медленных запросов, EXPLAIN/план/профилирование), «продуктовая разработка» (вывод в прод, выкат, деплой).
Изменено:
- Обязанность (duty) больше не тянет вердикт до Caveats — вердикт считают только оговорки по требованиям; обязанности вынесены отдельным советом.
SHA256 (linux_amd64): 907ac4915eafdfae43817f59b43ce1d66c7e5e0e8deeb424e5346f795b814b24
Зависимости рантайма: libwebkit2gtk-4.1-0 (Ubuntu 24.04+). Подробности — в CHANGELOG.md.
v0.3.2 — наблюдаемость отправки, честный эхо-детектор
0.3.2 — наблюдаемость фактической отправки, честный эхо-детектор, потолок кэша регулярок.
Fixed
- Автофикс больше не выводит профиль вместо письма: исключение
origLetterдействует только для строк, которых нет в профиле — детектор больше не оправдывает сам себя. - При отклонённом эхо фит-вердикт не отправляется в UI.
- Структурный признак эха ловит любой markdown-заголовок
#–######, а не только##/###. - Диагностика длины письма перестала показывать «0 символов» (len считается до обнуления
letter).
Added
- Событие
doneSSE:appliedDropSections,usedUserPromptBytes,usedProfileBytes, фактически отправленный системный промпт, предупреждения о prompt ≥8 КБ и ≥4× от дефолта. - Регрессионные тесты на живых письмах (PHP-архитектор, SRE, AI-product, fullstack);
TestAFLTLiveEndToEndвыключен по умолчанию (CC_LIVE=1).
Changed
- Кэш скомпилированных регулярок получил потолок ёмкости (
wordReCacheMax): при переполнении регулярка компилируется заново — память ограничена, на обычных вакансиях поведение не изменилось.
Internal
streamGenerate: 14 позиционных параметров → структураstreamParamsс именованными полями.
Артефакт: covercraft_0.3.2_linux_amd64.tar.gz
sha256: f2987e65aa10fa6fd602f8b20b90f6a7b8ddb19d600302ae270e0f1b35b1715b
Рантайм: libwebkit2gtk-4.1-0 (Ubuntu 24.04+). Плагины не нужны.
v0.3.0
[0.3.0] — 2026-09-29
Added
[ compose ]в панелиsystem.prompt— по текущей вакансии один
не-стриминговый LLM-вызов собирает системный промпт-«плейбук» и отбирает
нерелевантные разделы профиля (композер получает только##-заголовки,
а не весь контент), которые затем вырезаются из user-сообщения через
dropSections. Профиль уходил в каждый запрос целиком, и основной выигрыш
фичи — сокращение этого шума, а не сам промпт (~600 Б). Откат — кнопкой
вернуть прежний,reset defaultчистит и промпт, и отбор.POST /api/prompt/compose(пакетinternal/prompt): возвращает
systemPrompt,dropSections,reason,truncated,sections,
droppedBytes,elapsedMs— видно, сколько профиля сэкономлено.- Поле
usedSystemPromptв SSE-done— что фактически отправлялось модели
(кастом или дефолт): отладка перестала быть догадкой. - Подпись
#prompt-subпоказывает источник промпта честно:кастом/
авто/default(раньше очищенное поле давало дефолт на бэке, а UI
продолжал утверждать «кастом»). - Хард-защита антигаллюцинации: разделы с «ФАКТЫ-ОГРАНИЧИТЕЛИ» невырезаемы
по построению —prompt.Parseотбрасывает такиеdropSections, даже если
модель их вернула. - Две страховки вокруг
compose: при смене вакансии старый отбор разделов
сбрасывается (иначе по чужой вакансии молча вырезался бы релевантный
раздел), а потеря инвариантов безопасности в собранном промпте
(missingInvariants) показывается предупреждением — playbook заменяет
дефолт целиком, и «не выдумывай» не должно исчезнуть молча. prompt.Parseпринимает дроп только по паре (file, heading): заголовок с
чужим файлом ничего не вырежет и больше не отчитывается об успехе. Обрезка
промпта по байтовому лимиту не разрывает UTF-8-руну.
v0.2.6
[0.2.6] — 2026-09-28
Fixed
- Гонка на список концептов — fallback перенесён внутрь initConcepts
- Молчаливое письмо без фактов — добавлено поле profileWarning + баннер в UI
- Esc не отменял генерацию — genAbort живёт до конца SSE-стрима, добавлена кнопка stop
- Повторный вход в цикл fit-fix — общий busy-флаг
- ПРОФИЛЬ.MD расходился между тремя читателями — расширение унифицировано через EqualFold
- Гибридная разметка жила до 90 с после отмены — связь с контекстом восстановлена
- Гонки больше не проходят незамеченными — CI: -race + gofmt-гейт
Added
- Переключатель fit engine в панели api.config
- Источник доказательства у каждого требования в панели фита
- Кнопка stop для прерывания генерации
- aria-live на область письма и role=status на строку статуса
- Папка references/ с common-pitfalls.md и vacancy-mapping.md
Removed
- .golangci.yml — не использовался
- Debug-дамп must-have в stderr
- неиспользуемые min и frameWords в internal/audit
Full Changelog: v0.2.5...v0.2.6
v0.2.5
v0.2.5 — fit-матчер: ложные skip на Yii2/Ubuntu, trade-offs, ML/GenAI
Сборка covercraft_0.2.5_linux_amd64.tar.gz из коммита 1438724.
SHA-256: e5f3fe845b95773fbfe6c30eb5efa86da9a43187f57fa965fdb43a07dfd8ada2.
Что закрыто
- Yii2/Yii + Linux/Ubuntu — синонимы
yii2filmcatalog/yii2shop/yii2gallery → yii,
ubuntu → linux. Токен требования «Опыт на Yii 2» больше не роняет вердикт доskip
на составных именах проектов; токенubuntuзакрывается черезlinux. - Trade-offs и Money Precision — стоп-слова
trade/offs/float/precisionне
раздувают majority-порог; требования закрываются по сигналам концептов (ADR, идемпотентность). - ML/GenAI концепты — «GenAI/LLM/ML в production», «Жизненный цикл ML-решений»,
«Архитектура/системный анализ», «Кросс-функциональные команды / ведущие роли».
Vакансия ML-архитектора:skip83% →apply100%. context/03-ml-опыт-выжимка.md— факты ML-опыта для генератора
(5 сервисов с LLM/ML в production: Fraud Engine, Stable ID, Bundle ID, Domain ID, GeoMapping).
Проверено
- GetCourse (Yii2 + Linux):
skip65% →apply100%. - ML-архитектор (5 must):
skip83% →apply100%. - Все unit-тесты зелёные (
go test ./...).
Установка
tar xzf covercraft_0.2.5_linux_amd64.tar.gz
install -m 755 covercraft ~/.local/bin/Бинарь линкуется статически по C-библиотекам GTK3/WebKit2GTK — для GUI-режима
нужны libgtk-3 и libwebkit2gtk-4.1 в системе.
v0.2.4 — RU/EN fit-matcher, anti-false-skip
Что нового
Fit-матчер: англоязычные требования больше не роняют вердикт до skip — LLM-извлечение выдаёт длинные англ. формулировки must-have; детерминированный матчер ищет латиницу в рус. письме/профиле и не закрывал 50-100% требований. Добавлены: синонимы рус↔англ для абстрактных терминов (query→запрос, optimization→оптимизац, tests→тесты, documentation→документаци, culture→code review, high-load→highload/высоконагр), стоп-слова для нарративных слов англ. требований, majority-порог found == missing при total >= 6.
roleMismatch— маркерPHP (20\d\d+)+ окно 60 символов: билингвальный профиль «Go (3 года), PHP (2005+)» не даёт ложныйskip.- Языковые требования — в
soft, не вmustHave— «English working level», «Russian A1» не роняют вердикт; классификация в промптеextract.go. - Концепт «документирование технических решений» — trigger
documentat(латиница), signal «техническая документация» наADR|api doc|архитектурн.решен. - Концепты v0.2.4 — signals
retries/deadlines/идемпотентностьв концепт «эксплуатация»;System Designtriggersystem.?design;NoSQLбез имён СУБД (мост через bridge). - Проверено на 3 типах вакансий — англ. Go highload:
apply70% (былоskip37%); рус. PHP (10 must):apply97% (былоskip0%); edge K8s (честный пробел):apply_with_caveats58% (корректно).
Артефакт
covercraft_0.2.4_linux_amd64.tar.gz — архив с бинарником + README + LICENSE.
- sha256:
2e152d1d77d66f196907ad742e1eef45dfdf82cd5bbc9aed3aeb2ce37f2e2692 - Рантайм-зависимости:
libwebkit2gtk-4.1-0,libgtk-3-0(есть в Ubuntu 24.04+).
mkdir -p ~/covercraft && cd ~/covercraft
tar xzf covercraft_0.2.4_linux_amd64.tar.gz
./covercraft # печатает http://127.0.0.1:PORT в stderr