Conversation
- Stop writing unchanged values to screenValues in updateValues once the aging fade is done so widgets don't re-render on every poll - Export AGING_* constants from VWidget.js so the screen knows how many polls the fade takes - Add INST ccsds.txt and hs_adcs.txt 1000 item screens to measure mostly static vs constantly changing values Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3957 +/- ##
==========================================
- Coverage 80.14% 80.14% -0.01%
==========================================
Files 901 901
Lines 68356 68386 +30
Branches 2645 2706 +61
==========================================
+ Hits 54784 54805 +21
- Misses 12907 12916 +9
Partials 665 665
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
AI adversarial review✅ Claude and Codex converged after 3 turn(s) with 1 fix commit(s). Reviewed commit: Open concerns for a human
Turn-by-turn logTurn 1: Claude (no changes)I found no correctness defects in the Openc3Screen.vue / VWidget.js change, so I made no edits. Once a value has stayed the same for AGING_UPDATES (10) polls, the fade from 80 down to 30 has finished, and skipping further writes to screenValues changes nothing on screen. A change to the value or limits state (including STALE) resets the count. addItem, re-parsing the screen and frozen values all handle the count correctly. None of the widgets I checked relies on a counter bump for anything other than the fade.
Turn 2: Codex (commit 0378193b2)Fixed a BigInt comparison regression that could abort telemetry screen updates. Diff checks passed; tests were unavailable and lint could not run because pnpm is missing.
Turn 3: Claude (no changes)The change that skips unchanged values is correct: pushes stop only after the widget has finished fading (AGING_UPDATES polls). A value or limits change resets the count, and addItem resets it too when a widget is remounted. Codex's switch to lodash isEqual correctly handles arrays containing BigInts.
Warning The fix commits above could not be pushed (the branch probably moved); they were discarded. |
|
Per the AI review: note that I'm not using |
|
I had the tokens messed up so the AI Review couldn't automatically fix. You can still get its review artifacts from the Action artifacts and have it implement manually |



What changed
Why it changed
Performance rendering screens with a lot of static items
Testing strategy
Created new screens with 1000 items: ccsds (mostly static) and hs_adcs (totally dynamic). This gives us a way to test performance between the 2.
Review notes
Further enhancements would be to not use
v-text-fieldand instead create a lightweight element that has no child components to update. This would require additional effort to match look and feel and avoid losing functionality.Here's a performance plot of the CCSDS screen which contains 1000 mostly stale items. The thing to note is the drop in listeners and the width of the yellow bars from about ~115ms to 29ms once the telemetry aging is complete:
Here's the screen (still only showing half):
