{"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":"Error \"Failed to write metadata: ${ioError.message}\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/utils/change-metadata.ts:78 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6926ccb18afa4ff621112813e9968334576ee11a","analyzedAt":"2026-08-25T12:29:45.729Z","schemaVersion":2},"datasetVersion":"2026-08-25T16:17:27.014Z"}