Files
portal/docs/sessions
Дмитрий ad09db606a docs(supplier): closure — project channel failover epic (12 tasks)
Все 12 задач плана docs/superpowers/plans/2026-05-19-supplier-project-channel-failover.md
выполнены. Резервный канал миграции проектов Лидерра → crm.bp-gr.ru:
3 яруса — AJAX rt-project-* → авто-браузер формы «Мои проекты» →
operator worklist (supplier_manual_sync_queue).

Задачи: T1 live recon rt-project-* контракта · T2 SupplierProjectChannel
interface + AjaxProjectChannel · T3 supplier_manual_sync_queue (schema v8.25)
· T4 FailoverProjectChannel escalation matrix · T5 portal-side dedup ·
T6 manage-project.js · T7 FormProjectChannel + DI · T8 wire jobs ·
T9 cron 20:30→18:00 / 20:15→17:45 · T10 admin endpoints · T11 admin UI ·
T12 регрессия + code-review.

Регрессия зелёная: Pest 973/970/0 / 3 skipped / 2847 assertions;
Vitest 882/0 / 3 skipped (111 files); Pint clean; gitleaks 14 commits /
0 leaks; markdownlint + lychee clean. Larastan: изолированный прогон по
supplier-failover файлам — 0 реальных ошибок (полный baseline-drift —
артефакт worktree-env, _ide_helper_models.php отсутствовал; финальная
larastan-верификация — в основной копии после merge, memory quirk).

Финальное code-review (Opus): найден + исправлен 1 CRITICAL (контракт
listProjects — нормализация сырых rt-строк) + I1 (log дедуп-сбоя).

ОГРАНИЧЕНИЯ (не верифицировано в этой сессии):
- Live smoke по 3 ярусам (план T12.1-12.3) НЕ выполнен — требует боевого
  портала crm.bp-gr.ru, queue worker, форс-фейлов DI и создания тестовых
  проектов на живом портале. Откладывается на отдельную сессию с
  присутствием заказчика.
- Code-review I2 (partial-unique индекс supplier_manual_sync_queue от
  дубль-эскалаций при job-retry) и I3 (lockForUpdate в manualQueueResolve)
  — follow-up до прод-релиза (эпик гейтится Б-1, не в проде).
- Larastan полный baseline — пересинхронизировать в основной копии.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:12:30 +03:00
..

docs/sessions/ — координация параллельных Claude-сессий

Источник правила: Pravila §15.2 (раздел про CURRENT.md в конце текста §15.2).

Назначение

docs/sessions/CURRENT.md — заявочный лог активных параллельных Claude-сессий проекта. Решает класс инцидентов «нормативка/MEMORY дрейфует» (см. spec — docs/superpowers/specs/2026-05-18-parallel-sessions-coordination-design.md).

Когда писать в CURRENT.md

Перед первой нормативной правкой в сессии (правки файлов из списка §15.2 — Pravila, CLAUDE.md, Tooling, PSR_v1, MEMORY.md, Открытые_вопросы, docs/adr/*, db/schema.sql). Запись добавляется отдельным атомарным коммитом sessions: claim <topic> — до plan-документа и до первой содержательной правки.

Формат записи

## session: YYYY-MM-DD-<topic-kebab>
- branch: <git branch --show-current>
- worktree: <git rev-parse --show-toplevel>
- started: <ISO 8601 with timezone>
- scope-files:
  - <relative path> [§/раздел/строка]
  - ...
- version-claims:
  - <file-or-topic>: <from> → <to>
  - ...
- status: in-progress | closed-<commit-sha>
- closes: <relative path к plan-документу>

scope-files — какие нормативные файлы и в каких секциях правит сессия. version-claims — какие новые версии (Tooling 2.X, Pravila 1.Y и т.п.) или номера (ADR-NNN) сессия резервирует.

Жизненный цикл

  • claim — добавить запись со status: in-progress + атомарный коммит sessions: claim <topic>.
  • check — pre-flight перед нормативной правкой: Read docs/sessions/CURRENT.md + проверить пересечение scope-files / version-claims с активными записями.
  • release — на закрытии (после push на main) изменить status: closed-<commit-sha> (запись остаётся в CURRENT.md — append-only-вариант).

Closed-записи переезжают в docs/sessions/archive/YYYY-MM.md через ≥30 дней после закрытия (ручная архивация раз в месяц, не cron).

Конфликт-резолюция

Тип пересечения Реакция
Файловое пересечение (одинаковый файл, разные секции) soft-warn — продолжать можно, но pre-flight fetch перед каждым коммитом обязателен (§15.2).
Section-пересечение (одна и та же секция §X.Y) hard-stop — координация с заказчиком до начала правки.
Version-claim collision (две сессии заявили один номер) hard-stop — кто claim'нул раньше (по started-timestamp), тот его и берёт. Вторая сессия сдвигается на +1.

Pre-flight snippet (для plan-документов и скила subagent-driven-development)

# Перед нормативной правкой:
git fetch origin && git log HEAD..origin/main --oneline
grep -A 20 'status: in-progress' docs/sessions/CURRENT.md

Что мы НЕ делаем (явный YAGNI)

  • Pre-commit hook на CURRENT.md — добавим только если будут зафиксированы инциденты игнорирования.
  • TTL / auto-expire записей — добавим, если файл реально засорится.
  • Machine-readable JSON-формат — markdown достаточен, парсится grep/sed.
  • Интеграция с GitHub Issues — отдельная тема, не блокер.