Skip to main content

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 for details.
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.