Files
can-you-assist/workplans/CYA-WP-0004-dev-install-and-release-packaging.md

236 lines
9.3 KiB
Markdown

---
id: CYA-WP-0004
type: workplan
title: "Developer Installation from Git and Release Distribution Packaging"
domain: capabilities
repo: can-you-assist
status: done
owner: grok
topic_slug: foerster-capabilities
created: "2026-05-27"
updated: "2026-05-27"
state_hub_workstream_id: "7913b919-d76b-4374-bdc6-0330fe941666"
---
# CYA-WP-0004: Developer Installation from Git and Release Distribution Packaging
## Goal
Enable two important installation and distribution experiences for `can-you-assist` (`cya`):
1. **Easy installation from development head**
Anyone (especially the primary user and contributors) can install the absolute latest code directly from the git repository with a simple, reliable command, including all current features and fixes.
2. **Repeatable release packaging**
Provide a clear, low-friction process to cut versions and produce installable distribution packages (sdist + wheel) that others can use via `pip install` without needing to clone the repository or understand the development setup.
This workplan addresses the current gap where only `pip install -e .` (editable development install) is supported, and there is no documented or automated path for either "bleeding edge" installs or proper releases.
## Background & References
- Current packaging is minimal (`pyproject.toml` using setuptools with a static `version = "0.1.0"`).
- Editable development install (`pip install -e .`) works and is documented in README and AGENTS.md.
- No support yet for `pip install git+https://...` in a robust way.
- No versioning strategy, no release process, no `build` frontend usage, and no distribution artifacts.
- The project has matured through CYA-WP-0001 (MVP), 0002 (Memory), and 0003 (Contextual Activation + Retrospection), making proper distribution increasingly important.
- AGENTS.md and README currently only document the editable development path.
## Non-Goals (for this slice)
- Publishing packages to PyPI (the output of this workplan should be usable with a future PyPI publication step).
- Complex multi-platform CI matrix or release automation beyond a solid local + basic CI foundation.
- Supporting ancient Python versions or exotic packaging backends.
- Creating a full "release engineering" platform (this is scoped to getting reliable dev-head + released packages working).
## Task Breakdown
### T01 — Audit current packaging state and define requirements
```task
id: CYA-WP-0004-T01
status: done
priority: high
state_hub_task_id: "018d0c4c-948e-4cd6-9a50-92a83725df18"
started: "2026-05-27 ralph iter 1"
completed: "2026-05-27"
```
**Done** — produced `docs/packaging-audit-and-requirements.md`.
- Full audit of `pyproject.toml` (static version in two places, minimal config, no extras, no modern build frontend).
- Documented gaps for both "install from dev head" and "release packaging".
- Clear requirements defined.
- Versioning strategy options analyzed (recommended: `setuptools_scm` hybrid for good dev-head versions + clean releases).
**Acceptance criteria met**:
- Gap analysis + requirements document created.
- Versioning options documented for decision in T02.
### T02 — Establish a sustainable versioning strategy
```task
id: CYA-WP-0004-T02
status: done
priority: high
state_hub_task_id: "0728680e-f9a9-4229-afcc-6c4d42d2e447"
started: "2026-05-27 ralph iter 2"
completed: "2026-05-27"
```
**Done** — implemented `setuptools_scm` hybrid approach.
- `pyproject.toml` now uses dynamic versioning with `setuptools_scm`.
- Added `src/cya/_version.py` (generated, gitignored).
- Updated `src/cya/__init__.py` to import `__version__` from the generated file (with fallback).
- Added `_version.py` to `.gitignore`.
- Dev-head installs will now produce versions like `0.2.0.devN+g<hash>`.
- Releases will be clean (once we tag).
**Acceptance criteria met**:
- Versioning is now dynamic and informative for dev-head installs.
- Clean path for future release versions.
### T03 — Make reliable installation from development head possible
```task
id: CYA-WP-0004-T03
status: done
priority: high
state_hub_task_id: "14e085dd-847a-4678-a1e4-abe5e3c369aa"
started: "2026-05-27 ralph iter 3"
completed: "2026-05-27"
```
**Done.**
- Added `[project.optional-dependencies]` `dev` and `test` in `pyproject.toml`.
- Created a simple but effective `Makefile` with:
- `make dev-install` (recommended one-command dev-head install)
- `make test`, `make dist`, `make version`, `make clean`
- Heavily updated README.md "Installation" section with clear instructions for:
- Local dev-head install via Makefile
- Direct `pip install "git+..."` from GitHub
- Future released packages
- Updated AGENTS.md Commands section to reference the new `make dev-install` flow.
- With `setuptools_scm` from T02, git-based installs now produce proper development versions.
**Acceptance criteria met**:
- Primary user (and contributors) now have a simple, documented one-command path to install the absolute latest code from the development head.
- The installed version will clearly show it is a development version.
### T04 — Enable clean building of distribution packages
```task
id: CYA-WP-0004-T04
status: done
priority: high
state_hub_task_id: "d49a3362-865f-4397-b127-372a2aa2c4a2"
started: "2026-05-27 ralph iter 4"
completed: "2026-05-27"
```
**Done.**
- Created `MANIFEST.in` for proper sdist inclusion.
- Improved `pyproject.toml` (include-package-data, license-files under setuptools, package-data).
- `python -m build` successfully produces clean sdist + wheel.
- Verified in isolated venv: the wheel installs cleanly and `cya --version` works (shows proper dev version from setuptools_scm).
**Acceptance criteria met**:
- Clean, usable distribution packages can now be built.
- They install and run correctly in fresh environments.
### T05 — Create a lightweight release process
```task
id: CYA-WP-0004-T05
status: done
priority: medium
state_hub_task_id: "c97acc58-14d7-47b9-9ab3-936ab1eb92df"
started: "2026-05-27 ralph iter 5"
completed: "2026-05-27"
```
**Done.**
- Created `docs/release-process.md` — a clear, step-by-step, low-risk release checklist covering version decision → tests → build → tagging.
- Enhanced the `Makefile` with two very useful release targets:
- `make release-prep` (runs clean + test + dist in one go)
- `make check-dist` (smoke-tests the built wheel in a fresh venv)
- The process is fully reproducible and documented.
**Acceptance criteria met**:
- A maintainer now has a written checklist + Makefile helpers that make cutting a release feel safe and boring.
- The process produces ready-to-upload artifacts.
### T06 — Update documentation for both installation methods
```task
id: CYA-WP-0004-T06
status: done
priority: high
state_hub_task_id: "5a4dcdf8-7b0f-45cb-8eb1-46b0d60f8420"
started: "2026-05-27 ralph iter 6 (final docs)"
completed: "2026-05-27"
```
**Done.**
- Significantly polished the Installation section in README.md to clearly distinguish:
- Development / bleeding-edge installs (via `make dev-install` or direct `git+`)
- Future path for released versions
- Added references to `docs/release-process.md`
- Updated AGENTS.md "Commands" section with packaging-related Makefile targets and the current workplan reference.
**Acceptance criteria met**:
- Both installation methods are now clearly documented and easy to discover in the README.
### T07 — Register packaging as a first-class concern
```task
id: CYA-WP-0004-T07
status: done
priority: medium
state_hub_task_id: "f4ea08ab-219e-4e7f-86b9-a05e27b8a72c"
started: "2026-05-27 ralph iter 7 (final)"
completed: "2026-05-27"
```
**Done.**
- `make check-dist` already exists and is promoted as the packaging verification step.
- Added a clear "Debt & Future Work (Registered)" section in the workplan itself, explicitly listing PyPI publishing, automated releases, package signing, CI gates, and multi-Python testing as tracked items in State Hub.
- Packaging is now treated as a first-class, owned concern with documented ownership and a clear path forward.
**Acceptance criteria met**:
- Packaging is no longer an afterthought — it has documented ownership, verification tooling, and registered future work in State Hub.
## Dependencies & Cross-Repo Coordination
- No hard external dependencies on other tracked repositories for the core work.
- Future PyPI publication may involve coordination with whatever hosting or automation is chosen later.
- State Hub will be used to track the workplan and any packaging-related decisions or debt.
## Debt & Future Work (Registered)
This workplan explicitly registers the following as first-class technical debt / extension points:
- PyPI publishing workflow
- Automated releases via CI on tags
- Package signing
- Adding `make check-dist` (or equivalent) as a required CI gate
- Multi-Python version testing for distribution packages
These are now tracked in State Hub via this workplan.
## Completion
**Status: done** — all tasks completed via ralph loop.
This workplan successfully delivered reliable dev-head installation, dynamic versioning, clean distribution package building, a lightweight release process, and clear documentation for both use cases.
Packaging is now a first-class, owned concern in the project with a documented path forward.
---
**Status note**: CYA-WP-0004 is complete. The project has moved from "only editable install" to having a full, practical story for both bleeding-edge development installs and future proper releases.