skills.verify
Every finding over the skills: a file that breaks the skill contract, an active skill no test names or nothing invokes, a test whose latest run failed, a test or an invocation naming a skill that does not exist — each a failure — and evidence that is not current, a missing page or a missing gate, each a warning.
Every finding over the skills: a file that breaks the skill contract, an active skill no test names or nothing invokes, a test whose latest run failed, a test or an invocation naming a skill that does not exist — each a failure — and evidence that is not current, a missing page or a missing gate, each a warning.
- query
- behaviorally_verified
- module skills
- #skill
- #evidence
- #validation
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_skills_verify |
| HTTP | GET /api/v1/skills/verify operationId skills.verify |
| command line | majordomus skills verify |
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 properties: the capability takes no input.
JSON Schema
{
"additionalProperties": false,
"description": "No input.",
"title": "Empty",
"type": "object"
}output · SkillVerification
use majordomus_cli::capability::builtin::skills::SkillVerification;
let v = SkillVerification { valid: true, skills: 3, failures: 0, warnings: 2, findings: vec![] };
// warnings are debts, reported; they do not make the verdict false
assert!(v.valid);| property | type | required | description |
|---|---|---|---|
| failures | integer | yes | How many findings refuse. |
| findings | array | yes | Every finding. |
| skills | integer | yes | How many skills were examined. |
| valid | boolean | yes | True when no finding is a failure. |
| warnings | integer | yes | How many findings are warnings. |
JSON Schema
{
"$defs": {
"SkillFinding": {
"description": "One thing the derivation found wrong, with the command that settles or reproduces it.\n\n```\nuse majordomus_cli::skill::{SkillFinding, SkillFindingLevel};\nlet f = SkillFinding {\n level: SkillFindingLevel::Fail,\n code: \"untested\".into(),\n skill: Some(\"implement\".into()),\n subject: \".ai/repo/skills/implement/SKILL.md\".into(),\n message: \"no test names this skill\".into(),\n reproduce: \"majordomus skills explain implement\".into(),\n};\nassert!(f.reproduce.contains(\"explain\"));\n```",
"properties": {
"code": {
"description": "A stable code: `contract`, `untested`, `unused`, `unevidenced`, `failing`,\n`undocumented`, `unenforced`, `unknown_skill_in_test`, `unknown_skill_invoked`.",
"type": "string"
},
"level": {
"$ref": "#/$defs/SkillFindingLevel",
"description": "`fail` or `warn`."
},
"message": {
"description": "What is wrong, and what to do about it.",
"type": "string"
},
"reproduce": {
"description": "The command that reproduces or settles it.",
"type": "string"
},
"skill": {
"description": "The skill concerned, when the finding is about one.",
"type": [
"string",
"null"
]
},
"subject": {
"description": "The file the finding is about, repository-relative.",
"type": "string"
}
},
"required": [
"level",
"code",
"subject",
"message",
"reproduce"
],
"type": "object"
},
"SkillFindingLevel": {
"description": "How bad a finding is: a failure refuses, a warning is reported.\n\n```\nuse majordomus_cli::skill::SkillFindingLevel;\nassert_ne!(SkillFindingLevel::Fail, SkillFindingLevel::Warn);\n```",
"oneOf": [
{
"const": "fail",
"description": "Refuses: `skills verify` exits 10 and the doctrine fails.",
"type": "string"
},
{
"const": "warn",
"description": "Reported, and does not refuse.",
"type": "string"
}
]
}
},
"description": "The verdict over every skill: valid when no finding refuses.\n\n```\nuse majordomus_cli::capability::builtin::skills::SkillVerification;\nlet v = SkillVerification { valid: true, skills: 3, failures: 0, warnings: 2, findings: vec![] };\n// warnings are debts, reported; they do not make the verdict false\nassert!(v.valid);\n```",
"properties": {
"failures": {
"description": "How many findings refuse.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"findings": {
"description": "Every finding.",
"items": {
"$ref": "#/$defs/SkillFinding"
},
"type": "array"
},
"skills": {
"description": "How many skills were examined.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"valid": {
"description": "True when no finding is a failure.",
"type": "boolean"
},
"warnings": {
"description": "How many findings are warnings.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"valid",
"skills",
"failures",
"warnings",
"findings"
],
"title": "SkillVerification",
"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.