docs: перевод документации на канон av-dev

- Раскладка docs/ приведена к канону 2: заведены passport/architecture/
  database/security/review и research; docs/specs, drafts, backlog, review/
  и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи,
  6 целей, слаги на английский).
- Нарративы specs удалены как дубли openspec-спек после поимённой сверки;
  остаток заведён задачами (редактор маппинга ревью, крайние случаи
  именования), отказ от сущности title промоутнут в ADR.
- Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу
  плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon
  вместо er-schema.
This commit is contained in:
av
2026-08-04 09:27:26 +03:00
parent 08bef2cac0
commit 42d5b73a04
128 changed files with 1606 additions and 4889 deletions
+34 -7
View File
@@ -26,6 +26,17 @@ from pathlib import Path
OUT_DIR = Path("tmp/gate")
# docs.py скилла av-dev-pm:canon — проверка раскладки docs/ против канона.
# Путь берётся из каталога маркетплейса (он без хеша версии, в отличие от
# cache/), переопределяется переменной DOCS_PY: переустановка плагина не должна
# требовать правки гейта. Если скрипта нет — шаг краснеет, а не пропускается:
# молча пропущенная проверка даёт ложное ощущение проверенности.
DOCS_PY_DEFAULT = (
Path.home()
/ ".claude/plugins/marketplaces/av-dev-skills"
/ "av-dev-pm/skills/canon/scripts/docs.py"
)
OK, FAIL, WARN, SKIP = "OK", "FAIL", "WARN", "SKIP"
summary: list[tuple[str, str, str]] = []
@@ -170,14 +181,30 @@ def main() -> int:
else:
record(SKIP, "migrations", "миграции и код не менялись")
# --- ER-схема синхронна с миграциями ---
# docs/conventions/database.md: меняем структуру — обновляем ER-схему в том
# же change. Проверка по диффу, поэтому живёт здесь, а не в archrules.
if migrations_changed:
if "docs/specs/database.md" in changed:
record(OK, "er-schema")
# --- Канон документации ---
# Раскладка docs/ против канона av-dev, битые ссылки, версия канона,
# нетронутые плейсхолдеры и две сверки с кодом — включая «миграция изменена,
# а database.md нет» (отдельного шага er-schema поэтому больше нет).
# База диффа обязательна: без неё сверка миграций со схемой не гоняется.
docs_py = Path(os.environ.get("DOCS_PY") or DOCS_PY_DEFAULT)
if not docs_py.is_file():
record(FAIL, "canon", f"docs.py не найден: {docs_py} — переустанови плагин"
" av-dev-pm или задай путь переменной DOCS_PY")
else:
log = OUT_DIR / "canon.log"
proc = subprocess.run(
["python3", str(docs_py), "check", "--dir", ".", "--base", base],
capture_output=True, text=True,
)
log.write_text(proc.stdout + proc.stderr, encoding="utf-8")
if proc.returncode == 0:
record(OK, "canon")
elif proc.returncode == 1:
record(FAIL, "canon", f"раскладка docs/ разошлась с каноном → {log}")
else:
record(FAIL, "er-schema", "миграция изменена, а docs/specs/database.md — нет")
# 2 — ошибка употребления, 3 — окружение, 4 — внутренний сбой.
# Это не дрейф документации, и чинится оно не правкой docs/.
record(FAIL, "canon", f"docs.py не отработал (код {proc.returncode}) → {log}")
# --- Секреты ---
# Гоняем всегда: секрет утекает из любого файла, не только из кода.