objects.verify
Read every file the layer was built from and compare it with what this process is serving. The index is built once at start-up and kept, which is what makes every other request cost nothing and what makes a file edited afterwards be served as it was; this is how a running server says whether that has happened, without being restarted to find out. A file that is one object is compared byte for byte; a collection file, whose objects the index keeps as members rather than as text, is compared by size, and every finding says which comparison was made. It reads every file of the layer, so it reports its progress file by file and stops when it is asked to.
Read every file the layer was built from and compare it with what this process is serving. The index is built once at start-up and kept, which is what makes every other request cost nothing and what makes a file edited afterwards be served as it was; this is how a running server says whether that has happened, without being restarted to find out. A file that is one object is compared byte for byte; a collection file, whose objects the index keeps as members rather than as text, is compared by size, and every finding says which comparison was made. It reads every file of the layer, so it reports its progress file by file and stops when it is asked to.
- query
- behaviorally_verified
- module objects
- #objects
- #diagnostic
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_verify_objects |
| HTTP | GET /api/v1/objects/verify operationId objects.verify |
| command line | — |
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 · VerifyInput
The input of `objects.verify`.
| property | type | required | description |
|---|---|---|---|
| kind | string | null | no | Only objects of this kind. |
| limit | integer | null | no | How many objects to read at most; every one of them when absent. |
JSON Schema
{
"additionalProperties": false,
"description": "The input of `objects.verify`.",
"properties": {
"kind": {
"description": "Only objects of this kind.",
"type": [
"string",
"null"
]
},
"limit": {
"description": "How many objects to read at most; every one of them when absent.",
"format": "uint",
"minimum": 0,
"type": [
"integer",
"null"
]
}
},
"title": "VerifyInput",
"type": "object"
}output · VerifyReport
The answer of `objects.verify`.
| property | type | required | description |
|---|---|---|---|
| compared_by_content | integer | yes | How many were compared byte for byte rather than by size. |
| current | integer | yes | How many of them are what the index read. |
| drifted | integer | yes | How many are not, of any kind of not. |
| files | integer | yes | How many files were read. |
| findings | array | yes | The files that are not, with what is wrong with each. |
| fingerprint | string | yes | The index fingerprint this process is serving. |
| index_is_current | boolean | yes | Whether the index is still a true picture of the working tree, as far as this comparison can tell. |
| objects | integer | yes | How many objects of the index those files carry. |
JSON Schema
{
"$defs": {
"Comparison": {
"description": "How closely a file could be compared with what the index holds.\n\nA file that is one object is compared byte for byte, because the index kept its whole\ncontent. A collection file holds one object per member, and what the index kept for each\nis that member as JSON rather than the file's text — so the strongest thing that can be\nsaid without re-parsing it is whether its size is what it was. The report says which\ncomparison was made rather than implying the stronger one.",
"oneOf": [
{
"const": "content",
"description": "Byte for byte against the content the index holds.",
"type": "string"
},
{
"const": "size",
"description": "By size against the size the index recorded.",
"type": "string"
}
]
},
"DriftedObject": {
"description": "One file of the layer that is no longer what the index read.",
"properties": {
"comparison": {
"$ref": "#/$defs/Comparison",
"description": "How it was compared."
},
"detail": {
"description": "What is wrong, for a person.",
"type": "string"
},
"example_uri": {
"description": "One of the URIs it holds, so a reader can see what is affected.",
"type": "string"
},
"objects": {
"description": "How many objects of the index came from it.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"path": {
"description": "Its repository-relative path.",
"type": "string"
},
"standing": {
"$ref": "#/$defs/ObjectStanding",
"description": "How it stands."
}
},
"required": [
"path",
"standing",
"comparison",
"objects",
"example_uri",
"detail"
],
"type": "object"
},
"ObjectStanding": {
"description": "How one file stands against what the index read from it.",
"oneOf": [
{
"const": "current",
"description": "It is what the index read.",
"type": "string"
},
{
"const": "changed",
"description": "It is there and it has changed since the index was built.",
"type": "string"
},
{
"const": "missing",
"description": "The file the index read is no longer there.",
"type": "string"
},
{
"const": "unreadable",
"description": "It is there and could not be read.",
"type": "string"
}
]
}
},
"description": "The answer of `objects.verify`.",
"properties": {
"compared_by_content": {
"description": "How many were compared byte for byte rather than by size.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"current": {
"description": "How many of them are what the index read.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"drifted": {
"description": "How many are not, of any kind of not.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"files": {
"description": "How many files were read.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"findings": {
"description": "The files that are not, with what is wrong with each.",
"items": {
"$ref": "#/$defs/DriftedObject"
},
"type": "array"
},
"fingerprint": {
"description": "The index fingerprint this process is serving.",
"type": "string"
},
"index_is_current": {
"description": "Whether the index is still a true picture of the working tree, as far as this\ncomparison can tell.",
"type": "boolean"
},
"objects": {
"description": "How many objects of the index those files carry.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"files",
"current",
"drifted",
"objects",
"compared_by_content",
"fingerprint",
"index_is_current",
"findings"
],
"title": "VerifyReport",
"type": "object"
}Policies
- benchmark
- required — a target on every transport the exposure declares; the cases are the input type's
- cache
- disabled — every call runs the handler
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.
Claims implemented beside it
Attached by the file that implements each claim; every one links to its page with the implementation and the test that proves it.