with one click
symusic-dependency-taste
// Decision framework for selecting and evolving third-party dependencies in symusic across C++, Python packaging, bindings, testing, and docs.
// Decision framework for selecting and evolving third-party dependencies in symusic across C++, Python packaging, bindings, testing, and docs.
Encodes symusic's engineering taste across C++ core, nanobind bindings, and Python-facing APIs. Use when implementing or reviewing features to preserve performance-first architecture and ergonomic, predictable interfaces.
Configure and use automated code quality tools (ruff, mypy, pre-commit) for scientific Python projects. Covers linting rules, type checking configuration, formatting, and CI integration.
Create and publish distributable scientific Python packages following Scientific Python community best practices. Covers pyproject.toml, src layout, Hatchling, metadata, CLI entry points, and PyPI publishing.
Write and organize tests for scientific Python packages using pytest. Covers fixtures, parametrization, numerical testing with NumPy utilities, property-based testing with Hypothesis, and CI integration.
| name | symusic-dependency-taste |
| description | Decision framework for selecting and evolving third-party dependencies in symusic across C++, Python packaging, bindings, testing, and docs. |
| metadata | {"domain":"symusic","role":"dependency-architecture-advisor","scope":"dependency-selection-and-governance","output-format":"decision-record-and-checklist"} |
Use this skill when adding, replacing, or auditing dependencies.
Prefer focused libraries with clear performance or ergonomics wins.
Keep the dependency surface narrow and intentional.
Keep core competency in-repo; outsource commodity building blocks.
Choose libraries that align with cross-platform wheels and modern toolchains.
minimidi: chosen for fast and lightweight MIDI parsing; tightly aligned with symusic's core mission.prestosynth: dedicated synthesis backend for SoundFont rendering, consistent with a focused audio-rendering layer.pyvec: optimized container bridge that complements shared-pointer semantics and Python interop patterns.nanobind: modern, efficient C++/Python binding layer; matches performance-first and typed API goals.fmt: pragmatic formatting utility that improves clarity and maintainability over manual string assembly.zpp_bits (header-only include): lightweight serialization building block for pickle support.utfcpp + small utility headers (unordered_dense, macros): low-level helpers kept lean and local where practical.Taste signal: this is a deliberately modular high-performance stack with minimal overlap between libraries.
numpy: foundational numerical ecosystem choice; necessary for array-oriented conversions and interoperability.pySmartDL: targeted utility for managed downloads in soundfont workflows.platformdirs: minimal, standard choice for per-platform cache/config path correctness.Taste signal: runtime Python dependencies are intentionally few, stable, and functionally justified.
pytest, pytest-cov, pytest-xdist: standard, scalable Python testing stack.mypy, ruff configuration in pyproject.toml: static and style guardrails with pragmatic exceptions.pretty_midi (optional test extra): used as ecosystem interop/reference check rather than core runtime requirement.Taste signal: strong quality automation, but optional extras remain clearly separated from runtime essentials.
A candidate dependency should pass all gates:
If any gate fails, prefer a smaller alternative or an internal implementation.
platformdirs over custom OS branching.fmt style consistency.For every addition/removal, include a short dependency decision record: