Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
5235c31
chore(deps): bump the actions group with 8 updates
dependabot[bot] Mar 12, 2026
efc1a21
chore(deps): bump the minor-and-patch group with 52 updates
dependabot[bot] Mar 12, 2026
2a509a5
Merge pull request #793 from alan-turing-institute/dependabot/github_…
chrisdburr Mar 13, 2026
fad9eaa
Merge pull request #794 from alan-turing-institute/dependabot/npm_and…
chrisdburr Mar 13, 2026
ad10306
chore(deps): bump the major group with 27 updates
dependabot[bot] Mar 13, 2026
42f83fc
Merge pull request #795 from alan-turing-institute/dependabot/npm_and…
chrisdburr Mar 13, 2026
6ff2df1
content: revise ATC RL agent case study based on NATS reviewer feedback
chrisdburr Mar 13, 2026
538011d
fix: migrate Biome/Ultracite 7 config and auto-fix new lint rules
chrisdburr Mar 13, 2026
3e551f4
fix: migrate Tiptap 2→3 import and event type changes
chrisdburr Mar 13, 2026
8ad749c
fix: migrate Zod 3→4 and react-hook-form 7.71 type changes
chrisdburr Mar 13, 2026
5971b52
fix: update CI Prisma cache path for Prisma 7
chrisdburr Mar 13, 2026
68ddbb4
fix: bump @prisma/client-runtime-utils to 7.5.0
chrisdburr Mar 13, 2026
5eb85af
fix: use RFC 4122 compliant UUIDs in import test fixtures
chrisdburr Mar 13, 2026
51bb2c8
fix: pin container-retention-policy to v3.0.1
chrisdburr Mar 15, 2026
1b8a8f2
fix: wait for DELETE response in E2E delete case test
chrisdburr Mar 15, 2026
4c9c4e8
fix: re-navigate dashboard after E2E case deletion
chrisdburr Mar 15, 2026
e625f20
fix: allow subdirectory paths in loadStaticCaseData validation
chrisdburr Mar 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 20 additions & 20 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js with cache
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'pnpm'
Expand All @@ -85,11 +85,11 @@ jobs:
run: pnpm install --frozen-lockfile

- name: Cache Prisma Client
uses: actions/cache@v4
uses: actions/cache@v5
id: prisma-cache-validate
with:
path: node_modules/.prisma/client
key: prisma-${{ runner.os }}-${{ hashFiles('prisma/schema.prisma') }}
path: src/generated/prisma
key: prisma-${{ runner.os }}-${{ hashFiles('prisma/schema.prisma', 'pnpm-lock.yaml') }}

- name: Generate Prisma client
if: steps.prisma-cache-validate.outputs.cache-hit != 'true'
Expand Down Expand Up @@ -140,13 +140,13 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js with cache
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'pnpm'
Expand All @@ -155,11 +155,11 @@ jobs:
run: pnpm install --frozen-lockfile

- name: Cache Prisma Client
uses: actions/cache@v4
uses: actions/cache@v5
id: prisma-cache-test
with:
path: node_modules/.prisma/client
key: prisma-${{ runner.os }}-${{ hashFiles('prisma/schema.prisma') }}
path: src/generated/prisma
key: prisma-${{ runner.os }}-${{ hashFiles('prisma/schema.prisma', 'pnpm-lock.yaml') }}

- name: Generate Prisma client
if: steps.prisma-cache-test.outputs.cache-hit != 'true'
Expand Down Expand Up @@ -207,7 +207,7 @@ jobs:
cp -r .next/static .next/standalone/.next/static

- name: Cache Playwright browsers
uses: actions/cache@v4
uses: actions/cache@v5
id: playwright-cache
with:
path: ~/.cache/ms-playwright
Expand All @@ -225,15 +225,15 @@ jobs:
run: pnpm exec playwright test

- name: Upload Playwright report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 14

- name: Upload test results
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: test-results
Expand All @@ -251,21 +251,21 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log in to Container Registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
Expand All @@ -288,7 +288,7 @@ jobs:

- name: Build and push Docker image (Production - main branch)
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
file: ./Dockerfile
Expand All @@ -309,7 +309,7 @@ jobs:

- name: Build and push Docker image (Staging branch)
if: github.ref == 'refs/heads/staging'
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
file: ./Dockerfile
Expand All @@ -330,7 +330,7 @@ jobs:

- name: Build and push Docker image (PR/other branches)
if: github.ref != 'refs/heads/main' && github.ref != 'refs/heads/staging'
uses: docker/build-push-action@v5
uses: docker/build-push-action@v7
with:
context: .
file: ./Dockerfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cleanup-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

steps:
- name: Delete PR images older than 14 days
uses: snok/container-retention-policy@v3
uses: snok/container-retention-policy@v3.0.1
with:
account: alan-turing-institute
token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.RELEASE_TOKEN }}
Expand All @@ -28,7 +28,7 @@ jobs:
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "20"
cache: "pnpm"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/seed-staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "20"

Expand Down
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ repos:
hooks:
- id: ultracite-lint
name: ultracite lint (staged files)
entry: bash -c 'FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E "\.(jsx?|tsx?|json)$" || true); [ -z "$FILES" ] && exit 0; echo "$FILES" | xargs npx ultracite lint'
entry: bash -c 'FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E "\.(jsx?|tsx?|json)$" || true); [ -z "$FILES" ] && exit 0; echo "$FILES" | xargs npx ultracite check'
language: system
pass_filenames: false
files: '\.(jsx?|tsx?|json)$'
exclude: '(node_modules|\.next|public/documentation|logs)/'

- id: ultracite-format
name: ultracite format (staged files, safe fixes only)
entry: bash -c 'FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E "\.(jsx?|tsx?|json)$" || true); [ -z "$FILES" ] && exit 0; echo "$FILES" | xargs npx ultracite format || true'
entry: bash -c 'FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E "\.(jsx?|tsx?|json)$" || true); [ -z "$FILES" ] && exit 0; echo "$FILES" | xargs npx ultracite fix || true'
language: system
pass_filenames: false
files: '\.(jsx?|tsx?|json)$'
Expand Down
8 changes: 4 additions & 4 deletions .secrets.baseline
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@
"filename": "lib/services/user-management-service.ts",
"hashed_secret": "8911a1ef22f1dfd8cd71925c676afa4fb2959a12",
"is_verified": false,
"line_number": 248
"line_number": 254
}
],
"lib/services/user-service.ts": [
Expand Down Expand Up @@ -13103,7 +13103,7 @@
"filename": "prisma/seed/dev-seed.ts",
"hashed_secret": "8911a1ef22f1dfd8cd71925c676afa4fb2959a12",
"is_verified": false,
"line_number": 129
"line_number": 130
}
],
"public/documentation/docs/technical-guide/setup-installation/cloud-deployment/index.html": [
Expand All @@ -13130,7 +13130,7 @@
"filename": "scripts/create-test-users.ts",
"hashed_secret": "8911a1ef22f1dfd8cd71925c676afa4fb2959a12",
"is_verified": false,
"line_number": 31
"line_number": 32
}
],
"scripts/seed-test-user.ts": [
Expand Down Expand Up @@ -13572,5 +13572,5 @@
}
]
},
"generated_at": "2026-03-09T18:01:04Z"
"generated_at": "2026-03-13T14:56:39Z"
}
22 changes: 11 additions & 11 deletions actions/assurance-cases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import {
} from "@/lib/schemas/assurance-case";
import { validateInput } from "@/lib/validation/input-validation";

type AssuranceCase = {
interface AssuranceCase {
createdDate?: string;
description?: string;
id: number | string;
isDemo?: boolean;
name: string;
description?: string;
createdDate?: string;
updatedDate?: string;
owner?: number | string;
isDemo?: boolean;
};
updatedDate?: string;
}

export const fetchAssuranceCases = async (): Promise<
AssuranceCase[] | null
Expand Down Expand Up @@ -89,15 +89,15 @@ export const fetchPublishedAssuranceCases = async (): Promise<
return await Promise.resolve([]);
};

type PublishedCaseForStudy = {
interface PublishedCaseForStudy {
description: string;
id: string;
markedReadyAt: string | null;
name: string;
description: string;
publishStatus: string;
publishedAt: string | null;
markedReadyAt: string | null;
publishedVersionId: string | null;
};
publishStatus: string;
}

/**
* Fetches the current user's cases that are available for linking to case studies
Expand Down
2 changes: 1 addition & 1 deletion actions/case-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export async function loadStaticCaseData(
caseFile: string
): Promise<{ data: unknown } | { error: string }> {
// Validate filename to prevent path traversal
if (caseFile.includes("..") || caseFile.includes("/")) {
if (caseFile.includes("..") || caseFile.startsWith("/")) {
return { error: "Invalid case file name" };
}

Expand Down
4 changes: 2 additions & 2 deletions actions/export-case.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { validateSession } from "@/lib/auth/validate-session";
import { uuidSchema } from "@/lib/schemas/base";
import type { CaseExportNested } from "@/lib/schemas/case-export";

type ExportOptions = {
interface ExportOptions {
includeComments: boolean;
};
}

type ExportResult = { data: CaseExportNested } | { error: string };

Expand Down
4 changes: 2 additions & 2 deletions actions/export-document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { validateSession } from "@/lib/auth/validate-session";
import { uuidSchema } from "@/lib/schemas/base";
import type { CaseExportNested } from "@/lib/schemas/case-export";

type DocumentExportOptions = {
interface DocumentExportOptions {
includeComments: boolean;
};
}

type DocumentExportResult = { data: CaseExportNested } | { error: string };

Expand Down
6 changes: 3 additions & 3 deletions actions/integrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import { validateSession } from "@/lib/auth/validate-session";

type DriveFile = {
interface DriveFile {
id: string;
name: string;
modifiedTime: string;
name: string;
size?: string;
};
}

/**
* Checks whether the current user has connected their Google Drive account.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ import { Input } from "@/components/ui/input";
import { cn } from "@/lib/utils";
import type { CaseStudyFormValues } from "./form-schema";

export type AuthorSectionProps = {
form: ReturnType<typeof useForm<CaseStudyFormValues>>;
export interface AuthorSectionProps {
addAuthor: () => void;
authors: string[];
className?: string;
form: ReturnType<typeof useForm<CaseStudyFormValues>>;
inputValue: string;
setInputValue: React.Dispatch<React.SetStateAction<string>>;
addAuthor: () => void;
removeAuthor: (authorToRemove: string) => void;
isPublished: boolean;
className?: string;
};
removeAuthor: (authorToRemove: string) => void;
setInputValue: React.Dispatch<React.SetStateAction<string>>;
}

export function AuthorSection({
form,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import { sectors } from "@/config/index";
import { cn } from "@/lib/utils";
import type { CaseStudyFormValues } from "./form-schema";

export type BasicInformationSectionProps = {
form: ReturnType<typeof useForm<CaseStudyFormValues>>;
export interface BasicInformationSectionProps {
className?: string;
};
form: ReturnType<typeof useForm<CaseStudyFormValues>>;
}

export function BasicInformationSection({
form,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ import {
import { cn } from "@/lib/utils";
import type { CaseStudyFormValues } from "./form-schema";

export type DescriptionSectionProps = {
export interface DescriptionSectionProps {
className?: string;
form: ReturnType<typeof useForm<CaseStudyFormValues>>;
value: string;
setValue: React.Dispatch<React.SetStateAction<string>>;
className?: string;
};
value: string;
}

export function DescriptionSection({
form,
Expand Down
Loading
Loading