Update publish docs -- sdist is now slim, publish both artifacts

This commit is contained in:
Ryan Malloy 2026-03-05 15:08:40 -07:00
parent 950f05a62f
commit 3ec422c9e1

106
CLAUDE.md Normal file
View File

@ -0,0 +1,106 @@
# mcltspice
MCP server for LTspice circuit simulation automation.
## Project Layout
```
src/mcltspice/ # Package source (server.py is the FastMCP entry point)
tests/ # pytest suite (asyncio_mode=auto)
docs/ # Starlight docs site (Astro + Docker)
```
## Development
```bash
uv run pytest tests/ -m "not integration" # Unit tests (no LTspice needed)
uv run pytest tests/ -m integration # Integration tests (needs Wine + LTspice)
uv run ruff check src/ tests/ # Lint
uv run mcltspice # Run MCP server locally
```
## Versioning
Date-based: `YYYY.MM.DD` with `.N` suffix for same-day patches (e.g. `2026.02.14.1`).
Bump in `pyproject.toml` before publishing.
## Publishing to PyPI
```bash
rm -rf dist/ && uv build
uv publish --token "$(python3 -c "
import configparser; c=configparser.ConfigParser()
c.read('$HOME/.pypirc'); print(c['pypi']['password'])
")"
```
The sdist is kept slim (~100KB) via `[tool.hatch.build.targets.sdist]` include list in pyproject.toml.
Verify: `uv pip install --dry-run --refresh mcltspice==<version>`
## Production Deployment
### Git Remotes
| Remote | URL | Purpose |
|----------|--------------------------------------------------|------------------|
| `origin` | `git@git.supported.systems:warehack.ing/mcltspice.git` | Private (primary) |
| `mcp` | `git@git.supported.systems:MCP/mcltspice.git` | Org mirror |
Push to both: `git push origin main && git push mcp main`
### Docs Site (mcltspice.warehack.ing)
The production docs site runs as a Docker container behind caddy-docker-proxy on a remote server.
**Server access:**
```bash
ssh -A warehack-ing@mcltspice.warehack.ing
```
**Project location on server:** `~/mcltspice/`
**Deploy steps:**
```bash
ssh -A warehack-ing@mcltspice.warehack.ing
cd mcltspice
git pull
cd docs
make prod
```
`make prod` builds the Astro static site inside Docker, serves it via an internal Caddy on `:8080`, and the external caddy-docker-proxy handles TLS at `mcltspice.warehack.ing`.
**Server .env** (already configured, don't change):
```
COMPOSE_PROJECT_NAME=mcltspice-docs
MODE=prod
SITE_DOMAIN=mcltspice.warehack.ing
```
**One-liner from local machine:**
```bash
ssh -A warehack-ing@mcltspice.warehack.ing "cd mcltspice && git pull && cd docs && make prod"
```
### Full Release Checklist
1. Bump version in `pyproject.toml`
2. Commit and push to both remotes
3. Build and publish to PyPI
4. SSH to server, pull, `make prod`
5. Verify: `curl -sI https://mcltspice.warehack.ing/`
## Data Shape Convention
`raw_parser.py` returns `data` with shape `(n_vars, n_points)` -- each row is one variable's full time series. Index as `data[var_idx]` (row), never `data[:, var_idx]` (column).
## svg_plot.py
Pure SVG generation, no matplotlib. Key internals:
- `_render_subplot()` draws grid, axes, labels, and one data path
- `_build_path_d()` maps data arrays to SVG path coordinates
- `plot_timeseries_multi()` overlays multiple traces using `_render_subplot` for the first trace + raw `<path>` elements for the rest
- `_OVERLAY_COLORS` is an 8-color palette; `_render_legend()` draws the legend box
- `from __future__ import annotations` is used here (safe -- no FastMCP tool definitions in this file)