Срез 3a: горячие папки как у armka_file_worker, нормализатор OCR → statementDocument v1.2 #8

Merged
aep merged 44 commits from feat/6-slice-3a-ocr-normalizer into main 2026-10-07 04:05:00 +03:00
Showing only changes of commit b411b7e128 - Show all commits

View File

@ -174,3 +174,4 @@ docs: bounded-PR (`03-architecture.md`, OQ-137, §11.1 п. 6 и 9, новые OQ
| 32 | 2026-10-07 | R-14 (финальное ревью). Локальная запись: `.part` создаётся заново (удаление старого + `O_EXCL`), fallback `os.replace` — только вокруг `os.link`, `EOPNOTSUPP` добавлен к списку | `.part`, оставшийся жёсткой ссылкой на уже опубликованный файл (подавленное удаление, OQ-144), перезаписывался бы на месте и портил файл, который читает ИС; EPERM на записи маскировался `FileNotFoundError` | — |
| 33 | 2026-10-07 | R-15 (финальное ревью, T1.3). Загрузчик yaml отклоняет повторяющиеся ключи (`SafeLoader` с проверкой) | спека: «Коды справочника SHALL быть без дублей»; `safe_load` молча перезаписывает дубли, тест `len(set)` тавтологичен; владелец заполняет `fsbu4` вручную | битый справочник не стартует — это и нужно |
| 34 | 2026-10-07 | R-16 (финальное ревью I-2). №15 (повтор кода → остаётся первая строка) НЕ меняется: в aep_6 ОФР код 2410 повторён, и оставленная первая строка пуста, а отброшенная (`(649)`) — со значением; выбор «первая с суммой» отложен владельцу как OQ | паритет с Excel-путём 2b (§12 п. 5); эвристика «первая с суммой» для aep_3 даёт иное, чем для aep_6 — нужна проверка на стенде | сумма отброшенной строки остаётся только в `raw/`; предупреждение «код N повторяется» сигнализирует аналитику |
| 35 | 2026-10-07 | R-17. `put` при уже существующем назначении ничего не пишет и не трогает `.part` (при включённой очистке — снимает существующий `.part`); `.part` от прерванной записи перед новой записью удаляется с подавлением ошибки; запись поверх оставшегося `.part` без назначения — только при `st_nlink == 1` | после №32 неудаляемый `.part` (нет права удаления, OQ-144) на повторе задания давал бы `PermissionError` → `RECOGNITION_FAILED` для уже доставленного файла | редкий остаток `.part` в `Tmp` без права удаления |