/** * lib/fs — findFiles returns a HOST-INDEPENDENT order. `readdir` order is * filesystem-defined (stable on NTFS, arbitrary on ext4): every audit pack's * finding order, joined `params` and written `_audit/*.md` used to depend on * it (C-WARN-12). The walk now sorts every directory listing by name. */ import { describe, it, expect, beforeAll, afterAll } from 'vitest' import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join, relative } from 'node:path' import { findFiles } from '../fs.js' let root: string beforeAll(() => { root = mkdtempSync(join(tmpdir(), 'ss-fs-order-')) for (const name of ['zeta.cs', 'alpha.cs', 'Mid.cs', 'beta.cs']) writeFileSync(join(root, name), '', 'utf8') mkdirSync(join(root, 'sub-b'), { recursive: true }) mkdirSync(join(root, 'sub-a'), { recursive: true }) writeFileSync(join(root, 'sub-b', 'x.cs'), '', 'utf8') writeFileSync(join(root, 'sub-a', 'y.cs'), '', 'utf8') }) afterAll(() => rmSync(root, { recursive: true, force: true })) describe('findFiles — deterministic order', () => { it('lists files and directories sorted by name at every level', async () => { const files = (await findFiles('**/*.cs', { cwd: root })).map((f) => relative(root, f).replace(/\\/g, '/')) // ASCII code-unit order (uppercase first), directories sorted among files by name expect(files).toEqual(['Mid.cs', 'alpha.cs', 'beta.cs', 'sub-a/y.cs', 'sub-b/x.cs', 'zeta.cs']) }) })