{"record":{"id":"0619f3e74d31408a","repo":"ruvnet/ruflo","slug":"unsupported-flywheel-anchor-manifest-schema-man","errorCode":null,"errorMessage":"unsupported flywheel anchor manifest schema: ${manifest.schemaVersion}","messagePattern":"unsupported flywheel anchor manifest schema: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/cli/src/services/harness-project-anchor.ts","lineNumber":170,"sourceCode":"  options: LoadFlywheelAnchorOptions = {},\n): FlywheelAnchorSelection {\n  const root = resolve(projectRoot);\n  if (!!options.anchorPath !== !!options.anchorHash) {\n    throw new Error('anchorPath and anchorHash must be supplied together');\n  }\n  if (options.anchorPath && options.anchorHash) {\n    return toSelection(containedPath(root, options.anchorPath), options.anchorHash);\n  }\n\n  const manifestCandidate = options.manifestPath ?? DEFAULT_PROJECT_ANCHOR_MANIFEST;\n  const manifestPath = isAbsolute(manifestCandidate)\n    ? manifestCandidate\n    : resolve(root, manifestCandidate);\n  if (existsSync(manifestPath)) {\n    const containedManifest = containedPath(root, manifestPath);\n    const manifest = JSON.parse(readFileSync(containedManifest, 'utf8')) as ProjectAnchorManifest;\n    if (manifest.schemaVersion !== PROJECT_ANCHOR_MANIFEST_SCHEMA) {\n      throw new Error(`unsupported flywheel anchor manifest schema: ${manifest.schemaVersion}`);\n    }\n    if (typeof manifest.path !== 'string' || typeof manifest.sha256 !== 'string') {\n      throw new Error('flywheel anchor manifest requires path and sha256');\n    }\n    // Manifest-relative paths are easier to relocate while remaining\n    // repository-contained; project-relative paths remain supported.\n    const manifestRelative = resolve(dirname(containedManifest), manifest.path);\n    const requested = existsSync(manifestRelative) ? manifestRelative : resolve(root, manifest.path);\n    return toSelection(containedPath(root, requested), manifest.sha256);\n  }\n\n  if (isRufloRepository(root) || process.env.RUFLO_FLYWHEEL_ALLOW_BUILTIN_ANCHOR === '1') {\n    const frozen = loadFrozenHumanEval();\n    return {\n      version: frozen.version,\n      anchorRef: FROZEN_HUMAN_EVAL_HASH,\n      source: 'ruflo-built-in',\n      tasks: frozen.tasks.map((task) => ({","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/ruvnet/ruflo/blob/2602b642d92234c710ffbe96bfb33007d481ceab/v3/@claude-flow/cli/src/services/harness-project-anchor.ts#L152-L188","documentation":"The project anchor manifest (`.claude/eval/flywheel-anchor.manifest.json` by default) must declare `schemaVersion: 'ruflo.flywheel-anchor-manifest/v1'` (PROJECT_ANCHOR_MANIFEST_SCHEMA). Any other value aborts manifest processing before path resolution, so future format changes fail loudly instead of being misread.","triggerScenarios":"A manifest carrying a typo'd or future version string, or the *tasks* schema string (`ruflo.flywheel-anchor/v1`) pasted into the manifest file — the two files use different schema identifiers.","commonSituations":"Hand-writing the manifest for the first time; version upgrades introducing a v2 schema; copy-paste between the tasks file and the manifest.","solutions":["Set `schemaVersion` to exactly `ruflo.flywheel-anchor-manifest/v1`","Check the release notes of your claude-flow version if a different manifest schema identifier is expected","Regenerate the manifest with current tooling instead of hand-editing"],"exampleFix":"// before\n{ \"schemaVersion\": \"ruflo.flywheel-anchor/v1\", \"path\": \".claude/eval/tasks.json\", \"sha256\": \"sha256:…\" }\n\n// after\n{ \"schemaVersion\": \"ruflo.flywheel-anchor-manifest/v1\", \"path\": \".claude/eval/tasks.json\", \"sha256\": \"sha256:…\" }","handlingStrategy":"validation","validationCode":"import { readFileSync } from 'node:fs';\n\nconst MANIFEST_SCHEMA = 'ruflo.flywheel-anchor-manifest/v1';\n\nfunction manifestSchemaOk(file: string): boolean {\n  const manifest = JSON.parse(readFileSync(file, 'utf8'));\n  return manifest.schemaVersion === MANIFEST_SCHEMA;\n}","typeGuard":"const MANIFEST_SCHEMA = 'ruflo.flywheel-anchor-manifest/v1';\n\ninterface AnchorManifest { schemaVersion: string; path: string; sha256: string; }\n\nfunction isV1AnchorManifest(v: unknown): v is AnchorManifest {\n  return typeof v === 'object' && v !== null && (v as Record<string, unknown>).schemaVersion === MANIFEST_SCHEMA;\n}","tryCatchPattern":"try {\n  return loadEffectiveFlywheelAnchor(root, opts);\n} catch (e) {\n  if (e instanceof Error && e.message.startsWith('unsupported flywheel anchor manifest schema')) {\n    throw new Error(`Manifest schemaVersion must be 'ruflo.flywheel-anchor-manifest/v1' (got ${e.message}). Note: the tasks file uses a DIFFERENT schema string.`);\n  }\n  throw e;\n}","preventionTips":["Use 'ruflo.flywheel-anchor-manifest/v1' for the manifest and 'ruflo.flywheel-anchor/v1' for tasks — never swap them","Prefer regenerating manifests with current tooling over hand-editing","Lint schemaVersion in CI when anchor files change"],"tags":["schema","validation","anchor","manifest"],"backgroundTag":"schema-validation-failed","analyzedSha":"2602b642d92234c710ffbe96bfb33007d481ceab","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}