meta { name: Create Reply type: http seq: 1 } post { url: {{appview_url}}/api/posts } headers { Content-Type: application/json } body:json { { "text": "This is a reply", "rootPostId": "1", "parentPostId": "1" } } assert { res.status: eq 201 res.body.uri: isDefined res.body.cid: isDefined res.body.rkey: isDefined } docs { Create a reply to an existing post. Required body: { "text": "Reply text (1-10000 chars, trimmed)", "rootPostId": "1", // Topic (thread starter) ID "parentPostId": "1" // Direct parent post ID (can be same as rootPostId) } Returns: { "uri": "at://did:plc:.../space.atbb.post/...", "cid": "...", "rkey": "..." } Requires authentication (valid session cookie). Validation: - Both rootPostId and parentPostId must exist - Parent must belong to the same thread (parent.rootPostId == rootPostId OR parent is root) - Root post must have a forum reference Returns 400 for invalid input or validation failures. Returns 401 if not authenticated. Returns 403 if the user is banned from the forum. Returns 404 if root or parent post not found. Returns 403 if the topic is locked (no new replies allowed). Returns 503 if PDS or database is temporarily unavailable (retry later). Returns 500 for server errors. }