From 235f4a3b055ca71013f37ca16fc040bbbb4cd896 Mon Sep 17 00:00:00 2001 From: TristanKruse Date: Sat, 23 May 2026 16:49:41 +0200 Subject: [PATCH 1/5] chore: fix metadata config and add backlog --- BACKLOG.md | 82 +++++++++++++++++++++++++ docs/architecture-testing-comparison.md | 56 +++++++++++++++++ pyproject.toml | 4 +- src/archunitpython/__init__.py | 2 +- tests/integration/test_e2e.py | 4 +- tests/test_setup.py | 16 ++++- 6 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 BACKLOG.md create mode 100644 docs/architecture-testing-comparison.md diff --git a/BACKLOG.md b/BACKLOG.md new file mode 100644 index 0000000..424e9ab --- /dev/null +++ b/BACKLOG.md @@ -0,0 +1,82 @@ +# Backlog + +This backlog merges the existing `TODO.md` items with research findings from `docs/architecture-testing-comparison.md`. + +## P0 - Maintenance And Correctness + +- Keep package metadata synchronized across `pyproject.toml`, `CHANGELOG.md`, and `src/archunitpython/__init__.py`. +- Keep tool configuration valid for the supported Python range, especially mypy and Ruff target versions. +- Add a release metadata check that fails when the exported `__version__` differs from the project version. +- Add CI jobs that run tests, Ruff, mypy, and a package build from a clean checkout. + +## P1 - Adoption Workflow + +- Add an `.archignore` or similar file, modeled after `.gitignore`, for files that should never be analyzed. +- Add a `.because(...)` API so rules can carry user-facing rationale into failure messages and generated architecture documentation. +- Add a freeze/baseline mechanism for known violations so teams can adopt ArchUnitPython incrementally. +- Add configuration-file support for common rules, while keeping the fluent Python API as the primary interface. +- Add support for monorepo and multi-package Python projects. + +## P1 - Python Import Semantics + +- Add support for namespace packages that do not contain `__init__.py`. +- Detect dynamic imports such as `importlib.import_module()` and `__import__()`. +- Detect conditional imports such as `try/except ImportError`. +- Add better `TYPE_CHECKING` import handling, including options to ignore, include, or report type-only imports separately. +- Improve external dependency rules so users can express allowed and forbidden third-party packages at module or slice level. +- Consider a public-interface rule inspired by Tach, where modules may only import through declared package APIs. + +## P1 - Reporting And Documentation + +- Add comprehensive HTML reports with dependency graphs, metric charts, and zone visualization. +- Auto-generate architecture documentation based on tests and rule rationales. +- Make logged paths clickable in IDEs and common terminal integrations. +- Add PlantUML or Mermaid export for discovered architecture graphs. +- Improve metric export examples and document how metric thresholds should be selected. + +## P2 - Rule Surface + +- Add first-class layered architecture helpers so common clean/hexagonal/layered rules require less boilerplate. +- Add slice isolation helpers for bounded contexts and modular monoliths. +- Add richer custom rule hooks for dependency edges, files, classes, and metrics. +- Add transitive dependency checks, especially for "domain must not transitively reach infrastructure" style rules. +- Add naming and placement conventions for classes/functions, not only files. + +## P2 - Performance And Scale + +- Improve performance for very large projects through parallel file parsing. +- Add persistent graph caching with invalidation based on file mtimes or content hashes. +- Add benchmarks for small, medium, large, and monorepo-style projects. + +## P2 - Metrics + +- Add more LCOM edge case handling. +- Add metric documentation with examples for good, suspicious, and failing values. +- Add trend-friendly metric exports for CI artifacts. +- Consider additional architecture metrics such as coupling counts per slice, fan-in/fan-out summaries, and instability per package. + +## P3 - Packaging And Docs + +- Publish to PyPI as part of the release pipeline if this is not already automated. +- Add a Sphinx or MkDocs documentation site. +- Add a complete example repository or examples folder covering pytest, unittest, PlantUML, metrics, and CI. +- Add contribution guidance for new rule types and metric implementations. + +## Existing TODO Coverage + +The previous `TODO.md` items are represented above: + +- `.archignore`: P1 Adoption Workflow +- Auto-generated architecture documentation: P1 Reporting And Documentation +- `.because(...)`: P1 Adoption Workflow +- Namespace packages: P1 Python Import Semantics +- Dynamic imports: P1 Python Import Semantics +- Conditional imports: P1 Python Import Semantics +- `TYPE_CHECKING` imports: P1 Python Import Semantics +- Clickable IDE paths: P1 Reporting And Documentation +- Large-project performance: P2 Performance And Scale +- HTML report with charts and zone visualization: P1 Reporting And Documentation +- LCOM edge cases: P2 Metrics +- Monorepo / multi-package support: P1 Adoption Workflow +- Publish to PyPI: P3 Packaging And Docs +- Sphinx/MkDocs documentation site: P3 Packaging And Docs diff --git a/docs/architecture-testing-comparison.md b/docs/architecture-testing-comparison.md new file mode 100644 index 0000000..68f7c68 --- /dev/null +++ b/docs/architecture-testing-comparison.md @@ -0,0 +1,56 @@ +# Architecture Testing Landscape + +Research date: 2026-05-23 + +This document compares ArchUnitPython with architecture testing tools in the broader ecosystem and with Python-specific alternatives. It focuses on user-facing features that can inform product direction. + +## Current ArchUnitPython Position + +ArchUnitPython already covers three valuable surfaces: + +- File-level architecture rules through `project_files(...)`: dependency direction, cycle detection, naming/path conventions, external dependency checks, and custom file predicates. +- Slice-level architecture rules through `project_slices(...)`: slice extraction from path patterns or regexes, PlantUML diagram adherence, and forbidden slice dependencies. +- Code metrics through `metrics(...)`: count metrics, LCOM variants, abstractness, instability, distance from the main sequence, zone checks, and custom metrics. + +That breadth makes the project closer to ArchUnit-style libraries than to pure import linters. The main gaps are around configuration ergonomics, reporting, incremental adoption, IDE/CI workflow polish, and deeper Python import semantics. + +## General Architecture Testing Players + +| Tool | Ecosystem | Rule definition style | Dependency/layer rules | Cycles | Diagram support | Metrics | Reports/visualization | Notable strengths | ArchUnitPython comparison | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [ArchUnit](https://www.archunit.org/userguide/html/000_Index.html) | Java | Fluent Java API, JUnit integrations | Yes: packages, classes, layers, slices | Yes | PlantUML component diagrams | Yes: software architecture metrics | Strong test failure output; mature JUnit support | Mature reference implementation; broad rule model and advanced adoption features such as freezing/ignoring violations | ArchUnitPython mirrors the core idea and already has files/slices/metrics, but lacks class/member/annotation richness and mature freeze/import options | +| [ArchUnitNET](https://github.com/TNG/ArchUnitNET) | .NET | Fluent C# API with xUnit/NUnit/MSTest integrations | Yes: assemblies, namespaces, types, members | Yes | PlantUML support and diagram generation in the project ecosystem | Limited compared with ArchUnit | Test framework integrations | Strong .NET analogue to ArchUnit with many framework adapters | ArchUnitPython has stronger built-in code metrics, but less type/member-level expressiveness | +| [NetArchTest](https://github.com/BenMorris/NetArchTest) | .NET | Fluent C# API | Yes: namespace/type dependency and conventions | Not a primary differentiator | No first-class PlantUML in core | No | Policy results; test framework agnostic | Simple, widely adopted dependency/convention tests for .NET | ArchUnitPython is broader on cycles, slices, PlantUML, and metrics | +| [ts-arch](https://github.com/ts-arch/ts-arch) | TypeScript/JavaScript | Fluent API, Jest matcher | Yes: files, folders, slices | Yes | PlantUML diagram adherence | No | Jest-oriented failure output | Very close conceptual sibling: file API, slice API, PlantUML, NX monorepo support | ArchUnitPython has a similar surface plus metrics; ts-arch has stronger monorepo/NX positioning | +| [jQAssistant](https://jqassistant.github.io/jqassistant/current/) | Mostly JVM, plugin-based | Scanner + graph database + rule concepts/constraints | Yes, via graph rules and plugins | Yes, rule-dependent | Documentation validation and living documentation workflows | Software analytics via graph queries | Reports, server/explore mode, graph-backed analysis | Enterprise-scale scanning, graph exploration, living documentation, baseline management | ArchUnitPython is much lighter and easier to embed in tests, but lacks graph database exploration and living-doc workflows | + +## Python Architecture Testing Libraries + +| Tool | Rule definition style | Dependency/layer rules | Cycles | External dependency rules | Diagram support | Metrics | Reports/visualization | Adoption workflow | How ArchUnitPython stacks up | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [ArchUnitPython](https://github.com/LukasNiessen/ArchUnitPython) | Fluent Python API used from pytest/unittest/any test framework | Yes: file dependencies, external modules, slices, forbidden slice dependencies | Yes: file-level cycles | Yes: external module matching | Yes: PlantUML slice adherence | Yes: count, LCOM, distance, custom metrics | Experimental metric export; no full HTML report yet | Plain test functions; `assert_passes()` or `.check()` | Broadest feature mix among the Python tools reviewed, especially because metrics and PlantUML are built in | +| [Import Linter](https://import-linter.readthedocs.io/en/stable/index.html) | `.importlinter` configuration contracts plus CLI | Yes: forbidden, protected, layers, independence, acyclic siblings, custom contracts | Yes: acyclic siblings | Primarily first-party import contracts | No first-class PlantUML | No | Browser-based architecture UI | CLI, CI, config file, caching | More mature for config-driven import contracts and exploration; ArchUnitPython is more test-native and broader on metrics/PlantUML | +| [Tach](https://docs.gauge.sh/getting-started/introduction/) | `tach.toml` plus CLI commands | Yes: module dependencies and public interfaces | Dependency graph focused | Yes: `check-external` for third-party imports | No | No | `show`, `map`, `report`, VS Code integration | Incremental CLI workflow, sync, pre-commit/CI, public interface enforcement | Tach is stronger for modular-boundary workflow and public APIs; ArchUnitPython is stronger for test-suite rules, metrics, and diagram validation | +| [PyTestArch](https://zyskarch.github.io/pytestarch/latest/features/module_import_checks/) | Python query language evaluated in pytest | Yes: module dependency query language and layered architecture rules | Implicit through dependency rules; not positioned as a primary cycle API | Not a main focus | Yes: generates rules from PlantUML component diagrams | No | Optional matplotlib visualization | Pytest-centered evaluation structures | Similar to ArchUnitPython on Python tests and PlantUML; ArchUnitPython has simpler fluent API and built-in metrics | +| [pytest-archon](https://github.com/jwbargsten/pytest-archon) | Pytest-oriented architecture assertions | Yes: forbidden dependencies and project structure rules | Yes, positioned around avoiding cycles | Not a main differentiator | No | No | Pytest failure output | Lightweight pytest helper | ArchUnitPython is broader and more ArchUnit-like; pytest-archon is smaller and focused | + +## Product Takeaways + +- ArchUnitPython should lean into being the ArchUnit-style Python test library, not just another import linter. +- The nearest feature gap against Python tools is not raw rule breadth; it is workflow: config files, ignore files, public interfaces, incremental adoption, reporting, and IDE/CI polish. +- Against ArchUnit and ArchUnitNET, the biggest long-term gaps are richer semantic model support, better ignore/freeze mechanisms, and mature documentation/reporting. +- Metrics are a meaningful differentiator in the Python space and should be kept visible in docs and examples. + +## Sources + +- ArchUnit User Guide: https://www.archunit.org/userguide/html/000_Index.html +- ArchUnitNET repository: https://github.com/TNG/ArchUnitNET +- NetArchTest repository: https://github.com/BenMorris/NetArchTest +- ts-arch repository: https://github.com/ts-arch/ts-arch +- jQAssistant User Manual: https://jqassistant.github.io/jqassistant/current/ +- Import Linter documentation: https://import-linter.readthedocs.io/en/stable/index.html +- Tach documentation: https://docs.gauge.sh/getting-started/introduction/ +- PyTestArch documentation: https://zyskarch.github.io/pytestarch/latest/features/module_import_checks/ +- PyTestArch PlantUML documentation: https://zyskarch.github.io/pytestarch/latest/features/plantuml/ +- PyTestArch visualization documentation: https://zyskarch.github.io/pytestarch/latest/features/visualization/ +- pytest-archon repository: https://github.com/jwbargsten/pytest-archon diff --git a/pyproject.toml b/pyproject.toml index 8d6c575..17603ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,13 +67,13 @@ python_classes = ["Test*"] python_functions = ["test_*"] [tool.mypy] -python_version = "1.1.0" +python_version = "3.10" strict = true warn_return_any = true warn_unused_configs = true [tool.ruff] -target-version = "1.1.0" +target-version = "py310" line-length = 100 [tool.ruff.lint] diff --git a/src/archunitpython/__init__.py b/src/archunitpython/__init__.py index 24d488f..bf3af60 100644 --- a/src/archunitpython/__init__.py +++ b/src/archunitpython/__init__.py @@ -1,6 +1,6 @@ """ArchUnitPython - Architecture testing library for Python projects.""" -__version__ = "1.0.0" +__version__ = "1.1.0" # Files API # Common diff --git a/tests/integration/test_e2e.py b/tests/integration/test_e2e.py index e55cadf..8bd5ed3 100644 --- a/tests/integration/test_e2e.py +++ b/tests/integration/test_e2e.py @@ -10,9 +10,7 @@ format_violations, metrics, project_files, - project_slices, ) -from archunitpython.common.assertion.violation import EmptyTestViolation from archunitpython.files.assertion.cycle_free import ViolatingCycle FIXTURES_DIR = os.path.join( @@ -54,7 +52,7 @@ def test_import_format_violations(self): def test_version(self): import archunitpython - assert archunitpython.__version__ == "1.0.0" + assert archunitpython.__version__ == "1.1.0" class TestAssertPasses: diff --git a/tests/test_setup.py b/tests/test_setup.py index 733d107..053499c 100644 --- a/tests/test_setup.py +++ b/tests/test_setup.py @@ -1,7 +1,21 @@ """Verify project setup is correct.""" +import re +from pathlib import Path + def test_import(): import archunitpython - assert archunitpython.__version__ == "1.0.0" + assert archunitpython.__version__ == "1.1.0" + + +def test_project_version_matches_package_version(): + import archunitpython + + project_root = Path(__file__).resolve().parents[1] + pyproject = (project_root / "pyproject.toml").read_text() + match = re.search(r'^version = "([^"]+)"$', pyproject, re.MULTILINE) + + assert match is not None + assert archunitpython.__version__ == match.group(1) From 7003cff5031b8a778cf260a3d9b60331a1e92ddc Mon Sep 17 00:00:00 2001 From: Niessen Date: Sun, 24 May 2026 09:00:08 +0200 Subject: [PATCH 2/5] chore: clean up backlog docs --- BACKLOG.md | 22 +--------------------- TODO.md | 18 ------------------ docs/architecture-testing-comparison.md | 4 ++-- 3 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 TODO.md diff --git a/BACKLOG.md b/BACKLOG.md index 424e9ab..59bb339 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -1,6 +1,6 @@ # Backlog -This backlog merges the existing `TODO.md` items with research findings from `docs/architecture-testing-comparison.md`. +This backlog collects product and maintenance ideas from project research. ## P0 - Maintenance And Correctness @@ -13,7 +13,6 @@ This backlog merges the existing `TODO.md` items with research findings from `do - Add an `.archignore` or similar file, modeled after `.gitignore`, for files that should never be analyzed. - Add a `.because(...)` API so rules can carry user-facing rationale into failure messages and generated architecture documentation. -- Add a freeze/baseline mechanism for known violations so teams can adopt ArchUnitPython incrementally. - Add configuration-file support for common rules, while keeping the fluent Python API as the primary interface. - Add support for monorepo and multi-package Python projects. @@ -61,22 +60,3 @@ This backlog merges the existing `TODO.md` items with research findings from `do - Add a Sphinx or MkDocs documentation site. - Add a complete example repository or examples folder covering pytest, unittest, PlantUML, metrics, and CI. - Add contribution guidance for new rule types and metric implementations. - -## Existing TODO Coverage - -The previous `TODO.md` items are represented above: - -- `.archignore`: P1 Adoption Workflow -- Auto-generated architecture documentation: P1 Reporting And Documentation -- `.because(...)`: P1 Adoption Workflow -- Namespace packages: P1 Python Import Semantics -- Dynamic imports: P1 Python Import Semantics -- Conditional imports: P1 Python Import Semantics -- `TYPE_CHECKING` imports: P1 Python Import Semantics -- Clickable IDE paths: P1 Reporting And Documentation -- Large-project performance: P2 Performance And Scale -- HTML report with charts and zone visualization: P1 Reporting And Documentation -- LCOM edge cases: P2 Metrics -- Monorepo / multi-package support: P1 Adoption Workflow -- Publish to PyPI: P3 Packaging And Docs -- Sphinx/MkDocs documentation site: P3 Packaging And Docs diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 64f5115..0000000 --- a/TODO.md +++ /dev/null @@ -1,18 +0,0 @@ -# TODOs - -This is our _"backlog"_. Contributions are highly welcome. - -- Add an `.archignore` or similar a la `.gitignore` for files that should never be considered by our tests -- Auto generate an architecture documentation based on the tests -- Add a `.because(...)` function a la ArchUnit. Should be used for the error message in case of a failing test as well as for auto-generated arch docs -- Add support for namespace packages (packages without `__init__.py`) -- Detect dynamic imports (`importlib.import_module()`, `__import__()`) -- Detect conditional imports (`try/except ImportError`) -- Add `TYPE_CHECKING` import handling (currently detected but could be filtered separately) -- Make logged paths clickable in IDEs (currently works in some terminals) -- Improve performance for very large projects (parallel file parsing) -- Add comprehensive HTML report with charts and zone visualization -- Add more LCOM edge case handling -- Add support for monorepo / multi-package Python projects -- Publish to PyPI -- Add Sphinx/MkDocs documentation site diff --git a/docs/architecture-testing-comparison.md b/docs/architecture-testing-comparison.md index 68f7c68..2a47e37 100644 --- a/docs/architecture-testing-comparison.md +++ b/docs/architecture-testing-comparison.md @@ -18,7 +18,7 @@ That breadth makes the project closer to ArchUnit-style libraries than to pure i | Tool | Ecosystem | Rule definition style | Dependency/layer rules | Cycles | Diagram support | Metrics | Reports/visualization | Notable strengths | ArchUnitPython comparison | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| [ArchUnit](https://www.archunit.org/userguide/html/000_Index.html) | Java | Fluent Java API, JUnit integrations | Yes: packages, classes, layers, slices | Yes | PlantUML component diagrams | Yes: software architecture metrics | Strong test failure output; mature JUnit support | Mature reference implementation; broad rule model and advanced adoption features such as freezing/ignoring violations | ArchUnitPython mirrors the core idea and already has files/slices/metrics, but lacks class/member/annotation richness and mature freeze/import options | +| [ArchUnit](https://www.archunit.org/userguide/html/000_Index.html) | Java | Fluent Java API, JUnit integrations | Yes: packages, classes, layers, slices | Yes | PlantUML component diagrams | Yes: software architecture metrics | Strong test failure output; mature JUnit support | Mature reference implementation with a broad rule model and mature JUnit workflow | ArchUnitPython mirrors the core idea and already has files/slices/metrics, but lacks class/member/annotation richness and mature import options | | [ArchUnitNET](https://github.com/TNG/ArchUnitNET) | .NET | Fluent C# API with xUnit/NUnit/MSTest integrations | Yes: assemblies, namespaces, types, members | Yes | PlantUML support and diagram generation in the project ecosystem | Limited compared with ArchUnit | Test framework integrations | Strong .NET analogue to ArchUnit with many framework adapters | ArchUnitPython has stronger built-in code metrics, but less type/member-level expressiveness | | [NetArchTest](https://github.com/BenMorris/NetArchTest) | .NET | Fluent C# API | Yes: namespace/type dependency and conventions | Not a primary differentiator | No first-class PlantUML in core | No | Policy results; test framework agnostic | Simple, widely adopted dependency/convention tests for .NET | ArchUnitPython is broader on cycles, slices, PlantUML, and metrics | | [ts-arch](https://github.com/ts-arch/ts-arch) | TypeScript/JavaScript | Fluent API, Jest matcher | Yes: files, folders, slices | Yes | PlantUML diagram adherence | No | Jest-oriented failure output | Very close conceptual sibling: file API, slice API, PlantUML, NX monorepo support | ArchUnitPython has a similar surface plus metrics; ts-arch has stronger monorepo/NX positioning | @@ -38,7 +38,7 @@ That breadth makes the project closer to ArchUnit-style libraries than to pure i - ArchUnitPython should lean into being the ArchUnit-style Python test library, not just another import linter. - The nearest feature gap against Python tools is not raw rule breadth; it is workflow: config files, ignore files, public interfaces, incremental adoption, reporting, and IDE/CI polish. -- Against ArchUnit and ArchUnitNET, the biggest long-term gaps are richer semantic model support, better ignore/freeze mechanisms, and mature documentation/reporting. +- Against ArchUnit and ArchUnitNET, the biggest long-term gaps are richer semantic model support, import semantics, and mature documentation/reporting. - Metrics are a meaningful differentiator in the Python space and should be kept visible in docs and examples. ## Sources From cade31d17dfad5feb17c400d37129769aa9132ab Mon Sep 17 00:00:00 2001 From: Niessen Date: Sun, 24 May 2026 09:21:29 +0200 Subject: [PATCH 3/5] chore: keep release version updates scoped --- .releaserc.json | 4 ++-- CONTRIBUTING.md | 2 +- tests/integration/test_e2e.py | 2 +- tests/test_setup.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.releaserc.json b/.releaserc.json index 0229c94..66f1069 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -12,13 +12,13 @@ [ "@semantic-release/exec", { - "prepareCmd": "python -c \"import re, pathlib; p=pathlib.Path('pyproject.toml'); p.write_text(re.sub(r'version = \\\"[^\\\"]+\\\"', f'version = \\\"${nextRelease.version}\\\"', p.read_text()))\"" + "prepareCmd": "python -c \"import re, pathlib; files=[('pyproject.toml', r'(?m)^version = \\\"[^\\\"]+\\\"$', 'version = \\\"${nextRelease.version}\\\"'), ('src/archunitpython/__init__.py', r'(?m)^__version__ = \\\"[^\\\"]+\\\"$', '__version__ = \\\"${nextRelease.version}\\\"')]; [pathlib.Path(path).write_text(re.sub(pattern, replacement, pathlib.Path(path).read_text())) for path, pattern, replacement in files]\"" } ], [ "@semantic-release/git", { - "assets": ["pyproject.toml", "CHANGELOG.md"], + "assets": ["pyproject.toml", "src/archunitpython/__init__.py", "CHANGELOG.md"], "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" } ], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c4ccc8..6b7b20a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,7 +36,7 @@ Releases are fully automated. When a PR is merged to `main`: 1. CI runs lint + type checking + tests (across Python 3.10-3.13) 2. If CI passes, [semantic-release](https://github.com/semantic-release/semantic-release) analyzes commit messages since the last release 3. If there are `fix:` or `feat:` commits, it automatically: - - Bumps the version in `pyproject.toml` + - Bumps the version in `pyproject.toml` and `src/archunitpython/__init__.py` - Updates `CHANGELOG.md` - Publishes to PyPI - Creates a GitHub release with release notes diff --git a/tests/integration/test_e2e.py b/tests/integration/test_e2e.py index 8bd5ed3..8ff854a 100644 --- a/tests/integration/test_e2e.py +++ b/tests/integration/test_e2e.py @@ -52,7 +52,7 @@ def test_import_format_violations(self): def test_version(self): import archunitpython - assert archunitpython.__version__ == "1.1.0" + assert archunitpython.__version__ class TestAssertPasses: diff --git a/tests/test_setup.py b/tests/test_setup.py index 053499c..4bc1402 100644 --- a/tests/test_setup.py +++ b/tests/test_setup.py @@ -7,7 +7,7 @@ def test_import(): import archunitpython - assert archunitpython.__version__ == "1.1.0" + assert archunitpython.__version__ def test_project_version_matches_package_version(): From 84e0284146d042122dc9d1850f4977349a4be85b Mon Sep 17 00:00:00 2001 From: Niessen Date: Sun, 24 May 2026 09:34:00 +0200 Subject: [PATCH 4/5] docs: rename product direction notes --- ...tecture-testing-comparison.md => product-direction-notes.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/{architecture-testing-comparison.md => product-direction-notes.md} (99%) diff --git a/docs/architecture-testing-comparison.md b/docs/product-direction-notes.md similarity index 99% rename from docs/architecture-testing-comparison.md rename to docs/product-direction-notes.md index 2a47e37..0fc4001 100644 --- a/docs/architecture-testing-comparison.md +++ b/docs/product-direction-notes.md @@ -1,4 +1,4 @@ -# Architecture Testing Landscape +# Product Direction Notes Research date: 2026-05-23 From aad3e5e8f071acf3712e0d750cf89643a47de53a Mon Sep 17 00:00:00 2001 From: Niessen Date: Sun, 24 May 2026 09:38:29 +0200 Subject: [PATCH 5/5] docs: move product research notes --- .../product-direction/architecture-testing-landscape.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/product-direction-notes.md => research/product-direction/architecture-testing-landscape.md (99%) diff --git a/docs/product-direction-notes.md b/research/product-direction/architecture-testing-landscape.md similarity index 99% rename from docs/product-direction-notes.md rename to research/product-direction/architecture-testing-landscape.md index 0fc4001..2a47e37 100644 --- a/docs/product-direction-notes.md +++ b/research/product-direction/architecture-testing-landscape.md @@ -1,4 +1,4 @@ -# Product Direction Notes +# Architecture Testing Landscape Research date: 2026-05-23