Skip to content

fix(web): sweep-2 fixes — hidden-tab SSE, query invalidation, heartbeat notifications, stdin actions, share revoke - #562

Merged
ValgulNecron merged 8 commits into
masterfrom
fix/sweep2-web
Oct 5, 2026
Merged

ValgulNecron merged 8 commits into
masterfrom
fix/sweep2-web

Conversation

@ValgulNecron

Copy link
Copy Markdown
Collaborator

Summary

Dashboard fixes from the second live kubelab sweep, one commit each:

Tests were added for each fix. The changed assertions were approved by the user:

  • The share-link fixture link-1 is now never-expiring, because all three fixed dates had passed.
  • The "Revoke for each link" test is now "Revoke only for active links".
  • The panel tests use the new invalidation filter.

web/specs.md is updated.

Nothing was built or run locally (by the user's request); CI is the verification.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U

ValgulNecron and others added 7 commits October 5, 2026 06:02
The hidden flag started as false, so a tab opened in the background
connected immediately and only released the stream on a later
visibilitychange that never fires. Those idle streams exhausted
Chrome's 6-connections-per-host pool and stalled other requests.
Initialise the flag from document.hidden; the visible handler already
connects and calls onReconnect.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
queryKeyForKind returned ["servers"], ["backups"], ... but the app
caches those under ["fleet", kind, ...] and ["resource", ..., kind], so
only templates were ever refreshed by watch events. Replace it with
queryFilterForKind, which returns a predicate that selects exactly the
fleet lists, per-server collections and server detail for the kind
(no blanket prefix, so unrelated queries are not refetched). The
panel keeps its per-kind 500 ms coalescing.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
The agent patches status.agent every ~20 s, and each resulting MODIFIED
watch event became a "modified server X" notice. Track a per-object
(generation, phase) signature in NotificationsPanel and drop MODIFIED
events that leave it unchanged, before they notify or invalidate. The
filter lives in the client because a watch event carries no old object,
so the API cannot tell a heartbeat from a transition statelessly.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
Action buttons were disabled whenever the template had no RCON, even
though the API runs stdin-transport actions over pod attach and the
card already resolved that transport for the "sent" chip. Gate each
button on its own resolved transport: stdin needs an attachable console,
rcon still needs RCON. The hint now distinguishes "no console" from
"this action needs RCON".

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
The Backups tab schedule row passed nextScheduleTime to formatRelative,
which only handles the past and clamps a future time to "0s ago". Use
formatRelativeFuture, as the stat card and the fleet page already do,
so it reads "in 3h" (or "due" when overdue).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
The audit table rendered every /auth/login row as "Signed in", even
401/429 rejections. Pass the row's HTTP status into auditAction and show
"Failed sign-in" for status >= 400. The Access column already shows the
Failed/Denied outcome; the action text now agrees with it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
Expired and revoked links cannot be revoked again, yet every row showed a Revoke button. Match design xCJlu: Active rows keep the button, the others show a muted dash.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NsN6bnAMRM9XQtrTQ6KC7U
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
@ValgulNecron ValgulNecron added area: web React dashboard type: fix Bug fix labels Oct 5, 2026
@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 58 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: ValgulNecron/Gameplane/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7180f895-6793-47dc-970f-ac771e03eb4c
📥 Commits

Reviewing files that changed from the base of the PR and between a6268cd and 2ec3db1.

📒 Files selected for processing (15)
  • web/e2e/screenshots/slice5.spec.ts
  • web/specs.md
  • web/src/components/server/ServerActionsCard.test.tsx
  • web/src/components/server/ServerActionsCard.tsx
  • web/src/components/ui/NotificationsPanel.test.tsx
  • web/src/components/ui/NotificationsPanel.tsx
  • web/src/lib/sse.test.ts
  • web/src/lib/sse.ts
  • web/src/routes/AuditLog.test.tsx
  • web/src/routes/AuditLog.tsx
  • web/src/routes/tabs/Backups.test.tsx
  • web/src/routes/tabs/Backups.tsx
  • web/src/routes/tabs/settings/ShareLinks.test.tsx
  • web/src/routes/tabs/settings/ShareLinks.tsx
  • web/src/test/handlers.ts
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

CI Report - 2ec3db1

run 37319905918 - attempt 1

0 failed - 7 passed - 13 skipped - 18m48s elapsed

Coverage

Module Measured Gate Margin
web L95.17 S93.64 B87.89 F91.45 L92 S92 B82 F76 +1.64

Changed

Area Files +/-
web/ 15 +372/-72

Slowest jobs

Job Duration
e2e web live / amd64 (kind) 8m21s
build e2e images 7m51s
e2e web live / arm64 (kind) 7m21s
web e2e (mock) 5m45s
web 5m34s

e2e buckets run

multicluster, upgrade

PR #562 now shows the Revoke button only on Active (non-expired) share
links. The mock fixtures had an expiry date (2026-08-04) which is now
in the past (today is 2026-10-05), causing the test to fail because no
Revoke button renders. Update the first share link's expiresAt to null
(never expires) so the test can find the Revoke button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MnGTGHzHhFQCa22wRknUS
Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
@ValgulNecron
ValgulNecron merged commit a937fec into master Oct 5, 2026
43 of 44 checks passed
@ValgulNecron
ValgulNecron deleted the fix/sweep2-web branch October 5, 2026 14:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: web React dashboard type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant