{"record":{"id":"22efd7434f946cde","repo":"zed-industries/zed","slug":"skill-md-missing-closing-frontmatter-delimiter","errorCode":null,"errorMessage":"SKILL.md missing closing frontmatter delimiter (---)","messagePattern":"SKILL\\.md missing closing frontmatter delimiter \\(---\\)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/agent_skills/agent_skills.rs","lineNumber":389,"sourceCode":"        let after_dashes = line_start + 3;\n        let end = if after_dashes == bytes.len() {\n            after_dashes\n        } else if bytes[after_dashes] == b'\\n' {\n            after_dashes + 1\n        } else if after_dashes + 1 < bytes.len()\n            && bytes[after_dashes] == b'\\r'\n            && bytes[after_dashes + 1] == b'\\n'\n        {\n            after_dashes + 2\n        } else {\n            // Line is something like `---trailing` or `----`; not a candidate.\n            continue;\n        };\n        candidates.push(end);\n    }\n\n    if candidates.is_empty() {\n        anyhow::bail!(\"SKILL.md missing closing frontmatter delimiter (---)\");\n    }\n\n    // Try each candidate in order: slice content up through the candidate's\n    // terminator and ask `serde_yaml_ng` to parse it as a YAML stream. If the\n    // first document deserializes into `SkillMetadata`, that candidate is the\n    // real closer. Otherwise an earlier candidate may have cut the YAML in the\n    // middle of a scalar / quoted string; try the next one.\n    let mut last_error: Option<anyhow::Error> = None;\n    for end in candidates {\n        let prefix = &content[..end];\n        let mut docs = serde_yaml_ng::Deserializer::from_str(prefix);\n        let Some(first_doc) = docs.next() else {\n            continue;\n        };\n        match SkillMetadata::deserialize(first_doc) {\n            Ok(metadata) => return Ok((metadata, &content[end..])),\n            Err(e) => last_error = Some(anyhow::Error::new(e)),\n        }","sourceCodeStart":371,"sourceCodeEnd":407,"githubUrl":"https://github.com/zed-industries/zed/blob/bc538def4545534201bbfcac4e95ac34ea6501b6/crates/agent_skills/agent_skills.rs#L371-L407","documentation":"Error \"SKILL.md missing closing frontmatter delimiter (---)\" thrown in zed-industries/zed.","triggerScenarios":"Thrown at crates/agent_skills/agent_skills.rs:389 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":"bc538def4545534201bbfcac4e95ac34ea6501b6","analyzedAt":"2026-08-16T07:30:46.435Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}