feat(ticket): expose case tags and independent assignment handling

This commit is contained in:
2026-10-12 07:33:11 +09:00
parent 56795fb92c
commit 9b0d42fdbc
79 changed files with 9326 additions and 713 deletions
@@ -0,0 +1,123 @@
{
"schemaVersion": 1,
"id": "ticket-principals",
"title": "Observed assignment and responsibility principal choice",
"baseUrl": "http://127.0.0.1:15290",
"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": "principal",
"label": "Replace responsibility, not Worker liveness",
"path": "/w/tickets/tickets/T-2",
"goal": "Choose the target for a new observed assignment",
"dataState": "Open + waiting with retained prior assignment",
"ready": {
"kind": "selector",
"selector": ".ticket-handling"
},
"capturePoints": [
{
"id": "agent",
"label": "Default Workspace agent",
"interaction": [
{
"action": "click",
"selector": ".assignment-principal summary"
}
],
"fullPage": true
},
{
"id": "account",
"label": "Account target",
"interaction": [
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Home"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "ArrowDown"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Enter"
}
],
"ready": {
"kind": "selector",
"selector": ".assignment-principal input"
},
"fullPage": true
},
{
"id": "worker",
"label": "Worker principal, separate from actual Orchestrator Worker",
"interaction": [
{
"action": "press",
"selector": ".assignment-principal select",
"key": "End"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Enter"
}
],
"ready": {
"kind": "selector",
"selector": ".assignment-principal label:has-text(\"Runtime identity\")"
},
"fullPage": true
}
]
}
],
"processes": [
{
"id": "ticket-fixture",
"command": "deno",
"cwd": "..",
"args": [
"run",
"--allow-net",
"--allow-read",
"browser-tests/ticket_fixture_server.ts",
"15290",
"../../web/workspace/build"
],
"readyUrl": "http://127.0.0.1:15290/health"
}
]
}
@@ -0,0 +1,123 @@
{
"schemaVersion": 1,
"id": "ticket-principals",
"title": "Observed assignment and responsibility principal choice",
"baseUrl": "http://127.0.0.1:15290",
"colorScheme": "light",
"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": "principal",
"label": "Replace responsibility, not Worker liveness",
"path": "/w/tickets/tickets/T-2",
"goal": "Choose the target for a new observed assignment",
"dataState": "Open + waiting with retained prior assignment",
"ready": {
"kind": "selector",
"selector": ".ticket-handling"
},
"capturePoints": [
{
"id": "agent",
"label": "Default Workspace agent",
"interaction": [
{
"action": "click",
"selector": ".assignment-principal summary"
}
],
"fullPage": true
},
{
"id": "account",
"label": "Account target",
"interaction": [
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Home"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "ArrowDown"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Enter"
}
],
"ready": {
"kind": "selector",
"selector": ".assignment-principal input"
},
"fullPage": true
},
{
"id": "worker",
"label": "Worker principal, separate from actual Orchestrator Worker",
"interaction": [
{
"action": "press",
"selector": ".assignment-principal select",
"key": "End"
},
{
"action": "press",
"selector": ".assignment-principal select",
"key": "Enter"
}
],
"ready": {
"kind": "selector",
"selector": ".assignment-principal label:has-text(\"Runtime identity\")"
},
"fullPage": true
}
]
}
],
"processes": [
{
"id": "ticket-fixture",
"command": "deno",
"cwd": "..",
"args": [
"run",
"--allow-net",
"--allow-read",
"browser-tests/ticket_fixture_server.ts",
"15290",
"../../web/workspace/build"
],
"readyUrl": "http://127.0.0.1:15290/health"
}
]
}
+205 -22
View File
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"id": "tickets-dark",
"title": "Flexible Ticket progress and optional resources",
"title": "Ticket cases, classification and independent Orchestrator handling",
"baseUrl": "http://127.0.0.1:15289",
"colorScheme": "dark",
"reducedMotion": "reduce",
@@ -50,15 +50,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -83,15 +79,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -116,15 +108,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -153,8 +141,8 @@
"id": "list",
"label": "Member creates a repository-free Ticket",
"path": "/w/tickets/tickets",
"goal": "Create work from intent with optional resources, not a fixed delivery pipeline",
"dataState": "Three lightweight progress lanes, member normal operations",
"goal": "Server-filter open and closed cases by canonical tags and current principal",
"dataState": "Open+done, open+waiting, inprogress with MR, closed with history",
"ready": {
"kind": "selector",
"selector": ".ticket-kanban"
@@ -162,7 +150,7 @@
"capturePoints": [
{
"id": "initial",
"label": "Progress lanes",
"label": "Case list",
"fullPage": true
},
{
@@ -179,6 +167,201 @@
"selector": ".ticket-create-form"
},
"fullPage": true
},
{
"id": "last-case",
"label": "Closed case and final handling result",
"interaction": [
{
"action": "press",
"selector": ".ticket-lane[data-state=closed] .ticket-card",
"key": "End"
}
],
"fullPage": true
},
{
"id": "reason-filter",
"label": "Current close reason versus historical reason search",
"interaction": [
{
"action": "click",
"selector": ".ticket-panel-controls button:has-text(\"Cancel\")"
},
{
"action": "click",
"selector": ".ticket-reason-filter summary"
}
],
"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",
"label": "Long list titles and handling",
"goal": "Long list titles and handling",
"dataState": "Long titles and multiline results",
"ready": {
"kind": "selector",
"selector": ".ticket-kanban"
},
"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-lane[data-state=closed] .ticket-card",
"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, scoped errors and retry",
"ready": {
"kind": "selector",
"selector": ".ticket-lane-page-error"
},
"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
}
]
}
+205 -22
View File
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"id": "tickets",
"title": "Flexible Ticket progress and optional resources",
"title": "Ticket cases, classification and independent Orchestrator handling",
"baseUrl": "http://127.0.0.1:15289",
"colorScheme": "light",
"reducedMotion": "reduce",
@@ -50,15 +50,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -83,15 +79,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -116,15 +108,11 @@
},
{
"id": "resolution",
"label": "Resolution and MR state",
"label": "Reasoned case judgment",
"interaction": [
{
"action": "click",
"selector": ".ticket-close-card > summary"
},
{
"action": "click",
"selector": ".ticket-close-card textarea"
"selector": ".ticket-case-card textarea"
}
],
"fullPage": true
@@ -153,8 +141,8 @@
"id": "list",
"label": "Member creates a repository-free Ticket",
"path": "/w/tickets/tickets",
"goal": "Create work from intent with optional resources, not a fixed delivery pipeline",
"dataState": "Three lightweight progress lanes, member normal operations",
"goal": "Server-filter open and closed cases by canonical tags and current principal",
"dataState": "Open+done, open+waiting, inprogress with MR, closed with history",
"ready": {
"kind": "selector",
"selector": ".ticket-kanban"
@@ -162,7 +150,7 @@
"capturePoints": [
{
"id": "initial",
"label": "Progress lanes",
"label": "Case list",
"fullPage": true
},
{
@@ -179,6 +167,201 @@
"selector": ".ticket-create-form"
},
"fullPage": true
},
{
"id": "last-case",
"label": "Closed case and final handling result",
"interaction": [
{
"action": "press",
"selector": ".ticket-lane[data-state=closed] .ticket-card",
"key": "End"
}
],
"fullPage": true
},
{
"id": "reason-filter",
"label": "Current close reason versus historical reason search",
"interaction": [
{
"action": "click",
"selector": ".ticket-panel-controls button:has-text(\"Cancel\")"
},
{
"action": "click",
"selector": ".ticket-reason-filter summary"
}
],
"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",
"label": "Long list titles and handling",
"goal": "Long list titles and handling",
"dataState": "Long titles and multiline results",
"ready": {
"kind": "selector",
"selector": ".ticket-kanban"
},
"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-lane[data-state=closed] .ticket-card",
"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, scoped errors and retry",
"ready": {
"kind": "selector",
"selector": ".ticket-lane-page-error"
},
"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
}
]
}