{"record":{"id":"15207b3b8f689105","repo":"Kong/insomnia","slug":"ruleset-at-absolute-must-be-an-object-at-the-to","errorCode":null,"errorMessage":"Ruleset at ${absolute} must be an object at the top level.","messagePattern":"Ruleset at (.+?) must be an object at the top level\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/insomnia/src/main/bundle-spectral-ruleset.ts","lineNumber":48,"sourceCode":"  }\n  if (visited.has(absolute)) {\n    throw new Error(`\"extends\" cycle detected at ${absolute}`);\n  }\n  if (!ALLOWED_EXTENSIONS.includes(path.extname(absolute).toLowerCase())) {\n    throw new Error(`\"extends\" target must be a .yaml or .yml file: ${absolute}`);\n  }\n  const rel = path.relative(rootDir, absolute);\n  if (rel.startsWith('..') || path.isAbsolute(rel)) {\n    throw new Error(`\"extends\" target must stay within the ruleset's root directory: ${absolute}`);\n  }\n}\n\n// Reads a local ruleset file from disk and parses it.\nasync function readRuleset(absolute: string): Promise<Ruleset> {\n  const raw = await fs.promises.readFile(absolute, { encoding: 'utf8' });\n  const parsed = YAML.parse(raw);\n  if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n    throw new Error(`Ruleset at ${absolute} must be an object at the top level.`);\n  }\n  return parsed as Ruleset;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n// Shallow-merges top-level keys from source into target.\n// Object values (e.g. \"rules\") are merged one level deep with source taking precedence.\n// Scalar values are overwritten by source.\nfunction mergeInto(target: Ruleset, source: Ruleset): void {\n  for (const key of Object.keys(source)) {\n    const sourceVal = source[key];\n    const targetVal = target[key];\n    target[key] = isPlainObject(targetVal) && isPlainObject(sourceVal) ? { ...targetVal, ...sourceVal } : sourceVal;\n  }\n}","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/Kong/insomnia/blob/d9bb2b0142600f21309832daea3317942d285984/packages/insomnia/src/main/bundle-spectral-ruleset.ts#L30-L66","documentation":"Error \"Ruleset at ${absolute} must be an object at the top level.\" thrown in Kong/insomnia.","triggerScenarios":"Thrown at packages/insomnia/src/main/bundle-spectral-ruleset.ts:48 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d9bb2b0142600f21309832daea3317942d285984","analyzedAt":"2026-08-26T18:04:05.187Z","schemaVersion":2},"datasetVersion":"2026-08-26T21:11:00.512Z"}