ruvnet/RuView · error · ManifestError

manifest not found: {MANIFEST_PATH}

Error message

manifest not found: {MANIFEST_PATH}

What it means

scripts/check_fix_markers.py is the repo's fix-marker regression guard (CI gate): it reads scripts/fix-markers.json, located via MANIFEST_PATH = REPO_ROOT/scripts/fix-markers.json where REPO_ROOT is derived from the script's own location. It raises ManifestError (and exits with code 2) when that manifest file does not exist. Because the path is anchored to the script file, not the current directory, this means the file is genuinely missing from the checkout.

Source

Thrown at scripts/check_fix_markers.py:69

    return f"\033[{code}m{s}\033[0m" if _TTY else s
GREEN = lambda s: _c("32", s)
RED = lambda s: _c("31", s)
YELLOW = lambda s: _c("33", s)
DIM = lambda s: _c("2", s)
BOLD = lambda s: _c("1", s)

OK_MARK = "PASS"
BAD_MARK = "FAIL"
ARROW = "->"


class ManifestError(Exception):
    pass


def load_manifest() -> dict:
    if not MANIFEST_PATH.exists():
        raise ManifestError(f"manifest not found: {MANIFEST_PATH}")
    try:
        data = json.loads(MANIFEST_PATH.read_text(encoding="utf-8"))
    except json.JSONDecodeError as e:
        raise ManifestError(f"manifest is not valid JSON: {e}") from e
    if not isinstance(data, dict) or not isinstance(data.get("markers"), list):
        raise ManifestError("manifest must be an object with a 'markers' array")
    ids = [m.get("id") for m in data["markers"]]
    dupes = {i for i in ids if ids.count(i) > 1}
    if dupes:
        raise ManifestError(f"duplicate marker ids: {sorted(dupes)}")
    return data


def _pattern_found(text: str, pattern: str) -> bool:
    if len(pattern) >= 2 and pattern.startswith("/") and pattern.endswith("/"):
        return re.search(pattern[1:-1], text, re.MULTILINE) is not None
    return pattern in text

View on GitHub (pinned to 4685618388)

Solutions

  1. Restore the file from git: `git restore scripts/fix-markers.json` (or `git checkout HEAD -- scripts/fix-markers.json`)
  2. Confirm the file is where the script looks: `ls scripts/fix-markers.json` from the repo root
  3. If the manifest was intentionally relocated, update MANIFEST_PATH at scripts/check_fix_markers.py:37 to the new location
  4. Run the script from a full repository checkout, not a copied subtree

Example fix

# before (manifest moved to config/fix-markers.json but MANIFEST_PATH unchanged)
MANIFEST_PATH = REPO_ROOT / "scripts" / "fix-markers.json"  # ManifestError: manifest not found

# after
MANIFEST_PATH = REPO_ROOT / "config" / "fix-markers.json"
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
MANIFEST_PATH = Path("scripts/fix-markers.json")  # repo-root relative

if not MANIFEST_PATH.exists():
    raise SystemExit("scripts/fix-markers.json missing — run inside a full checkout or `git restore scripts/fix-markers.json`")

Prevention

When it happens

Trigger: Running `python scripts/check_fix_markers.py` in a tree where scripts/fix-markers.json was deleted, moved, or never fetched — for example after a refactor that relocated the manifest without updating MANIFEST_PATH, or a partial copy of the repo.

Common situations: A shallow/partial clone or a tarball extraction that skipped the manifest; someone moved or renamed fix-markers.json during reorganization; running a copied version of the script from outside a full checkout.

Related errors


AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16). Data as JSON: /api/errors/cb21ae269ec070af. Report an issue: GitHub.