docs(openspec): recognition-contract — источник attempt только из тела, расхождение сервисов в THEN (OQ-71)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
050f59a384
commit
bf893959df
@ -22,10 +22,11 @@
|
||||
|
||||
#### Scenario: Сообщение не по схеме
|
||||
- **WHEN** сервис получает запрос, не проходящий схему (нет `s3.key`, неизвестный `file_type`), но из тела извлекаются
|
||||
корректные `job_id` и `file_id`; `attempt` для `Nats-Msg-Id` берётся из тела или из заголовка `Nats-Msg-Id` запроса,
|
||||
а если его нет ни там, ни там — `scan-gateway` подставляет 1, `tabular-parser` не отвечает
|
||||
корректные `job_id` и `file_id`
|
||||
- **THEN** сервис публикует результат со `status = error`, `error.code = SCHEMA_MISMATCH` **без предшествующего ack
|
||||
`processing`** и не падает
|
||||
`processing`** и не падает; `attempt` для `Nats-Msg-Id` результата берётся из тела запроса, при его отсутствии
|
||||
реализации расходятся (`tabular-parser` берёт `attempt` из заголовка `Nats-Msg-Id` запроса или не отвечает,
|
||||
`scan-gateway` подставляет 1) — см. OQ-71
|
||||
|
||||
#### Scenario: Нечитаемый запрос
|
||||
- **WHEN** сервис получает сообщение, из которого нельзя извлечь `job_id` (не JSON, не объект, `job_id` отсутствует или
|
||||
@ -106,8 +107,9 @@ v1.0: обязательные поля `schema_version` (`"1.0"`), `job_id`, `f
|
||||
- **THEN** публикуется результат `status = error`, `error.code = SCHEMA_MISMATCH` **без ack `processing`**: ответом на
|
||||
запрос служит сам финальный конверт, ядро закрывает им задание (`published → error`), и повторной доставки запроса не
|
||||
будет. Конверт публикуется только если из тела извлекаются корректные `job_id` и `file_id`; иначе — как для нечитаемого
|
||||
запроса (ответа нет, ядро закроет задание по `NO_ACK` / `dlq`). `attempt` для `Nats-Msg-Id` берётся из тела или из
|
||||
заголовка `Nats-Msg-Id` запроса; если его нет — `scan-gateway` подставляет 1, `tabular-parser` не отвечает
|
||||
запроса (ответа нет, ядро закроет задание по `NO_ACK` / `dlq`). `attempt` для `Nats-Msg-Id` берётся из тела запроса; при его
|
||||
отсутствии реализации расходятся (`tabular-parser` берёт `attempt` из заголовка `Nats-Msg-Id` запроса или не отвечает,
|
||||
`scan-gateway` подставляет 1) — см. OQ-71
|
||||
|
||||
### Requirement: Идемпотентность результатов без брокера
|
||||
Публикующий SHALL ставить заголовок `Nats-Msg-Id` на каждое сообщение (запрос `<job_id>:<attempt>`, ack
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user