diff --git a/decnet/profiler/behave_shell/__init__.py b/decnet/profiler/behave_shell/__init__.py index d8a2988b..420ced05 100644 --- a/decnet/profiler/behave_shell/__init__.py +++ b/decnet/profiler/behave_shell/__init__.py @@ -15,4 +15,11 @@ from decnet.profiler.behave_shell.extract import ( extract_session, ) -__all__ = ["DEFAULT_SOURCE", "build_context", "extract_session"] +# Phase H.5-pre: extractor is feature-complete (37/37 Tier-A primitives +# emit; calibration grid honest). The ``-pre`` suffix stays until +# ``BEHAVE-INTEGRATION.md`` Phase 4 lands the worker wiring + observations +# table writes + AttackerDetail panel; only then does H.5 proper drop the +# suffix and tag v0. +__version__ = "0.1.0-pre" + +__all__ = ["DEFAULT_SOURCE", "build_context", "extract_session", "__version__"] diff --git a/tests/profiler/behave_shell/test_version_marker.py b/tests/profiler/behave_shell/test_version_marker.py new file mode 100644 index 00000000..1c8fe9b8 --- /dev/null +++ b/tests/profiler/behave_shell/test_version_marker.py @@ -0,0 +1,26 @@ +"""Step H.5-pre: extractor ``__version__`` marker. + +The version marker is the engine's own identifier; it does NOT need +to track ``decnet-behave-shell`` (the spec library) — they version +independently. v0 of the spec is already shipped; v0 of the engine +ships once worker wiring lands. +""" +from __future__ import annotations + +import re + +import decnet.profiler.behave_shell as behave_shell + + +def test_version_marker_present_and_well_formed() -> None: + assert hasattr(behave_shell, "__version__"), ( + "decnet.profiler.behave_shell must export __version__" + ) + assert re.match(r"^0\.1\.0(?:-pre)?$", behave_shell.__version__), ( + f"unexpected version: {behave_shell.__version__!r}; " + "expected 0.1.0 or 0.1.0-pre" + ) + + +def test_version_in_dunder_all() -> None: + assert "__version__" in behave_shell.__all__