Does a holder hold a claim at a position? The answer comes with the Holding behind it.
umwelt call story.umw holds '{
"projectId": "ball",
"holder": "ana",
"claim": {
"subject": "bob",
"predicate": "stole",
"object": { "kind": "entity", "id": "necklace" },
"polarity": true
},
"at": { "tick": 1 }
}'const result = await client.holds({ projectId: 'ball', holder: 'ana', claim: theft, at: { tick: 1 } });var result = engine.Holds(new HoldsPayload
{
ProjectId = "ball",
Holder = "ana",
Claim = theft,
At = new At { Tick = 1 },
});{
"holds": true,
"attitude": "knows",
"confidence": 1.0,
"polarity": true,
"recordId": "ana-saw",
"holdsAs": "same"
}Payload
| Field | Type | Description |
|---|---|---|
projectIdrequired | string | The project to read. |
holderrequired | string | The agent or group asked about. |
claim | Claim | The claim, by its parts: subject, predicate, object and polarity. Give claim or claimKey. |
claimKey | string | The claim by its stable key. See Claim keys. |
at | Atdefault {} | Where to read: tick, an optional axis, and asOfVersion. Defaults to the latest. |
timelineId | stringdefault "main" | The timeline to read. |
Result
| Field | Type | Description |
|---|---|---|
holdsalways | boolean | Whether the holder has a Holding about the claim at that position, with either polarity. |
holdsAs | "same" | "opposite" | same when that Holding affirms what was asked, opposite when it affirms the negation. Absent when holds is false, or when the question gave only a claimKey. |
attitude | "knows" | "believes" | "suspects" | "remembers" | How the claim is held. |
confidence | number | Between 0 and 1. |
polarity | boolean | The polarity of the Holding behind the answer. |
recordId | string | The Holding behind the answer: the latest, in story order. |
When the holder holds nothing about the claim, only holds comes back: { "holds": false }.
Rules
Believing the opposite is holding it. A claim and its negation share one key, so a holder who believes the opposite of what you asked also answers holds: true, with holdsAs: "opposite". To gate on “do they know it?”, test holdsAs === "same", not holds alone: otherwise those who deny a claim are treated as those who know it.
A Fact is never knowledge. Canon being true never makes anyone hold a claim. Only a Holding whose holder is the one asked about counts.
Nothing later leaks in. The read stands at at: records from a later tick, a later version or another timeline are invisible to it.
The latest Holding wins. When several Holdings cover the claim, the one reported is the latest in story order, even when reading on an additional axis.
Errors
VALIDATION_FAILEDThe payload is malformed or incomplete, for example without a claim to ask about.NOT_FOUNDThe project, holder or timeline does not exist.INVALID_STATEThe timeline read is a draft that was promoted. details.promotedInto names the timeline to read instead.HANDSHAKE_REQUIREDOver the protocol, hello was not sent first.Every code is listed in Errors.