PBSOI Semantic Diff v0.5

Base: /mnt/data/PBSOI_CISG_MVP_v0.5/semantic_diff_demo/base
Target: /mnt/data/PBSOI_CISG_MVP_v0.5/semantic_diff_demo/target
14
Semantic events
1
Dependencies Δ
4
Calls Δ
1
State writers Δ
1
Effects Δ
2
Motifs Δ
1
Findings Δ
0
Exceptions Δ
3
Impact targets Δ

Semantic events

SeverityKindChangeBasis
highfinding_addedFinding added: possibly_undefined_local at bad.py::brokendetector diff
mediumstate_writer_addedState writer added: root → app:global:CACHEwrites_state relation
mediummotif_addedMotif added: resource_scope at app.py::rootstructural motif inference
mediummotif_addedMotif added: read_modify_write at app.py::rootstructural motif inference
mediumimpact_breadth_changedReview breadth changed by +7: extra.py::persistImpact Engine depth 3
mediumimpact_breadth_changedReview breadth changed by +7: app.py::rootImpact Engine depth 3
mediumimpact_breadth_changedReview breadth changed by +6: helper.py::helperImpact Engine depth 3
mediumeffect_addedEffect added: root → file_ioeffect relation
mediumdependency_addedDependency added: app.py → extra.pynormalized imports relation
mediumcall_addedCall added: root → persistnormalized call relation
lowstate_reader_addedState reader added: root → app:global:CACHEreads_state relation
lowcall_addedCall added: root → strnormalized call relation
lowcall_addedCall added: root → opennormalized call relation
lowcall_addedCall added: root → f.writenormalized call relation

Impact breadth changes

Impact Δ is bounded review-scope change, not defect truth.

TargetΔ breadthBeforeAfterVector Δ
extra.py::persist+707{"affected_motifs": 2, "boundary_touchpoints": 3, "data_sinks": 0, "direct_callees": 0, "direct_callers": 1, "effect_touchpoints": 1, "likely_tests": 0, "local_data_values": 0, "phi_nodes": 0, "review_files": 1, "state_coupled_functions": 0, "state_regions_read": 0, "state_regions_written": 0, "transitive_downstream": 0, "transitive_upstream": 1}
app.py::root+718{"affected_motifs": 2, "boundary_touchpoints": 3, "data_sinks": 0, "direct_callees": 1, "direct_callers": 0, "effect_touchpoints": 1, "likely_tests": 0, "local_data_values": 4, "phi_nodes": 0, "review_files": 1, "state_coupled_functions": 0, "state_regions_read": 1, "state_regions_written": 1, "transitive_downstream": 1, "transitive_upstream": 0}
helper.py::helper+617{"affected_motifs": 2, "boundary_touchpoints": 3, "data_sinks": 0, "direct_callees": 0, "direct_callers": 0, "effect_touchpoints": 1, "likely_tests": 0, "local_data_values": 0, "phi_nodes": 0, "review_files": 0, "state_coupled_functions": 0, "state_regions_read": 0, "state_regions_written": 0, "transitive_downstream": 0, "transitive_upstream": 0}

File content identity

Hash changes are content evidence and are intentionally separate from semantic changes.

FileBase SHATarget SHABytes Δ
app.py9aeb874c18f3e62ec088553b6e6f+152

Possible rename / move candidates

Only unique exact normalized function-shape matches are shown; these remain inferred candidates.

FromToConfidenceBasis
No conservative rename/move candidate.
{
  "version": "semantic-diff-0.5",
  "definition": "Semantic diff compares normalized program identities and relations rather than source line positions. File hashes are reported separately as content change evidence.",
  "base": {
    "root": "/mnt/data/PBSOI_CISG_MVP_v0.5/semantic_diff_demo/base",
    "analyzer_version": "0.5.0",
    "metrics": {
      "loaded_files": 3,
      "nodes": 12,
      "edges": 14,
      "node_types": {
        "file": 3,
        "function": 3,
        "data_value": 3,
        "data_sink": 3
      },
      "edge_types": {
        "contains": 3,
        "imports": 1,
        "defines": 3,
        "contains_data": 3,
        "returns_value": 3,
        "calls": 1
      },
      "resolved_local_calls": 1,
      "boundary_calls": 0,
      "findings_by_category": {},
      "findings_by_severity": {},
      "motif_instances": 0,
      "motif_clusters": 1,
      "data_values": 3,
      "phi_nodes": 0,
      "data_edges": 6,
      "alias_edges": 0,
      "state_regions": 0,
      "state_reads": 0,
      "state_writes": 0,
      "module_binding_reads": 0,
      "exception_handlers": 0,
      "explicit_raises": 0,
      "unresolved_local_uses": 0,
      "warnings": 0
    }
  },
  "target": {
    "root": "/mnt/data/PBSOI_CISG_MVP_v0.5/semantic_diff_demo/target",
    "analyzer_version": "0.5.0",
    "metrics": {
      "loaded_files": 4,
      "nodes": 30,
      "edges": 40,
      "node_types": {
        "file": 4,
        "function": 4,
        "control": 2,
        "data_value": 7,
        "state_region": 1,
        "data_use": 2,
        "data_sink": 4,
        "effect": 1,
        "boundary_call": 3,
        "data_phi": 1,
        "data_undefined": 1
      },
      "edge_types": {
        "contains": 4,
        "imports": 2,
        "controls": 2,
        "defines": 8,
        "reads_state": 1,
        "writes_state": 1,
        "contains_data": 6,
        "flows_to": 3,
        "returns_value": 4,
        "effect": 1,
        "calls": 5,
        "guards": 1,
        "phi_input": 2
      },
      "resolved_local_calls": 2,
      "boundary_calls": 3,
      "findings_by_category": {
        "defect": 1
      },
      "findings_by_severity": {
        "high": 1
      },
      "motif_instances": 2,
      "motif_clusters": 1,
      "data_values": 7,
      "phi_nodes": 1,
      "data_edges": 18,
      "alias_edges": 0,
      "state_regions": 1,
      "state_reads": 1,
      "state_writes": 1,
      "module_binding_reads": 0,
      "exception_handlers": 0,
      "explicit_raises": 0,
      "unresolved_local_uses": 1,
      "warnings": 0
    }
  },
  "summary": {
    "files_added": 1,
    "files_removed": 0,
    "files_modified": 1,
    "entities_added": 2,
    "entities_removed": 0,
    "dependencies_added": 1,
    "dependencies_removed": 0,
    "calls_added": 4,
    "calls_removed": 0,
    "state_readers_added": 1,
    "state_readers_removed": 0,
    "state_writers_added": 1,
    "state_writers_removed": 0,
    "effects_added": 1,
    "effects_removed": 0,
    "motifs_added": 2,
    "motifs_removed": 0,
    "findings_added": 1,
    "findings_resolved": 0,
    "exception_structures_added": 0,
    "exception_structures_removed": 0,
    "impact_targets_changed": 3,
    "possible_renames_or_moves": 0,
    "semantic_events": 14
  },
  "changes": {
    "files": {
      "added": [
        {
          "path": "bad.py",
          "sha256": "fa44a6a601b5f7c68da73595b30fa2a1944eeaab51e7dcbdb52828ecb0b093a2",
          "bytes": 66,
          "status": "verified_local_content"
        }
      ],
      "removed": [],
      "modified": [
        {
          "path": "app.py",
          "base_sha256": "9aeb874c18f3e60ca1fc718009b36e64689f02628b262d6c5bc37e2cb323b4f7",
          "target_sha256": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "base_bytes": 72,
          "target_bytes": 224
        }
      ]
    },
    "entities": {
      "added": [
        {
          "id": "file_5ea031f3fad82a13",
          "type": "file",
          "label": "bad.py",
          "path": "bad.py",
          "module": "bad",
          "status": "observed",
          "confidence": 1.0,
          "motif_signature": null
        },
        {
          "id": "fn_3ea4a988ecfabd70",
          "type": "function",
          "label": "broken",
          "symbol": "broken",
          "path": "bad.py",
          "module": "bad",
          "status": "observed",
          "confidence": 1.0,
          "motif_signature": "motif_exact_33da3ae324f9"
        }
      ],
      "removed": []
    },
    "relations": {
      "calls": {
        "added": [
          {
            "type": "calls",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "boundary_4300948e30f37326",
              "type": "boundary_call",
              "label": "f.write",
              "status": "unresolved",
              "confidence": 0.4
            },
            "resolution": "boundary",
            "status": "unresolved",
            "confidence": 0.4,
            "callee": "f.write",
            "evidence": {
              "path": "app.py",
              "line": 11,
              "end_line": 11,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          },
          {
            "type": "calls",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "boundary_3dbe928d4a809b5c",
              "type": "boundary_call",
              "label": "open",
              "status": "unresolved",
              "confidence": 0.4
            },
            "resolution": "boundary",
            "status": "unresolved",
            "confidence": 0.4,
            "callee": "open",
            "evidence": {
              "path": "app.py",
              "line": 10,
              "end_line": 10,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          },
          {
            "type": "calls",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "boundary_b99cdd07851017b7",
              "type": "boundary_call",
              "label": "str",
              "status": "unresolved",
              "confidence": 0.4
            },
            "resolution": "boundary",
            "status": "unresolved",
            "confidence": 0.4,
            "callee": "str",
            "evidence": {
              "path": "app.py",
              "line": 11,
              "end_line": 11,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          },
          {
            "type": "calls",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "fn_381caeb25920760b",
              "type": "function",
              "label": "persist",
              "symbol": "persist",
              "path": "extra.py",
              "module": "extra",
              "status": "observed",
              "confidence": 1.0
            },
            "resolution": "local",
            "status": "observed",
            "confidence": 0.92,
            "callee": "persist",
            "evidence": {
              "path": "app.py",
              "line": 12,
              "end_line": 12,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          }
        ],
        "removed": []
      },
      "effect": {
        "added": [
          {
            "type": "effect",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "effect_531521d23c3d9812",
              "type": "effect",
              "label": "file_io",
              "status": "strongly_inferred",
              "confidence": 0.68
            },
            "resolution": null,
            "status": "strongly_inferred",
            "confidence": 0.68,
            "callee": "open",
            "evidence": {
              "path": "app.py",
              "line": 10,
              "end_line": 10,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          }
        ],
        "removed": []
      },
      "imports": {
        "added": [
          {
            "type": "imports",
            "source": {
              "id": "file_13cce7fd076299c8",
              "type": "file",
              "label": "app.py",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "file_4d74821404433b49",
              "type": "file",
              "label": "extra.py",
              "path": "extra.py",
              "module": "extra",
              "status": "observed",
              "confidence": 1.0
            },
            "resolution": "local",
            "status": "observed",
            "confidence": 1.0,
            "callee": null,
            "evidence": {
              "path": "app.py",
              "line": 2,
              "end_line": 2,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          }
        ],
        "removed": []
      },
      "reads_state": {
        "added": [
          {
            "type": "reads_state",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "state_region_84ae93567ca74dff",
              "type": "state_region",
              "label": "app:global:CACHE",
              "region_kind": "module_global",
              "status": "observed",
              "confidence": 0.95
            },
            "resolution": null,
            "status": "observed",
            "confidence": 0.95,
            "callee": null,
            "evidence": {
              "path": "app.py",
              "line": 8,
              "end_line": 8,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          }
        ],
        "removed": []
      },
      "writes_state": {
        "added": [
          {
            "type": "writes_state",
            "source": {
              "id": "fn_4e3d7579479d3d25",
              "type": "function",
              "label": "root",
              "symbol": "root",
              "path": "app.py",
              "module": "app",
              "status": "observed",
              "confidence": 1.0
            },
            "target": {
              "id": "state_region_84ae93567ca74dff",
              "type": "state_region",
              "label": "app:global:CACHE",
              "region_kind": "module_global",
              "status": "observed",
              "confidence": 0.95
            },
            "resolution": null,
            "status": "observed",
            "confidence": 0.95,
            "callee": null,
            "evidence": {
              "path": "app.py",
              "line": 9,
              "end_line": 9,
              "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
              "source_kind": "code"
            }
          }
        ],
        "removed": []
      }
    },
    "motifs": {
      "added": [
        {
          "id": "motif_instance_bcc099d6b4330aac",
          "kind": "read_modify_write",
          "node_id": "fn_4e3d7579479d3d25",
          "path": "app.py",
          "symbol": "root",
          "confidence": 0.86,
          "rule": "same function reads and writes the same state target",
          "identity_basis": "structural_features",
          "status": "strongly_inferred"
        },
        {
          "id": "motif_instance_31c7f624f011b5c7",
          "kind": "resource_scope",
          "node_id": "fn_4e3d7579479d3d25",
          "path": "app.py",
          "symbol": "root",
          "confidence": 0.92,
          "rule": "with/async-with establishes bounded resource scope",
          "identity_basis": "structural_features",
          "status": "strongly_inferred"
        }
      ],
      "removed": []
    },
    "findings": {
      "added": [
        {
          "type": "possibly_undefined_local",
          "category": "defect",
          "severity": "high",
          "path": "bad.py",
          "symbol": "broken",
          "line": 4,
          "variable": "value",
          "rule": "local_value_must_be_defined_on_all_reaching_paths",
          "message": "Local variable 'value' may be undefined on at least one reaching control-flow path.",
          "status": "violated"
        }
      ],
      "resolved": []
    },
    "exceptions": {
      "added": [],
      "removed": []
    },
    "impact": {
      "changed": [
        {
          "id": "fn_381caeb25920760b",
          "type": "function",
          "path": "extra.py",
          "symbol": "persist",
          "depth": 3,
          "base_review_breadth": 0,
          "target_review_breadth": 7,
          "review_breadth_delta": 7,
          "vector_delta": {
            "affected_motifs": 2,
            "boundary_touchpoints": 3,
            "data_sinks": 0,
            "direct_callees": 0,
            "direct_callers": 1,
            "effect_touchpoints": 1,
            "likely_tests": 0,
            "local_data_values": 0,
            "phi_nodes": 0,
            "review_files": 1,
            "state_coupled_functions": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "transitive_downstream": 0,
            "transitive_upstream": 1
          },
          "base_vector": {
            "direct_callers": 0,
            "direct_callees": 0,
            "transitive_upstream": 0,
            "transitive_downstream": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 0,
            "effect_touchpoints": 0,
            "affected_motifs": 0,
            "review_files": 1,
            "local_data_values": 2,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          },
          "target_vector": {
            "direct_callers": 1,
            "direct_callees": 0,
            "transitive_upstream": 1,
            "transitive_downstream": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 3,
            "effect_touchpoints": 1,
            "affected_motifs": 2,
            "review_files": 2,
            "local_data_values": 2,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          }
        },
        {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "path": "app.py",
          "symbol": "root",
          "depth": 3,
          "base_review_breadth": 1,
          "target_review_breadth": 8,
          "review_breadth_delta": 7,
          "vector_delta": {
            "affected_motifs": 2,
            "boundary_touchpoints": 3,
            "data_sinks": 0,
            "direct_callees": 1,
            "direct_callers": 0,
            "effect_touchpoints": 1,
            "likely_tests": 0,
            "local_data_values": 4,
            "phi_nodes": 0,
            "review_files": 1,
            "state_coupled_functions": 0,
            "state_regions_read": 1,
            "state_regions_written": 1,
            "transitive_downstream": 1,
            "transitive_upstream": 0
          },
          "base_vector": {
            "direct_callers": 0,
            "direct_callees": 1,
            "transitive_upstream": 0,
            "transitive_downstream": 1,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 0,
            "effect_touchpoints": 0,
            "affected_motifs": 0,
            "review_files": 2,
            "local_data_values": 2,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          },
          "target_vector": {
            "direct_callers": 0,
            "direct_callees": 2,
            "transitive_upstream": 0,
            "transitive_downstream": 2,
            "state_regions_read": 1,
            "state_regions_written": 1,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 3,
            "effect_touchpoints": 1,
            "affected_motifs": 2,
            "review_files": 3,
            "local_data_values": 6,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          }
        },
        {
          "id": "fn_48ffdf8ff0705994",
          "type": "function",
          "path": "helper.py",
          "symbol": "helper",
          "depth": 3,
          "base_review_breadth": 1,
          "target_review_breadth": 7,
          "review_breadth_delta": 6,
          "vector_delta": {
            "affected_motifs": 2,
            "boundary_touchpoints": 3,
            "data_sinks": 0,
            "direct_callees": 0,
            "direct_callers": 0,
            "effect_touchpoints": 1,
            "likely_tests": 0,
            "local_data_values": 0,
            "phi_nodes": 0,
            "review_files": 0,
            "state_coupled_functions": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "transitive_downstream": 0,
            "transitive_upstream": 0
          },
          "base_vector": {
            "direct_callers": 1,
            "direct_callees": 0,
            "transitive_upstream": 1,
            "transitive_downstream": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 0,
            "effect_touchpoints": 0,
            "affected_motifs": 0,
            "review_files": 2,
            "local_data_values": 2,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          },
          "target_vector": {
            "direct_callers": 1,
            "direct_callees": 0,
            "transitive_upstream": 1,
            "transitive_downstream": 0,
            "state_regions_read": 0,
            "state_regions_written": 0,
            "state_coupled_functions": 0,
            "boundary_touchpoints": 3,
            "effect_touchpoints": 1,
            "affected_motifs": 2,
            "review_files": 2,
            "local_data_values": 2,
            "phi_nodes": 0,
            "data_sinks": 1,
            "likely_tests": 0
          }
        }
      ],
      "meta": {
        "evaluated": 3,
        "candidate_count": 3,
        "cap": 500,
        "truncated": false,
        "depth": 3
      }
    },
    "possible_renames_or_moves": []
  },
  "semantic_events": [
    {
      "kind": "finding_added",
      "severity": "high",
      "message": "Finding added: possibly_undefined_local at bad.py::broken",
      "basis": "detector diff",
      "payload": {
        "type": "possibly_undefined_local",
        "category": "defect",
        "severity": "high",
        "path": "bad.py",
        "symbol": "broken",
        "line": 4,
        "variable": "value",
        "rule": "local_value_must_be_defined_on_all_reaching_paths",
        "message": "Local variable 'value' may be undefined on at least one reaching control-flow path.",
        "status": "violated"
      }
    },
    {
      "kind": "state_writer_added",
      "severity": "medium",
      "message": "State writer added: root → app:global:CACHE",
      "basis": "writes_state relation",
      "payload": {
        "type": "writes_state",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "state_region_84ae93567ca74dff",
          "type": "state_region",
          "label": "app:global:CACHE",
          "region_kind": "module_global",
          "status": "observed",
          "confidence": 0.95
        },
        "resolution": null,
        "status": "observed",
        "confidence": 0.95,
        "callee": null,
        "evidence": {
          "path": "app.py",
          "line": 9,
          "end_line": 9,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "motif_added",
      "severity": "medium",
      "message": "Motif added: resource_scope at app.py::root",
      "basis": "structural motif inference",
      "payload": {
        "id": "motif_instance_31c7f624f011b5c7",
        "kind": "resource_scope",
        "node_id": "fn_4e3d7579479d3d25",
        "path": "app.py",
        "symbol": "root",
        "confidence": 0.92,
        "rule": "with/async-with establishes bounded resource scope",
        "identity_basis": "structural_features",
        "status": "strongly_inferred"
      }
    },
    {
      "kind": "motif_added",
      "severity": "medium",
      "message": "Motif added: read_modify_write at app.py::root",
      "basis": "structural motif inference",
      "payload": {
        "id": "motif_instance_bcc099d6b4330aac",
        "kind": "read_modify_write",
        "node_id": "fn_4e3d7579479d3d25",
        "path": "app.py",
        "symbol": "root",
        "confidence": 0.86,
        "rule": "same function reads and writes the same state target",
        "identity_basis": "structural_features",
        "status": "strongly_inferred"
      }
    },
    {
      "kind": "impact_breadth_changed",
      "severity": "medium",
      "message": "Review breadth changed by +7: extra.py::persist",
      "basis": "Impact Engine depth 3",
      "payload": {
        "id": "fn_381caeb25920760b",
        "type": "function",
        "path": "extra.py",
        "symbol": "persist",
        "depth": 3,
        "base_review_breadth": 0,
        "target_review_breadth": 7,
        "review_breadth_delta": 7,
        "vector_delta": {
          "affected_motifs": 2,
          "boundary_touchpoints": 3,
          "data_sinks": 0,
          "direct_callees": 0,
          "direct_callers": 1,
          "effect_touchpoints": 1,
          "likely_tests": 0,
          "local_data_values": 0,
          "phi_nodes": 0,
          "review_files": 1,
          "state_coupled_functions": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "transitive_downstream": 0,
          "transitive_upstream": 1
        },
        "base_vector": {
          "direct_callers": 0,
          "direct_callees": 0,
          "transitive_upstream": 0,
          "transitive_downstream": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 0,
          "effect_touchpoints": 0,
          "affected_motifs": 0,
          "review_files": 1,
          "local_data_values": 2,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        },
        "target_vector": {
          "direct_callers": 1,
          "direct_callees": 0,
          "transitive_upstream": 1,
          "transitive_downstream": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 3,
          "effect_touchpoints": 1,
          "affected_motifs": 2,
          "review_files": 2,
          "local_data_values": 2,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        }
      }
    },
    {
      "kind": "impact_breadth_changed",
      "severity": "medium",
      "message": "Review breadth changed by +7: app.py::root",
      "basis": "Impact Engine depth 3",
      "payload": {
        "id": "fn_4e3d7579479d3d25",
        "type": "function",
        "path": "app.py",
        "symbol": "root",
        "depth": 3,
        "base_review_breadth": 1,
        "target_review_breadth": 8,
        "review_breadth_delta": 7,
        "vector_delta": {
          "affected_motifs": 2,
          "boundary_touchpoints": 3,
          "data_sinks": 0,
          "direct_callees": 1,
          "direct_callers": 0,
          "effect_touchpoints": 1,
          "likely_tests": 0,
          "local_data_values": 4,
          "phi_nodes": 0,
          "review_files": 1,
          "state_coupled_functions": 0,
          "state_regions_read": 1,
          "state_regions_written": 1,
          "transitive_downstream": 1,
          "transitive_upstream": 0
        },
        "base_vector": {
          "direct_callers": 0,
          "direct_callees": 1,
          "transitive_upstream": 0,
          "transitive_downstream": 1,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 0,
          "effect_touchpoints": 0,
          "affected_motifs": 0,
          "review_files": 2,
          "local_data_values": 2,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        },
        "target_vector": {
          "direct_callers": 0,
          "direct_callees": 2,
          "transitive_upstream": 0,
          "transitive_downstream": 2,
          "state_regions_read": 1,
          "state_regions_written": 1,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 3,
          "effect_touchpoints": 1,
          "affected_motifs": 2,
          "review_files": 3,
          "local_data_values": 6,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        }
      }
    },
    {
      "kind": "impact_breadth_changed",
      "severity": "medium",
      "message": "Review breadth changed by +6: helper.py::helper",
      "basis": "Impact Engine depth 3",
      "payload": {
        "id": "fn_48ffdf8ff0705994",
        "type": "function",
        "path": "helper.py",
        "symbol": "helper",
        "depth": 3,
        "base_review_breadth": 1,
        "target_review_breadth": 7,
        "review_breadth_delta": 6,
        "vector_delta": {
          "affected_motifs": 2,
          "boundary_touchpoints": 3,
          "data_sinks": 0,
          "direct_callees": 0,
          "direct_callers": 0,
          "effect_touchpoints": 1,
          "likely_tests": 0,
          "local_data_values": 0,
          "phi_nodes": 0,
          "review_files": 0,
          "state_coupled_functions": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "transitive_downstream": 0,
          "transitive_upstream": 0
        },
        "base_vector": {
          "direct_callers": 1,
          "direct_callees": 0,
          "transitive_upstream": 1,
          "transitive_downstream": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 0,
          "effect_touchpoints": 0,
          "affected_motifs": 0,
          "review_files": 2,
          "local_data_values": 2,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        },
        "target_vector": {
          "direct_callers": 1,
          "direct_callees": 0,
          "transitive_upstream": 1,
          "transitive_downstream": 0,
          "state_regions_read": 0,
          "state_regions_written": 0,
          "state_coupled_functions": 0,
          "boundary_touchpoints": 3,
          "effect_touchpoints": 1,
          "affected_motifs": 2,
          "review_files": 2,
          "local_data_values": 2,
          "phi_nodes": 0,
          "data_sinks": 1,
          "likely_tests": 0
        }
      }
    },
    {
      "kind": "effect_added",
      "severity": "medium",
      "message": "Effect added: root → file_io",
      "basis": "effect relation",
      "payload": {
        "type": "effect",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "effect_531521d23c3d9812",
          "type": "effect",
          "label": "file_io",
          "status": "strongly_inferred",
          "confidence": 0.68
        },
        "resolution": null,
        "status": "strongly_inferred",
        "confidence": 0.68,
        "callee": "open",
        "evidence": {
          "path": "app.py",
          "line": 10,
          "end_line": 10,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "dependency_added",
      "severity": "medium",
      "message": "Dependency added: app.py → extra.py",
      "basis": "normalized imports relation",
      "payload": {
        "type": "imports",
        "source": {
          "id": "file_13cce7fd076299c8",
          "type": "file",
          "label": "app.py",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "file_4d74821404433b49",
          "type": "file",
          "label": "extra.py",
          "path": "extra.py",
          "module": "extra",
          "status": "observed",
          "confidence": 1.0
        },
        "resolution": "local",
        "status": "observed",
        "confidence": 1.0,
        "callee": null,
        "evidence": {
          "path": "app.py",
          "line": 2,
          "end_line": 2,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "call_added",
      "severity": "medium",
      "message": "Call added: root → persist",
      "basis": "normalized call relation",
      "payload": {
        "type": "calls",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "fn_381caeb25920760b",
          "type": "function",
          "label": "persist",
          "symbol": "persist",
          "path": "extra.py",
          "module": "extra",
          "status": "observed",
          "confidence": 1.0
        },
        "resolution": "local",
        "status": "observed",
        "confidence": 0.92,
        "callee": "persist",
        "evidence": {
          "path": "app.py",
          "line": 12,
          "end_line": 12,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "state_reader_added",
      "severity": "low",
      "message": "State reader added: root → app:global:CACHE",
      "basis": "reads_state relation",
      "payload": {
        "type": "reads_state",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "state_region_84ae93567ca74dff",
          "type": "state_region",
          "label": "app:global:CACHE",
          "region_kind": "module_global",
          "status": "observed",
          "confidence": 0.95
        },
        "resolution": null,
        "status": "observed",
        "confidence": 0.95,
        "callee": null,
        "evidence": {
          "path": "app.py",
          "line": 8,
          "end_line": 8,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "call_added",
      "severity": "low",
      "message": "Call added: root → str",
      "basis": "normalized call relation",
      "payload": {
        "type": "calls",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "boundary_b99cdd07851017b7",
          "type": "boundary_call",
          "label": "str",
          "status": "unresolved",
          "confidence": 0.4
        },
        "resolution": "boundary",
        "status": "unresolved",
        "confidence": 0.4,
        "callee": "str",
        "evidence": {
          "path": "app.py",
          "line": 11,
          "end_line": 11,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "call_added",
      "severity": "low",
      "message": "Call added: root → open",
      "basis": "normalized call relation",
      "payload": {
        "type": "calls",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "boundary_3dbe928d4a809b5c",
          "type": "boundary_call",
          "label": "open",
          "status": "unresolved",
          "confidence": 0.4
        },
        "resolution": "boundary",
        "status": "unresolved",
        "confidence": 0.4,
        "callee": "open",
        "evidence": {
          "path": "app.py",
          "line": 10,
          "end_line": 10,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    },
    {
      "kind": "call_added",
      "severity": "low",
      "message": "Call added: root → f.write",
      "basis": "normalized call relation",
      "payload": {
        "type": "calls",
        "source": {
          "id": "fn_4e3d7579479d3d25",
          "type": "function",
          "label": "root",
          "symbol": "root",
          "path": "app.py",
          "module": "app",
          "status": "observed",
          "confidence": 1.0
        },
        "target": {
          "id": "boundary_4300948e30f37326",
          "type": "boundary_call",
          "label": "f.write",
          "status": "unresolved",
          "confidence": 0.4
        },
        "resolution": "boundary",
        "status": "unresolved",
        "confidence": 0.4,
        "callee": "f.write",
        "evidence": {
          "path": "app.py",
          "line": 11,
          "end_line": 11,
          "source_hash": "2ec088553b6e6f879a433343eeb5787d1f3ae618fea1700e555576f1617c8fb2",
          "source_kind": "code"
        }
      }
    }
  ],
  "epistemic_boundary": {
    "observed": [
      "per-file content hash change",
      "source-derived entity presence",
      "normalized import/call/state/effect relations",
      "detector findings"
    ],
    "strongly_inferred": [
      "motif membership",
      "bounded Impact Engine breadth change",
      "unique normalized-shape rename/move candidate"
    ],
    "unresolved": [
      "behavioral equivalence outside the analyzed static subset",
      "dynamic dispatch/reflection/native effects",
      "whether an added semantic relation changes user-visible behavior",
      "rename/move candidates when structural signatures are ambiguous"
    ]
  }
}

Epistemic boundary

Observed: normalized source-derived entities/relations and file content hashes.

Strongly inferred: motifs, bounded impact changes, conservative rename/move candidates.

Unresolved: runtime-only behavior, reflection/native code, and whether a semantic relation change alters user-visible behavior.