Skip to content

chore(pnpm): ✨ update seroval and seroval-plugins versions; add peerDependencyRules for TypeScript - #915

Merged
aXenDeveloper merged 3 commits into
claude/vitnode-warning-sanctions-0ugeetfrom
perf/bump_packages_nov
Nov 9, 2026
Merged

aXenDeveloper merged 3 commits into
claude/vitnode-warning-sanctions-0ugeetfrom
perf/bump_packages_nov

Conversation

@aXenDeveloper

Copy link
Copy Markdown
Owner

Improving Documentation

Description

What?

Why?

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-09T15:50:25.527025Z 22df6ae New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

React Doctor found 12 new issues in 7 files · 3 errors & 9 warnings · score 77 / 100 (Needs work) · 1 fixed · vs claude/vitnode-warning-sanctions-0ugeet

Errors

9 warnings

src/tanstack/admin/warnings/screen.tsx

  • ⚠️ L196 State only used in handlers rerender-state-only-in-handlers

src/views/activity-logs/activity-entry-panel.tsx

  • ⚠️ L168 React function has high control-flow complexity no-high-complexity-react-function

src/views/activity-logs/activity-filters-drawer.tsx

  • ⚠️ L54 React function has high control-flow complexity no-high-complexity-react-function
  • ⚠️ L87 Array lookup inside a loop js-set-map-lookups
  • ⚠️ L153 Array lookup inside a loop js-set-map-lookups

src/views/activity-logs/activity-screen.tsx

  • ⚠️ L205 Role used instead of HTML tag prefer-tag-over-role

src/views/activity-logs/activity-search.ts

  • ⚠️ L33 Array lookup inside a loop js-set-map-lookups

src/views/activity-logs/activity-table.tsx

  • ⚠️ L87 Interactive element not focusable interactive-supports-focus
  • ⚠️ L202 Role used instead of HTML tag prefer-tag-over-role

Reviewed by React Doctor for commit 22df6ae. See inline comments for fixes.

… pages

- Introduced new pages for managing warning thresholds and reasons in the admin panel.
- Implemented `AutoFormFieldCollapse` for better UI interactions in forms.
- Added `ValueSwap` component for smooth transitions between values.
- Renamed `durationHours` to `durationMinutes` in the database schema.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 388a614f0d

ℹ️ 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".

@@ -0,0 +1 @@
ALTER TABLE "core_moderation_warning_thresholds" RENAME COLUMN "durationHours" TO "durationMinutes"; No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Convert existing hour values when renaming the duration column

When upgrading an installation with existing temporary-suspension thresholds, this migration preserves the numeric values in hours, but thresholdSuspensionEnd now interprets them as minutes. A configured 24-hour suspension therefore becomes a 24-minute suspension for subsequently issued warnings, silently shortening every existing temporary threshold by a factor of 60. Multiply the non-null stored durations by 60 as part of this migration so existing moderation settings retain their meaning.

Useful? React with 👍 / 👎.

@aXenDeveloper
aXenDeveloper removed this pull request from stack #916 November 9, 2026 15:48
…ivity logs

- Introduced `ActivityPagination` interface for managing pagination.
- Updated `fetchPage` to accept pagination parameters.
- Enhanced `activityListQueryOptions` to support pagination and search actions.
- Removed deprecated `ActivityRetentionForm` component.
- Implemented `searchActivityActors` for filtering actors in activity logs.
- Refactored `ActivityScreen` to utilize new pagination and search features.
- Added `useActivityTableFilters` for managing filter options in the activity logs.
- Updated `ActivityTable` to handle new entry display logic with details toggle.
- Configured `VitNodeApiConfig` to include `activityLogs` retention settings.
@aXenDeveloper
aXenDeveloper merged commit 1d07d0e into claude/vitnode-warning-sanctions-0ugeet Nov 9, 2026
3 checks passed
@aXenDeveloper
aXenDeveloper deleted the perf/bump_packages_nov branch November 9, 2026 15:49
const widthRef = React.useRef<null | number>(null);
const keyRef = React.useRef(swapKey);

React.useLayoutEffect(() => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/effect-needs-cleanup (error)

addEventListener creates a subscription in useLayoutEffect without guaranteed cleanup. Return a cleanup function that owns every allocation so it does not leak after unmount.

Fix → Return a cleanup function that stops the subscription or timer: return () => target.removeEventListener(name, handler) for listeners, return () => clearInterval(id) or clearTimeout(id) for timers, return () => observer.disconnect() for observers, return () => socket.close() for connections, or return unsubscribe if the subscribe call already gave you one.

Docs

}
container.dataset.swapping = "";
const resize = container.animate(
[{ width: `${previousWidth}px` }, { width: `${nextWidth}px` }],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/no-layout-property-animation (error)

This Web Animation changes "width" every frame, forcing layout work. Animate transform or opacity instead.

Fix → Use transform: translateX() or scale() instead. They animate smoothly without making the browser redo layout or repaint

Docs

const tab = useRouterState({
select: state => adminWarningsTabFromPath(state.location.pathname),
});
const [openCreate, setOpenCreate] = React.useState<(() => void) | null>(null);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/rerender-state-only-in-handlers (warning)

Each update to "openCreate" redraws your component for nothing because this useState is set but never shown on screen.

Fix → Use useRef instead of useState when the value is only set and never shown on screen. ref.current = ... updates it without redrawing the component.

Docs

);
};

const ActivityEntryPanelContent = ({

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/no-high-complexity-react-function (warning)

ActivityEntryPanelContent has cyclomatic complexity 18, cognitive complexity 17, and maximum nesting depth 2, so its React logic is hard to understand and change. Extract independent branches into components or hooks.

Fix → Extract independent render branches and state logic into focused components or hooks until the control flow is easy to follow.

Docs

</button>
);

const FilterSection = ({ filter }: { filter: FilterDataTable }) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/no-high-complexity-react-function (warning)

FilterSection has cyclomatic complexity 19, cognitive complexity 17, and maximum nesting depth 2, so its React logic is hard to understand and change. Extract independent branches into components or hooks.

Fix → Extract independent render branches and state logic into focused components or hooks until the control flow is easy to follow.

Docs

) : null}
{options.map(option => (
<OptionChip
isSelected={selected.includes(option.value)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/js-set-map-lookups (warning)

This scales poorly because array.includes() inside a loop scans the whole list every time. Use a Set for constant-time lookups.

Fix → Use a Set or Map when you check for the same items over and over. Array.includes/find scans the whole list each time

Docs

<div
aria-label={t("filters.label")}
className="border-foreground/10 border-b px-4 py-3"
role="search"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/prefer-tag-over-role (warning)

Screen reader users get more reliable semantics from <search> than role="search", so use <search> instead.

Fix → Use the matching HTML element when one exists so browsers and assistive tech get native semantics.

Docs

if (!needle) return undefined;

const matches = actions
.filter(action => foldForSearch(labelOf(action)).includes(needle))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/js-set-map-lookups (warning)

This scales poorly because array.includes() inside a loop scans the whole list every time. Use a Set for constant-time lookups.

Fix → Use a Set or Map when you check for the same items over and over. Array.includes/find scans the whole list each time

Docs

const target = labels.target(entry);

return (
<div

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/interactive-supports-focus (warning)

Keyboard users can't focus this 'row' because it can't receive focus, so add tabIndex={0} or tabIndex={-1}.

Fix → Add keyboard focus support so users can reach interactive elements without a pointer.

Docs

<div
aria-label={t("table_label")}
className="grid grid-cols-[3rem_minmax(0,1fr)] md:grid-cols-[3rem_minmax(7rem,auto)_minmax(6rem,auto)_minmax(10rem,1.3fr)_minmax(8rem,1fr)_minmax(6rem,auto)]"
role="table"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-doctor/prefer-tag-over-role (warning)

Screen reader users get more reliable semantics from <table> than role="table", so use <table> instead.

Fix → Use the matching HTML element when one exists so browsers and assistive tech get native semantics.

Docs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant