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
- Restore the file from git: `git restore scripts/fix-markers.json` (or `git checkout HEAD -- scripts/fix-markers.json`)
- Confirm the file is where the script looks: `ls scripts/fix-markers.json` from the repo root
- If the manifest was intentionally relocated, update MANIFEST_PATH at scripts/check_fix_markers.py:37 to the new location
- 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
- Run the guard from a full repository checkout, not a copied subtree
- Keep scripts/fix-markers.json tracked in git so it restores with `git restore`
- If the manifest moves, update MANIFEST_PATH at scripts/check_fix_markers.py:37 in the same commit
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
- manifest is not valid JSON: {e}
- duplicate marker ids: {sorted(dupes)}
- manifest must be an object with a 'markers' array
- weights file not found: {weights_path}
- Calibration bundle {path} missing key {key!r}
AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16).
Data as JSON: /api/errors/cb21ae269ec070af.
Report an issue: GitHub.