You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- PyPI metadata now uses Hatchling dynamic versioning, with tests enforcing the single-source version contract and the required discoverability fields.
10
+
- Source and wheel artifacts now include the release files we need, and the package test suite verifies the built outputs when they exist.
11
+
- README installation instructions now lead with PyPI commands, and the built artifacts pass `twine check` with the new long-description content.
12
+
- A gated venv-based harness now proves the built wheel installs cleanly without optional dependencies and keeps the install tests opt-in for normal runs.
13
+
- The built wheel now installs all declared extras in isolated venvs, and the Qdrant wrapper surface resolves from the `corpulse[qdrant]` extra.
14
+
- Optional dependency failures now tell users exactly what to install, and the full phase verification suite passes against the rebuilt wheel.
15
+
- Exact post-publish PyPI smoke checks for `corpulse` and `corpulse[qdrant]`, with tests pinning the release checklist wording
16
+
17
+
**Known deferred items at close:** 3 old quick-task placeholders already tracked in `.planning/STATE.md`.
18
+
19
+
---
20
+
3
21
## v1.8 Workload Observability and Replay Feasibility (Shipped: 2026-05-05)
Copy file name to clipboardExpand all lines: .planning/PROJECT.md
+33-15Lines changed: 33 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,16 +8,22 @@ A Python library that tracks and analyzes RAG corpus health for RAG teams. It de
8
8
9
9
RAG teams can point corpulse at their vector DB and immediately understand what's wrong with their corpus without manual audits.
10
10
11
-
## Completed Milestone: v1.8 Workload Observability and Replay Feasibility
11
+
## Completed Milestone: v1.9 PyPI Distribution and Release Readiness
12
12
13
-
**Goal:**Research and, where feasible, implement a first-class workload observability layer that extends corpulse from corpus health into RAG request traces, serving diagnostics, session analytics, and replay-ready exports.
13
+
**Goal:**Make corpulse installable from PyPI with verified optional extras and a repeatable release path.
14
14
15
15
**Target features:**
16
-
- Feasibility research for RAG workload trace schema, storage implications, and replay boundaries
17
-
- Structured `log_rag_request()` / `alog_rag_request()` APIs with sessions, prompt components, token counts, timings, errors, and content hashes
18
-
- JSONL import/export for privacy-preserving workload traces
19
-
- Workload, latency, and session reports that summarize traffic shape and serving behavior
20
-
- Dependency-free callable replay proof on top of captured/imported traces; endpoint adapters and benchmark export remain future work
16
+
- PyPI-ready package metadata, README rendering, package contents, license inclusion, and version consistency
17
+
- Verified install surfaces for `pip install corpulse`, `pip install corpulse[qdrant]`, and existing optional extras
18
+
- GitHub Actions release automation using PyPI Trusted Publishing for TestPyPI and PyPI
19
+
- Documentation updated from GitHub install syntax to PyPI install syntax
None. Start the next milestone with `$gsd-new-milestone`.
25
+
26
+
The next milestone should start from fresh requirements. Candidate directions include release-note maturity, signed artifacts, PyPI adoption reporting, or the next integration adapter.
21
27
22
28
## Requirements
23
29
@@ -67,12 +73,16 @@ RAG teams can point corpulse at their vector DB and immediately understand what'
67
73
- ✓ Workload and serving reports over captured/imported traces — Phase 30
- ✓ PyPI-ready package metadata, README rendering, package contents, license inclusion, and version consistency — v1.9
77
+
- ✓ Verified install surfaces for `pip install corpulse`, `pip install corpulse[qdrant]`, and existing optional extras — v1.9
78
+
- ✓ GitHub Actions release automation using PyPI Trusted Publishing for TestPyPI and PyPI — v1.9
79
+
- ✓ PyPI-first installation documentation and release checklist with post-publish smoke checks — v1.9
70
80
71
81
### Active
72
82
73
83
<!-- Current scope. Building toward these. -->
74
84
75
-
-[ ]Define the next milestone with fresh requirements and roadmap.
85
+
(None. Define fresh requirements with `$gsd-new-milestone`.)
76
86
77
87
### Out of Scope
78
88
@@ -83,7 +93,6 @@ RAG teams can point corpulse at their vector DB and immediately understand what'
83
93
- LangChain/LlamaIndex plugin — future milestone after wrapper pattern is proven
84
94
- Standalone audit mode (crawl vector DB without runtime) — future milestone
85
95
- CLI tool — future milestone
86
-
- PyPI publishing — distributing via GitHub only for now
87
96
- Web dashboard / UI — keep it library-first
88
97
-**Faithfulness / Hallucination Rate** — requires LLM-as-judge to verify generated answer against retrieved context; not measurable from retrieval logs alone; use Ragas or TruLens for generation-layer evaluation
89
98
-**Context Precision** — requires ground-truth relevance labels per query; corpulse has no label store and no annotation workflow; belongs in offline eval frameworks
@@ -92,17 +101,23 @@ RAG teams can point corpulse at their vector DB and immediately understand what'
92
101
93
102
## Current State
94
103
104
+
corpulse completed milestone `v1.9`, moving distribution readiness from GitHub-only installs to a PyPI-first release posture. The package metadata, source distribution, wheel contents, optional extras, release workflow, Trusted Publishing documentation, and install docs are now covered by static tests, build checks, and milestone verification artifacts.
105
+
106
+
The release workflow builds once, uploads the tested `dist/*` artifacts, publishes to TestPyPI on manual dispatch, and publishes to PyPI only from `v*` tags through OIDC Trusted Publishing. The production `pypi` GitHub environment approval gate and the live TestPyPI/PyPI smoke checks remain explicit manual release-time actions documented in `.github/RELEASE_CHECKLIST.md`.
107
+
95
108
corpulse completed milestone `v1.7`, adding a shared generic wrapping engine and migrating the Qdrant compatibility wrappers onto that architecture. The library now supports a documented advanced adapter path for future integrations while preserving lazy optional dependency behavior and Qdrant compatibility.
96
109
97
110
The shipped `v1.8` milestone was seeded by `.planning/research/RAGPULSE-COMPARISON-FEATURES.md`, which found that RAGPulse is most useful as a workload trace and replay reference rather than as a corpus-health competitor. corpulse kept its corpus-health core while adding an optional workload/serving layer for request composition, traffic shape, latency, sessions, and replayable exports.
98
111
99
112
Phase 27 completed the feasibility decision record and locked the MVP direction on an append-only request-trace schema. Phases 28-31 delivered trace capture, JSONL import/export, workload and serving reports, and session analytics with repeated-context reuse signals. Phase 32 validated that callable replay is feasible and delivered dependency-free sync/async replay helpers. v1.8 shipped on 2026-05-05. It did not add a built-in OpenAI endpoint client; richer benchmark export and endpoint adapters remain future work.
100
113
114
+
The v1.9 milestone moved distribution from GitHub-only to PyPI-ready. `pyproject.toml` uses Hatchling dynamic versioning, optional extras are verified from built artifacts, README is PyPI-first, and `.github/workflows/release.yml` implements the Trusted Publishing release path.
115
+
101
116
## Next Milestone Goals
102
117
103
-
-Start the next milestone with fresh requirements instead of extending v1.8 in place.
104
-
-Keep future replay optional and dependency-light; avoid turning corpulse into a full evaluation framework or dashboard.
105
-
- Consider future endpoint adapters and benchmark export only after the callable replay proof has real adopter feedback.
118
+
-Define fresh requirements before starting implementation.
119
+
-Consider release maturity: release notes, signed artifacts, and PyPI adoption reporting.
120
+
- Consider the next integration adapter now that generic wrapping and distribution readiness are in place.
@@ -184,7 +199,7 @@ Make the persistence layer pluggable so corpulse can use PostgreSQL in productio
184
199
185
200
-**Tech stack**: Python, SQLite for local persistence, PostgreSQL as the production backend target
186
201
-**Dependencies**: numpy and scikit-learn are hard dependencies; pandas and tabulate remain optional; psycopg and asyncpg are optional extras
187
-
-**Distribution**: GitHub-only for v1.x; no PyPI publishing yet
202
+
-**Distribution**: v1.9 targets PyPI publication with GitHub source install kept as a fallback path
188
203
-**Vector DB**: Qdrant remains the first wrapper target
189
204
-**Compatibility**: Python 3.10+
190
205
-**Backwards compat**: `Corpulse()` with no args must still work exactly as before
@@ -197,12 +212,14 @@ Make the persistence layer pluggable so corpulse can use PostgreSQL in productio
197
212
| Decision | Rationale | Outcome |
198
213
|----------|-----------|---------|
199
214
| Qdrant as first wrapper | Growing production adoption in RAG pipelines; good Python client | Shipped |
200
-
| GitHub-only distribution | Keep overhead low for v1; PyPI later when stable|Pending|
215
+
| GitHub-only distribution | Keep overhead low before the first public package release|Superseded by v1.9|
201
216
| Wrapper-first over audit-first | Query-dependent features are the most actionable; wrapper enables them automatically | Shipped |
202
217
| Keep manual API alongside wrapper | Existing API still useful for custom integrations; wrapper is additive | Shipped |
203
218
| Pluggable backend interface | Service repo needs Postgres; library should support multiple backends | Shipped in v1.1 |
204
219
| Explicit backend config over connection strings | More flexible and clearer than implicit string configuration | Shipped in v1.1 |
205
220
| Narrow async facade for v1.1 | Async service integration was needed now; full async analytics parity was not yet justified | Shipped in v1.1 |
221
+
| PyPI Trusted Publishing over API tokens | Avoid long-lived publishing credentials and keep release automation auditable | Shipped in v1.9 |
222
+
| PyPI-first install docs with GitHub source fallback | PyPI is the user path; source install remains useful for unreleased fixes | Shipped in v1.9 |
206
223
| Evidence-gated requirement closure | Milestone claims should match recorded verification, not just landed code | Shipped in v1.1 |
207
224
| Structured-payload async reports | Avoids coupling `AsyncCorpulse` to stdout and keeps output consumable by services/tests; sync `report`/`cleanup_report` become a thin formatter over the same payload | Shipped in Phase 12 |
208
225
| Pandas stays optional on async path | Keeps install footprint small for async service users who don't need DataFrames; mirrors sync behavior | Shipped in Phase 12 |
@@ -214,6 +231,7 @@ Make the persistence layer pluggable so corpulse can use PostgreSQL in productio
214
231
| Qdrant remains first-class while the generic API serves advanced adapter authors | Keeps the common path simple for existing users while making future integrations cheaper to build | Shipped in v1.7 |
215
232
| Workload observability is the v1.8 priority over a second vector DB adapter | RAGPulse comparison showed the bigger product gap is production request behavior, not another retrieval-client wrapper | Shipped through Phase 31 |
216
233
| Callable replay over built-in endpoint replay | Current traces do not guarantee canonical messages, raw component content, tool payloads, streamed chunks, or response bodies; user callables can bridge private endpoint-specific payloads without new core dependencies | Shipped in Phase 32 |
234
+
| PyPI Trusted Publishing over long-lived release tokens | OIDC avoids storing a long-lived PyPI API token in GitHub secrets and gives PyPI a verifiable source repository link | Pending in v1.9 |
217
235
218
236
## Evolution
219
237
@@ -233,4 +251,4 @@ This document evolves at phase transitions and milestone boundaries.
233
251
4. Update Context with current state
234
252
235
253
---
236
-
*Last updated: 2026-05-05 after Phase 32 execution*
254
+
*Last updated: 2026-05-15 after starting milestone v1.9*
0 commit comments