test(z-order): harden overlay audits (empty/off-screen guard, stable filter testid)#96
Merged
Merged
Conversation
From adversarial review of the @zOrder / @DiSmiSSaL suites: - assertOnTop now FAILS on a collapsed (zero-size) or off-screen overlay (previously empty/!fitsViewport silently counted as "on top"). - filter dropdowns get a stable data-testid="filter-dropdown" (ViewManager) and the test audits that instead of the app-wide-ambiguous ".absolute.top-full.z-50" selector, which could grade a different component's panel. - firstInViewport gets a few px of slack so sub-pixel / CI-rendering overflow doesn't silently skip a real on-screen trigger. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🧪 Comprehensive Test Suite
Full-stack smoke gate runs in the CI workflow. |
mvalancy
added a commit
that referenced
this pull request
Jun 18, 2026
Adds editable, timestamped status updates (like comments) to the node quick-edit popover, stored under metadata.statusNotes. Completes #96's primary ask. - New pure lib/statusNotes.ts (add/edit/delete/get) — unit-tested first (7/7), handles metadata as object OR JSON string. - NodeQuickEdit: "Status notes" section — add (timestamped), inline-edit, delete; metadata is serialized to a JSON STRING on write (the schema's metadata field is String — sending an object silently failed; that was the bug the reload test caught), parsed on read. - Quick-edit overlay sources field data from the Apollo nodes array (fresh) for position from the sim node, so reopened editors show saved values. Tests: statusNotes unit 7/7; node-quick-edit @quickedit 3/3 incl. "add a note → survives full reload → delete". THE GATE unaffected. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Hardens the already-merged
@zorder/@dismissalsuites against false confidence, from an adversarial review of the audit logic.assertOnTopnow fails on a collapsed or off-screen overlay. PreviouslyauditOnTopreturned{empty:true, coveredBy:[]}for a zero-size panel and the assertion only checkedcoveredBy— so a dropdown/modal that rendered collapsed (a real bug) passed. Nowemptymust be falsy andfitsViewporttrue..absolute.top-full.z-50, a class trio shared by several components (Calendar/Gantt/the create-modal status dropdown) —querySelectorcould grade the wrong panel. Addeddata-testid="filter-dropdown"(ViewManager) and audit that.firstInViewporttolerance. Gave the on-screen-trigger gate a few px of slack so sub-pixel/CI-rendering overflow doesn't silentlytest.skip()a real trigger.Verification
@zorder+@dismissal25/25 pass with the stricter assertions on local dev.🤖 Generated with Claude Code