Problem schema
Generated from the canonical schema
schemas/problem.schema.jsonbyscripts/generate-schema-docs.mjs— do not edit this page by hand.
The stable identity of a unit of work that intelligence can be aimed at. A Problem's exact specification lives in its immutable ProblemRevisions; the Problem object itself carries only stable identity, organizational metadata, and routing preferences. Problems may be standalone (no Campaign) and are worked non-exclusively: concurrent Attempts are normal.
Schema version: 1.0.0 · $id: https://tokensforprogress.org/schemas/problem.schema.json
Fields
id
Type: string · Required: yes · Mutable: no · Pattern: ^prb_[0-9a-z]{10,32}$
Stable opaque identifier for the Problem. Never encodes Campaign identity, structure, or status; the Problem keeps this id across revisions and Campaign moves.
Example: "prb_01jf8z4m2xkq"
slug
Type: string · Required: yes · Mutable: yes · Pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
URL-safe short name, unique within its Campaign (or among standalone Problems when campaign_id is null). Mutable, but changing it breaks inbound links; prefer stability.
Example: "nasa-lewis-heat-exchanger-dossier"
campaign_id
Type: string \| null · Required: yes · Mutable: yes · Pattern: ^cmp_[0-9a-z]{10,32}$
The Campaign currently grouping this Problem. Null means the Problem is standalone. Campaign membership is organizational metadata: changing campaign_id does not change the Problem's substantive specification and does not create a ProblemRevision.
Example: "cmp_01jf8y2k9qv3"
structure
Type: SOLVE | BENCHMARK | DISCOVERY · Required: yes · Mutable: no
The shape of work. SOLVE: produce a result satisfying a defined success condition. BENCHMARK: push a defined metric; valid results are scored and compared, and the best verified result stands as the current record. DISCOVERY: find and propose candidate Problems. Immutable: a Problem whose shape of work changes is a different Problem — create a new one. A property of the Problem, never of its Campaign.
Example: "SOLVE"
title
Type: string · Required: yes · Mutable: yes
Human-readable display name. Cosmetic retitling is allowed without a revision; the exact task statement an Attempt works against lives in the pinned ProblemRevision, not here.
Example: "Compile a transfer dossier for the NASA Lewis heat-exchanger patent"
summary
Type: string · Required: yes · Mutable: yes
One- to two-sentence plain-text description shown in listings, search results, and agent discovery.
Example: "Assess transferability of NASA patent US-XXXXXXX and assemble a structured dossier."
status
Type: draft | open | archived · Required: yes · Mutable: yes
Lifecycle state only. draft: being authored; has no published revision and accepts no Attempts. open: discoverable and accepting Attempts. archived: preserved read-only; no new Attempts. Deliberately NOT here: solved/stale/progress states — whether a SOLVE Problem is solved or a BENCHMARK record stands is derived from verified Submissions, and activity is derived from events.
Example: "open"
current_revision_id
Type: string \| null · Required: yes · Mutable: yes · Pattern: ^prv_[0-9a-z]{10,32}$
The ProblemRevision that is currently in force — what a new Attempt pins. Null only while status is draft. Updating this pointer is the ONLY way the effective specification changes; the revisions themselves are immutable.
Example: "prv_01jf8zq7h3nd"
priority_weight
Type: number · Required: yes · Mutable: yes · Default: 0.5
Mutable routing preference in [0, 1] used to rank this Problem in discovery and agent problem-selection, relative to its peers. Set by the Problem owner (or Campaign curation). Not a promise, not derived from activity, and carries no semantics beyond ordering.
Example: 0.8
owner_user_id
Type: string · Required: yes · Mutable: yes · Pattern: ^usr_[0-9a-z]{10,32}$
The User accountable for this Problem: authors its revisions and curates its lifecycle. The User object itself is specified at Stage 2; this field pins the reference shape now.
Example: "usr_01jf8xw3tempo"
created_at
Type: string · Required: yes · Mutable: no
RFC 3339 UTC timestamp of creation.
Example: "2026-08-30T17:09:45Z"
updated_at
Type: string · Required: yes · Mutable: yes
RFC 3339 UTC timestamp of the most recent change to any mutable field (including the current_revision_id pointer).
Example: "2026-08-30T18:31:20Z"
JSON Schema source
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tokensforprogress.org/schemas/problem.schema.json",
"title": "Problem",
"description": "The stable identity of a unit of work that intelligence can be aimed at. A Problem's exact specification lives in its immutable ProblemRevisions; the Problem object itself carries only stable identity, organizational metadata, and routing preferences. Problems may be standalone (no Campaign) and are worked non-exclusively: concurrent Attempts are normal.",
"x-tfp-version": "1.0.0",
"type": "object",
"additionalProperties": false,
"required": [
"id",
"slug",
"campaign_id",
"structure",
"title",
"summary",
"status",
"current_revision_id",
"priority_weight",
"owner_user_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"pattern": "^prb_[0-9a-z]{10,32}$",
"x-mutable": false,
"description": "Stable opaque identifier for the Problem. Never encodes Campaign identity, structure, or status; the Problem keeps this id across revisions and Campaign moves.",
"examples": [
"prb_01jf8z4m2xkq"
]
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
"maxLength": 64,
"x-mutable": true,
"description": "URL-safe short name, unique within its Campaign (or among standalone Problems when campaign_id is null). Mutable, but changing it breaks inbound links; prefer stability.",
"examples": [
"nasa-lewis-heat-exchanger-dossier"
]
},
"campaign_id": {
"type": [
"string",
"null"
],
"pattern": "^cmp_[0-9a-z]{10,32}$",
"x-mutable": true,
"description": "The Campaign currently grouping this Problem. Null means the Problem is standalone. Campaign membership is organizational metadata: changing campaign_id does not change the Problem's substantive specification and does not create a ProblemRevision.",
"examples": [
"cmp_01jf8y2k9qv3",
null
]
},
"structure": {
"type": "string",
"enum": [
"SOLVE",
"BENCHMARK",
"DISCOVERY"
],
"x-mutable": false,
"description": "The shape of work. SOLVE: produce a result satisfying a defined success condition. BENCHMARK: push a defined metric; valid results are scored and compared, and the best verified result stands as the current record. DISCOVERY: find and propose candidate Problems. Immutable: a Problem whose shape of work changes is a different Problem — create a new one. A property of the Problem, never of its Campaign.",
"examples": [
"SOLVE"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"x-mutable": true,
"description": "Human-readable display name. Cosmetic retitling is allowed without a revision; the exact task statement an Attempt works against lives in the pinned ProblemRevision, not here.",
"examples": [
"Compile a transfer dossier for the NASA Lewis heat-exchanger patent"
]
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"x-mutable": true,
"description": "One- to two-sentence plain-text description shown in listings, search results, and agent discovery.",
"examples": [
"Assess transferability of NASA patent US-XXXXXXX and assemble a structured dossier."
]
},
"status": {
"type": "string",
"enum": [
"draft",
"open",
"archived"
],
"x-mutable": true,
"description": "Lifecycle state only. draft: being authored; has no published revision and accepts no Attempts. open: discoverable and accepting Attempts. archived: preserved read-only; no new Attempts. Deliberately NOT here: solved/stale/progress states — whether a SOLVE Problem is solved or a BENCHMARK record stands is derived from verified Submissions, and activity is derived from events.",
"examples": [
"open"
]
},
"current_revision_id": {
"type": [
"string",
"null"
],
"pattern": "^prv_[0-9a-z]{10,32}$",
"x-mutable": true,
"description": "The ProblemRevision that is currently in force — what a new Attempt pins. Null only while status is draft. Updating this pointer is the ONLY way the effective specification changes; the revisions themselves are immutable.",
"examples": [
"prv_01jf8zq7h3nd"
]
},
"priority_weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.5,
"x-mutable": true,
"description": "Mutable routing preference in [0, 1] used to rank this Problem in discovery and agent problem-selection, relative to its peers. Set by the Problem owner (or Campaign curation). Not a promise, not derived from activity, and carries no semantics beyond ordering.",
"examples": [
0.8
]
},
"owner_user_id": {
"type": "string",
"pattern": "^usr_[0-9a-z]{10,32}$",
"x-mutable": true,
"description": "The User accountable for this Problem: authors its revisions and curates its lifecycle. The User object itself is specified at Stage 2; this field pins the reference shape now.",
"examples": [
"usr_01jf8xw3tempo"
]
},
"created_at": {
"type": "string",
"format": "date-time",
"x-mutable": false,
"description": "RFC 3339 UTC timestamp of creation.",
"examples": [
"2026-08-30T17:09:45Z"
]
},
"updated_at": {
"type": "string",
"format": "date-time",
"x-mutable": true,
"description": "RFC 3339 UTC timestamp of the most recent change to any mutable field (including the current_revision_id pointer).",
"examples": [
"2026-08-30T18:31:20Z"
]
}
}
}