coltrace 0.1.0.dev5__tar.gz → 0.1.0.dev7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. {coltrace-0.1.0.dev5/src/coltrace.egg-info → coltrace-0.1.0.dev7}/PKG-INFO +55 -9
  2. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/README.md +307 -261
  3. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/architecture.md +15 -1
  4. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/backlog.md +85 -66
  5. coltrace-0.1.0.dev7/docs/compatibility-checkpoint.md +159 -0
  6. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/decisions.md +76 -57
  7. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/lineage-json.md +248 -218
  8. coltrace-0.1.0.dev7/docs/supported-patterns.md +440 -0
  9. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/troubleshooting.md +131 -85
  10. coltrace-0.1.0.dev7/examples/databricks_project/README.md +33 -0
  11. coltrace-0.1.0.dev7/examples/databricks_project/main_orchestrator.py +29 -0
  12. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/extract/__init__.py +0 -0
  13. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/extract/primary_extract.py +26 -0
  14. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/main_orchestrator.py +25 -0
  15. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/publish/__init__.py +0 -0
  16. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/publish/serialize_webapp.py +19 -0
  17. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/transform/__init__.py +0 -0
  18. coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/transform/priority_rank.py +21 -0
  19. coltrace-0.1.0.dev7/examples/databricks_project/shared/__init__.py +0 -0
  20. coltrace-0.1.0.dev7/examples/databricks_project/shared/config.py +8 -0
  21. coltrace-0.1.0.dev7/examples/databricks_project/shared/token_tracker.py +20 -0
  22. coltrace-0.1.0.dev7/examples/databricks_project/shared/warehouse.py +22 -0
  23. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/notebook_cell.py +168 -128
  24. coltrace-0.1.0.dev7/examples/robustness_pipeline/README.md +29 -0
  25. coltrace-0.1.0.dev7/examples/robustness_pipeline/extract.py +13 -0
  26. coltrace-0.1.0.dev7/examples/robustness_pipeline/pipeline.py +14 -0
  27. coltrace-0.1.0.dev7/examples/robustness_pipeline/transform.py +22 -0
  28. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/pyproject.toml +54 -48
  29. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/__init__.py +22 -22
  30. coltrace-0.1.0.dev7/src/coltrace/analysis.py +7974 -0
  31. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/cli.py +717 -704
  32. coltrace-0.1.0.dev7/src/coltrace/compatibility.py +251 -0
  33. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/exporters.py +711 -705
  34. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/history.py +2 -0
  35. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/journey.py +628 -587
  36. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/lineage_models.py +115 -115
  37. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/models.py +92 -92
  38. coltrace-0.1.0.dev7/src/coltrace/notebooks.py +253 -0
  39. coltrace-0.1.0.dev7/src/coltrace/pandas_api.py +1052 -0
  40. coltrace-0.1.0.dev7/src/coltrace/py.typed +0 -0
  41. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/scanner.py +412 -288
  42. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7/src/coltrace.egg-info}/PKG-INFO +55 -9
  43. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/SOURCES.txt +33 -0
  44. coltrace-0.1.0.dev7/tests/integration/test_annotation_effects.py +238 -0
  45. coltrace-0.1.0.dev7/tests/integration/test_compatibility_cli.py +51 -0
  46. coltrace-0.1.0.dev7/tests/integration/test_conditional_flow.py +354 -0
  47. coltrace-0.1.0.dev7/tests/integration/test_databricks_example.py +131 -0
  48. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_lineage_acceptance.py +303 -253
  49. coltrace-0.1.0.dev7/tests/integration/test_notebook_reporting.py +78 -0
  50. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_pandas_boundaries.py +328 -328
  51. coltrace-0.1.0.dev7/tests/integration/test_pandas_observation.py +192 -0
  52. coltrace-0.1.0.dev7/tests/integration/test_production_patterns.py +293 -0
  53. coltrace-0.1.0.dev7/tests/integration/test_project_compatibility.py +458 -0
  54. coltrace-0.1.0.dev7/tests/integration/test_public_project_patterns.py +285 -0
  55. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_analysis.py +498 -463
  56. coltrace-0.1.0.dev7/tests/unit/test_compatibility.py +124 -0
  57. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_exporters.py +286 -286
  58. coltrace-0.1.0.dev7/tests/unit/test_notebooks.py +91 -0
  59. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_source_models.py +283 -283
  60. coltrace-0.1.0.dev5/docs/supported-patterns.md +0 -216
  61. coltrace-0.1.0.dev5/src/coltrace/analysis.py +0 -3176
  62. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/LICENSE +0 -0
  63. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/MANIFEST.in +0 -0
  64. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/accuracy.md +0 -0
  65. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/column-history.md +0 -0
  66. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/column-journey-checkpoint.md +0 -0
  67. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/database-patterns.md +0 -0
  68. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/database-sources.md +0 -0
  69. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/discovery-json.md +0 -0
  70. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/graph-workspace-checkpoint.md +0 -0
  71. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/history-checkpoint.md +0 -0
  72. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/mvp-checkpoint.md +0 -0
  73. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/nlp-checkpoint.md +0 -0
  74. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/other-column-checkpoint.md +0 -0
  75. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/pandas-sources-proposal.md +0 -0
  76. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/phase-1.md +0 -0
  77. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/read-capture.md +0 -0
  78. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/docs/source-checkpoint.md +0 -0
  79. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/database_pipeline/README.md +0 -0
  80. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/database_pipeline/build_query.py +0 -0
  81. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/database_pipeline/pipeline.py +0 -0
  82. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/database_pipeline/pyproject.toml +0 -0
  83. /coltrace-0.1.0.dev5/src/coltrace/py.typed → /coltrace-0.1.0.dev7/examples/databricks_project/pipeline_a/__init__.py +0 -0
  84. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/extract/prices.py +0 -0
  85. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/features/pricing.py +0 -0
  86. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/pipeline.py +0 -0
  87. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/pricing_pipeline/transform/pricing.py +0 -0
  88. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/read_capture/README.md +0 -0
  89. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/read_capture/project/input.csv +0 -0
  90. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/read_capture/project/pipeline.py +0 -0
  91. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/read_capture/run_capture.py +0 -0
  92. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/sample_pipeline/prices.py +0 -0
  93. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/text_pipeline/README.md +0 -0
  94. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/text_pipeline/pipeline.py +0 -0
  95. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/text_pipeline/processing.py +0 -0
  96. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/text_pipeline/readers.py +0 -0
  97. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/examples/text_pipeline/text.py +0 -0
  98. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/setup.cfg +0 -0
  99. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/__main__.py +0 -0
  100. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/callbacks.py +0 -0
  101. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/capture.py +0 -0
  102. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/collector.py +0 -0
  103. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/graph.py +0 -0
  104. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/nosql_sources.py +0 -0
  105. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/source_models.py +0 -0
  106. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/source_readers.py +0 -0
  107. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/sql_sources.py +0 -0
  108. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/templates/graph.html +0 -0
  109. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace/visual_layout.py +0 -0
  110. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/dependency_links.txt +0 -0
  111. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/entry_points.txt +0 -0
  112. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/requires.txt +0 -0
  113. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/src/coltrace.egg-info/top_level.txt +0 -0
  114. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/extract/prices.py +0 -0
  115. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/features/pricing.py +0 -0
  116. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/pipeline.py +0 -0
  117. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/fixtures/sample_pipeline/transform/pricing.py +0 -0
  118. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_callback_roles.py +0 -0
  119. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_capture_workflow.py +0 -0
  120. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_cli.py +0 -0
  121. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_column_story.py +0 -0
  122. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_database_sources.py +0 -0
  123. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_journey_boundaries.py +0 -0
  124. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_nosql_extraction.py +0 -0
  125. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_other_column_stories.py +0 -0
  126. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_reader_inventory.py +0 -0
  127. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_resolution_boundaries.py +0 -0
  128. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_scan_project.py +0 -0
  129. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_source_config.py +0 -0
  130. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_source_precision.py +0 -0
  131. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_sql_reader_boundaries.py +0 -0
  132. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/integration/test_text_pipeline.py +0 -0
  133. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_callbacks.py +0 -0
  134. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_collector.py +0 -0
  135. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_graph.py +0 -0
  136. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_graph_workspace.py +0 -0
  137. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_history.py +0 -0
  138. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_journey.py +0 -0
  139. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_nosql_sources.py +0 -0
  140. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_read_capture.py +0 -0
  141. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_scanner.py +0 -0
  142. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_source_presentation.py +0 -0
  143. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_sql_sources.py +0 -0
  144. {coltrace-0.1.0.dev5 → coltrace-0.1.0.dev7}/tests/unit/test_visual_layout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coltrace
3
- Version: 0.1.0.dev5
3
+ Version: 0.1.0.dev7
4
4
  Summary: Static Pandas column lineage, impact analysis, and local dependency graphs
5
5
  Author: Cristiano Diniz
6
6
  License-Expression: MIT
@@ -32,7 +32,7 @@ column versions across direct function calls. Static scanning never imports or
32
32
  executes the project or reads its input data. Optional read capture observes
33
33
  column labels while you explicitly execute your own pipeline.
34
34
 
35
- **Development preview: `0.1.0.dev5`.** The supported subset is deliberately small.
35
+ **Development preview: `0.1.0.dev7`.** The supported subset is deliberately small.
36
36
  Unsupported operations produce diagnostics and may interrupt lineage. A graph
37
37
  with no edge is not proof that a dependency does not exist.
38
38
 
@@ -56,7 +56,7 @@ separate release step; these commands install the local project.
56
56
 
57
57
  ## Start at the data source
58
58
 
59
- The local dev5 checkpoint recognizes supported SQL-to-Pandas and NoSQL-to-Pandas
59
+ The source checkpoint recognizes supported SQL-to-Pandas and NoSQL-to-Pandas
60
60
  extractions. Literal SQL projections, aliases and expressions describe source
61
61
  fields before their first Python use. Query filters are control metadata rather
62
62
  than value dependencies of every output. The supplied
@@ -91,6 +91,40 @@ See [database source usage](docs/database-sources.md), the
91
91
  [executable capture example](examples/read_capture/README.md).
92
92
  The [source checkpoint](docs/source-checkpoint.md) records validation and limits.
93
93
 
94
+ ## Notebook projects and common Python structure
95
+
96
+ Databricks notebook source (`# Databricks notebook source`, `# COMMAND ----------`,
97
+ `# MAGIC`) and raw magics such as `%pip` are parsed with the magics neutralized
98
+ in place. `%run ./child` includes the child notebook in the caller's namespace,
99
+ statically. Nothing is executed. `.ipynb` files and live cells are not inputs.
100
+
101
+ Branches, `try` blocks, loops and early returns are joined: a column that may
102
+ hold different values after alternative paths gets an inferred merge version
103
+ reading each possibility, so lineage continues without being claimed as
104
+ confirmed. Loops over configured label collections (`for c in COLS`) are
105
+ unrolled exactly. Classes, nested functions and closures, decorators,
106
+ `*args/**kwargs`, `+=`, unpacking, comprehensions and ternaries are interpreted
107
+ rather than erasing state.
108
+
109
+ A documented catalog of Pandas/NumPy semantics covers common Series methods and
110
+ accessors, `np.where`/`pd.to_numeric`-style functions, row-selecting DataFrame
111
+ methods (`sort_values`, `head`, `reset_index`, `query`, …), whole-frame value
112
+ methods (`fillna`, `astype`, …), partial `.loc[mask, col]` updates and
113
+ `merge`/`concat` (inferred). When data enters through an injected helper such as
114
+ `run_query(sql)`, ColTrace follows the closure when possible; otherwise, a result
115
+ used as a DataFrame becomes an inferred frame whose SQL SELECT list seeds its
116
+ columns, and the scan suggests a source contract to confirm it.
117
+
118
+ See the [compatibility checkpoint](docs/compatibility-checkpoint.md), the
119
+ [Databricks-style example](examples/databricks_project/README.md) and the
120
+ [multi-module example](examples/robustness_pipeline/README.md).
121
+
122
+ Notebook output separates discovered files from modeled frames/columns, shows
123
+ configuration and versions, prints errors first, separates informational notes
124
+ (inferences) from warnings, and saves full diagnostics outside the analyzed tree
125
+ before attempting column selection. Listed static labels are not runtime
126
+ `df.columns`. Capture remains opt-in.
127
+
94
128
  ## Try the complete example
95
129
 
96
130
  ```sh
@@ -190,15 +224,22 @@ the shortest eligible distance, so a node reached both ways appears as direct.
190
224
  | SQL-to-Pandas extraction | Bounded SQL projections, aliases, expressions and helpers; documented readers/conversions or explicit contracts |
191
225
  | MongoDB / DynamoDB extraction | Literal projections and bounded Mongo expressions; candidate fields stay partial without observed schema |
192
226
  | Literal dictionary `DataFrame` construction | String column keys and literal values |
193
- | `frame["column"]`, `frame.loc[:, "column"]` | Single literal string labels, all rows |
194
- | `frame["c"] = frame["a"] + frame["b"]` | Arithmetic, scalar constants, temporary values, versions |
227
+ | `frame["column"]`, `frame.loc[:, "column"]` | Literal or statically known labels (`for c in COLS`, f-strings) |
228
+ | `frame["c"] = frame["a"] + frame["b"]` | Arithmetic, masks, ternaries, scalar constants, temporary values, versions |
195
229
  | `alias = frame` | Same abstract object and shared mutation |
230
+ | `copy(deep=True)`, `head(n)`, `shape` | Bounded independent copies, row previews and immutable metadata observations |
231
+ | Conditional/exception/context/loop blocks, early returns | Separate inferred paths joined with inferred merge versions |
232
+ | Databricks notebook source, `%pip`, `%run` | Magics neutralized; `%run` included statically in the caller namespace |
233
+ | Series/DataFrame/NumPy catalog | Documented derivations, row selections, value methods, exports; see the subset |
234
+ | `merge`, `join`, `concat` | Inferred frame whose columns may come from any input |
235
+ | Classes, closures, decorators, unpacking | Interpreted; decorators assumed transparent (inferred) |
236
+ | Injected `run_query(sql)` helpers | Followed through closures, or inferred from DataFrame use with SQL columns |
196
237
  | `rename(columns={"old": "new"})` | Literal, non-colliding map; new DataFrame, or shared mutation with `inplace=True` |
197
238
  | `assign(b=lambda x: x["a"] * 2)` | Sequential simple lambdas; eager arguments use their original scope |
198
239
  | `Series.apply(clean_text)` | Resolved scalar callbacks; bounded summaries and inferred evidence |
199
240
  | `frame[["a", "b"]] = DataFrame(results.tolist(), index=frame.index)` | Fixed callback output width and matching source index |
200
241
  | `dropna`, literal projection, boolean row filters | Preserve value lineage; predicate consumption tracked separately |
201
- | `to_parquet` / `to_csv` | Located export consumption with literal options |
242
+ | `to_parquet`, `to_csv`, `to_excel`, `to_dict`, … | Located export/serialization consumption |
202
243
  | Direct synchronous function calls | Explicit arguments/returns, bounded acyclic contexts and explicit imports |
203
244
  | Annotated, uncalled functions | Separate inferred templates, not evidence of pipeline connections |
204
245
 
@@ -247,7 +288,7 @@ print(report.to_json())
247
288
 
248
289
  The earlier `scan_project` API remains available for raw occurrences and receiver
249
290
  evidence. Its discovery report (`0.1`) is a different format from the lineage
250
- snapshot (`0.4`). See [discovery JSON](docs/discovery-json.md) and
291
+ snapshot (`0.5`). See [discovery JSON](docs/discovery-json.md) and
251
292
  [lineage JSON](docs/lineage-json.md). Public facts are dataclasses; their serialized
252
293
  form is independent of NetworkX and contains no AST or executable objects.
253
294
 
@@ -262,8 +303,13 @@ exclude = ["generated", "legacy/*.py", "*_test.py"]
262
303
 
263
304
  Glob patterns match case-sensitive, project-relative POSIX paths. Patterns with
264
305
  no `/` also match individual path components. Built-in exclusions cover `.venv`,
265
- `venv`, `.git`, `__pycache__`, `.coltrace`, pytest/mypy/Ruff caches, `build`, and
266
- `dist`. Linked files/directories and Windows reparse points are skipped.
306
+ `venv`, `.git`, `__pycache__`, `.coltrace`, `.ipynb_checkpoints`, `node_modules`,
307
+ tox/nox and pytest/mypy/Ruff caches, `build`, and `dist`. Linked files/directories
308
+ and Windows reparse points are skipped. A `.coltraceignore` file at the analyzed
309
+ root uses gitignore syntax (root-level subset, including `!` negation). The root
310
+ `.gitignore` is also applied unless `respect_gitignore = false` is set.
311
+ `observers = ["notify_team", "client.*"]` declares project helpers that only read
312
+ the DataFrames they receive, so they do not interrupt lineage.
267
313
  `ScanConfig(exclude=("generated",))` overrides TOML settings and extends built-ins.
268
314
 
269
315
  ## Development