meta(tasks): migrate .tasks to v2 (global numbering 16 tasks)
This commit is contained in:
@@ -17,7 +17,7 @@ _Updated: 2026-08-12 — **sovereign-catalog-wave2-review closed**: VERDICT PASS
|
||||
🔵 Blocked — waiting on external input
|
||||
-->
|
||||
|
||||
## ⚪ [using-yt-tools-rate-limit-guard] — Add explicit "don't batch requests at YouTube" rule to `skills/using-yt-tools/SKILL.md` (avoid HTTP 429 IP-block).
|
||||
## ⚪ [#315 using-yt-tools-rate-limit-guard] — Add explicit "don't batch requests at YouTube" rule to `skills/using-yt-tools/SKILL.md` (avoid HTTP 429 IP-block).
|
||||
|
||||
**Эмпирика (2026-05-31, modulair-wiki ingest, DESKTOP).** Владелец кинул подборку из 10 YouTube URL. Агент выстрелил залпом ~21 запрос подряд: `yt-dlp --dump-json` ×10 (метаданные — прошли) + `yt-transcript` ×10 (transcript-api). Первый transcript-вызов достучался (вернул список языков), **со второго пошёл `HTTP 429 / "YouTube is blocking requests from your IP"`**. Блок IP-wide и держится минутами — упёрлись **оба** пути: `youtube-transcript-api` (yt-transcript) И `yt-dlp` timedtext-subtitle endpoint (метаданные при этом ещё проходили, а субтитры — нет). Что разблокировало: ~4-мин cooldown + запросы **по одному** с паузами 25–35с + ранний abort если первый не прошёл (чтобы не жечь cooldown впустую).
|
||||
|
||||
@@ -37,6 +37,7 @@ _Updated: 2026-08-12 — **sovereign-catalog-wave2-review closed**: VERDICT PASS
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready — **RE-SCOPED 2026-06-08:** исходный таргет `skills/using-yt-tools/SKILL.md` устарел — это deprecated inert stub (v0.4.1), канонический контент мигрировал в **plugin-репо `OpeItcLoc03/yt-tools`** (v0.6.0), там же живут секции, на которые ссылается задача (вкл. буллет «Не retry на yt-dlp failures» для расширения). Правило по-прежнему нужно — но вносить его в plugin-репо, не в stub. (Находка автономного агента 2026-06-08; consult по «какой репо править» → halt при `consult_policy=human-only`; decision-trail в per-task файле.)
|
||||
**Created:** 2026-06-08
|
||||
**Where I stopped:** (not started в правильном репо) — баг и фикс зафиксированы по живой сессии 2026-05-31; правка отложена в задачу (владелец просил не лезть в глобальный скил из проекта modulair-wiki).
|
||||
**Next action:** В репо `OpeItcLoc03/yt-tools` (plugin) открыть его SKILL.md, внести пункты 1–3 (rate-limit guard), bump PATCH, commit. Свериться с существующим «Не retry на yt-dlp failures» — расширить его, а не плодить дубль. (НЕ править claude-skills stub.)
|
||||
**Branch:** master
|
||||
@@ -45,44 +46,49 @@ _Updated: 2026-08-12 — **sovereign-catalog-wave2-review closed**: VERDICT PASS
|
||||
|
||||
---
|
||||
|
||||
## 🟡 [skill-readmes] — write English README.md for every skill + translate root README
|
||||
## 🟡 [#24 skill-readmes] — write English README.md for every skill + translate root README
|
||||
**Status:** paused
|
||||
**Created:** 2026-04-28
|
||||
**Where I stopped:** infra-skill cluster done — READMEs for `project-bootstrap`, `setup-wiki`, `setup-tasks`, `using-wiki`, `using-tasks`; root README translated; cross-links between all five skills wired up
|
||||
**Next action:** continue with the next batch — suggest the caveman cluster (`caveman`, `caveman-commit`, `caveman-review`, `caveman-help`, `caveman-compress`, `compress`) since they form a coherent group; or jump to `active-platform`, `find-skills`, `setup-context7`, `using-context7`, `using-markitdown` if the caveman cluster needs deduplication first (see `compress-dedup` task)
|
||||
**Branch:** master
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [archive-roundtrip-test] — smoke-test for .skill archive shape
|
||||
## ⚪ [#23 archive-roundtrip-test] — smoke-test for .skill archive shape
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-04-28
|
||||
**Where I stopped:** (not started) — caught the PowerShell-Compress-Archive backslash bug manually; a smoke-test would catch the next regression automatically
|
||||
**Next action:** add a script that builds `dist/<name>.skill`, unzips into a temp dir, and `diff -r` against `skills/<name>/`. Fail on any difference. Run from CI or pre-commit if we add one
|
||||
**Branch:** (not started)
|
||||
|
||||
---
|
||||
|
||||
## 🟡 [active-platform-eval] — eval-driven tuning of active-platform (description + body), absorbs `[active-platform-tuning]`
|
||||
## 🟡 [#49 active-platform-eval] — eval-driven tuning of active-platform (description + body), absorbs `[active-platform-tuning]`
|
||||
**Status:** paused
|
||||
**Created:** 2026-05-05
|
||||
**Where I stopped:** design doc complete (`.wiki/concepts/active-platform-eval-design.md`, ~150 lines); per-task file complete (`.tasks/active-platform-eval.md`); STATUS.md collapsed the two original ⚪ tasks into this one block. Pre-flight verified: `claude` CLI on PATH at `C:\nvm4w\nodejs\claude.ps1` (Claude Code 2.1.128); `run_loop.py` present at `~/.claude/plugins/cache/claude-plugins-official/skill-creator/unknown/skills/skill-creator/scripts/run_loop.py`. Stopped right before eval-set authoring at user request — paused for asynchronous follow-up. No code touched, no tooling launched, no `.tasks/active-platform-eval/` workspace dir created yet.
|
||||
**Next action:** resume by answering Q2 from the chat ("eval set — write 20 queries solo from current SKILL.md + concept-page open questions, or run skill-creator's HTML review template first for user-driven edits before kickoff?"), then (a) build `.tasks/active-platform-eval/eval-set.json`, (b) snapshot skill to `.tasks/active-platform-eval/skill-snapshot/`, (c) launch run_loop.py in background, (d) parallel manual body sweep, (e) apply changes + bump to 1.1.0 + rebuild + reinstall + final report + commit.
|
||||
**Branch:** master
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [skills-grouping-revisit] — revisit flat vs grouped skills/ layout if count grows past ~30
|
||||
## ⚪ [#25 skills-grouping-revisit] — revisit flat vs grouped skills/ layout if count grows past ~30
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-04-28
|
||||
**Where I stopped:** (not started) — current 14 skills fit fine in flat `skills/`; threshold for revisiting is ~30
|
||||
**Next action:** when triggered (skill count crosses threshold), evaluate variant B (grouped by family) vs variant C (flat + manifest) from the original brainstorm in `.wiki/concepts/repo-layout.md`
|
||||
**Branch:** (not started)
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [hermes-converter-ci] — [deferred — после ручной валидации MVP] CI hook (Gitea-pipeline или GitHub-Action если зеркалим): на push to master запустить `scripts/build-hermes.py`, сравнить diff `dist-hermes/`, авто-коммит если изменения (или PR-шаблон). Цель — чтобы `dist-hermes/` всегда матчил `skills/`+`hermes/mapping.yaml`+`hermes/skills/` без ручного запуска build. Не блокирует MVP — первая итерация делается ручным запуском конвертера. Дизайн: `.wiki/concepts/hermes-skills-rollout-design.md`.
|
||||
## ⚪ [#53 hermes-converter-ci] — [deferred — после ручной валидации MVP] CI hook (Gitea-pipeline или GitHub-Action если зеркалим): на push to master запустить `scripts/build-hermes.py`, сравнить diff `dist-hermes/`, авто-коммит если изменения (или PR-шаблон). Цель — чтобы `dist-hermes/` всегда матчил `skills/`+`hermes/mapping.yaml`+`hermes/skills/` без ручного запуска build. Не блокирует MVP — первая итерация делается ручным запуском конвертера. Дизайн: `.wiki/concepts/hermes-skills-rollout-design.md`.
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-05-06
|
||||
**Where I stopped:** unblocked 2026-05-07 — `hermes-mvp-coverage` shipped в `a003b80`; MVP живой на фабрике.
|
||||
**Next action:** Выбрать платформу CI (Gitea Actions vs внешняя), написать workflow, прогнать тестовый push.
|
||||
**Branch:** master
|
||||
@@ -90,7 +96,7 @@ _Updated: 2026-08-12 — **sovereign-catalog-wave2-review closed**: VERDICT PASS
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [tdd-criteria-precommit-hook] — Optional pre-commit hook script that automates the bright-line checks from `tdd-criteria` Anti-loophole rules 1 and 4. Project owner opts in per-repo by symlinking / copying to `.git/hooks/pre-commit` (or via `husky` / `lefthook` integration if the project uses them).
|
||||
## ⚪ [#64 tdd-criteria-precommit-hook] — Optional pre-commit hook script that automates the bright-line checks from `tdd-criteria` Anti-loophole rules 1 and 4. Project owner opts in per-repo by symlinking / copying to `.git/hooks/pre-commit` (or via `husky` / `lefthook` integration if the project uses them).
|
||||
|
||||
**Two checks** (both bright-line, both fail-closed):
|
||||
|
||||
@@ -157,6 +163,7 @@ Pre-commit hooks have `--no-verify`. Per `project-discipline` Rule 4 («never sk
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-05-07
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** Решить, нужен ли hook (он опционален) — если да, написать `~/projects/claude-skills/scripts/tdd-criteria-precommit-hook.sh` по спеке в description, протестировать на `books` (Jest-конвенция `*.test.js`), задокументировать activation pattern. Если нет — закрыть как `wontfix` с пометкой что fence чисто социальная (commit subject visible в `git log`).
|
||||
**Branch:** master
|
||||
@@ -164,7 +171,7 @@ Pre-commit hooks have `--no-verify`. Per `project-discipline` Rule 4 («never sk
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [tasks-board-cleanup-2026-05] — Архивная чистка `.tasks/STATUS.md`: переместить все 🟢 done-блоки в `.tasks/.archive/done-2026-05.md`, оставить в STATUS.md только header + status legend + 🔴/🟡/⚪/🔵 блоки. Цель — разгрузить файл от исторического шума без потери data (git history + явный архивный файл для текстового поиска).
|
||||
## ⚪ [#63 tasks-board-cleanup-2026-05] — Архивная чистка `.tasks/STATUS.md`: переместить все 🟢 done-блоки в `.tasks/.archive/done-2026-05.md`, оставить в STATUS.md только header + status legend + 🔴/🟡/⚪/🔵 блоки. Цель — разгрузить файл от исторического шума без потери data (git history + явный архивный файл для текстового поиска).
|
||||
|
||||
Предпосылка: на 2026-05-07 в `claude-skills/.tasks/STATUS.md` накопилось ~18+ 🟢 done-блоков (rolled out за 2026-04-25 — 2026-05-07: tdd-criteria-rollout, hermes-rollout, bootstrap-related, project-creation-lifecycle, recommend-dont-menu и т.д.). Convention в шапке файла говорит «🟢 Done — kept until merged», но проект работает на master-only (нет ветвления для merge), поэтому convention превратилась в «kept forever». Файл рос до ~600 строк / 26K токенов — Read-инструменты упираются в лимит.
|
||||
|
||||
@@ -172,6 +179,7 @@ Pre-commit hooks have `--no-verify`. Per `project-discipline` Rule 4 («never sk
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-05-07
|
||||
**Where I stopped:** Создана 2026-05-07. После rollout v1.10.0/1.10.1 на STATUS.md накопилось много свежих 🟢 (bootstrap-add-tdd-trigger, refresh-project-bootstrap closed-as-superseded, bootstrap-fix-tdd-recommend-template, bootstrap-upgrade-canonical-triggers если уже отработал). Хороший момент для batch-archive.
|
||||
**Next action:** 1) Прочитать `.tasks/STATUS.md` целиком (Read in chunks if needed). 2) Идентифицировать все блоки `## 🟢 [...]` — разделители `---`. 3) Создать `.tasks/.archive/` директорию (если нет). 4) Записать `.tasks/.archive/done-2026-05.md` с шапкой:
|
||||
|
||||
@@ -195,12 +203,13 @@ NB: эта таска сама уйдёт в следующий cleanup batch (2
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [meta-host-routing-install] — Установить новый скил `meta-host-routing` v0.1.0 (закоммичен локально a7526d1, ещё не установлен — потому не триггерит).
|
||||
## ⚪ [#254 meta-host-routing-install] — Установить новый скил `meta-host-routing` v0.1.0 (закоммичен локально a7526d1, ещё не установлен — потому не триггерит).
|
||||
|
||||
Запустить `install.sh` в `~/projects/claude-skills/`, проверить что скил активируется в новой сессии, `/reload-plugins`.
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-05-27
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** Запустить install.sh, открыть новую CC-сессию, убедиться что meta-host-routing в available-skills, /reload-plugins.
|
||||
**Branch:** n/a
|
||||
@@ -208,13 +217,14 @@ NB: эта таска сама уйдёт в следующий cleanup batch (2
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [meta-host-routing-test-trigger] — Прогнать триггер-фразы `meta-host-routing` из description на тестовом сценарии.
|
||||
## ⚪ [#255 meta-host-routing-test-trigger] — Прогнать триггер-фразы `meta-host-routing` из description на тестовом сценарии.
|
||||
|
||||
**Должен активироваться:** «project not in cache» от projects-meta; промоушен/таски для проекта с github-remote; «заведи таски в <github-проект>», «промоутни <github-проект>».
|
||||
**НЕ должен (false-positive check):** обычный Gitea-проект уже в projects-meta (прямой маршрут); 2-3 близкие фразы из соседних доменов (using-projects-meta query, обычный tasks_create в known-проект).
|
||||
|
||||
**Weight:** needs-human
|
||||
**Status:** ready
|
||||
**Created:** 2026-05-27
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** В чистой сессии прогнать активацию на своих фразах И убедиться что не фаерит на 2-3 чужих близких; зафиксировать результат.
|
||||
**Branch:** n/a
|
||||
@@ -222,7 +232,7 @@ NB: эта таска сама уйдёт в следующий cleanup batch (2
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [skill-using-system-snapshot] — ## Goal
|
||||
## ⚪ [#336 skill-using-system-snapshot] — ## Goal
|
||||
Создать скил `using-system-snapshot` в `claude-skills`.
|
||||
<!-- closed-by: OpeItcLoc03@DESKTOP-NSEF0UK / 2026-06-09T13:44:08.725Z / note: Shipped skills/using-system-snapshot/SKILL.md v0.1.0 (commit 069b041, NOT pushed per runner). Thin read-only wrapper over meta_system_snapshot: 3 trigger groups (what's running / system status / poller alive — RU+EN), explicit no-claim-without-call rule, 3-line output format (poller / docker / tasks), liveness split (poller+docker live, tasks cached), scope-defers to using-vds-ops + using-projects-meta. Dependency documented (Prerequisites → setup-projects-meta). Output shape verified live. 3/3 acceptance met. Wiki concept page + index + log. TDD N/A (markdown); behavioral smoke-test = paired -review task. -->
|
||||
|
||||
@@ -249,6 +259,7 @@ needs-claude
|
||||
|
||||
**Weight:** needs-claude
|
||||
**Status:** ready
|
||||
**Created:** 2026-06-09
|
||||
**Where I stopped:** Разблокировано 2026-06-09 — meta-system-snapshot в OpeItcLoc03/common закрыт (review прошёл, live call верифицирован).
|
||||
**Next action:** Написать skills/using-system-snapshot/SKILL.md
|
||||
**Branch:** n/a
|
||||
@@ -256,7 +267,7 @@ needs-claude
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [delegate-task-review-weight-inherit] — Исправить `delegate-task` скил: при создании парной review-таски (Step 5) наследовать `weight` от impl-таски.
|
||||
## ⚪ [#335 delegate-task-review-weight-inherit] — Исправить `delegate-task` скил: при создании парной review-таски (Step 5) наследовать `weight` от impl-таски.
|
||||
|
||||
**Проблема:** review-таски создаются через `tasks_create(status=blocked, blocker=<impl-slug>)` без `weight` параметра. Reconciler обрабатывает авто-анблок только задач с `**Weight:** needs-claude` или `**Weight:** cheap-ok` в теле. Без поля — задача навечно остаётся 🔵, поллер её не видит. Воспроизводилось трижды за одну сессию (session-break-using-tasks-review, session-break-delegate-task-review, skill-using-system-snapshot-review, using-tasks-status-read-perf-review).
|
||||
|
||||
@@ -282,6 +293,7 @@ needs-claude
|
||||
**notify:** OpeItcLoc03/workshop
|
||||
|
||||
**Status:** ready
|
||||
**Created:** 2026-06-09
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** Открыть `skills/delegate-task/SKILL.md`, найти Step 5, добавить явное наследование weight при tasks_create review-таски. Bump PATCH.
|
||||
**Branch:** n/a
|
||||
@@ -290,7 +302,7 @@ needs-claude
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [using-markitdown-cli-rewrite] — Переписать `skills/using-markitdown/SKILL.md`: заменить все инструкции по вызову `mcp__markitdown__*` тулов на вызов CLI `markitdown <path|url>` (v0.1.6, доступен в системном PATH). Убрать секцию про MCP setup/docker. После обновления SKILL.md — остановить и удалить локальный docker контейнер markitdown-mcp (`docker stop markitdown-mcp && docker rm markitdown-mcp`). Bump PATCH version в frontmatter скила.
|
||||
## ⚪ [#337 using-markitdown-cli-rewrite] — Переписать `skills/using-markitdown/SKILL.md`: заменить все инструкции по вызову `mcp__markitdown__*` тулов на вызов CLI `markitdown <path|url>` (v0.1.6, доступен в системном PATH). Убрать секцию про MCP setup/docker. После обновления SKILL.md — остановить и удалить локальный docker контейнер markitdown-mcp (`docker stop markitdown-mcp && docker rm markitdown-mcp`). Bump PATCH version в frontmatter скила.
|
||||
|
||||
**Acceptance criteria:**
|
||||
- SKILL.md не содержит `mcp__markitdown__` — только CLI-вызовы
|
||||
@@ -312,6 +324,7 @@ needs-claude
|
||||
**notify:** OpeItcLoc03/workshop
|
||||
|
||||
**Status:** ready
|
||||
**Created:** 2026-06-09
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** Открыть `skills/using-markitdown/SKILL.md`, заменить все mcp__markitdown__ вызовы на CLI-эквиваленты, bump PATCH, затем `docker stop markitdown-mcp && docker rm markitdown-mcp`.
|
||||
**Branch:** n/a
|
||||
@@ -320,7 +333,7 @@ needs-claude
|
||||
|
||||
---
|
||||
|
||||
## 🔵 [setup-agents-task-runner-windows-fixes] — Починить `setup-agents-task-runner` по итогам первого реального Windows-прогона. Скил v0.1.0 устанавливал, но службы вставали сломанными — 5 дефектов, все диагностированы и воркэраунд-починены в `OpeItcLoc03/common` dev-шаблонах. Нужно перенести в SKILL.md, чтобы fresh-install на новой машине работал без ручной отладки.
|
||||
## 🔵 [#443 setup-agents-task-runner-windows-fixes] — Починить `setup-agents-task-runner` по итогам первого реального Windows-прогона. Скил v0.1.0 устанавливал, но службы вставали сломанными — 5 дефектов, все диагностированы и воркэраунд-починены в `OpeItcLoc03/common` dev-шаблонах. Нужно перенести в SKILL.md, чтобы fresh-install на новой машине работал без ручной отладки.
|
||||
|
||||
## Дефекты (с проверенными фиксами в OpeItcLoc03/common)
|
||||
|
||||
@@ -388,6 +401,7 @@ needs-claude
|
||||
**Разрешения:** интерны: нет | автопуш: нет
|
||||
|
||||
**Status:** blocked
|
||||
**Created:** 2026-06-18
|
||||
**Where I stopped:** exit 1
|
||||
**Next action:** Портировать проверенные фиксы в SKILL.md (Phases) + дотянуть dev-шаблоны. См. тело.
|
||||
**Branch:** n/a
|
||||
@@ -397,9 +411,10 @@ needs-claude
|
||||
|
||||
---
|
||||
|
||||
## 🟢 [agent-neutral-skill-pipeline] — ДОЛГ (идея 19 п.5): инсталл/апдейт-пайплайн скилов — claude-only. update-claude-skills ставил только в ~/.claude/skills; pi получил каталог вручную (settings skills array, идея 6). Цель: update-skills обслуживает всех агентов (единый канон + честный per-agent срез).
|
||||
## 🟢 [#655 agent-neutral-skill-pipeline] — ДОЛГ (идея 19 п.5): инсталл/апдейт-пайплайн скилов — claude-only. update-claude-skills ставил только в ~/.claude/skills; pi получил каталог вручную (settings skills array, идея 6). Цель: update-skills обслуживает всех агентов (единый канон + честный per-agent срез).
|
||||
|
||||
**Status:** done
|
||||
**Created:** 2026-08-12
|
||||
**Where I stopped:** РЕШЕНИЕ ОПЕРАТОРА (2026-08-12, зафиксировано после вскрытия непротоколированного решения вчерашней сессии «канон = ~/.claude/skills»): **dual install target**. install.sh/ps1 + update.sh/ps1 ставят в ОБА каталога: ~/.claude/skills (Claude Code — читает только его нативно, кастомные диры не конфигурируются) + ~/.agents/skills (pi — нативный скан-путь, нейтральный неймспейс .agents/). Из ~/.pi/agent/settings.json убран skills-массив (вендор-лок устранён). update-skills SKILL.md v0.2.1 — секция «Install targets (dual, agent-neutral)», semver-bump, lint 46/0. Оба таргета синхронны (46/46, diff IDENTICAL). Источник истины — git-репо skills/, оба дира — инсталлы.
|
||||
**Next action:** (none — kept until merged) pi перезапустить чтобы убедиться, что скилы грузятся из ~/.agents/skills (нативный скан без settings-хака).
|
||||
**Branch:** master
|
||||
@@ -408,9 +423,10 @@ needs-claude
|
||||
|
||||
---
|
||||
|
||||
## 🟢 [readme-command-index-row] — README.md + README.ru.md: 0 строк про скил `command-index` (провенанс-таблица не обновлена); заодно стейл-заметка README.md про `install.ps1` («not yet implemented», а build.ps1/update.ps1 существуют). Найдено: command-index-review (F1/F2).
|
||||
## 🟢 [#656 readme-command-index-row] — README.md + README.ru.md: 0 строк про скил `command-index` (провенанс-таблица не обновлена); заодно стейл-заметка README.md про `install.ps1` («not yet implemented», а build.ps1/update.ps1 существуют). Найдено: command-index-review (F1/F2).
|
||||
|
||||
**Status:** done
|
||||
**Created:** 2026-08-12
|
||||
**Where I stopped:** F1/F2 закрыты: README.md + README.ru.md — строка command-index в провенанс-таблице (author: ours, идея 3/18); стейл-заметка про install.ps1 («not yet implemented») исправлена — install.ps1 существует. Commit 32979fb.
|
||||
**Next action:** (none — kept until merged)
|
||||
**Branch:** master
|
||||
|
||||
Reference in New Issue
Block a user