Files
Hare 8611078058 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.
2026-10-14 02:42:58 +09:00

503 lines
14 KiB
JSON

{
"schemaVersion": 1,
"id": "tickets-dark",
"title": "Ticket cases, classification and independent Orchestrator handling",
"baseUrl": "http://127.0.0.1:15289",
"colorScheme": "dark",
"reducedMotion": "reduce",
"personas": [
{
"id": "member",
"label": "Workspace member, not settings owner",
"auth": {
"kind": "anonymous"
}
}
],
"viewports": [
{
"label": "desktop",
"width": 1440,
"height": 900
},
{
"label": "narrow",
"width": 768,
"height": 900
},
{
"label": "mobile",
"width": 390,
"height": 844
}
],
"routes": [
{
"id": "posts",
"label": "Discussion with initial post and edited replies",
"path": "/w/tickets-posts/tickets/T-900",
"goal": "Read and edit any discussion post without changing Ticket metadata",
"dataState": "Four realistic posts, distinct authors, original and edited times",
"ready": {
"kind": "selector",
"selector": ".ticket-timeline article:nth-of-type(4)"
},
"capturePoints": [
{
"id": "initial",
"label": "Thread and metadata",
"fullPage": true
},
{
"id": "edit-initial",
"label": "Same post editor on initial post",
"interaction": [
{
"action": "click",
"selector": ".ticket-timeline article:first-of-type button"
}
],
"fullPage": true
},
{
"id": "later-posts",
"label": "Later discussion and edited attribution",
"interaction": [
{
"action": "click",
"selector": ".ticket-timeline article:first-of-type button[type=button]"
},
{
"action": "click",
"selector": ".ticket-timeline article:last-of-type header strong"
}
],
"fullPage": true
},
{
"id": "composer",
"label": "Thread-only comment and close footer",
"interaction": [
{
"action": "click",
"selector": ".ticket-thread-composer textarea"
}
],
"fullPage": true
},
{
"id": "metadata",
"label": "Title editing separate from post bodies",
"interaction": [
{
"action": "click",
"selector": ".ticket-metadata button"
}
],
"fullPage": true
}
]
},
{
"id": "options",
"label": "Return options without conclusion",
"path": "/w/tickets/tickets/T-1",
"goal": "Read intent, record results and progress without a repository",
"dataState": "No repository or MR",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Ticket detail",
"fullPage": true
},
{
"id": "resolution",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-thread-composer textarea"
}
],
"fullPage": true
}
]
},
{
"id": "read-only",
"label": "Investigation without review",
"path": "/w/tickets/tickets/T-2",
"goal": "Use read-only resources without requiring write or MR",
"dataState": "Read-only target",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Ticket detail",
"fullPage": true
},
{
"id": "resolution",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-thread-composer textarea"
}
],
"fullPage": true
}
]
},
{
"id": "review",
"label": "Independent review before merge",
"path": "/w/tickets/tickets/T-3",
"goal": "Separate progress from actual MR review and integration",
"dataState": "Open MR, unavailable source observation",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Ticket detail",
"fullPage": true
},
{
"id": "resolution",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-thread-composer textarea"
}
],
"fullPage": true
}
]
},
{
"id": "launch",
"label": "Natural request with optional recipe and resources",
"path": "/w/tickets/workers/new?ticketId=T-1&ticketTitle=Compare%20options%20without%20deciding&initialInput=Return%20options%20without%20a%20conclusion.%20Review%20is%20unnecessary.",
"goal": "Choose the general Ticket worker, no mandatory repository or Flow",
"dataState": "Member with embedded and remote Runtimes, read-only external grant available but not claimed",
"ready": {
"kind": "selector",
"selector": ".worker-launch-form"
},
"capturePoints": [
{
"id": "initial",
"label": "Ticket launch",
"fullPage": true
}
]
},
{
"id": "list",
"label": "Member creates a repository-free Ticket",
"path": "/w/tickets/tickets",
"goal": "Search one server-ordered Ticket list with typed qualifiers; create without a repository",
"dataState": "Default open cases; closed reason search and optional creation",
"ready": {
"kind": "selector",
"selector": ".ticket-list-row"
},
"capturePoints": [
{
"id": "initial",
"label": "Case list",
"fullPage": true
},
{
"id": "create",
"label": "Optional resources",
"interaction": [
{
"action": "click",
"selector": "button:has-text(\"Add Ticket\")"
}
],
"ready": {
"kind": "selector",
"selector": ".ticket-create-form"
},
"fullPage": true
},
{
"id": "reason-query",
"label": "Closed cases with a current completed reason",
"interaction": [
{
"action": "click",
"selector": ".ticket-panel-controls button:has-text(\"Cancel\")"
},
{
"action": "fill",
"selector": "input[aria-label=\"Search tickets\"]",
"value": "state:closed reason:completed"
},
{
"action": "click",
"selector": "form[aria-label=\"Search tickets\"] button:has-text(\"Search\")"
}
],
"ready": {
"kind": "selector",
"selector": ".ticket-list-row:has(.ticket-list-key:text-is(\"T-4\"))"
},
"fullPage": true
}
]
},
{
"id": "orchestrator",
"path": "/w/tickets/orchestrator",
"label": "Current self-reported handling",
"goal": "Current self-reported handling",
"dataState": "Waiting, inprogress and done independent of case",
"ready": {
"kind": "selector",
"selector": ".orchestrator-assignments"
},
"capturePoints": [
{
"id": "initial",
"label": "Current self-reported handling",
"fullPage": true
},
{
"id": "last-case",
"label": "Closed case and final handling result",
"interaction": [
{
"action": "press",
"selector": ".orchestrator-assignment:last-child",
"key": "End"
}
],
"fullPage": true
}
]
},
{
"id": "closed",
"path": "/w/tickets/tickets/T-4",
"label": "Closed case and retained history",
"goal": "Closed case and retained history",
"dataState": "Completed closure and replaced/unassigned history",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Closed case and retained history",
"fullPage": true
}
]
},
{
"id": "permission",
"path": "/w/tickets-readonly/tickets/T-2",
"label": "Read-only assignment",
"goal": "Read-only assignment",
"dataState": "Backend assignment eligibility denied",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Read-only assignment",
"fullPage": true
}
]
},
{
"id": "long",
"path": "/w/tickets-long/tickets?q=",
"label": "Long list titles and handling",
"goal": "Long list titles and handling",
"dataState": "Long titles and multiline results",
"ready": {
"kind": "selector",
"selector": ".ticket-list-row"
},
"capturePoints": [
{
"id": "initial",
"label": "Long list titles and handling",
"fullPage": true
},
{
"id": "last-case",
"label": "Closed case and final handling result",
"interaction": [
{
"action": "press",
"selector": ".ticket-list-rows > li:last-child .ticket-list-row",
"key": "End"
}
],
"fullPage": true
}
]
},
{
"id": "empty",
"path": "/w/tickets-empty/orchestrator",
"label": "No current assignments",
"goal": "No current assignments",
"dataState": "Empty response",
"ready": {
"kind": "selector",
"selector": ".orchestrator-assignments"
},
"capturePoints": [
{
"id": "initial",
"label": "No current assignments",
"fullPage": true
}
]
},
{
"id": "error",
"path": "/w/tickets-error/tickets",
"label": "Query failure recovery",
"goal": "Query failure recovery",
"dataState": "503 query, single list error and retry",
"ready": {
"kind": "selector",
"selector": "[role=alert]"
},
"capturePoints": [
{
"id": "initial",
"label": "Query failure recovery",
"fullPage": true
}
]
},
{
"id": "unknown",
"path": "/w/tickets-unknown/orchestrator",
"label": "Unknown historical handling",
"goal": "Unknown historical handling",
"dataState": "Null handling without inference",
"ready": {
"kind": "selector",
"selector": ".orchestrator-assignments"
},
"capturePoints": [
{
"id": "initial",
"label": "Unknown historical handling",
"fullPage": true
}
]
},
{
"id": "running",
"path": "/w/tickets-running/tickets/T-2",
"label": "Waiting with running Orchestrator Worker",
"goal": "Waiting with running Orchestrator Worker",
"dataState": "Waiting remains waiting while Worker is running",
"ready": {
"kind": "selector",
"selector": ".ticket-detail-header"
},
"capturePoints": [
{
"id": "initial",
"label": "Waiting with running Orchestrator Worker",
"fullPage": true
}
]
},
{
"id": "mixed",
"path": "/w/tickets/tickets?q=",
"label": "Explicit empty query includes both case states",
"goal": "Scan open and closed cases in one server-ordered list",
"dataState": "Open+done, open+waiting, inprogress with MR, closed with history",
"ready": {
"kind": "selector",
"selector": ".ticket-list-row:has(.ticket-list-key:text-is(\"T-4\"))"
},
"capturePoints": [
{
"id": "initial",
"label": "Mixed-state flat list",
"fullPage": true
}
]
},
{
"id": "list-empty",
"path": "/w/tickets-empty/tickets?q=",
"label": "No matching Tickets",
"goal": "Distinguish an empty list from a failed read",
"dataState": "Empty response",
"ready": {
"kind": "selector",
"selector": ".ticket-list :text-is(\"No tickets match this query.\")"
},
"capturePoints": [
{
"id": "initial",
"label": "Empty Ticket list",
"fullPage": true
}
]
},
{
"id": "invalid-query",
"path": "/w/tickets/tickets?q=state%3Aclose",
"label": "Invalid recognized state qualifier",
"goal": "Correct a query without issuing a broad fallback read",
"dataState": "Rejected close alias",
"ready": {
"kind": "selector",
"selector": "[role=alert]"
},
"capturePoints": [
{
"id": "initial",
"label": "Query validation error",
"fullPage": true
}
]
}
],
"processes": [
{
"id": "ticket-fixture",
"command": "deno",
"cwd": "..",
"args": [
"run",
"--allow-net",
"--allow-read",
"browser-tests/ticket_fixture_server.ts",
"15289",
"../../web/workspace/build"
],
"readyUrl": "http://127.0.0.1:15289/health"
}
]
}