app.matakite.question
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"dateParams": {
"description": "Date question parameters — 'when will X happen?'. Resolves to the datetime the event occurred.",
"properties": {
"max": {
"description": "Latest representable resolution datetime (UTC ISO 8601). Must be >= min.",
"format": "datetime",
"type": "string"
},
"min": {
"description": "Earliest representable resolution datetime (UTC ISO 8601).",
"format": "datetime",
"type": "string"
},
"openLower": {
"description": "If true, resolution before min is representable.",
"type": "boolean"
},
"openUpper": {
"description": "If true, resolution after max is representable.",
"type": "boolean"
}
},
"required": [
"min",
"max"
],
"type": "object"
},
"main": {
"description": "A resolvable forecasting question. Immutability contract: editing this record after forecasts exist changes its CID; forecasts reference the question by strongRef (uri+cid), so appviews detect and flag post-forecast edits.",
"key": "tid",
"record": {
"properties": {
"background": {
"description": "Optional context for forecasters. Not part of the resolution rule.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"closesAt": {
"description": "Last moment forecasts count for scoring. All datetimes are UTC (ISO 8601).",
"format": "datetime",
"type": "string"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"date": {
"description": "Required iff questionType is 'date'.",
"ref": "#dateParams",
"type": "ref"
},
"domain": {
"description": "Optional curated top-level subject area (author-selected). Feeds per-domain reputation and filtering. Open set: clients may encounter values they don't recognize and should tolerate them.",
"knownValues": [
"politics",
"geopolitics",
"economics",
"finance",
"crypto",
"tech",
"science",
"health",
"climate",
"sports",
"culture"
],
"type": "string"
},
"finePrint": {
"description": "Optional edge cases: source-unavailable fallbacks, rescheduling, tie-breaks, timezone specifics.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"inspiredBy": {
"description": "Optional AT-URI of the post that prompted this question (the 'formalize this take' flow). Weak ref by design: the referenced post may be edited or deleted.",
"format": "at-uri",
"type": "string"
},
"multi": {
"description": "Required iff questionType is 'multi'.",
"ref": "#multiParams",
"type": "ref"
},
"numeric": {
"description": "Required iff questionType is 'numeric'.",
"ref": "#numericParams",
"type": "ref"
},
"questionType": {
"description": "One of 'binary', 'multi', 'numeric', or 'date'. Clients that don't understand a value should skip the record, not reject it.",
"knownValues": [
"binary",
"multi",
"numeric",
"date"
],
"type": "string"
},
"resolutionCriteria": {
"description": "The precise rule determining the outcome. Must pass the Clairvoyance Test: a reader at resolution time can determine the outcome definitively from this text plus the sources.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"resolutionSources": {
"description": "Authoritative sources for resolution, in priority order. First is primary; the rest are fallbacks.",
"items": {
"ref": "#source",
"type": "ref"
},
"maxLength": 10,
"type": "array"
},
"resolver": {
"description": "DID designated to resolve this question. v1: typically the question creator. Appviews apply their own trust policy to resolutions.",
"format": "did",
"type": "string"
},
"resolvesAt": {
"description": "Expected resolution time. Must be >= closesAt. Informational; actual resolution is a separate record.",
"format": "datetime",
"type": "string"
},
"tags": {
"description": "Free-form topic tags for discovery and filtering.",
"items": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"maxLength": 8,
"type": "array"
},
"text": {
"description": "The headline question. Convention: 'Will X happen by DATE per SOURCE?'",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
}
},
"required": [
"text",
"resolutionCriteria",
"questionType",
"closesAt",
"resolvesAt",
"resolver",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"multiParams": {
"description": "Multiple-choice question parameters. New questions that accept forecasts include optionIds aligned one-to-one with options; appviews require the ids to be unique and stable within the cid-pinned question version.",
"properties": {
"optionIds": {
"description": "Opaque stable identifiers aligned by index with options. Required by the reference app for forecastable multi questions; optional in the Lexicon so previously published records remain valid. Labels may change in a new question version, but forecasts refer to these ids and pin the version by cid.",
"items": {
"maxGraphemes": 64,
"maxLength": 640,
"minGraphemes": 1,
"minLength": 1,
"type": "string"
},
"maxLength": 50,
"minLength": 2,
"type": "array"
},
"options": {
"items": {
"maxGraphemes": 100,
"maxLength": 1000,
"type": "string"
},
"maxLength": 50,
"minLength": 2,
"type": "array"
},
"sumToOne": {
"description": "If true, options are mutually exclusive and exactly one resolves yes (Kalshi mutually_exclusive / Polymarket negRisk semantics).",
"type": "boolean"
}
},
"required": [
"options"
],
"type": "object"
},
"numericParams": {
"description": "Numeric range question parameters.",
"properties": {
"logScale": {
"type": "boolean"
},
"max": {
"description": "Decimal string. Upper bound.",
"type": "string"
},
"min": {
"description": "Decimal string. Lower bound.",
"type": "string"
},
"openLower": {
"description": "If true, resolution below min is representable.",
"type": "boolean"
},
"openUpper": {
"description": "If true, resolution above max is representable.",
"type": "boolean"
},
"unit": {
"maxGraphemes": 32,
"maxLength": 320,
"type": "string"
}
},
"required": [
"min",
"max"
],
"type": "object"
},
"source": {
"properties": {
"name": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"url": {
"format": "uri",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
}
},
"id": "app.matakite.question",
"lexicon": 1
}
Metadata
- DID
-
did:plc:vhycfha6sjn44hxepb5bmjax - CID
-
bafyreifgptl5dyza56m7g6up6oabma5e3machaviywoknz7qxgaqoughiq - Indexed At
- 2026-07-16 15:12 UTC
- AT-URI
-
at://did:plc:vhycfha6sjn44hxepb5bmjax/com.atproto.lexicon.schema/app.matakite.question
Version History (2 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
app.matakite.forecast record
A forecast on a binary, multi, numeric, or date question. Revisions are new records with the same subject uri; the full trail is retained and used for time-weighted scoring. Appviews select the payload matching the cid-…
-
app.matakite.resolution record
An outcome determination for a question. Resolution is data, not authority: any DID can write one, and appviews choose which resolvers to trust and display (default: the question's designated resolver). Outcome semantic…