{
  "kind": "client_class",
  "expect": "valid",
  "description": "Thread-sync-publisher-shape: non-CCD client publishing thread-sync posts to a side channel",
  "data": {
    "client_id": "thread-sync-publisher",
    "description": "Thread-sync publisher: emits thread_sync_post payloads to a side channel; never participates in pre-prompt placement.",
    "payload_kinds": ["thread_sync_post", "thread_sync_ack"],
    "example_payload": {
      "schema_version": "lifeloop.v0.2",
      "payload_id": "pay-tsp-1",
      "client_id": "thread-sync-publisher",
      "payload_kind": "thread_sync_post",
      "format": "client-defined",
      "content_encoding": "utf8",
      "body_ref": "blob://thread-sync/pay-tsp-1",
      "byte_size": 4096,
      "content_digest": "sha256:beef",
      "acceptable_placements": [
        { "placement": "side_channel_context", "requirement": "required" }
      ]
    }
  }
}
