diff --git "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-Lo\314\210w_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf" b/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-Loew_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf similarity index 100% rename from "content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-Lo\314\210w_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf" rename to content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-Loew_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf diff --git "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-L\303\266w_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf" "b/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-L\303\266w_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf" deleted file mode 100644 index 321f4b52ae..0000000000 Binary files "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1230_Alexander-L\303\266w_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf" and /dev/null differ diff --git "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-Go\314\201mez-Garci\314\201a_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf" b/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-Gomez-Garcia_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf similarity index 100% rename from "content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-Go\314\201mez-Garci\314\201a_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf" rename to content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-Gomez-Garcia_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf diff --git "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-G\303\263mez-Garc\303\255a_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf" "b/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-G\303\263mez-Garc\303\255a_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf" deleted file mode 100644 index 3b0ddcfe4d..0000000000 Binary files "a/content/events/2025/pqc-conference-austin-us/THU_PLENARY_1500_Jaime-G\303\263mez-Garc\303\255a_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf" and /dev/null differ diff --git a/content/events/2025/pqc-conference-austin-us/index.md b/content/events/2025/pqc-conference-austin-us/index.md index ff2ba54ae9..7c5218bd27 100644 --- a/content/events/2025/pqc-conference-austin-us/index.md +++ b/content/events/2025/pqc-conference-austin-us/index.md @@ -813,7 +813,7 @@ data: speakers: - Alexander Löw youtube: dBsymlmASsw - presentation: THU_PLENARY_1230_Alexander-Löw_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf + presentation: THU_PLENARY_1230_Alexander-Loew_Practical-Insights-from-Following-NIST-SP-1800-38B.pdf locations: - plenary @@ -895,7 +895,7 @@ data: speakers: - Jaime Gómez García youtube: HywJXpEOvFQ - presentation: THU_PLENARY_1500_Jaime-Gómez-García_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf + presentation: THU_PLENARY_1500_Jaime-Gomez-Garcia_Perspectives-on-the-transition-to-PQC-in-the-financial-sector.pdf locations: - plenary diff --git a/package.json b/package.json index c6e3a4cc3f..320561a2b6 100644 --- a/package.json +++ b/package.json @@ -23,11 +23,12 @@ "test:e2e": "playwright test", "test:watch": "vitest", "check:max-lines": "node scripts/check-max-lines.mjs", + "check:filenames": "node scripts/check-filename-collisions.mjs", "lint": "eslint functions/ assets/ts/ assets/shared/ tests/", "lint:fix": "eslint --fix functions/ assets/ts/ assets/shared/ tests/", "format": "prettier --write \"functions/**/*.ts\" \"assets/ts/**/*.{ts,tsx}\" \"assets/shared/**/*.ts\" \"tests/**/*.ts\"", "format:check": "prettier --check \"functions/**/*.ts\" \"assets/ts/**/*.{ts,tsx}\" \"assets/shared/**/*.ts\" \"tests/**/*.ts\"", - "check": "npm run typecheck && npm run lint && npm run format:check && npm run test && npm run check:max-lines", + "check": "npm run typecheck && npm run lint && npm run format:check && npm run test && npm run check:max-lines && npm run check:filenames", "migrate:local": "npx wrangler d1 migrations apply DB --env local --local", "migrate:preview": "npx wrangler d1 migrations apply DB --env preview --remote", "migrate:production": "npx wrangler d1 migrations apply DB --env production --remote", diff --git a/scripts/check-filename-collisions.mjs b/scripts/check-filename-collisions.mjs new file mode 100644 index 0000000000..849df3e6da --- /dev/null +++ b/scripts/check-filename-collisions.mjs @@ -0,0 +1,35 @@ +import { execFileSync } from "node:child_process"; + +// Case-insensitive/normalization-insensitive filesystems (macOS APFS/HFS+, +// Windows) collapse paths that git treats as distinct, e.g. "Löw" written +// with a precomposed ö (NFC) vs. "o" + combining diaeresis (NFD), or two +// names differing only by case. Git happily tracks both; checkout on those +// filesystems silently drops one. Catch that here instead of at clone time. +const output = execFileSync("git", ["ls-files", "-z"], { encoding: "utf8" }); +const files = output.split("\0").filter(Boolean); + +const seen = new Map(); +for (const file of files) { + const key = file.normalize("NFC").toLowerCase(); + const group = seen.get(key); + if (group) { + group.push(file); + } else { + seen.set(key, [file]); + } +} + +const collisions = [...seen.values()].filter((group) => group.length > 1); + +if (collisions.length > 0) { + console.error(`Found ${collisions.length} filename collision group(s) that will break on case-insensitive filesystems (e.g. macOS):`); + for (const group of collisions) { + console.error("-"); + for (const file of group) { + console.error(` ${file}`); + } + } + process.exit(1); +} + +console.log(`No case/normalization filename collisions found across ${files.length} tracked files.`);