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, расхождения нет.
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` проходят.
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.
Контекст и результат
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
openspec/specs/brokerage/brokerage-account-upcoming-events/spec.md, requirement «Upcoming events use complete source results».Acceptance Criteria
metaобозначает неуспех попытки.columns+ пустойdata) и ответ 404 «инструмент не найден» — успешное отсутствие данных.npm run validateиgit diff --checkпроходят.Done in PR #77 (squash, develop
aa1a57a). Scenario "MOEX отвечает без запрошенного блока" rewritten as a source failure; added "MOEX подтверждает отсутствие данных". Verification:openspec validate --all --strictwith pinned CLI 1.13.1 — 28 passed / 0 failed;lychee --offline0 errors;git diff --checkOK; CI green. Limit: global openspec 1.15.0 locally failscheck:openspec(expects 1.13.1), unrelated to this change. No code or API change.