test(tui): add off-screen render coverage #93

Merged
Lochnair merged 4 commits from test/tui-rendering into main 2026-08-15 02:55:09 +00:00
Lochnair commented 2026-08-14 18:24:38 +00:00 (Migrated from github.com)

Summary

Test-only PR. No production code changed.

  • The TUI had good coverage of state transitions and graph-viewport arithmetic, but nothing ever rendered a frame, so layout selection, panel presence, and the text a user actually sees were unprotected.
  • Eleven tests drive the existing draw_dashboard(Frame, &TuiState) seam through Ratatui's TestBackend and assert on visible rows:
    • below the minimum width, and below the minimum height — only the resize notice, no status line;
    • the smallest usable terminal (MIN_WIDTH × MIN_HEIGHT) and a typical 80×24 compact terminal — header, packet counters, status line, and the absence of the large-only panels;
    • a large terminal — every panel present, status line on the last bordered row;
    • a large terminal with active sample data — session token, remote, last sequence, effective RTT, warning text, last-warning row;
    • a failed run — error status on the status line and the error message on screen;
    • multi-target — the target table replaces the packet panel, all labels visible, first-target panel titles;
    • the graph view in single- and multi-target mode — chart title and live marker, dashboard panels absent;
    • paused display with dropped events — both reported on the status line.
  • Assertions are selected text and layout facts (which row carries the status line, which panels are present at which size), not full-screen golden snapshots, so ordinary cosmetic edits will not churn them.

Behavior

No behavior change. The existing pure graph-viewport and state tests are untouched.

One observation worth recording, deliberately not changed here: at 140–180 columns the timing panel is a few columns narrower than its own row format, so every metric row wraps onto a second line and the last rows (send call, timer error) fall off the bottom of the panel. That is a panel-proportion tradeoff in production layout, not a bug this test PR should quietly change, so the tests assert on metrics that are visible today rather than pinning the wrap.

Scope

Explicitly not changed:

  • ui.rs was not split into render/state/layout modules.
  • No view-model or render-model abstraction was introduced.
  • No production rendering code, layout constant, or widget was modified.
  • Existing pure viewport/arithmetic tests were preserved as-is.

Verification

Run from the task worktree, all successful:

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets --all-features --locked
  • cargo test --workspace --all-targets --all-features --locked
  • cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
  • RUSTDOCFLAGS="-D warnings" cargo doc --workspace --all-features --no-deps --locked
  • cargo check -p irtt-cli --no-default-features --features client --all-targets --locked
  • cargo check -p irtt-cli --no-default-features --features tui --all-targets --locked
  • cargo check -p irtt-cli --no-default-features --features server --all-targets --locked
  • git diff --check
## Summary **Test-only PR.** No production code changed. - The TUI had good coverage of state transitions and graph-viewport arithmetic, but nothing ever rendered a frame, so layout selection, panel presence, and the text a user actually sees were unprotected. - Eleven tests drive the existing `draw_dashboard(Frame, &TuiState)` seam through Ratatui's `TestBackend` and assert on visible rows: - below the minimum width, and below the minimum height — only the resize notice, no status line; - the smallest usable terminal (`MIN_WIDTH` × `MIN_HEIGHT`) and a typical 80×24 compact terminal — header, packet counters, status line, and the absence of the large-only panels; - a large terminal — every panel present, status line on the last bordered row; - a large terminal with active sample data — session token, remote, last sequence, effective RTT, warning text, last-warning row; - a failed run — error status on the status line and the error message on screen; - multi-target — the target table replaces the packet panel, all labels visible, first-target panel titles; - the graph view in single- and multi-target mode — chart title and live marker, dashboard panels absent; - paused display with dropped events — both reported on the status line. - Assertions are selected text and layout facts (which row carries the status line, which panels are present at which size), not full-screen golden snapshots, so ordinary cosmetic edits will not churn them. ## Behavior No behavior change. The existing pure graph-viewport and state tests are untouched. One observation worth recording, deliberately **not** changed here: at 140–180 columns the `timing` panel is a few columns narrower than its own row format, so every metric row wraps onto a second line and the last rows (`send call`, `timer error`) fall off the bottom of the panel. That is a panel-proportion tradeoff in production layout, not a bug this test PR should quietly change, so the tests assert on metrics that are visible today rather than pinning the wrap. ## Scope Explicitly not changed: - `ui.rs` was not split into render/state/layout modules. - No view-model or render-model abstraction was introduced. - No production rendering code, layout constant, or widget was modified. - Existing pure viewport/arithmetic tests were preserved as-is. ## Verification Run from the task worktree, all successful: - `cargo fmt --all -- --check` - `cargo check --workspace --all-targets --all-features --locked` - `cargo test --workspace --all-targets --all-features --locked` - `cargo clippy --workspace --all-targets --all-features --locked -- -D warnings` - `RUSTDOCFLAGS="-D warnings" cargo doc --workspace --all-features --no-deps --locked` - `cargo check -p irtt-cli --no-default-features --features client --all-targets --locked` - `cargo check -p irtt-cli --no-default-features --features tui --all-targets --locked` - `cargo check -p irtt-cli --no-default-features --features server --all-targets --locked` - `git diff --check`
chatgpt-codex-connector[bot] (Migrated from github.com) reviewed 2026-08-14 18:27:36 +00:00
chatgpt-codex-connector[bot] (Migrated from github.com) left a comment

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 17d3fed7c5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

### 💡 Codex Review Here are some automated review suggestions for this pull request. **Reviewed commit:** `17d3fed7c5` <details> <summary>ℹ️ About Codex in GitHub</summary> <br/> [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". </details>
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 18:27:36 +00:00

P2 Badge Assert the warning value on its sample row

If the sample panel regresses to rendering last warning: - while the recent-events panel still contains wrong token, both of these whole-frame substring assertions continue to pass, so the claimed last-warning-row coverage does not protect that user-visible behavior. Inspect the sample-panel row (or assert the combined last warning: ...wrong token text) instead.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Assert the warning value on its sample row** If the sample panel regresses to rendering `last warning: -` while the recent-events panel still contains `wrong token`, both of these whole-frame substring assertions continue to pass, so the claimed last-warning-row coverage does not protect that user-visible behavior. Inspect the sample-panel row (or assert the combined `last warning: ...wrong token` text) instead. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/17d3fed7c5dc99020c622a8aadfde85063667491/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
Lochnair (Migrated from github.com) reviewed 2026-08-14 18:49:42 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 18:49:42 +00:00

Good catch — the assertion now locates the last warning: row and requires that row to contain the warning, so a regression to the placeholder fails even while the recent-events panel still shows it.

🤖 Addressed by Claude Code

Good catch — the assertion now locates the `last warning:` row and requires that row to contain the warning, so a regression to the placeholder fails even while the recent-events panel still shows it. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
chatgpt-codex-connector[bot] (Migrated from github.com) reviewed 2026-08-14 18:55:00 +00:00
chatgpt-codex-connector[bot] (Migrated from github.com) left a comment

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2062535c20

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

### 💡 Codex Review Here are some automated review suggestions for this pull request. **Reviewed commit:** `2062535c20` <details> <summary>ℹ️ About Codex in GitHub</summary> <br/> [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". </details>
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 18:55:00 +00:00

P2 Badge Scope target labels to the target table

If the alpha or beta row disappears from the target table, these whole-frame assertions still pass: alpha is also rendered as the first target in the header, while the injected beta reply puts that label in the recent-events panel and graph legend; the remaining gamma row is enough to prove only that some table content survived. Restrict these checks to the rows occupied by the target panel, or assert each label together with its table-row fields, so the claimed table coverage protects every visible target row.

AGENTS.md reference: AGENTS.md:L89-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Scope target labels to the target table** If the `alpha` or `beta` row disappears from the target table, these whole-frame assertions still pass: `alpha` is also rendered as the first target in the header, while the injected `beta` reply puts that label in the recent-events panel and graph legend; the remaining `gamma` row is enough to prove only that some table content survived. Restrict these checks to the rows occupied by the target panel, or assert each label together with its table-row fields, so the claimed table coverage protects every visible target row. AGENTS.md reference: [AGENTS.md:L89-L89](https://github.com/Lochnair/irtt-rs/blob/2062535c20459a097a098d664a8f75e17c9cfcff/AGENTS.md#L89-L89) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 18:55:00 +00:00

P2 Badge Assert the RTT value on the sample metric row

If the sample panel regresses to rendering a missing or incorrect effective RTT, this test still passes because the recent-events panel independently contains reply seq=11 effective=2.5ms, while the separate sequence assertion only proves that another sample row rendered. Find the row containing raw / adjusted / effective: and assert 2.5ms on that row so the intended sample-panel value is actually protected.

AGENTS.md reference: AGENTS.md:L89-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Assert the RTT value on the sample metric row** If the sample panel regresses to rendering a missing or incorrect effective RTT, this test still passes because the recent-events panel independently contains `reply seq=11 effective=2.5ms`, while the separate sequence assertion only proves that another sample row rendered. Find the row containing `raw / adjusted / effective:` and assert `2.5ms` on that row so the intended sample-panel value is actually protected. AGENTS.md reference: [AGENTS.md:L89-L89](https://github.com/Lochnair/irtt-rs/blob/2062535c20459a097a098d664a8f75e17c9cfcff/AGENTS.md#L89-L89) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 18:55:00 +00:00

P2 Badge Check the timing panel title instead of metric spacing

If a compact-layout regression renders a condensed or otherwise reformatted timing panel, this negative assertion can still pass because it searches for one incidental sequence of spaces from the current large timing-row formatter rather than for the panel itself. Check for the unique timing panel title, or inspect the compact layout's panel regions, so the test protects the stated absence of that panel independently of metric formatting.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Check the timing panel title instead of metric spacing** If a compact-layout regression renders a condensed or otherwise reformatted timing panel, this negative assertion can still pass because it searches for one incidental sequence of spaces from the current large timing-row formatter rather than for the panel itself. Check for the unique `timing` panel title, or inspect the compact layout's panel regions, so the test protects the stated absence of that panel independently of metric formatting. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/2062535c20459a097a098d664a8f75e17c9cfcff/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
@@ -2938,0 +3112,4 @@
let state = active_dashboard_state();
let rows = render_rows(&state, MIN_WIDTH, MIN_HEIGHT);
let text = rows.join("\n");
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 18:55:00 +00:00

P2 Badge Assert that dashboard panels are absent below minimum height

If the short-terminal path regresses to rendering the resize notice together with ordinary dashboard content while still omitting the status line, this test continues to pass because it only checks for the notice and the absence of q quit. The corresponding minimum-width test explicitly rejects the packet panel; add an equivalent negative dashboard-panel assertion here so the test actually protects its stated resize-notice-only behavior.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Assert that dashboard panels are absent below minimum height** If the short-terminal path regresses to rendering the resize notice together with ordinary dashboard content while still omitting the status line, this test continues to pass because it only checks for the notice and the absence of `q quit`. The corresponding minimum-width test explicitly rejects the packet panel; add an equivalent negative dashboard-panel assertion here so the test actually protects its stated resize-notice-only behavior. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/2062535c20459a097a098d664a8f75e17c9cfcff/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:01:31 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:01:30 +00:00

Agreed — labels are now matched against the target table's own columns (rows sliced at the panel separator), each with its status column, plus the replying target's last sample; verified it fails when a table row is dropped.

🤖 Addressed by Claude Code

Agreed — labels are now matched against the target table's own columns (rows sliced at the panel separator), each with its status column, plus the replying target's last sample; verified it fails when a table row is dropped. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:01:32 +00:00
@@ -2938,0 +3112,4 @@
let state = active_dashboard_state();
let rows = render_rows(&state, MIN_WIDTH, MIN_HEIGHT);
let text = rows.join("\n");
Lochnair (Migrated from github.com) commented 2026-08-14 19:01:32 +00:00

Agreed — the minimum-height case now rejects dashboard content (packets) as the minimum-width case does.

🤖 Addressed by Claude Code

Agreed — the minimum-height case now rejects dashboard content (`packets`) as the minimum-width case does. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:01:34 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:01:34 +00:00

Agreed, and stronger than suggested: asserting 2.5ms on that row still passed with the effective field dropped, because the fixture's adjusted and effective RTT coincide — so the whole row is now asserted, verified against that exact regression.

🤖 Addressed by Claude Code

Agreed, and stronger than suggested: asserting `2.5ms` on that row still passed with the effective field dropped, because the fixture's adjusted and effective RTT coincide — so the whole row is now asserted, verified against that exact regression. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:01:35 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:01:35 +00:00

Agreed — replaced the spacing-dependent check with the timing panel title, confirmed absent from the compact frame.

🤖 Addressed by Claude Code

Agreed — replaced the spacing-dependent check with the `timing` panel title, confirmed absent from the compact frame. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
chatgpt-codex-connector[bot] (Migrated from github.com) reviewed 2026-08-14 19:06:17 +00:00
chatgpt-codex-connector[bot] (Migrated from github.com) left a comment

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c12617a669

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

### 💡 Codex Review Here are some automated review suggestions for this pull request. **Reviewed commit:** `c12617a669` <details> <summary>ℹ️ About Codex in GitHub</summary> <br/> [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". </details>
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 19:06:17 +00:00

P2 Badge Scope the session token assertion to the header

The SessionStarted fixture also appends session started token=0xabcd to the recent-events panel, so this whole-frame assertion still passes if the session header regresses to displaying session: -. Locate the header’s session row and assert the token there so this test actually protects the user-visible session identity it claims to cover.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Scope the session token assertion to the header** The `SessionStarted` fixture also appends `session started token=0xabcd` to the recent-events panel, so this whole-frame assertion still passes if the session header regresses to displaying `session: -`. Locate the header’s session row and assert the token there so this test actually protects the user-visible session identity it claims to cover. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/c12617a669d8bf8126ffd977a27fda86d125ca57/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 19:06:17 +00:00

P2 Badge Reject every dashboard panel in the graph-view test

These negative checks only exclude the recent-events and sample panels; a regression that also renders the packet or timing panel alongside the graph would still pass, despite the test claiming the graph replaces the dashboard panels. Assert the absence of those uniquely titled panels as well so the view-selection behavior is fully protected.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Reject every dashboard panel in the graph-view test** These negative checks only exclude the recent-events and sample panels; a regression that also renders the packet or timing panel alongside the graph would still pass, despite the test claiming the graph replaces the dashboard panels. Assert the absence of those uniquely titled panels as well so the view-selection behavior is fully protected. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/c12617a669d8bf8126ffd977a27fda86d125ca57/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 19:06:18 +00:00

P2 Badge Scope graph-view target labels to the target table

Unlike the corrected dashboard case, this separate graph-view test still searches the entire frame for beta; because the reply creates a chart series named beta, the assertion passes even if the target table drops that row. Inspect the target-table rows here as well so every target shown in the graph view is actually protected.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Scope graph-view target labels to the target table** Unlike the corrected dashboard case, this separate graph-view test still searches the entire frame for `beta`; because the reply creates a chart series named `beta`, the assertion passes even if the target table drops that row. Inspect the target-table rows here as well so every target shown in the graph view is actually protected. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/c12617a669d8bf8126ffd977a27fda86d125ca57/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] (Migrated from github.com) commented 2026-08-14 19:06:18 +00:00

P2 Badge Scope the warning assertion to the recent-events panel

The sample panel’s last warning: WrongToken: wrong token row also contains both warning and wrong token, so this predicate passes even if the warning disappears from recent events entirely. Restrict the search to the recent-events panel or require the event-specific warning WrongToken: wrong token text so that panel’s behavior is independently protected.

AGENTS.md reference: AGENTS.md:L85-L89

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Scope the warning assertion to the recent-events panel** The sample panel’s `last warning: WrongToken: wrong token` row also contains both `warning` and `wrong token`, so this predicate passes even if the warning disappears from recent events entirely. Restrict the search to the recent-events panel or require the event-specific `warning WrongToken: wrong token` text so that panel’s behavior is independently protected. AGENTS.md reference: [AGENTS.md:L85-L89](https://github.com/Lochnair/irtt-rs/blob/c12617a669d8bf8126ffd977a27fda86d125ca57/AGENTS.md#L85-L89) Useful? React with 👍 / 👎.
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:12:37 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:12:37 +00:00

Agreed — the token is now asserted on the session panel's own row via a new panel_contains helper; verified it fails when the header regresses to session: -.

🤖 Addressed by Claude Code

Agreed — the token is now asserted on the session panel's own row via a new `panel_contains` helper; verified it fails when the header regresses to `session: -`. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:12:38 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:12:38 +00:00

Agreed — the graph-view test now rejects all four dashboard panels (packets, timing, recent events, sample) by panel title; verified it fails when the packet panel is drawn alongside the graph.

🤖 Addressed by Claude Code

Agreed — the graph-view test now rejects all four dashboard panels (packets, timing, recent events, sample) by panel title; verified it fails when the packet panel is drawn alongside the graph. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:12:39 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:12:39 +00:00

Agreed — the graph-view case now uses the same table-scoped check as the dashboard case; verified it fails when a target table row is dropped.

🤖 Addressed by Claude Code

Agreed — the graph-view case now uses the same table-scoped check as the dashboard case; verified it fails when a target table row is dropped. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Lochnair (Migrated from github.com) reviewed 2026-08-14 19:12:41 +00:00
@@ -2935,4 +2936,353 @@ mod tests {
assert_eq!(graph.server_to_client_ns, Some(30_000));
Lochnair (Migrated from github.com) commented 2026-08-14 19:12:41 +00:00

Agreed — the recent-events check now requires the event-specific warning WrongToken: wrong token text within that panel's own rows; verified it fails when the event line loses its message.

🤖 Addressed by Claude Code

Agreed — the recent-events check now requires the event-specific `warning WrongToken: wrong token` text within that panel's own rows; verified it fails when the event line loses its message. _🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Sign in to join this conversation.