The routing fact“Add `additionalProperties: false` everywhere” is wrong on rc.8. It closes public records and is rejected at the implicit parameter root.

Choose object openness deliberately.

Implicit root

Ordinary `parameters` is an open property map.

Explicit DSL

Every object states `true` or `false`.

Raw schema

Omission retains the standard open default.

Runtime

Unknown keys follow the policy at that exact level.

Use exact-one `oneOf`, not a type array.

OptionalOmit the property

Use one scalar type when absence means no value.

Explicit nullstring or null branches

Use mutually exclusive schemas inside `oneOf`.

Overlapnumber + integer fails

An integer matches both branches, violating exact-one semantics.

Unsupported means unenforced.

Keywords such as `pattern`, `format`, bounds, `anyOf`, and `allOf` are rejected. Keep the visible subset honest and validate remaining domain rules before side effects.

Primary evidence.

Make the schema executable truth.

The complete guide includes path-based error routing, representation-specific examples, exact-one overlap traps, a complete tool, unsupported-keyword handling, and twelve verification gates.

Read the complete guide