Simplify (kinda) implementation

Simplify (kinda) implementation

--- src/atom_finder/classifier/type-conversion.clj
+++ src/atom_finder/classifier/type-conversion.clj
@@ -3,12 +3,6 @@
         '(java.text ParseException))

 (s/defn type-conversion-atom? :- s/Bool [node :- IASTNode] false)
-
-(s/defrecord CoercionType
-    [datatype :- s/Keyword modifiers :- #{s/Keyword} size :- s/Int])
-(s/defrecord CoercionContext
-    ;[node-type :- s/Keyword context-type :- CoercionType arg-type :- CoercionType])
-    [node-type :- s/Keyword context-type arg-type])

 (s/defrecord TD ;TypeDescription
     [number-type :- s/Keyword bits :- s/Int])
@@ -37,7 +31,6 @@

 (def decl-type (into {} (map #(into [] (vals (select-keys % [1 2]))) type-components)))
 (def basic-type (into {} (map #(into [] (vals (select-keys % [0 2]))) type-components)))
-(def all-type (merge decl-type basic-type))

 (defmulti unsigned? class)
 (s/defmethod unsigned? IASTSimpleDeclaration [node] (->> node .getDeclSpecifier unsigned?))
@@ -49,19 +42,28 @@
 (s/defmethod unify-type IBasicType :- (s/maybe TD) [node] (->> node .getKind basic-type))
 (s/defmethod unify-type IASTSimpleDeclSpecifier :- (s/maybe TD) [node]
   (->> node .getType decl-type))
-(s/defmethod unify-type IASTSimpleDeclaration [node]
-  (merge (->> node .getDeclSpecifier unify-type)
-         {:unsigned? (unsigned? node)}))
 (s/defmethod unify-type IASTExpression [node]
   (merge (->> node .getExpressionType unify-type)
          {:unsigned? (unsigned? node) :val node}))
 (s/defmethod unify-type ISemanticProblem [node]
   (throw (ParseException. (str "Expression type unknown (" (class node) ")") 0)))

+(defmulti context-type class)
+(s/defmethod context-type IASTBinaryExpression [node]
+  (unify-type (.getOperand1 node)))
+(s/defmethod context-type IASTSimpleDeclaration [node]
+  (merge (->> node .getDeclSpecifier unify-type)
+         {:unsigned? (unsigned? node)}))
+
+(defmulti arg-types class)
+(s/defmethod arg-types IASTBinaryExpression [node]
+  (map unify-type [(.getOperand2 node)]))
+(s/defmethod arg-types IASTSimpleDeclaration [node]
+  (keep #(some->> % .getInitializer .getInitializerClause unify-type) (.getDeclarators node)))
+
 (s/defn bit-range :- [(s/one s/Int "lower") (s/one s/Int "upper")]
   "Which values can safely be stored in a variable with this type"
-  ([node :- IASTNode]
-   (bit-range (unsigned? node) (->> node unify-type :bits)))
+  ([type] (bit-range (:unsigned? type) (:bits type)))
   ([unsigned? :- s/Bool bits :- s/Int]
    (let [signed-range [(->> bits dec (Math/pow 2) bigint -)
                        (->> bits dec (Math/pow 2) bigint dec)]]
@@ -69,70 +71,13 @@
        (map #(- % (first signed-range)) signed-range)
        signed-range))))

-(s/defn td-range :- [(s/one s/Int "lower") (s/one s/Int "upper")] [type]
-  (bit-range (:unsigned? type) (:bits type)))
-
-;(s/defn type-conversion-declaration? :- s/Bool
-;  [node :- IASTSimpleDeclaration]
-;  (let [context-type (->> node unify-type)]
-;    (if (nil? context-type)
-;      false
-;      (let [[context-lower context-upper] (bit-range node)
-;            arg-exprs (keep #(some->> % .getInitializer .getInitializerClause) (.getDeclarators node))
-;            simple-arg-exprs (filter #(not (instance? IASTInitializerList %)) arg-exprs)
-;            arg-types (keep #(->> % .getExpressionType .getKind basic-type) simple-arg-exprs)]
-;
-;        (or
-;         ; real -> int
-;         (and (#{:int} (:number-type context-type))
-;              (any-pred? #(#{:real} (:number-type %)) arg-types))
-;
-;         ; large -> small
-;         ; signed -> unsigned (and the reverse)
-;         (any-pred? (fn [[type expr]]
-;                      (and (numeric-literal? expr)
-;                           (#{:int} (:number-type type))
-;                           (not (<= context-lower (parse-numeric-literal expr) context-upper))))
-;                    (map vector arg-types arg-exprs))
-;         )))))
-
-(defmulti unify-arg-types class)
-(s/defmethod unify-arg-types IASTBinaryExpression [node]
-  (map unify-type [(.getOperand2 node)]))
-(s/defmethod unify-arg-types IASTSimpleDeclaration [node]
-  (keep #(some->> % .getInitializer .getInitializerClause unify-type) (.getDeclarators node)))
-
-
-;(s/defn type-conversion-assignment? :- s/Bool
-;  [node :- IASTBinaryExpression]
-;  (let [context-type (->> node unify-type)]
-;    (if (nil? context-type)
-;      false
-;      (let [[context-lower context-upper] (bit-range node)
-;            arg-expr (->> node .getOperand2)
-;            arg-type (->> arg-expr unify-type)]
-;
-;        (boolean
-;         (or
-;                                        ; real -> int
-;          (and (#{:int}  (:number-type context-type))
-;               (#{:real} (:number-type arg-type)))
-;
-;                                        ; large -> small
-;                                        ; signed -> unsigned (and the reverse)
-;          (and (numeric-literal? arg-expr)
-;               (#{:int} (:number-type arg-type))
-;               (not (<= context-lower (parse-numeric-literal arg-expr) context-upper)))))
-;        ))))
-
-{:unsigned :val}
 (s/defn type-conversion? :- s/Bool
   [node]
   (try
-    (let [context-type (->> node unify-type)
-          arg-types (->> node unify-arg-types)] ; merge unsigned in
+    (let [context-type (->> node context-type)
+          arg-types (->> node arg-types)] ; merge unsigned in
       (boolean (when (and context-type (not-empty arg-types))
-                 (let [[context-lower context-upper] (td-range context-type)]
+                 (let [[context-lower context-upper] (bit-range context-type)]
                    (or
                                         ; real -> int
                     (and (#{:int} (:number-type context-type))
@@ -148,30 +93,15 @@
                     )))))
     (catch ParseException pe false) ; TODO make this more specific to unknown types
     ))
-(defn type-conversion-assignment? [x] (type-conversion? x))
-(defn type-conversion-declaration? [x] (type-conversion? x))
-
-
-(->> ;"int main() { unsigned int V1; V2 = -2; }"
- ;"int main() {float V1 = 1.99; int V2 = V1;}"
- "int V13 = 1, V14 = 2.3;"
- parse-frag
- (get-in-tree [0]) ;.getOperand1 .getExpressionType type-range
- ;type-conversion-assignment?
- ;.getDeclaration
- ;.getDeclSpecifier
- ;.getType
- ;unify-type
- ;write-ast
- )

 ; https://www.safaribooksonline.com/library/view/c-in-a/0596006977/ch04.html
 (s/defn type-conversion-atom? :- s/Bool
   "A node which can have children that implicitly convert their arguments to a different type"
   [node :- IASTNode]
   (cond
-    (instance? IASTSimpleDeclaration node) (type-conversion-declaration? node)
-    (assignment-node? node) (type-conversion-assignment? node)
+    (or (instance? IASTSimpleDeclaration node)
+        (assignment-node? node))
+           (type-conversion? node)
     :else false
     ))

@@ -185,4 +115,3 @@
   ; float < double < long double

   ; char x = (unsigned char) -12
-  ;)


Fix reflection warningg

Fix reflection warningg

--- src/clojure/clojurewerkz/cassaforte/client.clj
+++ src/clojure/clojurewerkz/cassaforte/client.clj
@@ -196,7 +196,7 @@
   "Executes built query"
   ([query prepared?]
      (execute *default-session* query prepared?))
-  ([session query prepared?]
+  ([^Session session query prepared?]
      (when *debug*
        (debug-utils/output-debug query))
      (with-session session


cleanup

cleanup

--- test/clj/just_married/api_test.clj
+++ test/clj/just_married/api_test.clj
@@ -45,14 +45,6 @@
           resp (sut/app req)]
       (is (= (-> resp :status) 200)))))

-(deftest authentication-helpers-test
-  (testing "Can happily authenticate"
-    (let [req (mock/request :get "/login" {:password "wrong"})
-          resp (sut/app req)]))
-  (testing "Not able to authenticate"
-    (let [req (mock/request :get "/login" {:password "secure-password"})
-          resp (sut/app req)])))
-
 (deftest list-of-guests-test
   (testing "No guests is empty set"
     (let [req  (mock/request :get "/api/guests")


Qualify all imports from .util

Qualify all imports from .util

This is to avoid a future collision with how "deftest" works.

--- test/irresponsible/oolong_test.clj
+++ test/irresponsible/oolong_test.clj
@@ -1,7 +1,7 @@
 (ns irresponsible.oolong-test
   (:use [midje.sweet])
   (:require [irresponsible.oolong :as o]
-            [irresponsible.oolong.util :as u :refer :all]
+            [irresponsible.oolong.util :as u]
             [clojure.tools.reader.edn :as edn]
             [clojure.java.io :refer [resource]])
   (:import [clojure.lang ExceptionInfo]
@@ -24,62 +24,62 @@
 (facts :util
   (facts :general
     (fact :using
-      (using 1 nil `identity) => 1
-      (using 1 :1 `identity) => [:1]))
+      (u/using 1 nil `identity) => 1
+      (u/using 1 :1 `identity) => [:1]))
   (facts :internal
     (with-redefs [com.stuartsierra.component/using  id
                   ; return something different to distinguish
                   com.stuartsierra.component/system-using
                   #(apply concat (map vector % %2))]
       (facts :tvnqsym?
-        (tvnqsym? 'sym) => (throws ExceptionInfo "Expected qualified symbol")
-        (tvnqsym? `twice) => `twice)
+        (u/tvnqsym? 'sym) => (throws ExceptionInfo "Expected qualified symbol")
+        (u/tvnqsym? `twice) => `twice)
       (facts :osym
-        (osym 'nonexistent/symbol)
+        (u/osym 'nonexistent/symbol)
         => (throws ExceptionInfo "Expected loadable symbol")
-        (osym 'twice)
+        (u/osym 'twice)
         => (throws ExceptionInfo "Expected loadable symbol")
-        ((osym `twice) 2) => 4)
+        ((u/osym `twice) 2) => 4)
       (facts :orun
-        (orun {:form 'non/existent})
+        (u/orun {:form 'non/existent})
         => (throws ExceptionInfo "Expected loadable symbol")
-        (orun {:form `twice :config 2}) => 4)
+        (u/orun {:form `twice :config 2}) => 4)
       (facts :osys-map
-        (osys-map {:form {}}) => {}
-        (osys-map {:form {:a `twice} :config {:a 2}}) => {:a 4})
+        (u/osys-map {:form {}}) => {}
+        (u/osys-map {:form {:a `twice} :config {:a 2}}) => {:a 4})
       (facts :orsd
-        (orsd {:form `identity :config :true}) => :true
-        (orsd {:form {:a `twice} :config {:a 2}}) => {:a 4}
-        (orsd {:form () :config :true})
+        (u/orsd {:form `identity :config :true}) => :true
+        (u/orsd {:form {:a `twice} :config {:a 2}}) => {:a 4}
+        (u/orsd {:form () :config :true})
         => (throws ExceptionInfo "Expected Reduced System Descriptor (map or symbol)"))
       (facts :osyslist
-        (osyslist {:form ['cpt `identity] :config 123})
+        (u/osyslist {:form ['cpt `identity] :config 123})
         => (throws ExceptionInfo "Expected sys")
-        (osyslist {:form ['sys `identity] :config 123}) => 123
-        (osyslist {:form ['sys `id :bar] :config  123})
+        (u/osyslist {:form ['sys `identity] :config 123}) => 123
+        (u/osyslist {:form ['sys `id :bar] :config  123})
         => [123 :bar]
-        (osyslist {:form ['sys {:a `id}] :config {:a 1}}) => {:a '(1)})
+        (u/osyslist {:form ['sys {:a `id}] :config {:a 1}}) => {:a '(1)})
       (facts :ocptlist
-        (ocptlist {:form ['sys `identity] :config 123})
+        (u/ocptlist {:form ['sys `identity] :config 123})
         => (throws ExceptionInfo "Expected cpt")
-        (ocptlist {:form ['cpt `identity] :config 123}) => 123
-        (ocptlist {:form ['cpt `id :bar] :config  123}))
+        (u/ocptlist {:form ['cpt `identity] :config 123}) => 123
+        (u/ocptlist {:form ['cpt `id :bar] :config  123}))
       (facts :olist
-        (olist {:form (list 'cpt `identity) :config 123}) => 123
-        (olist {:form (list 'sys `identity) :config 123}) => 123
-        (olist {:form (list 'sys {:a `id})  :config {:a 1}}) => {:a '(1)}
-        (olist {:form (list 'sys ())})
+        (u/olist {:form (list 'cpt `identity) :config 123}) => 123
+        (u/olist {:form (list 'sys `identity) :config 123}) => 123
+        (u/olist {:form (list 'sys {:a `id})  :config {:a 1}}) => {:a '(1)}
+        (u/olist {:form (list 'sys ())})
         => (throws ExceptionInfo "Expected a component or system list")
-        (olist {:form (list 'sys {})}) => {}
+        (u/olist {:form (list 'sys {})}) => {}
         (fact :dependencies
-          (olist {:form (list 'cpt `id :bar) :config 123})
+          (u/olist {:form (list 'cpt `id :bar) :config 123})
           => '((123) [:bar])
-          (olist {:form (list 'sys `id :bar) :config 123})
+          (u/olist {:form (list 'sys `id :bar) :config 123})
           => [123 :bar]))
       (facts :ofsd
-        (ofsd {:form `identity :config :true}) => :true
-        (ofsd {:form {:a `twice} :config {:a 2}}) => {:a 4}
-        (ofsd {:form (list 'cpt `identity) :config :true}) => :true))))
+        (u/ofsd {:form `identity :config :true}) => :true
+        (u/ofsd {:form {:a `twice} :config {:a 2}}) => {:a 4}
+        (u/ofsd {:form (list 'cpt `identity) :config :true}) => :true))))

 (facts :user-facing
   (let [config-path (resource "test.edn")


More fixes.

More fixes.

--- test/onyx/peer/killed_job_test.clj
+++ test/onyx/peer/killed_job_test.clj
@@ -12,7 +12,7 @@

 (def n-messages 15000)

-(def batch-size 1320)
+(def batch-size 20)

 (def env-config (assoc (:env-config config) :onyx/id id))

@@ -89,16 +89,16 @@
   (def workflow-2 [[:in-2 :inc] [:inc :out-2]])

   (defn inject-in-1-ch [event lifecycle]
-    {:core.async/chan in-1-chan})
+    {:core.async/chan in-chan-1})

   (defn inject-in-2-ch [event lifecycle]
-    {:core.async/chan in-2-chan})
+    {:core.async/chan in-chan-2})

   (defn inject-out-1-ch [event lifecycle]
-    {:core.async/chan out-1-chan})
+    {:core.async/chan out-chan-1})

   (defn inject-out-2-ch [event lifecycle]
-    {:core.async/chan out-2-chan})
+    {:core.async/chan out-chan-2})

   (def in-1-calls
     {:lifecycle/before-task :onyx.peer.killed-job-test/inject-in-1-ch})
@@ -112,36 +112,38 @@
   (def out-2-calls
     {:lifecycle/before-task :onyx.peer.killed-job-test/inject-out-2-ch})

-  (def lifecycles
+  (def lifecycles-1
     [{:lifecycle/task :in-1
       :lifecycle/calls :onyx.peer.killed-job-test/in-1-calls}
      {:lifecycle/task :in-1
       :lifecycle/calls :onyx.plugin.core-async/reader-calls}
-     {:lifecycle/task :in-2
-      :lifecycle/calls :onyx.peer.killed-job-test/in-2-calls}
-     {:lifecycle/task :in-2
-      :lifecycle/calls :onyx.plugin.core-async/reader-calls}
      {:lifecycle/task :out-1
       :lifecycle/calls :onyx.peer.killed-job-test/out-1-calls}
      {:lifecycle/task :out-1
-      :lifecycle/calls :onyx.plugin.core-async/writer-calls}
-     {:lifecycle/task :out-2
-      :lifecycle/calls :onyx.peer.killed-job-test/out-2-calls}
-     {:lifecycle/task :out-2
       :lifecycle/calls :onyx.plugin.core-async/writer-calls}])
+
+    (def lifecycles-2
+      [{:lifecycle/task :in-2
+        :lifecycle/calls :onyx.peer.killed-job-test/in-2-calls}
+       {:lifecycle/task :in-2
+        :lifecycle/calls :onyx.plugin.core-async/reader-calls}
+       {:lifecycle/task :out-2
+        :lifecycle/calls :onyx.peer.killed-job-test/out-2-calls}
+       {:lifecycle/task :out-2
+        :lifecycle/calls :onyx.plugin.core-async/writer-calls}])

   (def v-peers (onyx.api/start-peers 3 peer-group))

   (def j1 (:job-id (onyx.api/submit-job
                     peer-config
                     {:catalog catalog-1 :workflow workflow-1
-                     :lifecycles lifecycles
+                     :lifecycles lifecycles-1
                      :task-scheduler :onyx.task-scheduler/balanced})))

   (def j2 (:job-id (onyx.api/submit-job
                     peer-config
                     {:catalog catalog-2 :workflow workflow-2
-                     :lifecycles lifecycles
+                     :lifecycles lifecycles-2
                      :task-scheduler :onyx.task-scheduler/balanced})))

   (onyx.api/kill-job peer-config j1)
@@ -166,5 +168,5 @@
      (onyx.api/shutdown-peer v-peer))

    (onyx.api/shutdown-peer-group peer-group)
-
+
    (onyx.api/shutdown-env env)))


Fix another typo

Fix another typo


Fix #10

Fix #10

--- src/jp/nijohando/rokkaku/style/layout/pane.clj
+++ src/jp/nijohando/rokkaku/style/layout/pane.clj
@@ -35,8 +35,7 @@
      [:ul {:font-size base/small
            :margin-left base/x-small}]]]

-   [(at-media {:min-width (px 1000)
-               :max-width (px 1999)}
+   [(at-media {:min-width (px 1000)}
               [:.pane__main :.pane__main--splited
                [:main :#header {:padding-left (rem 5)
                        :padding-right (rem 5)}]]


Wrap spec expansion in ((fn [] ...))

Wrap spec expansion in ((fn [] ...))

Helps avoid JVM "method too long" errors

--- src/main/clojure/com/stuartsierra/lazytest.clj
+++ src/main/clojure/com/stuartsierra/lazytest.clj
@@ -322,12 +322,13 @@
         {:keys [contexts strategy]} opts
         children (vec decl)
         sym (gensym "c")]
-    `(let [~sym ~(if contexts
-                    (do (assert (vector? contexts))
-                        `(ContextualContainer ~contexts ~children '~m nil))
-                    `(SimpleContainer ~children '~m nil))]
-       ~(when (:name m) `(intern *ns* '~(:name m) ~sym))
-       ~sym)))
+    ;; Must wrap in a fn to avoid 'method too big' errors
+    `((fn [] (let [~sym ~(if contexts
+                     (do (assert (vector? contexts))
+                         `(ContextualContainer ~contexts ~children '~m nil))
+                     `(SimpleContainer ~children '~m nil))]
+         ~(when (:name m) `(intern *ns* '~(:name m) ~sym))
+         ~sym)))))

 (defmacro spec-do
   "Creates an assertion function consisting of arbitrary code.


Catch nested 'is' expressions

Catch nested 'is' expressions

--- src/main/clojure/com/stuartsierra/lazytest.clj
+++ src/main/clojure/com/stuartsierra/lazytest.clj
@@ -1,6 +1,8 @@
 (ns #^{:spec 'com.stuartsierra.lazytest-spec}
   com.stuartsierra.lazytest
-  (:use [clojure.contrib.find-namespaces
+  (:use [clojure.contrib.seq
+         :only (flatten)]
+        [clojure.contrib.find-namespaces
          :only (find-namespaces-in-dir)]))

 ;;; PROTOCOLS
@@ -176,29 +178,32 @@
   which will be compiled into a function.  A string will be attached
   as :doc metadata on the following assertion."
   [& assertions]
-  (let [givens (vec (reverse (filter #(::context-state-local (meta %)) (keys &env))))]
-    (loop [r [], as assertions]
-      (if (seq as)
-        (let [[doc form nxt] (if (string? (first as))
-                               [(first as) (second as) (nnext as)]
-                               [nil (first as) (next as)])
-              metadata {:doc doc,
-                        :form form
-                        :file *file*
-                        :line (:line (meta form))
-                        :locals givens}]
-          (recur (conj r (if (seq givens)
-                           `(ContextualAssertion.
-                             ~givens (fn ~givens ~form)
-                             '~metadata nil)
-                           `(SimpleAssertion.
-                             (fn [] ~form) '~metadata nil)))
-                 nxt))
-        `(SimpleContainer. ~r {:generator 'is
-                              :line ~(:line (meta &form))
-                              :file *file*
-                              :form '~&form}
-                          nil)))))
+  (if (some #(and (symbol? %) (= #'com.stuartsierra.lazytest/is (resolve %)))
+            (flatten assertions))
+    '(throw (IllegalArgumentException. "'is' expressions may not be nested"))
+    (let [givens (vec (reverse (filter #(::context-state-local (meta %)) (keys &env))))]
+      (loop [r [], as assertions]
+        (if (seq as)
+          (let [[doc form nxt] (if (string? (first as))
+                                 [(first as) (second as) (nnext as)]
+                                 [nil (first as) (next as)])
+                metadata {:doc doc,
+                          :form form
+                          :file *file*
+                          :line (:line (meta form))
+                          :locals givens}]
+            (recur (conj r (if (seq givens)
+                             `(ContextualAssertion.
+                               ~givens (fn ~givens ~form)
+                               '~metadata nil)
+                             `(SimpleAssertion.
+                               (fn [] ~form) '~metadata nil)))
+                   nxt))
+          `(SimpleContainer. ~r {:generator 'is
+                                 :line ~(:line (meta &form))
+                                 :file *file*
+                                 :form '~&form}
+                             nil))))))

 (defmacro thrown?
   "Returns true if body throws an instance of class c."


remove *read-eval* binding causing warning

--- ClojureScript/replete/src/replete/core.cljs
+++ ClojureScript/replete/src/replete/core.cljs
@@ -34,12 +34,14 @@
   (js/eval "goog.provide('cljs.user')")
   (js/eval "goog.require('cljs.core')"))

+(defn repl-read-string [line]
+  (r/read-string {:read-cond :allow :features #{:cljs}} line))
+
 (defn ^:export is-readable? [line]
   (binding [r/*data-readers* tags/*cljs-data-readers*]
     (with-compiler-env cenv
       (try
-        (binding [*read-eval* false]
-          (r/read-string {:read-cond :allow :features #{:cljs}} line))
+        (repl-read-string line)
         true
         (catch :default _
           false)))))
@@ -75,8 +77,7 @@
                                        :def-emits-var true)]
         (try
           (let [_ (when DEBUG (prn "line:" line))
-                form (binding [*read-eval* false]
-                        (r/read-string {:read-cond :allow :features #{:cljs}} line))]
+                form (repl-read-string line)]
             (if (repl-special? form)
               (case (first form)
                 in-ns (reset! current-ns (second (second form)))


Clean up dir output

Clean up dir output

--- ClojureScript/replete/src/replete/repl.cljs
+++ ClojureScript/replete/src/replete/repl.cljs
@@ -121,14 +121,24 @@
   {:pre [(symbol? ns)]}
   (get-in @st [::ana/namespaces ns]))

+(defn- ns-syms
+  "Returns a sequence of the symbols in a namespace."
+  ([ns]
+   (ns-syms ns (constantly true)))
+  ([ns pred]
+   {:pre [(symbol? ns)]}
+   (->> (get-namespace ns)
+     :defs
+     (filter pred)
+     (map key))))
+
 (defn- public-syms
   "Returns a sequence of the public symbols in a namespace."
   [ns]
   {:pre [(symbol? ns)]}
-  (->> (get-namespace ns)
-    :defs
-    (filter (comp not :private second))
-    (map key)))
+  (ns-syms ns (fn [[_ attrs]]
+                (and (not (:private attrs))
+                     (not (:anonymous attrs))))))

 (defn- get-aenv
   []
@@ -475,7 +485,7 @@
       (run! prn
         (distinct (sort (concat
                           (public-syms nsname)
-                          (public-syms (symbol (str (name nsname) "$macros"))))))))))
+                          (public-syms (add-macros-suffix nsname)))))))))

 (defn- apropos*
   [str-or-pattern]


version bumps

version bumps

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/CraZySacX/nitelens.git/'


Rename the project, add midje and json stuff

--- project.clj
+++ project.clj
@@ -1,8 +1,13 @@
-(defproject helloworld "1.0.0-SNAPSHOT"
+(defproject eventframework "1.0.0-SNAPSHOT"
   :dependencies [[org.clojure/clojure "1.4.0"]
                  [compojure "1.1.1"]
                  [ring/ring-devel "1.1.0"]
-                 [aleph "0.2.2"]]
+                 [aleph "0.2.2"]
+                 [ring/ring-json "0.1.2"]
+                 [midje "1.4.0"]]
   :min-lein-version "2.0.0"
   :plugins [[environ/environ.lein "0.2.1"]]
-  :hooks [environ.leiningen.hooks])
+  :hooks [environ.leiningen.hooks]
+  :profiles {
+    :dev {:dependencies [[ring-mock "0.1.3"]]
+          :plugins [[lein-midje "2.0.2"]]}})


Adding s3 repo

Adding s3 repo

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


added rich extractor

added rich extractor

error: pathspec 'src/crawler/rich_extractor.clj' did not match any file(s) known to git

--- src/crawler/rich_extractor.clj
+++ src/crawler/rich_extractor.clj
@@ -0,0 +1,27 @@
+(ns crawler.rich-extractor
+  "Implementation of the rich URL extractor"
+  (:require [crawler.dom :as dom]
+            [crawler.rank :as rank]
+            [org.bovinegenius [exploding-fish :as uri]]))
+
+;;;; A rich extractor performs an initial score assignment based
+;;;; on how expressive a URL is.
+
+(defn extract
+  [page-src url]
+  (let [processed-pg      (dom/html->xml-doc page-src)
+        xpaths-hrefs-text (dom/xpaths-hrefs-tokens processed-pg url)
+        host              (uri/host url)
+        in-host-xhrefs    (into
+                           {}
+                           (filter
+                            #(-> % second empty? not)
+                            (map
+                             (fn [[xpath nodes]]
+                               [xpath (filter
+                                       (fn [a-node]
+                                         (or (= host (uri/host (:href a-node)))
+                                             (nil? (uri/host (:href a-node)))))
+                                       nodes)])
+                             xpaths-hrefs-text)))]
+    (rank/rank-by-uniqueness in-host-xhrefs)))


add max-threads config also for heroku

add max-threads config also for heroku

--- src/ruuvi_server/heroku/starter.clj
+++ src/ruuvi_server/heroku/starter.clj
@@ -7,5 +7,6 @@
 (defn -main []
   (init-config)
   (start-prod {:server-port server-port
-               :database-config database-config})
+               :database-config database-config
+               :max-threads max-threads})
   )


Correct test to match refactored sms-router behavior

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/turbovote-http-api.git/'


More API tests

More API tests

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/delitescere/yada.git/'


make documentation super pretty

make documentation super pretty

--- src/metabase/db.clj
+++ src/metabase/db.clj
@@ -215,7 +215,8 @@
     (sel :many :field [User :first_name]) -> (\"Cam\" \"Sameer\" ...)

     ;; Return map(s) that only contain the specified fields.
-    (sel :one :fields [User :id :first_name]) -> ({:id 1 :first_name \"Cam\"}, {:id 2 :first_name \"Sameer\"} ...)
+    (sel :one :fields [User :id :first_name])
+      -> ({:id 1 :first_name \"Cam\"}, {:id 2 :first_name \"Sameer\"} ...)

   ENTITY may be either an entity like `User` or a vector like `[entity & field-keys]`.
   If just an entity is passed, `sel` will return `default-fields` for ENTITY.
@@ -227,10 +228,11 @@
   will be required and the symbol itself resolved at runtime. This is sometimes neccesary to avoid circular
   dependencies. This is slower, however, due to added runtime overhead.

-    (sel :one 'metabase.models.table/Table :id 1) ; require/resolve metabase.models.table/Table. Then `sel Table 1
-
-  FORMS may be either keyword args, which will be added to a korma `where` clause, or other korma
-   clauses such as `order`, which are passed directly.
+    ;; require/resolve metabase.models.table/Table. Then sel Table 1
+    (sel :one 'metabase.models.table/Table :id 1)
+
+  FORMS may be either keyword args, which will be added to a korma `where` clause, or [other korma
+  clauses](http://www.sqlkorma.com/docs#select) such as `order`, which are passed directly.

     (sel :many Table :db_id 1)                    -> (select User (where {:id 1}))
     (sel :many Table :db_id 1 (order :name :ASC)) -> (select User (where {:id 1}) (order :name ASC))"


Torrent fitxategia sortu eta magnet lotura lortu

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lnmnd/magnet.zer.git/'


reorg comments

reorg comments

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/michaelsbradleyjr/transwarp.git/'


Explicitly set config file

Explicitly set config file

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/robottokauf3/cia.git/'


Shows last descripiton for search listing even if it's a snapshot

Fixes #549

--- src/clojars/search.clj
+++ src/clojars/search.clj
@@ -74,8 +74,7 @@
                       ;; is added. We can treat it here as a nil return
                       ))]
         (if old
-          (when (and (< (Long. (:at old)) (:at doc))
-                     (not (re-find #"-SNAPSHOT$" (:version doc))))
+          (when (< (Long. (:at old)) (:at doc))
             (clucy/search-and-delete index (format "artifact-id:%s AND group-id:%s"
                                                    (:artifact-id doc)
                                                    (:group-id doc)))


Get a user list?

Get a user list?

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/coachbot.git/'


disable sourcemaps for benchmarks

disable sourcemaps for benchmarks

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JetBrains/imperative-nodejs.git/'


hard-code google election-id of 5000 - provisional

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-notification-works.git/'


shuffling test ordering to match the same order they are in the api def.

--- test/metabase/api/org_test.clj
+++ test/metabase/api/org_test.clj
@@ -68,6 +68,27 @@
       ;; Now perform the API request
       ((user->client :crowberto) :get 200 "org"))))

+
+;; ## POST /api/org
+;; Check that non-superusers can't create Orgs
+(expect "You don't have permissions to do that."
+  (let [org-name (random-name)]
+    ((user->client :rasta) :post 403 "org" {:name org-name
+                                            :slug org-name})))
+
+;; Check that superusers *can* create Orgs
+(let [org-name (random-name)]
+  (expect-eval-actual-first
+    (match-$ (sel :one Org :name org-name)
+      {:id $
+       :slug org-name
+       :name org-name
+       :description nil
+       :logo_url nil
+       :inherits false})
+    (create-org org-name)))
+
+
 ;; ## GET /api/org/:id
 (expect
     {:id @org-id
@@ -87,25 +108,6 @@
      :logo_url nil
      :inherits true}
   ((user->client :rasta) :get 200 (format "org/slug/%s" (:slug @test-org))))
-
-;; ## POST /api/org
-;; Check that non-superusers can't create Orgs
-(expect "You don't have permissions to do that."
-  (let [org-name (random-name)]
-    ((user->client :rasta) :post 403 "org" {:name org-name
-                                            :slug org-name})))
-
-;; Check that superusers *can* create Orgs
-(let [org-name (random-name)]
-  (expect-eval-actual-first
-      (match-$ (sel :one Org :name org-name)
-        {:id $
-         :slug org-name
-         :name org-name
-         :description nil
-         :logo_url nil
-         :inherits false})
-    (create-org org-name)))

 ;; # MEMBERS ENDPOINTS


[WM] add docstring to memoize-async

[WM] add docstring to memoize-async

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/electorate-works.git/'


Implement the "Usage" section.

Implement the "Usage" section.

Implement the "Usage" section of the boot-cljs README.

error: pathspec 'build.boot' did not match any file(s) known to git

--- build.boot
+++ build.boot
@@ -0,0 +1,3 @@
+(set-env! :dependencies '[[adzerk/boot-cljs "1.7.170-3" :scope "test"]])
+
+(require '[adzerk.boot-cljs :refer :all])


Liburuaren orria txukundu

Liburuaren orria txukundu

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lnmnd/magnet.bez.git/'


azalaren url-a

azalaren url-a


Code cleanup

Code cleanup

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/hudren/ebook-novel.git/'


Bumped om version to 0.1.5

Bumped om version to 0.1.5

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/brendanyounger/omkara.git/'


repos

repos

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/CraZySacX/glitter.git/'


Version 109-SNAPSHOT

Version 109-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobias/clojars-web.git/'


Upgrade API to 3.0.2

Upgrade API to 3.0.2

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


bump version to 3.0.0

bump version to 3.0.0

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-Digital/pdg-core.git/'


comments

comments

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jchli/jepsen-aurora.git/'


Make sure we update rev for documents

Make sure we update rev for documents


Remove redundant code

Remove redundant code

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Reefersleep/sleepydo.git/'


further research leads me to conclude that we *can* memoize field-id->kw, which makes the QP significantly faster

--- src/metabase/driver/generic_sql/util.clj
+++ src/metabase/driver/generic_sql/util.clj
@@ -77,11 +77,11 @@
   (if (contains? #{:DateField :DateTimeField} field-base-type) `(korma/raw ~(format "CAST(\"%s\" AS DATE)" field-name))
       (keyword field-name)))

-;; TODO - should we memoize this?
-(defn field-id->kw
+(def field-id->kw
   "Given a metabase `Field` ID, return a keyword for use in the Korma form (or a casted raw string for date fields)."
-  [field-id]
-  {:pre [(integer? field-id)]}
-  (if-let [{field-name :name, field-type :base_type} (sel :one [Field :name :base_type] :id field-id)]
-    (castify-field field-name field-type)
-    (throw (Exception. (format "Field with ID %d doesn't exist!" field-id)))))
+  (memoize                         ; This can be memozied since the names and base_types of Fields never change
+   (fn [field-id]                   ; *  if a field is renamed the old field will just be marked as `inactive` and a new Field will be created
+     {:pre [(integer? field-id)]}  ; *  if a field's type *actually* changes we have no logic in driver.generic-sql.sync to handle that case any way (TODO - fix issue?)
+     (if-let [{field-name :name, field-type :base_type} (sel :one [Field :name :base_type] :id field-id)]
+       (castify-field field-name field-type)
+       (throw (Exception. (format "Field with ID %d doesn't exist!" field-id)))))))


set default property at approval

set default property at approval

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


Refactoring - test are 100%

Refactoring - test are 100%

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/StephenBergeron/Specter.git/'


*lehenetsia*

*lehenetsia*

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lnmnd/magnet.zer.git/'


Add a more stringent precondition for timeout values in drain-into-vec!

Signed-off-by: Deepak Giridharagopal <d11186354d1ef01ca06ae37d7e23e827da13e85f@puppetlabs.com>

--- src/com/puppetlabs/mq.clj
+++ src/com/puppetlabs/mq.clj
@@ -71,7 +71,8 @@
   we consider the endpoint drained."
   [connection endpoint timeout]
   {:pre  [(string? endpoint)
-          (integer? timeout)]
+          (integer? timeout)
+          (pos? timeout)]
    :post [(vector? %)]}
   (with-open [consumer (mq-conn/seqable connection {:endpoint endpoint :timeout timeout})]
     (reduce into []


[WM] use linear-search router like other http-apis

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-notification-http-api.git/'


lsystem logic foundations

lsystem logic foundations

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/macrology-laboratory/gcljs.git/'


Shufle the keys.

Shufle the keys.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mtravers/incidents.git/'


uncomment java install

uncomment java install


Fix requirements and test arguments

Fix requirements and test arguments

--- src/riemann/xymon.clj
+++ src/riemann/xymon.clj
@@ -1,9 +1,10 @@
 (ns riemann.xymon
   "Forwards events to Xymon"
-  (:require '[clojure.java.io :as io]
-            '[clojure.string :refer [replace]])
-  (:import '(java.net Socket))
-  (:use '[riemann.common])
+  (:refer-clojure :exclude [replace])
+  (:require [clojure.java.io :as io])
+  (:import (java.net Socket))
+  (:use [riemann.common]
+	[clojure.string :only [split join replace]])
   )

 (defn format-line


Version 1.15.10-SNAPSHOT

Version 1.15.10-SNAPSHOT


Upgraded kibit.

Upgraded kibit.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/couragelabs/coachbot.git/'


updated dependencies

updated dependencies

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rcarmo/yaki-clj.git/'


adding example to test path in order to enable eval in vimclojure

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/narkisr/cloujsearch.git/'


Upgrade to clojure 1.9.0-alpha17

Upgrade to clojure 1.9.0-alpha17

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/user-http-api.git/'


Version 0.5.1

Version 0.5.1

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sablono "0.5.1-SNAPSHOT"
+(defproject sablono "0.5.1"
   :description "Lisp style templating for Facebook's React."
   :url "http://github.com/r0man/sablono"
   :author "r0man"


Version 0.3.2-SNAPSHOT

Version 0.3.2-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobiasbayer/lambdacd.git/'


add cloverage alias

add cloverage alias

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/vincentstorme/clojureme.git/'


Exclude org.apache.httpcomponents/httpclient

See: https://github.com/aws/aws-sdk-java/issues/1919

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-authority-works.git/'


Update & clean up deps

Update & clean up deps

Added some exclusions to make datomic-pro 0.9.5385 happy.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/partner-works.git/'


add compilation opts

add compilation opts

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/sbondaryev/cljs-worker.git/'


Update deps

Update deps


Use new string-based 3scale lib dep in project.clj

Everyone will need leiningen 2.8.x to use this project.clj now.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/turbovote-http-api.git/'


bump version to 2.8.4

bump version to 2.8.4

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-BIT/restQL-server.git/'


Round robin full test.

Round robin full test.

error: pathspec 'test/onyx/log/round_robin_multi_job_test.clj' did not match any file(s) known to git

--- test/onyx/log/round_robin_multi_job_test.clj
+++ test/onyx/log/round_robin_multi_job_test.clj
@@ -0,0 +1,186 @@
+(ns onyx.log.round-robin-multi-job-test
+  (:require [clojure.core.async :refer [chan >!! <!! close!]]
+            [com.stuartsierra.component :as component]
+            [onyx.system :refer [onyx-development-env]]
+            [onyx.log.entry :refer [create-log-entry]]
+            [onyx.extensions :as extensions]
+            [onyx.api :as api]
+            [midje.sweet :refer :all]
+            [zookeeper :as zk]))
+
+(def onyx-id (java.util.UUID/randomUUID))
+
+(def config (read-string (slurp (clojure.java.io/resource "test-config.edn"))))
+
+(def dev (onyx-development-env onyx-id (:env config)))
+
+(def env (component/start dev))
+
+(def peer-opts
+  {:inbox-capacity 1000
+   :outbox-capacity 1000
+   :job-scheduler :onyx.job-scheduler/round-robin})
+
+(def j1
+  (onyx.api/submit-job (:log env)
+                       {:workflow [[:a :b] [:b :c]]
+                        :catalog []
+                        :task-scheduler :onyx.task-scheduler/round-robin}))
+
+(def j2
+  (onyx.api/submit-job (:log env)
+                       {:workflow [[:d :e] [:e :f]]
+                        :catalog []
+                        :task-scheduler :onyx.task-scheduler/round-robin}))
+
+(def n-peers 36)
+
+(def v-peers (onyx.api/start-peers! onyx-id n-peers (:peer config) peer-opts))
+
+(def ch (chan n-peers))
+
+(extensions/subscribe-to-log (:log env) 0 ch)
+
+(def replica-1
+  (loop [replica {:job-scheduler (:job-scheduler peer-opts)}]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations replica) j1))) 6)
+                   (= (count (:b (get (:allocations replica) j1))) 6)
+                   (= (count (:c (get (:allocations replica) j1))) 6)
+                   (= (count (:d (get (:allocations replica) j2))) 6)
+                   (= (count (:e (get (:allocations replica) j2))) 6)
+                   (= (count (:f (get (:allocations replica) j2))) 6))
+        (recur new-replica)
+        new-replica))))
+
+(fact "6 peers are assigned to each task" true => true)
+
+(def entry (create-log-entry :complete-task {:job j2 :task :d}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-2
+  (loop [replica replica-1]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 6)
+                   (= (count (:b (get (:allocations new-replica) j1))) 6)
+                   (= (count (:c (get (:allocations new-replica) j1))) 6)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 9)
+                   (= (count (:f (get (:allocations new-replica) j2))) 9))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers rebalanced after job 2, task D completes" true => true)
+
+(def entry (create-log-entry :complete-task {:job j2 :task :e}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-3
+  (loop [replica replica-2]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 6)
+                   (= (count (:b (get (:allocations new-replica) j1))) 6)
+                   (= (count (:c (get (:allocations new-replica) j1))) 6)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 0)
+                   (= (count (:f (get (:allocations new-replica) j2))) 18))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers rebalanced after job 2, task E completes" true => true)
+
+(def entry (create-log-entry :complete-task {:job j1 :task :a}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-4
+  (loop [replica replica-3]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 0)
+                   (= (count (:b (get (:allocations new-replica) j1))) 9)
+                   (= (count (:c (get (:allocations new-replica) j1))) 9)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 0)
+                   (= (count (:f (get (:allocations new-replica) j2))) 18))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers rebalanced after job 1, task A completes" true => true)
+
+(def entry (create-log-entry :complete-task {:job j2 :task :f}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-5
+  (loop [replica replica-4]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 0)
+                   (= (count (:b (get (:allocations new-replica) j1))) 18)
+                   (= (count (:c (get (:allocations new-replica) j1))) 18)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 0)
+                   (= (count (:f (get (:allocations new-replica) j2))) 0))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers rebalanced after job 2, task F completes" true => true)
+
+(def entry (create-log-entry :complete-task {:job j1 :task :b}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-6
+  (loop [replica replica-5]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 0)
+                   (= (count (:b (get (:allocations new-replica) j1))) 0)
+                   (= (count (:c (get (:allocations new-replica) j1))) 36)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 0)
+                   (= (count (:f (get (:allocations new-replica) j2))) 0))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers rebalanced after job 1, task B completes" true => true)
+
+(def entry (create-log-entry :complete-task {:job j1 :task :c}))
+
+(extensions/write-log-entry (:log env) entry)
+
+(def replica-7
+  (loop [replica replica-6]
+    (let [position (<!! ch)
+          entry (extensions/read-log-entry (:log env) position)
+          new-replica (extensions/apply-log-entry entry replica)]
+      (if-not (and (= (count (:a (get (:allocations new-replica) j1))) 0)
+                   (= (count (:b (get (:allocations new-replica) j1))) 0)
+                   (= (count (:c (get (:allocations new-replica) j1))) 0)
+                   (= (count (:d (get (:allocations new-replica) j2))) 0)
+                   (= (count (:e (get (:allocations new-replica) j2))) 0)
+                   (= (count (:f (get (:allocations new-replica) j2))) 0))
+        (recur new-replica)
+        new-replica))))
+
+(fact "The peers stop working after job 1, task C completes" true => true)
+
+(doseq [v-peer v-peers]
+  (try
+    ((:shutdown-fn v-peer))
+    (catch Exception e (prn e))))
+
+(component/stop env)
+


add unit test

add unit test

error: pathspec 'test/babel/test/korma.clj' did not match any file(s) known to git

--- test/babel/test/korma.clj
+++ test/babel/test/korma.clj
@@ -0,0 +1,23 @@
+;; TODO: rename this - misleading name
+;; - it uses korma, but it is not itself korma.
+(ns italianverbs.test.korma
+  (:refer-clojure :exclude [test])
+  (:require [clj-time.coerce :as c]
+            [clojure.string :as string]
+            [clojure.test :refer :all]
+            [clojure.tools.logging :as log]
+            [italianverbs.korma :refer :all]
+            [korma.core :refer :all]
+            [korma.db :refer [default-connection defdb postgres]]))
+
+(require '[environ.core :refer [env]])
+
+(deftest simple
+  (let [result (exec-raw ["SELECT 1 AS retval"] :results)]
+    (is (= 1 (:retval (first result))))))
+
+
+
+
+
+


More permissive

More permissive

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


Add a type hint.

Add a type hint.

--- src/riemann/server.clj
+++ src/riemann/server.clj
@@ -133,7 +133,7 @@
   [pipeline-factory handler]
   (proxy [ChannelPipelineFactory] []
     (getPipeline []
-      (doto (pipeline-factory)
+      (doto ^ChannelPipeline (pipeline-factory)
         (.addLast "executor" (ExecutionHandler.
                               (OrderedMemoryAwareThreadPoolExecutor.
                                16 1048576 1048576))) ; Maaagic values!


start the visualization section

start the visualization section

--- ohack/src/ohack/core.clj
+++ ohack/src/ohack/core.clj
@@ -295,3 +295,7 @@
                            (parse-guitar-tab-line tab-line)))))))))))

 (play-tab fast-car-tab)
+
+
+
+;; let's now introduce quil and whip up a simple visualizater for the tab


Keys are interrogations

Keys are interrogations

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/acessocard/microscope.git/'


Refactored Jetty adapter tests

Refactored Jetty adapter tests

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/meowcakes/ring.git/'


check for :referendumText key when determining referendumness

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-notification-works.git/'


Refactor: move internal inflatable-column...

... components up outside, to achieve a more declarative root component.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Reefersleep/sleepydo.git/'


Refactor: clean up conditional animation of...

... list items. That is, clean up the conditional aspect.


An experiment

An experiment

error: pathspec 'clojure/anagrams-mutable.clj' did not match any file(s) known to git

--- clojure/anagrams-mutable.clj
+++ clojure/anagrams-mutable.clj
@@ -0,0 +1,18 @@
+; An attempt to use in-place array mutation in Clojure
+; Highly non-idiomatic. Should not be used. EXPERIMENTAL.
+; Also it is ridiculously slow. Does anyone know why?
+
+(defn generatePermutations [a n]
+  (if (zero? n)
+    (println (apply str a))
+    (doseq [i (range 0 (inc n))]
+      (generatePermutations a (dec n))
+      (let [j (if (even? n) i 0) oldn (aget a n) oldj (aget a j)]
+        (aset a n oldj) (aset a j oldn)))))
+
+(if (not= (count *command-line-args*) 1)
+  (do
+    (println "Exactly one argument is required")
+    (System/exit 1))
+  (let [word (-> *command-line-args* first vec to-array)]
+    (time (generatePermutations word (dec (count word))))))


Display keyword errors from lamina as they are, not as part of the keyword class

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/terrancesnyder/engulf.git/'


Add gen-class

Add gen-class

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mtravers/incidents.git/'


added new ndc namespace based on the official ndc data (9th edition)

error: pathspec 'src/corpus_utils/ndc.clj' did not match any file(s) known to git

--- src/corpus_utils/ndc.clj
+++ src/corpus_utils/ndc.clj
@@ -0,0 +1,31 @@
+(ns corpus-utils.ndc
+  (:require [arachne.aristotle :as aa]
+            [arachne.aristotle.query :as q]
+            [arachne.aristotle.registry :as reg]
+            [plumbing.core :refer [map-vals]]
+            [clojure.java.io :as io]
+            [clojure.string :as string]))
+
+(reg/prefix 'rdfs "http://www.w3.org/2000/01/rdf-schema#")
+(reg/prefix 'xsd "http://www.w3.org/2001/XMLSchema#")
+(reg/prefix 'dct "http://purl.org/dc/terms/")
+(reg/prefix 'skos "http://www.w3.org/2004/02/skos/core#")
+(reg/prefix 'xl "http://www.w3.org/2008/05/skos-xl#")
+(reg/prefix 'ndl "http://ndl.go.jp/dcndl/terms/")
+(reg/prefix 'ndlsh "http://id.ndl.go.jp/auth/ndlsh/")
+(reg/prefix 'ndc9 "http://jla.or.jp/data/ndc9#")
+(reg/prefix 'ndc "http://jla.or.jp/data/ndc#")
+(reg/prefix 'ndcv "http://jla.or.jp/vocab/ndcvocab#")
+
+(defn load-ndc []
+  (aa/read (aa/graph :simple) (io/resource "ndc9.ttl")))
+
+(defn create-ndc-map []
+  (into {}
+        (q/run (load-ndc)
+               '[?notation ?label]
+               '[:bgp
+                 [?concept :rdfs/label ?label]
+                 [?concept :skos/notation ?notation]])))
+
+(defonce ndc-map (map-vals #(string/split % #"(?!（)(．|--)") (create-ndc-map)))


Add implicit_old

Add implicit_old

error: pathspec 'src/angelic/search/incremental/implicit_old.clj' did not match any file(s) known to git

--- src/angelic/search/incremental/implicit_old.clj
+++ src/angelic/search/incremental/implicit_old.clj
@@ -0,0 +1,433 @@
+(ns angelic.search.incremental.implicit
+  (:require [edu.berkeley.ai.util :as util]
+            [angelic.env :as env]
+            [angelic.hierarchy :as hierarchy]
+            [angelic.hierarchy.state-set :as state-set]
+            [angelic.hierarchy.angelic :as angelic]
+            [angelic.search.incremental.core :as is]
+            [angelic.search.incremental.hierarchical :as his])
+  (:import  [java.util HashMap]))
+
+
+; Hierarchical algorithms that use implicit, set-based angelic valuations.
+; Included are algorithms for explicit valuations, as well as implicit set-vased ones.
+
+; Still have correspondence problem between pess & opt; for now, just do optimistic.
+
+; build on primitives:
+; state-set/constrain
+; angelic/can-refine-from-set? immediate-refinements-set optimistic-set-and-reward
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Utilities ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;; Angelic Hierarchical State ;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+(defrecord AngelicSAS )
+
+(defn make-angelic-sas [])
+
+(deftype AngelicHierarchicalState [in-clause actions opt-reward out-clause primitive?])
+
+(defn ahs-name
+  ([ahs] [(:in-clause ahs) (map env/action-name (:actions ahs)) (:out-clause ahs)])
+  ([ahs more-name] (conj (ahs-name ahs) more-name)))
+
+(defn ahs-solution-pair [ahs]
+  (when ahs
+   (assert (:primitive? ahs))
+   [(:actions ahs) (:opt-reward ahs)]))
+
+;(defn make-root-ahs [in-state action out-state]
+;  (AngelicHierarchicalState. state 0 [] [action]))
+
+(defn singleton-ahs-children [ahs]
+  (let [{:keys [state reward opt-sol remaining-actions]} ahs]
+    (when-let [[f & r] (seq remaining-actions)]
+      (if (env/primitive? f)
+        (when-let [[ss sr] (and (env/applicable? f state) (env/successor f state))]
+          [(AngelicHierarchicalState ss (+ reward sr) (conj opt-sol f) r)])
+        (for [ref (hierarchy/immediate-refinements f state)]
+          (AngelicHierarchicalState state reward opt-sol (concat ref r)))))))
+
+(defn combine-ahs [n1 n2 state-combiner action-combiner]
+  (AngelicHierarchicalState
+   (state-combiner       (:state n1)   (:state n2))
+   (+                    (:reward n1)  (:reward n2))
+   (into                 (:opt-sol n1) (:opt-sol n2))
+   (action-combiner      (:remaining-actions n1) (:remaining-actions n2))))
+
+;; Sub and lift -- used by recursive, inverted, saha (drop only)
+(defn ahs-first-sub-name "Name for first abstracted subproblem of ahs" [ahs]
+  (let [{[f] :remaining-actions state :state} ahs]
+    [(if *state-abstraction?* (state/extract-context state (env/precondition-context f state)) state)
+     (env/action-name f)]))
+
+(defn ahs-first-sub "First abstracted subproblem of ahs" [ahs]
+  (let [{[f] :remaining-actions state :state} ahs]
+    (make-root-ahs (env/get-logger state (if *state-abstraction?* (env/precondition-context f state) *full-context*)) f)))
+
+(defn lift-ahs "Lift child-solution into the context of parent-node, counterpart to sub."
+  [parent child]
+  (combine-ahs parent child env/transfer-effects
+               (fn [r1 r2] (util/assert-is (empty? r2)) (next r1))))
+
+
+;; Used for inverted only
+(defn adjust-ahs-reward [h r]
+  (AngelicHierarchicalState (:state h) (+ r (:reward h)) (:opt-sol h) (:remaining-actions h)))
+
+; used for saha only
+(defn first-action-ahs "Return ahs for just first action." [ahs]
+  (let [{:keys [state reward opt-sol remaining-actions]} ahs]
+    (assert (seq remaining-actions)) (assert (zero? reward)) (assert (empty? opt-sol))
+    (AngelicHierarchicalState state 0 nil (take 1 remaining-actions))))
+
+(defn rest-actions-ahs "Return ahs for just first action." [ahs mid-state]
+  (let [{:keys [state reward opt-sol remaining-actions]} ahs]
+    (assert (seq remaining-actions)) (assert (zero? reward)) (assert (empty? opt-sol))
+    (AngelicHierarchicalState mid-state 0 nil (drop 1 remaining-actions))))
+
+;; TODO: remove expensive assertino.
+(defn join-ahs [parent-ahs first-result rest-result final-state]
+  (combine-ahs first-result rest-result (constantly final-state) (constantly nil))
+#_  (let [my-final (reduce env/transfer-effects (:state parent-ahs)
+                         [(:state first-result) (:state rest-result)])]
+    (util/assert-is (= (dissoc (state/as-map final-state) :const)
+                       (dissoc (state/as-map my-final) :const)))
+    (combine-ahs first-result rest-result (constantly my-final) (constantly nil))))
+
+
+
+(defn ahs-can-reach? [ahs s]
+  (or (seq (:remaining-actions ahs)) (= s (:state ahs))))
+
+(defn ahs-cycle-level [ahs]
+  (when-let [a (first (:remaining-actions ahs))] (hierarchy/cycle-level a (:state ahs))))
+
+(defn ahs-gg "Return gg-ahs and goal-map, or nil if not gg." [ahs]
+  (let [a (util/safe-singleton (:remaining-actions ahs))]
+    (when-let [[gga goal-map] (hierarchy/gg-action a)]
+      [(AngelicHierarchicalState (:state ahs) (:reward ahs) (:opt-sol ahs) [gga])
+       goal-map
+       (every? (env/precondition-context a (:state ahs)) (keys goal-map))])))
+
+(defn ahs-optimistic-map [ahs]
+  (let [{:keys [state remaining-actions]} ahs]
+#_    (apply println "Optimistic map for " (ahs-first-sub-name ahs) "is\n"
+             (for [[s r] (angelic/optimistic-map (util/safe-singleton remaining-actions) state)]
+               (str "  " (env/extract-effects s) ": " r "\n")))
+    (angelic/optimistic-map (util/safe-singleton remaining-actions) state)))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;; Simple Weighted Summary & Node ;;;;;;;;;;;;;;;;;;;;;;;;
+;;; lifted from explicit-...
+
+
+; Function from action to weight (> 1).
+(def *sw-weight-fn* nil)
+
+; Here, we only use pess reward for tiebreaking.
+(defprotocol SimpleWeighted
+  (pess-reward [n])
+  (max-gap [n]))
+
+(deftype SWSummary [wtd-reward pes-reward mx-gap]
+  Comparable      (compareTo [x]
+                    (let [d (- (is/max-reward x) wtd-reward)]
+                      (if (zero? d) (- (pess-reward x) pes-reward) d)))
+  is/Summary      (max-reward       [] wtd-reward)
+  SimpleWeighted  (pess-reward [] pes-reward)
+                  (max-gap [] mx-gap))
+
+(def worst-sw-summary (SWSummary is/neg-inf is/neg-inf 0))
+(def failed-sw-search (is/make-failed-search worst-sw-summary))
+
+
+(defn add-sw-summaries [s1 s2]
+  (let [rew (+ (is/max-reward s1) (is/max-reward s2))]
+    (if (= rew is/neg-inf) worst-sw-summary
+        (SWSummary rew (+ (pess-reward s1) (pess-reward s2)) (max (max-gap s1) (max-gap s2))))))
+
+
+;; Idea was: why have generic nodes, and then code that uses generic fields
+; in special way, plus separate "angelic hierarchical state".
+; Why not just bake logic into different node types?
+; that might make things slightly more clear, but leads to lots of dup effort,
+; may make, e..g, other weighted versions more difficult.
+
+
+(defn compare-saha-nodes [x1 x2]
+  (let [c (compare-saha-summaries x1 x2)]
+    (if (zero? c)
+        (compare (and (instance? angelic.search.incremental.Node x2) (is/node-goal? x2))
+                 (and (instance? angelic.search.incremental.Node x1) (is/node-goal? x1)))
+        c)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CAC Node ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(comment
+  (defn name-str [x]
+    (let [n (:name x)]
+      (if (symbol? n) n
+          (vec (map #(if (instance? angelic.env.FactoredState %) (dissoc (angelic.state/as-map %) :const) %) n)))))
+
+  (defmethod print-method ::SimpleNode [x s]
+    (print-method (str "Nd<" (name-str x) "," (:reward x) "," (:goal? x) ">") s)))
+
+(declare make-cpc-node)
+
+(deftype CAC-Node [name gap in-clause action out-clause reward-bounds] :as this
+  Comparable    (compareTo  [x] (compare-saha-nodes this x))
+  is/Summary    (max-reward [] (nth reward-bounds 1))
+  is/Node       (node-name  [] name)
+                (node-goal? [] (neg? gap))
+  PSAHA-Summary (min-reward [] (nth reward-bounds 0))
+                (max-gap    [] gap))
+
+(defn make-cac-node [in-clause action out-clause reward-bounds]
+  (CAC-Node
+   [::CAC in-clause (env/action-name action) out-clause]
+   (if (or (env/primitive? action) (not (hierarchy/can-refine? action in-clause)))
+       is/neg-inf
+       (- (nth reward-bounds 1) (nth reward-bounds 0)))
+   in-clause action out-clause reward-bounds))
+
+(defn make-root-cac-node [in-clause action]
+  (let [[out-clause reward-bounds] (hierarchy/next-clause-and-rewards action in-clause)]
+    (make-cac-node in-clause action out-clause reward-bounds)))
+
+(defn cac-node-refinements [cac]
+  (let [{:keys [in-clause action out-clause reward-bounds gap]} cac]
+    (assert (not (neg? gap)))
+    (for [[constraint ref] (hierarchy/immediate-refinements-clause action in-clause)
+          :let             [constrained-clause (hierarchy/restrict-clause in-clause constraint)]
+          :when            constrained-clause]
+      [constraint (make-cpc-node constrained-clause ref out-clause [is/ninf (nth reward-bounds 1)])])))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CPC Node ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; TODO: no summary?
+ ; TODO. ..
+
+(deftype CPC-Node [name gap in-clause plan out-clause reward-bounds] :as this
+  Comparable    (compareTo  [x] (compare-saha-nodes this x))
+  is/Summary    (max-reward [] (nth reward-bounds 1))
+  is/Node       (node-name  [] name)
+                (node-goal? [] (neg? gap))
+  PSAHA-Summary (min-reward [] (nth reward-bounds 0))
+                (max-gap    [] gap))
+
+(defn make-cpc-node [in-clause plan out-clause reward-bounds]
+  (CAC-Node
+   [::CPC in-clause (map env/action-name plan) out-clause]
+
+   in-clause action out-clause reward-bounds))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Searches ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SAHA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; Idea is similar to saha-simple.  Two main differences:
+; 1.  To support clauses, we have to be able to dynamiaclly split.  Eventually, this
+;    should be done by dynamicsally wrapping old nodes.  For now, wej ust use caching.
+; 2.  Since we're only allowing a single output clause per action, we don't need the weird
+;    inner/outer cache deal.
+
+; ;Need to add cacpc node.  Initial one comes deterministically from cpc.
+; Then, recipe for AND-search:
+ ; Simplest recipe: Whenever we get a goal, make a new cpcpc node and start over.
+  ;  This will give big ugly chains for every primitive solution, however.
+  ; Note: once we start getting results for one clause-output side, we probably don't want to
+    ; refine other side again?
+  ; Note; for each half of cpcpc, we know in advance if it's clause-output or state-output.
+
+; Requirement: only get primitive goals for primitive ends (i.e, minimal state abstraction?) ?
+
+;; TODO: note we can't copy searches.  Everything should go through nodes.  This may present a problem?
+
+; Every node is CACACACACAC.
+
+; CAC has OR-search
+ ; Can be of two types:
+  ; top-down:
+   ; Initially with angelic bound
+   ; Then over refinements, which are CPC=CACPC
+  ; bottom-up for CAC' (parent CAC part of identity):
+   ; start with nothing, fill with things as we go (respecting consistency, hopefully)
+   ; max-reward also defers to parent CAC, should make sure we don't get too eager.?
+   ;   Except, we can't actually go to parent through this node.
+   ;    Can set gap to neg-inf when we get val through parent
+   ;     But then how do we get informed when things added bottom-up ??
+   ;    So, we're essentially back at same consistency problem?
+   ;    Solution: just drive parent (*through different cache* until cost increase).
+   ;              (keep only relevant goal nodes).
+   ;    Not beautiful, but solves problems.
+ ; Can return two types of goals:
+  ; CAC' for refined C, partially populated bottom-up
+  ; Primitive plan, iff both ends concrete?
+ ; If it gets
+  ; primitive goal from below, just passes through.
+  ; refined CAC'PC from below, just researchify (CAC' should not be recreated, ideally C'PC is wrapped).
+  ; refined CACPC' from below,
+   ; Create and return fresh CAC' bottom-up node, or add to it if node already exists.
+
+; CPC has AND-search
+ ; Initially over basic decomposition.
+ ; Can return two types of goals:
+  ; CPC' for refined C
+  ; Primitive plan, iff both ends concrete?
+ ; If it gets:
+  ; Primitive goal from below (1), depends on (2)
+  ; Primitive goal form below (2), act like SAHA-simple.
+  ;   (must get primitive goal from (1), or eventually stall?)
+  ; Refined goal from below (1),
+  ;   Return CAC'PC upwards, stop refining (2) ?
+  ; Retined goal from below (2),
+  ;   Return CACPC' upwards, stop refining (1) ?
+  ; Issue with these: different stopping for different refs may reduce caching.
+; Can possibly tweak/simplify this slightly by returning new node immediately on primitive sol, sub in sol
+ ; Then, nodes have primitive prefix & suffix as well, handled/removed somehow in CAC searchify.
+
+; Only issue here: CAC children may multiply over intermediate trajectories.
+; Could try to do something fancy.  Better, just factor hierarchy; nothing lost if all refs <= 2 count.
+
+; i.e., CAC is generalized-goal search!1!!!
+
+
+;; TODO: need gap in refinement criteria ? Otherwise, may refine stupid thing if thing we wanted already refined.
+
+;; TODO: watch when we abstract-away constraints?!
+
+;; What is purpose of "bottom-up" node?
+; annoying issue with primitive solutions from abstract states.
+;; Basic problem is: would like sAs to have either:
+;;  - one optimal primitive solution, iff both s concrete, OR
+;;  - a set of refined outcome sets, OR
+;;  - be stalled, since cannot refine action from a set.
+;; But, as soon as we lift up a primitive solution, we can break this assumption.
+;; Even more troublesome is if sAs has both types of solutions.
+;; Can we unify these things somehow?
+;; If we allow CPC to have primitive prefix, this solves the "first part" problem.
+;; "Second part" is a bit more subtle?
+;; In particular, we don't want to muddy higher-levels with details of solutions to lower-levels.  Neither constituent algorithm had to do this.
+;; can either deal with these
+
+;; What do we do if outcome set does not match expected?  This presents
+;; a need for yet another type of SAS.?!
+
+;; OK, seems like we need to take another step back here before trying to implement
+;; anything.
+
+;; What are real entities here, and their relationships?
+;; Seems that they are: state-abstracted SAS nodes.
+;; For such a node, we could in principle compute all optimal
+;; solutions for all inputs to all outputs, then use DP to connect a seq.
+;; Can use recursive-opt bound to guide this in A*-style alg.
+;; Problem: if initial angelic sets are bad, we are hosed.
+
+;; Or, can do this forward-only, + heuristics.
+;; This solves above problem, but means we must always fully refine front,
+;; even of probably bad plans.
+
+;; Goal here is to get best of both worlds.
+;; Nodes are again state-abstracted, SAS things.
+;; Solutions to node are from refs, seqs of SAS things.
+;; But, we can split.
+
+(declare get-implicit-dash-sps-search)
+
+;; TODO: where do we use opt desc ??  Should we cache nodes as well as searches ?
+ ; Or cache searches in nodes, or what ?
+
+(defn searchify-sas-child [sas-child]
+  (cond ())
+  )
+
+(defn get-implicit-dash-sas-search [sas-node]
+  (is/get-cached-search *problem-cache* (node-name sas-node)
+    (is/make-recursive-sr-search sas-node sas-refinements searchify-sas-child)))
+
+
+(defn get-implicit-dash-sps-search [sps-node]
+  (is/get-cached-search *problem-cache* (node-name cpc-node)
+    (let [[cac-node rest-cpc-node] (cpc-split cpc-node)]
+      (is/make-and-search cpc-node
+        (get-saha-cac-search cac-node)
+        (get-saha-cpc-search cpc-node)
+        (fn [s1 s2] (if (>= (max-gap s1) (max-gap s2)) s1 s2))
+        add-saha-summaries
+        (fn goal-fn [g1 g2]
+          .....  ; (two cases: new outcome, actual goal)
+          ))))
+  (let [r-a (util/make-safe (seq (:remaining-actions ahs)))]
+    (if (util/singleton? r-a)
+      (get-saha-sas-search ahs final-state)
+      (is/get-cached-search *problem-cache* (ahs-name ahs final-state)
+        (let [outer-cache (get-sas-map (first-action-ahs ahs))]
+          (is/make-recursive-sr-search (ahs->simple-node ahs [::F final-state])
+           (fn [_] (map #(ahs->simple-node ahs %) (keys outer-cache)))
+           (fn [n]
+             (let [ss (second (:data n))]
+               (is/make-and-search n
+                 ((outer-cache ss))
+                 (get-saha-sps-search (rest-actions-ahs ahs ss) final-state)
+                 (fn [x y] x)
+                 is/add-simple-summaries
+                 (fn [g1 g2]
+                   (ahs->simple-node (join-ahs (first (:data g1)) (first (:data g2)) final-state)
+                                     :goal)))))))))))
+
+
+(defn get-sas-map "Get a map from outer final states to SAS nodes/" [ahs]
+  (util/cache-with *problem-cache* (ahs-name ahs) ; unabstracted state SA cache
+    (util/map-keys #(env/transfer-effects (:state ahs) %)
+      (util/cache-with *problem-cache* (ahs-first-sub-name ahs) ; abstracted state SA cache
+        (let [inner-ahs (ahs-first-sub ahs)
+              next-ahs (lazy-seq (ahs-children inner-ahs))]
+          (into {}
+                (for [[ss sr] (ahs-optimistic-map inner-ahs)]
+                  [ss  (is/cache-incremental-search
+                        (is/make-recursive-sr-search
+                         (ahs->simple-node inner-ahs ss false sr)
+                         (fn [_] (for [n next-ahs :when (ahs-can-reach? n ss)]
+                                   (ahs->simple-node n ss)))
+                         #(apply get-saha-sps-search (:data %))))])))))))
+
+(defn get-saha-sas-search [ahs final-state]
+  (((get-sas-map ahs) final-state)))
+
+
+;; TODO: remove expensive names.
+(defn get-saha-sps-search [ahs final-state]
+;  (println "\nget-sps" ahs final-state) (Thread/sleep 100)
+  (let [r-a (util/make-safe (seq (:remaining-actions ahs)))]
+    (if (util/singleton? r-a)
+      (get-saha-sas-search ahs final-state)
+      (is/get-cached-search *problem-cache* (ahs-name ahs final-state)
+        (let [outer-cache (get-sas-map (first-action-ahs ahs))]
+          (is/make-recursive-sr-search (ahs->simple-node ahs [::F final-state])
+           (fn [_] (map #(ahs->simple-node ahs %) (keys outer-cache)))
+           (fn [n]
+             (let [ss (second (:data n))]
+               (is/make-and-search n
+                 ((outer-cache ss))
+                 (get-saha-sps-search (rest-actions-ahs ahs ss) final-state)
+                 (fn [x y] x)
+                 is/add-simple-summaries
+                 (fn [g1 g2]
+                   (ahs->simple-node (join-ahs (first (:data g1)) (first (:data g2)) final-state)
+                                     :goal)))))))))))
+
+
+(defn make-saha-search [root-ahs]
+  (get-saha-sas-search root-ahs (util/safe-singleton (keys (ahs-optimistic-map root-ahs)))))
+
+
+


Se pruebas unitárias en la pipeline

Se pruebas unitárias en la pipeline

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/iot-paas-home/telegram-iot-gateway.git/'


Add util.stats ns.

Add util.stats ns.

error: pathspec 'src/org/playasophy/wonderdome/util/stats.clj' did not match any file(s) known to git

--- src/org/playasophy/wonderdome/util/stats.clj
+++ src/org/playasophy/wonderdome/util/stats.clj
@@ -0,0 +1,44 @@
+(ns org.playasophy.wonderdome.util.stats
+  "Functions to read the current system and JVM status."
+  (import
+    com.sun.management.OperatingSystemMXBean
+    java.lang.management.ManagementFactory))
+
+
+(defn system-properties
+  "Returns a map of status info from the Java system properties."
+  []
+  {:java/vm-name (System/getProperty "java.vm.name")   ; OpenJDK 64-bit Server VM
+   :java/version (System/getProperty "java.version")   ; 1.7.0_55-b14
+   :os/arch      (System/getProperty "os.arch")        ; amd64
+   :os/name      (System/getProperty "os.name")        ; Linux
+   :os/version   (System/getProperty "os.version")})   ; 3.13.0-30-generic
+
+
+(defn os-info
+  "Returns a map of cpu and memory utilization info from the operating system
+  MX bean."
+  []
+  (when-let [os-bean (ManagementFactory/getOperatingSystemMXBean)]
+    {:cpu.load/system (.getSystemLoadAverage os-bean)
+     :cpu.load/process (.getProcessCpuLoad os-bean)
+     :memory.physical/free (.getFreePhysicalMemorySize os-bean)
+     :memory.physical/total (.getTotalPhysicalMemorySize os-bean)
+     :memory.swap/free (.getFreeSwapSpaceSize os-bean)
+     :memory.swap/total (.getTotalSwapSpaceSize os-bean)
+     :memory.virtual/committed (.getCommittedVirtualMemorySize os-bean)}))
+
+
+(defn thread-info
+  "Returns a map of thread count info from the thread MX bean."
+  []
+  (when-let [thread-bean (ManagementFactory/getThreadMXBean)]
+    {:thread/daemons (.getDaemonThreadCount thread-bean)
+     :thread/count (.getThreadCount thread-bean)
+     :thread/peak (.getPeakThreadCount thread-bean)}))
+
+
+(defn info
+  "Returns a combined map of all stat info."
+  []
+  (merge (system-properties) (os-info) (thread-info)))


add clj-http to project

add clj-http to project

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/kokosro/kokos-crawler.git/'


lein-release plugin: preparing 0.2.0 release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sablono "0.2.0-SNAPSHOT"
+(defproject sablono "0.2.0"
   :description "Lisp style templating for Facebook's React."
   :url "http://github.com/r0man/sablono"
   :author "Roman Scherer"


Upload sablono.

Upload sablono.


[EN WR] Add test to exercise empty message for read.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/democracyworks/election-authority-works.git/'


Re-initializing the project

Re-initializing the project

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/screen6/cardinality.git/'


Upgrade Buddy to 1.1.0

Upgrade Buddy to 1.1.0

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/vincentstorme/clojureme.git/'


Remove local repo

Remove local repo


Version 1.15.7-SNAPSHOT

Version 1.15.7-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/starcity-properties/odin.git/'


lein-release plugin: preparing 0.2.14 release

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject sablono "0.2.14-SNAPSHOT"
+(defproject sablono "0.2.14"
   :description "Lisp style templating for Facebook's React."
   :url "http://github.com/r0man/sablono"
   :author "Roman Scherer"


Remove duplicates for rendering script

Remove duplicates for rendering script

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/nvbn/rerenderer.git/'


add premium services to member menu

add premium services to member menu


Add print-method back for JSValue

Add print-method back for JSValue

--- src/sablono/compiler.clj
+++ src/sablono/compiler.clj
@@ -234,6 +234,12 @@
       `(~'into-array ~(vec (compile-seq content)))
       (first forms))))

+;; TODO: Remove when landed in ClojureScript.
+(defmethod print-method JSValue
+  [^JSValue v, ^java.io.Writer w]
+  (.write w "#js ")
+  (.write w (pr-str (.val v))))
+
 (extend-protocol ICompile
   clojure.lang.IPersistentVector
   (compile-react [this]


Untested but it was bothering me.

Untested but it was bothering me.


Fix list sorting - it works in the GUI now!


Add partial impl of spec tracer, but APIs are not fixed yet

error: pathspec 'src/spectrace/trace.cljc' did not match any file(s) known to git

--- src/spectrace/trace.cljc
+++ src/spectrace/trace.cljc
@@ -0,0 +1,42 @@
+(ns spectrace.trace
+  (:require [clojure.spec :as s]))
+
+(defmulti step (fn [var conformed path] var))
+(defmethod step :default [_ _ _] nil)
+
+(defmethod step #'s/keys [_ conformed [segment & path]]
+  [segment path])
+
+(defmethod step #'s/cat [_ conformed [segment & path]]
+  [(:pred (some #(and (= (:key %) segment) %) conformed))
+   path])
+
+(defmethod step #'s/alt [_ conformed [segment & path]]
+  [(:pred (some #(and (= (:key %) segment) %) conformed))
+   path])
+
+(defmethod step #'s/* [_ conformed path]
+  [(:pred-form conformed) path])
+
+(defn conform-macro-form [var form]
+  (s/conform (:args (s/get-spec var)) (rest form)))
+
+(defn trace [{:keys [path] :as problem}]
+  (let [spec (s/get-spec (first (:via problem)))]
+    (loop [path path, spec spec, form (s/form spec), ret []]
+      ;(prn :path path)
+      ;(prn :spec spec)
+      ;(prn :form form)
+      (if (empty? path)
+        ret
+        (let [v (resolve (first form))
+              [spec' path'] (step v (conform-macro-form v form) path)]
+          (let [[spec' form'] (if (keyword? spec')
+                                (let [spec (s/get-spec spec')]
+                                  [spec (s/form spec)])
+                                [spec spec'])]
+            (recur path' spec' form'
+                   (conj ret {:spec spec :form form}))))))))
+
+(defn traces [ed]
+  (mapv trace (::s/problems ed)))


kata5: fix dev dependencies

kata5: fix dev dependencies

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/schaueho/clojure-codekata.git/'


Expected result now final value in table

error: pathspec 'dev/user.clj' did not match any file(s) known to git

--- dev/user.clj
+++ dev/user.clj
@@ -0,0 +1,12 @@
+(ns user
+  (:require [clojure.tools.namespace.repl :as tnr]
+            [clojure.repl]
+            [proto-repl.saved-values]))
+
+(defn start []
+  (println "Start completed"))
+
+(defn reset []
+  (tnr/refresh :after 'user/start))
+
+(println "proto-repl-demo dev/user.clj loaded.")


Version 1.15.5-SNAPSHOT

Version 1.15.5-SNAPSHOT


Version 1.9.2-SNAPSHOT

Version 1.9.2-SNAPSHOT


Version 1.12.4-SNAPSHOT

Version 1.12.4-SNAPSHOT


Update version

Update version

--- project.clj
+++ project.clj
@@ -1,6 +1,6 @@
 ;; Copyright © 2015, JUXT LTD.

-(defproject yada "1.1.0"
+(defproject yada "1.1.1"
   :description "A powerful Clojure web library, full HTTP, full async"
   :url "http://github.com/juxt/yada"
   :license {:name "The MIT License"
@@ -12,7 +12,7 @@
                org.clojure/tools.reader]

   :dependencies
-  [[bidi "2.0.1" :exclusions [ring/ring-core]]
+  [[bidi "2.0.4" :exclusions [ring/ring-core]]
    [buddy/buddy-sign "0.9.0"]
    [byte-streams "0.2.1" :exclusions [clj-tuple]]
    [camel-snake-kebab "0.3.2"]


Start 0.3.5-SNAPSHOT

Start 0.3.5-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bsmr-clojure/Nightcode.git/'


Version 1.15.7

Version 1.15.7


chore(core): update version to 2.8.11

chore(core): update version to 2.8.11

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/B2W-BIT/restQL-server.git/'


Add clj-time as dependency

Add clj-time as dependency

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/expez/jada.git/'


Version 0.4.3-SNAPSHOT

Version 0.4.3-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/modnakasta/weasel.git/'


Flip back to 1.0.0-SNAPSHOT

Flip back to 1.0.0-SNAPSHOT

Signed-off-by: Deepak Giridharagopal <d11186354d1ef01ca06ae37d7e23e827da13e85f@puppetlabs.com>

--- project.clj
+++ project.clj
@@ -1,4 +1,4 @@
-(defproject grayskull "1.0.0-b1"
+(defproject grayskull "1.0.0-SNAPSHOT"
   :description "Puppet-integrated catalog and fact storage"
   :dependencies [[org.clojure/clojure "1.3.0"]
                  [cheshire "2.2.0"]


Update libraries

Update libraries


Version 100-SNAPSHOT

Version 100-SNAPSHOT

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobias/clojars-web.git/'


bump deps

bump deps


Add a scrolling ns

Add a scrolling ns

Setup scrolling to trigger a throttled event.  Translation from the
example on this MDN page:
https://developer.mozilla.org/en-US/docs/Web/Events/scroll

error: pathspec 'src/cljs/comic_reader/scrolling.cljs' did not match any file(s) known to git

--- src/cljs/comic_reader/scrolling.cljs
+++ src/cljs/comic_reader/scrolling.cljs
@@ -0,0 +1,18 @@
+(ns comic-reader.scrolling
+  (:require [re-frame.core :as rf]))
+
+(defn throttle [type key target]
+  (let [target (or target js/window)
+        running (atom false)
+        toggle! #(swap! running not)
+        throttler (fn []
+                    (when (not @running)
+                      (toggle!)
+                      (js/requestAnimationFrame
+                       (fn []
+                         (rf/dispatch [key])
+                         (toggle!)))))]
+    (.addEventListener target type throttler)))
+
+(defn setup-scrolling-events! []
+  (throttle "scroll" :scroll))


Solid next step for integration

Solid next step for integration

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/thinktopic/netlib-ccm.git/'


Remove top-level File & Folder POST

Remove top-level File & Folder POST

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/physion/ovation-webapi.git/'


displaying index.html for GET /

displaying index.html for GET /

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tobiasbayer/lambdacd.git/'


Don't index each version as a separate doc