From f0a2c23988b466ca1da3bc053ca4a7d32f9ff20b Mon Sep 17 00:00:00 2001 From: Gerald Fruhmann Date: Sat, 4 Jul 2026 22:03:02 +0200 Subject: [PATCH 1/2] fix(deps): consolidate dev deps into optional-extras, remove dependency-groups uv add --dev had created a [dependency-groups] section that CI does not install (CI uses uv sync --extra dev, not --group dev). Move pytest and ruff into [project.optional-dependencies] dev so local and CI environments are identical. Co-Authored-By: Claude Sonnet 4.6 --- pyproject.toml | 9 ++------- uv.lock | 16 +++------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 45d66d6..aa07b96 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,10 +23,11 @@ dependencies = [ [project.optional-dependencies] dev = [ - "pytest>=8.0", + "pytest>=9.1", "pytest-cov>=5.0", "mypy>=1.10", "bandit>=1.8", + "ruff>=0.11", "hatchling>=1.25", "types-pyyaml>=6.0", "types-requests>=2.31", @@ -35,12 +36,6 @@ dev = [ [project.scripts] qms-kit = "cli.main:cli" -[dependency-groups] -dev = [ - "pytest>=9.1.1", - "ruff>=0.15.20", -] - [tool.ruff] line-length = 100 target-version = "py312" diff --git a/uv.lock b/uv.lock index 8305b01..0caebaa 100644 --- a/uv.lock +++ b/uv.lock @@ -708,16 +708,11 @@ dev = [ { name = "mypy" }, { name = "pytest" }, { name = "pytest-cov" }, + { name = "ruff" }, { name = "types-pyyaml" }, { name = "types-requests" }, ] -[package.dev-dependencies] -dev = [ - { name = "pytest" }, - { name = "ruff" }, -] - [package.metadata] requires-dist = [ { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8" }, @@ -726,21 +721,16 @@ requires-dist = [ { name = "jinja2", specifier = ">=3.1" }, { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.10" }, { name = "pydantic", specifier = ">=2.0" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0" }, + { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.1" }, { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=5.0" }, { name = "pyyaml", specifier = ">=6.0" }, { name = "requests", specifier = ">=2.31" }, + { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.11" }, { name = "types-pyyaml", marker = "extra == 'dev'", specifier = ">=6.0" }, { name = "types-requests", marker = "extra == 'dev'", specifier = ">=2.31" }, ] provides-extras = ["dev"] -[package.metadata.requires-dev] -dev = [ - { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.15.20" }, -] - [[package]] name = "requests" version = "2.34.2" From b85b98b4a097fc89f8f64a0dcae9c8864a9c8d6d Mon Sep 17 00:00:00 2001 From: Gerald Fruhmann Date: Sat, 4 Jul 2026 22:06:12 +0200 Subject: [PATCH 2/2] feat(deploy): add capa_form, audit checklist, mgmt review agenda to deploy Wire the three record-style templates into core.yaml so they are deployed as XWiki pages alongside the procedures. Extend the CLI extra dict with TBD placeholders for instance-specific fields (audit_date, capa_id, etc.) so templates render cleanly from the generic deploy loop. Co-Authored-By: Claude Sonnet 4.6 --- cli/main.py | 12 +++++++++++- config/core.yaml | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cli/main.py b/cli/main.py index 417c5f6..872a38d 100644 --- a/cli/main.py +++ b/cli/main.py @@ -76,7 +76,17 @@ def deploy(target: str, config_path: Path, dry_run: bool) -> None: "owner_role": "Quality Management Officer", "approver": config.organisation.management, "author": config.organisation.quality_officer, - "date": "TODO", + "date": "TBD", + # Record-template placeholders — filled in per instance + "audit_date": "TBD", + "auditor": "TBD", + "audit_scope": "TBD", + "contact": "TBD", + "capa_id": "CAPA-XXXX-NNN", + "opened_date": "TBD", + "opened_by": "TBD", + "source_ref": "TBD", + "participants": "TBD", }, ) rendered[doc.id] = (doc.title, content) diff --git a/config/core.yaml b/config/core.yaml index e3d4f37..5487189 100644 --- a/config/core.yaml +++ b/config/core.yaml @@ -46,10 +46,10 @@ clauses: documents: [process_map, customer_requirements_procedure, supplier_evaluation, nonconformity_procedure] - id: "9" title: "Performance Evaluation" - documents: [internal_audit_procedure, management_review_procedure, kpi_dashboard] + documents: [internal_audit_procedure, internal_audit_checklist, management_review_procedure, mgmt_review_agenda, kpi_dashboard] - id: "10" title: "Improvement" - documents: [capa_procedure, continual_improvement_procedure] + documents: [capa_procedure, capa_form, continual_improvement_procedure] documents: # Clause 4 @@ -130,10 +130,18 @@ documents: title: "Procedure: Internal Audits" template: procedure clause: "9.2" + - id: internal_audit_checklist + title: "Internal Audit Checklist" + template: internal_audit_checklist + clause: "9.2" - id: management_review_procedure title: "Procedure: Management Review" template: procedure clause: "9.3" + - id: mgmt_review_agenda + title: "Management Review — Agenda and Minutes" + template: mgmt_review_agenda + clause: "9.3" - id: kpi_dashboard title: "KPI Dashboard / Performance Indicators" template: kpi_dashboard @@ -143,6 +151,10 @@ documents: title: "Procedure: Corrective Actions (CAPA)" template: procedure clause: "10.2" + - id: capa_form + title: "CAPA Form — Corrective Action" + template: capa_form + clause: "10.2" - id: continual_improvement_procedure title: "Procedure: Continual Improvement" template: procedure