tablassert 7.0.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 (48) hide show
  1. tablassert-7.0.0/.github/workflows/docs.yml +24 -0
  2. tablassert-7.0.0/.github/workflows/pipy.yml +19 -0
  3. tablassert-7.0.0/.gitignore +25 -0
  4. tablassert-7.0.0/.planning/PROJECT.md +47 -0
  5. tablassert-7.0.0/.planning/REQUIREMENTS.md +73 -0
  6. tablassert-7.0.0/.planning/ROADMAP.md +66 -0
  7. tablassert-7.0.0/.planning/STATE.md +79 -0
  8. tablassert-7.0.0/.planning/config.json +15 -0
  9. tablassert-7.0.0/.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-PLAN.md +90 -0
  10. tablassert-7.0.0/.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-SUMMARY.md +80 -0
  11. tablassert-7.0.0/.planning/research/ARCHITECTURE.md +220 -0
  12. tablassert-7.0.0/.planning/research/FEATURES.md +134 -0
  13. tablassert-7.0.0/.planning/research/PITFALLS.md +219 -0
  14. tablassert-7.0.0/.planning/research/STACK.md +140 -0
  15. tablassert-7.0.0/.planning/research/SUMMARY.md +146 -0
  16. tablassert-7.0.0/.pre-commit-config.yaml +15 -0
  17. tablassert-7.0.0/.python-version +1 -0
  18. tablassert-7.0.0/.vscode/settings.json +23 -0
  19. tablassert-7.0.0/CHANGELOG.md +74 -0
  20. tablassert-7.0.0/LICENSE +201 -0
  21. tablassert-7.0.0/PKG-INFO +141 -0
  22. tablassert-7.0.0/README.md +113 -0
  23. tablassert-7.0.0/docs/api/fullmap.md +184 -0
  24. tablassert-7.0.0/docs/api/qc.md +226 -0
  25. tablassert-7.0.0/docs/api/utils.md +196 -0
  26. tablassert-7.0.0/docs/cli.md +114 -0
  27. tablassert-7.0.0/docs/configuration/advanced-example.md +257 -0
  28. tablassert-7.0.0/docs/configuration/graph.md +168 -0
  29. tablassert-7.0.0/docs/configuration/table.md +517 -0
  30. tablassert-7.0.0/docs/examples/tutorial-data.csv +5 -0
  31. tablassert-7.0.0/docs/examples/tutorial-graph.yaml +9 -0
  32. tablassert-7.0.0/docs/examples/tutorial-table.yaml +40 -0
  33. tablassert-7.0.0/docs/index.md +65 -0
  34. tablassert-7.0.0/docs/installation.md +158 -0
  35. tablassert-7.0.0/docs/tutorial.md +192 -0
  36. tablassert-7.0.0/mkdocs.yml +16 -0
  37. tablassert-7.0.0/pyproject.toml +57 -0
  38. tablassert-7.0.0/src/tablassert/__init__.py +0 -0
  39. tablassert-7.0.0/src/tablassert/downloader.py +35 -0
  40. tablassert-7.0.0/src/tablassert/enums.py +521 -0
  41. tablassert-7.0.0/src/tablassert/fullmap.py +167 -0
  42. tablassert-7.0.0/src/tablassert/ingests.py +43 -0
  43. tablassert-7.0.0/src/tablassert/lib.py +602 -0
  44. tablassert-7.0.0/src/tablassert/log.py +15 -0
  45. tablassert-7.0.0/src/tablassert/models.py +131 -0
  46. tablassert-7.0.0/src/tablassert/qc.py +124 -0
  47. tablassert-7.0.0/src/tablassert/utils.py +43 -0
  48. tablassert-7.0.0/uv.lock +2005 -0
@@ -0,0 +1,24 @@
1
+ name: Deploy MkDocs
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ permissions:
7
+ contents: write
8
+ jobs:
9
+ deploy-docs:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v4
14
+ - name: Install uv
15
+ uses: astral-sh/setup-uv@v4
16
+ - name: Build documentation
17
+ run: uv run --group dev mkdocs build
18
+ - name: Deploy to GitHub Pages
19
+ uses: peaceiris/actions-gh-pages@v3
20
+ with:
21
+ github_token: ${{ secrets.GITHUB_TOKEN }}
22
+ publish_dir: ./site
23
+ user_name: "github-actions[bot]"
24
+ user_email: "github-actions[bot]@users.noreply.github.com"
@@ -0,0 +1,19 @@
1
+ name: Deploy to PyPI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ paths: [pyproject.toml]
6
+ jobs:
7
+ publish:
8
+ runs-on: ubuntu-latest
9
+ permissions:
10
+ id-token: write
11
+ steps:
12
+ - name: Checkout repository
13
+ uses: actions/checkout@v4
14
+ - name: Install uv
15
+ uses: astral-sh/setup-uv@v4
16
+ - name: Build package
17
+ run: uv build
18
+ - name: Publish to PyPI
19
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,25 @@
1
+ *.egg-info
2
+ *__pycache__/
3
+ *.logs/
4
+ *.opencode/
5
+ *.ruff_cache/
6
+ *.pytest_cache/
7
+ *plans/
8
+ *CLAUDE.md
9
+ *.claude/
10
+ *.cachassert/
11
+ *.storassert/
12
+ *.logassert/
13
+ *DATALAKE/
14
+ *.onnxassert/
15
+ *.envrc
16
+ *venv/
17
+ *.log
18
+ *.duckdb
19
+ *.ndjson
20
+ *.wal
21
+ *.sh
22
+ *.pyc
23
+ *.tar.gz
24
+ *.whl
25
+ *dist/
@@ -0,0 +1,47 @@
1
+ # Tablassert Release Automation
2
+
3
+ ## What This Is
4
+
5
+ This project defines and automates the release workflow for the Tablassert Python CLI so releases are built consistently with UV and published to PyPI through GitHub Actions. It is for maintainers who currently validate the codebase manually and want a repeatable CI/CD path that matches the repository's real behavior.
6
+
7
+ ## Core Value
8
+
9
+ A tagged release can be built and published to PyPI reliably from GitHub without manual packaging steps.
10
+
11
+ ## Requirements
12
+
13
+ ### Validated
14
+
15
+ (None yet — ship to validate)
16
+
17
+ ### Active
18
+
19
+ - [ ] GitHub Actions workflow builds Tablassert distribution artifacts with UV on release.
20
+ - [ ] GitHub Actions workflow publishes validated artifacts to PyPI.
21
+ - [ ] Release pipeline uses secure authentication and avoids hardcoded credentials.
22
+
23
+ ### Out of Scope
24
+
25
+ - Docker image publishing — currently paused and intentionally excluded.
26
+ - Additional product features unrelated to release automation — this initialization only covers packaging and publishing flow.
27
+
28
+ ## Context
29
+
30
+ The codebase already exists and is manually tested; current repository behavior is treated as source of truth for documentation and release decisions. Recent updates migrated project workflows from Nix to UV, and CLI command usage is now `tablassert`.
31
+
32
+ ## Constraints
33
+
34
+ - **Tooling**: UV-based Python workflow — release build must run via UV tooling to stay consistent with repository standards.
35
+ - **Registry**: PyPI publication target — release outputs must be installable from PyPI.
36
+ - **Security**: CI secrets or trusted publishing only — publishing must not expose credentials in workflow files.
37
+
38
+ ## Key Decisions
39
+
40
+ | Decision | Rationale | Outcome |
41
+ |----------|-----------|---------|
42
+ | Use GitHub Actions for release automation | Repository already uses GitHub Actions and this keeps release flow in existing CI/CD surface | — Pending |
43
+ | Use UV for build steps | UV is now the project's package and environment tool | — Pending |
44
+ | Publish to PyPI from CI | Removes manual release drift and supports reproducible distribution | — Pending |
45
+
46
+ ---
47
+ *Last updated: 2026-03-17 after initialization*
@@ -0,0 +1,73 @@
1
+ # Requirements: Tablassert Release Automation
2
+
3
+ **Defined:** 2026-03-17
4
+ **Core Value:** A tagged release can be built and published to PyPI reliably from GitHub without manual packaging steps.
5
+
6
+ ## v1 Requirements
7
+
8
+ Requirements for initial release automation. Each maps to roadmap phases.
9
+
10
+ ### Triggering and Versioning
11
+
12
+ - [ ] **TRIG-01**: Maintainer can publish only from release/tag events intended for production releases.
13
+ - [ ] **TRIG-02**: Release workflow validates that package version and release/tag metadata are consistent before publish.
14
+
15
+ ### Build and Artifacts
16
+
17
+ - [x] **BLD-01**: Release workflow builds both sdist and wheel artifacts using UV.
18
+ - [ ] **BLD-02**: Build job stores immutable artifacts for downstream jobs in the same workflow run.
19
+ - [ ] **BLD-03**: Release workflow fails if artifact metadata is invalid or artifact checks fail.
20
+
21
+ ### Publish and Security
22
+
23
+ - [x] **PUB-01**: Publish job uploads only artifacts produced by the validated build job.
24
+ - [x] **PUB-02**: Publish job uses PyPI trusted publishing (OIDC) or equivalent secure credentials with no hardcoded secrets in repo files.
25
+ - [ ] **PUB-03**: Publish step is gated by GitHub environment protections for production PyPI publication.
26
+
27
+ ### Operations and Reliability
28
+
29
+ - [ ] **OPS-01**: Workflow prevents duplicate/racing publish attempts for the same version.
30
+ - [ ] **OPS-02**: Maintainers have documented rollback/mitigation guidance for bad production releases.
31
+
32
+ ## v2 Requirements
33
+
34
+ Deferred to future release improvements.
35
+
36
+ ### Release Hardening
37
+
38
+ - **HARD-01**: Maintainer can publish continuously to TestPyPI for pre-production validation.
39
+ - **HARD-02**: Workflow performs post-publish install smoke checks from target index.
40
+ - **HARD-03**: Workflow enforces stronger provenance/attestation policy.
41
+
42
+ ## Out of Scope
43
+
44
+ | Feature | Reason |
45
+ |---------|--------|
46
+ | Docker image publishing | Explicitly paused by maintainers and not required for PyPI package release |
47
+ | Feature development unrelated to release automation | This scope is limited to CI/CD packaging and publication reliability |
48
+
49
+ ## Traceability
50
+
51
+ Which phases cover which requirements. Updated during roadmap creation.
52
+
53
+ | Requirement | Phase | Status |
54
+ |-------------|-------|--------|
55
+ | TRIG-01 | Phase 1 | Pending |
56
+ | TRIG-02 | Phase 1 | Pending |
57
+ | BLD-01 | Phase 1 | Complete |
58
+ | BLD-02 | Phase 2 | Pending |
59
+ | BLD-03 | Phase 2 | Pending |
60
+ | PUB-01 | Phase 3 | Complete |
61
+ | PUB-02 | Phase 3 | Complete |
62
+ | PUB-03 | Phase 3 | Pending |
63
+ | OPS-01 | Phase 2 | Pending |
64
+ | OPS-02 | Phase 4 | Pending |
65
+
66
+ **Coverage:**
67
+ - v1 requirements: 10 total
68
+ - Mapped to phases: 10
69
+ - Unmapped: 0
70
+
71
+ ---
72
+ *Requirements defined: 2026-03-17*
73
+ *Last updated: 2026-03-17 after roadmap creation*
@@ -0,0 +1,66 @@
1
+ # Roadmap: Tablassert Release Automation
2
+
3
+ ## Overview
4
+
5
+ This roadmap delivers a secure, reproducible GitHub Actions release path for the Tablassert CLI: first enforce correct release triggers and deterministic UV builds, then validate and preserve artifacts, then publish through protected PyPI trusted publishing, and finally ensure maintainers can recover safely from bad releases.
6
+
7
+ ## Phases
8
+
9
+ **Phase Numbering:**
10
+ - Integer phases (1, 2, 3): Planned milestone work
11
+ - Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED)
12
+
13
+ - [ ] **Phase 1: Release Preconditions and Deterministic Build** - Production releases only trigger with verified tag/version alignment and UV-built distribution outputs.
14
+ - [ ] **Phase 2: Artifact Validation and Run Reliability** - Built artifacts are validated, preserved for downstream jobs, and protected from duplicate publish races.
15
+ - [ ] **Phase 3: Protected PyPI Publication** - Only validated artifacts are published to PyPI through secure, environment-gated credentials.
16
+ - [ ] **Phase 4: Release Recovery Playbook** - Maintainers can follow documented rollback/mitigation steps for bad production releases.
17
+
18
+ ## Phase Details
19
+
20
+ ### Phase 1: Release Preconditions and Deterministic Build
21
+ **Goal**: Maintainers can trigger production release runs only from intended release events, with version metadata checks and deterministic UV artifact generation in place.
22
+ **Depends on**: Nothing (first phase)
23
+ **Requirements**: TRIG-01, TRIG-02, BLD-01
24
+ **Success Criteria** (what must be TRUE):
25
+ 1. Maintainer can trigger a production release workflow only from approved release/tag events.
26
+ 2. Workflow blocks publication path when tag/release metadata does not match package version.
27
+ 3. Release run produces both wheel and sdist artifacts using UV for the tagged version.
28
+ **Plans**: TBD
29
+
30
+ ### Phase 2: Artifact Validation and Run Reliability
31
+ **Goal**: Artifact integrity is proven before publish by validating build outputs, promoting immutable artifacts across jobs, and preventing racing runs for the same version.
32
+ **Depends on**: Phase 1
33
+ **Requirements**: BLD-02, BLD-03, OPS-01
34
+ **Success Criteria** (what must be TRUE):
35
+ 1. Maintainer can see build artifacts preserved and transferred unchanged between workflow jobs in the same run.
36
+ 2. Workflow fails before publish when artifact metadata/checks are invalid.
37
+ 3. Starting duplicate release runs for the same version does not result in multiple competing publish attempts.
38
+ **Plans**: TBD
39
+
40
+ ### Phase 3: Protected PyPI Publication
41
+ **Goal**: Production publish is a tightly scoped, secure step that uploads only previously validated artifacts through GitHub-protected controls.
42
+ **Depends on**: Phase 2
43
+ **Requirements**: PUB-01, PUB-02, PUB-03
44
+ **Success Criteria** (what must be TRUE):
45
+ 1. Publish job uploads only artifacts produced by the validated build/verify jobs from the same workflow run.
46
+ 2. Maintainer can complete publish without repository-stored static PyPI secrets in workflow files.
47
+ 3. Production publish requires the configured GitHub environment protections before artifact upload proceeds.
48
+ **Plans**: TBD
49
+
50
+ ### Phase 4: Release Recovery Playbook
51
+ **Goal**: Maintainers can quickly mitigate bad releases with clear, repeatable rollback guidance tailored to PyPI release constraints.
52
+ **Depends on**: Phase 3
53
+ **Requirements**: OPS-02
54
+ **Success Criteria** (what must be TRUE):
55
+ 1. Maintainer can find and follow documented mitigation steps when a bad release reaches PyPI.
56
+ 2. Maintainer can execute the documented recovery path (for example yank + corrected release) without ad hoc decision-making.
57
+ **Plans**: TBD
58
+
59
+ ## Progress
60
+
61
+ | Phase | Plans Complete | Status | Completed |
62
+ |-------|----------------|--------|-----------|
63
+ | 1. Release Preconditions and Deterministic Build | 0/TBD | Not started | - |
64
+ | 2. Artifact Validation and Run Reliability | 0/TBD | Not started | - |
65
+ | 3. Protected PyPI Publication | 0/TBD | Not started | - |
66
+ | 4. Release Recovery Playbook | 0/TBD | Not started | - |
@@ -0,0 +1,79 @@
1
+ ---
2
+ gsd_state_version: 1.0
3
+ milestone: v1.0
4
+ milestone_name: milestone
5
+ status: planning
6
+ stopped_at: Completed quick-1-PLAN.md
7
+ last_updated: "2026-03-17T22:02:05.791Z"
8
+ last_activity: 2026-03-17 - Completed quick task 1: Please add a github action that runs UV build and uploads to PiPy
9
+ progress:
10
+ percent: 0
11
+ ---
12
+
13
+ # Project State
14
+
15
+ ## Project Reference
16
+
17
+ See: `.planning/PROJECT.md` (updated 2026-03-17)
18
+
19
+ **Core value:** A tagged release can be built and published to PyPI reliably from GitHub without manual packaging steps.
20
+ **Current focus:** Phase 1 - Release Preconditions and Deterministic Build
21
+
22
+ ## Current Position
23
+
24
+ Phase: 1 of 4 (Release Preconditions and Deterministic Build)
25
+ Plan: 0 of TBD in current phase
26
+ Status: Ready to plan
27
+ Last activity: 2026-03-17 - Completed quick task 1: Please add a github action that runs UV build and uploads to PiPy
28
+
29
+ Progress: [░░░░░░░░░░] 0%
30
+
31
+ ## Performance Metrics
32
+
33
+ **Velocity:**
34
+ - Total plans completed: 0
35
+ - Average duration: 0 min
36
+ - Total execution time: 0.0 hours
37
+
38
+ **By Phase:**
39
+
40
+ | Phase | Plans | Total | Avg/Plan |
41
+ |-------|-------|-------|----------|
42
+ | - | - | - | - |
43
+
44
+ **Recent Trend:**
45
+ - Last 5 plans: -
46
+ - Trend: Stable
47
+ | Phase quick-1-please-add-a-github-action-that-runs-uv- P1 | 1m | 2 tasks | 1 files |
48
+
49
+ ## Accumulated Context
50
+
51
+ ### Decisions
52
+
53
+ Decisions are logged in `.planning/PROJECT.md` Key Decisions table.
54
+ Recent decisions affecting current work:
55
+
56
+ - [Phase 1]: Enforce production release triggers and tag/version validation before publish path.
57
+ - [Phase 3]: Use protected trusted publishing flow for PyPI with environment gating.
58
+ - [Phase quick-1-please-add-a-github-action-that-runs-uv-]: Use artifact promotion so publish uploads exactly what build produced.
59
+ - [Phase quick-1-please-add-a-github-action-that-runs-uv-]: Use PyPI trusted publishing via OIDC with pypi environment gating.
60
+
61
+ ### Pending Todos
62
+
63
+ None yet.
64
+
65
+ ### Blockers/Concerns
66
+
67
+ - Trusted publisher mapping details must be verified against live PyPI project and GitHub environment configuration before first production publish.
68
+
69
+ ### Quick Tasks Completed
70
+
71
+ | # | Description | Date | Commit | Directory |
72
+ |---|-------------|------|--------|-----------|
73
+ | 1 | Please add a github action that runs UV build and uploads to PiPy | 2026-03-17 | 6c32765 | [1-please-add-a-github-action-that-runs-uv-](./quick/1-please-add-a-github-action-that-runs-uv-/) |
74
+
75
+ ## Session Continuity
76
+
77
+ Last session: 2026-03-17T22:02:05.790Z
78
+ Stopped at: Completed quick-1-PLAN.md
79
+ Resume file: None
@@ -0,0 +1,15 @@
1
+ {
2
+ "mode": "yolo",
3
+ "granularity": "coarse",
4
+ "parallelization": true,
5
+ "commit_docs": true,
6
+ "model_profile": "balanced",
7
+ "workflow": {
8
+ "research": true,
9
+ "plan_check": true,
10
+ "verifier": true,
11
+ "nyquist_validation": true,
12
+ "auto_advance": true,
13
+ "_auto_chain_active": true
14
+ }
15
+ }
@@ -0,0 +1,90 @@
1
+ ---
2
+ phase: quick-1-please-add-a-github-action-that-runs-uv-
3
+ plan: 1
4
+ type: execute
5
+ wave: 1
6
+ depends_on: []
7
+ files_modified:
8
+ - .github/workflows/release-pypi.yml
9
+ autonomous: true
10
+ requirements:
11
+ - BLD-01
12
+ - PUB-01
13
+ - PUB-02
14
+ must_haves:
15
+ truths:
16
+ - "Maintainer can run a release workflow that builds wheel and sdist with UV."
17
+ - "Built artifacts are the exact inputs used by the publish job."
18
+ - "PyPI upload is performed by GitHub Actions without hardcoded credentials."
19
+ artifacts:
20
+ - path: ".github/workflows/release-pypi.yml"
21
+ provides: "Release workflow with build and publish jobs"
22
+ contains: "uv build, upload/download-artifact, pypa/gh-action-pypi-publish"
23
+ key_links:
24
+ - from: "build job"
25
+ to: "publish job"
26
+ via: "actions/upload-artifact -> actions/download-artifact"
27
+ pattern: "dist/ artifacts"
28
+ - from: "release tag"
29
+ to: "pyproject version"
30
+ via: "workflow validation step"
31
+ pattern: "tag equals project.version"
32
+ ---
33
+
34
+ <objective>
35
+ Create a single GitHub Actions release workflow that builds distributions with UV and publishes those artifacts to PyPI.
36
+
37
+ Purpose: Remove manual packaging/publishing drift and make tagged releases reproducible and secure.
38
+ Output: `.github/workflows/release-pypi.yml` with guarded release trigger, UV build, artifact handoff, and PyPI publish.
39
+ </objective>
40
+
41
+ <execution_context>
42
+ @/home/skyeav/.config/opencode/get-shit-done/workflows/execute-plan.md
43
+ @/home/skyeav/.config/opencode/get-shit-done/templates/summary.md
44
+ </execution_context>
45
+
46
+ <context>
47
+ @.planning/STATE.md
48
+ @.planning/PROJECT.md
49
+ @.planning/ROADMAP.md
50
+ @pyproject.toml
51
+ @.github/workflows/docs.yml
52
+ </context>
53
+
54
+ <tasks>
55
+
56
+ <task type="auto">
57
+ <name>Task 1: Create UV release build workflow scaffold</name>
58
+ <files>.github/workflows/release-pypi.yml</files>
59
+ <action>Create a new workflow triggered by `release.published` (and optional `workflow_dispatch` for maintainers). Add a `build` job on ubuntu-latest that checks out code, installs UV via `astral-sh/setup-uv`, validates that release tag (strip leading `v`) matches `project.version` in `pyproject.toml`, then runs `uv build` to produce wheel and sdist. Upload `dist/*` as a named artifact for downstream jobs. Do not embed PyPI credentials or tokens in workflow code.</action>
60
+ <verify>
61
+ <automated>uv run python -c "import pathlib, yaml; yaml.safe_load(pathlib.Path('.github/workflows/release-pypi.yml').read_text()); print('workflow yaml valid')"</automated>
62
+ </verify>
63
+ <done>Workflow file exists with build job, UV build step, tag/version guard, and artifact upload step.</done>
64
+ </task>
65
+
66
+ <task type="auto">
67
+ <name>Task 2: Add secure publish job using built artifacts</name>
68
+ <files>.github/workflows/release-pypi.yml</files>
69
+ <action>Add a `publish` job that `needs: build`, has minimal permissions (`id-token: write`, `contents: read`), downloads the exact build artifact, and uploads via `pypa/gh-action-pypi-publish` (trusted publishing/OIDC path). Bind the job to a `pypi` environment for protection rules. Ensure publish only runs on successful build and never rebuilds artifacts in this job.</action>
70
+ <verify>
71
+ <automated>python -c "import pathlib,re; t=pathlib.Path('.github/workflows/release-pypi.yml').read_text(); assert 'needs: build' in t and 'id-token: write' in t and 'gh-action-pypi-publish' in t; print('publish wiring present')"</automated>
72
+ </verify>
73
+ <done>Publish job uses downloaded build artifacts and trusted publishing permissions, with no static credential usage in workflow file.</done>
74
+ </task>
75
+
76
+ </tasks>
77
+
78
+ <verification>
79
+ Run a local packaging smoke check and workflow lint-level checks before merge.
80
+ </verification>
81
+
82
+ <success_criteria>
83
+ 1. Tagged release workflow builds both `.whl` and `.tar.gz` with UV.
84
+ 2. Publish job consumes artifacts from the build job and uploads to PyPI via `gh-action-pypi-publish`.
85
+ 3. Workflow file contains no hardcoded PyPI username/password/token secrets.
86
+ </success_criteria>
87
+
88
+ <output>
89
+ After completion, create `.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-SUMMARY.md`
90
+ </output>
@@ -0,0 +1,80 @@
1
+ ---
2
+ phase: quick-1-please-add-a-github-action-that-runs-uv-
3
+ plan: 1
4
+ subsystem: infra
5
+ tags: [github-actions, uv, pypi, oidc, release]
6
+ requires: []
7
+ provides:
8
+ - Release workflow building wheel and sdist with uv
9
+ - Artifact handoff from build to publish job
10
+ - Trusted publishing path to PyPI with OIDC permissions
11
+ affects: [release, packaging, publishing]
12
+ tech-stack:
13
+ added: []
14
+ patterns: [release-tag-version-guard, artifact-promotion, trusted-publishing]
15
+ key-files:
16
+ created: [.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-SUMMARY.md]
17
+ modified: [.github/workflows/release-pypi.yml]
18
+ key-decisions:
19
+ - "Use release artifact promotion (upload/download-artifact) so publish never rebuilds outputs"
20
+ - "Use PyPI trusted publishing (id-token + pypi environment) instead of static credentials"
21
+ patterns-established:
22
+ - "Release workflow validates tag-to-version parity before building artifacts"
23
+ - "Publish job consumes build artifacts via needs + download-artifact"
24
+ requirements-completed: [BLD-01, PUB-01, PUB-02]
25
+ duration: 1m
26
+ completed: 2026-03-17
27
+ ---
28
+
29
+ # Phase [quick-1] Plan [1]: Release Workflow Summary
30
+
31
+ **GitHub Actions now builds Tablassert wheel/sdist with uv and publishes the exact built artifacts to PyPI using OIDC trusted publishing.**
32
+
33
+ ## Performance
34
+
35
+ - **Duration:** 1m
36
+ - **Started:** 2026-03-17T14:59:57Z
37
+ - **Completed:** 2026-03-17T15:01:11Z
38
+ - **Tasks:** 2
39
+ - **Files modified:** 1
40
+
41
+ ## Accomplishments
42
+ - Added `.github/workflows/release-pypi.yml` with `release.published` and optional `workflow_dispatch` triggers.
43
+ - Implemented build job with `astral-sh/setup-uv`, tag/version validation against `pyproject.toml`, `uv build`, and artifact upload.
44
+ - Added publish job with `needs: build`, `id-token: write`, `contents: read`, `environment: pypi`, artifact download, and `pypa/gh-action-pypi-publish`.
45
+
46
+ ## Task Commits
47
+
48
+ 1. **Task 1: Create UV release build workflow scaffold** - `77fba59` (feat)
49
+ 2. **Task 2: Add secure publish job using built artifacts** - `d4fbfec` (feat)
50
+
51
+ ## Files Created/Modified
52
+ - `.github/workflows/release-pypi.yml` - Release workflow with uv build, guarded tag/version check, artifact handoff, and trusted PyPI publish.
53
+ - `.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-SUMMARY.md` - Execution summary and task traceability.
54
+
55
+ ## Decisions Made
56
+ - Use a manual `workflow_dispatch` input for `release_tag` so maintainers can rerun releases with explicit version context.
57
+ - Keep build and publish strictly separated with artifact promotion to guarantee published files are exact build outputs.
58
+
59
+ ## Deviations from Plan
60
+
61
+ None - plan executed exactly as written.
62
+
63
+ ## Issues Encountered
64
+
65
+ None.
66
+
67
+ ## User Setup Required
68
+
69
+ Configure GitHub environment `pypi` and PyPI trusted publisher mapping before first production release.
70
+
71
+ ## Next Phase Readiness
72
+
73
+ - Release workflow is ready for repository-level environment/protection configuration and first dry-run tag release.
74
+ - Trusted publisher mapping in PyPI remains the only external dependency called out in project state.
75
+
76
+ ## Self-Check: PASSED
77
+
78
+ - FOUND: `.planning/quick/1-please-add-a-github-action-that-runs-uv-/1-SUMMARY.md`
79
+ - FOUND: `77fba59`
80
+ - FOUND: `d4fbfec`