plandex-ai/plandex · error

error storing default plan config: %v

Error message

error storing default plan config: %v

What it means

Returned from the update-default-plan-config transaction when db.StoreDefaultPlanConfig fails to persist the user's default model pack config. The WithTx closure aborts and the handler responds 500 'Error updating default plan config'.

Source

Thrown at app/server/handlers/plan_config.go:143

	auth := Authenticate(w, r, true)
	if auth == nil {
		return
	}

	var req shared.UpdateDefaultPlanConfigRequest
	err := json.NewDecoder(r.Body).Decode(&req)
	if err != nil {
		log.Println("Error decoding request body: ", err)
		http.Error(w, "Error decoding request body", http.StatusBadRequest)
		return
	}

	err = db.WithTx(r.Context(), "update default plan config", func(tx *sqlx.Tx) error {

		err := db.StoreDefaultPlanConfig(auth.User.Id, req.Config, tx)
		if err != nil {
			log.Println("Error storing default plan config: ", err)
			return fmt.Errorf("error storing default plan config: %v", err)
		}

		return nil
	})

	if err != nil {
		log.Println("Error updating default plan config: ", err)
		http.Error(w, "Error updating default plan config", http.StatusInternalServerError)
		return
	}

	log.Println("UpdateDefaultPlanConfigHandler processed successfully")
}

View on GitHub (pinned to e2d772072e)

Solutions

  1. Check logs for the wrapped error to identify the exact Postgres failure
  2. Verify every model/provider/pack name in the request config still exists for the org/user before updating
  3. Retry after restoring deleted custom models/providers or sending a valid config
  4. Check DB connectivity/pool if the cause is a connection error

Example fix

// before: config references a deleted custom provider
{ "config": { "plannerModel": { "provider": "my-deleted-provider" } } }
// after: re-add the provider or use a valid one
{ "config": { "plannerModel": { "provider": "anthropic" } } }
Defensive patterns

Strategy: validation

Validate before calling

// verify referenced model/provider names still exist before updating config
const known = await client.GetCustomModels() // returns org's custom models/providers
const refs = [config.plannerModel, config.coderModel, ...]
for (const r of refs.filter(Boolean)) {
  if (r.custom && !known.models.some(m => m.ModelId === r.model)) {
    throw new Error(`config references deleted model ${r.model}`)
  }
}
await client.UpdateDefaultPlanConfig(config)

Try / catch

try {
  await client.UpdateDefaultPlanConfig(config)
} catch (err) {
  if (String(err.message).includes('error storing default plan config')) {
    // restore referenced custom models/providers or send a built-in-model config
  }
}

Prevention

When it happens

Trigger: POST to the update-default-plan-config endpoint where db.StoreDefaultPlanConfig(userId, req.Config, tx) returns a DB error: FK violation from an unknown model pack/provider in the config, oversized payload, connection failure, or deadlock.

Common situations: Client sends a config referencing custom models/providers that were deleted server-side; DB connectivity problems; concurrent updates to the same user's config deadlocking.

Related errors


AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05). Data as JSON: /api/errors/c45ece48f5999509. Report an issue: GitHub.