chore: upgrade Node.js runtime to v24 across codebase #419

Merged
jason.woltje merged 438 commits from fix/auth-frontend-remediation into main 2026-02-17 01:04:47 +00:00
2 changed files with 34 additions and 19 deletions
Showing only changes of commit 96b259cbc1 - Show all commits

View File

@@ -434,11 +434,21 @@ SECRET=replace-me
// Remove read permissions // Remove read permissions
await fs.chmod(testFile, 0o000); await fs.chmod(testFile, 0o000);
// Check if we're running as root (where chmod 0o000 won't prevent reads)
const isRoot = process.getuid?.() === 0;
const result = await service.scanFile(testFile); const result = await service.scanFile(testFile);
expect(result.scannedSuccessfully).toBe(false); if (isRoot) {
expect(result.scanError).toBeDefined(); // Root can still read the file, so it will scan successfully
expect(result.hasSecrets).toBe(false); // Not "clean", just unscanned expect(result.scannedSuccessfully).toBe(true);
expect(result.hasSecrets).toBe(true); // Contains AWS key
} else {
// Non-root user cannot read the file
expect(result.scannedSuccessfully).toBe(false);
expect(result.scanError).toBeDefined();
expect(result.hasSecrets).toBe(false); // Not "clean", just unscanned
}
// Cleanup - restore permissions first // Cleanup - restore permissions first
await fs.chmod(testFile, 0o644); await fs.chmod(testFile, 0o644);

View File

@@ -6,6 +6,7 @@ import { useState } from "react";
import { KanbanBoard } from "@/components/kanban"; import { KanbanBoard } from "@/components/kanban";
import type { Task } from "@mosaic/shared"; import type { Task } from "@mosaic/shared";
import { TaskStatus, TaskPriority } from "@mosaic/shared"; import { TaskStatus, TaskPriority } from "@mosaic/shared";
import { ToastProvider } from "@mosaic/ui";
const initialTasks: Task[] = [ const initialTasks: Task[] = [
{ {
@@ -173,23 +174,27 @@ export default function KanbanDemoPage(): ReactElement {
}; };
return ( return (
<div className="min-h-screen bg-gray-100 dark:bg-gray-950 p-6"> <ToastProvider>
<div className="max-w-7xl mx-auto space-y-6"> <div className="min-h-screen bg-gray-100 dark:bg-gray-950 p-6">
{/* Header */} <div className="max-w-7xl mx-auto space-y-6">
<div className="bg-white dark:bg-gray-900 rounded-lg shadow-sm border border-gray-200 dark:border-gray-800 p-6"> {/* Header */}
<h1 className="text-2xl font-bold text-gray-900 dark:text-gray-100">Kanban Board Demo</h1> <div className="bg-white dark:bg-gray-900 rounded-lg shadow-sm border border-gray-200 dark:border-gray-800 p-6">
<p className="mt-2 text-gray-600 dark:text-gray-400"> <h1 className="text-2xl font-bold text-gray-900 dark:text-gray-100">
Drag and drop tasks between columns to update their status. Kanban Board Demo
</p> </h1>
<p className="mt-1 text-sm text-gray-500 dark:text-gray-500"> <p className="mt-2 text-gray-600 dark:text-gray-400">
{tasks.length} total tasks {" "} Drag and drop tasks between columns to update their status.
{tasks.filter((t) => t.status === TaskStatus.COMPLETED).length} completed </p>
</p> <p className="mt-1 text-sm text-gray-500 dark:text-gray-500">
</div> {tasks.length} total tasks {" "}
{tasks.filter((t) => t.status === TaskStatus.COMPLETED).length} completed
</p>
</div>
{/* Kanban Board */} {/* Kanban Board */}
<KanbanBoard tasks={tasks} onStatusChange={handleStatusChange} /> <KanbanBoard tasks={tasks} onStatusChange={handleStatusChange} />
</div>
</div> </div>
</div> </ToastProvider>
); );
} }