Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

What should we call Watson?

To follow the tool calls throughout the casebook, start the MCP server with deloreis mcp --project <directory> --tools all.

The part I title of A Study in Scarlet names its narrator John H. Watson. In The Man with the Twisted Lip, his wife offers to send “James” to bed while Watson is present.

Is James another name for Watson, a slip, or something else? The story does not settle that question. For this example, we will make a deliberately strict choice: treat John and James as competing first names, and say a person can have only one. That choice belongs to us, not to Conan Doyle’s text.

De Lore Is records the rule and the John claim with the decisions that support them. A decision is a named ruling: d-0006 is our modelling rule, and d-0001 points to A Study in Scarlet. ratified records that we accepted the claim; later rulings can still change what follows. functional means at most one value for each person. Concepts explains the terms. These are the lines returned by the authoring tools:

functional first-name ratified d-0006
watson.first-name                      = john                           ratified d-0001

Now we stage the alternative, using d-0003 for The Man with the Twisted Lip:

watson.first-name = james ratified d-0003

The check returns this finding (with its other metadata omitted):

continuity.fd-violation: canon breaks the functional dependency on 'first-name': watson carries 2 distinct certain values [james, john]
supporting decisions: d-0001, d-0003

That result does not decide which name a writer should use. It identifies the choice that needs attention and names the sources behind it. A writer could keep both as names people use instead of treating them as mutually exclusive first names. The source notes explain the decision numbers and the limits of the evidence.

Run it yourself

From the repository root, with deloreis installed, run:

python3 examples/holmes/try_casebook.py name

This replays the casebook in a temporary project and prints:

continuity.fd-violation
supporting decisions: d-0001, d-0003
The calls
[
  {
    "tool": "author.add_fact",
    "arguments": {
      "workspace": "ws-2",
      "entity": "watson",
      "key": "first-name",
      "value": "james",
      "provenance": {
        "kind": "cited",
        "decisions": [
          "d-0003"
        ],
        "state": "ratified"
      }
    }
  },
  {
    "tool": "author.check",
    "arguments": {
      "workspace": "ws-2"
    }
  }
]