{"record":{"id":"aabdb90e2e6e59f6","repo":"garrytan/gstack","slug":"skill-md-validation-failed-errors-join","errorCode":null,"errorMessage":"SKILL.md validation failed: ${errors.join('; ')}","messagePattern":"SKILL\\.md validation failed: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"browse/src/browser-skills.ts","lineNumber":151,"sourceCode":"  if (!content.startsWith('---\\n')) {\n    throw new Error('SKILL.md missing frontmatter block (expected starting \"---\\\\n\")');\n  }\n  const fmEnd = content.indexOf('\\n---', 4);\n  if (fmEnd === -1) {\n    throw new Error('SKILL.md frontmatter block not terminated (expected \"\\\\n---\")');\n  }\n  const fmText = content.slice(4, fmEnd);\n  const bodyMd = content.slice(fmEnd + 4).replace(/^\\n+/, '');\n  const fm = parseFrontmatterFields(fmText);\n\n  // Validate required fields.\n  const errors: string[] = [];\n  const name = fm.name ?? opts.skillName ?? '';\n  if (!name) errors.push('missing required field: name (or skillName hint)');\n  if (!fm.host) errors.push('missing required field: host');\n  // triggers and args may be omitted — empty list is valid.\n  if (errors.length > 0) {\n    throw new Error(`SKILL.md validation failed: ${errors.join('; ')}`);\n  }\n\n  const frontmatter: SkillFrontmatter = {\n    name,\n    description: fm.description,\n    host: fm.host as string,\n    triggers: Array.isArray(fm.triggers) ? fm.triggers : [],\n    args: Array.isArray(fm.args) ? fm.args : [],\n    trusted: fm.trusted === true,\n    version: typeof fm.version === 'string' ? fm.version : undefined,\n    source: fm.source === 'agent' || fm.source === 'human' ? fm.source : undefined,\n  };\n\n  return { frontmatter, bodyMd };\n}\n\ninterface RawFrontmatter {\n  name?: string;","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/garrytan/gstack/blob/94993f74012782fd94416dd44b8314f6363a13a4/browse/src/browser-skills.ts#L133-L169","documentation":"Error \"SKILL.md validation failed: ${errors.join('; ')}\" thrown in garrytan/gstack.","triggerScenarios":"Thrown at browse/src/browser-skills.ts:151 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":"94993f74012782fd94416dd44b8314f6363a13a4","analyzedAt":"2026-08-12T04:06:23.140Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}