[build-system] requires = ["setuptools>=81.0"] build-backend = "setuptools.build_meta" [project] name = "biz-dfch-specmgr" version = "0.32.0" description = "An artifact manager for system specifications." readme = "README.md" requires-python = ">=3.11" license = "AGPL-3.0-or-later" license-files = ["LICENSE"] authors = [ {name = "Ronald Rink"} ] maintainers = [ { name = "Ronald Rink" } ] keywords = [ "specification management", "specification", "requirements", "requirements management", "systems engineering", "artifact management", "cli", "library", "mcp", "model-context-protocol" ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Natural Language :: English", "Topic :: Software Development :: Libraries :: Python Modules", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] dependencies = [ "pydantic>=2.11", "python-dotenv>=1.2.2", "markdown-it-py>=3.0", "python-frontmatter>=1.1", "mdformat>=1.0.0", "mdformat-simple-breaks==0.1.0", ] # Install project in editable mode: # python -m pip install -e ".[dev]" [project.optional-dependencies] cli = [ "typer>=0.12", "rich", ] mcp = [ "biz-dfch-specmgr[cli]", "mcp>=2.0.0", ] test = [ "coverage", "parameterized>=0.9.0", "pylint>=4.0.0", "mypy>=1.0", "ruff>=0.16.0", "vulture>=2.14", "pytest>=8.0", "pytest-xdist>=3.6", "pytest-cov>=6.0", ] dev = [ "biz-dfch-specmgr[cli,mcp,test]", "twine", "build", "uv", "types-PyYAML", "pre-commit", ] [project.urls] Homepage = "https://github.com/dfch/biz.dfch.SpecMgr" Repository = "https://github.com/dfch/biz.dfch.SpecMgr.git" Changelog = "https://github.com/dfch/biz.dfch.SpecMgr/blob/main/CHANGELOG.md" Issues = "https://github.com/dfch/biz.dfch.SpecMgr/issues" [project.scripts] specmgr = "biz.dfch.specmgr.cli:app" [tool.ruff] line-length = 120 [tool.ruff.lint] select = ["E", "F", "W"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["E501"] # vulture whitelist: bare name/attribute references are intentional (see whitelist.py). "whitelist.py" = ["F821"] [tool.pylint.format] max-line-length = 120 [tool.setuptools] include-package-data = true [tool.setuptools.packages.find] where = ["src"] namespaces = true [tool.setuptools.package-data] "biz.dfch.specmgr" = [ "py.typed" ] "biz.dfch.specmgr.adr" = [ "data/*.md" ] "biz.dfch.specmgr.dec" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.feat" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.gol" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.prb" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.qa" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.req" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.rsk" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.sop" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.sysrs" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.tsk" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.uc" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.vcr" = [ "data/*.md", "data/*.json" ] "biz.dfch.specmgr.general" = [ "data/*.md" ] [tool.coverage.run] source = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] filterwarnings = [ # src/biz/dfch/specmgr/vcr/models/v1/body.py's `TestSteps` is a Pydantic # model, not a test class -- pytest's default `Test*` collection heuristic # matches its name and warns because it has an `__init__`. Harmless, but # noisy across 24 test files that import it. "ignore::pytest.PytestCollectionWarning", ]