./setup.sh # venv, editable install, tools
.venv/bin/pytest
python -m build # sdist + wheel; releases publish to PyPI from GitHub Actions (trusted publishing)CI runs the tests and builds a demo report on every push. Real raw-data files and *_analysis/ folders are
git-ignored; never commit them.
site/ is the landing page at https://gnomancer.com, served as a Cloudflare Worker with static assets (wrangler.toml).
Deploy with npx wrangler deploy (Node 22+, wrangler login once). It is static: no cookies, no analytics.
site/demo/ is the walkthrough at https://gnomancer.com/demo/. It contains only the synthetic
sample from examples/make_demo.py, a generated report, a real MCP lookup result, and a captioned
28-second walkthrough video. No personal DNA file is used. The lightweight run deliberately skips
haplogroup callers, ClinVar, and PharmCAT; the artificial sample positions cannot validate those tools.
To rebuild the sample/report assets from the repository root:
.venv/bin/python examples/make_demo.py /tmp/gnomancer-synthetic-input
.venv/bin/gnomancer /tmp/gnomancer-synthetic-input/demo_AncestryDNA.txt --out /tmp/gnomancer-synthetic-report --no-y --no-mt --no-clinvar --no-pharmcat
.venv/bin/python examples/prepare_launch_demo.py /tmp/gnomancer-synthetic-report /tmp/gnomancer-synthetic-inputThe packaging helper verifies the synthetic header and writes provenance.json. Never substitute
a real export. The walkthrough's example agent question is illustrative; its displayed tool output
comes from the actual synthetic report, without a simulated model conversation.
site/haplogroups/ is generated: edit gnomancer/data/haplogroup_context.tsv, run .venv/bin/python site/build_haplogroups.py, then deploy. The script also rewrites site/sitemap.xml.
- Bump the version in
pyproject.toml,gnomancer/__init__.py,server.json(two places),.claude-plugin/plugin.json;tests/test_pipeline.pychecks they agree. gh release create vX.Y.Z→ the publish workflow uploads to PyPI (trusted publishing).mcp-publisher login http --domain gnomancer.com --private-key <seed>thenmcp-publisher publish(key lives outside the repo).- Homebrew tap: update
urlandsha256incodebase/homebrew-tap/Formula/gnomancer.rbfrom the PyPI sdist (https://pypi.org/pypi/gnomancer/X.Y.Z/json). - If a pinned tool version changes, update
SHA256ingnomancer/setup_cmd.py.
On macOS 26.2 Homebrew's Python bottles have a pyexpat/libexpat mismatch that breaks pip inside the build sandbox,
so the tap formula cannot be verified there until Apple's next point release. The formula is correct as written
(python@3.13, pip via the venv's python); the installer and pipx paths are the verified routes meanwhile.