why.validate
Every finding over the catalogue: a reference that resolves to nothing, with the nearest candidate; a duplicate identity; a file name that disagrees with its id; and a public record that does not meet the floor its status promises. Errors make the catalogue invalid; warnings do not.
Every finding over the catalogue: a reference that resolves to nothing, with the nearest candidate; a duplicate identity; a file name that disagrees with its id; and a public record that does not meet the floor its status promises. Errors make the catalogue invalid; warnings do not.
- query
- behaviorally_verified
- module why
- #why
- #introspection
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_why_validate |
| HTTP | GET /api/v1/why/validate operationId why.validate |
| command line | majordomus why validate |
Schemas
The canonical input and output, from the Rust types; the MCP tool schema and the OpenAPI parameters and responses are derived from these.
input · Empty
No input.
No properties: the capability takes no input.
JSON Schema
{
"additionalProperties": false,
"description": "No input.",
"title": "Empty",
"type": "object"
}output · ValidationReport
What the catalogue's own validation found.
| property | type | required | description |
|---|---|---|---|
| counts | reference | yes | The counts the catalogue reached. |
| errors | integer | yes | How many findings are errors: a reference that resolves to nothing, a duplicate identity, a file name that disagrees with its id. |
| findings | array | yes | The findings, errors first, then by file. |
| valid | boolean | yes | True when nothing is an error. Warnings do not make it false. |
| warnings | integer | yes | How many findings are warnings: a public record that does not meet its floor. |
JSON Schema
{
"$defs": {
"Counts": {
"description": "How much the catalogue holds. Every count anywhere — a page, a heading, a report — is\none of these, so no number is ever written down.",
"properties": {
"areas": {
"description": "Public areas.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"audiences": {
"description": "Public audiences.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"examples": {
"description": "Concrete situations across the public moments.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"moments": {
"description": "Public moments.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"moments_all": {
"description": "Moments of every status, drafts included.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"signals": {
"description": "Signals across the public moments: the size of the questionnaire.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"moments",
"moments_all",
"audiences",
"areas",
"signals",
"examples"
],
"type": "object"
},
"Finding": {
"description": "One thing wrong with the catalogue, named where it is, with the nearest candidate when\nthere is one. A finding always carries enough to fix it without searching.",
"properties": {
"code": {
"description": "A short category: `unknown_reference`, `duplicate_identity`, `missing_content`, ...",
"type": "string"
},
"did_you_mean": {
"description": "The nearest existing name, when the value looks like a typo of one.",
"type": [
"string",
"null"
]
},
"field": {
"description": "The front-matter key the finding is about, when one key owns it.",
"type": [
"string",
"null"
]
},
"id": {
"description": "The record's identity, when one record owns the finding.",
"type": [
"string",
"null"
]
},
"message": {
"description": "What is wrong, in one sentence.",
"type": "string"
},
"path": {
"description": "The repository-relative file the finding is in.",
"type": "string"
},
"severity": {
"$ref": "#/$defs/Severity",
"description": "`error` or `warning`."
}
},
"required": [
"severity",
"code",
"path",
"message"
],
"type": "object"
},
"Severity": {
"description": "How bad a diagnostic is. `Error` excludes the file it concerns from the index and puts\nthe index into the degraded state; `Warning` and `Info` do neither.",
"oneOf": [
{
"const": "info",
"description": "Worth knowing; changes nothing.",
"type": "string"
},
{
"const": "warning",
"description": "Something to look at; the object is still served.",
"type": "string"
},
{
"const": "error",
"description": "The file is excluded and the index is degraded.",
"type": "string"
}
]
}
},
"description": "What the catalogue's own validation found.",
"properties": {
"counts": {
"$ref": "#/$defs/Counts",
"description": "The counts the catalogue reached."
},
"errors": {
"description": "How many findings are errors: a reference that resolves to nothing, a duplicate\nidentity, a file name that disagrees with its id.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"findings": {
"description": "The findings, errors first, then by file.",
"items": {
"$ref": "#/$defs/Finding"
},
"type": "array"
},
"valid": {
"description": "True when nothing is an error. Warnings do not make it false.",
"type": "boolean"
},
"warnings": {
"description": "How many findings are warnings: a public record that does not meet its floor.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"valid",
"errors",
"warnings",
"counts",
"findings"
],
"title": "ValidationReport",
"type": "object"
}Policies
- benchmark
- required — a target on every transport the exposure declares; the cases are the input type's
- cache
- process — up to 2 entries in the process, scoped by the registry fingerprint
Benchmark targets
Derived from the registry for this repository: one requirement per transport, and the cases the input type provides. The whole matrix is on the benchmarks page.