                          ORDER BY n.name
                        ")]
     (standard-validation "STB12" res true "The technology does not use improper logging techniques.")))
+
+(defn- stb14-search-during-bootstrap
+  []
+  (let [res (cy/tquery "
+                         START n=NODE(*)
+                         MATCH (n)-->(m)
+                         WHERE HAS(n.name)
+                           AND HAS(m.name)
+                           AND m.name IN [
+                                           'org.alfresco.service.cmr.search.SearchService',
+                                           'org.alfresco.service.cmr.search.ResultSet'
+                                         ]
+                        RETURN n.name AS ClassName, COLLECT(DISTINCT m.name) AS APIs
+                         ORDER BY n.name
+                       ")]
+  (standard-validation "STB14" res true "The technology does not use the Search APIs." #(if (empty? %) true nil))))
+
+(defn- stb18-prefer-automatic-transactions
+  []
+  (let [res (cy/tquery "
+                         START n=NODE(*)
+                         MATCH (n)-->(m)
+                         WHERE HAS(n.name)
+                           AND HAS(m.name)
+                           AND m.name IN [
+                                          'org.alfresco.repo.transaction.RetryingTransactionHelper',
+                                          'org.alfresco.service.transaction.TransactionService'
+                                         ]
+                        RETURN n.name AS ClassName, COLLECT(DISTINCT m.name) AS APIs
+                         ORDER BY n.name
+                       ")]
+    (standard-validation "STB18" res false "The technology does not manually demarcate transactions.")))
 
 (defn validate
   "Runs all binary-based validations."

                       ")]
    (standard-validation "STB06" res false "The technology does not use the TransactionService.")))


(defn- stb18-prefer-automatic-transactions
  []
  (let [res (cy/tquery "
                         START n=NODE(*)
                         MATCH (n)-->(m)
                         WHERE HAS(n.name)
                           AND HAS(m.name)
                           AND m.name IN [
                                          'org.alfresco.repo.transaction.RetryingTransactionHelper',
                                          'org.alfresco.service.transaction.TransactionService'
                                         ]
                        RETURN n.name AS ClassName, COLLECT(DISTINCT m.name) AS APIs
                         ORDER BY n.name
                       ")]
    (standard-validation "STB18" res false "The technology does not manually demarcate transactions.")))

(defn- stb10-threading
  []

      (declare-result "COM09" true "The technology does not use the Search APIs.")
      (declare-result "COM09" message))))

(defn- sec02-minimise-manual-authentication
  []
  (let [res (cy/tquery "
                         START n=NODE(*)
