dagger/dagger · error

unknown config key %q; valid fields at this level: %s

Error message

unknown config key %q; valid fields at this level: %s

What it means

Reflection-based guard in validateKeyAgainstType: the first path segment does not match any TOML field on the target type. Unlike setConfigValue's static switch, this validates set/unset keys against the struct's TOML tags and lists the valid field names to guide correction.

Source

Thrown at core/workspace/config.go:1336

			pm.BackendPort = int(port)
		default:
			return fmt.Errorf("unknown config key %q", strings.Join(parts, "."))
		}
		cfg.Ports[host] = pm
		return nil
	default:
		return fmt.Errorf("unknown config key %q", strings.Join(parts, "."))
	}
}

func validateKeyAgainstType(parts []string, t reflect.Type, fullKey, op string) error {
	if len(parts) == 0 {
		return nil
	}

	field, ok := findTOMLField(t, parts[0])
	if !ok {
		return fmt.Errorf("unknown config key %q; valid fields at this level: %s",
			fullKey, strings.Join(validTOMLFieldNames(t), ", "))
	}

	rest := parts[1:]
	fieldType := field.Type
	for fieldType.Kind() == reflect.Ptr {
		fieldType = fieldType.Elem()
	}

	switch fieldType.Kind() {
	case reflect.Map:
		if len(rest) == 0 {
			return fmt.Errorf("cannot %s %q directly; specify a sub-key", op, fullKey)
		}

		mapValueRest := rest[1:]
		elemType := fieldType.Elem()
		if elemType.Kind() == reflect.Struct {

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Pick one of the listed valid fields
  2. Fix spelling of the intended field name
  3. Quote segments that contain dots
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at core/workspace/config.go:1336 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/ad23474a4b8c501e. Report an issue: GitHub.