PREFIX cf: <https://cataforge.dev/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

cf:UserFlow a rdfs:Class ;
  rdfs:comment "Sequence of Pages forming a user journey." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:priority a rdf:Property ;
  rdfs:range cf:PriorityEnum .

cf:belongs_to_project a rdf:Property ;
  rdfs:range cf:Project .

<http://purl.org/dc/terms/isReplacedBy> a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:depends_on a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:authored_by a rdf:Property ;
  rdfs:comment "Free-form attribution (role name or username); not coupled to governance namespace." ;
  rdfs:range xsd:string .

cf:source_doc a rdf:Property ;
  rdfs:comment "Relative path of the Markdown file the entity was exported from." ;
  rdfs:range xsd:string .

cf:source_section a rdf:Property ;
  rdfs:comment "Section anchor inside the source doc, e.g. §2.F-001." ;
  rdfs:range xsd:string .

cf:status a rdf:Property ;
  rdfs:range cf:ArtifactStatusEnum .

cf:dependency_of a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:created_at a rdf:Property ;
  rdfs:range xsd:dateTime .

cf:title a rdf:Property ;
  rdfs:range xsd:string .

cf:updated_at a rdf:Property ;
  rdfs:range xsd:dateTime .

cf:part_of a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:description a rdf:Property ;
  rdfs:range xsd:string .

cf:tags a rdf:Property ;
  rdfs:range xsd:string .

<http://www.w3.org/ns/prov#wasRevisionOf> a rdf:Property ;
  rdfs:comment "PROV revision link between two snapshots of the same logical entity." ;
  rdfs:range cf:SoftwareArtifact .

cf:has_part a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:reviewed_by a rdf:Property ;
  rdfs:range cf:ReviewReport .

cf:entity_id a rdf:Property ;
  rdfs:comment "Frontmatter ID such as F-001, M-014, T-007." ;
  rdfs:range xsd:string .

cf:sort_key a rdf:Property ;
  rdfs:comment "Deterministic export sort key." ;
  rdfs:range xsd:string .

cf:content_hash a rdf:Property ;
  rdfs:comment "SHA-256 of the source Markdown section, mirrors .doc-index.json content_hash." ;
  rdfs:range xsd:string .

cf:narrative_body a rdf:Property ;
  rdfs:range xsd:string .

<http://purl.org/dc/terms/replaces> a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:located_in_section a rdf:Property ;
  rdfs:comment "SoftwareArtifact → the Section it was sourced from." ;
  rdfs:range cf:Section .

cf:DataModel a rdfs:Class ;
  rdfs:comment "Persistent data entity. Source arch §4 E-NNN." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:field_definitions a rdf:Property ;
  rdfs:range xsd:string .

cf:Phase a rdfs:Class ;
  rdfs:comment "Waterfall phase. Honors the existing P-NNN frontmatter prefix." ;
  rdfs:subClassOf cf:WorkUnit .

cf:start_date a rdf:Property ;
  rdfs:range xsd:date .

cf:end_date a rdf:Property ;
  rdfs:range xsd:date .

cf:Pipeline a rdfs:Class ;
  rdfs:comment "CI/CD pipeline definition." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:pipeline_steps a rdf:Property ;
  rdfs:range xsd:string .

cf:TestCase a rdfs:Class ;
  rdfs:comment "Single verifiable test scenario. Source test-report §2 TC-NNN." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:expected_result a rdf:Property ;
  rdfs:range xsd:string .

cf:test_steps a rdf:Property ;
  rdfs:range xsd:string .

cf:verifies a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:test_result a rdf:Property ;
  rdfs:range cf:TestResultEnum .

cf:Deployment a rdfs:Class ;
  rdfs:comment "An act of deploying a Release into an Environment." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:environment a rdf:Property ;
  rdfs:range cf:EnvironmentEnum .

cf:delivers a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:TestSuite a rdfs:Class ;
  rdfs:comment "Grouping of TestCases." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Page a rdfs:Class ;
  rdfs:comment "UI page; honors P-NNN where the source doc is ui-spec." ;
  rdfs:subClassOf cf:Screen .

cf:ui_route a rdf:Property ;
  rdfs:range xsd:string .

cf:satisfies a rdf:Property ;
  rdfs:comment "This Feature/Component/Task addresses these Requirements." ;
  rdfs:range cf:Requirement .

cf:layout_spec a rdf:Property ;
  rdfs:range xsd:string .

cf:ChangeRequest a rdfs:Class ;
  rdfs:comment "Proposed change with impact set." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:affects a rdf:Property ;
  rdfs:comment "ChangeRequest / ArchitectureDecision impact edge." ;
  rdfs:range cf:SoftwareArtifact .

cf:rationale a rdf:Property ;
  rdfs:range xsd:string .

cf:change_status a rdf:Property ;
  rdfs:range cf:ChangeStatusEnum .

cf:CoverageRule a rdfs:Class ;
  rdfs:comment "Declarative coverage requirement (e.g. every Feature must have ≥1 TestCase)." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Component a rdfs:Class ;
  rdfs:comment "Architectural sub-component. Binds C-NNN entities sourced from arch docs. ui-spec C-NNN must be remapped to UIComponent UC-NNN via the migration codemod (see task-6 §6.5 #6, task-7 §7.2). UI-route / layout slots remain here as legacy disambiguation but are deprecated for new Component instances; UI fields belong on UIComponent." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:implements a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:realized_as a rdf:Property ;
  rdfs:comment "Component/Module → Task work-breakdown link." ;
  rdfs:range cf:Task .

cf:Risk a rdfs:Class ;
  rdfs:comment "Identified risk plus its mitigation." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:risk_level a rdf:Property ;
  rdfs:range cf:RiskLevelEnum .

cf:mitigation a rdf:Property ;
  rdfs:range xsd:string .

cf:Document a rdfs:Class ;
  rdfs:comment "A whole business document; container for its sections and entities." .

cf:frontmatter_raw a rdf:Property ;
  rdfs:comment "Verbatim frontmatter block of a Document's source file." ;
  rdfs:range xsd:string .

cf:has_section a rdf:Property ;
  rdfs:comment "Document → its sections." ;
  rdfs:range cf:Section .

cf:doc_type a rdf:Property ;
  rdfs:comment "doc_type of a Document, e.g. prd / arch." ;
  rdfs:range xsd:string .

cf:preamble_body a rdf:Property ;
  rdfs:comment "Document body before the first §-level heading (H1 line and lead prose)." ;
  rdfs:range xsd:string .

cf:source_path a rdf:Property ;
  rdfs:comment "Project-root-relative posix path of a Document's source file." ;
  rdfs:range xsd:string .

cf:version a rdf:Property ;
  rdfs:comment "Semantic version label for releasable artifacts." ;
  rdfs:range xsd:string .

cf:WorkUnit a rdfs:Class ;
  rdfs:comment "Abstract unit of time/scope to which work is assigned." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:SoftwareArtifact a rdfs:Class ;
  rdfs:comment "Common ancestor of every business-domain entity. All concrete subclasses carry a deterministic sort_key, a content_hash, and source_doc/section back-pointers for KG ⇄ Markdown idempotent round-trip." .

cf:TestPlan a rdfs:Class ;
  rdfs:comment "Overall test strategy document." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:AcceptanceCriteria a rdfs:Class ;
  rdfs:comment "Verifiable condition attached to a Requirement or Task. Source: prd §2.F.AC-NNN / dev-plan T-NNN.tdd_acceptance." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:acceptance_text a rdf:Property ;
  rdfs:range xsd:string .

cf:SprintReviewIssue a rdfs:Class ;
  rdfs:comment "Issue raised during sprint review. Honors existing SR-NNN prefix." ;
  rdfs:subClassOf cf:ReviewReport .

cf:targets_artifact a rdf:Property ;
  rdfs:comment "ReviewReport → the artifact under review." ;
  rdfs:range cf:SoftwareArtifact .

cf:Subtask a rdfs:Class ;
  rdfs:comment "Decomposed child of a Task." ;
  rdfs:subClassOf cf:Task .

cf:belongs_to_work_unit a rdf:Property ;
  rdfs:comment "Unified accessor (Phase or Sprint or Iteration)." ;
  rdfs:range cf:WorkUnit .

cf:task_status a rdf:Property ;
  rdfs:range cf:TaskStatusEnum .

cf:realizes a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:belongs_to_phase a rdf:Property ;
  rdfs:comment "Waterfall placement." ;
  rdfs:range cf:Phase .

cf:assigned_to_sprint a rdf:Property ;
  rdfs:comment "Agile placement." ;
  rdfs:range cf:Sprint .

cf:TechStack a rdfs:Class ;
  rdfs:comment "Technology-stack declaration anchored to a free-prose section (e.g., arch §1.4). Honors the section heading slug as entity_id when no ID prefix is present; otherwise TS-NNN. Carries narrative content plus structured stack_layers for queryable retrieval. Replaces the source_section() escape hatch for tech-stack content in 0.5.0." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:stack_layers a rdf:Property ;
  rdfs:range xsd:string .

cf:TestRun a rdfs:Class ;
  rdfs:comment "A single execution of a TestSuite/TestCase, producing TestResult facts." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Environment a rdfs:Class ;
  rdfs:comment "Deployment target environment (dev/staging/production)." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:DomainAttribute a rdfs:Class ;
  rdfs:comment "Structured key/value attribute attached to a DomainEntity." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:attribute_of a rdf:Property ;
  rdfs:comment "DomainAttribute → its owning DomainEntity." ;
  rdfs:range cf:DomainEntity .

cf:attr_name a rdf:Property ;
  rdfs:comment "DomainAttribute key." ;
  rdfs:range xsd:string .

cf:attr_value a rdf:Property ;
  rdfs:comment "DomainAttribute value." ;
  rdfs:range xsd:string .

cf:Interface a rdfs:Class ;
  rdfs:comment "Abstract interface contract between modules; non-HTTP siblings of API." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Glossary a rdfs:Class ;
  rdfs:comment "Domain term definition." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:glossary_definition a rdf:Property ;
  rdfs:range xsd:string .

cf:glossary_term a rdf:Property ;
  rdfs:range xsd:string .

cf:Release a rdfs:Class ;
  rdfs:comment "Versioned bundle of delivered Features." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:release_notes a rdf:Property ;
  rdfs:range xsd:string .

cf:UIComponent a rdfs:Class ;
  rdfs:comment "Reusable UI widget. Distinct from the architecture Component class." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:UserStory a rdfs:Class ;
  rdfs:comment "Agile narrative. May refine a Feature." ;
  rdfs:subClassOf cf:Requirement .

cf:refined_by a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:implemented_by a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:refines a rdf:Property ;
  rdfs:comment "This artifact elaborates a more abstract upstream artifact." ;
  rdfs:range cf:SoftwareArtifact .

cf:DomainEntity a rdfs:Class ;
  rdfs:comment "Bounded downstream extension point; carries a registered domain_type." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:domain_type a rdf:Property ;
  rdfs:comment "Registered domain class of a DomainEntity (e.g. \"Order\"), set from the prefix registry." ;
  rdfs:range xsd:string .

cf:has_attribute a rdf:Property ;
  rdfs:comment "DomainEntity → its structured key/value attributes." ;
  rdfs:range cf:DomainAttribute .

cf:Section a rdfs:Class ;
  rdfs:comment "Heading-delimited section of a Document. Carries narrative prose (narrative_body) and the structured entities sourced from it (contains_entity), making whole-document content — structured and prose — first-class graph content." .

cf:section_anchor a rdf:Property ;
  rdfs:comment "Section anchor inside its document, e.g. §2.M-001." ;
  rdfs:range xsd:string .

cf:section_level a rdf:Property ;
  rdfs:comment "Heading depth of a Section; level-2 sections tile-cover the document body." ;
  rdfs:range xsd:string .

cf:position a rdf:Property ;
  rdfs:comment "Zero-padded document-order index of a Section for whole-document reconstruction." ;
  rdfs:range xsd:string .

cf:contains_entity a rdf:Property ;
  rdfs:comment "Section → the structured entities sourced from it." ;
  rdfs:range cf:SoftwareArtifact .

cf:part_of_document a rdf:Property ;
  rdfs:comment "Section → the document it belongs to." ;
  rdfs:range cf:Document .

cf:Project a rdfs:Class ;
  rdfs:comment "Root container for a single user-software project." .

cf:process_model a rdf:Property ;
  rdfs:range cf:ProcessModelEnum .

cf:Iteration a rdfs:Class ;
  rdfs:comment "Lightweight agile iteration (variable timebox)." ;
  rdfs:subClassOf cf:WorkUnit .

cf:ReviewReport a rdfs:Class ;
  rdfs:comment "Output of a review skill (doc-review / sprint-review / code-review)." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Sprint a rdfs:Class ;
  rdfs:comment "Agile sprint (fixed timebox)." ;
  rdfs:subClassOf cf:WorkUnit .

cf:API a rdfs:Class ;
  rdfs:comment "HTTP / RPC contract. Source arch §3 API-NNN." ;
  rdfs:subClassOf cf:Interface .

cf:response_schema a rdf:Property ;
  rdfs:range xsd:string .

cf:endpoint_path a rdf:Property ;
  rdfs:range xsd:string .

cf:http_method a rdf:Property ;
  rdfs:range xsd:string .

cf:request_schema a rdf:Property ;
  rdfs:range xsd:string .

cf:Requirement a rdfs:Class ;
  rdfs:comment "Common ancestor of all requirement-layer artifacts." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Milestone a rdfs:Class ;
  rdfs:comment "A point-in-time marker, not a timebox." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Epic a rdfs:Class ;
  rdfs:comment "Large requirement aggregating multiple Features. Maps E-NNN (see §3.9 decision)." ;
  rdfs:subClassOf cf:Requirement .

cf:Screen a rdfs:Class ;
  rdfs:comment "Concrete rendered screen, alias of Page." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Feature a rdfs:Class ;
  rdfs:comment "Concrete product capability. Source: prd §2 F-NNN." ;
  rdfs:subClassOf cf:Requirement .

cf:ArchitectureDecision a rdfs:Class ;
  rdfs:comment "ADR-style decision record. Frontmatter prefix ADR-NNN." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:alternatives a rdf:Property ;
  rdfs:range xsd:string .

cf:decision_outcome a rdf:Property ;
  rdfs:range xsd:string .

cf:Wireframe a rdfs:Class ;
  rdfs:comment "Sketch / mock-up; refines a Page." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Task a rdfs:Class ;
  rdfs:comment "Engineering task card. Source dev-plan §3 T-NNN." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:Module a rdfs:Class ;
  rdfs:comment "Architectural module. Source: arch §2 M-NNN." ;
  rdfs:subClassOf cf:SoftwareArtifact .

cf:affected_by a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:delivered_by a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:satisfied_by a rdf:Property ;
  rdfs:range cf:SoftwareArtifact .

cf:verified_by a rdf:Property ;
  rdfs:range cf:TestCase .

cf:TestResultEnum a rdfs:Class .

cf:TestResultEnum.PASS a cf:TestResultEnum .

cf:TestResultEnum.FAIL a cf:TestResultEnum .

cf:TestResultEnum.BLOCKED a cf:TestResultEnum .

cf:TestResultEnum.SKIPPED a cf:TestResultEnum .

cf:TestResultEnum.PENDING a cf:TestResultEnum .

cf:RiskLevelEnum a rdfs:Class .

cf:RiskLevelEnum.HIGH a cf:RiskLevelEnum .

cf:RiskLevelEnum.MEDIUM a cf:RiskLevelEnum .

cf:RiskLevelEnum.LOW a cf:RiskLevelEnum .

cf:ProcessModelEnum a rdfs:Class ;
  rdfs:comment "SDLC process model selected at project scope." .

cf:ProcessModelEnum.WATERFALL a cf:ProcessModelEnum ;
  rdfs:comment "Phase-gated sequential." .

cf:ProcessModelEnum.AGILE a cf:ProcessModelEnum ;
  rdfs:comment "Sprint/Iteration based." .

cf:ProcessModelEnum.HYBRID a cf:ProcessModelEnum ;
  rdfs:comment "Mixed waterfall phases with internal sprints." .

cf:PriorityEnum a rdfs:Class .

cf:PriorityEnum.CRITICAL a cf:PriorityEnum .

cf:PriorityEnum.HIGH a cf:PriorityEnum .

cf:PriorityEnum.MEDIUM a cf:PriorityEnum .

cf:PriorityEnum.LOW a cf:PriorityEnum .

cf:TaskStatusEnum a rdfs:Class .

cf:TaskStatusEnum.TODO a cf:TaskStatusEnum .

cf:TaskStatusEnum.IN_PROGRESS a cf:TaskStatusEnum .

cf:TaskStatusEnum.BLOCKED a cf:TaskStatusEnum .

cf:TaskStatusEnum.REVIEW a cf:TaskStatusEnum .

cf:TaskStatusEnum.DONE a cf:TaskStatusEnum .

cf:TaskStatusEnum.CANCELLED a cf:TaskStatusEnum .

cf:EnvironmentEnum a rdfs:Class .

cf:EnvironmentEnum.DEV a cf:EnvironmentEnum .

cf:EnvironmentEnum.STAGING a cf:EnvironmentEnum .

cf:EnvironmentEnum.PRODUCTION a cf:EnvironmentEnum .

cf:EnvironmentEnum.PREVIEW a cf:EnvironmentEnum .

cf:ChangeStatusEnum a rdfs:Class .

cf:ChangeStatusEnum.OPEN a cf:ChangeStatusEnum .

cf:ChangeStatusEnum.UNDER_REVIEW a cf:ChangeStatusEnum .

cf:ChangeStatusEnum.APPROVED a cf:ChangeStatusEnum .

cf:ChangeStatusEnum.REJECTED a cf:ChangeStatusEnum .

cf:ChangeStatusEnum.APPLIED a cf:ChangeStatusEnum .

cf:ArtifactStatusEnum a rdfs:Class ;
  rdfs:comment "Lifecycle state of any SoftwareArtifact." .

cf:ArtifactStatusEnum.DRAFT a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.PROPOSED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.APPROVED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.IMPLEMENTED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.VERIFIED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.RELEASED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.DEPRECATED a cf:ArtifactStatusEnum .

cf:ArtifactStatusEnum.SUPERSEDED a cf:ArtifactStatusEnum .
