framevitals 0.1.0__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 (77) hide show
  1. framevitals-0.1.0/LICENSE +21 -0
  2. framevitals-0.1.0/PKG-INFO +415 -0
  3. framevitals-0.1.0/README.md +353 -0
  4. framevitals-0.1.0/pyproject.toml +107 -0
  5. framevitals-0.1.0/setup.cfg +4 -0
  6. framevitals-0.1.0/src/framevitals/__init__.py +50 -0
  7. framevitals-0.1.0/src/framevitals/advanced_indicators.py +138 -0
  8. framevitals-0.1.0/src/framevitals/agent_brief.py +537 -0
  9. framevitals-0.1.0/src/framevitals/agent_tools.py +362 -0
  10. framevitals-0.1.0/src/framevitals/ai_agent.py +873 -0
  11. framevitals-0.1.0/src/framevitals/ai_insights.py +298 -0
  12. framevitals-0.1.0/src/framevitals/analysis_inventory.py +122 -0
  13. framevitals-0.1.0/src/framevitals/analysis_selector.py +68 -0
  14. framevitals-0.1.0/src/framevitals/anomaly_ensemble.py +320 -0
  15. framevitals-0.1.0/src/framevitals/api.py +149 -0
  16. framevitals-0.1.0/src/framevitals/baseline_model.py +349 -0
  17. framevitals-0.1.0/src/framevitals/chart_planner.py +228 -0
  18. framevitals-0.1.0/src/framevitals/cleaner.py +85 -0
  19. framevitals-0.1.0/src/framevitals/cli.py +150 -0
  20. framevitals-0.1.0/src/framevitals/column_roles.py +241 -0
  21. framevitals-0.1.0/src/framevitals/dataset_signals.py +153 -0
  22. framevitals-0.1.0/src/framevitals/deep_statistics.py +297 -0
  23. framevitals-0.1.0/src/framevitals/deep_statistics_v2.py +648 -0
  24. framevitals-0.1.0/src/framevitals/drift_analysis.py +375 -0
  25. framevitals-0.1.0/src/framevitals/explainability.py +436 -0
  26. framevitals-0.1.0/src/framevitals/feature_importance.py +345 -0
  27. framevitals-0.1.0/src/framevitals/frontend_api.py +284 -0
  28. framevitals-0.1.0/src/framevitals/health_score.py +101 -0
  29. framevitals-0.1.0/src/framevitals/loader.py +133 -0
  30. framevitals-0.1.0/src/framevitals/ml_preprocessing.py +143 -0
  31. framevitals-0.1.0/src/framevitals/ml_readiness.py +48 -0
  32. framevitals-0.1.0/src/framevitals/model_diagnostics.py +592 -0
  33. framevitals-0.1.0/src/framevitals/model_leaderboard.py +501 -0
  34. framevitals-0.1.0/src/framevitals/multicollinearity.py +164 -0
  35. framevitals-0.1.0/src/framevitals/pdf_report_builder.py +1225 -0
  36. framevitals-0.1.0/src/framevitals/pipeline.py +312 -0
  37. framevitals-0.1.0/src/framevitals/profiler.py +94 -0
  38. framevitals-0.1.0/src/framevitals/rag_index.py +296 -0
  39. framevitals-0.1.0/src/framevitals/report_generator.py +16 -0
  40. framevitals-0.1.0/src/framevitals/safe_pandas.py +295 -0
  41. framevitals-0.1.0/src/framevitals/security.py +59 -0
  42. framevitals-0.1.0/src/framevitals/segment_analysis.py +81 -0
  43. framevitals-0.1.0/src/framevitals/signal_engine.py +96 -0
  44. framevitals-0.1.0/src/framevitals/target_analyzer.py +180 -0
  45. framevitals-0.1.0/src/framevitals/target_leakage.py +119 -0
  46. framevitals-0.1.0/src/framevitals/text_profile.py +408 -0
  47. framevitals-0.1.0/src/framevitals/time_series.py +542 -0
  48. framevitals-0.1.0/src/framevitals/visualizer.py +1032 -0
  49. framevitals-0.1.0/src/framevitals.egg-info/PKG-INFO +415 -0
  50. framevitals-0.1.0/src/framevitals.egg-info/SOURCES.txt +75 -0
  51. framevitals-0.1.0/src/framevitals.egg-info/dependency_links.txt +1 -0
  52. framevitals-0.1.0/src/framevitals.egg-info/entry_points.txt +2 -0
  53. framevitals-0.1.0/src/framevitals.egg-info/requires.txt +42 -0
  54. framevitals-0.1.0/src/framevitals.egg-info/top_level.txt +1 -0
  55. framevitals-0.1.0/tests/test_advanced_diagnostics.py +166 -0
  56. framevitals-0.1.0/tests/test_agent_foundation.py +210 -0
  57. framevitals-0.1.0/tests/test_agent_layer.py +416 -0
  58. framevitals-0.1.0/tests/test_ai_agent.py +144 -0
  59. framevitals-0.1.0/tests/test_analysis_smoke.py +60 -0
  60. framevitals-0.1.0/tests/test_analytics_modules.py +87 -0
  61. framevitals-0.1.0/tests/test_application_import_boundaries.py +47 -0
  62. framevitals-0.1.0/tests/test_baseline_model.py +132 -0
  63. framevitals-0.1.0/tests/test_cli.py +64 -0
  64. framevitals-0.1.0/tests/test_core_metrics.py +78 -0
  65. framevitals-0.1.0/tests/test_dataset_diagnostics.py +79 -0
  66. framevitals-0.1.0/tests/test_deep_statistics.py +113 -0
  67. framevitals-0.1.0/tests/test_feature_importance.py +151 -0
  68. framevitals-0.1.0/tests/test_framevitals_pipeline.py +112 -0
  69. framevitals-0.1.0/tests/test_loader.py +52 -0
  70. framevitals-0.1.0/tests/test_ml_engine.py +128 -0
  71. framevitals-0.1.0/tests/test_model_diagnostics.py +143 -0
  72. framevitals-0.1.0/tests/test_package_boundary.py +48 -0
  73. framevitals-0.1.0/tests/test_pandas_compatibility.py +61 -0
  74. framevitals-0.1.0/tests/test_pipeline_helpers.py +136 -0
  75. framevitals-0.1.0/tests/test_public_api.py +80 -0
  76. framevitals-0.1.0/tests/test_target_intelligence.py +122 -0
  77. framevitals-0.1.0/tests/test_visualization_engine.py +134 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Parth Dongre
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,415 @@
1
+ Metadata-Version: 2.4
2
+ Name: framevitals
3
+ Version: 0.1.0
4
+ Summary: Data quality, drift detection, anomaly analysis, and ML-readiness diagnostics for pandas and tabular data.
5
+ Author: Parth Dongre
6
+ License-Expression: MIT
7
+ Project-URL: Documentation, https://github.com/parthdongre/FrameVitals#readme
8
+ Project-URL: Repository, https://github.com/parthdongre/FrameVitals
9
+ Project-URL: Issues, https://github.com/parthdongre/FrameVitals/issues
10
+ Project-URL: Changelog, https://github.com/parthdongre/FrameVitals/blob/main/CHANGELOG.md
11
+ Keywords: data-quality,data-profiling,machine-learning,anomaly-detection,data-drift,eda,tabular-data
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: pandas>=2.2
25
+ Requires-Dist: numpy>=1.26
26
+ Requires-Dist: matplotlib>=3.8
27
+ Requires-Dist: seaborn>=0.13
28
+ Requires-Dist: openpyxl>=3.1
29
+ Requires-Dist: xlrd>=2.0
30
+ Requires-Dist: scipy>=1.13
31
+ Requires-Dist: statsmodels>=0.14
32
+ Requires-Dist: scikit-learn>=1.5
33
+ Requires-Dist: pydantic>=2.7
34
+ Provides-Extra: ml
35
+ Requires-Dist: xgboost>=2.0; extra == "ml"
36
+ Requires-Dist: lightgbm>=4.3; extra == "ml"
37
+ Requires-Dist: pyod>=2.0; extra == "ml"
38
+ Requires-Dist: shap>=0.45; extra == "ml"
39
+ Provides-Extra: ai
40
+ Requires-Dist: ollama>=0.3; extra == "ai"
41
+ Provides-Extra: web
42
+ Requires-Dist: flask>=3.0; extra == "web"
43
+ Requires-Dist: gunicorn>=22.0; extra == "web"
44
+ Requires-Dist: werkzeug>=3.0; extra == "web"
45
+ Provides-Extra: all
46
+ Requires-Dist: xgboost>=2.0; extra == "all"
47
+ Requires-Dist: lightgbm>=4.3; extra == "all"
48
+ Requires-Dist: pyod>=2.0; extra == "all"
49
+ Requires-Dist: shap>=0.45; extra == "all"
50
+ Requires-Dist: ollama>=0.3; extra == "all"
51
+ Requires-Dist: flask>=3.0; extra == "all"
52
+ Requires-Dist: gunicorn>=22.0; extra == "all"
53
+ Requires-Dist: werkzeug>=3.0; extra == "all"
54
+ Provides-Extra: dev
55
+ Requires-Dist: pytest>=8.2; extra == "dev"
56
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
57
+ Requires-Dist: hypothesis>=6.100; extra == "dev"
58
+ Requires-Dist: build>=1.2; extra == "dev"
59
+ Requires-Dist: twine>=5.1; extra == "dev"
60
+ Requires-Dist: ruff>=0.6; extra == "dev"
61
+ Dynamic: license-file
62
+
63
+ <div align="center">
64
+
65
+ # FrameVitals
66
+
67
+ ### Know if your data is healthy, stable, and ML-ready — before your model finds out.
68
+
69
+ **A Python toolkit for data-quality diagnostics, drift detection, anomaly analysis, and ML-readiness checks on pandas and tabular data.**
70
+
71
+ [![Tests](https://github.com/parthdongre/FrameVitals/actions/workflows/test.yml/badge.svg)](https://github.com/parthdongre/FrameVitals/actions/workflows/test.yml)
72
+ [![Python](https://img.shields.io/badge/Python-3.11%20%7C%203.12%20%7C%203.13-3776AB?logo=python&logoColor=white)](https://www.python.org/)
73
+ [![Release](https://img.shields.io/badge/release-0.1.0%20alpha-6f42c1)](CHANGELOG.md)
74
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
75
+ [![GitHub stars](https://img.shields.io/github/stars/parthdongre/FrameVitals?style=social)](https://github.com/parthdongre/FrameVitals)
76
+
77
+ [Install](#installation) · [Quick start](#quick-start) · [CLI](#command-line-interface) · [Roadmap](#roadmap) · [Contributing](#contributing)
78
+
79
+ </div>
80
+
81
+ ---
82
+
83
+ FrameVitals turns a pandas DataFrame or tabular dataset into a **structured health report** you can inspect, serialize, compare, and eventually enforce in CI.
84
+
85
+ Instead of stitching together separate profiling, quality, drift, anomaly, and ML-readiness tools, FrameVitals gives you one deliberately small entry point:
86
+
87
+ ```python
88
+ import framevitals as fv
89
+
90
+ report = fv.analyze(df)
91
+ drift = fv.compare(reference_df, current_df)
92
+ ```
93
+
94
+ The goal is simple: **catch bad data before it becomes a bad model, a broken dashboard, or a production incident.**
95
+
96
+ ```text
97
+ ┌──────────────────────────┐
98
+ DataFrame / file ─► ANALYZE │
99
+ │ profile · health · ML │
100
+ │ stats · anomalies · risk │
101
+ └────────────┬─────────────┘
102
+ │
103
+ ▼
104
+ structured report
105
+
106
+ Reference + current ───────────► COMPARE ─────► drift verdict
107
+ ```
108
+
109
+ ## Why FrameVitals?
110
+
111
+ Most data checks answer one narrow question. FrameVitals is designed around the questions that show up repeatedly in real data and ML workflows:
112
+
113
+ | Question | FrameVitals |
114
+ | --- | --- |
115
+ | Is this dataset structurally healthy? | Missingness, duplicates, cardinality, schema and quality diagnostics |
116
+ | Is it ready for modelling? | ML-readiness scoring, target-aware checks and model diagnostics |
117
+ | Are there suspicious rows or features? | Statistical diagnostics, anomaly detection, leakage and multicollinearity checks |
118
+ | Has production data changed? | Reference-vs-current drift analysis with numeric and categorical tests |
119
+ | Can I use the result in code? | JSON-friendly structured output through a Python API and CLI |
120
+ | Will analysis unexpectedly write files? | No — filesystem artifacts are opt-in |
121
+
122
+ FrameVitals is **package-first**. The core library lives under `src/framevitals/`; the Flask API and React dashboard are optional interfaces around the same analysis engine.
123
+
124
+ ## Installation
125
+
126
+ FrameVitals supports **Python 3.11, 3.12, and 3.13**.
127
+
128
+ ```bash
129
+ pip install framevitals
130
+ ```
131
+
132
+ Optional feature groups keep heavier dependencies out of the default install:
133
+
134
+ ```bash
135
+ pip install "framevitals[ml]" # XGBoost, LightGBM, PyOD, SHAP
136
+ pip install "framevitals[ai]" # Ollama-backed AI features
137
+ pip install "framevitals[web]" # Flask web runtime
138
+ pip install "framevitals[all]" # all optional runtime features
139
+ ```
140
+
141
+ ## Quick start
142
+
143
+ ### Analyze a DataFrame
144
+
145
+ ```python
146
+ import pandas as pd
147
+ import framevitals as fv
148
+
149
+ customers = pd.read_csv("customers.csv")
150
+ report = fv.analyze(customers)
151
+
152
+ print(report["health"]["overall_score"])
153
+ print(report["ml_readiness"])
154
+ ```
155
+
156
+ File paths work too:
157
+
158
+ ```python
159
+ report = fv.analyze("customers.csv", mode="quick")
160
+ ```
161
+
162
+ FrameVitals supports pandas DataFrames and common tabular file formats including CSV, TSV, Excel, and JSON.
163
+
164
+ ### Add a supervised-learning target
165
+
166
+ ```python
167
+ report = fv.analyze(
168
+ customers,
169
+ target="churn",
170
+ mode="deep",
171
+ )
172
+
173
+ print(report["model_leaderboard"])
174
+ print(report["explainability"])
175
+ ```
176
+
177
+ Target-aware analysis can surface modelling risks such as leakage, imbalance, redundant features, unstable relationships, and weak baselines.
178
+
179
+ ### Compare datasets for drift
180
+
181
+ ```python
182
+ reference = pd.read_csv("training_data.csv")
183
+ current = pd.read_csv("production_batch.csv")
184
+
185
+ result = fv.compare(reference, current)
186
+
187
+ print(result["summary"]["overall_verdict"])
188
+ print(result["columns"][:3])
189
+ ```
190
+
191
+ Numeric drift uses **PSI, Kolmogorov-Smirnov statistics, and standardized mean shift**. Categorical drift uses **PSI and chi-square diagnostics**.
192
+
193
+ ## The public API
194
+
195
+ The public API is intentionally small while FrameVitals is in alpha.
196
+
197
+ | API | Status | Purpose |
198
+ | --- | --- | --- |
199
+ | `framevitals.analyze(...)` | Available in `0.1.0` | Profile and diagnose one dataset |
200
+ | `framevitals.compare(...)` | Available in `0.1.0` | Compare reference and current data for drift |
201
+ | `framevitals.validate(...)` | In development | Validate data against an inferred or explicit contract |
202
+ | snapshots / monitoring | Roadmap | Reuse baselines for recurring schema and drift checks |
203
+
204
+ This keeps the library easy to learn while leaving room for the result model and validation system to mature before `1.0`.
205
+
206
+ ## What FrameVitals checks
207
+
208
+ | Area | Examples |
209
+ | --- | --- |
210
+ | **Structure** | shape, dtypes, semantic column roles, date/text detection |
211
+ | **Data quality** | missingness, duplicates, constants, cardinality, outliers |
212
+ | **Health scoring** | overall dataset health plus component-level diagnostics |
213
+ | **ML readiness** | modelling readiness, risky columns, preprocessing recommendations |
214
+ | **Statistics** | distribution checks, normality, correlations, effect-size style diagnostics |
215
+ | **Anomalies** | multivariate and robust outlier detectors, optional ensemble methods |
216
+ | **Target intelligence** | task inference, leakage hints, multicollinearity, feature/model diagnostics |
217
+ | **Drift** | PSI, KS, chi-square, mean shift, new or disappearing categories |
218
+ | **Time series** | date-aware diagnostics, stationarity, decomposition and forecast previews |
219
+ | **Text** | text-column profiling, vocabulary and lightweight semantic diagnostics |
220
+ | **Explainability** | model feature importance and SHAP when the optional ML stack is installed |
221
+
222
+ Not every analysis runs on every dataset. FrameVitals uses dataset signals, selected mode, target availability, and installed optional dependencies to decide what is useful and safe to execute.
223
+
224
+ ## Analysis modes
225
+
226
+ ```python
227
+ fv.analyze(df, mode="quick")
228
+ fv.analyze(df, mode="standard")
229
+ fv.analyze(df, mode="deep")
230
+ fv.analyze(df, mode="research")
231
+ ```
232
+
233
+ | Mode | Best for |
234
+ | --- | --- |
235
+ | `quick` | Fast structural, quality, and ML-readiness checks |
236
+ | `standard` | Everyday analysis with broader diagnostics |
237
+ | `deep` | Target-aware and heavier statistical analysis |
238
+ | `research` | Largest analysis budget for exploratory work |
239
+
240
+ ## Filesystem artifacts are opt-in
241
+
242
+ FrameVitals is designed to behave like a library first. Calling the Python API does not need to scatter reports and cleaned files around your working directory.
243
+
244
+ ```python
245
+ report = fv.analyze(df)
246
+ assert report["cleaning"]["output_path"] is None
247
+
248
+ report = fv.analyze(df, artifacts=True)
249
+ print(report["cleaning"]["output_path"])
250
+ ```
251
+
252
+ ## Command-line interface
253
+
254
+ FrameVitals also ships with a CLI for scripts, terminals, and future CI workflows.
255
+
256
+ ```bash
257
+ framevitals --version
258
+
259
+ framevitals analyze dataset.csv
260
+ framevitals analyze dataset.csv --mode quick
261
+ framevitals analyze dataset.csv --target churn --mode deep
262
+ framevitals analyze dataset.csv --output report.json
263
+ framevitals analyze dataset.csv --artifacts
264
+
265
+ framevitals compare train.csv production.csv
266
+ framevitals compare train.csv production.csv --columns age,income
267
+ framevitals compare train.csv production.csv --output drift.json
268
+ ```
269
+
270
+ ## Optional ML and AI features
271
+
272
+ The default package contains the core data-health engine. Heavier features are separated into extras so a simple install stays predictable.
273
+
274
+ ```bash
275
+ pip install "framevitals[ml]"
276
+ ```
277
+
278
+ Adds optional integrations including XGBoost, LightGBM, PyOD and SHAP.
279
+
280
+ ```bash
281
+ pip install "framevitals[ai]"
282
+ ```
283
+
284
+ Adds Ollama-backed interpretation and question-answering features. AI is treated as an optional explanation layer; computed diagnostics remain usable without a reachable model.
285
+
286
+ ## Web dashboard
287
+
288
+ The repository includes an optional **Flask API + React/TypeScript dashboard** for interactive exploration.
289
+
290
+ ```bash
291
+ pip install -e ".[web]"
292
+ python app.py
293
+ ```
294
+
295
+ Then in another terminal:
296
+
297
+ ```bash
298
+ cd frontend
299
+ npm ci
300
+ npm run dev
301
+ ```
302
+
303
+ Typical local endpoints:
304
+
305
+ - Flask API: `http://127.0.0.1:5055`
306
+ - React dashboard: `http://127.0.0.1:5173`
307
+
308
+ The public project website will remain separate from the package runtime so the library does not depend on a hosted service.
309
+
310
+ ## Design principles
311
+
312
+ FrameVitals is being built around a few constraints that are easy to lose in analytics projects:
313
+
314
+ - **DataFrame first** — use it directly from Python without routing through a web app.
315
+ - **Structured results** — return reusable data, not only screenshots or prose.
316
+ - **Safe defaults** — no unexpected artifact writes and graceful optional-feature fallbacks.
317
+ - **Small public API** — make the common path obvious before exposing every internal module.
318
+ - **Optional heavy dependencies** — ML, AI, and web features should not bloat a basic install.
319
+ - **Production direction** — drift, contracts, snapshots, and CI quality gates are first-class roadmap items.
320
+
321
+ ## Project layout
322
+
323
+ ```text
324
+ .
325
+ ├── src/framevitals/ # canonical installable Python package
326
+ ├── tests/ # automated test suite
327
+ ├── frontend/ # optional React + TypeScript dashboard
328
+ ├── templates/ # Flask report pages
329
+ ├── static/ # web/report assets
330
+ ├── app.py # optional Flask API/server
331
+ ├── pyproject.toml # package metadata and dependency groups
332
+ └── .github/workflows/ # CI, package validation and publishing
333
+ ```
334
+
335
+ New reusable Python code belongs in `src/framevitals/` and should import through the `framevitals.*` namespace.
336
+
337
+ ## Development
338
+
339
+ ```bash
340
+ git clone https://github.com/parthdongre/FrameVitals.git
341
+ cd FrameVitals
342
+ git switch dev
343
+
344
+ python -m venv .venv
345
+ source .venv/bin/activate
346
+ python -m pip install --upgrade pip
347
+ pip install -e ".[all,dev]"
348
+
349
+ pytest
350
+ python -m build
351
+ python -m twine check dist/*
352
+ ```
353
+
354
+ On Windows PowerShell:
355
+
356
+ ```powershell
357
+ .venv\Scripts\Activate.ps1
358
+ ```
359
+
360
+ CI validates the core package across Python 3.11–3.13, optional features, the React build, wheel contents, distribution metadata, and a clean-wheel install.
361
+
362
+ Development is integrated through `dev`; `main` is kept release-ready.
363
+
364
+ ## Roadmap
365
+
366
+ FrameVitals is moving toward a complete data-health quality gate:
367
+
368
+ ```text
369
+ 0.1 ANALYZE + COMPARE
370
+ data health · ML readiness · target diagnostics · drift
371
+
372
+ 0.2 VALIDATE + SNAPSHOTS
373
+ data contracts · CI gates · reusable baselines
374
+
375
+ 0.3 RESULT OBJECTS + ADVANCED DRIFT
376
+ stronger result model · large-data handling · richer monitoring
377
+
378
+ 0.4 EXTENSIBILITY + INTEGRATIONS
379
+ configurable checks · adapters · monitoring workflows
380
+
381
+ 1.0 STABLE DATA-HEALTH API
382
+ dependable analyze → compare → validate → monitor workflow
383
+ ```
384
+
385
+ Near-term work is tracked through issues and the `dev` branch.
386
+
387
+ ## Project status
388
+
389
+ FrameVitals `0.1.x` is **alpha software**. The core API is usable, but the project is intentionally still refining naming, result schemas, thresholds, and extension points before `1.0`.
390
+
391
+ If you are using FrameVitals in a project, feedback about real datasets, false positives, missing diagnostics, performance, and API ergonomics is especially valuable.
392
+
393
+ ## Contributing
394
+
395
+ Contributions are welcome.
396
+
397
+ A good contribution is focused, tested, and improves either the reliability of a diagnostic or the clarity of the public workflow.
398
+
399
+ Start with [CONTRIBUTING.md](CONTRIBUTING.md), and please read the [Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md).
400
+
401
+ ## Releases
402
+
403
+ Releases are built and validated in GitHub Actions and published through PyPI Trusted Publishing. See [RELEASING.md](RELEASING.md) and [CHANGELOG.md](CHANGELOG.md).
404
+
405
+ ## License
406
+
407
+ FrameVitals is open source under the [MIT License](LICENSE).
408
+
409
+ ---
410
+
411
+ <div align="center">
412
+
413
+ **If FrameVitals is useful to you, consider starring the repository — it helps the project grow.**
414
+
415
+ </div>