Fix ESLint errors and cascading TypeScript build failures #4680
11 changed files+52−28
Modified.eslintignore+1−0View fileUnifiedSplit
@@ -3,4 +3,5 @@
33# UPGRADE_20260201_CI_GREEN_20260201_172248
44_quarantine_*
55**/*.bak_*
6_archive/
67
Modifiedpackage-lock.json+0−11View fileUnifiedSplit
@@ -1460,7 +1460,6 @@
14601460 "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
14611461 "dev": true,
14621462 "license": "MIT",
1463 "peer": true,
14641463 "bin": {
14651464 "acorn": "bin/acorn"
14661465 },
@@ -1895,7 +1894,6 @@
18951894 }
18961895 ],
18971896 "license": "MIT",
1898 "peer": true,
18991897 "dependencies": {
19001898 "baseline-browser-mapping": "^2.9.0",
19011899 "caniuse-lite": "^1.0.30001759",
@@ -2535,7 +2533,6 @@
25352533 "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
25362534 "dev": true,
25372535 "license": "MIT",
2538 "peer": true,
25392536 "dependencies": {
25402537 "@eslint-community/eslint-utils": "^4.2.0",
25412538 "@eslint-community/regexpp": "^4.6.1",
@@ -2704,7 +2701,6 @@
27042701 "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
27052702 "dev": true,
27062703 "license": "MIT",
2707 "peer": true,
27082704 "dependencies": {
27092705 "@rtsao/scc": "^1.1.0",
27102706 "array-includes": "^3.1.9",
@@ -4745,7 +4741,6 @@
47454741 "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==",
47464742 "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details.",
47474743 "license": "MIT",
4748 "peer": true,
47494744 "dependencies": {
47504745 "@next/env": "14.2.5",
47514746 "@swc/helpers": "0.5.5",
@@ -5247,7 +5242,6 @@
52475242 }
52485243 ],
52495244 "license": "MIT",
5250 "peer": true,
52515245 "dependencies": {
52525246 "nanoid": "^3.3.11",
52535247 "picocolors": "^1.1.1",
@@ -5337,7 +5331,6 @@
53375331 "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
53385332 "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
53395333 "license": "MIT",
5340 "peer": true,
53415334 "dependencies": {
53425335 "loose-envify": "^1.1.0"
53435336 },
@@ -5350,7 +5343,6 @@
53505343 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
53515344 "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
53525345 "license": "MIT",
5353 "peer": true,
53545346 "dependencies": {
53555347 "loose-envify": "^1.1.0",
53565348 "scheduler": "^0.23.0"
@@ -6253,7 +6245,6 @@
62536245 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
62546246 "dev": true,
62556247 "license": "MIT",
6256 "peer": true,
62576248 "engines": {
62586249 "node": ">=12"
62596250 },
@@ -6422,7 +6413,6 @@
64226413 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
64236414 "dev": true,
64246415 "license": "Apache-2.0",
6425 "peer": true,
64266416 "bin": {
64276417 "tsc": "bin/tsc",
64286418 "tsserver": "bin/tsserver"
@@ -6822,7 +6812,6 @@
68226812 "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
68236813 "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
68246814 "license": "MIT",
6825 "peer": true,
68266815 "funding": {
68276816 "url": "https://github.com/sponsors/colinhacks"
68286817 }
Modifiedsrc/app/(marketing)/_d8/D8Bits.tsx+41−2View fileUnifiedSplit
@@ -1,6 +1,12 @@
11import React from "react";
22
3export function D8Card(props: { children?: React.ReactNode }) {
3export function D8Card(props: {
4 title: string;
5 body: string;
6 kicker?: string;
7 right?: React.ReactNode;
8 children?: React.ReactNode;
9}) {
410 return (
511 <div
612 style={{
@@ -8,9 +14,42 @@ export function D8Card(props: { children?: React.ReactNode }) {
814 padding: 14,
915 background: "rgba(255,255,255,0.03)",
1016 border: "1px solid rgba(255,255,255,0.10)",
11 boxShadow: "0 18px 55px rgba(0,0,0,0.35)",
17 boxShadow: "0 16px 55px rgba(0,0,0,0.45)",
18 overflow: "hidden",
1219 }}
1320 >
21 {props.kicker ? (
22 <div
23 style={{
24 fontSize: 11,
25 fontWeight: 900,
26 letterSpacing: "0.18em",
27 textTransform: "uppercase",
28 color: "rgba(237,234,247,0.75)",
29 }}
30 >
31 {props.kicker}
32 </div>
33 ) : null}
34 <div
35 style={{
36 marginTop: props.kicker ? 8 : 0,
37 display: "flex",
38 alignItems: "flex-start",
39 justifyContent: "space-between",
40 gap: 12,
41 }}
42 >
43 <div style={{ minWidth: 0 }}>
44 <div style={{ fontSize: 15, fontWeight: 900, color: "rgba(246,242,255,0.95)" }}>
45 {props.title}
46 </div>
47 <div style={{ marginTop: 8, fontSize: 13, lineHeight: 1.55, color: "rgba(237,234,247,0.72)" }}>
48 {props.body}
49 </div>
50 </div>
51 {props.right ? <div style={{ flex: "0 0 auto" }}>{props.right}</div> : null}
52 </div>
1453 {props.children}
1554 </div>
1655 );
Modifiedsrc/app/_client/D8TV.tsx+0−3View fileUnifiedSplit
@@ -12,9 +12,6 @@ export type D8SectionProps = {
1212};
1313
1414export function D8Section(props: D8SectionProps) {
15 tone?: string;
16 lead?: string;
17 eyebrow?: string;
1815 const { title, subtitle, children, id } = props;
1916
2017 // Keep server-safe: no "use client", no browser-only APIs.
Modifiedsrc/app/admin/marketing-queue/page.tsx+1−1View fileUnifiedSplit
@@ -128,7 +128,7 @@ export default function Page() {
128128
129129 const [scheduleLocal, setScheduleLocal] = useState(""); // datetime-local
130130
131 const headers = useMemo(() => (token ? { "x-admin-token": token } : {}), [token]);
131 const headers = useMemo(() => (token ? { "x-admin-token": token } : ({} as Record<string, string>)), [token]);
132132
133133 async function refresh() {
134134 setErr(null);
Modifiedsrc/app/api/__probe__/route.ts+1−1View fileUnifiedSplit
@@ -4,7 +4,7 @@ export const runtime = "nodejs";
44export const dynamic = "force-dynamic";
55
66function safeEnv(name: string): string | null {
7 try: any {
7 try {
88 // @ts-ignore
99 const v = process?.env?.[name];
1010 return typeof v === "string" && v.length ? v : null;
Modifiedsrc/app/page.tsx+0−5View fileUnifiedSplit
@@ -1,8 +1,3 @@
1// === D8_AUTOREPAIR_DEMO_START ===
2// Intentionally missing import to demonstrate Auto Repair fixing a build.
3// This produces a deterministic "Module not found" error with zero UI impact.
4import AutoRepairDemoWidget from "./_client/AutoRepairDemoWidget";
5// === D8_AUTOREPAIR_DEMO_END ===
61export const dynamic = "force-dynamic";
72export const revalidate = 0;
83
Modifiedsrc/app/video/_client/VideoStudioClient.tsx+2−2View fileUnifiedSplit
@@ -178,7 +178,7 @@ export default function VideoStudioClient() {
178178 }
179179 if (idx >= durations.length) {
180180 setActiveIndex(durations.length - 1);
181 drawFrame(ctx, w, h, shots[durations.length - 1], 1);
181 drawFrame(ctx!, w, h, shots[durations.length - 1], 1);
182182 stopAnimation();
183183 if (previewOnly) setStatus("ready");
184184 return;
@@ -186,7 +186,7 @@ export default function VideoStudioClient() {
186186 setActiveIndex(idx);
187187 const local = elapsed - acc;
188188 const p = Math.max(0, Math.min(1, local / durations[idx]));
189 drawFrame(ctx, w, h, shots[idx], p);
189 drawFrame(ctx!, w, h, shots[idx], p);
190190 rafRef.current = requestAnimationFrame(tick);
191191 }
192192
Modifiedsrc/lib/d8kv.ts+3−0View fileUnifiedSplit
@@ -50,4 +50,7 @@ export function d8Key_bundleRun(projectId: string, runId: string) {
5050}
5151export function d8Key_patchLatest(projectId: string) {
5252 return `agentPatch:project:${projectId}:latest`;
53}
54export function projectVideoKey(projectId: string) {
55 return `project:${projectId}:video`;
5356}
\ No newline at end of file
c comment · e edit title · m merge · a approve · r request changes · ? shortcuts