                                   (.state custard)
                                   c/requirements)
                          [])]
-    {:value (mapv #(select-keys % query) requirements)}))
+    {:value (mapv #(select-keys % (extract-keys query))
+                  requirements)}))
 
 (defmethod readf :components
   [{:keys [custard query]} _ {:keys [state]}]

(defmethod readf :states
  [{:keys [custard query]} _ _]
  {:value (into []
                (map #(select-keys % query))
                (.states custard))})

(defmethod readf :state
  [{:keys [custard query]} _ {:keys [state]}]
  (let [state (.state custard (second state))]
    {:value (when state (select-keys state query))}))

(defmethod readf :project
  [{:keys [custard]} _ {:keys [state]}]
  {:value (or (some->> state
                       second
                       (.state custard)
                       c/project)
              nil)})

(defmethod readf :requirements
  [{:keys [custard query]} _ {:keys [state]}]

                          (.state custard)
                          c/tags)
                 [])]
    {:value (mapv #(select-keys % (extract-keys query))
                  tags)}))

(def parser (om/parser {:read readf :mutate mutatef}))
