product.feature
One product feature in full: the record as its file declares it, and everything derived from what it names — the capabilities of its modules with their tools, routes and command-line paths, the commands with their summaries, the objects of its kinds counted, the rules with their class and whether the tool enforces them, the documents, the decisions, the claims with their status, the use cases, the Cockpit areas and web surfaces with their routes, the moments it answers, and the interfaces all of that adds up to.
One product feature in full: the record as its file declares it, and everything derived from what it names — the capabilities of its modules with their tools, routes and command-line paths, the commands with their summaries, the objects of its kinds counted, the rules with their class and whether the tool enforces them, the documents, the decisions, the claims with their status, the use cases, the Cockpit areas and web surfaces with their routes, the moments it answers, and the interfaces all of that adds up to.
- query
- behaviorally_verified
- module product
- #product
- #features
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_feature |
| HTTP | GET /api/v1/product/feature operationId product.feature |
| command line | majordomus product show |
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 · FeatureInput
Which feature to read.
| property | type | required | description |
|---|---|---|---|
| id | string | yes | The feature's id, as `product.features` gives it. This is also its slug and its route. |
JSON Schema
{
"additionalProperties": false,
"description": "Which feature to read.",
"properties": {
"id": {
"description": "The feature's id, as `product.features` gives it. This is also its slug and its route.",
"type": "string"
}
},
"required": [
"id"
],
"title": "FeatureInput",
"type": "object"
}output · ResolvedRefs
One feature, resolved: the record as its file declares it, and everything derived.
| property | type | required | description |
|---|---|---|---|
| adr_refs | array | yes | Derived: the decisions it names, with their status. |
| adrs | array | no | The decisions behind it, by declared id. default [] |
| areas | array | no | The operational areas of the why catalogue it serves. default [] |
| audiences | array | no | The audiences of the why catalogue it is written for. default [] |
| backlinks | array | yes | Derived: the features that name this one in their `related`. |
| body | string | no | The Markdown body, without its front matter. |
| claim_refs | array | yes | Derived: the claims it names, with their status. |
| claims | array | no | Claims that say what is guaranteed here. default [] |
| cockpit | array | no | Areas of the Cockpit that show it. default [] |
| cockpit_refs | array | yes | Derived: the Cockpit areas it names, with their routes. |
| command_refs | array | yes | Derived: the shell commands it names, as the command registry declares them. |
| commands | array | no | Public commands of the shell tool it is made of. default [] |
| counts | reference | yes | Derived: how much stands behind it. |
| doc_refs | array | yes | Derived: the documents it names, with their titles. |
| docs | array | no | The documents that explain it, by repository-relative path. default [] |
| evidence | reference | yes | Derived: what is guaranteed. |
| featured | boolean | no | Whether the homepage shows it as a chapter. default false |
| headline | string | yes | The promise a visitor reads first. |
| id | string | yes | The identity, the slug and the file name. |
| kind_refs | array | yes | Derived: the kinds it names, each with its object count. |
| kinds | array | no | Object kinds of the layer it is made of. default [] |
| module_refs | array | yes | Derived: the modules it names, each with its capabilities and their projections. |
| modules | array | no | Capability modules of the executable it is made of. default [] |
| moments | array | yes | Derived: the moments that name any command, capability, claim or rule of this feature. |
| related | array | no | Features explicitly related to this one. The reverse is derived. default [] |
| route | string | no | Derived: `/features/<id>/`. Never authored; the schema refuses a `route` key. default "" |
| rule_refs | array | yes | Derived: the rules it names, each with its class and whether it is enforced. |
| rules | array | no | Rules of the effective set that govern it, by id without the version. default [] |
| short_title | string | null | no | Two or three words for a card or a matrix row. |
| source | string | no | Derived: the repository-relative file the record came from. default "" |
| status | string | yes | `stable`, `draft` or `deprecated`. |
| summary | string | yes | One line: what it does. |
| surfaces | reference | yes | Derived: the interfaces it is exposed through. |
| tags | array | no | Free tags. default [] |
| title | string | yes | The feature as a heading. |
| use_case_refs | array | yes | Derived: the use cases it names. |
| use_cases | array | no | Use cases that show it in use. default [] |
| web | array | no | Web surfaces of the topology it is offered through. default [] |
| web_refs | array | yes | Derived: the web surfaces it names, with their mounts. |
| weight | integer | no | Presentation order, lowest first. default 0 |
JSON Schema
{
"$defs": {
"AdrRef": {
"description": "One architecture decision the feature names.",
"properties": {
"id": {
"description": "The declared id.",
"type": "string"
},
"path": {
"description": "Repository-relative path.",
"type": "string"
},
"status": {
"description": "`proposed`, `accepted`, `superseded` or `rejected`.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
}
},
"required": [
"id",
"title",
"status",
"path"
],
"type": "object"
},
"CapabilityRef": {
"description": "One capability of a module the feature names, with the projections the registry\ndeclares for it.",
"properties": {
"cli": {
"description": "The words after `majordomus`, when exposed on the command line.",
"type": [
"string",
"null"
]
},
"id": {
"description": "The canonical id.",
"type": "string"
},
"kind": {
"description": "`query`, `command` or `resource`.",
"type": "string"
},
"resource": {
"description": "The MCP resource URI, when exposed as one.",
"type": [
"string",
"null"
]
},
"route": {
"description": "`METHOD /path`, when exposed over HTTP.",
"type": [
"string",
"null"
]
},
"stability": {
"description": "Where it stands.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
},
"tool": {
"description": "The MCP tool name, when exposed as one.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"title",
"kind",
"stability"
],
"type": "object"
},
"ClaimRef": {
"description": "One claim the feature names, with the status the matrix gives it.",
"properties": {
"claim": {
"description": "The sentence.",
"type": "string"
},
"id": {
"description": "The claim id.",
"type": "string"
},
"status": {
"description": "`guaranteed`, `advisory`, `planned` or `rejected`.",
"type": "string"
}
},
"required": [
"id",
"claim",
"status"
],
"type": "object"
},
"CockpitAreaRef": {
"description": "One area of the Cockpit the feature names.",
"properties": {
"id": {
"description": "The area id.",
"type": "string"
},
"route": {
"description": "The route under the running server.",
"type": "string"
},
"title": {
"description": "The label the Cockpit shows.",
"type": "string"
}
},
"required": [
"id",
"title",
"route"
],
"type": "object"
},
"CommandRef": {
"description": "One public command of the shell tool the feature names, as `share/commands.yaml`\ndeclares it.",
"properties": {
"id": {
"description": "The command.",
"type": "string"
},
"read_only": {
"description": "Whether it writes nothing.",
"type": "boolean"
},
"stage": {
"description": "The lifecycle stage it belongs to.",
"type": [
"string",
"null"
]
},
"summary": {
"description": "One line.",
"type": "string"
}
},
"required": [
"id",
"summary",
"read_only"
],
"type": "object"
},
"DocRef": {
"description": "One document the feature names.",
"properties": {
"path": {
"description": "Repository-relative path.",
"type": "string"
},
"title": {
"description": "The title, when the document has one.",
"type": [
"string",
"null"
]
}
},
"required": [
"path"
],
"type": "object"
},
"FeatureCounts": {
"description": "How much stands behind a feature, every number derived.",
"properties": {
"adrs": {
"description": "Decisions it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"capabilities": {
"description": "Builtin capabilities of the modules it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"claims": {
"description": "Claims it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"cli_paths": {
"description": "Command-line paths of the executable among them.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"commands": {
"description": "Public commands of the shell tool it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"docs": {
"description": "Documents it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"enforced_rules": {
"description": "Rules the tool enforces among them.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"http_routes": {
"description": "HTTP routes among them.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"mcp_resources": {
"description": "MCP resources among them, plus one per object of the kinds it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"mcp_tools": {
"description": "MCP tools among them.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"moments": {
"description": "Moments it answers.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"objects": {
"description": "Objects of the kinds it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"rules": {
"description": "Rules it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"use_cases": {
"description": "Use cases it names.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"capabilities",
"mcp_tools",
"mcp_resources",
"http_routes",
"cli_paths",
"commands",
"objects",
"rules",
"enforced_rules",
"docs",
"adrs",
"claims",
"use_cases",
"moments"
],
"type": "object"
},
"FeatureEvidence": {
"description": "What is guaranteed about a feature, counted from the claims it names: never a word a\nperson wrote about the feature's maturity.",
"properties": {
"claims": {
"additionalProperties": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"description": "Claims by status: `guaranteed`, `advisory`, `planned`, `rejected`.",
"type": "object"
},
"modules": {
"additionalProperties": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"description": "The modules it names by stability.",
"type": "object"
}
},
"required": [
"claims",
"modules"
],
"type": "object"
},
"KindRef": {
"description": "One object kind the feature names, with how many objects of it the layer holds.",
"properties": {
"name": {
"description": "The kind.",
"type": "string"
},
"objects": {
"description": "Objects of this kind in the index.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"name",
"objects"
],
"type": "object"
},
"ModuleRef": {
"description": "One capability module the feature names.",
"properties": {
"capabilities": {
"description": "The builtin capabilities it composes, in id order.",
"items": {
"$ref": "#/$defs/CapabilityRef"
},
"type": "array"
},
"description": {
"description": "One paragraph.",
"type": "string"
},
"id": {
"description": "The module id.",
"type": "string"
},
"source_path": {
"description": "Repository-relative path of the file its descriptors were composed in.",
"type": "string"
},
"stability": {
"description": "Where the module stands, when it declared it.",
"type": [
"string",
"null"
]
},
"title": {
"description": "The short name.",
"type": "string"
}
},
"required": [
"id",
"title",
"description",
"source_path",
"capabilities"
],
"type": "object"
},
"MomentRef": {
"description": "One operational moment the feature answers: derived from the moments that name any of\nthe feature's commands, capabilities, claims or rules.",
"properties": {
"hook": {
"description": "The first-person line an index shows.",
"type": "string"
},
"id": {
"description": "The moment id.",
"type": "string"
},
"route": {
"description": "`/why/<id>/`.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
}
},
"required": [
"id",
"title",
"hook",
"route"
],
"type": "object"
},
"RuleRef": {
"description": "One rule the feature names.",
"properties": {
"class": {
"description": "`blocking` or `advisory`.",
"type": "string"
},
"enforced": {
"description": "Whether the tool enforces it: the rule carries an `x-majordomus` block.",
"type": "boolean"
},
"id": {
"description": "The rule id, without the version.",
"type": "string"
},
"identity": {
"description": "The identity the index holds, with the version.",
"type": "string"
},
"path": {
"description": "Repository-relative path.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
}
},
"required": [
"id",
"identity",
"title",
"class",
"enforced",
"path"
],
"type": "object"
},
"SurfaceRef": {
"description": "One web surface of the topology the feature names.",
"properties": {
"category": {
"description": "What it is for.",
"type": "string"
},
"id": {
"description": "The surface id.",
"type": "string"
},
"mount": {
"description": "Where it is mounted.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
}
},
"required": [
"id",
"title",
"mount",
"category"
],
"type": "object"
},
"Surfaces": {
"description": "The interfaces a feature is exposed through, decided from what its references project\nand from nothing a file says. Each is a fact with a reason a reader can check: `cli` is\ntrue when a module of the feature has a capability with a command-line path or the\nfeature names a shell command; `api` when a module has an HTTP route; `mcp` when a module\nhas an MCP tool or resource, or the feature names a kind, since every object of the layer\nis an MCP resource; `cockpit` when the feature names a Cockpit area or a module, since\nevery capability has a Cockpit page; `docs` when it names a document.",
"properties": {
"api": {
"description": "The HTTP routes under `/api/v1/`, and the OpenAPI document over them.",
"type": "boolean"
},
"cli": {
"description": "The command line: the executable's own, or the shell tool's.",
"type": "boolean"
},
"cockpit": {
"description": "The Cockpit.",
"type": "boolean"
},
"docs": {
"description": "The documentation.",
"type": "boolean"
},
"mcp": {
"description": "MCP: a tool, or a resource.",
"type": "boolean"
}
},
"required": [
"cli",
"api",
"mcp",
"cockpit",
"docs"
],
"type": "object"
},
"UseCaseRef": {
"description": "One use case the feature names.",
"properties": {
"category": {
"description": "The category it is filed under.",
"type": [
"string",
"null"
]
},
"id": {
"description": "The use case id.",
"type": "string"
},
"title": {
"description": "The title.",
"type": "string"
}
},
"required": [
"id",
"title"
],
"type": "object"
}
},
"description": "One feature, resolved: the record as its file declares it, and everything derived.",
"properties": {
"adr_refs": {
"description": "Derived: the decisions it names, with their status.",
"items": {
"$ref": "#/$defs/AdrRef"
},
"type": "array"
},
"adrs": {
"default": [],
"description": "The decisions behind it, by declared id.",
"items": {
"type": "string"
},
"type": "array"
},
"areas": {
"default": [],
"description": "The operational areas of the why catalogue it serves.",
"items": {
"type": "string"
},
"type": "array"
},
"audiences": {
"default": [],
"description": "The audiences of the why catalogue it is written for.",
"items": {
"type": "string"
},
"type": "array"
},
"backlinks": {
"description": "Derived: the features that name this one in their `related`.",
"items": {
"type": "string"
},
"type": "array"
},
"body": {
"description": "The Markdown body, without its front matter.",
"type": "string"
},
"claim_refs": {
"description": "Derived: the claims it names, with their status.",
"items": {
"$ref": "#/$defs/ClaimRef"
},
"type": "array"
},
"claims": {
"default": [],
"description": "Claims that say what is guaranteed here.",
"items": {
"type": "string"
},
"type": "array"
},
"cockpit": {
"default": [],
"description": "Areas of the Cockpit that show it.",
"items": {
"type": "string"
},
"type": "array"
},
"cockpit_refs": {
"description": "Derived: the Cockpit areas it names, with their routes.",
"items": {
"$ref": "#/$defs/CockpitAreaRef"
},
"type": "array"
},
"command_refs": {
"description": "Derived: the shell commands it names, as the command registry declares them.",
"items": {
"$ref": "#/$defs/CommandRef"
},
"type": "array"
},
"commands": {
"default": [],
"description": "Public commands of the shell tool it is made of.",
"items": {
"type": "string"
},
"type": "array"
},
"counts": {
"$ref": "#/$defs/FeatureCounts",
"description": "Derived: how much stands behind it."
},
"doc_refs": {
"description": "Derived: the documents it names, with their titles.",
"items": {
"$ref": "#/$defs/DocRef"
},
"type": "array"
},
"docs": {
"default": [],
"description": "The documents that explain it, by repository-relative path.",
"items": {
"type": "string"
},
"type": "array"
},
"evidence": {
"$ref": "#/$defs/FeatureEvidence",
"description": "Derived: what is guaranteed."
},
"featured": {
"default": false,
"description": "Whether the homepage shows it as a chapter.",
"type": "boolean"
},
"headline": {
"description": "The promise a visitor reads first.",
"type": "string"
},
"id": {
"description": "The identity, the slug and the file name.",
"type": "string"
},
"kind_refs": {
"description": "Derived: the kinds it names, each with its object count.",
"items": {
"$ref": "#/$defs/KindRef"
},
"type": "array"
},
"kinds": {
"default": [],
"description": "Object kinds of the layer it is made of.",
"items": {
"type": "string"
},
"type": "array"
},
"module_refs": {
"description": "Derived: the modules it names, each with its capabilities and their projections.",
"items": {
"$ref": "#/$defs/ModuleRef"
},
"type": "array"
},
"modules": {
"default": [],
"description": "Capability modules of the executable it is made of.",
"items": {
"type": "string"
},
"type": "array"
},
"moments": {
"description": "Derived: the moments that name any command, capability, claim or rule of this feature.",
"items": {
"$ref": "#/$defs/MomentRef"
},
"type": "array"
},
"related": {
"default": [],
"description": "Features explicitly related to this one. The reverse is derived.",
"items": {
"type": "string"
},
"type": "array"
},
"route": {
"default": "",
"description": "Derived: `/features/<id>/`. Never authored; the schema refuses a `route` key.",
"type": "string"
},
"rule_refs": {
"description": "Derived: the rules it names, each with its class and whether it is enforced.",
"items": {
"$ref": "#/$defs/RuleRef"
},
"type": "array"
},
"rules": {
"default": [],
"description": "Rules of the effective set that govern it, by id without the version.",
"items": {
"type": "string"
},
"type": "array"
},
"short_title": {
"description": "Two or three words for a card or a matrix row.",
"type": [
"string",
"null"
]
},
"source": {
"default": "",
"description": "Derived: the repository-relative file the record came from.",
"type": "string"
},
"status": {
"description": "`stable`, `draft` or `deprecated`.",
"type": "string"
},
"summary": {
"description": "One line: what it does.",
"type": "string"
},
"surfaces": {
"$ref": "#/$defs/Surfaces",
"description": "Derived: the interfaces it is exposed through."
},
"tags": {
"default": [],
"description": "Free tags.",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "The feature as a heading.",
"type": "string"
},
"use_case_refs": {
"description": "Derived: the use cases it names.",
"items": {
"$ref": "#/$defs/UseCaseRef"
},
"type": "array"
},
"use_cases": {
"default": [],
"description": "Use cases that show it in use.",
"items": {
"type": "string"
},
"type": "array"
},
"web": {
"default": [],
"description": "Web surfaces of the topology it is offered through.",
"items": {
"type": "string"
},
"type": "array"
},
"web_refs": {
"description": "Derived: the web surfaces it names, with their mounts.",
"items": {
"$ref": "#/$defs/SurfaceRef"
},
"type": "array"
},
"weight": {
"default": 0,
"description": "Presentation order, lowest first.",
"format": "uint32",
"minimum": 0,
"type": "integer"
}
},
"required": [
"id",
"title",
"headline",
"summary",
"status",
"surfaces",
"module_refs",
"command_refs",
"kind_refs",
"rule_refs",
"doc_refs",
"adr_refs",
"claim_refs",
"use_case_refs",
"cockpit_refs",
"web_refs",
"moments",
"backlinks",
"counts",
"evidence"
],
"title": "ResolvedRefs",
"type": "object"
}Policies
- benchmark
- required — a target on every transport the exposure declares; the cases are the input type's
- cache
- process — up to 64 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.
| transport | state | cases | targets |
|---|---|---|---|
| direct | covered | 1 | first-feature cold+warm |
| mcp | covered | 1 | first-feature cold+warm |
| http | covered | 1 | first-feature cold+warm |