{
"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" }
]
}
}
}