autoresearch-quantum/pyproject.toml
saymrwulf 29caba3a1a Add professional toolchain: mypy strict, CI pipeline, Playwright UX tests, pedagogy validation
Infrastructure:
- Configure mypy strict mode in pyproject.toml; fix all 53 type errors across 8 source files
- Add .pre-commit-config.yaml (ruff, mypy, nbstripout, trailing whitespace)
- Add .github/workflows/ci.yml: lint + type check, unit tests (Python 3.11/3.12), notebook execution
- Add scripts/app.sh consumer lifecycle manager (bootstrap, start, stop, status, validate, logs, reset)

Testing:
- Add tests/test_browser_ux.py: Playwright end-to-end UX tests covering JupyterLab launch,
  notebook rendering, navigation links, widget rendering, and full consumer walkthrough
- Add tests/test_pedagogy.py: 130 pedagogical structure tests validating prose quality
  (word counts, markdown ratio), section structure, assessment density and variety,
  Bloom's taxonomy coverage, checkpoint presence, tracker integration, key insight
  callouts, and cross-plan concept consistency

Quality:
- Fix ruff E741 (ambiguous variable name) across all builder scripts
- Add Key Insight callouts to plan_a/01_encoded_magic_state.ipynb
- Add pytest 'browser' marker for selective UX test runs
- Expand .gitignore with .logs/ and build artifacts

319 tests pass, 85% coverage, mypy strict clean, ruff clean.
2026-04-15 20:00:19 +02:00

109 lines
2.1 KiB
TOML

[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "autoresearch-quantum"
version = "0.1.0"
description = "Karpathy-style autoresearch harness for encoded magic-state preparation experiments."
readme = "README.md"
requires-python = ">=3.11"
authors = [
{ name = "saymrwulf" }
]
dependencies = [
"qiskit>=2.3,<3",
"qiskit-aer>=0.17,<0.18",
"pyyaml>=6,<7",
]
[project.optional-dependencies]
hardware = [
"qiskit-ibm-runtime>=0.46,<0.47",
]
notebooks = [
"notebook>=7,<8",
"jupyterlab>=4,<5",
"matplotlib>=3.8",
"ipywidgets>=8,<9",
]
dev = [
"pytest>=9,<10",
"pytest-cov>=6,<7",
"ruff>=0.11,<1",
"nbclient>=0.10,<1",
"nbformat>=5,<6",
"mypy>=1.15,<2",
"pre-commit>=4,<5",
]
ux = [
"playwright>=1.52,<2",
]
[project.scripts]
autoresearch-quantum = "autoresearch_quantum.cli:main"
[tool.setuptools]
package-dir = {"" = "src"}
[tool.setuptools.packages.find]
where = ["src"]
[tool.pytest.ini_options]
pythonpath = ["src"]
testpaths = ["tests"]
addopts = "--cov=autoresearch_quantum --cov-report=term-missing --cov-config=pyproject.toml -m 'not browser'"
markers = [
"browser: end-to-end browser UX tests (requires playwright)",
]
[tool.coverage.run]
source = ["autoresearch_quantum"]
[tool.coverage.report]
show_missing = true
skip_empty = true
exclude_lines = [
"pragma: no cover",
"if TYPE_CHECKING:",
"if __name__ == .__main__.",
]
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
show_error_codes = true
namespace_packages = true
explicit_package_bases = true
mypy_path = ["src"]
[[tool.mypy.overrides]]
module = [
"qiskit.*",
"qiskit_aer.*",
"qiskit_ibm_runtime.*",
"IPython.*",
"ipywidgets.*",
"nbformat.*",
"matplotlib.*",
"numpy.*",
"yaml.*",
]
ignore_missing_imports = true
[tool.ruff]
target-version = "py311"
line-length = 120
src = ["src", "tests"]
[tool.ruff.lint]
select = ["E", "F", "W", "I", "UP", "B", "SIM"]
ignore = ["E501"]