Skip to content

why.diagnose

What a reader's own symptoms imply: the moments the selection resolves to, the operational areas and audiences they weigh towards, and the capabilities, commands, claims, rules and use cases that answer them — each carrying the moments that produced it. Counting, not inference: there is no weighting and no percentage.

What a reader's own symptoms imply: the moments the selection resolves to, the operational areas and audiences they weigh towards, and the capabilities, commands, claims, rules and use cases that answer them — each carrying the moments that produced it. Counting, not inference: there is no weighting and no percentage.

  • query
  • behaviorally_verified
  • module why
  • #why
  • #diagnostics

Exposure

Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.

surfaceas
MCPtool majordomus_why_diagnose
HTTPGET /api/v1/why/diagnose operationId why.diagnose
command linemajordomus why diagnose

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 · DiagnoseInput

What a reader recognised, as a comma-separated list of names. A name is a signal id or a moment id: a person ticking symptoms and a script naming moments reach the same answer, because a signal resolves to the moment that owns it. The parameter is one string rather than a list because a diagnosis changes nothing and is therefore a `GET`, and this repository binds a `GET` input to the query string.

propertytyperequireddescription
signals string no Signal ids or moment ids, separated by commas. Empty selects nothing and is answered with an empty diagnosis rather than an error. default ""
JSON Schema
{
  "additionalProperties": false,
  "description": "What a reader recognised, as a comma-separated list of names.\n\nA name is a signal id or a moment id: a person ticking symptoms and a script naming\nmoments reach the same answer, because a signal resolves to the moment that owns it.\nThe parameter is one string rather than a list because a diagnosis changes nothing and\nis therefore a `GET`, and this repository binds a `GET` input to the query string.",
  "properties": {
    "signals": {
      "default": "",
      "description": "Signal ids or moment ids, separated by commas. Empty selects nothing and is\nanswered with an empty diagnosis rather than an error.",
      "type": "string"
    }
  },
  "title": "DiagnoseInput",
  "type": "object"
}

output · Diagnosis

What a reader's selection implies, computed by counting rather than by inference. The arithmetic is the whole model and is stated so a reader can check it: a selection resolves to a set of moments; an area or an audience scores the number of selected moments that name it; a recommendation scores the number that name it and carries their ids. There is no weighting and no percentage, because there is no model behind one.

propertytyperequireddescription
also_worth_reading array yes Moments the selection did not include that share an area with one that it did.
areas array yes Operational areas by how many selected moments fall under them, heaviest first.
audiences array yes Audiences by how many selected moments they recognise, heaviest first.
capabilities array yes Capabilities of the executable that answer the selected moments.
claims array yes Claims that say what is guaranteed.
commands array yes Commands that answer them.
doctrines array yes Rules of the effective set that govern them.
moments array yes The moments the selection resolved to, in presentation order.
unresolved array yes Selected names that resolved to nothing.
use_cases array yes Use cases that show the way out.
JSON Schema
{
  "$defs": {
    "Recommendation": {
      "description": "One recommendation, with the moments that produced it. A recommendation with no\n`matched_because` is a recommendation nobody can check.",
      "properties": {
        "count": {
          "description": "How many of the selected moments name it.",
          "format": "uint",
          "minimum": 0,
          "type": "integer"
        },
        "id": {
          "description": "The thing recommended: a capability id, a command, a claim, a rule, a use case.",
          "type": "string"
        },
        "matched_because": {
          "description": "The selected moments that named it, in presentation order.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "id",
        "count",
        "matched_because"
      ],
      "type": "object"
    }
  },
  "description": "What a reader's selection implies, computed by counting rather than by inference.\n\nThe arithmetic is the whole model and is stated so a reader can check it: a selection\nresolves to a set of moments; an area or an audience scores the number of selected\nmoments that name it; a recommendation scores the number that name it and carries\ntheir ids. There is no weighting and no percentage, because there is no model behind\none.",
  "properties": {
    "also_worth_reading": {
      "description": "Moments the selection did not include that share an area with one that it did.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "areas": {
      "description": "Operational areas by how many selected moments fall under them, heaviest first.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "audiences": {
      "description": "Audiences by how many selected moments they recognise, heaviest first.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "capabilities": {
      "description": "Capabilities of the executable that answer the selected moments.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "claims": {
      "description": "Claims that say what is guaranteed.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "commands": {
      "description": "Commands that answer them.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "doctrines": {
      "description": "Rules of the effective set that govern them.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    },
    "moments": {
      "description": "The moments the selection resolved to, in presentation order.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "unresolved": {
      "description": "Selected names that resolved to nothing.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "use_cases": {
      "description": "Use cases that show the way out.",
      "items": {
        "$ref": "#/$defs/Recommendation"
      },
      "type": "array"
    }
  },
  "required": [
    "moments",
    "unresolved",
    "areas",
    "audiences",
    "capabilities",
    "commands",
    "claims",
    "doctrines",
    "use_cases",
    "also_worth_reading"
  ],
  "title": "Diagnosis",
  "type": "object"
}

Policies

benchmark
required — a target on every transport the exposure declares; the cases are the input type's
cache
process — up to 32 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.

transportstatecasestargets
directcovered1three-moments cold+warm
mcpcovered1three-moments cold+warm
httpcovered1three-moments cold+warm