deepseek-ai/deepseek-harness · error · PresetMountError

agent-presets: preset "${presetId}" failed to mount: composi

Error message

agent-presets: preset "${presetId}" failed to mount: composition file is unreadable: ${preset.path}

What it means

Error "agent-presets: preset "${presetId}" failed to mount: composition file is unreadable: ${preset.path}" thrown in deepseek-ai/deepseek-harness.

Source

Thrown at packages/preset/agent-presets/src/index.ts:522

      // roots — and the settings-page authoring flow turns "a composition
      // changed" into a per-save event. This needs a joined-agent count on
      // StandingMount, incremented in `mount`/`composeFrom`/`recompose` and
      // decremented when the agent's scope key dies.
      // Guarded delete: a caller that raced this one may have already started
      // the next generation, and dropping THAT pointer would fork a third.
      if (this.standing.get(preset.id) === pending) this.standing.delete(preset.id)
      return this.ensureStanding(preset)
    }
    const created = (async (): Promise<StandingMount> => {
      const key: ScopeKey = { agentPreset: preset.id }
      const scope = createScope(this.selfCtx, key)
      try {
        // Stamped before the file is read: an edit racing the mount makes the
        // stamp stale rather than silently current, so the next session
        // refreshes instead of trusting a composition older than its stamp.
        const stamp = await compositionStamp(preset.path)
        if (stamp === undefined) {
          throw new PresetMountError(preset.id, `composition file is unreadable: ${preset.path}`)
        }
        await mountPreset(scope.ctx, preset)
        return { key, scope, stamp }
      } catch (error) {
        this.standing.delete(preset.id)
        await scope.dispose()
        throw error
      }
    })()
    this.standing.set(preset.id, created)
    return created
  }
}

/** The composition file identity one standing generation was mounted from. */
interface CompositionStamp {
  /** Modification time in milliseconds, as `stat` reports it. */
  readonly mtimeMs: number

View on GitHub (pinned to b150a551b8)

Solutions

  1. Fix the preset's composition file path and permissions.

When it happens

Trigger: Thrown at packages/preset/agent-presets/src/index.ts:522 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24). Data as JSON: /api/errors/a912c63a8d67cf64. Report an issue: GitHub.