Позитивный блок (задача перезапускается и доходит до success):
collecting, ready, failed, timeout
Негативный блок (завершённые состояния нельзя перезапускать — только /start):
success, cancelled → /retry отклоняется понятным сообщением
fix: handleRetry валидирует терминальные статусы (success/cancelled/aborted/
closed) и отвечает «нельзя перезапустить», вместо падения ErrInvalidStatus
Add exported constant app.Version in major.minor.patch format (0.1.0) with
documentation of the manual increment process (when to bump patch/minor/major).
Include the version in the /help command reply and add tests verifying the
semver format and the version presence in help text.
LiveRegistry собирает live-шаги из stdout процесса opencode по taskID
(через контекст, без изменения интерфейса Runner). /status N для running-задачи
прикладывает живое состояние: активный субагент, давность последнего шага,
последние text-шаги агента. Ничего не перезапускается и не убивается —
только наблюдение по запросу.
Gitea: при параллельных PUT матрицы (6 платформ) псевдо-версия 'latest'
переуказывается на каждый снимок, companion-файлы и бинарь разъезжаются
между версиями — checksum U4 ломался.
- CI: публикует бинарь+.version+.sha256 в (commit-<sha7>), latest не используется
- Updater.ResolveLatest: новейшая commit-* версия из листинга /api/v1/packages/{owner}/generic/{package},
берём макс id у которой есть бинарь текущей платформы
- Download/Verify/checksum читают ТУ ЖЕ version, а не latest
- Убран update.owner из конфига, ldflag -X main.updateOwner, vars.TC_GITEA_OWNER и UPDATE_OWNER в Make.
- Владелец пакета = packageOwner (kamelion), совпадает с владельцем репо и создателем токена.
- app.New снова с 3 аргументами; тесты обновлены.
- -X main.updateOwner (из vars.TC_GITEA_OWNER / Make UPDATE_OWNER), фоллбэк на update.owner в конфиге.
- update.owner больше не обязателен: гейты в startAutoCheck и handleUpdateCmd требуют только update.base_url.
- Обновлены main, app.New (сигнатура), CI, Makefile, тесты.
- update.base_url (env UPDATE_BASE_URL) — хост обновления, БЕЗ фоллбэка на git.base_url: пустое значение отключает update.
- Убран git.token из пути обновления: теперь отдельный токен.
- Токен read:package вшивается при сборке (-X main.updateToken из секрета TC_UPDATE_TOKEN), приоритет над update.token из конфига.
- Обновлены app.New (сигнатура), main, Makefile, CI, config.example, тесты.
- Task.Repos []string (XML-колонка repos, обратная совместимость с repo)
- config: блок git {base_url, token}
- аналитик: ответ repos[], шаблон показывает список
- core: propose без repos → возврат в сбор (E1)
- worker вариант A: один dev из общего cwd, prepareRepos клонирует
недостающие репо (git clone), validateRepoName (E3), ErrRepoNotGit (E4)
- ошибки E1-E4 в worker/errors.go