plandex-ai/plandex · error

error getting org default settings: %v

Error message

error getting org default settings: %v

What it means

When a plan has no (or empty) settings.json, GetPlanSettings falls back to GetOrgDefaultSettings(plan.OrgId). If that org-defaults lookup errors, it is wrapped here. It is a fallback-path failure: the plan's own settings were absent and reading org defaults also failed.

Source

Thrown at app/server/db/settings_helpers.go:40

	if err != nil {
		return nil, fmt.Errorf("error getting custom models: %v", err)
	}

	defer func() {
		if settings != nil {
			settings.Configure(result.CustomModelPacks, result.CustomModels, result.CustomProviders, os.Getenv("PLANDEX_CLOUD") != "")
		}
	}()

	bytes, err := os.ReadFile(settingsPath)

	if os.IsNotExist(err) || len(bytes) == 0 {
		log.Printf("GetPlanSettings - no settings file found for plan %s - checking org defaults", plan.Id)
		// see if org has default settings
		defaultSettings, err := GetOrgDefaultSettings(plan.OrgId)

		if err != nil {
			return nil, fmt.Errorf("error getting org default settings: %v", err)
		}

		if defaultSettings != nil {
			log.Printf("GetPlanSettings - found org default settings for plan %s", plan.Id)
			return defaultSettings, nil
		} else {
			log.Printf("GetPlanSettings - no org default settings found for plan %s", plan.Id)
		}

		log.Println("GetPlanSettings - no default settings found, returning default settings object")
		// if it doesn't exist, return default settings object
		settings = &shared.PlanSettings{
			UpdatedAt:     plan.CreatedAt,
			ModelPackName: shared.DefaultModelPack.Name,
		}
		return settings, nil
	} else if err != nil {
		return nil, fmt.Errorf("error reading settings file: %v", err)

View on GitHub (pinned to e2d772072e)

Solutions

  1. Unwrap the inner error and fix the underlying GetOrgDefaultSettings failure.
  2. Check database connectivity if org defaults are DB-backed.
  3. Verify plan.OrgId is correct and its org exists.
  4. As a workaround, create the plan's settings.json explicitly so the fallback path isn't taken.
Defensive patterns

Strategy: fallback

Try / catch

settings, err := GetPlanSettings(plan)
if err != nil && strings.Contains(err.Error(), "error getting org default settings") {
    log.Printf("org defaults unavailable for %s: %v", plan.OrgId, err)
    settings = &shared.PlanSettings{ModelPackName: shared.DefaultModelPack.Name}
}

Prevention

When it happens

Trigger: Calling GetPlanSettings when the plan's settings.json is missing or zero-length AND GetOrgDefaultSettings fails — e.g. org settings store missing/corrupt, or a database (sqlx) error during the lookup.

Common situations: Fresh plans with no per-plan settings combined with DB connectivity issues; corrupt org default settings data; wrong org id on the plan.

Related errors


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