Hmbown/CodeWhale · error · ValueError
version must be a semantic release identifier
Error message
version must be a semantic release identifier
What it means
CodewhaleHarness._validate_config() fullmatches config.version against ^[0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?$ — three numeric segments with an optional prerelease/build tail and no leading 'v'. The version selects the GitHub release the harness installs and pins the stream-json schema it expects (default 0.9.1), so malformed values fail fast in setup() and launch() instead of mid-rollout.
Source
Thrown at integrations/verifiers-codewhale/codewhale_harness/harness.py:98
"""Preinstalled facade inside the runtime; useful for local candidate testing."""
max_turns: int | None = None
"""Optional model-step ceiling; omitted rollouts are unlimited."""
sandbox: Literal["auto", "read-only", "workspace-write", "external-sandbox"] = (
"auto"
)
"""`auto` keeps subprocess runs workspace-bound and trusts isolated runtimes."""
class CodewhaleHarness(Harness[CodewhaleHarnessConfig]):
APPENDS_SYSTEM_PROMPT = True
SUPPORTS_MCP = True
SUPPORTS_USER_SIM = False
def _validate_config(self) -> None:
if not _VERSION.fullmatch(self.config.version):
raise ValueError("version must be a semantic release identifier")
if (
self.config.max_turns is not None
and not 1 <= self.config.max_turns <= 10_000
):
raise ValueError("max_turns must be between 1 and 10000")
invalid = [
tool
for tool in self.config.disabled_tools or []
if not _TOOL.fullmatch(tool)
]
if invalid:
raise ValueError(
"disabled_tools must use Codewhale catalog identifiers: "
+ ", ".join(repr(tool) for tool in invalid)
)
@property
def binary(self) -> str:View on GitHub (pinned to 8880682c63)
Solutions
- Strip any leading 'v' and use exactly three numeric segments, e.g. '0.9.1'
- Copy the version from the config default or the release page's plain version string
- Validate with the same regex before constructing CodewhaleHarnessConfig
Example fix
# before config = CodewhaleHarnessConfig(version='v0.9.1') # after config = CodewhaleHarnessConfig(version='0.9.1')
Defensive patterns
Strategy: validation
Validate before calling
import re
_VERSION = re.compile(r'^[0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?$')
version = version[1:] if version.startswith('v') else version
if not _VERSION.fullmatch(version):
raise ValueError(f'not a semantic release: {version}')
config = CodewhaleHarnessConfig(version=version) Prevention
- Store bare three-part versions in eval configs
- Strip tag prefixes at ingestion time
- Pin only versions that exist as GitHub releases with published assets
When it happens
Trigger: version='v0.9.1' (tag-style leading v), '0.9' (missing patch segment), '0.9.1.2', 'latest', a branch name, or a commit SHA.
Common situations: Pasting release tags as displayed on GitHub (they carry the v prefix); feeding git describe output; CI injecting the checked-out ref as the version.
Related errors
- max_turns must be between 1 and 10000
- disabled_tools must use Codewhale catalog identifiers: ${",
- Invalid release tag: ${tag}
- ${name} is required
- ${names.join(" or ")} is required
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/4e425f06a89a0164.
Report an issue: GitHub.