Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/.release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.3.7"
".": "0.3.6"
}
19 changes: 0 additions & 19 deletions .github/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,5 @@
# Changelog

## [0.3.7](https://github.com/Aureliolo/synthorg/compare/v0.3.6...v0.3.7) (2026-03-19)


### Features

* **engine:** implement Hybrid Plan + ReAct execution loop ([#582](https://github.com/Aureliolo/synthorg/issues/582)) ([008147c](https://github.com/Aureliolo/synthorg/commit/008147c698d3443c95618be4d783a5d3d3813005))
* implement first-run setup wizard ([#584](https://github.com/Aureliolo/synthorg/issues/584)) ([dfed931](https://github.com/Aureliolo/synthorg/commit/dfed93123bfd24fabc50bc52d46211343835efea))


### Bug Fixes

* **api:** address ZAP DAST scan findings ([#579](https://github.com/Aureliolo/synthorg/issues/579)) ([ce9a3e0](https://github.com/Aureliolo/synthorg/commit/ce9a3e077ab6af5743a8150333d225d0de9ab0d3))
* **cli:** regenerate compose and re-exec binary on update ([#576](https://github.com/Aureliolo/synthorg/issues/576)) ([3f226eb](https://github.com/Aureliolo/synthorg/commit/3f226eb79b46de59c1e94319a046765353392de4))


### CI/CD

* add SBOM generation to Docker and CLI releases ([#580](https://github.com/Aureliolo/synthorg/issues/580)) ([db459cf](https://github.com/Aureliolo/synthorg/commit/db459cf0892c46f9a887126edd70aeaafe6b70d8))

## [0.3.6](https://github.com/Aureliolo/synthorg/compare/v0.3.5...v0.3.6) (2026-03-19)


Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ venv = ".venv"
# ---------------------------------------------------------------------------
[tool.commitizen]
name = "cz_conventional_commits"
version = "0.3.7" # x-release-please-version
version = "0.3.6" # x-release-please-version
tag_format = "v$version"

# ---------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion src/synthorg/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""SynthOrg - Framework for building synthetic organizations."""

__version__ = "0.3.7" # x-release-please-version
__version__ = "0.3.6" # x-release-please-version
16 changes: 9 additions & 7 deletions tests/unit/security/rules/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"""Tests for walk_string_values utility."""

from unittest.mock import MagicMock, patch

import pytest

from synthorg.security.rules._utils import walk_string_values
Expand Down Expand Up @@ -76,11 +78,9 @@ def test_nested_lists(self) -> None:
class TestWalkStringValuesDepthLimit:
"""Depth limit prevents infinite recursion."""

def test_stops_at_max_depth(
self,
capsys: pytest.CaptureFixture[str],
) -> None:
"""Build a structure deeper than 20 levels — truncated with warning."""
@patch("synthorg.security.rules._utils.logger")
def test_stops_at_max_depth(self, mock_logger: MagicMock) -> None:
"""Build a structure deeper than 20 levels -- truncated with warning."""
data: dict[str, object] = {"val": "leaf"}
for _ in range(25):
data = {"nested": data}
Expand All @@ -89,8 +89,10 @@ def test_stops_at_max_depth(

# "leaf" is beyond depth limit and should be skipped.
assert result == []
captured = capsys.readouterr()
assert "depth" in captured.out.lower()
# Logger.warning should have been called with the depth event.
mock_logger.warning.assert_called()
call_kwargs = mock_logger.warning.call_args
assert call_kwargs.kwargs.get("depth") is not None

def test_list_recursion_respects_depth_limit(self) -> None:
"""Deeply nested lists stop at max depth without RecursionError."""
Expand Down
Loading