                               (merge-config-objects-sans-profiles (section-schema section) (conj (vec path) key) (or val1 {}) (or val2 {})))
                        (next all-keys))
                 (c/error `merge-config-objects-sans-profiles
-                         "unknown path in config"
+                         (str "unknown path " (vec (conj path key)) " in config")
                          (conj path key) (if (contains? c1 key) val1 val2) nil (if (contains? c1 key) c1 c2)))))
           c)))
 

                  (fn [cf]
                    (let [val (get cf (setting-key setting) ::setting-not-found)]
                      (if (= val ::setting-not-found)
                        (c/assertion-violation `access
                                               "setting not found"
                                               (setting-key setting) (map section-key sections) setting config)
                        val)))))

(defn section-subconfig

  (let [res (normalize&check-config-object schema profile-names config-object)]
    (if (range-error? res)
      (c/error `make-configuration
               (str "range error at path "
                    (vec (range-error-path res))
                    " in configuration map: "
                    "value "
                    (range-error-value res)
                    " should be in range "
                    (if-let [r (range-error-range res)]
                      (range-description r)
                      "<no range>")
                    " but isn't")
               res)
      (really-make-configuration res schema))))

(defn diff-configuration-objects
