Update publish docs -- sdist is now slim, publish both artifacts
This commit is contained in:
parent
950f05a62f
commit
3ec422c9e1
106
CLAUDE.md
Normal file
106
CLAUDE.md
Normal 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)
|
||||||
Loading…
x
Reference in New Issue
Block a user