{"record":{"id":"83edb9e7babf6499","repo":"Fission-AI/OpenSpec","slug":"failed-to-write-metadata-ioerror-message","errorCode":null,"errorMessage":"Failed to write metadata: ${ioError.message}","messagePattern":"Failed to write metadata: (.+?)","errorType":"exception","errorClass":"ChangeMetadataError","httpStatus":null,"severity":"error","filePath":"src/utils/change-metadata.ts","lineNumber":78,"sourceCode":"  // Validate schema exists\n  validateSchemaName(metadata.schema, projectRoot);\n\n  // Validate with Zod\n  const parseResult = ChangeMetadataSchema.safeParse(metadata);\n  if (!parseResult.success) {\n    throw new ChangeMetadataError(\n      `Invalid metadata: ${parseResult.error.message}`,\n      metaPath\n    );\n  }\n\n  // Write YAML file\n  const content = yaml.stringify(parseResult.data);\n  try {\n    fs.writeFileSync(metaPath, content, 'utf-8');\n  } catch (err) {\n    const ioError = err instanceof Error ? err : new Error(String(err));\n    throw new ChangeMetadataError(\n      `Failed to write metadata: ${ioError.message}`,\n      metaPath,\n      ioError\n    );\n  }\n}\n\n/**\n * Reads change metadata from .openspec.yaml in the change directory.\n *\n * @param changeDir - The path to the change directory\n * @param projectRoot - Optional project root for project-local schema resolution\n * @returns The validated metadata, or null if no metadata file exists\n * @throws ChangeMetadataError if the file exists but is invalid\n */\nexport function readChangeMetadata(\n  changeDir: string,\n  projectRoot?: string","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/utils/change-metadata.ts#L60-L96","documentation":"ChangeMetadataError thrown by writeChangeMetadata inside its try/catch around fs.writeFileSync: writing the YAML metadata file failed at the OS level (permissions, missing parent directory, disk). Validation already passed; this is purely an I/O failure wrapped with the target path.","triggerScenarios":"Thrown at src/utils/change-metadata.ts:78 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check write permissions on the change directory","Ensure the parent directory exists before writing","Free disk space or resolve the underlying OS error in the message"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6926ccb18afa4ff621112813e9968334576ee11a","analyzedAt":"2026-08-25T12:29:45.729Z","contentChangedAt":"2026-08-25T12:29:45.729Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}