Fission-AI/OpenSpec · error · Error
Path changed while archive was reading ${filePath}.
Error message
Path changed while archive was reading ${filePath}. What it means
Error "Path changed while archive was reading ${filePath}." thrown in Fission-AI/OpenSpec.
Source
Thrown at src/core/archive.ts:712
async function fingerprintPath(filePath: string): Promise<string> {
try {
const stat = await fs.lstat(filePath, { bigint: true });
const digest = async (): Promise<string> =>
createHash('sha256').update(await fs.readFile(filePath)).digest('hex');
if (stat.isSymbolicLink()) {
const link = await fs.readlink(filePath);
try {
const referentBefore = await fs.stat(filePath, { bigint: true });
const hash = await digest();
const referentAfter = await fs.stat(filePath, { bigint: true });
const entryAfter = await fs.lstat(filePath, { bigint: true });
if (
statIdentity(stat) !== statIdentity(entryAfter) ||
statIdentity(referentBefore) !== statIdentity(referentAfter) ||
link !== (await fs.readlink(filePath))
) {
throw new Error(`Path changed while archive was reading ${filePath}.`);
}
return `symlink:${statIdentity(stat)}:${link}:${statIdentity(referentAfter)}:${hash}`;
} catch (error) {
if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
return `symlink:${statIdentity(stat)}:${link}:missing`;
}
throw error;
}
}
if (stat.isFile()) {
const hash = await digest();
const after = await fs.lstat(filePath, { bigint: true });
if (statIdentity(stat) !== statIdentity(after)) {
throw new Error(`Path changed while archive was reading ${filePath}.`);
}
return `file:${statIdentity(after)}:${hash}`;
}
return `other:${statIdentity(stat)}`;View on GitHub (pinned to 6926ccb18a)
When it happens
Trigger: Thrown at src/core/archive.ts:712 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Fission-AI/OpenSpec@6926ccb18a (2026-08-25).
Data as JSON: /api/errors/62fb5795f66d5b07.
Report an issue: GitHub.