@forge/manifest

13.1.1-next.2-experimental-094961613.2.0-next.5
out/text/errors.js
~out/text/errors.jsModified
+21
Index: package/out/text/errors.js
===================================================================
--- package/out/text/errors.js
+++ package/out/text/errors.js
@@ -170,8 +170,29 @@
             skillPathInvalidFormat: (module) => `Skill ${module} has an invalid source. Must define source.dir as a relative path from the manifest root.`,
             skillSubdirNotFound: (module, subdirectory) => `Directory '${subdirectory}' specified in skill ${module} does not exist from the manifest root.`,
             skillSubdirMissingSkillMD: (module, subdirectory) => `Directory '${subdirectory}' specified in skill ${module} does not contain a SKILL.md file.`,
             skillPathNotUnique: (module, path) => `Skill ${module} has a duplicate source.dir '${path}'. rovo:skill source.dir values must be unique.`,
+            skillFileMissingFrontmatterDelimiters: (module) => `Skill ${module} must define frontmatter with opening and closing '---' delimiters. Example:\n---\nname: my-skill\ndescription: ...\n---`,
+            skillFileFrontmatterYamlInvalid: (module) => `Skill ${module} has invalid YAML in SKILL.md frontmatter. Tip: frontmatter must be a YAML mapping (key: value). Check indentation and quoting.`,
+            skillFileNameRequired: (module) => `Skill ${module} frontmatter field 'name' is required.`,
+            skillFileNameLength: (module) => `Skill ${module} frontmatter field 'name' must be between 1 and 64 characters.`,
+            skillFileNameFormat: (module) => `Skill ${module} frontmatter field 'name' must be lowercase alphanumeric with hyphens and no leading, trailing, or consecutive hyphens.`,
+            skillFileNameMustMatchDirectory: (module, directoryName) => `Skill ${module} frontmatter field 'name' must match the parent directory name '${directoryName}'.`,
+            skillFileDescriptionRequired: (module) => `Skill ${module} frontmatter field 'description' is required.`,
+            skillFileDescriptionLength: (module) => `Skill ${module} frontmatter field 'description' must be between 1 and 1024 characters.`,
+            skillFileDescriptionTooShort: (module) => `Skill ${module} description should be at least 50 characters. Suggestion: Describe what the skill does, when to use it, and any prerequisites or limits.`,
+            skillFileCompatibilityMustBeString: (module) => `Skill ${module} frontmatter field 'compatibility' must be a string.`,
+            skillFileCompatibilityLength: (module) => `Skill ${module} frontmatter field 'compatibility' must be between 1 and 500 characters.`,
+            skillFileMetadataInvalid: (module) => `Skill ${module} frontmatter field 'metadata' must be a key-value mapping with string values.`,
+            skillFileLicenseMustBeString: (module) => `Skill ${module} frontmatter field 'license' must be a string.`,
+            skillFileAllowedToolsInvalid: (module) => `Skill ${module} frontmatter field 'allowed-tools' must be a space-delimited string.`,
+            skillFileAllowedToolsMismatch: (module) => `Skill ${module} frontmatter field 'allowed-tools' does not match manifest dependencies.tools.`,
+            skillFileReferencedFileMissing: (module, filePath) => `Skill ${module} references file '${filePath}' but it does not exist.`,
+            skillFileRequiredDirectoryMissing: (module, directoryPath) => `Skill ${module} requires directory '${directoryPath}' but it does not exist.`,
+            skillFileUnknownFrontmatterField: (module, field) => `Skill ${module} has unknown frontmatter field '${field}'.`,
+            skillFileBodyEmpty: (module) => `Skill ${module} SKILL.md body is empty.`,
+            skillFileBodyTooLong: (module) => `Skill ${module} SKILL.md body exceeds 500 lines. Suggestion: Move some content to reference files.`,
+            skillFileToolsNotMentioned: (module) => `Skill ${module} SKILL.md should document how it uses each tool declared in dependencies.tools.`,
             incorrectMcp: (module, toolKey) => `${module} references undefined action module with key '${toolKey}'.`
         },
         action: {
             unreferencedAction: (action) => `Action '${action}' is not referenced by any Rovo agent or automation:actionProvider module.`,