datasentry-core 0.2.0__tar.gz → 0.4.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 (82) hide show
  1. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/PKG-INFO +2 -2
  2. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/pyproject.toml +1 -1
  3. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/__init__.py +1 -1
  4. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/storage/schema.py +12 -2
  5. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/.gitignore +0 -0
  6. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/README.md +0 -0
  7. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/__init__.py +0 -0
  8. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/base.py +0 -0
  9. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/csv.py +0 -0
  10. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/duckdb.py +0 -0
  11. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/errors.py +0 -0
  12. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/file_based.py +0 -0
  13. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/jsonl.py +0 -0
  14. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/parquet.py +0 -0
  15. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/registry.py +0 -0
  16. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/spec.py +0 -0
  17. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/connectors/xlsx.py +0 -0
  18. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/contracts/__init__.py +0 -0
  19. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/contracts/exporters.py +0 -0
  20. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/__init__.py +0 -0
  21. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/base.py +0 -0
  22. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/common.py +0 -0
  23. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/cross_field.py +0 -0
  24. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/cross_table.py +0 -0
  25. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/datetime.py +0 -0
  26. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/__init__.py +0 -0
  27. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/anomaly_ml.py +0 -0
  28. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/categorical.py +0 -0
  29. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/formula.py +0 -0
  30. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/missing.py +0 -0
  31. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/numeric.py +0 -0
  32. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/textual.py +0 -0
  33. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/initial/uniqueness.py +0 -0
  34. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/missingness.py +0 -0
  35. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/runner.py +0 -0
  36. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/safe_eval.py +0 -0
  37. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/detectors/textual_variants.py +0 -0
  38. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/drift/__init__.py +0 -0
  39. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/drift/engine.py +0 -0
  40. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/__init__.py +0 -0
  41. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/base.py +0 -0
  42. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/duckdb.py +0 -0
  43. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/fusion.py +0 -0
  44. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/profiler.py +0 -0
  45. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/engine/sql_guard.py +0 -0
  46. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/llm/provider.py +0 -0
  47. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/__init__.py +0 -0
  48. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/audit.py +0 -0
  49. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/contract.py +0 -0
  50. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/detector.py +0 -0
  51. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/drift.py +0 -0
  52. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/enums.py +0 -0
  53. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/evidence.py +0 -0
  54. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/feedback.py +0 -0
  55. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/fingerprint.py +0 -0
  56. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/issue.py +0 -0
  57. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/llm.py +0 -0
  58. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/profile.py +0 -0
  59. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/quality.py +0 -0
  60. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/repair.py +0 -0
  61. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/rules.py +0 -0
  62. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/scan.py +0 -0
  63. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/models/validation.py +0 -0
  64. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/plugins.py +0 -0
  65. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/privacy/redactor.py +0 -0
  66. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/repair/__init__.py +0 -0
  67. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/repair/engine.py +0 -0
  68. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/__init__.py +0 -0
  69. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/html.py +0 -0
  70. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/interactive.py +0 -0
  71. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/junit.py +0 -0
  72. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/markdown.py +0 -0
  73. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/reporting/sarif.py +0 -0
  74. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/rules/engine.py +0 -0
  75. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/scoring/__init__.py +0 -0
  76. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/scoring/engine.py +0 -0
  77. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/scoring/gate.py +0 -0
  78. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/scoring/quality.py +0 -0
  79. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/scoring/weights.py +0 -0
  80. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/storage/__init__.py +0 -0
  81. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/storage/paths.py +0 -0
  82. {datasentry_core-0.2.0 → datasentry_core-0.4.0}/src/datasentry_core/storage/store.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: datasentry-core
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: DataSentry AI core domain models and engine (detectors, fusion, scoring, repairs).
5
5
  License: Apache-2.0
6
6
  Keywords: data-observability,data-quality,duckdb
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datasentry-core"
3
- version = "0.2.0"
3
+ version = "0.4.0"
4
4
  description = "DataSentry AI core domain models and engine (detectors, fusion, scoring, repairs)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -108,4 +108,4 @@ __all__ = [
108
108
  "ValidationResult",
109
109
  ]
110
110
 
111
- __version__ = "0.2.0"
111
+ __version__ = "0.4.0"
@@ -13,7 +13,7 @@ from __future__ import annotations
13
13
  import sqlite3
14
14
 
15
15
  #: 当前 schema 版本(PRAGMA user_version)
16
- SCHEMA_VERSION = 4
16
+ SCHEMA_VERSION = 6
17
17
 
18
18
  _SCHEMA_DDL = """
19
19
  PRAGMA journal_mode = WAL;
@@ -309,6 +309,7 @@ CREATE TABLE IF NOT EXISTS scheduled_jobs (
309
309
  enabled INTEGER NOT NULL DEFAULT 1,
310
310
  retry_attempts INTEGER NOT NULL DEFAULT 0,
311
311
  webhook_url TEXT,
312
+ gate_quality_min REAL,
312
313
  status TEXT NOT NULL DEFAULT 'idle'
313
314
  CHECK (status IN ('idle','queued','running','dead')),
314
315
  next_run_at TEXT NOT NULL,
@@ -328,7 +329,9 @@ CREATE TABLE IF NOT EXISTS job_runs (
328
329
  scan_run_id TEXT,
329
330
  summary TEXT,
330
331
  error TEXT,
331
- webhook_at TEXT
332
+ webhook_at TEXT,
333
+ file_hash TEXT,
334
+ skipped INTEGER NOT NULL DEFAULT 0
332
335
  );
333
336
 
334
337
  CREATE INDEX IF NOT EXISTS idx_scan_runs_dataset ON scan_runs(dataset_id);
@@ -383,5 +386,12 @@ def migrate(conn: sqlite3.Connection) -> None:
383
386
  # v2 → v3:PII 加密映射(Step 48):pii_mappings 表 + 审计列
384
387
  if version < 3:
385
388
  _ensure_column(conn, "llm_invocations", "pii_session_id", "pii_session_id TEXT")
389
+ # v4 → v5:调度质量门禁(Step 52):scheduled_jobs.gate_quality_min
390
+ if version < 5:
391
+ _ensure_column(conn, "scheduled_jobs", "gate_quality_min", "gate_quality_min REAL")
392
+ # v5 → v6:变更感知增量调度(Step 53):job_runs.file_hash + skipped
393
+ if version < 6:
394
+ _ensure_column(conn, "job_runs", "file_hash", "file_hash TEXT")
395
+ _ensure_column(conn, "job_runs", "skipped", "skipped INTEGER NOT NULL DEFAULT 0")
386
396
  conn.execute(f"PRAGMA user_version = {SCHEMA_VERSION}")
387
397
  conn.commit()