{"record":{"id":"bdd19bf6c67901ef","repo":"Fission-AI/OpenSpec","slug":"specname-delta-purpose-ignored-specname-a","errorCode":null,"errorMessage":"${specName} - delta Purpose ignored; ${specName} already has one. Edit ${update.target} directly to change it.","messagePattern":"(.+?) - delta Purpose ignored; (.+?) already has one\\. Edit (.+?) directly to change it\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/core/specs-apply.ts","lineNumber":317,"sourceCode":"  }\n\n  // Load or create base target content\n  const deltaPurpose = extractPurposeSection(changeContent);\n  let targetContent: string;\n  let isNewSpec = false;\n  assertTrustedSpecPath(update.targetRoot, update.target);\n  try {\n    targetContent = await fs.readFile(update.target, 'utf-8');\n    // A delta Purpose only seeds a spec that does not exist yet. Say so rather\n    // than dropping it silently - the specs instruction tells authors to write\n    // one for new capabilities, and the delta file looks identical either way.\n    // Only when the spec really does have a different Purpose: claiming it\n    // \"already has one\" would be false when it has none, and saying anything at\n    // all is noise when the two bodies match.\n    if (deltaPurpose) {\n      const existingPurpose = extractPurposeSection(targetContent);\n      if (existingPurpose && existingPurpose !== deltaPurpose) {\n        warn(\n          `${specName} - delta Purpose ignored; ${specName} already has one. ` +\n            `Edit ${update.target} directly to change it.`\n        );\n      }\n    }\n  } catch {\n    // Target spec does not exist; MODIFIED and RENAMED are not allowed for new specs\n    // REMOVED will be ignored with a warning since there's nothing to remove\n    if (plan.modified.length > 0 || plan.renamed.length > 0) {\n      throw new Error(\n        `${specName}: target spec does not exist; only ADDED requirements are allowed for new specs. MODIFIED and RENAMED operations require an existing spec.`\n      );\n    }\n    // Warn about REMOVED requirements being ignored for new specs\n    if (plan.removed.length > 0) {\n      warn(\n        `${specName} - ${plan.removed.length} REMOVED requirement(s) ignored for new spec (nothing to remove).`\n      );","sourceCodeStart":299,"sourceCodeEnd":335,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/core/specs-apply.ts#L299-L335","documentation":"Error \"${specName} - delta Purpose ignored; ${specName} already has one. Edit ${update.target} directly to change it.\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/core/specs-apply.ts:317 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"}