app.matakite.forecast
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"dateForecast": {
"properties": {
"point": {
"description": "UTC datetime point estimate. Appviews validate it against the question's date bounds.",
"format": "datetime",
"type": "string"
},
"quantiles": {
"description": "Optional uncertainty distribution. Appviews require unique ascending levels and nondecreasing datetimes.",
"items": {
"ref": "#dateQuantile",
"type": "ref"
},
"maxLength": 99,
"type": "array"
}
},
"required": [
"point"
],
"type": "object"
},
"dateQuantile": {
"properties": {
"level": {
"description": "Percentile level, for example 10, 50, or 90.",
"maximum": 99,
"minimum": 1,
"type": "integer"
},
"value": {
"description": "UTC datetime at this percentile.",
"format": "datetime",
"type": "string"
}
},
"required": [
"level",
"value"
],
"type": "object"
},
"main": {
"description": "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-pinned question type and reject records with conflicting typed payloads.",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"format": "datetime",
"type": "string"
},
"date": {
"description": "Point and optional quantile forecast for a date question.",
"ref": "#dateForecast",
"type": "ref"
},
"multi": {
"description": "Probability mass for a multi question. Appviews require one entry per question option id, unique ids, and a total of 100.",
"ref": "#multiForecast",
"type": "ref"
},
"numeric": {
"description": "Point and optional quantile forecast for a numeric question.",
"ref": "#numericForecast",
"type": "ref"
},
"probability": {
"description": "Percent probability of YES for binary questions. 0 and 100 are permitted but brave. Integer by design (matches Metaculus/Manifold/Kalshi UX; calibration math is fine at integer precision; nuance lives in the forecast trail over time, not in a single value). If extreme-tail precision is ever needed, add an optional logOdds field; do not change this one. The field remains required for Lexicon evolution compatibility. Writers of multi, numeric, and date forecasts MUST set it to 50; appviews MUST ignore it when a typed payload is present. See docs/lexicon-evolution.md.",
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"rationale": {
"description": "Optional short reasoning. Public, attached to the forecaster's track record.",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
},
"subject": {
"description": "The question being forecast (uri + cid). The cid pins the exact question version this forecast was made against.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
}
},
"required": [
"subject",
"probability",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"multiForecast": {
"properties": {
"probabilities": {
"description": "Probability mass by stable option id. Entries sum to 100 under reference appview policy.",
"items": {
"ref": "#optionProbability",
"type": "ref"
},
"maxLength": 50,
"minLength": 2,
"type": "array"
}
},
"required": [
"probabilities"
],
"type": "object"
},
"numericForecast": {
"properties": {
"point": {
"description": "Decimal-string point estimate. Appviews validate it against the question's numeric bounds.",
"type": "string"
},
"quantiles": {
"description": "Optional uncertainty distribution. Appviews require unique ascending levels and nondecreasing values.",
"items": {
"ref": "#numericQuantile",
"type": "ref"
},
"maxLength": 99,
"type": "array"
}
},
"required": [
"point"
],
"type": "object"
},
"numericQuantile": {
"properties": {
"level": {
"description": "Percentile level, for example 10, 50, or 90.",
"maximum": 99,
"minimum": 1,
"type": "integer"
},
"value": {
"description": "Decimal-string value at this percentile.",
"type": "string"
}
},
"required": [
"level",
"value"
],
"type": "object"
},
"optionProbability": {
"properties": {
"optionId": {
"description": "Stable id from the subject question's multi.optionIds array.",
"maxGraphemes": 64,
"maxLength": 640,
"minGraphemes": 1,
"minLength": 1,
"type": "string"
},
"probability": {
"description": "Percent probability assigned to this option.",
"maximum": 100,
"minimum": 0,
"type": "integer"
}
},
"required": [
"optionId",
"probability"
],
"type": "object"
}
},
"id": "app.matakite.forecast",
"lexicon": 1
}
Metadata
- DID
-
did:plc:vhycfha6sjn44hxepb5bmjax - CID
-
bafyreieuvgdazzlfw62ppwzru6b7x3lzjo2ymkh6pyka6f2rwbevdwrpv4 - Indexed At
- 2026-07-11 20:49 UTC
- AT-URI
-
at://did:plc:vhycfha6sjn44hxepb5bmjax/com.atproto.lexicon.schema/app.matakite.forecast
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
app.matakite.question record
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 ediā¦