diff --git a/src/repo_registry/web_ui/views.py b/src/repo_registry/web_ui/views.py index a7c6b52..3e5f3e4 100644 --- a/src/repo_registry/web_ui/views.py +++ b/src/repo_registry/web_ui/views.py @@ -2232,6 +2232,7 @@ def filter_element_rows( str(row.get("target_id", "")), str(row.get("reference_kind", "")), str(row.get("reference_id", "")), + support_orientation_label(row), source_refs_text(row["source_refs"]), ] ).lower() @@ -2291,11 +2292,45 @@ def render_element_source_detail(row: dict) -> str: return ( f'
supports {target}{f" #{target_id}" if target_id else ""}' f' references {reference_kind}{f" #{reference_id}" if reference_id else ""}
' + f'{render_support_orientation(row)}
' f'{render_sources(row["source_refs"])}' ) return render_sources(row["source_refs"]) +def support_orientation_label(row: dict) -> str: + if row.get("item_kind") != "evidence": + return "" + target_kind = str(row.get("target_kind") or "capability") + reference_kind = str(row.get("reference_kind") or "source") + levels = { + "scope": 0, + "ability": 1, + "capability": 2, + "feature": 3, + "fact": 4, + "source": 4, + "content": 4, + "chunk": 4, + } + target_level = levels.get(target_kind) + reference_level = levels.get(reference_kind) + if target_level is None or reference_level is None: + return "unclassified support" + if reference_level > target_level: + return "downward support" + if reference_level == target_level: + return "same-level support review" + return "upward support review" + + +def render_support_orientation(row: dict) -> str: + label = support_orientation_label(row) + if not label: + return "" + return f'{escape(label)}' + + def render_element_actions( row: dict, repository_id: int, @@ -3020,6 +3055,7 @@ def render_approved_evidence(evidence: dict, repository_id: int) -> str: {escape(evidence["strength"])} supports {target_kind}{f' #{target_id}' if target_id else ''} references {reference_kind}{f' #{reference_id}' if reference_id else ''} + {render_support_orientation(evidence | {"item_kind": "evidence"})} {escape(evidence["reference"])} {render_sources(evidence.get("source_refs", []))}