diff --git a/docs/dependency-aware-scope-propagation.md b/docs/dependency-aware-scope-propagation.md
index e17ee58..13f84ec 100644
--- a/docs/dependency-aware-scope-propagation.md
+++ b/docs/dependency-aware-scope-propagation.md
@@ -47,6 +47,14 @@ The current implementation exposes this through `RegistryService`:
The impact result includes changed fact keys, impacted items, reason chains,
maximum propagation depth, breadth, and whether the root scope was affected.
+## Review Workflow
+
+The change-review UI shows dependency impact alongside ordinary run diffs. Each
+impacted item carries a freshness state, reason chain, propagation depth, and a
+recommended action. Curators can accept recalculated candidate text by approving
+the target run, keep prior approved claims by leaving the change unapproved, or
+edit approved characteristics through the existing manual registry forms.
+
## Interactive Visualization
The accepted implementation framework for the interactive graph view is
diff --git a/src/repo_registry/web_ui/views.py b/src/repo_registry/web_ui/views.py
index 1d48dc1..ef0d22a 100644
--- a/src/repo_registry/web_ui/views.py
+++ b/src/repo_registry/web_ui/views.py
@@ -1619,6 +1619,11 @@ def analysis_run_diff_detail(
base_analysis_run_id,
target_analysis_run_id,
)
+ impact = service.analyze_dependency_impact(
+ repository_id,
+ base_analysis_run_id,
+ target_analysis_run_id,
+ )
except NotFoundError as exc:
raise HTTPException(status_code=404, detail=str(exc)) from exc
display_name = repository_display_name(diff.repository)
@@ -1639,6 +1644,13 @@ def analysis_run_diff_detail(
+ Dependency Impact
+ Open Graph
+
No differences.
' +def render_dependency_impact_summary(impact: dict) -> str: + impacts = impact.get("impacts", []) + metric_row = ( + f'{escape(str(impact.get("propagation_breadth", 0)))} impacted' + f'depth {escape(str(impact.get("max_depth", 0)))}' + + ( + 'scope impacted' + if impact.get("scope_impacted") + else 'scope current' + ) + ) + changed_facts = impact.get("changed_fact_keys", []) + changed_fact_rows = "".join( + f'No changed facts reached approved characteristics.
' + ) + rows = "\n".join( + f""" +| Kind | Name | Freshness | Action | Depth | Why |
|---|
No approved downstream items were marked stale.
' + ) + return f""" +