diff --git a/.oxlintrc.json b/.oxlintrc.json
index 4b0d1d4aed9..5b70f2d7707 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -55,6 +55,8 @@
"no-multi-assign": "error",
"prefer-object-spread": "error",
"react/jsx-no-target-blank": "error",
+ "react/jsx-fragments": "error",
+ "react/self-closing-comp": "error",
"trigger/no-thrown-unawaited-redirect": "error",
"trigger-prisma/no-unbounded-list-filter": "error",
"trigger-prisma/no-unbounded-list-filter-in-args-helper": "error"
diff --git a/apps/webapp/app/components/code/CodeBlock.tsx b/apps/webapp/app/components/code/CodeBlock.tsx
index ee1005eceaf..0dc2cb70311 100644
--- a/apps/webapp/app/components/code/CodeBlock.tsx
+++ b/apps/webapp/app/components/code/CodeBlock.tsx
@@ -439,7 +439,7 @@ function Chrome({ title }: { title?: string }) {
-
+
);
}
diff --git a/apps/webapp/app/components/logs/LogsTable.tsx b/apps/webapp/app/components/logs/LogsTable.tsx
index 9034ce906ea..32016a6a7f5 100644
--- a/apps/webapp/app/components/logs/LogsTable.tsx
+++ b/apps/webapp/app/components/logs/LogsTable.tsx
@@ -220,7 +220,7 @@ export function LogsTable({
}
function BlankState({ isLoading, onRefresh }: { isLoading?: boolean; onRefresh?: () => void }) {
- if (isLoading) return ;
+ if (isLoading) return ;
const handleRefresh = onRefresh ?? (() => window.location.reload());
diff --git a/apps/webapp/app/components/navigation/HelpAndFeedbackPopover.tsx b/apps/webapp/app/components/navigation/HelpAndFeedbackPopover.tsx
index 69bcd3bd117..059f7ffea7d 100644
--- a/apps/webapp/app/components/navigation/HelpAndFeedbackPopover.tsx
+++ b/apps/webapp/app/components/navigation/HelpAndFeedbackPopover.tsx
@@ -1,6 +1,6 @@
import { ArrowUpRightIcon } from "@heroicons/react/20/solid";
import { motion } from "framer-motion";
-import { Fragment, useState } from "react";
+import { useState } from "react";
import { BookIcon } from "~/assets/icons/BookIcon";
import { BulbIcon } from "~/assets/icons/BulbIcon";
import { DropdownIcon } from "~/assets/icons/DropdownIcon";
@@ -129,7 +129,7 @@ export function HelpAndFeedback({
sideOffset={isCollapsed ? 8 : 4}
align="start"
>
-
+ <>
{/* This popover lives in the app layout, above both AI hosts, so it opens them
through their open-request bridges rather than context. The hosts register the
keystrokes; this only shows them. */}
@@ -232,7 +232,7 @@ export function HelpAndFeedback({
target="_blank"
/>
-
+ >
{/* Hosted outside the popover so closing the menu can't unmount the form mid-submit. */}
diff --git a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
index ef0c6e25f5e..ddb7220213c 100644
--- a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
+++ b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
@@ -717,7 +717,7 @@ function BlankState({
const project = useProject();
const environment = useEnvironment();
const colSpan = showRegion ? 16 : 15;
- if (isLoading) return ;
+ if (isLoading) return ;
const { tasks, from, to, ...otherFilters } = filters;
const singleTaskFromFilters = filters.tasks.length === 1 ? filters.tasks[0] : null;
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.environment-variables/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.environment-variables/route.tsx
index 310f406e376..48b47499091 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.environment-variables/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.environment-variables/route.tsx
@@ -831,12 +831,7 @@ function EditEnvironmentVariablePanel({
return (