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: Сообщение не по схеме
|
#### Scenario: Сообщение не по схеме
|
||||||
- **WHEN** сервис получает запрос, не проходящий схему (нет `s3.key`, неизвестный `file_type`), но из тела извлекаются
|
- **WHEN** сервис получает запрос, не проходящий схему (нет `s3.key`, неизвестный `file_type`), но из тела извлекаются
|
||||||
корректные `job_id` и `file_id`; `attempt` для `Nats-Msg-Id` берётся из тела или из заголовка `Nats-Msg-Id` запроса,
|
корректные `job_id` и `file_id`
|
||||||
а если его нет ни там, ни там — `scan-gateway` подставляет 1, `tabular-parser` не отвечает
|
|
||||||
- **THEN** сервис публикует результат со `status = error`, `error.code = SCHEMA_MISMATCH` **без предшествующего ack
|
- **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: Нечитаемый запрос
|
#### Scenario: Нечитаемый запрос
|
||||||
- **WHEN** сервис получает сообщение, из которого нельзя извлечь `job_id` (не JSON, не объект, `job_id` отсутствует или
|
- **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`**: ответом на
|
- **THEN** публикуется результат `status = error`, `error.code = SCHEMA_MISMATCH` **без ack `processing`**: ответом на
|
||||||
запрос служит сам финальный конверт, ядро закрывает им задание (`published → error`), и повторной доставки запроса не
|
запрос служит сам финальный конверт, ядро закрывает им задание (`published → error`), и повторной доставки запроса не
|
||||||
будет. Конверт публикуется только если из тела извлекаются корректные `job_id` и `file_id`; иначе — как для нечитаемого
|
будет. Конверт публикуется только если из тела извлекаются корректные `job_id` и `file_id`; иначе — как для нечитаемого
|
||||||
запроса (ответа нет, ядро закроет задание по `NO_ACK` / `dlq`). `attempt` для `Nats-Msg-Id` берётся из тела или из
|
запроса (ответа нет, ядро закроет задание по `NO_ACK` / `dlq`). `attempt` для `Nats-Msg-Id` берётся из тела запроса; при его
|
||||||
заголовка `Nats-Msg-Id` запроса; если его нет — `scan-gateway` подставляет 1, `tabular-parser` не отвечает
|
отсутствии реализации расходятся (`tabular-parser` берёт `attempt` из заголовка `Nats-Msg-Id` запроса или не отвечает,
|
||||||
|
`scan-gateway` подставляет 1) — см. OQ-71
|
||||||
|
|
||||||
### Requirement: Идемпотентность результатов без брокера
|
### Requirement: Идемпотентность результатов без брокера
|
||||||
Публикующий SHALL ставить заголовок `Nats-Msg-Id` на каждое сообщение (запрос `<job_id>:<attempt>`, ack
|
Публикующий SHALL ставить заголовок `Nats-Msg-Id` на каждое сообщение (запрос `<job_id>:<attempt>`, ack
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user