- Add CANONICAL_RIGHT (PVV, FVD, JA21, SGP) and CANONICAL_LEFT frozensets
to analysis/config.py as the canonical source of truth
- Update analysis/svd_labels.py to import from config; re-export as
RIGHT_PARTIES/LEFT_PARTIES for backward compatibility
- Add build_window_party_scores helper to analysis/explorer_data.py
- Add 7 integration tests in tests/test_axis_political_orientation.py
validating that canonical right parties appear on the right side of SVD
axes (x=component 1, y=component 2) using real DuckDB data
A small project that uses QWEN embeddings for semantic features. The codebase includes an example Ansible package under packages/@ansible/example and helper scripts for deployment.
Embeddings
This project uses QWEN embeddings (model: qwen/qwen3-embedding-4b) via OpenRouter-compatible APIs.
Preferred environment variable: OPENROUTER_API_KEY with a fallback to OPENAI_API_KEY.
Publishing and deploying the Ansible package
Package location: packages/@ansible/example — this contains the Ansible playbooks and packaging used by CI.
To publish the package (CI): create a git tag for the version and provide NPM_TOKEN as a secret to the CI runner so it can publish to npm.
To deploy the package (CI): set the following repository secrets in your CI pipeline:
DEPLOY_HOST (default: motief.sgeboers.nl)
DEPLOY_SSH_KEY (private key for the webapps user)
DEPLOY_USER (default: webapps)
Defaults
DEPLOY_HOST: motief.sgeboers.nl
DEPLOY_USER: webapps
See docs/deployment/ansible-package-deploy.md for more detailed deploy instructions and defaults.