Back-merge release/0.3.0 into develop - #20
Merged
Conversation
## Summary Complete implementation of **whet** — a multi-platform CLI tool that installs expert skills into AI coding agents (Claude Code, Google Antigravity, Cursor, GitHub Copilot). This PR encompasses all 6 development phases, transforming the initial AI/CV Claude Skills framework into a publishable PyPI package. ## Content Inventory - **30 Skills** — CV/ML, infrastructure, experiment tracking, code quality - **6 Agents** — Expert Coder, ML Engineer, DevOps/Infra, Data Engineer, Code Review, Test Engineer - **6 Archetypes** — pytorch-training, cv-inference, data-pipeline, library-package, model-zoo, research-notebook - **4 Adapters** — Claude Code, Google Antigravity, Cursor, GitHub Copilot ## Development Phases 1. **Foundation** — YAML frontmatter for SKILL.md, skill.toml metadata, pixi→uv migration, dynamic test discovery 2. **CLI + Adapters** — Typer CLI (`add`/`remove`/`list`/`search`/`info`/`install`), multi-platform adapters 3. **Gap Filling Wave 1** — FastAPI, AWS SageMaker, Hugging Face skills + DevOps/Infra and Data Engineer agents 4. **Settings Engine + Doctor** — `settings generate/apply/diff` with merge support, 10 health checks 5. **Scaffolding** — `whet init` with template rendering, 2 archetype templates populated 6. **Distribution + Polish** — `whet update`, Gradio/Kubernetes skills, release workflow, repo rename ## Infrastructure Changes - Renamed repo from `ai-cv-claude-skills` → `whet` (46 references updated across 39 files) - CI workflows updated for `main`/`develop` branching model - Tag-triggered release workflow: PyPI trusted publishing (OIDC) + GitHub Releases - `justfile` task runner replacing pixi tasks - `uv` for dependency/environment management ## Test Results - **203 tests passing** — skills, agents, archetypes, workflows, integration - Ruff clean (lint + format) - MyPy strict clean - Package builds: `whet-0.1.0-py3-none-any.whl` ## Post-Merge Steps 1. Set `develop` as default branch 2. Create GitHub environment `pypi` in repo Settings 3. Add trusted publisher on PyPI (owner: `ortizeg`, repo: `whet`, workflow: `release.yml`, env: `pypi`) 4. Tag and release: `git tag v0.1.0 && git push --tags` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Bump version to 0.3.0 and add a CHANGELOG. Version note: PyPI already carries 0.2.1 while both main and develop declared 0.1.0, and the repository has no git tags — 0.2.1 was published outside the tag-triggered workflow. Releasing from 0.1.0 would build a package older than what is already live, so this bump goes past it. 0.3.0 rather than 0.2.2 because the release is breaking: the agents concept and the --agents-only/--skills-only flags are removed, two skills are deleted, one is renamed, and whet init changes behaviour. Below 1.0.0, breaking changes ship in a minor bump. 536 tests pass; ruff, format, mypy --strict, and mkdocs --strict clean. uv build produces whet-0.3.0 wheel and sdist. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Caught by installing the built wheel into a clean venv and running the CLI outside any checkout, which is what a user actually does. `whet list` printed "No skills found" and `whet doctor` reported a missing skills directory. Two causes: - [tool.hatch.build.targets.wheel] packaged only src/whet. The bundled content was listed for the sdist but never the wheel, so the published artifact was the CLI with none of the product: 36 files, zero SKILL.md. - skills_dir, archetypes_dir, and the settings templates resolved via Path(__file__).parents[3], which is the repository root in a checkout but points outside site-packages once installed. Fixes: - Force-include skills/, archetypes/, and settings/ into the wheel under whet/_data/. The wheel goes from 36 files to 430 — 32 SKILL.md, 155 reference files, 125 archetype template files. - Add whet.core.paths.bundled_dir(), which prefers the packaged copy and falls back to the repo layout so a source checkout still works with no build step. - Drop the stale agents/ entry from the sdist include list. Verified end to end: installing the wheel in a clean venv and running outside the repo now lists 32 skills, passes doctor, and `whet init cv-inference-service` scaffolds a project with 8 skills and 43 reference files installed. Adds tests/test_packaging.py so this cannot ship broken again, including a check that packaging never references a directory that no longer exists. 541 tests pass; ruff, format, mypy --strict, mkdocs --strict clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
main carried a squash commit (7ee1eaa, 'Release v0.1.0') that was never merged back into develop, so the same files were added independently on both sides and git saw ~100 add/add conflicts. Resolved with -s ours: main's content is a strict subset of this branch, and every file present only on main is a reviewed deletion — the agents/ tree and its docs (removed in #7), skills/dvc, and skills/pydantic-strict (renamed to pydantic). Nothing unique is discarded. Recording main as a parent reconciles the histories so future develop -> main merges are clean.
Branch protection on main requires a status check named 'docs', but nothing could ever produce it: - docs.yml only triggered on push to main, so it never ran on a pull request - its jobs were named build/deploy, so even when it did run it reported 'build' and 'deploy' — never 'docs' The result was circular: merging to main required a check that only a push to main could produce. PR #19 sat with three green checks and a fourth that was not pending but simply absent. - Rename the build job to `docs` so it satisfies the required context. - Add a pull_request trigger for main and develop. - Gate artifact upload and the deploy job to pushes on main, so PRs build the docs without touching GitHub Pages. - Build with --strict on PRs. This is the check that caught the dangling agent-page links rather than letting them ship. - Key concurrency by ref so parallel PR doc builds do not queue behind one another. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Companion to #19. Merge this after #19 lands.
Why this is required, not housekeeping
developis currently missing four things that only exist on the release branch — and one of them is a live bug:force-include,core/paths.py)uv tool install whetwould produce a CLI that reports "No skills found".tests/test_packaging.py0.1.0, behind the published 0.2.1.CHANGELOG.mdIt also fixes the divergence permanently
This is precisely the mistake that caused #19's ~100 add/add conflicts:
mainreceived a squash commit (7ee1eaa, "Release v0.1.0") that was never merged back into develop, so both branches recreated the same files independently from their shared ancestor.Skipping this back-merge would repeat that exactly —
mainwould hold the release commits,developwould not, and the next release would conflict all over again. Merging here brings7ee1eaainto develop's ancestry so all three branches finally share history.Verification
Merged cleanly — no conflicts.
uv run pytest tests/→ 541 passedmypy --strict,mkdocs build --strict→ cleanagents/,skills/dvc,skills/pydantic-strict)🤖 Generated with Claude Code