> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Understanding the Source of Lineage Issues

> How Gable's lineage responds to code changes, and how to tell a real change from a detection gap

## What you're looking at

Gable shows how data moves through your service, from where it enters, through the transformations in your code, to what gets written or returned.

This is not a trace of your code line-by-line. It's a representation of **data behavior**:

* what inputs are used
* how they are transformed
* what outputs are produced

If those relationships stay the same, the lineage should stay the same — even if the code around it changes.

## What should (and shouldn't) change

Most code changes **do not change data lineage**.

Things like refactoring or renaming intermediary functions, moving logic into helpers, or reorganizing files usually leave lineage unchanged. If your change didn't alter what data is used or produced, you should expect the lineage to look the same.

If lineage *does* change in those cases, that's a signal worth checking.

On the other hand, lineage *should* change when you:

* add or remove input fields
* change how fields are computed
* modify the structure of the output
* introduce new writes, responses, or external calls (e.g. ingress / egress points)

## Where issues usually come from

When lineage looks wrong, it's rarely about internal transformation logic.

Most issues show up at the **edges of the system**, where data enters or leaves:

* how requests, events, or DB reads are handled (ingress)
* how data is written, returned, or emitted (egress)
* how data is passed across service or library boundaries

Changes in these areas can make lineage:

* disappear (missing paths)
* partially degrade (missing fields)
* or look disconnected

These parts of the system rely more on recognizable patterns and guided detection, rather than purely inferred data flow, which makes them more sensitive to structural changes in how the code is written.

## What to do if something looks off

If lineage doesn't match your expectations:

1. **Sanity check the change.** Did you modify inputs, outputs, or data structures?
2. **Look at boundaries.** Did anything change in how data enters or leaves the service?
3. **Determine if it's signal or scanner defect.**
   * If behavior changed → lineage should change
   * If behavior didn't change → this may be a scanner detection gap

In cases where detection needs help, Gable can be updated to better recognize the pattern. These are typically one-time fixes tied to a specific access pattern or abstraction.

To report a detection issue, select the affected path in the **Paths** table on the Component Details page and choose **Report defect** from the Actions menu. Gable receives the report along with the component version and path information. See [Field Mappings & Overrides](/docs/onboarding/field-mappings-and-overrides#reporting-a-defect) for details.

<Tip>
  While a detection gap is being addressed, you can keep your lineage accurate by suppressing the incorrect path and creating a path override — see [Field Mappings & Overrides](/docs/onboarding/field-mappings-and-overrides).
</Tip>
