sqlseed 0.2.3__tar.gz → 0.2.5__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 (147) hide show
  1. sqlseed-0.2.5/.gitignore +125 -0
  2. {sqlseed-0.2.3 → sqlseed-0.2.5}/CHANGELOG.md +83 -0
  3. {sqlseed-0.2.3 → sqlseed-0.2.5}/CHANGELOG.zh-CN.md +83 -0
  4. sqlseed-0.2.5/LICENSE +679 -0
  5. sqlseed-0.2.5/PKG-INFO +326 -0
  6. sqlseed-0.2.5/README.md +260 -0
  7. sqlseed-0.2.5/README.zh-CN.md +240 -0
  8. sqlseed-0.2.5/pyproject.toml +460 -0
  9. sqlseed-0.2.5/src/sqlseed/AGENTS.md +44 -0
  10. sqlseed-0.2.5/src/sqlseed/__init__.py +318 -0
  11. sqlseed-0.2.5/src/sqlseed/_utils/AGENTS.md +29 -0
  12. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/_utils/__init__.py +2 -0
  13. sqlseed-0.2.5/src/sqlseed/_utils/daemon_task.py +60 -0
  14. sqlseed-0.2.5/src/sqlseed/_utils/logger.py +67 -0
  15. sqlseed-0.2.5/src/sqlseed/_utils/metrics.py +80 -0
  16. sqlseed-0.2.5/src/sqlseed/_utils/paths.py +103 -0
  17. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/_utils/progress.py +144 -56
  18. sqlseed-0.2.5/src/sqlseed/_utils/redaction.py +62 -0
  19. sqlseed-0.2.5/src/sqlseed/_utils/sql_safe.py +83 -0
  20. sqlseed-0.2.5/src/sqlseed/_utils/type_checks.py +17 -0
  21. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/_version.py +2 -0
  22. sqlseed-0.2.5/src/sqlseed/config/AGENTS.md +44 -0
  23. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/config/__init__.py +12 -1
  24. sqlseed-0.2.5/src/sqlseed/config/loader.py +186 -0
  25. sqlseed-0.2.5/src/sqlseed/config/models.py +268 -0
  26. sqlseed-0.2.5/src/sqlseed/config/snapshot.py +125 -0
  27. sqlseed-0.2.5/src/sqlseed/core/AGENTS.md +63 -0
  28. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/core/__init__.py +9 -0
  29. sqlseed-0.2.5/src/sqlseed/core/check_adapt.py +304 -0
  30. sqlseed-0.2.5/src/sqlseed/core/check_parser.py +505 -0
  31. sqlseed-0.2.5/src/sqlseed/core/column_dag.py +259 -0
  32. sqlseed-0.2.5/src/sqlseed/core/constraints.py +279 -0
  33. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/core/enrichment.py +89 -15
  34. sqlseed-0.2.5/src/sqlseed/core/expression.py +222 -0
  35. sqlseed-0.2.5/src/sqlseed/core/features.py +462 -0
  36. sqlseed-0.2.5/src/sqlseed/core/mapper.py +621 -0
  37. sqlseed-0.2.5/src/sqlseed/core/orchestrator/AGENTS.md +64 -0
  38. sqlseed-0.2.5/src/sqlseed/core/orchestrator/__init__.py +56 -0
  39. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_common.py +69 -0
  40. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_connection.py +248 -0
  41. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_generation.py +543 -0
  42. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_query.py +261 -0
  43. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_self_ref.py +172 -0
  44. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_session.py +54 -0
  45. sqlseed-0.2.5/src/sqlseed/core/orchestrator/_specs.py +623 -0
  46. sqlseed-0.2.5/src/sqlseed/core/plugin_mediator.py +150 -0
  47. sqlseed-0.2.5/src/sqlseed/core/relation.py +954 -0
  48. sqlseed-0.2.5/src/sqlseed/core/result.py +44 -0
  49. sqlseed-0.2.5/src/sqlseed/core/schema.py +271 -0
  50. sqlseed-0.2.5/src/sqlseed/core/schema_fallback.py +202 -0
  51. sqlseed-0.2.5/src/sqlseed/core/schema_metadata.py +68 -0
  52. sqlseed-0.2.5/src/sqlseed/core/stream.py +936 -0
  53. sqlseed-0.2.5/src/sqlseed/core/transform.py +45 -0
  54. sqlseed-0.2.5/src/sqlseed/core/unique_adjuster.py +373 -0
  55. sqlseed-0.2.5/src/sqlseed/database/AGENTS.md +71 -0
  56. sqlseed-0.2.5/src/sqlseed/database/__init__.py +43 -0
  57. sqlseed-0.2.5/src/sqlseed/database/_base_adapter.py +206 -0
  58. sqlseed-0.2.5/src/sqlseed/database/_bulk_optimizer.py +171 -0
  59. sqlseed-0.2.5/src/sqlseed/database/_connection_url.py +24 -0
  60. sqlseed-0.2.5/src/sqlseed/database/_dialect.py +227 -0
  61. sqlseed-0.2.5/src/sqlseed/database/_helpers.py +152 -0
  62. sqlseed-0.2.5/src/sqlseed/database/_protocol.py +186 -0
  63. sqlseed-0.2.5/src/sqlseed/database/_sqlite_schema.py +133 -0
  64. sqlseed-0.2.5/src/sqlseed/database/_type_normalizer.py +158 -0
  65. sqlseed-0.2.5/src/sqlseed/database/_unique_keys.py +66 -0
  66. sqlseed-0.2.5/src/sqlseed/database/_value_normalizer.py +75 -0
  67. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/database/optimizer.py +53 -0
  68. sqlseed-0.2.5/src/sqlseed/database/raw_sqlite_adapter.py +344 -0
  69. sqlseed-0.2.5/src/sqlseed/database/sqlalchemy_adapter.py +1159 -0
  70. sqlseed-0.2.5/src/sqlseed/generators/AGENTS.md +45 -0
  71. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/generators/__init__.py +2 -2
  72. sqlseed-0.2.5/src/sqlseed/generators/_datetime_methods.py +127 -0
  73. sqlseed-0.2.5/src/sqlseed/generators/_datetime_utils.py +216 -0
  74. sqlseed-0.2.5/src/sqlseed/generators/_dispatch.py +150 -0
  75. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/generators/_json_helpers.py +39 -9
  76. sqlseed-0.2.5/src/sqlseed/generators/_native_provider.py +35 -0
  77. sqlseed-0.2.5/src/sqlseed/generators/_protocol.py +68 -0
  78. sqlseed-0.2.5/src/sqlseed/generators/_string_helpers.py +56 -0
  79. sqlseed-0.2.5/src/sqlseed/generators/base_provider.py +581 -0
  80. sqlseed-0.2.5/src/sqlseed/generators/faker_provider.py +246 -0
  81. sqlseed-0.2.5/src/sqlseed/generators/mimesis_provider.py +208 -0
  82. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/generators/registry.py +63 -11
  83. sqlseed-0.2.5/src/sqlseed/plugins/AGENTS.md +31 -0
  84. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/plugins/__init__.py +2 -0
  85. sqlseed-0.2.5/src/sqlseed/plugins/hookspecs.py +178 -0
  86. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/plugins/manager.py +20 -0
  87. sqlseed-0.2.3/.gitignore +0 -74
  88. sqlseed-0.2.3/LICENSE +0 -17
  89. sqlseed-0.2.3/PKG-INFO +0 -1098
  90. sqlseed-0.2.3/README.md +0 -1038
  91. sqlseed-0.2.3/README.zh-CN.md +0 -846
  92. sqlseed-0.2.3/examples/build_demo_db.py +0 -233
  93. sqlseed-0.2.3/examples/notebooks/01-quickstart.ipynb +0 -1314
  94. sqlseed-0.2.3/examples/notebooks/02-column-mapping.ipynb +0 -1437
  95. sqlseed-0.2.3/examples/notebooks/03-generators.ipynb +0 -1025
  96. sqlseed-0.2.3/examples/notebooks/04-database-advanced.ipynb +0 -1019
  97. sqlseed-0.2.3/examples/notebooks/05-dag-and-constraints.ipynb +0 -833
  98. sqlseed-0.2.3/examples/notebooks/06-config-deep-dive.ipynb +0 -1247
  99. sqlseed-0.2.3/examples/notebooks/07-ai-plugin.ipynb +0 -623
  100. sqlseed-0.2.3/examples/notebooks/08-mcp-server.ipynb +0 -595
  101. sqlseed-0.2.3/examples/notebooks/09-plugin-hooks.ipynb +0 -634
  102. sqlseed-0.2.3/examples/notebooks/10-cli-reference.ipynb +0 -785
  103. sqlseed-0.2.3/examples/notebooks/11-utilities.ipynb +0 -542
  104. sqlseed-0.2.3/examples/notebooks/12-testing-patterns.ipynb +0 -729
  105. sqlseed-0.2.3/examples/quick_demo.py +0 -148
  106. sqlseed-0.2.3/pyproject.toml +0 -140
  107. sqlseed-0.2.3/scripts/_create_demo_db.py +0 -52
  108. sqlseed-0.2.3/scripts/quickstart.py +0 -179
  109. sqlseed-0.2.3/src/sqlseed/__init__.py +0 -158
  110. sqlseed-0.2.3/src/sqlseed/_utils/logger.py +0 -35
  111. sqlseed-0.2.3/src/sqlseed/_utils/metrics.py +0 -45
  112. sqlseed-0.2.3/src/sqlseed/_utils/paths.py +0 -41
  113. sqlseed-0.2.3/src/sqlseed/_utils/schema_helpers.py +0 -57
  114. sqlseed-0.2.3/src/sqlseed/_utils/sql_safe.py +0 -58
  115. sqlseed-0.2.3/src/sqlseed/cli/__init__.py +0 -5
  116. sqlseed-0.2.3/src/sqlseed/cli/main.py +0 -718
  117. sqlseed-0.2.3/src/sqlseed/config/loader.py +0 -79
  118. sqlseed-0.2.3/src/sqlseed/config/models.py +0 -145
  119. sqlseed-0.2.3/src/sqlseed/config/snapshot.py +0 -86
  120. sqlseed-0.2.3/src/sqlseed/core/column_dag.py +0 -130
  121. sqlseed-0.2.3/src/sqlseed/core/constraints.py +0 -142
  122. sqlseed-0.2.3/src/sqlseed/core/expression.py +0 -89
  123. sqlseed-0.2.3/src/sqlseed/core/mapper.py +0 -350
  124. sqlseed-0.2.3/src/sqlseed/core/orchestrator.py +0 -623
  125. sqlseed-0.2.3/src/sqlseed/core/plugin_mediator.py +0 -213
  126. sqlseed-0.2.3/src/sqlseed/core/relation.py +0 -390
  127. sqlseed-0.2.3/src/sqlseed/core/result.py +0 -23
  128. sqlseed-0.2.3/src/sqlseed/core/schema.py +0 -131
  129. sqlseed-0.2.3/src/sqlseed/core/transform.py +0 -27
  130. sqlseed-0.2.3/src/sqlseed/core/unique_adjuster.py +0 -145
  131. sqlseed-0.2.3/src/sqlseed/database/__init__.py +0 -16
  132. sqlseed-0.2.3/src/sqlseed/database/_base_adapter.py +0 -87
  133. sqlseed-0.2.3/src/sqlseed/database/_compat.py +0 -35
  134. sqlseed-0.2.3/src/sqlseed/database/_helpers.py +0 -70
  135. sqlseed-0.2.3/src/sqlseed/database/_protocol.py +0 -74
  136. sqlseed-0.2.3/src/sqlseed/database/raw_sqlite_adapter.py +0 -146
  137. sqlseed-0.2.3/src/sqlseed/database/sqlite_utils_adapter.py +0 -152
  138. sqlseed-0.2.3/src/sqlseed/generators/_dispatch.py +0 -48
  139. sqlseed-0.2.3/src/sqlseed/generators/_protocol.py +0 -30
  140. sqlseed-0.2.3/src/sqlseed/generators/_string_helpers.py +0 -31
  141. sqlseed-0.2.3/src/sqlseed/generators/base_provider.py +0 -678
  142. sqlseed-0.2.3/src/sqlseed/generators/faker_provider.py +0 -147
  143. sqlseed-0.2.3/src/sqlseed/generators/mimesis_provider.py +0 -162
  144. sqlseed-0.2.3/src/sqlseed/generators/stream.py +0 -277
  145. sqlseed-0.2.3/src/sqlseed/plugins/hookspecs.py +0 -119
  146. sqlseed-0.2.3/uv.lock +0 -1593
  147. {sqlseed-0.2.3 → sqlseed-0.2.5}/src/sqlseed/py.typed +0 -0
@@ -0,0 +1,125 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ *.whl
23
+ *.tar.gz
24
+
25
+ # Virtual Environment
26
+ .venv/
27
+ venv/
28
+ env/
29
+ ENV/
30
+
31
+ # IDE
32
+ .vscode/
33
+ .idea/
34
+ .trae/
35
+ .claude/
36
+ .gemini/
37
+ .sonarlint/
38
+ *.swp
39
+ *.swo
40
+ *~
41
+
42
+ # Testing & Quality
43
+ .pytest_cache/
44
+ .benchmarks/
45
+ .coverage
46
+ coverage.xml
47
+ htmlcov/
48
+ .mutmut-cache
49
+ mutmut_*.log
50
+ mutmut_results_*.txt
51
+ .mypy_cache/
52
+ .dmypy.json
53
+ dmypy.json
54
+ .ruff_cache/
55
+ .hypothesis/
56
+ .import_linter_cache/
57
+
58
+ # sqlseed
59
+ *.db
60
+ *.sqlite
61
+ *.sqlite3
62
+ .sqlseed_cache/
63
+ snapshots/
64
+ .env
65
+ # validation harness scratch artifacts
66
+ scripts/complex_validation/dbs/_*.yaml
67
+ examples/notebooks/_*.yaml
68
+ examples/notebooks/_*.json
69
+ examples/notebooks/batch_config.yaml
70
+ *.nbconvert.ipynb
71
+ .ipynb_checkpoints/
72
+
73
+ # AI-generated config outputs
74
+ *_config.yaml
75
+ ai_analyze_out.yaml
76
+ ai_suggest_out/
77
+ out.yaml
78
+ full_config_v2.yaml
79
+ products_order_items.yaml
80
+ test_merchants.yaml
81
+
82
+ # OS
83
+ .DS_Store
84
+
85
+ # AI agent work directories
86
+ .agents/
87
+
88
+ # Other
89
+ .worktrees/
90
+ .sisyphus/
91
+
92
+ # IDE knowledge graph cache (local only)
93
+ .understand-anything/
94
+
95
+ # AI batch edit scripts (one-shot, not for repo)
96
+ .edits/
97
+ _edit_helper.py
98
+
99
+ # Local agent tool cache (not for repo)
100
+ .omo/
101
+
102
+ # Node.js (for ctxlint)
103
+ node_modules/
104
+
105
+ # mkdocs build output (deployed via GitHub Actions, not committed)
106
+ site/
107
+
108
+ # CodeFlow warning/issue reports (local analysis artifacts, not for repo)
109
+ codeflow-warnings*.md
110
+ codeflow_issues_report.md
111
+
112
+ # Temporary tool outputs (not for repo)
113
+ test.log
114
+ .understand-anything/
115
+ .playwright-mcp/
116
+
117
+ # LLM validation loop engineering (temporary, not committed)
118
+ scripts/_*.py
119
+ data_quality_demo/*.db
120
+ data_quality_demo/*.log
121
+ data_quality_demo/*_config.yaml
122
+ data_quality_demo/*_config_v*.yaml
123
+ data_quality_demo/_*.json
124
+ data_quality_demo/_report_*.md
125
+ data_quality_demo/_phase1_catalog.md
@@ -7,6 +7,89 @@ All notable changes to this project will be documented in this file.
7
7
  Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [Unreleased]
11
+
12
+ ## [0.2.5] - 2026-10-02
13
+
14
+ ### Added
15
+
16
+ - Add reusable `FillOptions` for single-table generation. Existing `fill()` keyword calls and defaults remain supported; explicit keywords override shared settings.
17
+ - Add Simplified Chinese and English interface switching across the Web workbench, configurations, run history and settings, preserving edits and keeping interface language separate from generated-data locale. Bundled message resources also translate supported backend diagnostics.
18
+ - Add light, dark and system appearance, browser-local defaults for new configurations, and a shared Web component reference with bundled fonts.
19
+ - Support managed component changes on Windows and reviewed updates of optional components with fixed dependencies, wheel hashes and service recovery.
20
+ - Add editable AI suggestions and contextual preview-rule editing, keeping unapplied changes separate from active generation rules.
21
+ - Support Web preview and atomic append for SQLite cross-table cycles when every internal edge is a single-column foreign key with existing non-NULL parent keys. Freeze the available keys before insertion, recheck sources and rules before writing, and roll back all newly inserted rows in the selected scope if any batch fails.
22
+
23
+ ### Changed
24
+
25
+ - Split complex AI parsing and graph layout stages into focused helpers, and merge duplicate CSS declarations while preserving rendering and interaction behavior. `fill()` introspection now shows grouped options and typed compatibility keywords; the complete parameter reference remains in the API guide.
26
+ - Simplify workbench guidance, configuration actions and relationship views; add pointer-centered graph zoom, stable hover geometry and actionable cycle locations.
27
+ - Add editable graph zoom percentages, clearer node and relationship legends, and brief selection feedback for tabs, workflow stages and checkboxes. Respect reduced-motion preferences and keep dependency arrows static rather than implying an active data transfer.
28
+ - Guide SQLite clear-and-regenerate failures through a reviewed downstream-table expansion while preserving the selected write mode and final confirmation.
29
+ - Deliver Core, CLI, AI, Core MCP and Web together at version 0.2.5. Plugins require Core `>=0.2.5.dev0,<0.3` for shared connection parsing and credential redaction; the 0.2.4 release retains its original dependency metadata.
30
+ - Refresh bilingual package and architecture documentation, update the wordmark, and replace obsolete audit logs with concise historical decision records.
31
+
32
+ ### Fixed
33
+
34
+ - Make both Core MCP tools explicitly use Faker, matching their generated YAML templates and avoiding a fallback to Base when optional Mimesis is absent. The existing target-table-only YAML execution scope is unchanged.
35
+ - Close tutorial SQLite connections and explicitly clean up temporary Notebook databases and cache settings, with complete offline execution checks for four affected notebooks.
36
+ - Preserve SQLite `mode=memory` connection-pool behavior explicitly across SQLAlchemy 2.0/2.1, avoiding a deprecated implicit default without changing URI parsing or thread policy.
37
+ - Reject non-object AI tool arguments through the normal format-error path, apply strict output-limit checks to streaming refinement, and ignore malformed suggestion cache envelopes.
38
+ - Bound Web update checks across DNS and response-header waits, retain in-flight request limits after timeouts, and prevent late responses from replacing the active cache result.
39
+ - Publish a terminal component-operation failure when temporary-file cleanup fails, preserving installer exit information and service recovery without automatically retrying installation.
40
+ - Reject missing or columnless AI refinement targets before reading cached suggestions or calling a model, preserving valid empty tables and SQLite identifier resolution.
41
+ - Keep AI-refined suggestions and cached configurations bound to the requested table; retry wrong-target model responses and ignore mismatched caches without silently renaming them.
42
+ - Preserve quoted colon identifiers in database sampling, column-value and row-count queries without treating them as SQL parameters or changing sampled JSON/date values.
43
+ - Refresh the installer snapshot when reviewing a new component operation plan, so temporary pip/uv detection changes do not permanently block installation; environment and dependency changes are still checked before execution.
44
+ - Preserve SQLite file URL identity across encoded and special-character paths; opening an existing file or restoring a session cannot create a missing replacement database.
45
+ - Restore each database connection's own unsaved workbench state when switching connections. Distinguish a configuration/database mismatch from a connection failure, offer a route back to the current database or to the matching target, and ignore stale responses after switching.
46
+ - Report invalid generator bounds before applying rules; recover empty schemas after a refresh and restore keyboard focus after failed connections or background run polling.
47
+ - Keep database credentials out of connection responses, validation errors, exception messages and diagnostic logs without changing runtime connection targets.
48
+ - Treat invalid date ranges as configuration errors instead of exhausting random-generation retries; clarify the existing date/time contract in AI prompts and validate malformed JSON containers normally.
49
+ - Distinguish malformed AI JSON from empty configurations and feed safe format diagnostics into existing bounded retries; unknown generators follow the existing validation recovery path.
50
+ - Constrain strict local AI responses with LM Studio JSON-schema mode or Ollama JSON-object mode. Allow one text-mode compatibility attempt only when the server explicitly rejects the requested format; preserve strict parsing, output-limit checks, authentication failures and unrelated server errors.
51
+ - Connect local AI services at `localhost` and loopback IP addresses directly when environment proxies are present, without changing remote proxy routing or HTTPS certificate settings.
52
+ - Explain unsupported generation scopes, missing previews and disabled identity-reset controls with their actual cause. Preserve successfully returned samples and keep existing database records separately available for read-only inspection.
53
+ - Preserve frontend error feedback and interaction state after failed asynchronous operations; improve light-theme control contrast, selected checkboxes, inspector spacing and diagnostic/example typography.
54
+ - Update the PyPI uploader for Core Metadata 2.5 and allow the maintained workflow to publish an existing release tag without changing its source commit.
55
+ - Use the shared `pypi` environment for all five existing packages while retaining separate upload jobs and post-publication acceptance; verify publisher permissions using unchanged public release files.
56
+ - Upload only the measured Python coverage report, verify the Codecov signer in an isolated keyring, and deploy documentation through the supported GitHub Pages API with artifact provenance checks, bounded polling and cancellation.
57
+
58
+ ### Compatibility
59
+
60
+ - SQLite cycle appends reuse existing parent records; newly generated cyclic records do not reference one another. Each source pool contains at most 100,000 distinct non-NULL keys. This does not bypass UNIQUE/CHECK constraints or add cross-table backfill. Empty-source cycles, cycles involving composite/overlapping foreign keys or configured associations, PostgreSQL cycles, and clearing cyclic tables before regeneration remain unsupported in the Web workbench.
61
+ - Selecting every table or resetting IDs cannot remove an unsupported cycle. Ordinary acyclic appends process tables sequentially and commit each batch, so a later failure can leave earlier batches committed. Atomic rollback applies to the supported SQLite cycle-append and clear-and-regenerate paths. See the [Web workbench guide](docs/web-workbench.md) for the full boundaries.
62
+
63
+ ## [0.2.4] - 2026-09-13
64
+
65
+ ### Added
66
+
67
+ - Ship the Web workbench as `sqlseed-web`, with schema graphs, column rules, previews, multi-table generation, saved configurations and run history. AI remains optional.
68
+ - Add CHECK-aware generator adaptation, foreign-key coverage strategies and coordinated self-reference generation. PostgreSQL uses the SQLAlchemy adapter and psycopg driver.
69
+ - Add contract-driven AI validation and repair with bounded model calls, deterministic fallbacks and separate AI MCP tools.
70
+ - Add automatic post-upload PyPI acceptance for fresh full wheel, minimal Core/Web and full sdist installations, including source hashes and real SQLite entry-point checks.
71
+
72
+ ### Changed
73
+
74
+ - Deliver offline Core, CLI, AI, Core MCP and Web as five packages at version 0.2.4. Install `sqlseed-cli` for the `sqlseed` command; the Core package provides the Python API. See the [migration guide](docs/migration.md) for changes from 0.2.3.
75
+ - Keep sibling dependencies in the compatible `>=0.2.4.dev0,<0.3` series. Use matching released versions or a single development artifact set.
76
+ - Core MCP exposes two offline tools. Launch `mcp-server-sqlseed-ai` separately for the four AI tools; installing the AI package does not add tools to the Core MCP process.
77
+ - Refresh English and Chinese READMEs, user and API guides, package metadata and documentation links. Include the complete AGPL-3.0-or-later license text in all five distributions.
78
+ - Deploy GitHub Pages after all main CI jobs succeed; publish Python packages through a separate version-tagged release workflow.
79
+
80
+ ### Fixed
81
+
82
+ - Preserve JSON document values through typed database inserts and accept valid ISO temporal values without double encoding JSON or rejecting compatible SQLite date configurations.
83
+ - Identify self-referencing rows by their complete primary key and check complete ordinary UNIQUE keys when assigning parent references; partial and expression indexes remain enforced by the database.
84
+ - Preserve explicit generation constraints, handle existing UNIQUE values during appends and enforce CHECK ranges without silently replacing conflicting user rules.
85
+ - Close SQLite resources and clean up Web workers on failures, including Windows path and macOS process-cleanup cases.
86
+ - Keep AI MCP progress output out of the stdio JSON-RPC stream and enforce AI healing time budgets.
87
+
88
+ ### Compatibility
89
+
90
+ - Migrate old `sqlseed.cli` imports and MCP client tool selections before upgrading. Core 0.2.3 cannot be combined with the new plugins.
91
+ - Ordinary batched fills can retain earlier committed batches after a later failure; inspect the returned count and errors. PostgreSQL composite and cross-schema foreign-key generation still has limitations described in the migration guide.
92
+
10
93
  ## [v0.1.20]
11
94
 
12
95
  ### Changed
@@ -7,6 +7,89 @@
7
7
  格式基于 [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  本项目遵循[语义化版本](https://semver.org/spec/v2.0.0.html)。
9
9
 
10
+ ## [Unreleased]
11
+
12
+ ## [0.2.5] - 2026-10-02
13
+
14
+ ### 新增
15
+
16
+ - 增加可复用的 `FillOptions` 单表生成参数。既有 `fill()` 关键字调用和默认值保持兼容,显式关键字优先于共享设置。
17
+ - Web 工作台、配置管理、运行记录与设置支持简体中文和 English 切换,保留编辑状态,界面语言与生成数据的 locale 分离;随包分发的消息资源同时翻译受支持的后端诊断。
18
+ - 增加浅色、深色及跟随系统外观、保存在浏览器中的新建配置偏好,以及包含分发字体的 Web 共用组件样板。
19
+ - 支持 Windows 受管组件变更;可选组件更新需审阅依赖、固定其他包版本、核验 wheel 哈希,并恢复服务。
20
+ - AI 建议支持应用前微调,预览可在保留上下文的情况下编辑字段规则;未应用修改与当前生成规则分开保存。
21
+ - Web 支持 SQLite 已有来源的跨表循环预览与原子追加:环内每条关系必须是已有非空父键的单列外键。生成前固定引用来源,写入前重新核对来源与规则,任一批次失败时回滚整个所选范围的本次新增记录。
22
+
23
+ ### 变更
24
+
25
+ - 将复杂 AI 解析与关系图布局阶段拆分为职责明确的辅助函数,合并重复 CSS 声明并保持渲染与交互行为。`fill()` 签名内省改为分组参数和带类型的兼容关键字,API 指南保留完整参数参考。
26
+ - 简化工作台引导、配置操作与关系图;增加鼠标位置缩放、稳定的悬停几何和可定位到具体表的循环问题。
27
+ - 关系图支持手动输入缩放比例,明确节点与关系图例;标签页、流程阶段和复选框提供短暂选择反馈并遵循减少动态效果设置。依赖箭头保持静态,避免暗示正在传输数据。
28
+ - SQLite 清空重建受阻时,引导审阅并补齐下游关联表,保留已选写入方式和最后确认步骤。
29
+ - Core、CLI、AI、Core MCP 与 Web 统一以 0.2.5 版本交付。插件要求 Core `>=0.2.5.dev0,<0.3`,使用共享连接解析与凭据脱敏;0.2.4 发行包保留原有依赖元数据。
30
+ - 同步双语包说明与架构文档,更新品牌标识;用简明历史决策记录替换过期验收日志。
31
+
32
+ ### 修复
33
+
34
+ - 两个 Core MCP 工具显式使用 Faker,与生成的 YAML 模板一致,避免未安装可选 Mimesis 时回退到 Base;YAML 仍只执行工具指定目标表的既有配置范围。
35
+ - 关闭教程 SQLite 连接,显式清理 Notebook 临时数据库并恢复缓存设置;四份受影响示例增加完整离线执行验收。
36
+ - 显式保留 SQLAlchemy 2.0/2.1 下 SQLite `mode=memory` 的连接池行为,消除已弃用的隐式选择,不改变 URI 解析或线程策略。
37
+ - AI 工具参数为非对象 JSON 时进入正常格式错误处理;流式优化同样严格检查输出截断,结构损坏的建议缓存按失效处理。
38
+ - Web 检查更新的等待预算覆盖 DNS 与响应头阶段;超时后保留在途请求数量限制,迟到响应不会覆盖当前缓存结果。
39
+ - 组件操作临时文件清理失败时仍发布明确失败终态,保留安装器退出信息并恢复服务,不自动重试安装。
40
+ - AI 单表配置优化在读取建议缓存或调用模型前拒绝不存在或没有列的目标,保留合法空表及 SQLite 标识符解析行为。
41
+ - AI 优化建议与缓存配置必须属于请求的同一张表;目标错误的模型响应进入重试,错目标缓存重新生成,不静默改名。
42
+ - 数据库采样、列值与行数查询保留已引用的冒号标识符,不再将其误判为 SQL 参数,并保持 JSON 与日期采样值的既有表示。
43
+ - 重新审阅组件操作计划时更新安装器快照,避免 pip/uv 临时探测变化持续阻塞安装;执行前仍核验环境与依赖是否改变。
44
+ - 保留编码及特殊字符 SQLite 文件 URL 的真实目标身份;打开已有文件或恢复会话时,不会创建已丢失数据库的替代空库。
45
+ - 切换数据库时恢复各自未保存的工作台状态;区分配置与数据库不匹配和连接失败,提供返回当前数据库或选择对应目标的入口,切换后的迟到响应不会覆盖新状态。
46
+ - 应用规则前定位非法生成器边界;重新读取空库结构后能进入新表;连接失败或运行记录轮询后恢复键盘焦点。
47
+ - 连接响应、参数校验错误、异常与诊断日志不再回显数据库凭据;实际运行连接目标保持原样。
48
+ - 无效日期范围按配置错误报告,不再耗尽随机取值重试;AI 提示明确既有日期时间合同,错误 JSON 容器交给正常配置校验。
49
+ - 区分 AI 的非法 JSON 与空配置,在既有有界重试中反馈安全的格式诊断;未知生成器进入已有配置校验恢复路径。
50
+ - 本地 AI 严格输出使用 LM Studio JSON-schema 模式或 Ollama JSON-object 模式。仅在服务器明确拒绝指定格式时尝试一次文本兼容请求;仍执行严格解析与截断检查,认证失败及无关服务器错误不会因此降级。
51
+ - 配置了环境代理时,`localhost` 与回环 IP 上的本地 AI 服务仍直接连接;远程服务代理与 HTTPS 证书设置保持不变。
52
+ - 按实际原因说明不支持的生成范围、缺失的新样例与自增重置禁用状态;保留其他已成功返回的样例,并将数据库已有记录作为独立只读入口。
53
+ - 异步操作失败后保留前端错误反馈与交互状态;改善浅色主题控件对比度、复选框选中状态、检查区间距及诊断和示例字体。
54
+ - 升级 PyPI 上传工具以支持 Core Metadata 2.5,并允许通过维护后的工作流发布现有版本 tag,保持其源码提交不变。
55
+ - 五个已创建的包统一使用 `pypi` 发布环境,保留各包独立上传任务及发布后验收,并通过保持不变的公开发行文件核验发布权限。
56
+ - 覆盖率只上传实际测量的 Python 报告,并在独立密钥环中核验 Codecov 签名者;文档通过受支持的 GitHub Pages API 部署,核对产物来源并限制轮询与取消的等待时间。
57
+
58
+ ### 兼容性
59
+
60
+ - SQLite 循环追加引用已有父表记录,新生成的循环表记录不会互相引用;每个来源最多使用 100,000 个非空不同键,不绕过 UNIQUE/CHECK 约束,也不增加跨表回填。来源为空、涉及组合或重叠外键或配置关联、PostgreSQL 循环,以及清空循环表后重建,仍不属于当前 Web 工作台支持范围。
61
+ - 全选数据表或重置 ID 不能解除不支持的循环。普通无跨表循环的追加保持逐表执行、逐批提交,后续失败可能保留先前已提交的批次;原子回滚适用于已支持的 SQLite 循环追加与清空重建流程。完整边界见 [Web 工作台指南](docs/web-workbench.md)。
62
+
63
+ ## [0.2.4] - 2026-09-13
64
+
65
+ ### 新增
66
+
67
+ - 通过 `sqlseed-web` 交付 Web 工作台,支持 schema 关系图、字段规则、预览、多表生成、配置保存与运行记录;AI 仍为可选能力。
68
+ - 增加 CHECK 驱动的生成器适配、外键覆盖策略与自引用协调生成;PostgreSQL 使用 SQLAlchemy adapter 和 psycopg 驱动。
69
+ - 增加基于 contract 的 AI 校验与修复,包含有界模型调用、确定性降级和独立 AI MCP 工具。
70
+ - 增加上传后自动执行的正式 PyPI 验收,覆盖全量 wheel、仅 Core/Web 和全量 sdist 的新环境安装,核验文件来源哈希并通过真实入口生成 SQLite 数据。
71
+
72
+ ### 变更
73
+
74
+ - 离线 Core、CLI、AI、Core MCP 与 Web 以统一 0.2.4 版本五包交付。`sqlseed` 命令需要安装 `sqlseed-cli`;Core 提供 Python API。从 0.2.3 升级前请阅读[迁移指南](docs/migration.zh-CN.md)。
75
+ - 兄弟包依赖保持在兼容的 `>=0.2.4.dev0,<0.3` 系列;使用匹配的正式版本或同一组开发构建产物。
76
+ - Core MCP 提供两个离线工具;四个 AI 工具通过独立的 `mcp-server-sqlseed-ai` 进程提供,安装 AI 包不会向 Core MCP 进程注入工具。
77
+ - 更新中英文 README、用户与 API 指南、包元数据和文档链接;五包分发物均包含完整的 AGPL-3.0-or-later 许可证正文。
78
+ - main 全部 CI 任务成功后部署 GitHub Pages;Python 包通过独立、基于版本 tag 的发布流程上传。
79
+
80
+ ### 修复
81
+
82
+ - 保留类型绑定写入中的 JSON 文档语义,支持合法 ISO 日期时间输入,避免 JSON 双重编码和旧 SQLite 日期配置失效。
83
+ - 自引用父节点更新使用完整主键,并检查完整普通 UNIQUE 键;partial/expression index 仍由数据库执行约束。
84
+ - 保留用户显式生成约束,追加数据时处理既有 UNIQUE 值,适配 CHECK 范围且不静默替换冲突规则。
85
+ - 关闭 SQLite 资源并在失败时清理 Web worker,处理 Windows 路径与 macOS 进程清理问题。
86
+ - AI MCP 的进度输出不再进入 stdio JSON-RPC 协议流,并严格执行 AI 修复时间预算。
87
+
88
+ ### 兼容性
89
+
90
+ - 升级前迁移旧 `sqlseed.cli` 导入和 MCP 客户端工具选择;Core 0.2.3 不能与新插件混用。
91
+ - 普通批量填充在后续批次失败时可能保留此前已提交的数据,应检查返回的 count 和 errors。PostgreSQL 复合与跨 schema 外键生成仍有限制,详见迁移指南。
92
+
10
93
  ## [v0.1.20]
11
94
 
12
95
  ### 变更