Add EvalStatus message handling and UI display for IPC client#29
Add EvalStatus message handling and UI display for IPC client#29jsfakian wants to merge 1 commit intolf-edge:mainfrom
Conversation
jsfakian
commented
Feb 18, 2026
- Add EvalStatus struct with evaluation platform status fields
- Extend IpcMessage enum to support EvalStatus variant
- Create EvalStatusPage UI component to display eval information
- Add EvalStatus tab to main navigation
- Implement message handling in application layer
- Add EvalStatus struct with evaluation platform status fields - Extend IpcMessage enum to support EvalStatus variant - Create EvalStatusPage UI component to display eval information - Add EvalStatus tab to main navigation - Implement message handling in application layer Signed-off-by: Ioannis Sfakianakis <jsfakas@gmail.com>
There was a problem hiding this comment.
Pull request overview
Adds end-to-end support for receiving an EvalStatus IPC message, storing it in the model, and presenting it as a new UI tab.
Changes:
- Introduces
EvalStatusIPC type andIpcMessage::EvalStatusvariant. - Stores the latest
EvalStatusinMonitorModeland updates it in the application message handler. - Adds an
EvalStatusPageand wires it into the UI navigation.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| src/ui/ui.rs | Adds EvalStatus tab and registers the new page in the UI view stack. |
| src/ui/mod.rs | Exposes the new evalstatus_page module. |
| src/ui/evalstatus_page.rs | New UI page rendering evaluation status fields from the model. |
| src/model/model.rs | Adds eval_status field and updater on MonitorModel. |
| src/ipc/message.rs | Adds EvalStatus message variant and debug logging on decode. |
| src/ipc/eve_types.rs | Defines the EvalStatus struct for serde (de)serialization. |
| src/application.rs | Handles IpcMessage::EvalStatus by updating the model. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| } | ||
| _ => {} | ||
| } | ||
| // dumpt raw binary TPM logs to file |
There was a problem hiding this comment.
Typo in comment: 'dumpt' should be 'dump'.
| // dumpt raw binary TPM logs to file | |
| // dump raw binary TPM logs to file |
| Span::styled( | ||
| eval_status.current_slot.clone(), | ||
| Style::default().fg(Color::Cyan), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| Span::styled( | ||
| eval_status.phase.clone(), | ||
| Style::default().fg(Color::Cyan), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| Span::styled( | ||
| eval_status.note.clone(), | ||
| Style::default().fg(Color::Yellow), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| Span::styled( | ||
| eval_status.last_updated.clone(), | ||
| Style::default().fg(Color::Green), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| Span::styled( | ||
| eval_status.test_start_time.clone(), | ||
| Style::default().fg(Color::Green), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| Span::styled( | ||
| eval_status.inventory_dir.clone(), | ||
| Style::default().fg(Color::Cyan), | ||
| ), |
There was a problem hiding this comment.
These .clone() calls allocate new Strings on every render pass. Since the data is already borrowed for the duration of render, prefer passing string references (e.g., eval_status.current_slot.as_str() / &eval_status.current_slot) to Span::styled to avoid repeated allocations.
| let model = model.borrow(); | ||
|
|
||
| let text = if let Some(eval_status) = &model.eval_status { |
There was a problem hiding this comment.
This shadows the model: &Rc<Model> parameter name, which makes the subsequent code harder to read. Consider renaming the borrowed value to something like model_ref (or similar) to avoid shadowing and improve clarity.
| let model = model.borrow(); | |
| let text = if let Some(eval_status) = &model.eval_status { | |
| let model_ref = model.borrow(); | |
| let text = if let Some(eval_status) = &model_ref.eval_status { |