Аудит main/audits/2026-10-19-code-quality-architecture/02-findings.md, CQ-003: ProblemDetailsDto.code публикуется в OpenAPI как произвольная строка; frontend поддерживает отдельный неполный список кодов, включая недостижимую ветку. Это одна координирующая задача для публичного контракта и его потребителя.
Результат и scope
Backend определяет достоверный публикуемый словарь кодов и передаёт обновлённый OpenAPI artifact; frontend обновляет generated types и убирает ручное зеркало там, где оно дублирует контракт. Не удалять и не переименовывать реально выдаваемые коды без отдельного согласования; не править generated файлы вручную. Смежная frontend#55 отвечает за отображение source/recovery, не за генерацию словаря.
Acceptance Criteria
Публикуемый backend OpenAPI описывает допустимые значения ProblemDetailsDto.code согласно реально выдаваемым кодам; runtime payload остаётся совместимым.
Контракт явно доставлен frontend, сгенерированные типы обновлены из него; ручной список не расходится с источником или удалён.
Использования отсутствующих/лишних кодов на frontend пересмотрены без потери текущего поведения access-loss; соответствующие проверки backend/frontend проходят.
Изменения в двух самостоятельных репозиториях проверены и приняты вместе; порядок поставки backend contract → frontend consumer зафиксирован.
Источник: аудит 2026-10-19, CQ-003 (CQ-014/OE-08 лишь смежны), план, пункт 4. Отдельные внутренние перестановки всех enum не входят в эту задачу.
## Проблема
Аудит `main/audits/2026-10-19-code-quality-architecture/02-findings.md`, CQ-003: `ProblemDetailsDto.code` публикуется в OpenAPI как произвольная строка; frontend поддерживает отдельный неполный список кодов, включая недостижимую ветку. Это одна координирующая задача для публичного контракта и его потребителя.
## Результат и scope
Backend определяет достоверный публикуемый словарь кодов и передаёт обновлённый OpenAPI artifact; frontend обновляет generated types и убирает ручное зеркало там, где оно дублирует контракт. Не удалять и не переименовывать реально выдаваемые коды без отдельного согласования; не править generated файлы вручную. Смежная frontend#55 отвечает за отображение source/recovery, не за генерацию словаря.
## Acceptance Criteria
- [ ] Публикуемый backend OpenAPI описывает допустимые значения `ProblemDetailsDto.code` согласно реально выдаваемым кодам; runtime payload остаётся совместимым.
- [ ] Контракт явно доставлен frontend, сгенерированные типы обновлены из него; ручной список не расходится с источником или удалён.
- [ ] Использования отсутствующих/лишних кодов на frontend пересмотрены без потери текущего поведения access-loss; соответствующие проверки backend/frontend проходят.
- [ ] Изменения в двух самостоятельных репозиториях проверены и приняты вместе; порядок поставки backend contract → frontend consumer зафиксирован.
Источник: аудит 2026-10-19, CQ-003 (CQ-014/OE-08 лишь смежны), план, пункт 4. Отдельные внутренние перестановки всех enum не входят в эту задачу.
Delivered in order: backend #144 (d37fa2c) → frontend WealthLedger/frontend#123 (32e8fe9). Both CI green. Follow-up (out of scope): type thrown exception payload code so a new code cannot bypass PROBLEM_CODES.
Delivered in order: backend #144 (d37fa2c) → frontend WealthLedger/frontend#123 (32e8fe9). Both CI green. Follow-up (out of scope): type thrown exception payload `code` so a new code cannot bypass `PROBLEM_CODES`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Проблема
Аудит
main/audits/2026-10-19-code-quality-architecture/02-findings.md, CQ-003:ProblemDetailsDto.codeпубликуется в OpenAPI как произвольная строка; frontend поддерживает отдельный неполный список кодов, включая недостижимую ветку. Это одна координирующая задача для публичного контракта и его потребителя.Результат и scope
Backend определяет достоверный публикуемый словарь кодов и передаёт обновлённый OpenAPI artifact; frontend обновляет generated types и убирает ручное зеркало там, где оно дублирует контракт. Не удалять и не переименовывать реально выдаваемые коды без отдельного согласования; не править generated файлы вручную. Смежная frontend#55 отвечает за отображение source/recovery, не за генерацию словаря.
Acceptance Criteria
ProblemDetailsDto.codeсогласно реально выдаваемым кодам; runtime payload остаётся совместимым.Источник: аудит 2026-10-19, CQ-003 (CQ-014/OE-08 лишь смежны), план, пункт 4. Отдельные внутренние перестановки всех enum не входят в эту задачу.
Delivery order: backend contract WealthLedger/backend#144 → frontend consumer WealthLedger/frontend#123. Close after both are merged.
Delivered in order: backend #144 (
d37fa2c) → frontend WealthLedger/frontend#123 (32e8fe9). Both CI green. Follow-up (out of scope): type thrown exception payloadcodeso a new code cannot bypassPROBLEM_CODES.