{"record":{"id":"a912c63a8d67cf64","repo":"deepseek-ai/deepseek-harness","slug":"agent-presets-preset-presetid-failed-to-moun-a912c6","errorCode":null,"errorMessage":"agent-presets: preset \"${presetId}\" failed to mount: composition file is unreadable: ${preset.path}","messagePattern":"agent-presets: preset \"(.+?)\" failed to mount: composition file is unreadable: (.+?)","errorType":"exception","errorClass":"PresetMountError","httpStatus":null,"severity":"error","filePath":"packages/preset/agent-presets/src/index.ts","lineNumber":522,"sourceCode":"      // roots — and the settings-page authoring flow turns \"a composition\n      // changed\" into a per-save event. This needs a joined-agent count on\n      // StandingMount, incremented in `mount`/`composeFrom`/`recompose` and\n      // decremented when the agent's scope key dies.\n      // Guarded delete: a caller that raced this one may have already started\n      // the next generation, and dropping THAT pointer would fork a third.\n      if (this.standing.get(preset.id) === pending) this.standing.delete(preset.id)\n      return this.ensureStanding(preset)\n    }\n    const created = (async (): Promise<StandingMount> => {\n      const key: ScopeKey = { agentPreset: preset.id }\n      const scope = createScope(this.selfCtx, key)\n      try {\n        // Stamped before the file is read: an edit racing the mount makes the\n        // stamp stale rather than silently current, so the next session\n        // refreshes instead of trusting a composition older than its stamp.\n        const stamp = await compositionStamp(preset.path)\n        if (stamp === undefined) {\n          throw new PresetMountError(preset.id, `composition file is unreadable: ${preset.path}`)\n        }\n        await mountPreset(scope.ctx, preset)\n        return { key, scope, stamp }\n      } catch (error) {\n        this.standing.delete(preset.id)\n        await scope.dispose()\n        throw error\n      }\n    })()\n    this.standing.set(preset.id, created)\n    return created\n  }\n}\n\n/** The composition file identity one standing generation was mounted from. */\ninterface CompositionStamp {\n  /** Modification time in milliseconds, as `stat` reports it. */\n  readonly mtimeMs: number","sourceCodeStart":504,"sourceCodeEnd":540,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/preset/agent-presets/src/index.ts#L504-L540","documentation":"Error \"agent-presets: preset \"${presetId}\" failed to mount: composition file is unreadable: ${preset.path}\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/preset/agent-presets/src/index.ts:522 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the preset's composition file path and permissions."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}