product.feature
Jedna funkce produktu celá: záznam tak, jak ho deklaruje jeho soubor, a vše odvozené z toho, co jmenuje — schopnosti jejích modulů s jejich nástroji, trasami a cestami příkazové řádky, příkazy s jejich shrnutími, spočítané objekty jejích druhů, pravidla s jejich třídou a tím, zda je nástroj vynucuje, dokumenty, rozhodnutí, tvrzení s jejich stavem, případy užití, oblasti Cockpit a webové povrchy s jejich trasami, momenty, na které odpovídá, a rozhraní, která to vše dohromady tvoří.
Jedna funkce produktu celá: záznam tak, jak ho deklaruje jeho soubor, a vše odvozené z toho, co jmenuje — schopnosti jejích modulů s jejich nástroji, trasami a cestami příkazové řádky, příkazy s jejich shrnutími, spočítané objekty jejích druhů, pravidla s jejich třídou a tím, zda je nástroj vynucuje, dokumenty, rozhodnutí, tvrzení s jejich stavem, případy užití, oblasti Cockpit a webové povrchy s jejich trasami, momenty, na které odpovídá, a rozhraní, která to vše dohromady tvoří.
- query
- behaviorally_verified
- module product
- #product
- #features
Zpřístupnění
Kde je tato jedna definice dosažitelná. Absence je explicitní: povrch, který není uveden, ji nenese.
| povrch | jako |
|---|---|
| MCP | nástroj majordomus_feature |
| HTTP | GET /api/v1/product/feature operationId product.feature |
| příkazová řádka | majordomus product show |
Schémata
Kanonický vstup a výstup z typů Rustu; schéma nástroje MCP a parametry a odpovědi OpenAPI se odvozují z nich.
input · FeatureInput
| vlastnost | typ | povinné | popis |
|---|---|---|---|
| id | string | ano | Id funkce tak, jak ho dává product.features. Je to také její slug a její trasa. |
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"
}výstup · ResolvedRefs
| vlastnost | typ | povinné | popis |
|---|---|---|---|
| adr_refs | array | ano | Odvozeno: rozhodnutí, která pojmenovává, s jejich stavem. |
| adr | array | ne | Rozhodnutí za tím, podle deklarovaného id. default [] |
| areas | array | ne | Provozní oblasti katalogu why, které obsluhuje. default [] |
| audiences | array | ne | Publikum katalogu why, pro které je to psáno. výchozí [] |
| zpětné odkazy | array | ano | Odvozeno: funkce, které tuto jmenují ve svém related. |
| tělo | string | ne | Tělo v Markdownu, bez front matter. |
| claim_refs | array | ano | Odvozeno: tvrzení, která jmenuje, s jejich stavem. |
| tvrzení | array | ne | Tvrzení, která říkají, co je zde zaručeno. výchozí [] |
| cockpit | array | ne | Oblasti Cockpitu, které to ukazují. výchozí [] |
| cockpit_refs | array | ano | Odvozeno: oblasti Cockpitu, které pojmenovává, s jejich trasami. |
| command_refs | array | ano | Odvozeno: shellové příkazy, které jmenuje, tak, jak je deklaruje registr příkazů. |
| commands | array | ne | Veřejné příkazy nástroje shellu, z něhož se skládá. výchozí [] |
| počty | reference | ano | Odvozeno: kolik toho za tím stojí. |
| doc_refs | array | ano | Odvozeno: dokumenty, které jmenuje, s jejich názvy. |
| dokumentace | array | ne | Dokumenty, které to vysvětlují, podle cesty relativně k repozitáři. default [] |
| doména | string | null | ne | Doména produktu, do které patří, podle id: právě jedna. Redakční; členové domény se odvozují z tohoto pole a nejsou uvedeni nikde jinde. |
| domain_ref | jedno ze 2 | ne | Odvozeno: doména, kterou pojmenovává jeho domain, s názvem a route, pokud se vyhodnotí. Chybí u funkce, která žádnou nepojmenovává nebo pojmenovává neexistující. |
| evidence | reference | ano | Odvozeno: co je zaručeno. |
| zvýrazněné | boolean | ne | Zda ji domovská stránka ukazuje jako kapitolu. výchozí false |
| titulek | string | ano | Slib, který návštěvník čte jako první. |
| id | string | ano | Identita, slug a název souboru. |
| kind_refs | array | ano | Odvozeno: druhy, které pojmenovává, každý s počtem objektů. |
| kinds | array | ne | Druhy objektů vrstvy, z nichž se skládá. výchozí [] |
| module_refs | array | ano | Odvozeno: moduly, které jmenuje, každý se svými schopnostmi a jejich projekcemi. |
| moduly | array | ne | Moduly schopností spustitelného souboru, z něhož se skládá. výchozí [] |
| momenty | array | ano | Odvozeno: okamžiky, které jmenují jakýkoli příkaz, schopnost, tvrzení nebo pravidlo této funkce. |
| související | array | ne | Funkce výslovně související s touto. Opak se odvozuje. výchozí [] |
| route | string | ne | Odvozeno: /features/<id>/. Nikdy se nepíše ručně; schéma odmítne klíč route. výchozí "" |
| rule_refs | array | ano | Odvozeno: pravidla, která jmenuje, každé se svou třídou a tím, zda je vynucováno. |
| rules | array | ne | Pravidla účinné sady, která jej řídí, podle id bez verze. výchozí [] |
| short_title | string | null | ne | Dvě nebo tři slova pro kartu nebo řádek matice. |
| zdroj | string | ne | Odvozeno: soubor relativní k repozitáři, z něhož záznam pochází. výchozí "" |
| status | string | ano | stable, draft nebo deprecated. |
| summary | string | ano | Jeden řádek: co dělá. |
| povrchy | reference | ano | Odvozeno: rozhraní, přes která je zpřístupněno. |
| štítky | array | ne | Volné štítky. výchozí [] |
| název | string | ano | Funkce jako nadpis. |
| use_case_refs | array | ano | Odvozeno: případy užití, které pojmenovává. |
| use_cases | array | ne | Případy užití, které ji ukazují v použití. výchozí [] |
| web | array | ne | Webové plochy topologie, přes které je nabízeno. výchozí [] |
| web_refs | array | ano | Odvozeno: webové povrchy, které jmenuje, s jejich mounty. |
| váha | integer | ne | Pořadí prezentace, nejnižší první. výchozí 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"
},
"test": {
"description": "The test that settles it, as `docs/CLAIMS.yaml` records it — the one field that makes a\nclaim checkable rather than stated. Absent where the claim declares none, and where it\ndeclares `-`: a planned or rejected claim has nothing to run yet, and rendering a dash\nas a test would be a projection inventing evidence.",
"type": [
"string",
"null"
]
}
},
"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"
},
"DomainRef": {
"description": "A domain as a feature points at it: enough for a breadcrumb.\n\n```\nuse majordomus_cli::product::DomainRef;\nlet crumb = DomainRef {\n id: \"context\".into(),\n title: \"Context\".into(),\n route: \"/domains/context/\".into(),\n};\nlet v = serde_json::to_value(&crumb).unwrap();\nassert_eq!(v[\"route\"], \"/domains/context/\");\nassert_eq!(serde_json::from_value::<DomainRef>(v).unwrap(), crumb);\n```",
"properties": {
"id": {
"description": "The domain id.",
"type": "string"
},
"route": {
"description": "`/domains/<id>/`.",
"type": "string"
},
"title": {
"description": "The domain as a heading.",
"type": "string"
}
},
"required": [
"id",
"title",
"route"
],
"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 a machine decides it: the block names a validator or tests, not only a reason\na person reviews it.",
"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"
},
"domain": {
"description": "The product domain it belongs to, by id: exactly one. Editorial; the domain's\nmembers are derived from this field and listed nowhere else.",
"type": [
"string",
"null"
]
},
"domain_ref": {
"anyOf": [
{
"$ref": "#/$defs/DomainRef"
},
{
"type": "null"
}
],
"description": "Derived: the domain its `domain` names, with its title and route, when that\nresolves. Absent for a feature that names none or names one that does not exist."
},
"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"
}Politiky
- benchmark
- povinné — cíl na každém transportu, který expozice deklaruje; případy jsou ty ze vstupního typu
- cache
- process: až 64 záznamů v procesu, vymezených otiskem registru
Cíle benchmarku
Odvozeno z registru pro tento repozitář: jeden požadavek na transport a případy, které poskytuje typ vstupu. Celá matice je na stránce měření výkonu.
| transport | state | případy | targets |
|---|---|---|---|
| direct | pokryto | 1 | first-feature studený+teplý |
| mcp | pokryto | 1 | first-feature studený+teplý |
| http | pokryto | 1 | first-feature studený+teplý |