Skip to content

Commit 37d0935

Browse files
authored
Merge pull request #85 from cachevector/release/v0.1.0
chore: prepare v0.1.0 stable release
2 parents dd9af4a + f14e7c6 commit 37d0935

18 files changed

Lines changed: 840 additions & 260 deletions

File tree

.github/workflows/ci.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,38 @@ jobs:
4747

4848
- name: Run ruff format check
4949
run: uv run ruff format --check .
50+
51+
build-check:
52+
runs-on: ubuntu-latest
53+
steps:
54+
- uses: actions/checkout@v4
55+
56+
- name: Install uv
57+
uses: astral-sh/setup-uv@v4
58+
59+
- name: Set up Python
60+
run: uv python install 3.12
61+
62+
- name: Build package
63+
run: uv build
64+
65+
- name: Check build artifacts
66+
run: |
67+
uv pip install twine
68+
uv run twine check dist/*
69+
70+
web-check:
71+
runs-on: ubuntu-latest
72+
steps:
73+
- uses: actions/checkout@v4
74+
75+
- name: Install Bun
76+
uses: oven-sh/setup-bun@v1
77+
78+
- name: Install dependencies
79+
run: bun install
80+
working-directory: web
81+
82+
- name: Build website
83+
run: bun run build
84+
working-directory: web

.github/workflows/release.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
id-token: write # Mandatory for trusted publishing
13+
contents: read
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Install uv
19+
uses: astral-sh/setup-uv@v4
20+
21+
- name: Set up Python
22+
run: uv python install 3.12
23+
24+
- name: Build package
25+
run: uv build
26+
27+
- name: Publish to PyPI
28+
uses: pypa/gh-action-pypi-publish@release/v1
29+
# with:
30+
# repository-url: https://upload.pypi.org/legacy/ # Optional: defaults to PyPI
31+
32+
github-release:
33+
runs-on: ubuntu-latest
34+
needs: publish
35+
permissions:
36+
contents: write
37+
steps:
38+
- uses: actions/checkout@v4
39+
- name: Create GitHub Release
40+
uses: softprops/action-gh-release@v2
41+
with:
42+
generate_release_notes: true
43+
files: dist/*

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.1.0] - 2026-05-22
9+
10+
### Added
11+
- First official stable release.
12+
- Comprehensive dataset profiling and health checks.
13+
- Support for multiple report formats: Markdown, JSON, HTML, and PDF.
14+
- Two HTML report themes: `minimal` and `neubrutalism`.
15+
- Automatic suggestion provider for data quality issues.
16+
- Code generation for pandas fix scripts.
17+
- Sklearn preprocessing pipeline generation.
18+
- CLI commands: `scan`, `details`, `report`, `checks`, and `version`.
19+
- Robust error handling for invalid files, empty datasets, and malformed configurations.
20+
- Configuration support via YAML, TOML, and JSON.
21+
- Intelligent sampling for large datasets.
22+
- Dataset drift detection.
23+
- Mutual information and statistical checks.
24+
25+
### Changed
26+
- Refactored report generators for robust lazy loading.
27+
- Improved CLI output with better error messages and color-coded statuses.
28+
- Updated documentation and website for stable release.
29+
30+
### Fixed
31+
- Fixed crash when generating reports for single-row datasets.
32+
- Fixed dependency issues in report generation when optional libraries are missing.
33+
- Fixed non-deterministic order in generated fix scripts.
34+
35+
## [0.1.0b3] - 2026-04-15
36+
- Initial beta release with core features.

README.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
</div>
2828

2929
> [!NOTE]
30-
> HashPrep is in **beta** (v0.1.0b3). Core features are fully tested with CI. The API may still evolve based on community feedback.
30+
> HashPrep is now in its first stable release (v0.1.0). Core features are fully tested with CI.
3131
3232
## Overview
3333

@@ -130,6 +130,7 @@ hashprep report dataset.csv --format html --theme minimal
130130
```
131131

132132
**Options:**
133+
- `--output PATH`, `-o PATH`: Custom output file path
133134
- `--format {md,json,html,pdf}`: Report format (default: md)
134135
- `--theme {minimal,neubrutalism}`: HTML report theme (default: minimal)
135136
- `--with-code`: Generate Python scripts for fixes and pipelines
@@ -153,6 +154,9 @@ hashprep report dataset.csv --format pdf --no-visualizations
153154
# Generate report with automatic fix scripts
154155
hashprep report dataset.csv --with-code
155156

157+
# Generate report with custom output path
158+
hashprep report dataset.csv --format html --output my_reports/analysis.html
159+
156160
# This creates:
157161
# - dataset_hashprep_report.md (or .html/.pdf/.json)
158162
# - dataset_hashprep_report_fixes.py (pandas script)
@@ -162,7 +166,13 @@ hashprep report dataset.csv --with-code
162166
hashprep report train.csv --comparison test.csv --format html
163167
```
164168

165-
#### 4. Version
169+
#### 4. List Available Checks
170+
Discover all data quality checks that HashPrep can perform.
171+
```bash
172+
hashprep checks
173+
```
174+
175+
#### 5. Version
166176
Check HashPrep version.
167177
```bash
168178
hashprep version

RELEASE_TODO.md

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# HashPrep Official Release TODO
2+
3+
## Release Scope
4+
5+
- [x] Decide the official version target, likely `0.1.0` unless the release should signal `1.0.0`.
6+
- [ ] Freeze public API expectations for `DatasetAnalyzer`.
7+
- [ ] Freeze public API expectations for `HashPrepConfig`.
8+
- [ ] Freeze public API expectations for `load_config`.
9+
- [ ] Freeze public API expectations for `generate_report`.
10+
- [x] Freeze CLI behavior for `scan`, `details`, `report`, and `version`.
11+
- [ ] Define what is stable versus experimental, especially auto-fixes, generated pipelines, report themes, and statistical checks.
12+
13+
## Code Readiness
14+
15+
- [ ] Run the full test suite across Python `3.10`, `3.11`, and `3.12`.
16+
- [ ] Run lint checks.
17+
- [ ] Run format checks.
18+
- [x] Add or verify tests for CLI error handling.
19+
- [ ] Add or verify tests for invalid check names.
20+
- [x] Add or verify tests for report generation in `md`, `json`, `html`, and `pdf`.
21+
- [x] Add or verify tests for generated `fixes.py` code.
22+
- [x] Add or verify tests for generated sklearn pipeline code.
23+
- [x] Add or verify tests for config loading from YAML, TOML, and JSON.
24+
- [ ] Add or verify tests for large dataset sampling behavior.
25+
- [ ] Verify empty CSV behavior.
26+
- [ ] Verify duplicate column behavior.
27+
- [ ] Verify missing target column behavior.
28+
- [ ] Verify non-numeric target behavior for mutual information and statistical checks.
29+
- [ ] Verify datasets with infinities, all-null columns, and mixed types.
30+
- [ ] Verify reports do not crash when plots are disabled.
31+
- [ ] Verify reports do not crash when optional summary data is missing.
32+
33+
## Functionality Readiness
34+
35+
### Must Improve Before Stable
36+
37+
- [x] Improve CLI error handling for invalid files.
38+
- [x] Improve CLI error handling for empty CSVs.
39+
- [x] Improve CLI error handling for bad target columns.
40+
- [x] Improve CLI error handling for bad config files.
41+
- [x] Improve CLI error handling for unsupported report formats.
42+
- [x] Improve CLI error handling for failed PDF generation.
43+
- [x] Ensure CLI failures produce clear user-facing messages.
44+
- [ ] Ensure HTML reports work when no issues are found.
45+
- [ ] Ensure PDF reports work when no issues are found.
46+
- [ ] Ensure Markdown reports work when no issues are found.
47+
- [ ] Ensure JSON reports work when no issues are found.
48+
- [ ] Ensure all report formats work when plots are disabled.
49+
- [ ] Ensure all report formats work for tiny datasets.
50+
- [ ] Ensure all report formats work for mostly missing datasets.
51+
- [ ] Ensure all report formats work when optional summaries are absent.
52+
- [x] Verify generated fix scripts are deterministic.
53+
- [x] Verify generated fix scripts are valid Python.
54+
- [x] Verify generated sklearn pipeline code is deterministic.
55+
- [x] Verify generated sklearn pipeline code is valid Python.
56+
- [x] Add tests that execute generated fix scripts where practical.
57+
- [x] Add tests that execute generated sklearn pipeline code where practical.
58+
- [ ] Clearly label generated fixes as suggestions if they are heuristic or incomplete.
59+
- [x] Add config validation for unknown keys.
60+
- [x] Add config validation for wrong value types.
61+
- [x] Add clear errors for malformed YAML, TOML, and JSON config files.
62+
- [ ] Confirm threshold behavior is predictable and documented.
63+
- [ ] Decide whether summary dictionary shapes are part of the stable public API.
64+
- [ ] Document stable summary keys if summary dictionaries are part of the public API.
65+
66+
### Strongly Recommended
67+
68+
- [x] Add an `--output` option to `hashprep report`.
69+
- [x] Allow `hashprep report data.csv --format html --output reports/data.html`.
70+
- [ ] Add machine-readable JSON output for `hashprep details`.
71+
- [x] Add check discovery through a command such as `hashprep checks`.
72+
- [x] Alternatively add check discovery through an option such as `hashprep scan --list-checks`.
73+
- [ ] Document why issues are classified as `critical` versus `warning`.
74+
- [ ] Review whether PDF/reporting dependencies should move to optional extras in a future release.
75+
- [ ] Document any dependency-extra plan if it is deferred.
76+
77+
### Not For This Stable Release
78+
79+
- [ ] Avoid adding major new check families before the first stable release unless they fix a release blocker.
80+
- [ ] Avoid adding model integrations before the first stable release.
81+
- [ ] Avoid adding dashboard features before the first stable release.
82+
- [ ] Avoid expanding automatic dataset repair workflows before the first stable release.
83+
- [ ] Keep the first stable release focused on hardening existing behavior.
84+
85+
## Packaging
86+
87+
- [x] Update `hashprep/__init__.py` from `0.1.0b3` to the official release version.
88+
- [x] Update the beta note in `README.md`.
89+
- [x] Update the beta support table in `SECURITY.md`.
90+
- [x] Add or verify PyPI classifiers in `pyproject.toml`.
91+
- [x] Add or verify package keywords in `pyproject.toml`.
92+
- [x] Add or verify project URLs in `pyproject.toml`.
93+
- [x] Add or verify Python version classifiers in `pyproject.toml`.
94+
- [x] Add or verify license metadata in `pyproject.toml`.
95+
- [ ] Build source distribution.
96+
- [ ] Build wheel distribution.
97+
- [ ] Inspect built package artifacts.
98+
- [ ] Install the built wheel in a clean environment.
99+
- [ ] Smoke test `import hashprep` from the built wheel.
100+
- [ ] Smoke test `hashprep version` from the built wheel.
101+
- [ ] Smoke test `hashprep scan datasets/train.csv` from the built wheel.
102+
- [ ] Smoke test `hashprep report datasets/train.csv --format html` from the built wheel.
103+
- [ ] Confirm `MANIFEST.in` excludes dev/demo files intentionally.
104+
- [ ] Confirm `MANIFEST.in` includes all runtime files needed by reports and templates.
105+
106+
## Documentation
107+
108+
- [x] Replace beta references in `README.md`.
109+
- [x] Replace beta references in `SECURITY.md`.
110+
- [x] Replace beta references in `web/src/lib/components/Hero.svelte`.
111+
- [x] Add `CHANGELOG.md`.
112+
- [ ] Add first official release notes.
113+
- [ ] Document available checks in release notes.
114+
- [ ] Document CLI commands in release notes.
115+
- [ ] Document report formats in release notes.
116+
- [ ] Document known limitations in release notes.
117+
- [ ] Document upgrade notes from beta.
118+
- [ ] Verify README examples run exactly as written.
119+
- [ ] Update the documentation URL in `pyproject.toml` if a dedicated docs page is available.
120+
- [ ] Refresh generated example reports under `examples/reports/` if needed.
121+
122+
## CI/CD
123+
124+
- [x] Add package build validation to CI.
125+
- [x] Add `twine check` or equivalent artifact validation to CI.
126+
- [ ] Add built-wheel install smoke test to CI.
127+
- [ ] Add CLI smoke test against the built wheel to CI.
128+
- [x] Add website build check for `web/`.
129+
- [x] Add or verify release workflow triggered by version tags.
130+
- [ ] Configure PyPI publishing, preferably with trusted publishing.
131+
- [x] Configure GitHub release creation.
132+
- [ ] Consider adding dependency and security scanning for Python dependencies.
133+
- [ ] Consider adding dependency and security scanning for web dependencies.
134+
135+
## Security And Dependencies
136+
137+
- [ ] Review pinned and minimum Python dependency versions.
138+
- [ ] Review pinned and minimum web dependency versions.
139+
- [ ] Confirm heavy dependencies are intentional, especially `weasyprint`, `matplotlib`, `seaborn`, and `scikit-learn`.
140+
- [ ] Decide whether PDF/report dependencies should remain core dependencies or move to optional extras in a future release.
141+
- [ ] Run vulnerability checks for Python dependencies.
142+
- [ ] Run vulnerability checks for web dependencies.
143+
- [x] Update `SECURITY.md` to describe stable release support.
144+
145+
## Website
146+
147+
- [x] Update website beta badges.
148+
- [ ] Update website install examples.
149+
- [ ] Confirm the docs page matches the current README and API.
150+
- [x] Build the static site successfully.
151+
- [ ] Verify PyPI link.
152+
- [ ] Verify GitHub link.
153+
- [ ] Verify docs link.
154+
- [ ] Verify license link.
155+
- [ ] Verify issue tracker link.
156+
- [ ] Decide deployment target for the docs site.
157+
- [ ] Decide release timing for the docs site.
158+
159+
## Release Process
160+
161+
- [ ] Create a release branch.
162+
- [ ] Make version, docs, and changelog updates.
163+
- [ ] Run full validation locally.
164+
- [ ] Merge after CI passes.
165+
- [ ] Tag the release, for example `v0.1.0`.
166+
- [ ] Publish to PyPI.
167+
- [ ] Create GitHub release with release notes.
168+
- [ ] Verify public install with `pip install hashprep`.
169+
- [ ] Verify public CLI with `hashprep version`.
170+
- [ ] Announce the release as the first stable release after alpha and beta.
171+
172+
## Known Immediate Gaps
173+
174+
- [x] Version is still `0.1.0b3`.
175+
- [x] `README.md` still says beta.
176+
- [x] Website hero still says beta and shows `hashprep-0.1.0b3`.
177+
- [x] `SECURITY.md` only describes beta support.
178+
- [x] `CHANGELOG.md` is not present.
179+
- [x] CI does not currently build or check publish artifacts.
180+
- [x] CI does not currently build the Svelte website.
181+
- [x] No release or publish workflow is present.

SECURITY.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
## Supported Versions
44

5-
hashprep is currently in beta (`0.1.0bX`). Only the latest beta release on the `main` branch receives security updates. Older pre-releases are not patched — please upgrade to the newest version to pick up fixes.
5+
hashprep has reached a stable `0.1.0` release. Only the latest minor release is supported for security updates.
66

77
| Version | Supported |
88
| ---------- | ------------------ |
9-
| `0.1.0b3` | :white_check_mark: |
10-
| `< 0.1.0b3`| :x: |
9+
| `0.1.0` | :white_check_mark: |
10+
| `< 0.1.0` | :x: |
1111

1212
Once hashprep reaches a stable `0.1.0` release, this table will be updated to reflect supported minor versions.
1313

hashprep/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
from .core.analyzer import DatasetAnalyzer as DatasetAnalyzer
33
from .utils.config_loader import load_config as load_config
44

5-
__version__ = "0.1.0b3"
5+
__version__ = "0.1.0"

0 commit comments

Comments
 (0)