[Spec] upcoming-events: MOEX-ответ без блока — сбой, а не «нет данных» (синхронизировать со backend#53) #76

Closed
opened 2026-11-02 23:07:16 +03:00 by codex-bot · 1 comment
Owner

Контекст и результат

Spec brokerage-account-upcoming-events содержит сценарий «MOEX отвечает без запрошенного блока»: ответ трактуется как отсутствие данных по инструменту, без ошибки. Backend (MoexClient.parseRows) трактует отсутствие блока как MOEX_UNAVAILABLE, и тест missing block в moex.client.spec.ts закрепляет это.

Владелец решил (WealthLedger/backend#53): оставить консервативный сбой. Причина: с hourly-refresh календарей (backend#53) «нет блока → пусто» позволило бы урезанному или битому ответу MOEX успешно затереть сохранённый полный календарь пустым. Provider semantics не подтверждена primary contract или обезличенным offline fixture; live-вызовы запрещены.

Результат: spec совпадает с поведением backend, расхождения нет.

Scope / связанные Issues

  • WealthLedger/backend#53 (AC 5), audit 2026-10-11: BE-003, BE-014.
  • Target: openspec/specs/brokerage/brokerage-account-upcoming-events/spec.md, requirement «Upcoming events use complete source results».
  • Вне scope: изменение кода backend, подтверждение provider semantics на live MOEX, правка других specs.

Acceptance Criteria

  • Сценарий «MOEX отвечает без запрошенного блока» описывает сбой источника: необходимый источник не получен, прогноз/календарь не публикуется, предыдущий полный результат сохраняется, meta обозначает неуспех попытки.
  • Явно разделены случаи: отсутствие блока и malformed/cursor — сбой; подтверждённо пустой блок (columns + пустой data) и ответ 404 «инструмент не найден» — успешное отсутствие данных.
  • Остальные требования и сценарии не изменены; npm run validate и git diff --check проходят.
## Контекст и результат Spec `brokerage-account-upcoming-events` содержит сценарий «MOEX отвечает без запрошенного блока»: ответ трактуется как отсутствие данных по инструменту, без ошибки. Backend (`MoexClient.parseRows`) трактует отсутствие блока как `MOEX_UNAVAILABLE`, и тест `missing block` в `moex.client.spec.ts` закрепляет это. Владелец решил (WealthLedger/backend#53): оставить консервативный сбой. Причина: с hourly-refresh календарей (backend#53) «нет блока → пусто» позволило бы урезанному или битому ответу MOEX успешно затереть сохранённый полный календарь пустым. Provider semantics не подтверждена primary contract или обезличенным offline fixture; live-вызовы запрещены. Результат: spec совпадает с поведением backend, расхождения нет. ## Scope / связанные Issues - WealthLedger/backend#53 (AC 5), audit 2026-10-11: BE-003, BE-014. - Target: `openspec/specs/brokerage/brokerage-account-upcoming-events/spec.md`, requirement «Upcoming events use complete source results». - Вне scope: изменение кода backend, подтверждение provider semantics на live MOEX, правка других specs. ## Acceptance Criteria - [ ] Сценарий «MOEX отвечает без запрошенного блока» описывает сбой источника: необходимый источник не получен, прогноз/календарь не публикуется, предыдущий полный результат сохраняется, `meta` обозначает неуспех попытки. - [ ] Явно разделены случаи: отсутствие блока и malformed/cursor — сбой; подтверждённо пустой блок (`columns` + пустой `data`) и ответ 404 «инструмент не найден» — успешное отсутствие данных. - [ ] Остальные требования и сценарии не изменены; `npm run validate` и `git diff --check` проходят.
codex-bot added the audit/2026-10-11 label 2026-11-02 23:07:16 +03:00
Author
Owner

Done in PR #77 (squash, develop aa1a57a). Scenario "MOEX отвечает без запрошенного блока" rewritten as a source failure; added "MOEX подтверждает отсутствие данных". Verification: openspec validate --all --strict with pinned CLI 1.13.1 — 28 passed / 0 failed; lychee --offline 0 errors; git diff --check OK; CI green. Limit: global openspec 1.15.0 locally fails check:openspec (expects 1.13.1), unrelated to this change. No code or API change.

Done in PR #77 (squash, develop `aa1a57a`). Scenario "MOEX отвечает без запрошенного блока" rewritten as a source failure; added "MOEX подтверждает отсутствие данных". Verification: `openspec validate --all --strict` with pinned CLI 1.13.1 — 28 passed / 0 failed; `lychee --offline` 0 errors; `git diff --check` OK; CI green. Limit: global openspec 1.15.0 locally fails `check:openspec` (expects 1.13.1), unrelated to this change. No code or API change.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/specs#76