Strictness
Andromeda accepts what NGSI-LD v1.9.1 describes and refuses the rest, with the error the specification gives for it. It won't rewrite a value into a shape it can accept, guess what you meant, fill in a default for something malformed, or drop a member it can't use. The refusal names the member and the rule it broke, so you can fix the request and send it again.
Why so strict
A context broker is shared. Once a misspelt unit code, a timestamp with a local offset or an attribute named after a reserved term is stored, every subscriber, query, federated broker and analytics job sees it, and none of them can repair it. Refusing the request costs one round trip.
The refusal also reaches the person who can fix it. A producer whose payload is refused hears about it on the first request. A producer whose payload was quietly rewritten hears about it weeks later from a consumer, or never.
Whatever Andromeda stores is valid NGSI-LD, so it can be read back, forwarded to another broker or exported without anyone having to cope with a dialect only one broker produces. And whether a request gets in comes down to a rule you can look up, not a heuristic that changes between brokers or between versions of the same broker.
The price is paid by clients that lean on another broker's leniency. They are refused until they are fixed. Common refusals lists the faults that catch them most often.
What a refusal looks like
A refusal is a problem document with a type, title, status and detail. Two types cover almost every rule in this section.
InvalidRequest(400) means the request can't be parsed, for example malformed JSON or an unknown query parameter.BadRequestData(400) means the request parses but holds a value the specification doesn't allow. A rule uses this type unless its page says otherwise.
The detail names the member and the rule. In a batch, a fault in one entity is reported against that entity in a 207, and the other entities still go through. 411, 415 and 431 come straight from HTTP and carry no body. Errors has the full shape, every error type and the 207 reports.
How Andromeda decides
Nothing is fixed on the way in. Andromeda doesn't respell, default or drop anything. The only rewrites are canonical forms the specification defines itself, such as a name expanded under the request's @context.
Where the specification says an implementation should raise an error, Andromeda raises it, reading "should" as "shall". The name grammar is the usual example.
Where a standard requires or allows a broker to accept something, Andromeda accepts it. Those cases are collected under Deliberate tolerances.
Some limits come from Andromeda rather than the specification. They are listed under Andromeda's own bounds, each with its reason.