{
  "canon_meta": {
    "canon_id": "devon-runtime-row-semantics",
    "version": "1.0.0",
    "status": "ACTIVE",
    "contract_mode": "runtime_row_semantic_typing",
    "master_authority": "master_architecture_index.md"
  },
  "runtime_row_semantics": {
    "objective": "Define the canonical semantic typing contract for every runtime row published by Devon. Any row that feeds UI completion or operational grouping must carry these fields.",
    "required_fields": [
      "deployment_stage",
      "subcategory",
      "row_kind",
      "semantic_scope",
      "counts_toward_completion",
      "display_in_cards",
      "display_in_donuts",
      "ui_group",
      "source_contract"
    ],
    "row_kind_registry": {
      "item_runtime": "single observable item probe result",
      "matrix_requirement": "canonical matrix requirement row",
      "stage_rollup": "sovereign stage completion rollup — progress_pct is the canonical source for stage completion",
      "meta_reference": "non-operational hypothesis or reference row — counts_toward_completion must be false"
    },
    "semantic_scope_registry": {
      "operational_completion": "row is eligible for completion calculation",
      "canonical_requirement": "row maps to a canonical matrix requirement",
      "non_operational_hypothesis": "row is informational only — never counts toward completion"
    },
    "ui_reading_rules": [
      "global project completion reads only from project_progress.json",
      "stage completion reads only from stage_rollup.progress_pct",
      "subcategory cards must not render percentage donuts when counts_toward_completion rows = 0",
      "if a row is visible but not eligible, render MISSING / not eligible — never 0%",
      "no semantic mixing between stage_rollup rows and item_runtime rows in the same completion calculation"
    ]
  }
}
