                          :future-stem "otterr"}}
    "pane"
    ;; inherently singular.
-   (unify agreement-noun
-          common-noun
-          masculine-noun
-          {:synsem {:sem {:pred :pane
-                          :edible true
-                          :artifact true}
-                    :subcat {:1 {:cat :det
-                                 :number :sing
-                                 :def :def}}}})
+   {:synsem {:agr {:gender :masc}
+             :cat :noun
+             :sem {:pred :pane
+                   :edible true
+                   :artifact true}
+             :subcat {:1 {:cat :det
+                          :number :sing
+                          :def :def}}}}
    "parlare"
    (let [common1
          {:synsem {:essere false

                  :cat :noun
                  :case pronoun-acc}}

      "cipolla"
      (unify agreement-noun
             common-noun
             feminine-noun
             {:synsem {:sem {:pred :cipolla
                             :edible true
                             :animate false
                             :artifact false}}})
      
      "cercare" {:synsem {:cat :verb
                          :essere false

                                       :case case}
                              :italiano {:cat cat
                                         :case case}}))))
                 (constrain-vals-if
                  (fn [val]
                    (and (= (get-in val [:synsem :cat]) :noun)
                         (or (= (get-in val [:synsem :agr :gender]) :masc)
                             (= (get-in val [:synsem :agr :gender]) :fem))
                         (= false (get-in val [:synsem :propernoun] false))
                         (= false (get-in val [:synsem :pronoun] false))
                         (not (= '() (get-in val [:synsem :subcat] :top))))) ;; some
                  ;; some nouns e.g. "casa" may have a sense that requires no determiner (subcat = '())
                  ;; in such cases, don't apply agreement-noun.
                         
                  (fn [val]
                    (unify val agreement-noun)))

                 (constrain-vals-if
                  (fn [val]
                    (= (get-in val [:synsem :cat])
