Skip to content

Releases: turkprogrammer/covercraft

v0.4.1 — ML-блок обязателен, MariaDB-долг, code-review концепт

Choose a tag to compare

@turkprogrammer turkprogrammer released this 11 Oct 15:17

[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 + стилевая модалка

Choose a tag to compare

@turkprogrammer turkprogrammer released this 08 Oct 18:25

Новое в 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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 07 Oct 15:01

[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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 04 Oct 07:52

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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 02 Oct 12:13

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 — наблюдаемость отправки, честный эхо-детектор

Choose a tag to compare

@turkprogrammer turkprogrammer released this 01 Oct 18:36

0.3.2 — наблюдаемость фактической отправки, честный эхо-детектор, потолок кэша регулярок.

Fixed

  • Автофикс больше не выводит профиль вместо письма: исключение origLetter действует только для строк, которых нет в профиле — детектор больше не оправдывает сам себя.
  • При отклонённом эхо фит-вердикт не отправляется в UI.
  • Структурный признак эха ловит любой markdown-заголовок #–######, а не только ##/###.
  • Диагностика длины письма перестала показывать «0 символов» (len считается до обнуления letter).

Added

  • Событие done SSE: 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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 29 Sep 09:11

[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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 28 Sep 06:59

[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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 24 Sep 07:32

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-архитектора: skip 83% → apply 100%.
  • context/03-ml-опыт-выжимка.md — факты ML-опыта для генератора
    (5 сервисов с LLM/ML в production: Fraud Engine, Stable ID, Bundle ID, Domain ID, GeoMapping).

Проверено

  • GetCourse (Yii2 + Linux): skip 65% → apply 100%.
  • ML-архитектор (5 must): skip 83% → apply 100%.
  • Все 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

Choose a tag to compare

@turkprogrammer turkprogrammer released this 23 Sep 02:18

Что нового

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 Design trigger system.?design; NoSQL без имён СУБД (мост через bridge).
  • Проверено на 3 типах вакансий — англ. Go highload: apply 70% (было skip 37%); рус. PHP (10 must): apply 97% (было skip 0%); edge K8s (честный пробел): apply_with_caveats 58% (корректно).

Артефакт

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