{"record":{"id":"e357cd2b8d15c109","repo":"mastra-ai/mastra","slug":"subconscious-pins-maxcharacters-must-be-an-integer","errorCode":null,"errorMessage":"Subconscious pins.maxCharacters must be an integer between 1 and ${MAX_PINNED_MAX_CHARACTERS}.","messagePattern":"Subconscious pins\\.maxCharacters must be an integer between 1 and (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/memory/src/processors/observational-memory/subconscious/index.ts","lineNumber":126,"sourceCode":"    const pins =\n      config.pins === undefined || config.pins === false\n        ? false\n        : {\n            maxPins: (config.pins === true ? undefined : config.pins.maxPins) ?? DEFAULT_MAX_PINS,\n            maxCharacters:\n              (config.pins === true ? undefined : config.pins.maxCharacters) ?? DEFAULT_PINNED_MAX_CHARACTERS,\n            capturePinning: (config.pins === true ? undefined : config.pins.capturePinning) ?? false,\n          };\n    if (pins !== false) {\n      if (!Number.isInteger(pins.maxPins) || pins.maxPins < 1) {\n        throw new Error('Subconscious pins.maxPins must be a positive integer.');\n      }\n      if (\n        !Number.isInteger(pins.maxCharacters) ||\n        pins.maxCharacters < 1 ||\n        pins.maxCharacters > MAX_PINNED_MAX_CHARACTERS\n      ) {\n        throw new Error(\n          `Subconscious pins.maxCharacters must be an integer between 1 and ${MAX_PINNED_MAX_CHARACTERS}.`,\n        );\n      }\n    }\n\n    if (\n      config.curationCadence !== undefined &&\n      (!Number.isInteger(config.curationCadence) || config.curationCadence < 1)\n    ) {\n      throw new Error('Subconscious curationCadence must be a positive integer.');\n    }\n\n    this.config = Object.freeze({ ...config, observation: [...observation], reflection: [...reflection] });\n    this.resolved = Object.freeze({\n      observation: observation.map(entry =>\n        entryName(entry) === 'remind'\n          ? resolveAgent(entry, BUILT_IN_OBSERVATION, config.model, maxSteps)\n          : resolveExtractor(entry),","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/memory/src/processors/observational-memory/subconscious/index.ts#L108-L144","documentation":"When pins are enabled, pins.maxCharacters limits each pinned record's character budget and must be an integer within [1, MAX_PINNED_MAX_CHARACTERS]. Values outside that range throw at construction. The default (DEFAULT_PINNED_MAX_CHARACTERS) applies only when maxCharacters is undefined.","triggerScenarios":"Configuring pins: { maxCharacters: 0 }, a negative number, a float, or a value exceeding MAX_PINNED_MAX_CHARACTERS; passing a string from parsed JSON/env config.","commonSituations":"Trying to shrink prompts to near-zero and setting 0; setting a huge budget above the hard cap; string values from env-derived configuration.","solutions":["Set maxCharacters to an integer between 1 and MAX_PINNED_MAX_CHARACTERS.","Omit maxCharacters to use DEFAULT_PINNED_MAX_CHARACTERS.","Coerce and validate with Number.isInteger before constructing Subconscious."],"exampleFix":"// before\nnew Subconscious({ pins: { maxPins: 10, maxCharacters: 0 } })\n// after\nnew Subconscious({ pins: { maxPins: 10, maxCharacters: 2000 } })","handlingStrategy":"validation","validationCode":"const mc = config.pins === true ? undefined : config.pins?.maxCharacters;\nif (mc !== undefined && (!Number.isInteger(mc) || mc < 1 || mc > MAX_PINNED_MAX_CHARACTERS)) {\n  throw new Error(`maxCharacters must be an integer between 1 and ${MAX_PINNED_MAX_CHARACTERS}`);\n}","typeGuard":"function isValidMaxCharacters(v: unknown): v is number {\n  return Number.isInteger(v) && (v as number) >= 1 && (v as number) <= MAX_PINNED_MAX_CHARACTERS;\n}","tryCatchPattern":"try {\n  const sub = new Subconscious(config);\n} catch (err) {\n  if (err.message.includes('maxCharacters')) {\n    throw new ConfigError('pins.maxCharacters out of range in Subconscious config');\n  } else throw err;\n}","preventionTips":["Omit maxCharacters to use the library default instead of guessing a value.","Clamp user input to [1, MAX_PINNED_MAX_CHARACTERS] in UI/config surfaces.","Reject string values at config parse time."],"tags":["configuration","validation","subconscious"],"backgroundTag":"range-validation-failed","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}