Skip to content

Document concurrency control and transaction boundaries - #124

Merged
prikotov merged 6 commits into
masterfrom
task/docs-concurrency-locking-convention
Sep 10, 2026
Merged

prikotov merged 6 commits into
masterfrom
task/docs-concurrency-locking-convention

Conversation

@prikotov

Copy link
Copy Markdown
Owner

Постановка

Запрос пользователя: «сделай TASK-docs-concurrency-locking-convention.todo.md, проверь на валидность постановки, архитектурную зрелость и прочее».

Задача: TASK-docs-concurrency-locking-convention. Добавить общую конвенцию выбора CAS, Symfony Lock и явных блокировок БД, границ транзакций, актуальности ORM и конкурентных тестов. Без runtime-компонентов, новых зависимостей и изменений проектов-потребителей.

Изменения

  • docs/conventions/architecture/concurrency-control.md: матрица выбора, канонические ключи, TTL, ограниченные ожидания, порядок вложенных блокировок, CAS с версией против ABA, границы защиты внешних эффектов, очередь с SKIP LOCKED, пример PHP 8.4/Symfony Lock 8/DBAL 4 и чек-лист.
  • Индексы и architecture/events/transactions.md: ссылки, различие flush/commit и ограничение схемы Outbox, сохраняющей событие только после ошибки брокера.
  • tests/Init/CodingStandardInitMakefileTest.php: публичный init из корня изолированного потребителя, чистая установка, обновление существующих индексов через штатный --force, повторное обновление.
  • В задаче зафиксированы проверка SMART/INVEST, архитектурные уточнения и результаты.

Саморевью

Постановка валидна: одна документационная цель, измеримые критерии, явные границы и риски; P2/V2/C2 сохранены. Уточнены ABA, ограниченность CAS одной строки, поздняя запись после потери TTL, порядок ресурсов одного уровня и финальная фиксация перед отправкой событий. Новых runtime-абстракций, миграций и breaking changes нет. Полная переработка существующего документа событий вне задачи.

Пример упрощён из реального сценария поэтапной публикации TasK, с нейтральными именами и скалярным перечитыванием DBAL. Файлы TasK не изменялись.

Проверки

  • composer check — успешно: PHPUnit 287 тестов, 762 проверки, sniff-test, validate-docs, validate-md-links, validate-language, validate-todo, PHPStan и PHPCS.
  • vendor/bin/phpunit tests/Init — 6 тестов, 55 проверок.
  • php vendor/bin/todo-md validate todo/TASK-docs-concurrency-locking-convention.todo.md — 0 ошибок и предупреждений.
  • Извлечённый PHP-пример: php -l, PHPCS PSR-12 — успешно.
  • Дополнительная локальная проверка примера с Symfony Lock 8.0.14/DBAL 4.4.3: успех, старая версия, отсутствие строки, занятая блокировка, внешняя транзакция, освобождение после SQL-ошибки — успешно. Использованы SQLite и InMemoryStore; это не конкурентный тест PostgreSQL/распределённого хранилища. Локальный PostgreSQL недоступен, соответствующие обязательные проверки описаны для потребителей.
  • git diff --check — успешно.
  • Makefile отсутствует, полный проверочный контур проекта — composer check.
  • composer.json не изменён; VCS-репозитории git-workflow и todo-md проверены через GitHub API: оба публичные.

@prikotov prikotov added the pi Pi Coding Agent label Sep 10, 2026
…нцию конкурентности на ревью
…бъяснить условное обновление простыми словами
… автоматическое управление транзакциями
@prikotov
prikotov merged commit 23d264d into master Sep 10, 2026
3 checks passed
@prikotov
prikotov deleted the task/docs-concurrency-locking-convention branch September 10, 2026 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pi Pi Coding Agent

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant