HKUDS/Vibe-Trading · error · ValueError

manifest file {manifest_path} is missing or unreadable ({exc

Error message

manifest file {manifest_path} is missing or unreadable ({exc.strerror or 'I/O error'})

What it means

Once the manifest path passes the allowlist check, load_manifest reads the file with read_text(encoding='utf-8'); an OSError (file missing, no read permission, generic I/O error) is wrapped into ValueError including strerror. This means the path was acceptable but the file couldn't be opened/read.

Source

Thrown at agent/src/tools/strategy_discovery_tool.py:467

            way.
    """
    manifest_path = Path(str(path)).expanduser()
    try:
        resolved_manifest = manifest_path.resolve()
    except (OSError, RuntimeError) as exc:
        raise ValueError(
            f"manifest path {manifest_path} could not be resolved: {exc}"
        ) from exc
    if not _manifest_path_allowed(resolved_manifest):
        raise ValueError(
            f"manifest path {manifest_path} is outside the runtime root and "
            "the allowed run roots; place the manifest under one of them "
            "(e.g. next to the runs it lists)"
        )
    try:
        raw = manifest_path.read_text(encoding="utf-8")
    except OSError as exc:
        raise ValueError(
            f"manifest file {manifest_path} is missing or unreadable "
            f"({exc.strerror or 'I/O error'})"
        ) from exc
    try:
        parsed = json.loads(raw)
    except json.JSONDecodeError as exc:
        raise ValueError(
            f"manifest file {manifest_path} is not valid JSON: {exc.msg} "
            f"at line {exc.lineno} column {exc.colno}"
        ) from exc
    if isinstance(parsed, list):
        return parsed
    if isinstance(parsed, dict):
        runs = parsed.get("runs")
        if not isinstance(runs, list):
            raise ValueError(
                f"manifest file {manifest_path} must be a JSON object with a "
                "'runs' array or a bare JSON array of run specs"

View on GitHub (pinned to 80ffdda44c)

Solutions

  1. Verify the file exists and is readable: ls -l <path> and cat <path> from the same user running the tool
  2. Fix permissions (chmod a+r) or ownership if needed
  3. Correct the path/filename to point at the actual manifest file

Example fix

# before
core(manifest_path="runs/manifest.json")  # actual file is manifest_v2.json
# after
core(manifest_path="runs/manifest_v2.json")
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
p = Path(manifest_path)
if not p.is_file() or not p.stat().st_mode & 0o004:
    raise FileNotFoundError(f"manifest missing or unreadable: {p}")
core(manifest_path=manifest_path, ...)

Try / catch

except ValueError as e: if 'missing or unreadable' in str(e): prompt user to check the path/permissions

Prevention

When it happens

Trigger: Manifest file deleted between listing and loading; wrong filename/extension (manifest.json vs manifest.jsonl); insufficient file permissions (mode 600 owned by another user); unreadable mount.

Common situations: CI artifacts not checked out; race with a cleanup job removing run dirs; permission mismatch when the agent runs as a different user than the one who wrote the manifest.

Related errors


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