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.
tid
Timestamp-based ID
Properties
background
string
Optional
Optional context for forecasters. Not part of the resolution rule.
maxLength: 30000 bytesmaxGraphemes: 3000 graphemesclosesAt
string
datetime
Required
Last moment forecasts count for scoring. All datetimes are UTC (ISO 8601).
createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
date
ref
#dateParams
Optional
Required iff questionType is 'date'. Reserved for v2.
domain
string
Optional
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.
politics, geopolitics, economics, finance, crypto, tech, science, health, climate, sports, culturefinePrint
string
Optional
Optional edge cases: source-unavailable fallbacks, rescheduling, tie-breaks, timezone specifics.
maxLength: 30000 bytesmaxGraphemes: 3000 graphemesinspiredBy
string
at-uri
Optional
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.
multi
ref
#multiParams
Optional
Required iff questionType is 'multi'. Reserved for v2.
numeric
ref
#numericParams
Optional
Required iff questionType is 'numeric'. Reserved for v2.
questionType
string
Required
v1 appviews support 'binary' only. 'multi', 'numeric', and 'date' are reserved; records using them should be skipped, not rejected, by clients that don't understand them.
binary, multi, numeric, dateresolutionCriteria
string
Required
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.
maxLength: 30000 bytesmaxGraphemes: 3000 graphemesresolutionSources
array
of
ref
#source
Optional
Authoritative sources for resolution, in priority order. First is primary; the rest are fallbacks.
maxLength: 10 itemsresolver
string
did
Required
DID designated to resolve this question. v1: typically the question creator. Appviews apply their own trust policy to resolutions.
resolvesAt
string
datetime
Required
Expected resolution time. Must be >= closesAt. Informational; actual resolution is a separate record.
tags
array
of
string
Optional
Free-form topic tags for discovery and filtering.
maxLength: 8 itemstext
string
Required
The headline question. Convention: 'Will X happen by DATE per SOURCE?'
maxLength: 3000 bytesmaxGraphemes: 300 graphemesView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"text",
"resolutionCriteria",
"questionType",
"closesAt",
"resolvesAt",
"resolver",
"createdAt"
],
"properties": {
"date": {
"ref": "#dateParams",
"type": "ref",
"description": "Required iff questionType is 'date'. Reserved for v2."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64
},
"maxLength": 8,
"description": "Free-form topic tags for discovery and filtering."
},
"text": {
"type": "string",
"maxLength": 3000,
"description": "The headline question. Convention: 'Will X happen by DATE per SOURCE?'",
"maxGraphemes": 300
},
"multi": {
"ref": "#multiParams",
"type": "ref",
"description": "Required iff questionType is 'multi'. Reserved for v2."
},
"domain": {
"type": "string",
"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"
]
},
"numeric": {
"ref": "#numericParams",
"type": "ref",
"description": "Required iff questionType is 'numeric'. Reserved for v2."
},
"closesAt": {
"type": "string",
"format": "datetime",
"description": "Last moment forecasts count for scoring. All datetimes are UTC (ISO 8601)."
},
"resolver": {
"type": "string",
"format": "did",
"description": "DID designated to resolve this question. v1: typically the question creator. Appviews apply their own trust policy to resolutions."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"finePrint": {
"type": "string",
"maxLength": 30000,
"description": "Optional edge cases: source-unavailable fallbacks, rescheduling, tie-breaks, timezone specifics.",
"maxGraphemes": 3000
},
"background": {
"type": "string",
"maxLength": 30000,
"description": "Optional context for forecasters. Not part of the resolution rule.",
"maxGraphemes": 3000
},
"inspiredBy": {
"type": "string",
"format": "at-uri",
"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."
},
"resolvesAt": {
"type": "string",
"format": "datetime",
"description": "Expected resolution time. Must be >= closesAt. Informational; actual resolution is a separate record."
},
"questionType": {
"type": "string",
"description": "v1 appviews support 'binary' only. 'multi', 'numeric', and 'date' are reserved; records using them should be skipped, not rejected, by clients that don't understand them.",
"knownValues": [
"binary",
"multi",
"numeric",
"date"
]
},
"resolutionSources": {
"type": "array",
"items": {
"ref": "#source",
"type": "ref"
},
"maxLength": 10,
"description": "Authoritative sources for resolution, in priority order. First is primary; the rest are fallbacks."
},
"resolutionCriteria": {
"type": "string",
"maxLength": 30000,
"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
}
}
},
"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."
}