diff --git a/openspec/changes/aurora-1848-sheet-json/design.md b/openspec/changes/aurora-1848-sheet-json/design.md index 0b2f3e1..8f0c63b 100644 --- a/openspec/changes/aurora-1848-sheet-json/design.md +++ b/openspec/changes/aurora-1848-sheet-json/design.md @@ -237,3 +237,8 @@ def list_json_response(rows: list[str], headers: dict[str, str] | None = None) - | 2026-10-28 | (план) В режиме `strip-nulls` `compare_responses.py` чистит только `data` строк (обёртка, `sort_order`, `message` не трогаются); `dump` пишет статусы в `index.json`, `compare` сравнивает и статусы | Спека: «из `data` которого рекурсивно удалены поля со значением null»; ошибки тоже должны совпадать | Низкая | | 2026-10-28 | (план) Финальное ревью opus — по одному на каждую ветку фазы: A до PR A, B (без коммитов #223) до PR B | Два PR ревьюются и мержатся раздельно | Низкая: два прогона opus вместо одного | | 2026-10-28 | (план) Проверка PG15 главным контроллером не блокирует открытие PR, блокирует merge; в PR A пишется `Part of #233`, `Closes #233` — в PR B | Замеры и PG15 у главного контроллера, PR открываются без них; issue закрывается только всем объёмом (A+B) | Низкая | +| 2026-10-28 | R-1 (design #1): тест экранирования листа вставляет `budget_line` (form 4, `name` = строка с кавычкой, обратным слэшем, переводом строки, табом и кириллицей) вместо `UPDATE justification` из плана; сравнение по декодированному значению `data.header.name` | В фикстуре у FORM_2 нет строк `budget_line`, `UPDATE` ничего не меняет; в `data` листа `name` попадает в `header.name` | Низкая: слабее покрытие экранирования на других полях `data` | +| 2026-10-28 | R-2 (design #2): фикстура `svod2_plan_line` (в откатываемой сессии теста) вместо запасного `POST .../line` из плана | `POST` на FORM_2 даёт 400 или строку с нулевым планом, которую свод 2 пропускает; без данных сравнения свода 2 пусты | Низкая: привязка к идентификаторам фикстуры `fixture.sql` | +| 2026-10-28 | R-3 (design #3): для `rf-rollup` вместо сравнения с старым путём — тест фиксации ответа об ошибке; `_add_line` в тестах проектов не реализован | `v3.v_form3_rf_rollup_jsonb` на `test` обращается к несуществующей колонке `r.year` и всегда отдаёт 400 (O-3, вне объёма, миграции запрещены); POST строки проекта даёт 400/409 и рвёт транзакцию теста. Исправляет прежнее утверждение выше о покрытии `rf-rollup` интеграционным тестом эквивалентности: успешный путь `rf-rollup` не покрыт ничем до исправления O-3 | Средняя: регрессия успешного пути `rf-rollup` невидна; follow-up на исправление `r.year` и перевод теста в эквивалентность | +| 2026-10-28 | R-4 (design #4): мок в `test_api_split.py` использует `stream=httpx.ByteStream(gz)` вместо `content=gz` | С `content=` httpx не считает `num_bytes_downloaded`, `wire_bytes` был бы 0 | Нет: только тест | +| 2026-10-28 | R-5 (design #5): после ревью задачи 7 в `compare_responses.py` `dump` принимает готовый `httpx.Client`, пишет `index.json` в `finally` и записывает сетевые ошибки как `error: `; `compare` сравнивает не-JSON тела побайтно | Ночной `dump` на стенде идёт без присмотра; падение на одном запросе не должно терять остальные | Низкая |