CodeIssuesPull RequestsActionsSecurityInsights
✨ AI
More
Settings

Fix build errors blocking all CI workflows #4697

Draft⚡ AI-generatedMccantynz wants to mergecopilot/clean-and-run-workflowsmain↑3 ↓9opened Feb 21, 20264/7 tasksLive: 0 editing
12 changed files+43−16
Modified.eslintignore+1−0View fileUnifiedSplit
33# UPGRADE_20260201_CI_GREEN_20260201_172248
44_quarantine_*
55**/*.bak_*
6_archive/**
67
Modified.github/workflows/d8-deploy.yml+1−1View fileUnifiedSplit
2424 run: npm ci
2525
2626 - name: Build gate
27 continue-on-error: true
27 continue-on-error: true
2828 run: npm run build
2929
3030 - name: Install Vercel CLI
Modified.gitignore+3−0View fileUnifiedSplit
5252# D8_PHASE1_LOCK_DEPLOY_STYLING_v1_20260128
5353*.bak_*
5454*.bak
55
56# TypeScript build info
57tsconfig.tsbuildinfo
Modifiedsrc/app/(marketing)/_d8/D8Bits.tsx+29−1View fileUnifiedSplit
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 children?: React.ReactNode;
8}) {
49 return (
510 <div
611 style={{
1116 boxShadow: "0 18px 55px rgba(0,0,0,0.35)",
1217 }}
1318 >
19 {props.kicker ? (
20 <div
21 style={{
22 fontSize: 11,
23 fontWeight: 900,
24 letterSpacing: "0.18em",
25 textTransform: "uppercase",
26 color: "rgba(237,234,247,0.75)",
27 }}
28 >
29 {props.kicker}
30 </div>
31 ) : null}
32 {props.title ? (
33 <div style={{ marginTop: props.kicker ? 8 : 0, fontSize: 15, fontWeight: 900, color: "rgba(246,242,255,0.95)" }}>
34 {props.title}
35 </div>
36 ) : null}
37 {props.body ? (
38 <div style={{ marginTop: 8, fontSize: 13, lineHeight: 1.55, color: "rgba(237,234,247,0.72)" }}>
39 {props.body}
40 </div>
41 ) : null}
1442 {props.children}
1543 </div>
1644 );
Modifiedsrc/app/_client/D8TV.tsx+0−3View fileUnifiedSplit
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
128128
129129 const [scheduleLocal, setScheduleLocal] = useState(""); // datetime-local
130130
131 const headers = useMemo(() => (token ? { "x-admin-token": token } : {}), [token]);
131 const headers = useMemo<Record<string, string>>(() => 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
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// === 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+3−2View fileUnifiedSplit
153153 const canvas = canvasRef.current;
154154 const ctx = canvas.getContext("2d");
155155 if (!ctx) return;
156 const safeCtx: CanvasRenderingContext2D = ctx;
156157
157158 stopAnimation();
158159
178179 }
179180 if (idx >= durations.length) {
180181 setActiveIndex(durations.length - 1);
181 drawFrame(ctx, w, h, shots[durations.length - 1], 1);
182 drawFrame(safeCtx, w, h, shots[durations.length - 1], 1);
182183 stopAnimation();
183184 if (previewOnly) setStatus("ready");
184185 return;
186187 setActiveIndex(idx);
187188 const local = elapsed - acc;
188189 const p = Math.max(0, Math.min(1, local / durations[idx]));
189 drawFrame(ctx, w, h, shots[idx], p);
190 drawFrame(safeCtx, w, h, shots[idx], p);
190191 rafRef.current = requestAnimationFrame(tick);
191192 }
192193
Modifiedsrc/lib/d8kv.ts+3−0View fileUnifiedSplit
5050}
5151export function d8Key_patchLatest(projectId: string) {
5252 return `agentPatch:project:${projectId}:latest`;
53}
54export function projectVideoKey(projectId: string) {
55 return `project:${projectId}:video:latest`;
5356}
\ No newline at end of file
Modifiedsrc/lib/kv.ts+0−2View fileUnifiedSplit
1010 * If kv cannot be loaded, we throw a clear error at runtime.
1111 */
1212
13/* eslint-disable @typescript-eslint/no-var-requires */
14
1513function loadVercelKv(): any | null {
1614 try {
1715 const mod = require("@vercel/kv");
Modifiedtsconfig.json+1−0View fileUnifiedSplit
2323 "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
2424 "exclude": [
2525 "src/_app_backup/**",
26 "_archive/**",
2627"node_modules"]
2728}
2829
c comment · e edit title · m merge · a approve · r request changes · ? shortcuts