Agent Reach Version Synchronization Requirements: pyproject.toml, __init__.py, and test_cli.py
Agent Reach requires the version string to be synchronized across three files—pyproject.toml, agent_reach/__init__.py, and tests/test_cli.py—to ensure consistent versioning across packaging, runtime, and CLI outputs.
In the Panniantong/Agent-Reach repository, maintaining identical version identifiers prevents mismatched release information and CI failures. The package relies on a manual triple-point validation system where build metadata, runtime constants, and test assertions must contain the exact same version string.
The Three Critical Files
Agent Reach enforces version consistency through three specific locations. Each serves a distinct purpose in the package lifecycle, and divergence between them causes immediate test failures.
pyproject.toml (Build Metadata)
The pyproject.toml file at the repository root defines the build metadata consumed by Hatchling. At line 3, the version declaration determines what pip and package indexes publish:
[project]
version = "1.5.0"
This static assignment controls the wheel version and PyPI distribution artifacts.
agent_reach/init.py (Runtime Constant)
The agent_reach/__init__.py file exposes the __version__ runtime constant at line 4:
__version__ = "1.5.0"
Downstream code accesses this via agent_reach.__version__, and the CLI imports this constant to generate its --version output.
tests/test_cli.py (Verification Suite)
The test suite validates synchronization through tests/test_cli.py. The TestCLI.test_version method (lines 15–22) executes the CLI and asserts that the output contains the expected version pattern:
def test_version(self, capsys):
with pytest.raises(SystemExit) as exc_info:
with patch("sys.argv", ["agent-reach", "version"]):
main()
assert exc_info.value.code == 0
captured = capsys.readouterr()
assert "Agent Reach v" in captured.out
This test ensures that the runtime version matches the user-facing CLI output, preventing releases where the build and runtime versions diverge.
How Version Propagation Works
The version flows through the codebase in a specific chain that creates testable dependencies:
pyproject.tomldeclares the static version for Hatchling buildsagent_reach/__init__.pystores the runtime constant imported by the CLIagent_reach/cli.py(line 58) registers the--versionargument using the__version__constant:
parser.add_argument(
"--version",
action="version",
version=f"Agent Reach v{__version__}"
)
When users execute agent-reach version, the CLI prints Agent Reach v1.5.0 by reading directly from __init__.py. Because the test suite verifies this output against the actual runtime behavior, any discrepancy between the build metadata and runtime code immediately surfaces as a test failure.
Practical Synchronization Examples
When releasing a new version, update all three locations simultaneously:
In pyproject.toml:
[project]
version = "1.6.0"
__version__ = "1.6.0"
Verification via CLI:
$ agent-reach version
Agent Reach v1.6.0
The test suite automatically confirms alignment. If the CLI output does not match the expected pattern, pytest will report the assertion failure in test_cli.py, preventing release of inconsistent artifacts.
Summary
- Three files must match:
pyproject.toml(build),agent_reach/__init__.py(runtime), andtests/test_cli.py(verification) - Single source of truth: While
pyproject.tomlcontrols packaging,__init__.pycontrols runtime behavior - Test enforcement: The
test_versiontest intests/test_cli.pyguarantees that CLI output matches the package version - Failure mode: Divergent versions cause CI failures and user confusion when
pipreports one version butagent-reach --versionreports another
Frequently Asked Questions
What happens if pyproject.toml and init.py versions diverge?
The package will build with one version (from pyproject.toml) but report a different version at runtime (from __init__.py). This causes the test_version test in tests/test_cli.py to fail because the CLI output will not match the expected pattern, blocking the release pipeline and preventing inconsistent deployments.
Why does Agent Reach use manual version synchronization instead of dynamic versioning?
The repository uses static version strings in all three locations to maintain explicit, readable version declarations. While tools like hatch-vcs can automate versioning from Git tags, the Panniantong/Agent-Reach codebase prefers explicit synchronization to ensure that the runtime __version__, build metadata, and test assertions remain perfectly aligned without additional build dependencies.
How do I update the version for a new release?
Update the version string in all three locations simultaneously: modify version in pyproject.toml (line 3), __version__ in agent_reach/__init__.py (line 4), and verify that tests/test_cli.py expects the new version in its assertion. Run the test suite to confirm pytest passes the version check before committing the release.
Where does the CLI read its version information?
The CLI implementation in agent_reach/cli.py imports __version__ directly from agent_reach/__init__.py and passes it to the argparse --version action at line 58. This ensures that agent-reach --version always reflects the runtime constant rather than the build metadata, creating a dependency that tests enforce.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →