TfP Docs

Campaign schema

Generated from the canonical schema schemas/campaign.schema.json by scripts/generate-schema-docs.mjs — do not edit this page by hand.

A coherent mission around which Problems are coordinated. A Campaign is a coordination boundary, not a Problem type: it may contain SOLVE, BENCHMARK, and DISCOVERY Problems simultaneously, may maintain Campaign-local resources, may curate or recommend reusable Skills relevant to its Problems (ProblemRevisions independently pin exact SkillVersions), and may be finite or generative. Problems do not require a Campaign.

Schema version: 1.0.0 · $id: https://tokensforprogress.org/schemas/campaign.schema.json

Fields

id

Type: string · Required: yes · Mutable: no · Pattern: ^cmp_[0-9a-z]{10,32}$

Stable opaque identifier for the Campaign. Never encodes mission, domain, or status.

Example: "cmp_01jf8y2k9qv3"

slug

Type: string · Required: yes · Mutable: yes · Pattern: ^[a-z0-9]+(-[a-z0-9]+)*$

URL-safe short name, unique among Campaigns. Mutable, but changing it breaks inbound links; prefer stability.

Example: "federal-technology"

title

Type: string · Required: yes · Mutable: yes

Human-readable display name of the mission.

Example: "Federal Technology Transfer"

summary

Type: string · Required: yes · Mutable: yes

One- to two-sentence plain-text description shown in listings and search results.

Example: "Surface federally developed technologies that could be transferred to public use."

description_md

Type: string · Required: yes · Mutable: yes

Full Markdown description of the mission: motivation, scope, how Problems in this Campaign relate, links to external context.

Example: "## Mission\nThousands of federally funded technologies sit unused..."

status

Type: draft | active | archived · Required: yes · Mutable: yes

Lifecycle state. draft: being authored, not publicly listed. active: publicly listed and accepting Attempts on its open Problems. archived: preserved read-only; its Problems no longer accept new Attempts through the Campaign. This is lifecycle only — whether a Campaign is 'making progress' is derived from activity, never stored.

Example: "active"

owner_user_id

Type: string · Required: yes · Mutable: yes · Pattern: ^usr_[0-9a-z]{10,32}$

The User accountable for this Campaign: publishes its Problems and curates its backlog and recommended Skills. Transferable (mutable) with care.

Example: "usr_01jf8xw3tempo"

created_at

Type: string · Required: yes · Mutable: no

RFC 3339 UTC timestamp of creation.

Example: "2026-08-30T17:04:11Z"

updated_at

Type: string · Required: yes · Mutable: yes

RFC 3339 UTC timestamp of the most recent change to any mutable field.

Example: "2026-08-30T18:20:03Z"

JSON Schema source

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tokensforprogress.org/schemas/campaign.schema.json",
  "title": "Campaign",
  "description": "A coherent mission around which Problems are coordinated. A Campaign is a coordination boundary, not a Problem type: it may contain SOLVE, BENCHMARK, and DISCOVERY Problems simultaneously, may maintain Campaign-local resources, may curate or recommend reusable Skills relevant to its Problems (ProblemRevisions independently pin exact SkillVersions), and may be finite or generative. Problems do not require a Campaign.",
  "x-tfp-version": "1.0.0",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "id",
    "slug",
    "title",
    "summary",
    "description_md",
    "status",
    "owner_user_id",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^cmp_[0-9a-z]{10,32}$",
      "x-mutable": false,
      "description": "Stable opaque identifier for the Campaign. Never encodes mission, domain, or status.",
      "examples": [
        "cmp_01jf8y2k9qv3"
      ]
    },
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "maxLength": 64,
      "x-mutable": true,
      "description": "URL-safe short name, unique among Campaigns. Mutable, but changing it breaks inbound links; prefer stability.",
      "examples": [
        "federal-technology"
      ]
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "x-mutable": true,
      "description": "Human-readable display name of the mission.",
      "examples": [
        "Federal Technology Transfer"
      ]
    },
    "summary": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "x-mutable": true,
      "description": "One- to two-sentence plain-text description shown in listings and search results.",
      "examples": [
        "Surface federally developed technologies that could be transferred to public use."
      ]
    },
    "description_md": {
      "type": "string",
      "x-mutable": true,
      "description": "Full Markdown description of the mission: motivation, scope, how Problems in this Campaign relate, links to external context.",
      "examples": [
        "## Mission\nThousands of federally funded technologies sit unused..."
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "active",
        "archived"
      ],
      "x-mutable": true,
      "description": "Lifecycle state. draft: being authored, not publicly listed. active: publicly listed and accepting Attempts on its open Problems. archived: preserved read-only; its Problems no longer accept new Attempts through the Campaign. This is lifecycle only — whether a Campaign is 'making progress' is derived from activity, never stored.",
      "examples": [
        "active"
      ]
    },
    "owner_user_id": {
      "type": "string",
      "pattern": "^usr_[0-9a-z]{10,32}$",
      "x-mutable": true,
      "description": "The User accountable for this Campaign: publishes its Problems and curates its backlog and recommended Skills. Transferable (mutable) with care.",
      "examples": [
        "usr_01jf8xw3tempo"
      ]
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "x-mutable": false,
      "description": "RFC 3339 UTC timestamp of creation.",
      "examples": [
        "2026-08-30T17:04:11Z"
      ]
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "x-mutable": true,
      "description": "RFC 3339 UTC timestamp of the most recent change to any mutable field.",
      "examples": [
        "2026-08-30T18:20:03Z"
      ]
    }
  }
}