Releases: fairspec/fairspec-python
v0.1.7
v0.1.7 (2026-06-15)
Bug Fixes
- terminal: Set non-zero exit code on validation failure (
a566051)
Validate commands (table, data, file, dataset, tableSchema, dataSchema) route through Session.render_report_result, which printed the report but never signalled failure, so CI relying on $? passed on invalid data. Raise typer.Exit(1) when the report is invalid, including silent mode.
Mirrors fairspec-typescript 9fe1ded.
Testing
- Write validate fixture as LF to avoid CRLF on windows (
b6abbb0)
open("w") translates \n to os.linesep, so on Windows the CRLF made a valid table parse as invalid and the exit-code assertion failed. Write the CSV with newline="" so it is LF on every platform.
Detailed Changes: v0.1.6...v0.1.7
v0.1.6
v0.1.6 (2026-06-15)
Bug Fixes
- dataset: Make dataset copy persist to a new folder (
2bbe158)
The folder plugin only claimed targets that already existed as a directory, while the save action requires a vacant path, so a folder copy was a silent no-op. Detect folder-like targets without requiring existence, pass a Dataset model, and fail loudly if no plugin saves.
Found via smoke testing 0.1.5.
- terminal: Coerce loaded descriptor to Dataset for resource selection (
d8834da)
select_resource and dataset script accessed .resources on the dict that load_dataset returns, so --dataset/--resource lookups always failed and the script REPL exposed a dict. Coerce to a Dataset model first.
Found via smoke testing 0.1.5; same root cause as #11.
Documentation
- terminal: Correct --schema and --dataset/--resource flag names (
b7ea93d)
Docs referenced --table-schema, --from-dataset and --from-resource, but the CLI exposes --schema, --dataset (-d) and --resource (-r).
Detailed Changes: v0.1.5...v0.1.6
v0.1.5
v0.1.5 (2026-06-15)
Bug Fixes
- library: Accept dict descriptor in validate_dataset (
aa40290)
A dict argument fell through to normalize_dataset and raised AttributeError; coerce it and return the structured report instead.
Fixes #15
- library: Infer data schema from top-level JSON arrays (
67f813c)
Load JSON data via json.loads instead of the descriptor parser, which rejected any non-object top-level value.
Fixes #12
- metadata: Accept object integrity in dataset profile (
236591b)
The dataset profile declared integrity as a string while the model and every emitter use the object form, so inferred datasets never validated.
Fixes #13
- table: Infer file dialect for json and jsonl (
7c0b9fb)
JsonPlugin was missing an infer_file_dialect override, so data infer-dialect could not detect .json/.jsonl files.
Fixes #14
- terminal: List dataset resources via model coercion (
1754eed)
load_dataset returns a descriptor dict, so getattr(dataset, "resources") was always None. Coerce to a Dataset model before listing resource names.
Fixes #11
Chores
- Ignore .worktrees directory (
69b91a9)
Documentation
- Point remote dataset example at a fairspec descriptor (
16856c0)
The previous URL was a Frictionless data package incompatible with the fairspec profile; also wrap load_dataset output in Dataset.model_validate.
Fixes #16
Testing
- Use ascii fixture in dataset round-trip spec (
7c266d0)
write_text used the platform default encoding, so the non-ascii content failed on Windows (cp1252). The round-trip test does not need unicode.
Fixes #13
- Write round-trip fixture as bytes to avoid CRLF on windows (
8012e1d)
write_text translates \n to os.linesep, so on Windows the CRLF corrupted type inference (name -> [string, null]) and failed profile validation. write_bytes writes identical LF content on every platform.
Fixes #13
Detailed Changes: v0.1.4...v0.1.5
v0.1.4
v0.1.4 (2026-05-26)
Bug Fixes
- Move ty ignore to assignment line after format (
2d1db70)
Chores
-
Bump ruff line-length to 90 (
cf7681a) -
deps: Bump idna in the uv group across 1 directory (#10,
1ec4fb0)
Bumps the uv group with 1 update in the / directory: idna.
Updates idna from 3.11 to 3.15
updated-dependencies:
- dependency-name: idna dependency-version: '3.15'
dependency-type: indirect
dependency-group: uv ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Detailed Changes: v0.1.3...v0.1.4
v0.1.3
v0.1.3 (2026-05-16)
Bug Fixes
- Correct keywords in nested pyproject.toml files (
d9d9c4e)
Chores
-
Add CITATION.cff (
025a6a4) -
Add format:staged pre-commit hook (
da85f95) -
Added cursor/claude (
874a105) -
Added json coverate report (
3727d61) -
Added pytest-cov (
35bce34) -
Align docs navigation with fairspec-typescript (
c440c4f)
Bump livemark to 0.18.0 and consolidate header links into sections (type: "custom" with icons), matching the fairspec-typescript layout. Reorder Terminal before Python and replace renamed lucide icons (terminal-square -> square-terminal, file-type-2 -> file-code) so they render under lucide-react 0.577.0.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
-
Bump livemark (
e4e9cb6) -
Bump pnpm to 11 (
3d1ee27) -
Collapse uv/pnpm allowlist in workflows (
474865e) -
Fixed gitattributes (
3a14f57) -
Fixed github actions (
23387cd) -
Fixed navigation link (
8c851e4) -
Improved github workflows (
21b7d10)
Adds the same GitHub Actions plumbing that fairspec-standard and fairspec-typescript run: weekly + on-PR semgrep + gitleaks scans (scan.yaml), the @claude mention bot (mention.yaml), and the OWASP-themed automated PR review (review.yaml), along with the matching .gitleaks.toml allowlist. package.json gains leaks / vulns scripts (semgrep targets p/python here) plus a scan alias, along with engines and packageManager so the scan workflow can resolve a pinned Node and pnpm. The allowedTools list in mention/ review is adjusted from pnpm scripts to the uv run task ... commands this repo uses, and the pre-commit format job is scoped to *.py since ruff format only handles Python.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Migrate docs from Astro/Starlight to livemark (
b2d16f2)
Replace the website/ workspace package with livemark at the project root. Move docs from website/content/docs/ to docs/, public assets to .livemark/public/, and route the README as the landing page. Drop the overview/contributing.md duplicate and use livemark patches instead.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
-
Migrate to lefthook (
a5ccd03) -
Pin actions by SHA in workflows (
2f81605) -
Rebase on allowBuilds (
e308968) -
Rename mention to comment workflow and add @claude/review trigger (
ecd92c6) -
Restrict mention workflow to users with repo association (
428548b) -
Update comment/review workflow job names (
ac41795) -
Update navigation (
e0b698e) -
Update navigation (
da79a5c) -
Updated links (
ea8e1aa)
Bumps gitpython from 3.1.46 to 3.1.50.
updated-dependencies:
- dependency-name: gitpython dependency-version: 3.1.50
dependency-type: indirect ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the npm_and_yarn group with 1 update in the / directory: mermaid.
Updates mermaid from 11.14.0 to 11.15.0
updated-dependencies:
- dependency-name: mermaid dependency-version: 11.15.0
dependency-type: indirect
dependency-group: npm_and_yarn ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps pygments from 2.19.2 to 2.20.0.
updated-dependencies:
- dependency-name: pygments dependency-version: 2.20.0
dependency-type: indirect ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the uv group with 2 updates in the / directory: requests and urllib3.
Updates requests from 2.32.5 to 2.33.0 - Release notes - Changelog - Commits
Updates urllib3 from 2.6.3 to 2.7.0 - Release notes - Changelog - Commits
--- updated-dependencies: - dependency-name: requests dependency-version: 2.33.0
dependency-type: indirect
dependency-group: uv
- dependency-name: urllib3 dependency-version: 2.7.0
dependency-group: uv ...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Documentation
- Add high-level Python guides for dataset, table, data, file (
bca330c)
Add four conceptual API guides modelled on docs/terminal/{dataset,table, data,file}.md, using the programming API (load_dataset, validate_table, infer_data_schema, copy_file, …) instead of CLI subcommands. Sit above the format-specific pages in the sidebar (orders 1-4); the existing format guides are renumbered to 10-20. docs/python/table.md is rewritten in place to become the high-level Table guide while keeping the existing Polars-Table-type content (normalize/denormalize/inspect).
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Detailed Changes: v0.1.2...v0.1.3