paperclipai/paperclip · error · Error
Refusing to overwrite invalid config at
Error message
Refusing to overwrite invalid config at ${filePath}: ${error instanceof Error ? error.message : String(error)} What it means
writeConfig tried to merge over the existing config file and it failed schema or JSON validation; without a backup path it refuses to clobber a file it cannot understand.
Solutions
- Fix or remove the invalid config at ${filePath} so it can be backed up and rewritten safely.
- Restore a valid config from the existing backup, then retry.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at cli/src/config/store.ts:206 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/2b4baec0828fc9a0.
Report an issue: GitHub.
Appendix: source
Thrown at cli/src/config/store.ts:206
configPath?: string,
options: { invalidBackupPath?: string } = {},
): boolean {
const filePath = resolveConfigPath(configPath);
const dir = path.dirname(filePath);
fs.mkdirSync(dir, { recursive: true });
let nextConfig = paperclipConfigSchema.parse(config);
if (fs.existsSync(filePath)) {
try {
const source = paperclipConfigSchema.parse(migrateLegacyConfig(parseJson(filePath)));
nextConfig = paperclipConfigSchema.parse(mergePaperclipConfig(source, nextConfig));
if (isDeepStrictEqual(effectiveConfig(source), effectiveConfig(nextConfig))) {
return false;
}
} catch (error) {
const invalidBackupPath = options.invalidBackupPath;
if (!invalidBackupPath) {
throw new Error(
`Refusing to overwrite invalid config at ${filePath}: ${error instanceof Error ? error.message : String(error)}`,
);
}
if (
!fs.existsSync(invalidBackupPath) ||
!fs.readFileSync(filePath).equals(fs.readFileSync(invalidBackupPath))
) {
throw new Error(
`Refusing to overwrite ${filePath} because it changed after the invalid backup was created`,
);
}
}
}
// Backup existing config before overwriting
if (fs.existsSync(filePath)) {
const backupPath = filePath + ".backup";
durableCopyFile(filePath, backupPath);View on GitHub (pinned to 120ae5428f)