docs(email-security): all three hunt routes return the typed not_implemented refusal - #388
docs(email-security): all three hunt routes return the typed not_implemented refusal#388maximelb wants to merge 2 commits into
Conversation
…emented refusal
The hunt section told readers not to branch on the refusal, because only
GET /hunts/{hunt_id} returned the typed not_implemented and the two POSTs
returned a plain routing error. That is fixed: all three now answer the same
typed, non-retryable refusal.
Replaces the caveat with the payload itself and says to match on
data.error_code rather than on the message text, which is the branch the
section promises a client can write.
…ng sameness Independent review findings: - The refusal arrives as HTTP 400 and the section never said so, in a file that is otherwise precise about status codes. - 'All three answer the same' was stronger than the truth: rpc differs per route and needs differs on the remediation route, which names the remediation executor too. The example is now labelled with the route that produced it and the varying fields are called out, so nobody wires a check on rpc or needs. - 'no change on either side' overclaimed: the branch condition survives, the client still has to handle the success body when the engine lands. - Dropped the 'tripled its load' multiplier, which came from a retry budget that is not the client's. - Said plainly that the milestone identifier and the section reference are internal build-order labels, not a published schedule. - Comma splice.
Independent review — addressed, plus a holdAn independent review of this diff raised one blocking item and five smaller ones. All are addressed in f5f1bb5, except the blocking one, which is a sequencing constraint rather than a text change: Blocking — held. This site publishes on every push to Addressed in the diff:
Also confirmed by the review: the JSON example is byte-exact against the captured payload; the anchor in this section resolves to a real heading; the one other page mentioning these routes already agrees with the new text and needs no edit; and the diff introduces no name or reference that does not belong on a public site — it in fact removes one, since the deleted text explained the bug in terms of the internal backend topology. |
Why
The "Registered, but not implemented yet" section of the Email Security API reference told readers, in bold, not to branch on the refusal — because only
GET /hunts/{hunt_id}returned the typednot_implemented, and the twoPOSTs returned a plain routing error instead. That caveat was accurate when it was written and is the kind of thing docs should say.The underlying defect is fixed: all three routes are now addressed to the backend that registers the typed refusal, so all three answer the same body. The caveat comes out, and is replaced by the thing it was standing in for — the payload, and the field to branch on.
What changed
One section of
docs/email-security/api-reference.md:data.error_coderather than on the message text, since the text is for a human reading a log and the code is the contract.retry: falsepoint, with the reason (an unimplemented route does not become implemented inside a retry budget), because that is now true of all three rather than one.docs/email-security/policy.mdalready described the hunt routes as answering a typednot_implementedwithout the per-route caveat, so it needed no change and is now consistent rather than optimistic.Verified
automation.md#querying-mail-with-lcqlresolves to the## Querying mail with LCQLheading;remediation.mdexists. No links were added or moved.Sequencing — DO NOT MERGE YET
This PR must not land until the gateway fix is in production, not merely merged. The site publishes on every push to
master, so merging early makes a claim public that is not yet true for a caller hitting the live API. Until then the paragraph this replaces is the accurate one.The gateway change is merged to its own master and rides the ordinary API release; this PR follows it.
(Noted here rather than left implicit because an earlier draft of this body said the opposite.)