Skip to content

test(z-order): harden overlay audits (empty/off-screen guard, stable filter testid)#96

Merged
mvalancy merged 1 commit into
devfrom
test/harden-overlay-audits
Jun 17, 2026
Merged

test(z-order): harden overlay audits (empty/off-screen guard, stable filter testid)#96
mvalancy merged 1 commit into
devfrom
test/harden-overlay-audits

Conversation

@mvalancy

Copy link
Copy Markdown
Member

What

Hardens the already-merged @zorder / @dismissal suites against false confidence, from an adversarial review of the audit logic.

  • assertOnTop now fails on a collapsed or off-screen overlay. Previously auditOnTop returned {empty:true, coveredBy:[]} for a zero-size panel and the assertion only checked coveredBy — so a dropdown/modal that rendered collapsed (a real bug) passed. Now empty must be falsy and fitsViewport true.
  • Stable filter-dropdown testid. The filter test audited .absolute.top-full.z-50, a class trio shared by several components (Calendar/Gantt/the create-modal status dropdown) — querySelector could grade the wrong panel. Added data-testid="filter-dropdown" (ViewManager) and audit that.
  • firstInViewport tolerance. Gave the on-screen-trigger gate a few px of slack so sub-pixel/CI-rendering overflow doesn't silently test.skip() a real trigger.

Verification

  • @zorder + @dismissal 25/25 pass with the stricter assertions on local dev.

🤖 Generated with Claude Code

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>
@github-actions

Copy link
Copy Markdown

🧪 Comprehensive Test Suite

  • Unit suites (Node 18.x & 20.x) — core, web, server, mcp-server: ✅ passed
  • Installer & deploy config: ✅ passed

Full-stack smoke gate runs in the CI workflow.

@mvalancy mvalancy merged commit 4258580 into dev Jun 17, 2026
27 of 28 checks passed
@mvalancy mvalancy deleted the test/harden-overlay-audits branch June 17, 2026 11:01
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant