# deploynator: _toml

*Community 1 | 6 files | cohesion 0.36*

## Definition

This community groups 6 file(s) rooted at `deploynator` with dominant language py (cohesion 0.36). Central symbols: `DocsRunner`, `TestBDDDeployScenarios`, `TestBDDPipeline`, `TestDocsRunner`, `TestRunner`, `TestTestRunner`, `TestTomlConfig`, `TomlConfig`. Core file: `tests/test_runner.py` (15 symbols). Documented purpose: BDD-style tests for deploynator using behavior-driven patterns.  Feature: Multi-platform deployment As a developer I want to deploy my project to multiple git p.

## Files

| File | Language | Layer | Symbols | Doc |
|------|----------|-------|---------|-----|
| `deploynator/_docs.py` | py | utility | 3 | no |
| `deploynator/_runner.py` | py | utility | 3 | no |
| `deploynator/_toml.py` | py | utility | 4 | no |
| `tests/bdd_test_deploy.py` | py | testing | 10 | yes |
| `tests/test_runner.py` | py | testing | 15 | yes |
| `tests/test_toml.py` | py | testing | 8 | yes |

## Key Symbols

- `DocsRunner` (class, `deploynator/_docs.py:10`) `class DocsRunner`
- `__init__` (method, `deploynator/_docs.py:11`) `def __init__(self, config)`
- `run` (method, `deploynator/_docs.py:14`) `def run(self, project_path, toml)`
- `TestRunner` (class, `deploynator/_runner.py:11`) `class TestRunner`
- `__init__` (method, `deploynator/_runner.py:12`) `def __init__(self, config)`
- `run` (method, `deploynator/_runner.py:15`) `def run(self, project_path, toml)`
- `TomlConfig` (class, `deploynator/_toml.py:14`) `class TomlConfig`
- `__post_init__` (method, `deploynator/_toml.py:30`) `def __post_init__(self)`
- `_clamp_timeout` (function, `deploynator/_toml.py:38`) `def _clamp_timeout(value)`
- `load_toml_config` (function, `deploynator/_toml.py:46`) `def load_toml_config(project_path)`
- `TestBDDDeployScenarios` (class, `tests/bdd_test_deploy.py:28`) `class TestBDDDeployScenarios`
- `project` (method, `tests/bdd_test_deploy.py:30`) `def project(self)`
- `test_version_bump_by_commit_type` (method, `tests/bdd_test_deploy.py:46`) `def test_version_bump_by_commit_type(self, project, commit_type, expected_bump,`
- `test_conventional_commit_parsing` (method, `tests/bdd_test_deploy.py:55`) `def test_conventional_commit_parsing(self)`
- `test_commit_message_format_is_consistent` (method, `tests/bdd_test_deploy.py:69`) `def test_commit_message_format_is_consistent(self)`
- `TestBDDPipeline` (class, `tests/bdd_test_deploy.py:84`) `class TestBDDPipeline` - Feature: Pipeline release con tests + docs + semver secuencial
- `test_tests_failure_blocks_release` (method, `tests/bdd_test_deploy.py:92`) `def test_tests_failure_blocks_release(self)` - Given tests fallan, When deploy sin --no-test, Then abort sin tag.
- `test_docs_failure_does_not_block_release` (method, `tests/bdd_test_deploy.py:120`) `def test_docs_failure_does_not_block_release(self)` - Given docs fallan, When deploy, Then continúa (solo warning).
- `test_force_bump_overrides_commit_type` (method, `tests/bdd_test_deploy.py:137`) `def test_force_bump_overrides_commit_type(self)` - Given type fix (patch), When --bump major, Then 1.2.3 -> 2.0.0.
- `test_version_is_max_file_tag` (method, `tests/bdd_test_deploy.py:144`) `def test_version_is_max_file_tag(self)` - Given file 1.2.3 y tag 1.4.0, When current, Then 1.4.0.
- `_toml` (function, `tests/test_runner.py:7`) `def _toml(commands, timeout)`
- `TestTestRunner` (class, `tests/test_runner.py:23`) `class TestTestRunner`
- `test_passing_command` (method, `tests/test_runner.py:24`) `def test_passing_command(self)`
- `test_failing_command` (method, `tests/test_runner.py:32`) `def test_failing_command(self)`
- `test_multiple_commands_stop_on_first_failure` (method, `tests/test_runner.py:41`) `def test_multiple_commands_stop_on_first_failure(self)`
- `test_empty_commands_no_tests_dir_fails` (method, `tests/test_runner.py:49`) `def test_empty_commands_no_tests_dir_fails(self)`
- `test_empty_commands_allow_no_tests_passes` (method, `tests/test_runner.py:58`) `def test_empty_commands_allow_no_tests_passes(self)`
- `test_no_shell_injection` (method, `tests/test_runner.py:73`) `def test_no_shell_injection(self)`
- `test_timeout_fails` (method, `tests/test_runner.py:87`) `def test_timeout_fails(self)`
- `test_empty_string_command_rejected` (method, `tests/test_runner.py:96`) `def test_empty_string_command_rejected(self)`

## Internal vs External Edges

- Internal resolved imports (EXTRACTED): 28
- Cross-boundary resolved imports (EXTRACTED): 30

## Connections

- [EXTRACTED] depends_on community 3 <-> 1 (strength 0.9): Extracted import edge crosses communities: deploynator/_app.py imports deploynator/_toml.py.
- [EXTRACTED] depends_on community 1 <-> 0 (strength 0.9): Extracted import edge crosses communities: deploynator/_docs.py imports deploynator/_config.py.
- [EXTRACTED] depends_on community 1 <-> 2 (strength 0.9): Extracted import edge crosses communities: tests/bdd_test_deploy.py imports deploynator/_models.py.
- [INFERRED] bridges community 4 <-> 1 (strength 0.7): Inferred cross-community bridge: deploynator/__init__.py reaches deploynator/_docs.py in 3 hops.
- [INFERRED] bridges community 2 <-> 1 (strength 0.6): Inferred cross-community bridge: tests/test_models.py reaches tests/test_runner.py in 4 hops.
- [INFERRED] bridges community 2 <-> 1 (strength 0.6): Inferred cross-community bridge: tests/test_models.py reaches tests/test_toml.py in 4 hops.
- [INFERRED] shares_context community 1 <-> 5 (strength 0.5): Inferred shared context (language py and layer utility) with no import path between community 1 (deploynator: _toml) and community 5 (orphans).

## Risks

- [taint high] `deploynator/_app.py` -> `deploynator/_toml.py` via `subprocess` (1 hops)
- [taint high] `deploynator/_app.py` -> `deploynator/_docs.py` via `subprocess` (2 hops)
- [taint high] `deploynator/_app.py` -> `deploynator/_runner.py` via `subprocess` (2 hops)
- [taint high] `deploynator/_app.py` -> `deploynator/_toml.py` via `subprocess` (1 hops)

## Open Questions

- Why do 3 file(s) lack file-level docs (e.g. `deploynator/_docs.py`)? What purpose do they serve?
- What would break if the most connected file in deploynator: _toml changed?
- Should deploynator: _toml be split, given cohesion 0.36?

## Sources

- `deploynator/_docs.py`
- `deploynator/_runner.py`
- `deploynator/_toml.py`
- `tests/bdd_test_deploy.py`
- `tests/test_runner.py`
- `tests/test_toml.py`
