HKUDS/Vibe-Trading · error · ValueError

unknown hypothesis status

Error message

unknown hypothesis status '{status}'. Allowed: {allowed}

What it means

Raised by HypothesisRegistry when a hypothesis status string does not normalize (strip+lowercase) to one of the allowed HYPOTHESIS_STATUSES values. It is a whitelist validation on an enum-like field enforced at every entry point that touches status (from_dict, create, update, search).

Solutions

  1. Check the allowed list in the error message and correct the status string (values come from HYPOTHESIS_STATUSES, e.g. active/validated/invalidated)
  2. Normalize before calling: status.strip().lower()
  3. If introducing a new status, add it to HYPOTHESIS_STATUSES in agent/src/hypotheses/registry.py and migrate stored records

Example fix

# before
registry.update(hid, status="Archieved")
# after
registry.update(hid, status="archived")
Defensive patterns

Strategy: validation

Validate before calling

from agent.src.hypotheses.registry import HYPOTHESIS_STATUSES
status = (status or '').strip().lower()
if status not in HYPOTHESIS_STATUSES:
    raise ValueError(f'pick one of {sorted(HYPOTHESIS_STATUSES)}')

Type guard

def is_valid_status(s: str) -> bool:
    return isinstance(s, str) and s.strip().lower() in HYPOTHESIS_STATUSES

Try / catch

try:
    registry.update(hid, status=status)
except ValueError as exc:
    if 'unknown hypothesis status' in str(exc):
        status = 'active'  # fallback; surface to user in UI code

Prevention

When it happens

Trigger: Calling registry.create(..., status='archieve'), update(id, status='dropped'), Hypothesis.from_dict({'status': 'Active '}) with a typo/case-mismatch, or search(status='bogus') where the string is not in the allowed status set after lowercasing.

Common situations: Hand-editing the hypotheses JSON storage with a wrong status, upgrading code where new statuses were added but stale data uses old names, or passing an unvalidated UI/API value straight into the registry.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/bd375a7fd9b57bef. Report an issue: GitHub.

Appendix: source

Thrown at agent/src/hypotheses/registry.py:78

    return set(_TOKEN_RE.findall(text.lower()))


def _new_hypothesis_id(title: str, created_at: str, existing_ids: set[str]) -> str:
    seed = f"{title.strip().lower()}|{created_at}"
    base = "hyp_" + hashlib.sha256(seed.encode("utf-8")).hexdigest()[:12]
    if base not in existing_ids:
        return base
    idx = 2
    while f"{base}_{idx}" in existing_ids:
        idx += 1
    return f"{base}_{idx}"


def _validate_status(status: str) -> str:
    normalized = str(status).strip().lower()
    if normalized not in _STATUS_SET:
        allowed = ", ".join(HYPOTHESIS_STATUSES)
        raise ValueError(f"unknown hypothesis status '{status}'. Allowed: {allowed}")
    return normalized


@dataclass
class Hypothesis:
    """A research hypothesis tracked across analysis and backtests.

    Attributes:
        hypothesis_id: Stable registry identifier.
        title: Short human-readable title.
        thesis: Research thesis or rationale.
        status: Lifecycle status.
        universe: Target universe, market, or asset set.
        signal_definition: Signal logic in plain text.
        data_sources: Data sources expected or used.
        skills: Relevant Vibe-Trading skills.
        run_cards: Linked backtest/run-card artifacts.
        invalidation_notes: Notes describing rejection or invalidation logic.

View on GitHub (pinned to 80ffdda44c)