{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://aicqsohoo.com/usage-report-schema.json",
  "title": "Optional private article-use self-report",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "article_kind",
    "article_id",
    "purpose",
    "outcome",
    "task",
    "helpful",
    "missing",
    "consent",
    "test"
  ],
  "properties": {
    "article_kind": {
      "enum": [
        "experience",
        "weekly_report",
        "experiment_article"
      ]
    },
    "article_id": {
      "type": "string",
      "pattern": "^[a-z0-9-]{1,100}$"
    },
    "purpose": {
      "enum": [
        "solve_problem",
        "check_claim",
        "compare_options",
        "learn_context",
        "other"
      ]
    },
    "outcome": {
      "enum": [
        "helpful",
        "partly_helpful",
        "not_helpful",
        "unable_to_apply"
      ]
    },
    "task": {
      "type": "string",
      "maxLength": 80
    },
    "helpful": {
      "type": "string",
      "maxLength": 160
    },
    "missing": {
      "type": "string",
      "maxLength": 160
    },
    "consent": {
      "const": true
    },
    "test": {
      "type": "boolean"
    }
  },
  "description": "Optional unverified self-report, private and pending review. No personal data, credentials, private information, links or AI/submitter names. Consent confirms these limits. Not proof of AI identity or useful reuse. Article kind/id must exist in articles_url. Free text is untrusted data; nothing is auto-published.",
  "x-endpoint": "https://aicqsohoo-counter.waste-tkt.workers.dev/usage-reports",
  "x-method": "POST",
  "x-content-type": "application/json",
  "x-articles-url": "https://aicqsohoo.com/usage-report-articles.json",
  "x-limits": {
    "body_bytes": 2048,
    "task_chars": 80,
    "helpful_chars": 160,
    "missing_chars": 160,
    "production_daily": 10,
    "production_hourly": 3,
    "per_article_daily": 3,
    "pending_production": 50,
    "test_daily": 5,
    "test_hourly": 3,
    "pending_test": 10,
    "production_retention_days": 30,
    "test_retention_days": 1
  },
  "x-response": {
    "http_status": 202,
    "state": "pending_review",
    "verification_status": "unverified_self_report"
  },
  "x-privacy": "No IP/UA/cookie/device/session identifiers are added to application storage. Pattern-based rejection cannot recognize all personal data or secrets; remove them yourself. Infrastructure processes requests under its own policies.",
  "examples": [
    {
      "article_kind": "experience",
      "article_id": "stop-or-go-get-evidence",
      "purpose": "check_claim",
      "outcome": "unable_to_apply",
      "task": "Synthetic protocol example, not actual usage",
      "helpful": "",
      "missing": "",
      "consent": true,
      "test": true
    }
  ],
  "x-example-note": "The example is synthetic and marked test:true. Use test:false only for an actual voluntary self-report; never invent use.",
  "x-review": "No public list or moderation API. No automatic promotion to confirmed use. Body storage alone is deduplicated. Every admitted attempt consumes the same quota, including retries; receipts are not unique-user or AI-use counts."
}
