feat: unify Ticket posts and simplify detail layout

Checkpoint requested before the targets read-tool correction. Includes canonical initial posts, creator/edit metadata, migration and UI work, and removal of delivery diagnostics from Ticket details.\n\nIntegration remains incomplete: the Client post-edit trait implementation and server post routes/dispatch are not yet connected; cargo check currently fails. This commit does not assert validation or delivery completion.
This commit is contained in:
2026-10-14 02:42:58 +09:00
parent 26ab6130e0
commit 8611078058
45 changed files with 5862 additions and 668 deletions
+317 -1
View File
@@ -11620,6 +11620,12 @@
"null"
]
},
"created_by": {
"type": [
"string",
"null"
]
},
"current_closure": {
"anyOf": [
{
@@ -11667,6 +11673,9 @@
},
"type": "array"
},
"initial_post": {
"$ref": "#/components/schemas/TicketEventDetail"
},
"legacy_handoff": {
"anyOf": [
{
@@ -11768,6 +11777,7 @@
}
},
"required": [
"initial_post",
"id",
"tags",
"resource_key",
@@ -12053,6 +12063,25 @@
"body": {
"$ref": "#/components/schemas/MarkdownText"
},
"edited_at": {
"default": null,
"type": [
"string",
"null"
]
},
"edited_by": {
"default": null,
"type": [
"string",
"null"
]
},
"event_ref": {
"default": "",
"description": "Persisted identity, independent of display position and legacy event_id attributes.",
"type": "string"
},
"from": {
"type": [
"string",
@@ -12065,6 +12094,10 @@
"null"
]
},
"is_initial": {
"default": false,
"type": "boolean"
},
"kind": {
"$ref": "#/components/schemas/TicketEventKind"
},
@@ -12134,6 +12167,27 @@
"null"
]
},
"body_digest": {
"type": "string"
},
"body_truncated": {
"type": "boolean"
},
"editable": {
"type": "boolean"
},
"edited_at": {
"type": [
"string",
"null"
]
},
"edited_by": {
"type": [
"string",
"null"
]
},
"event_ref": {
"type": "string"
},
@@ -12149,6 +12203,9 @@
"null"
]
},
"is_initial": {
"type": "boolean"
},
"kind": {
"type": "string"
},
@@ -12190,6 +12247,10 @@
}
},
"required": [
"is_initial",
"body_digest",
"body_truncated",
"editable",
"sequence",
"event_ref",
"kind",
@@ -12751,6 +12812,13 @@
"null"
]
},
"created_by": {
"default": null,
"type": [
"string",
"null"
]
},
"id": {
"type": "string"
},
@@ -12873,6 +12941,22 @@
},
"type": "object"
},
"TicketPostEditRequest": {
"additionalProperties": false,
"properties": {
"body": {
"type": "string"
},
"expected_body_digest": {
"type": "string"
}
},
"required": [
"body",
"expected_body_digest"
],
"type": "object"
},
"TicketQueryItem": {
"additionalProperties": false,
"properties": {
@@ -17114,7 +17198,7 @@
"info": {
"title": "Yoi Server API",
"version": "0.1.0",
"x-yoi-source-digest": "sha256:73f7d252fbedf2efbc7d36a36259c72850cfaaede4693009800fb1bec3f295cb"
"x-yoi-source-digest": "sha256:1d6615147b8d7143484b9a2aaf163da6916fcabb7560c675c5b7bf4d94aa2214"
},
"openapi": "3.1.0",
"paths": {
@@ -35904,6 +35988,238 @@
]
}
},
"/api/w/{workspace_id}/tickets/{id}/posts/{event_ref}": {
"get": {
"operationId": "ticket_post_get",
"parameters": [
{
"explode": false,
"in": "path",
"name": "workspace_id",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
},
{
"explode": false,
"in": "path",
"name": "id",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
},
{
"explode": false,
"in": "path",
"name": "event_ref",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TicketEventDetail"
}
}
},
"description": "Successful response"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
}
},
"security": [
{
"bearerAuth": []
},
{
"browserSession": []
}
]
},
"patch": {
"operationId": "ticket_post_edit",
"parameters": [
{
"explode": false,
"in": "path",
"name": "workspace_id",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
},
{
"explode": false,
"in": "path",
"name": "id",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
},
{
"explode": false,
"in": "path",
"name": "event_ref",
"required": true,
"schema": {
"$ref": "#/components/schemas/string"
},
"style": "simple"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TicketPostEditRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TicketDetail"
}
}
},
"description": "Successful response"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepositoryApiError"
}
}
},
"description": "Error response"
}
},
"security": [
{
"bearerAuth": []
},
{
"browserSession": []
}
]
}
},
"/api/w/{workspace_id}/tickets/{id}/queue": {
"post": {
"operationId": "ticket_queue",