catalog: "MCF 1.1"
errors:
  - code: MCF_YAML_INVALID
    meaning: "A YAML document cannot be parsed under the MCF YAML profile."
  - code: MCF_YAML_DUPLICATE_KEY
    meaning: "A YAML mapping repeats a key."
  - code: MCF_SCHEMA_INVALID
    meaning: "A document does not satisfy its applicable schema."
  - code: MCF_VERSION_UNSUPPORTED
    meaning: "The declared MCF version is not supported."
  - code: MCF_PACKAGE_KIND_UNSUPPORTED
    meaning: "The declared package kind is not supported."
  - code: MCF_PACKAGE_ENTRY_MISSING
    meaning: "A required package entry does not exist."
  - code: MCF_PACKAGE_ID_COLLISION
    meaning: "A closed package set contains conflicting package identities."
  - code: MCF_ARCHIVE_INVALID
    meaning: "An archive violates the MCF archive convention."
  - code: MCF_ARCHIVE_LIMIT_EXCEEDED
    meaning: "Archive processing exceeds a documented safety limit."
  - code: MCF_PATH_INVALID
    meaning: "A path is absolute, malformed, or otherwise forbidden."
  - code: MCF_PATH_TRAVERSAL
    meaning: "A path could escape the package root."
  - code: MCF_FILE_MISSING
    meaning: "A referenced local file does not exist."
  - code: MCF_ID_INVALID
    meaning: "A local identifier does not match the required syntax."
  - code: MCF_ID_DUPLICATE
    meaning: "An identifier is duplicated in a scope that requires uniqueness."
  - code: MCF_LESSON_FRONTMATTER_INVALID
    meaning: "Lesson frontmatter is absent, malformed, or schema-invalid."
  - code: MCF_LESSON_CONTENT_OUTSIDE_ACTIVITY
    meaning: "Non-comment content occurs outside an activity."
  - code: MCF_ACTIVITY_UNTERMINATED
    meaning: "An activity does not have a valid end marker."
  - code: MCF_ACTIVITY_NESTED
    meaning: "An activity is nested inside another activity."
  - code: MCF_ACTIVITY_HEADER_INVALID
    meaning: "An activity header is malformed or schema-invalid."
  - code: MCF_ACTIVITY_TYPE_UNSUPPORTED
    meaning: "An activity uses an unknown core type."
  - code: MCF_QUESTION_YAML_INVALID
    meaning: "A question fence does not contain one valid YAML mapping."
  - code: MCF_QUESTION_TYPE_UNSUPPORTED
    meaning: "A question uses an unknown core type."
  - code: MCF_QUESTION_FIELDS_INVALID
    meaning: "A question has missing, forbidden, or incorrectly typed fields."
  - code: MCF_QUESTION_ANSWER_REFERENCE_INVALID
    meaning: "An answer refers to an option or item that does not exist."
  - code: MCF_QUESTION_DUPLICATE_OPTION_ID
    meaning: "A choice question repeats an option ID."
  - code: MCF_QUESTION_DUPLICATE_ITEM_ID
    meaning: "A matching or ordering question repeats an item ID."
  - code: MCF_QUESTION_POOL_INVALID
    meaning: "A question pool size is inconsistent with its activity."
  - code: MCF_RUBRIC_REFERENCE_UNRESOLVED
    meaning: "A rubric reference does not resolve in lesson or package scope."
  - code: MCF_RUBRIC_INVALID
    meaning: "A rubric violates structural or semantic requirements."
  - code: MCF_COMPLETION_REFERENCE_UNRESOLVED
    meaning: "A completion condition refers to an unknown target."
  - code: MCF_COMPLETION_INVALID
    meaning: "A completion expression is malformed or exceeds the nesting limit."
  - code: MCF_ASSET_REFERENCE_UNRESOLVED
    meaning: "An asset reference does not resolve to a declared asset."
  - code: MCF_ASSET_INTEGRITY_MISMATCH
    meaning: "An asset's bytes do not match its declared integrity value."
  - code: MCF_LANGUAGE_INVALID
    meaning: "A language value is not a well-formed BCP 47 tag."
  - code: MCF_RELATIONSHIP_UNRESOLVED
    meaning: "A required relationship cannot be resolved in closed-set validation."
  - code: MCF_QUESTION_BANK_REFERENCE_UNRESOLVED
    meaning: "A question-bank reference cannot be resolved."
  - code: MCF_EXTENSION_NAME_INVALID
    meaning: "An extension name is not a valid reverse-domain namespace."
  - code: MCF_EXTENSION_REQUIRED_UNSUPPORTED
    meaning: "Correct processing requires an unsupported extension."
  - code: MCF_SECURITY_POLICY_REJECTED
    meaning: "Valid source was rejected by an implementation security policy."
warnings:
  - code: MCF_REMOTE_RESOURCE_UNAVAILABLE
    meaning: "A remote resource was not fetched or could not be reached."
  - code: MCF_RAW_HTML_SANITIZED
    meaning: "Raw HTML was sanitized or omitted."
  - code: MCF_EXTENSION_OPTIONAL_UNSUPPORTED
    meaning: "An optional extension was preserved but not interpreted."
