<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="InlineTextType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="emphasis" type="xs:string"/>
<xs:element name="code" type="xs:string"/>
<xs:element name="link">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="href" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:complexType name="ParagraphType" mixed="true">
<xs:complexContent>
<xs:extension base="InlineTextType"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CodeBlockType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="language" type="xs:string"/>
<xs:attribute name="filename" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="CellType" mixed="true">
<xs:complexContent>
<xs:extension base="InlineTextType"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="RowType">
<xs:sequence>
<xs:element name="cell" type="CellType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TableType">
<xs:sequence>
<xs:element name="caption" type="xs:string" minOccurs="0"/>
<xs:element name="columns" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="column" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="row" type="RowType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListItemType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="emphasis" type="xs:string"/>
<xs:element name="code" type="xs:string"/>
<xs:element name="code-block" type="CodeBlockType"/>
<xs:element name="paragraph" type="ParagraphType"/>
<xs:element name="list" type="ListType"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="ListType">
<xs:sequence>
<xs:element name="item" type="ListItemType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="ordered"/>
<xs:enumeration value="unordered"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="HeadingType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="level" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="RichContentType">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="paragraph" type="ParagraphType"/>
<xs:element name="code-block" type="CodeBlockType"/>
<xs:element name="table" type="TableType"/>
<xs:element name="list" type="ListType"/>
<xs:element name="heading" type="HeadingType"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="ScopeItemType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="count" type="xs:string"/>
<xs:attribute name="category" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ScopeItemsType">
<xs:sequence>
<xs:element name="scope-item" type="ScopeItemType" minOccurs="3" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SummaryType">
<xs:sequence>
<xs:element name="context" type="xs:string"/>
<xs:element name="scope-items" type="ScopeItemsType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="FileActionType">
<xs:restriction base="xs:string">
<xs:enumeration value="create"/>
<xs:enumeration value="modify"/>
<xs:enumeration value="delete"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StepTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="file-change"/>
<xs:enumeration value="action"/>
<xs:enumeration value="research"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PriorityType">
<xs:restriction base="xs:string">
<xs:enumeration value="critical"/>
<xs:enumeration value="high"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="low"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="TargetFileType">
<xs:attribute name="path" type="xs:string" use="required"/>
<xs:attribute name="action" type="FileActionType" use="required"/>
</xs:complexType>
<xs:complexType name="TargetFilesType">
<xs:sequence>
<xs:element name="file" type="TargetFileType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DependsOnType">
<xs:attribute name="step" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="StepType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="target-files" type="TargetFilesType" minOccurs="0"/>
<xs:element name="location" type="xs:string" minOccurs="0"/>
<xs:element name="rationale" type="xs:string" minOccurs="0"/>
<xs:element name="content" type="RichContentType"/>
<xs:element name="depends-on" type="DependsOnType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="number" type="xs:positiveInteger" use="required"/>
<xs:attribute name="type" type="StepTypeEnum" default="file-change"/>
<xs:attribute name="priority" type="PriorityType"/>
</xs:complexType>
<xs:complexType name="ImplementationStepsType">
<xs:sequence>
<xs:element name="step" type="StepType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PrimaryFileType">
<xs:attribute name="path" type="xs:string" use="required"/>
<xs:attribute name="action" type="FileActionType" use="required"/>
<xs:attribute name="estimated-changes" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ReferenceFileType">
<xs:attribute name="path" type="xs:string" use="required"/>
<xs:attribute name="purpose" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="PrimaryFilesType">
<xs:sequence>
<xs:element name="file" type="PrimaryFileType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReferenceFilesType">
<xs:sequence>
<xs:element name="file" type="ReferenceFileType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CriticalFilesType">
<xs:sequence>
<xs:element name="primary-files" type="PrimaryFilesType"/>
<xs:element name="reference-files" type="ReferenceFilesType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="SeverityType">
<xs:restriction base="xs:string">
<xs:enumeration value="low"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="high"/>
<xs:enumeration value="critical"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="RiskPairType">
<xs:sequence>
<xs:element name="risk" type="xs:string"/>
<xs:element name="mitigation" type="xs:string"/>
</xs:sequence>
<xs:attribute name="severity" type="SeverityType"/>
</xs:complexType>
<xs:complexType name="RisksMitigationsType">
<xs:sequence>
<xs:element name="risk-pair" type="RiskPairType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VerificationType">
<xs:sequence>
<xs:element name="method" type="xs:string"/>
<xs:element name="expected-outcome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VerificationStrategyType">
<xs:sequence>
<xs:element name="verification" type="VerificationType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SkillsMcpType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="skill">
<xs:complexType mixed="true">
<xs:attribute name="reason" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="mcp">
<xs:complexType mixed="true">
<xs:attribute name="reason" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:element name="ralph-plan">
<xs:complexType>
<xs:sequence>
<xs:element name="ralph-summary" type="SummaryType"/>
<xs:element name="skills-mcp" type="SkillsMcpType" minOccurs="0"/>
<xs:element name="ralph-implementation-steps" type="ImplementationStepsType"/>
<xs:element name="ralph-critical-files" type="CriticalFilesType"/>
<xs:element name="ralph-risks-mitigations" type="RisksMitigationsType"/>
<xs:element name="ralph-verification-strategy" type="VerificationStrategyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>