ui: narrow panel ticket id column

This commit is contained in:
Keisuke Hirata 2026-06-12 18:50:14 +09:00
parent 466f90bdd5
commit 74b655df0e
No known key found for this signature in database

View File

@ -3034,7 +3034,7 @@ fn panel_action_header_line(total: usize, width: u16) -> Line<'static> {
} }
const TICKET_STATE_COLUMN_WIDTH: usize = 10; const TICKET_STATE_COLUMN_WIDTH: usize = 10;
const TICKET_ID_COLUMN_WIDTH: usize = 32; const TICKET_ID_COLUMN_WIDTH: usize = 13;
const POD_STATUS_COLUMN_WIDTH: usize = 18; const POD_STATUS_COLUMN_WIDTH: usize = 18;
fn panel_row_line(row: &PanelRow, selected: bool, width: u16) -> Line<'static> { fn panel_row_line(row: &PanelRow, selected: bool, width: u16) -> Line<'static> {
@ -3912,7 +3912,7 @@ mod tests {
#[test] #[test]
fn ticket_queue_notification_message_carries_routing_contract() { fn ticket_queue_notification_message_carries_routing_contract() {
let row = panel_test_ticket_row( let row = panel_test_ticket_row(
"route-ticket", "00001KTTW04W2",
"Route queued\nTicket", "Route queued\nTicket",
ActionPriority::ReadyForQueue, ActionPriority::ReadyForQueue,
NextUserAction::Queue, NextUserAction::Queue,
@ -3922,9 +3922,7 @@ mod tests {
let message = orchestrator_queue_notification_message(ticket); let message = orchestrator_queue_notification_message(ticket);
assert!( assert!(message.contains("Ticket `00001KTTW04W2`, title `Route queued Ticket`"));
message.contains("Ticket `20260606-000000-route-ticket`, title `Route queued Ticket`")
);
assert!(message.contains("human authorized Orchestrator routing")); assert!(message.contains("human authorized Orchestrator routing"));
assert!(message.contains("not an unattended scheduler")); assert!(message.contains("not an unattended scheduler"));
assert!(message.contains("Read the Ticket")); assert!(message.contains("Read the Ticket"));
@ -4068,7 +4066,7 @@ mod tests {
None, None,
)); ));
panel.rows.push(panel_test_ticket_row( panel.rows.push(panel_test_ticket_row(
"queue-me", "00001KTWPE3KQ",
"Queue Me", "Queue Me",
ActionPriority::ReadyForQueue, ActionPriority::ReadyForQueue,
NextUserAction::Queue, NextUserAction::Queue,
@ -4411,14 +4409,14 @@ mod tests {
#[test] #[test]
fn panel_ticket_rows_use_aligned_columns_before_title() { fn panel_ticket_rows_use_aligned_columns_before_title() {
let review_row = panel_test_ticket_row( let review_row = panel_test_ticket_row(
"workspace-panel-composer-targets", "00001KTX1QMG9",
"Workspace panel composer targets", "Workspace panel composer targets",
ActionPriority::ActiveWork, ActionPriority::ActiveWork,
NextUserAction::Wait, NextUserAction::Wait,
"inprogress", "inprogress",
); );
let ready_row = panel_test_ticket_row( let ready_row = panel_test_ticket_row(
"ticket-id", "00001KTTB479X",
"Long Ticket title that should be rendered after short columns", "Long Ticket title that should be rendered after short columns",
ActionPriority::ReadyForQueue, ActionPriority::ReadyForQueue,
NextUserAction::Queue, NextUserAction::Queue,
@ -4436,13 +4434,9 @@ mod tests {
assert_eq!(display_column(&ready_line, "ready"), state_start); assert_eq!(display_column(&ready_line, "ready"), state_start);
let review_id = review_row.ticket.as_ref().unwrap().id.as_str(); let review_id = review_row.ticket.as_ref().unwrap().id.as_str();
let ready_id = ready_row.ticket.as_ref().unwrap().id.as_str(); let ready_id = ready_row.ticket.as_ref().unwrap().id.as_str();
assert_eq!( assert_eq!(review_id.width(), TICKET_ID_COLUMN_WIDTH);
display_column( assert_eq!(ready_id.width(), TICKET_ID_COLUMN_WIDTH);
&review_line, assert_eq!(display_column(&review_line, review_id), id_start);
&truncate_with_ellipsis(review_id, TICKET_ID_COLUMN_WIDTH)
),
id_start
);
assert_eq!(display_column(&ready_line, ready_id), id_start); assert_eq!(display_column(&ready_line, ready_id), id_start);
assert_eq!( assert_eq!(
display_column(&review_line, "Workspace panel composer targets"), display_column(&review_line, "Workspace panel composer targets"),
@ -4457,18 +4451,19 @@ mod tests {
#[test] #[test]
fn panel_ticket_title_truncates_after_stable_columns() { fn panel_ticket_title_truncates_after_stable_columns() {
let row = panel_test_ticket_row( let row = panel_test_ticket_row(
"ticket-id", "00001KTTB479X",
"Very long Ticket title that should truncate only after the aligned short columns", "Very long Ticket title that should truncate only after the aligned short columns",
ActionPriority::ReadyForQueue, ActionPriority::ReadyForQueue,
NextUserAction::Queue, NextUserAction::Queue,
"ready", "ready",
); );
let line = plain_line(&panel_row_line(&row, false, 112)); let line = plain_line(&panel_row_line(&row, false, 58));
let title_start = 2 + TICKET_STATE_COLUMN_WIDTH + 1 + TICKET_ID_COLUMN_WIDTH + 1; let title_start = 2 + TICKET_STATE_COLUMN_WIDTH + 1 + TICKET_ID_COLUMN_WIDTH + 1;
assert_eq!(line.width(), 112); assert_eq!(line.width(), 58);
let row_id = row.ticket.as_ref().unwrap().id.as_str(); let row_id = row.ticket.as_ref().unwrap().id.as_str();
assert_eq!(row_id.width(), TICKET_ID_COLUMN_WIDTH);
assert_eq!( assert_eq!(
display_column(&line, row_id), display_column(&line, row_id),
title_start - TICKET_ID_COLUMN_WIDTH - 1 title_start - TICKET_ID_COLUMN_WIDTH - 1
@ -5173,6 +5168,7 @@ mod tests {
launch: TicketRoleLaunchResult { launch: TicketRoleLaunchResult {
plan: client::ticket_role::TicketRoleLaunchPlan { plan: client::ticket_role::TicketRoleLaunchPlan {
workspace_root: PathBuf::from("/tmp/workspace"), workspace_root: PathBuf::from("/tmp/workspace"),
cwd: None,
original_workspace_root: PathBuf::from("/tmp/workspace"), original_workspace_root: PathBuf::from("/tmp/workspace"),
target_workspace_root: PathBuf::from("/tmp/workspace"), target_workspace_root: PathBuf::from("/tmp/workspace"),
implementation_worktree_root: PathBuf::from("/tmp/workspace/.worktree"), implementation_worktree_root: PathBuf::from("/tmp/workspace/.worktree"),
@ -5397,14 +5393,14 @@ mod tests {
} }
fn panel_test_ticket_row( fn panel_test_ticket_row(
id_suffix: &str, id: &str,
title: &str, title: &str,
priority: ActionPriority, priority: ActionPriority,
next_action: NextUserAction, next_action: NextUserAction,
state: &str, state: &str,
) -> PanelRow { ) -> PanelRow {
let ticket = crate::workspace_panel::TicketPanelEntry { let ticket = crate::workspace_panel::TicketPanelEntry {
id: format!("20260606-000000-{id_suffix}"), id: id.to_string(),
title: title.to_string(), title: title.to_string(),
priority: "P2".to_string(), priority: "P2".to_string(),
workflow_state: TicketWorkflowState::parse(state) workflow_state: TicketWorkflowState::parse(state)