text:
Error: attr: 'style :width' failed validation

Add width & height attributes to the style property in a dictim file.
Create a d2 file.
Run the dictim command to generate the d2 file.
open the generated d2 file.
the d2 file contains error message: attr: 'style :width' failed validation, in {:classes {"spr" {:style {:stroke-dash 3, :stroke-width 2, :width 200, :height 300, :stroke "'#444499'"}}, "db" {:shape "cylinder", :style {:stroke-width 5, :fill "'#c7f0c5'", :stroke "'#87b085'", :text-transform :uppercase}}}}
dictim copy.txt
in.d2.txt
out2.d2 copy.txt
For more please check out the attachment.

PRs welcome!

Sure, Will give it a try!

Is this error with the main branch? Also, when I run clojure -M:test on the main branch without any changes, I am getting "Ran 81 tests containing 357 assertions. 19 failures, 10 errors."
It is probably me missing something.

I tried the following and it worked for me.
Step 1: Installed latest version of Clojure
Step 2: Installed latest version of Lenin
Step 3: JDK 11 was already installed so internally it is using it.
Step 4: Did a git clone on main branch.
Step 5: Then did a cd to dictim folder
Step 6: Ran clojure -M:test from dictim root folder
Note: In the screenshot/attachment you will notice 82 test cases since I wrote a test case but yet to commit it to the branch.

Hope this helps to resolve the error.
I'm new to Clojure but so far I liking it.

Hi @eddielao try running clj -X:test instead of Clojure -M:test and report back if any problems.
If there are problems still, post a copy of the errors.

Also, if still a problem say which environment you're running in; e.g. Windows, Mac, Linux
Those tests are running in all 3 environments in CI (circle CI for Windows and Mac, Appveyor for Windows) every release so may just be an error in getting your environment properly set up

I resolved this. Your dictim (in the template) is NOT correct. width and height are both top level attributes and not sub-keys of style... exactly as the error message was saying

same as d2 btw

Hi @eddielao try running clj -X:test instead of clojure -M:test and report back if any problems. If there are problems still, post a copy of the errors.

Windows 11 Pro version 10.0.22631 Build 22631
This is the error I got from running clj -X:test. It could be just my machine as it is my person dev machine and has quite a few things installed.
--- Error---
$ clj -X:test
Running tests in #{"test"}
Testing dictim.d2.compile-test
Testing dictim.d2.parse-test
ERROR in (connections) (utils.cljc:8)
Uncaught exception, not in assertion.
expected: nil
actual: java.lang.Exception: Could not parse:   -> super long shape id even longer here
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.parse$dictim.invokeStatic (parse.cljc:290)
dictim.d2.parse$dictim.doInvoke (parse.cljc:256)
clojure.lang.RestFn.invoke (RestFn.java:410)
dictim.d2.parse_test$fn__4792.invokeStatic (parse_test.clj:74)
dictim.d2.parse_test/fn (parse_test.clj:71)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (classes) (parse_test.clj:288)
Software Classes
expected: (= 1 (num-parses d2))
actual: (not (= 1 1024))
ERROR in (classes) (utils.cljc:8)
Software Classes
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"shape" "class\r"} class
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$valid_inline_d2_attr_QMARK_.invokeStatic (validate.cljc:216)
dictim.validate$valid_inline_d2_attr_QMARK_.invoke (validate.cljc:210)
dictim.validate$valid_inline_attr_QMARK_.invokeStatic (validate.cljc:222)
dictim.validate$valid_inline_attr_QMARK_.invoke (validate.cljc:220)
dictim.validate$eval2454$fn__2455.invoke (validate.cljc:267)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4871$fn__4872$fn__4877.invoke (parse_test.clj:289)
dictim.d2.parse_test$fn__4871$fn__4872.invoke (parse_test.clj:289)
dictim.d2.parse_test$fn__4871.invokeStatic (parse_test.clj:285)
dictim.d2.parse_test/fn (parse_test.clj:284)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (classes) (parse_test.clj:290)
Software Classes
expected: (= dict (quote (["MyClass" {"shape" "class"} ["field" ""[]string""] ["method(a uint64)" "(x, y int)"]] ["D2 Parser" {"shape" "class"} [:comment "Default visibility is + so no need to specify."] ["+reader" "io.RuneReader"] ["readerPos" "d2ast.Position"] [:comment "Private field."] ["-lookahead" ""[]rune""] [:comment "Protected field."] [:comment "We have to escape the # to prevent the line from being parsed as a comment."] ["\#lookaheadPos" "d2ast.Position"] ["+peek()" "(r rune, eof bool)"] ["rewind()"] ["commit()"] ["\#peekn(n int)" "(s string, eof bool)"]] [""github.com/terrastruct/d2parser.git"" "--" "D2 Parser"])))
actual: (not (= (["MyClass" {"shape" "class\r"} ["field" ""[]string""] ["method(a uint64)" "(x, y int)"]] ["D2 Parser" {"shape" "class\r"} [:comment "Default visibility is + so no need to specify.\r"] ["+reader" "io.RuneReader"] ["readerPos" "d2ast.Position"] [:comment "Private field.\r"] ["-lookahead" ""[]rune""] [:comment "Protected field.\r"] [:comment "We have to escape the # to prevent the line from being parsed as a comment.\r"] ["\#lookaheadPos" "d2ast.Position"] ["+peek()" "(r rune, eof bool)"] ["rewind()"] ["commit()"] ["\#peekn(n int)" "(s string, eof bool)"]] [""github.com/terrastruct/d2parser.git"" "--" "D2 Parser"]) (["MyClass" {"shape" "class"} ["field" ""[]string""] ["method(a uint64)" "(x, y int)"]] ["D2 Parser" {"shape" "class"} [:comment "Default visibility is + so no need to specify."] ["+reader" "io.RuneReader"] ["readerPos" "d2ast.Position"] [:comment "Private field."] ["-lookahead" ""[]rune""] [:comment "Protected field."] [:comment "We have to escape the # to prevent the line from being parsed as a comment."] ["\#lookaheadPos" "d2ast.Position"] ["+peek()" "(r rune, eof bool)"] ["rewind()"] ["commit()"] ["\#peekn(n int)" "(s string, eof bool)"]] [""github.com/terrastruct/d2parser.git"" "--" "D2 Parser"])))
FAIL in (classes) (parse_test.clj:314)
d2 Classes
expected: (= 1 (num-parses d2))
actual: (not (= 1 32))
ERROR in (classes) (utils.cljc:8)
d2 Classes
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"direction" "right\r"} right
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4871$fn__4888.invoke (parse_test.clj:315)
dictim.d2.parse_test$fn__4871.invokeStatic (parse_test.clj:315)
dictim.d2.parse_test/fn (parse_test.clj:284)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (classes) (parse_test.clj:316)
d2 Classes
expected: (= dict (quote ({"direction" "right"} {"classes" {"load balancer" {"label" "load\nbalancer", "width" 100, "height" 200, "style" {"stroke-width" 1, "fill" ""#44C7B1"", "shadow" true, "border-radius" 5}}, "unhealthy" {"style" {"fill" ""#FE7070"", "stroke" ""#F69E03""}}}} ["web traffic" "->" "web lb"] ["web lb" {"class" "load balancer"}] ["web lb" "->" "api1"] ["web lb" "->" "api2"] ["web lb" "->" "api3"] ["api2" {"class" "unhealthy"}] ["api1" "->" "cache lb"] ["api3" "->" "cache lb"] ["cache lb" {"class" "load balancer"}])))
actual: (not (= ({"direction" "right\r"} {"classes" {"load balancer" {"label" "load\nbalancer\r", "width" 100.0, "height" 200.0, "style" {"stroke-width" 1.0, "fill" ""#44C7B1"\r", "shadow" true, "border-radius" 5.0}}, "unhealthy" {"style" {"fill" ""#FE7070"\r", "stroke" ""#F69E03"\r"}}}} ["web traffic" "->" "web lb"] ["web lb" {"class" "load balancer\r"}] ["web lb" "->" "api1"] ["web lb" "->" "api2"] ["web lb" "->" "api3"] ["api2" {"class" "unhealthy\r"}] ["api1" "->" "cache lb"] ["api3" "->" "cache lb"] ["cache lb" {"class" "load balancer"}]) ({"direction" "right"} {"classes" {"load balancer" {"label" "load\nbalancer", "width" 100, "height" 200, "style" {"stroke-width" 1, "fill" ""#44C7B1"", "shadow" true, "border-radius" 5}}, "unhealthy" {"style" {"fill" ""#FE7070"", "stroke" ""#F69E03""}}}} ["web traffic" "->" "web lb"] ["web lb" {"class" "load balancer"}] ["web lb" "->" "api1"] ["web lb" "->" "api2"] ["web lb" "->" "api3"] ["api2" {"class" "unhealthy"}] ["api1" "->" "cache lb"] ["api3" "->" "cache lb"] ["cache lb" {"class" "load balancer"}])))
FAIL in (shapes) (parse_test.clj:20)
Shapes
expected: (= 1 (num-parses d2))
actual: (not (= 1 16))
ERROR in (shapes) (utils.cljc:8)
Shapes
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"shape" "cloud\r"} cloud
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$valid_inline_d2_attr_QMARK_.invokeStatic (validate.cljc:216)
dictim.validate$valid_inline_d2_attr_QMARK_.invoke (validate.cljc:210)
dictim.validate$valid_inline_attr_QMARK_.invokeStatic (validate.cljc:222)
dictim.validate$valid_inline_attr_QMARK_.invoke (validate.cljc:220)
dictim.validate$eval2415$fn__2416.invoke (validate.cljc:229)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4766$fn__4771.invoke (parse_test.clj:21)
dictim.d2.parse_test$fn__4766.invokeStatic (parse_test.clj:21)
dictim.d2.parse_test/fn (parse_test.clj:16)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (shapes) (parse_test.clj:22)
Shapes
expected: (= dict (quote (["imAShape"] ["im_a_shape"] ["im a shape"] ["i'm a shape"] [:comment "notice that one-hyphen is not a connection"] [:comment "whereas, a--shape would be a connection"] ["a-shape"] [:list ["SQLite"] ["Cassandra"]] ["pg" "PostgreSQL"] ["Cloud" "my cloud"] ["Cloud" {"shape" "cloud"}])))
actual: (not (= (["imAShape"] ["im_a_shape"] ["im a shape"] ["i'm a shape"] [:comment "notice that one-hyphen is not a connection\r"] [:comment "whereas, a--shape would be a connection\r"] ["a-shape"] [:list ["SQLite"] ["Cassandra"]] ["pg" "PostgreSQL"] ["Cloud" "my cloud"] ["Cloud" {"shape" "cloud\r"}]) (["imAShape"] ["im_a_shape"] ["im a shape"] ["i'm a shape"] [:comment "notice that one-hyphen is not a connection"] [:comment "whereas, a--shape would be a connection"] ["a-shape"] [:list ["SQLite"] ["Cassandra"]] ["pg" "PostgreSQL"] ["Cloud" "my cloud"] ["Cloud" {"shape" "cloud"}])))
FAIL in (interactive) (parse_test.clj:234)
Interactive features
expected: (= 1 (num-parses d2))
actual: (not (= 1 8))
FAIL in (interactive) (parse_test.clj:236)
Interactive features
expected: (= dict (quote (["x" {"tooltip" "Total abstinence is easier than perfect moderation "}] ["y" {"tooltip" "Gee, I feel kind of LIGHT in the head now,\nknowing I can't make my satellite dish PAYMENTS! "}] ["x" "->" "y"] ["x" "I'm a Mac" {"link" "https://apple.com"}] ["y" "And I'm a PC" {"link" "https://microsoft.com"}] ["x" "->" "y" "gazoontit"])))
actual: (not (= (["x" {"tooltip" "Total abstinence is easier than perfect moderation "}] ["y" {"tooltip" "Gee, I feel kind of LIGHT in the head now,\nknowing I can't make my satellite dish PAYMENTS! "}] ["x" "->" "y"] ["x" "I'm a Mac" {"link" "https://apple.com\r"}] ["y" "And I'm a PC" {"link" "https://microsoft.com\r"}] ["x" "->" "y" "gazoontit"]) (["x" {"tooltip" "Total abstinence is easier than perfect moderation "}] ["y" {"tooltip" "Gee, I feel kind of LIGHT in the head now,\nknowing I can't make my satellite dish PAYMENTS! "}] ["x" "->" "y"] ["x" "I'm a Mac" {"link" "https://apple.com"}] ["y" "And I'm a PC" {"link" "https://microsoft.com"}] ["x" "->" "y" "gazoontit"])))
FAIL in (textandcode) (parse_test.clj:252)
Text and Code
expected: (= 1 (num-parses d2))
actual: (not (= 1 2048))
ERROR in (textandcode) (utils.cljc:8)
Text and Code
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"shape" "text\r", "near" "top-center\r", "style" {"font-size" 55.0, "italic" true}}
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$eval2415$fn__2416.invoke (validate.cljc:237)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4853$fn__4858.invoke (parse_test.clj:253)
dictim.d2.parse_test$fn__4853.invokeStatic (parse_test.clj:253)
dictim.d2.parse_test/fn (parse_test.clj:248)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (textandcode) (parse_test.clj:254)
Text and Code
expected: (= dict (quote (["explanation" "|md\n  # I can do headers\n  - lists\n  - lists\n\n  And other normal markdown stuff\n|"] ["my_code" "|||ts\n  declare function getSmallPet(): Fish | Bird;\n  const works = (a > 1) || (b < 2)\n|||"] ["my_code" "|ts\n  declare function getSmallPet(): Fish | Bird;\n  const works = (a > 1) || (b < 2)\n|"] ["amscd plugin" ["ex" "|tex\n\\begin{CD} B @>{\\text{very long label}}>> C S^{{\\mathcal{W}}\\Lambda}\\otimes T @>j>> T\\\\ @VVV V \\end{CD}\n|"]] ["multilines" ["ex" "|tex\n\\displaylines{x = a + b \\\\ y = b + c}\n\\sum{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt\n|"]] ["title" "A winning strategy" {"shape" "text", "near" "top-center", "style" {"font-size" 55, "italic" true}}] ["poll the people" "->" "results"] ["results" "->" "unfavorable" "->" "poll the people"] ["results" "->" "favorable" "->" "will of the people"])))
actual: (not (= (["explanation" "|md\r\n  # I can do headers\r\n  - lists\r\n  - lists\r\n\r\n  And other normal markdown stuff\r\n|"] ["my_code" "|||ts\r\n  declare function getSmallPet(): Fish | Bird;\r\n  const works = (a > 1) || (b < 2)\r\n|||"] ["my_code" "|ts\r\n  declare function getSmallPet(): Fish | Bird;\r\n  const works = (a > 1) || (b < 2)\r\n|"] ["amscd plugin" ["ex" "|tex\r\n\\begin{CD} B @>{\\text{very long label}}>> C S^{{\\mathcal{W}}\\Lambda}\\otimes T @>j>> T\\\\ @VVV V \\end{CD}\r\n|"]] ["multilines" ["ex" "|tex\r\n\\displaylines{x = a + b \\\\ y = b + c}\r\n\\sum{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt\r\n|"]] ["title" "A winning strategy" {"shape" "text\r", "near" "top-center\r", "style" {"font-size" 55.0, "italic" true}}] ["poll the people" "->" "results"] ["results" "->" "unfavorable" "->" "poll the people"] ["results" "->" "favorable" "->" "will of the people"]) (["explanation" "|md\n  # I can do headers\n  - lists\n  - lists\n\n  And other normal markdown stuff\n|"] ["my_code" "|||ts\n  declare function getSmallPet(): Fish | Bird;\n  const works = (a > 1) || (b < 2)\n|||"] ["my_code" "|ts\n  declare function getSmallPet(): Fish | Bird;\n  const works = (a > 1) || (b < 2)\n|"] ["amscd plugin" ["ex" "|tex\n\\begin{CD} B @>{\\text{very long label}}>> C S^{{\\mathcal{W}}\\Lambda}\\otimes T @>j>> T\\\\ @VVV V \\end{CD}\n|"]] ["multilines" ["ex" "|tex\n\\displaylines{x = a + b \\\\ y = b + c}\n\\sum{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt\n|"]] ["title" "A winning strategy" {"shape" "text", "near" "top-center", "style" {"font-size" 55, "italic" true}}] ["poll the people" "->" "results"] ["results" "->" "unfavorable" "->" "poll the people"] ["results" "->" "favorable" "->" "will of the people"])))
FAIL in (containers) (parse_test.clj:40)
Containers
expected: (= 1 (num-parses d2))
actual: (not (= 1 524288))
ERROR in (containers) (utils.cljc:8)
Containers
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"style.fill" ""#ACE1AF"\r"}
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_$fn__2386.invoke (validate.cljc:170)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:170)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$valid_inline_d2_attr_QMARK_.invokeStatic (validate.cljc:216)
dictim.validate$valid_inline_d2_attr_QMARK_.invoke (validate.cljc:210)
dictim.validate$valid_inline_attr_QMARK_.invokeStatic (validate.cljc:222)
dictim.validate$valid_inline_attr_QMARK_.invoke (validate.cljc:220)
dictim.validate$eval2415$fn__2416.invoke (validate.cljc:229)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2454$fn__2455.invoke (validate.cljc:278)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4779$fn__4784.invoke (parse_test.clj:41)
dictim.d2.parse_test$fn__4779.invokeStatic (parse_test.clj:41)
dictim.d2.parse_test/fn (parse_test.clj:36)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (containers) (parse_test.clj:42)
Containers
expected: (= dict (quote (["server"] [:comment "Declares a shape inside of another shape"] ["server.process"] [:comment "Can declare the container and child in same line"] ["im a parent.im a child"] [:comment "Since connections can also declare keys, this works too"] ["apartment.Bedroom.Bathroom" "->" "office.Spare Room.Bathroom" "Portal"] ["clouds" ["aws" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["clouds" ["aws" "AWS" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" "Google Cloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["users" "->" "clouds.aws.load_balancer"] ["users" "->" "clouds.gcloud.auth"] ["ci.deploys" "->" "clouds"] ["christmas" ["presents"]] ["birthdays" ["presents"] [".christmas.presents" "->" "presents" "regift"] [".christmas" {"style.fill" ""#ACE1AF""}]])))
actual: (not (= (["server"] [:comment "Declares a shape inside of another shape\r"] ["server.process"] [:comment "Can declare the container and child in same line\r"] ["im a parent.im a child"] [:comment "Since connections can also declare keys, this works too\r"] ["apartment.Bedroom.Bathroom" "->" "office.Spare Room.Bathroom" "Portal"] ["clouds" ["aws" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["clouds" ["aws" "AWS" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" "Google Cloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["users" "->" "clouds.aws.load_balancer"] ["users" "->" "clouds.gcloud.auth"] ["ci.deploys" "->" "clouds"] ["christmas" ["presents"]] ["birthdays" ["presents"] [".christmas.presents" "->" "presents" "regift"] [".christmas" {"style.fill" ""#ACE1AF"\r"}]]) (["server"] [:comment "Declares a shape inside of another shape"] ["server.process"] [:comment "Can declare the container and child in same line"] ["im a parent.im a child"] [:comment "Since connections can also declare keys, this works too"] ["apartment.Bedroom.Bathroom" "->" "office.Spare Room.Bathroom" "Portal"] ["clouds" ["aws" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["clouds" ["aws" "AWS" ["load_balancer" "->" "api"] ["api" "->" "db"]] ["gcloud" "Google Cloud" ["auth" "->" "db"]] ["gcloud" "->" "aws"]] ["users" "->" "clouds.aws.load_balancer"] ["users" "->" "clouds.gcloud.auth"] ["ci.deploys" "->" "clouds"] ["christmas" ["presents"]] ["birthdays" ["presents"] [".christmas.presents" "->" "presents" "regift"] [".christmas" {"style.fill" ""#ACE1AF""}]])))
FAIL in (sql) (parse_test.clj:141)
Sql Tables
expected: (= 1 (num-parses d2))
actual: (not (= 1 8192))
ERROR in (sql) (utils.cljc:8)
Sql Tables
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"shape" "sql_table\r"}table
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$valid_inline_d2_attr_QMARK_.invokeStatic (validate.cljc:216)
dictim.validate$valid_inline_d2_attr_QMARK_.invoke (validate.cljc:210)
dictim.validate$valid_inline_attr_QMARK_.invokeStatic (validate.cljc:222)
dictim.validate$valid_inline_attr_QMARK_.invoke (validate.cljc:220)
dictim.validate$eval2454$fn__2455.invoke (validate.cljc:267)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4814$fn__4819.invoke (parse_test.clj:142)
dictim.d2.parse_test$fn__4814.invokeStatic (parse_test.clj:142)
dictim.d2.parse_test/fn (parse_test.clj:137)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (sql) (parse_test.clj:143)
Sql Tables
expected: (= dict (quote (["my_table" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["last_updated" "timestamp with time zone"]] ["objects" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["json" "jsonb" {"constraint" "unique"}] ["last_updated" "timestamp with time zone"]] ["disks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}]] ["objects.disk" "->" "disks.id"] ["cloud" ["disks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}]] ["blocks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["blob" "blob"]] ["blocks.disk" "->" "disks.id"] ["AWS S3 Vancouver" "->" "disks"]])))
actual: (not (= (["my_table" {"shape" "sql_table\r"} ["id" "int" {"constraint" "primary_key"}] ["last_updated" "timestamp with time zone"]] ["objects" {"shape" "sql_table\r"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["json" "jsonb" {"constraint" "unique"}] ["last_updated" "timestamp with time zone"]] ["disks" {"shape" "sql_table\r"} ["id" "int" {"constraint" "primary_key"}]] ["objects.disk" "->" "disks.id"] ["cloud" ["disks" {"shape" "sql_table\r"} ["id" "int" {"constraint" "primary_key"}]] ["blocks" {"shape" "sql_table\r"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["blob" "blob"]] ["blocks.disk" "->" "disks.id"] ["AWS S3 Vancouver" "->" "disks"]]) (["my_table" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["last_updated" "timestamp with time zone"]] ["objects" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["json" "jsonb" {"constraint" "unique"}] ["last_updated" "timestamp with time zone"]] ["disks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}]] ["objects.disk" "->" "disks.id"] ["cloud" ["disks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}]] ["blocks" {"shape" "sql_table"} ["id" "int" {"constraint" "primary_key"}] ["disk" "int" {"constraint" "foreign_key"}] ["blob" "blob"]] ["blocks.disk" "->" "disks.id"] ["AWS S3 Vancouver" "->" "disks"]])))
FAIL in (sequence-digrams) (parse_test.clj:175)
Sequence Diagrams
expected: (= 1 (num-parses d2))
actual: (not (= 1 131072))
ERROR in (sequence-digrams) (utils.cljc:8)
Sequence Diagrams
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"direction" "right\r"} right
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4827$fn__4832.invoke (parse_test.clj:176)
dictim.d2.parse_test$fn__4827.invokeStatic (parse_test.clj:176)
dictim.d2.parse_test/fn (parse_test.clj:171)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (sequence-digrams) (parse_test.clj:177)
Sequence Diagrams
expected: (= dict (quote ({"direction" "right"} ["Before and after becoming friends" ["2007" "Office chatter in 2007" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] ["2012" "Office chatter in 2012" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["alice" "->" "bob" "Want to play with ChatGPT?"] ["bob" "->" "alice" "Yes!"] ["bob" "->" "alice.play" "Write a play..."] ["alice.play" "->" "bob.play" "about 2 friends..."] ["bob.play" "->" "alice.play" "who find love..."] ["alice.play" "->" "bob.play" "in a sequence diagram"]] ["2007" "->" "2012" "Five\nyears\nlater"]] ["Office chatter" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] {"shape" "sequence_diagram"} ["alice" "->" "bob" "What does it mean\nto be well-adjusted?"] ["bob" "->" "alice" "The ability to play bridge or\ngolf as if they were games."] {"shape" "sequence_diagram"} [:comment "Remember that semicolons allow multiple objects to be defined in one line"] [:comment "Actors will appear from left-to-right as a, b, c, d..."] [:list ["a"] ["b"] ["c"] ["d"]] [:comment "... even if the connections are in a different order"] ["c" "->" "d"] ["d" "->" "a"] ["b" "->" "d"])))
actual: (not (= ({"direction" "right\r"} ["Before and after becoming friends" ["2007" "Office chatter in 2007" {"shape" "sequence_diagram\r"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] ["2012" "Office chatter in 2012" {"shape" "sequence_diagram\r"} ["alice" "Alice"] ["bob" "Bobby"] ["alice" "->" "bob" "Want to play with ChatGPT?"] ["bob" "->" "alice" "Yes!"] ["bob" "->" "alice.play" "Write a play..."] ["alice.play" "->" "bob.play" "about 2 friends..."] ["bob.play" "->" "alice.play" "who find love..."] ["alice.play" "->" "bob.play" "in a sequence diagram"]] ["2007" "->" "2012" "Five\nyears\nlater"]] ["Office chatter" {"shape" "sequence_diagram\r"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] {"shape" "sequence_diagram\r"} ["alice" "->" "bob" "What does it mean\nto be well-adjusted?"] ["bob" "->" "alice" "The ability to play bridge or\ngolf as if they were games."] {"shape" "sequence_diagram\r"} [:comment "Remember that semicolons allow multiple objects to be defined in one line\r"] [:comment "Actors will appear from left-to-right as a, b, c, d...\r"] [:list ["a"] ["b"] ["c"] ["d"]] [:comment "... even if the connections are in a different order\r"] ["c" "->" "d"] ["d" "->" "a"] ["b" "->" "d"]) ({"direction" "right"} ["Before and after becoming friends" ["2007" "Office chatter in 2007" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] ["2012" "Office chatter in 2012" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["alice" "->" "bob" "Want to play with ChatGPT?"] ["bob" "->" "alice" "Yes!"] ["bob" "->" "alice.play" "Write a play..."] ["alice.play" "->" "bob.play" "about 2 friends..."] ["bob.play" "->" "alice.play" "who find love..."] ["alice.play" "->" "bob.play" "in a sequence diagram"]] ["2007" "->" "2012" "Five\nyears\nlater"]] ["Office chatter" {"shape" "sequence_diagram"} ["alice" "Alice"] ["bob" "Bobby"] ["awkward small talk" ["alice" "->" "bob" "uhm, hi"] ["bob" "->" "alice" "oh, hello"] ["icebreaker attempt" ["alice" "->" "bob" "what did you have for lunch?"]] ["unfortunate outcome" ["bob" "->" "alice" "that's personal"]]]] {"shape" "sequence_diagram"} ["alice" "->" "bob" "What does it mean\nto be well-adjusted?"] ["bob" "->" "alice" "The ability to play bridge or\ngolf as if they were games."] {"shape" "sequence_diagram"} [:comment "Remember that semicolons allow multiple objects to be defined in one line"] [:comment "Actors will appear from left-to-right as a, b, c, d..."] [:list ["a"] ["b"] ["c"] ["d"]] [:comment "... even if the connections are in a different order"] ["c" "->" "d"] ["d" "->" "a"] ["b" "->" "d"])))
FAIL in (styles) (parse_test.clj:133)
Styles
expected: (= 1 (num-parses d2))
actual: (not (= 1 65536))
ERROR in (styles) (utils.cljc:8)
Styles
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"style" {"opacity" 0.6, "fill" "orange\r", "stroke" ""#53C0D8"\r", "stroke-width" 5.0, "shadow" true}}
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_$fn__2386.invoke (validate.cljc:170)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:170)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$valid_inline_d2_attr_QMARK_.invokeStatic (validate.cljc:216)
dictim.validate$valid_inline_d2_attr_QMARK_.invoke (validate.cljc:210)
dictim.validate$valid_inline_attr_QMARK_.invokeStatic (validate.cljc:222)
dictim.validate$valid_inline_attr_QMARK_.invoke (validate.cljc:220)
dictim.validate$eval2415$fn__2416.invoke (validate.cljc:229)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4805.invokeStatic (parse_test.clj:134)
dictim.d2.parse_test/fn (parse_test.clj:129)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (globs) (parse_test.clj:347)
glob in dotted word but not in end position -> attribute
glob in dotted word in end position -> shape or container.
expected: (= 1 (num-parses d2))
actual: (not (= 1 8))
ERROR in (globs) (utils.cljc:8)
glob in dotted word but not in end position -> attribute
glob in dotted word in end position -> shape or container.
expected: (= true (v/all-valid? dict :d2))
' failed validation, in {"*.shape" "circle\r"}rcle
at dictim.utils$error.invokeStatic (utils.cljc:8)
dictim.utils$error.invoke (utils.cljc:8)
dictim.d2.attributes$err.invokeStatic (attributes.cljc:12)
dictim.d2.attributes$err.invoke (attributes.cljc:11)
dictim.d2.attributes$validation_error.invokeStatic (attributes.cljc:200)
dictim.d2.attributes$validation_error.invoke (attributes.cljc:199)
dictim.d2.attributes$validate_attr.invokeStatic (attributes.cljc:212)
dictim.d2.attributes$validate_attr.invoke (attributes.cljc:206)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:174)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_$fn__2386.invoke (validate.cljc:170)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:170)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_d2_attr_QMARK_.invokeStatic (validate.cljc:151)
dictim.validate$valid_d2_attr_QMARK_.invoke (validate.cljc:145)
dictim.validate$valid_attr_QMARK_.invokeStatic (validate.cljc:193)
dictim.validate$valid_attr_QMARK_.invoke (validate.cljc:191)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2401$fn__2402.invoke (validate.cljc:200)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$eval2454$fn__2455.invoke (validate.cljc:278)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
dictim.validate$eval2454$fn__2455.invoke (validate.cljc:277)
clojure.lang.MultiFn.invoke (MultiFn.java:229)
clojure.core$every_QMARK_.invokeStatic (core.clj:2698)
clojure.core$every_QMARK_.invoke (core.clj:2689)
dictim.validate$all_valid_QMARK_.invokeStatic (validate.cljc:308)
dictim.validate$all_valid_QMARK_.invoke (validate.cljc:298)
dictim.d2.parse_test$fn__4896$fn__4897$fn__4902.invoke (parse_test.clj:348)
dictim.d2.parse_test$fn__4896$fn__4897.invoke (parse_test.clj:348)
dictim.d2.parse_test$fn__4896.invokeStatic (parse_test.clj:343)
dictim.d2.parse_test/fn (parse_test.clj:342)
clojure.test$test_var$fn__9856.invoke (test.clj:717)
clojure.test$test_var.invokeStatic (test.clj:717)
clojure.test$test_var.invoke (test.clj:708)
clojure.test$test_vars$fn__9882$fn__9887.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars$fn__9882.invoke (test.clj:735)
clojure.test$default_fixture.invokeStatic (test.clj:687)
clojure.test$default_fixture.invoke (test.clj:683)
clojure.test$test_vars.invokeStatic (test.clj:731)
clojure.test$test_all_vars.invokeStatic (test.clj:737)
clojure.test$test_ns.invokeStatic (test.clj:758)
clojure.test$test_ns.invoke (test.clj:743)
clojure.core$map$fn__5935.invoke (core.clj:2772)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1790)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.test$run_tests.invokeStatic (test.clj:768)
clojure.test$run_tests.doInvoke (test.clj:768)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
cognitect.test_runner$test.invokeStatic (test_runner.clj:74)
cognitect.test_runner$test.invoke (test_runner.clj:62)
cognitect.test_runner.api$do_test.invokeStatic (api.clj:14)
cognitect.test_runner.api$do_test.invoke (api.clj:6)
cognitect.test_runner.api$test.invokeStatic (api.clj:28)
cognitect.test_runner.api$test.invoke (api.clj:16)
clojure.lang.Var.invoke (Var.java:384)
clojure.run.exec$exec.invokeStatic (exec.clj:88)
clojure.run.exec$exec.invoke (exec.clj:78)
clojure.run.exec$_main$fn__220.invoke (exec.clj:227)
clojure.run.exec$_main.invokeStatic (exec.clj:223)
clojure.run.exec$_main.doInvoke (exec.clj:191)
clojure.lang.RestFn.invoke (RestFn.java:397)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
FAIL in (globs) (parse_test.clj:349)
glob in dotted word but not in end position -> attribute
glob in dotted word in end position -> shape or container.
expected: (= dict (quote (["foods" ["pizzas" ["cheese"] ["sausage"] ["pineapple"] {".shape" "circle"}] ["humans" ["john"] ["james"] {".shape" "person"}] ["humans." "->" "pizzas.pineapple" "eats"]])))
actual: (not (= (["foods" ["pizzas" ["cheese"] ["sausage"] ["pineapple"] {".shape" "circle\r"}] ["humans" ["john"] ["james"] {".shape" "person\r"}] ["humans." "->" "pizzas.pineapple" "eats"]]) (["foods" ["pizzas" ["cheese"] ["sausage"] ["pineapple"] {".shape" "circle"}] ["humans" ["john"] ["james"] {".shape" "person"}] ["humans.*" "->" "pizzas.pineapple" "eats"]])))
Testing dictim.flat-test
Testing dictim.graphspec-test
Testing dictim.json-test
Testing dictim.template-test
Ran 81 tests containing 357 assertions.
19 failures, 10 errors.
Execution error (ExceptionInfo) at cognitect.test-runner.api/test (api.clj:30).
Test failures or errors occurred.

Thanks @eddielao I think I begin to see what is going on here.
The line return character on Mac and Linux is \n whereas on Windows its \r\n
This difference is leading to parser ambiguity. I think investigate further and see if I can fix.
I might ask you to re-clone the repository once fixed and re-run clj -X:test because I don't currently have access to a Windows development environment.
BTW this issue (#6) started off as being about something different (which I already fixed) so I will open a new issue just to deal with the \r\n

Thanks @eddielao I think I begin to see what is going on here. The line return character on Mac and Linux is \n whereas on Windows its \r\n This difference is leading to parser ambiguity. I think investigate further and see if I can fix. I might ask you to re-clone the repository once fixed and re-run clj -X:test because I don't currently have access to a Windows development environment. BTW this issue (#6) started off as being about something different (which I already fixed) so I will open a new issue just to deal with the \r\n

You're very welcome, @judepayne ! Let me know what else I can help with.

authors: eddielao judepayne krish777

repo: judepayne/dictim


text:
Fix the description wrap-up

Something to note I put everything on a single line in the bundle fragments so that it goes out as a single line. So it gets displayed correctly on html pages.

This looks good to me. Thanks!

source: gharchive/pull-request

authors: Cynerva ktsakalozos

license_type: permissive

license_source: github-api


text:
Update test_new_candidates.yml

Remove 1.3.* terraform, it's almost EOL.
Test against juju 2.9 Edge for now, not many 2.9 candidates any longer.
Fix the id, "*" from metrix.terraform is an invalid charm. Failure is:
Error: Artifact name is not valid: 68fd7566b9e8c652f8872c70909754f5064b494f-2.9-candidate-1.3.*. Contains the following character:  Asterisk *

@cderici I haven't seen an offical Hashicorp EOL, just an unofficial one. So leaving in the integration tests for now.

repo: juju/terraform-provider-juju


text:
Defect in MORPHING function

The morph function does not work correctly. I tested my svg in many ways, but none works. With morph da grensock it works perfectly, but paying 99 dolars a year is a bit complicated for those who live in Brazil.
greensock Morph:
Codepen
I tried this way with the animejs:
Codepen

Anime's svg morphing is really basic and doesn't extrapolate missing points and things like that.
Both shapes needs to have the same number of points.
And I have no plan of improving this part in the next releases.

@juliangarnier Thanks for the reply Julian. I really enjoyed animejs, especially the examples part, it's really good to understand how it works, besides being very compact. A pity this is not a priority, but I understand that this part of morph should be pretty laborious. By chance do you know of any other library that is of the morphSVG level of greensock? I've looked at kutejs, but also only accept simple shapes.
I needed something free because I do not currently have a fixed job. I worked 4 years in a company that made only static websites, no animations and stuff like that. Now I am trying to perfect myself in this part and wanted to choose a library that has a good community and that does not risk being abandoned.

source: gharchive/issue

authors: MartDSam juliangarnier

repo: juliangarnier/anime

license: mit

license_source: bigquery


text:
arbitrary shell commands with transform function of fzf

Checklist

[X] I have read through the manual page (man fzf)
[X] I have searched through the existing issues
[X] For bug reports, I have checked if the bug is reproducible in the latest version of fzf

Output of fzf --version
0.55.0 (brew)
OS

[ ] Linux
[X] macOS
[ ] Windows
[ ] Etc.

Shell

[ ] bash
[X] zsh
[ ] fish

Problem / Steps to reproduce
Hi,
Thanks for all you put in to maintaining this amazing tool.
I am trying to use transform, to create a keybinding as given in the ADVANCED.md file.   That is,
--bind "ctrl-f:transform: $HOME/.dotfiles/fzf/fzf_level $FZF_PROMPT"
The above command fzf_level contains the following,
prompt="$1"
if [[ ! "$prompt" =~ F ]]; then
echo 'change-prompt(F> )+reload(fd --type file . )'
else
echo 'change-prompt(D> )+reload(fd --type directory . )'
fi
Is something like this not possible ? The reason I want to do it in a separate script is to have more complicated branching and condition checking eventually.

It should work, except you have to escape the second $ to avoid immediate evaluation (i.e. \$FZF_PROMPT) or use the single-quotes.

authors: junegunn sabarish-vm

repo: junegunn/fzf

license: MIT


text:
Reduce the size of the shallow git repositories further

Even though vim-plug creates only shallow clones, the size of the cloned repositories can be further decreased:
$ find ~/.vim/plugged -maxdepth 1 -type d sh -c '(cd {} && git reflog expire --all --expire=now && git gc --aggressive --prune=now)' ';'

This is based on http://stackoverflow.com/q/2116778/1057593.
In my current setup I could get down from 224.6MiB to 108.6MiB.
What do you think about appending this command to :PlugInstall and :PlugUpdate?
I've noticed that some plugin authors, place gifs and other larger files into the git repository which are not required for installation. I guess in those cases, I have to accept that they are on my HDD.
Or does git-clone allow to ignore certain files and directories (e.g. test/*)?
Another idea would be: Some authors provide releases on github or vim.org. Would it be possible to follow only those (not using git anymore)?

That's good to know. Thanks for the suggestion. But I don't think it's essential to vim-plug and do not wish to add the behavior to the core in order not to further complicate the internals and the test scenario. We could instead make it an external command (e.g. :PlugPrune) and add it to the wiki page so one can say PlugUpdate | PlugPrune. Feel free to edit the page :)

I've noticed that some plugin authors, place gifs and other larger files into the git repository which are not required for installation
...
Another idea would be: Some authors provide releases on github or vim.org. Would it be possible to follow only those (not using git anymore)?

A better idea is just to tell them to stop doing that. They probably are not aware of the fact that those files bloat their repository and lead to poor user experience. Since git remembers the entire history, it's already too late for them to remove those files, but the users of vim-plug will still benefit thanks to shallow-clone support.

Thanks for your reply. I understand you very well. Actually, the maintainer of the git repositories should run $ git gc.
I am not really sure whether I want to stick with using git as backend for the plugin manager.
Even small plugins by tpope (e.g. vim-unimpaired) which do not contain any large files have a .git directory around 1MiB (disc usage). Too many small files in .git.
You don't happen to know a vim plugin manager which tracks releases as .tar.gz on github.com and vim.org/scripts?

Too many small files in .git.

If that's the concern, you could simply remove all the .git directories after installation. Though you'll have to reinstall everything whenever you want to update (for vim-plug it would be PlugInstall followed by PlugClean) Probably not an option.

You don't happen to know a vim plugin manager which tracks releases as .tar.gz on github.com and vim.org/scripts?

No, I'm not aware of any, and even if there is, I'm not sure how useful it would be, considering that

plugin authors usually do not bother to create tags (vim-unimpaired for example, hasn't been tagged since 2013)
many plugins these days are not even published to vim.org, and solely hosted on github.

@hori-ryota Hi. I agree with @junegunn that it isn't vim-plug's job to minimize the footprint of git repos. Apart from YCM, I haven't run into many huge ones. I have a bunch of plugins & YCM takes around 400M, the rest take about 60M. Considering most modern IDEs (Eclipse, Netbeans, VisualStudio) take multiple GB this doesn't seem terrible unreasonable. Development takes space.
Regarding doing what you want, I might make a suggestion. We allow quite flexible post install hooks. Using a hook you could do something like the following python pseudo code. The actual hook would be in a VimL function/script, though if you have ruby/python support you could use those languages or even invoke a shell script of your choice.
Important: To update with below hook, you would have to PlugClean then PlugInstall. I'd also like to note, I don't recommend, I just like thinking up odd solutions :).
def post_install():
    if install:
        # Delete `.git` folder
        # Recursively delete extensions that are useless: i.e. **/.png, **/*.jpeg, ...
        # Maybe remove folders you don't want like /doc

See further info @

I agree that by today's standards and in comparison with other tools one can live with it.
However, wasting space for unneeded files is not in the spirit of lightweight tools such as vim.
Other text editors (such as atom, sublime) also take much more space, but that's not a reason to waste disc space. I would suspect 90% of your 400MB are the git repos.
Another point I don't like about exclusively distributing software via git on the master/devel branch is that practically all users become beta tester. I don't need all commits instantaneously. Having stable software is a strong feature which I consider superior. The current situation encourages plugin authors to not release their software anymore according to classic software publishing paradigms (e.g. semver.org). At minimum they should have a stable master branch and development should occur on a separate branch (even with continuous integration).
From a plugin infrastructure point of view both release models should be equally supported.

Yeah, with vim-plug you can select branch or tag to use.

@Hotschke No just the one plugin YouCompleteMe is 400M, 100M is the .git, the rest is code, binaries and third parties. The 60M is ALL my other plugins.
Your main problem appears to be the ecosystems dev/distribution model. That ship sailed years ago when Vundle began mirroring vim.org scripts to github.com to be used with Vundle's plugin manager. So I don't see any way that will change unless something better rolls around (maybe neovim?). You are always free to fork and try your hand making it smaller/not git based plugin manager. I don't see vim-plug changing its method any time soon, so any further discussion probably moot.

authors: Hotschke junegunn starcraftman

repo: junegunn/vim-plug


text:
can not disable plugin vimtex even if I only enable it for tex files

I am using vim-plug to manage my plugins and it seems that vimtex are loaded even if I have instructed to load it only for tex files.
Here is a minimum init.vim to reproduce:
call plug#begin("~/.local/share/nvim/plugged")
Plug 'lervag/vimtex', { 'for': 'tex' }
call plug#end()

Open a Markdown file with the above settings using Neovim:
nvim -u init.vim test.md

Use :PlugStatus command and it shows that vimtex is actually loaded.

NVIM v0.3.4
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -Wconversion -U_FORTIFY_S
OURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-paramete
r -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnost
ics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_U
NIBI_HAS_VAR_FROM -I/tmp/neovim-20190113-94620-d8vv4n/neovim-0.3.4/build/config -I/tmp/neovim-201
90113-94620-d8vv4n/neovim-0.3.4/src -I/usr/local/include -I/usr/local/opt/gettext/include -I/Appl
ications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/us
r/include -I/tmp/neovim-20190113-94620-d8vv4n/neovim-0.3.4/build/src/nvim/auto -I/tmp/neovim-2019
0113-94620-d8vv4n/neovim-0.3.4/build/include
Compiled by brew@Mojave.local

Features: +acl +iconv +jemalloc +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/local/Cellar/neovim/0.3.4/share/nvim"

Type:

[x] Bug
[ ] Enhancement
[ ] Feature Request
[x] Question

OS:

[ ] All/Other
[ ] Linux
[x] OS X
[x] Windows

Vim:

[ ] Terminal Vim
[ ] GVim
[x] Neovim (on both platform, the neovim version is 0.3.4)

This is probably due to the commits folllowing https://github.com/junegunn/vim-plug/issues/785

@Konfekt is on point. for option for the plugin gives no benefit at all, rather it would add a small overhead, so we simply ignore the option.
It is stated in https://github.com/junegunn/vim-plug#on-demand-loading-of-plugins

for option is generally not needed as most plugins for specific file types usually don't have too much code in plugin directory.

and vimtex doesn't even have plugin directory.
I know it can be confusing, but vim-plug is doing the right thing for you. I'll see if the message on PlugStatus window can be improved.

authors: Konfekt jdhao junegunn


text:
Added public wrapper "GetPageSizeStr" of private method

Add public wrapper "GetPageSizeStr" of private method
Having GetPageSizeStr public is useful for having the correct SizeType (properly scaled).
Also, that SizeType can be used to call AddPageFormat(..)

Thanks, Marcus!

:+1:

authors: jung-kurt mrqzzz

repo: jung-kurt/gofpdf


text:
Make TestStorage safe for async tests

We can't use Uploadex.TestStorage with async tests because of the following random error:
** (exit) exited in: GenServer.call(Uploadex.TestStorage, {:update, #Function<6.116564614/1 in Uploadex.TestStorage.store/2>}, 5000)
         ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
     stacktrace:
       (elixir 1.12.3) lib/gen_server.ex:1014: GenServer.call/3
       (uploadex 3.0.0-rc.0) lib/storage/test_storage.ex:24: Uploadex.TestStorage.store/2

This probably happens because we use TestStorage.start_link() (which calls Agent.start_link(fn -> initial_value end, name: __MODULE__)) in the test setup, but the Agent process dies when the test is ended, but other tests relies on the same Agent instance, since it has the same name.
We could start only one instance of the Agent in the test_helper.ex, but all tests would use the same storage, causing other random errors, such as files from other tests in the stored state.
We want a completely isolated TestStorage per test. For that we need to have a unique name the Agent process. We could use the test module name, but this probably won't work because the TestStorage.store/2 and TestStorage.delete/2 are functions from behavior and are called from inside Uploadex, so we can't pass this names for this callback functions.
So probably a better approach would be using a name based on the current process pid.
What do you think? There's a better option here?

Haven't looked into it yet, but my suggestion is to see how other libraries are doing this, for example https://github.com/dashbitco/mox. The fact that we can assert how many times each function was called during the test makes me think they also use an Agent/GenServer, and they support async tests.

It seems mox has its own supervision tree: https://github.com/dashbitco/mox/blob/master/lib/mox/application.ex, so it's a global process not associated to any specific test process, and the GenServer keeps track of which processes are using it: https://github.com/dashbitco/mox/blob/be379dfcb256729cdf4ad76d50c937bc2202c5f2/lib/mox/server.ex#L235. That's in line with your first suggestion, but does seem more complicated because we need to handle the multiple asynchronous states in the code.
So if the idea of starting different processes based on the test pid works, that would be nice and simpler. If it doesn't, then we would probably need to follow a similar route from mox.

repo: jungsoft/uploadex


text:
Move this repo to jupyter-lsp ?

It might be worth thinking about moving this repo (and https://github.com/martinRenou/yaml-lsp?) outside of my user account, maybe https://github.com/jupyter-lsp would be a proper place?
cc. @jtpio @krassowski

Thanks for accepting! I will proceed with the transfer

Done :)

repo: jupyter-lsp/json-lsp


text:
minimal changes to host governance docs online

Per a recent conversation in the governance working group, this is a pull-request with the minimal amount of changes that make it possible to build our governance docs as a website. The goal of that is to make our governance procedures more discoverable and easier to read.
This PR builds the governance docs as a Jupyter Book, since that is (I think) what requires the fewest extra configuration files, but I'm happy to try a different website builder if we wish.
Note: This PR does not change any of the governance content, it makes minor edits to make the markdown files work with Sphinx.
The major changes that are in this PR:

Some links to direct documents had their extensions stripped so they'd work in Sphinx
The headers in the main governance document were mixed between ATX and Setext, so this standardizes all of them to be ATX
Some headers jumped from # to ###, this jumps instead to ##
A _toc.yml file now defines the structure of the governance book, and _config.yml has some simple configuration
A .github workflow will auto-update the website when new changes are made to the code, and the circleci configuration is used to preview changes that will occur in the built documentation

✨Here's how it looks: https://14-41781271-gh.circle-artifacts.com/0/html/intro.html ✨
If merged, I believe that this would then automatically be hosted at jupyter.org/governance
(note, it's unclear to me if this PR requires a full SC vote or not. If folks think it does, then let me know and I can make this a draft PR to make it clear others shouldn't vote yet)
cc @afshin @jasongrout and @tgeorgeux who seemed interested in this in the call today

Thanks @choldgraf!  What is the workflow to see the html preview on CircleCI?

(and bonus points if you add a file describing the process :smile:)

@blink1073 right now, you need to click on the CircleCI job, go to "artifacts", and then you'll see the list of built website files.
We could also add a github action that will add a "preview the documentation" link to a PR, if folks are +1 on that (though it wouldn't be triggered until it was merged into master the first time)
re: the process, I'm also happy to document a bit about the infrastructure to build the site (e.g. how to host it locally etc). I wanted to see if people were +1 on the idea in general first.

Can we put this in "draft" mode while we may still make changes to the content? :)

Thank you @choldgraf! The linked built version looks really good.

Love it!! Thanks a lot, @choldgraf :)

OK - addressed several of your comments @jasongrout , what do you think? https://9-41781271-gh.circle-artifacts.com/0/html/intro.html

Looks nice! Thanks so much for working hard on this Chris!
One more point. In the footer, we have:

It looks really weird to have copyright, followed by a waiver of copyright. I'm not sure what the right policy is here - do we need to assert copyright to waive it, or are we just confusing users by asserting copyright then immediately waiving it?

I feel like we could just remove the Copyright 2015 bit. I suspect that its information is a subset of the information inside the full CC-0 statement below

Thanks for working on this Chris! This looks really great. Just thinking - if there are any existing FAQs related to jupyter governance then this could also be a good place to link to.

I feel like we could just remove the Copyright 2015 bit. I suspect that its information is a subset of the information inside the full CC-0 statement below

I agree.

ok, latest push removes the "copyright," section since we now have the full CC-0 copyright info.
@sharanf - I'm not sure whether something like a Governance FAQ exists, but if it doesn't somebody please point it out and I'm happy to add links etc

ok, latest push removes the "copyright," section since we now have the full CC-0 copyright info.

Nice!
With that (commit 36bcd7bb7ca5e1044183b430f09cda1dcc8cd167), I move that we transition this PR out of draft status and vote on it to be merged. What do you think, @choldgraf? Anyone else have comments or changes before we vote?

Just thinking - if there are any existing FAQs related to jupyter governance then this could also be a good place to link to.

I don't know of any FAQs about the governance.

👍🏼to open voting

Sounds good - I've updated the top-level comment with the latest link to the built docs, and the PR is now in "active" state

This does not change the structure or the contents of the governance so it does not seem to something we should vote on.

I would prefer that we match the copyright language with what we have on the repo readme:
https://github.com/jupyter/governance#license-of-governance-documents
It has the extra phrase, "in accordance with the Creative Commons CC0 license"

I would prefer that we match the copyright language with what we have on the repo readme:

What text specifically are you asking to change?

@jasongrout the version of the copyright notice on the website lacks the extra phrase ""in accordance with the Creative Commons CC0 license" that is present in the README. Basically, I am proposing we use the language that is at the bottom of the repo README for the copyright notice. The reason is that without that extra clause, it isn't clear why we are "waived all copyright and related or neighboring rights." Waiving such rights isn't something we would normally do without a concrete, specific license, so we should mention the license when we waive it.

Thanks. To be clear, I think you are referring to these lines: https://github.com/jupyter/governance/pull/79/files#diff-aeb42283af8ef8e9da40ededd3ae2ab2R5-R22
Those were generated from the CC0 licensing wizard, and probably don't contain such text since it is immediately following the CC0 logo and metadata. I think adding that text is a nice clarification, but I also don't think it's a show-stopper since the CC0 license is already linked and displayed in that footer:

Since 6 SC members have already voted, can we take up adding that phrase in another PR? I think it's a good process practice to not change things after people have already reviewed and approved (though I do see that we have often done that, which leads to some confusion...)

I am not confident that people know what that logo is (I didn't). Totally
fine with that being a follow up PR. This bring up a question, do we want
to have a separate process for PRs to this repo that are not actually
changing the governance model to make work like this faster?
On Tue, May 26, 2020 at 12:03 PM Jason Grout notifications@github.com
wrote:

Thanks. To be clear, I think you are referring to these lines:
https://github.com/jupyter/governance/pull/79/files#diff-aeb42283af8ef8e9da40ededd3ae2ab2R5-R22
Those were generated from the CC0 licensing wizard, and probably don't
contain such text since it is immediately following the CC0 logo and
metadata. I think adding that text is a nice clarification, but I also
don't think it's a show-stopper since the CC0 license is already linked and
displayed in that footer:
[image: Screen Shot 2020-05-26 at 12 00 13 PM]
https://user-images.githubusercontent.com/192614/82939670-853c3a80-9f48-11ea-9a7d-4a045b124e3d.png
Since 6 SC members have already voted, can we take up adding that phrase
in another PR? I think it's a good process practice to not change things
after people have already reviewed and approved (though I do see that we
have often done that, which leads to some confusion...)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/jupyter/governance/pull/79#issuecomment-634216782,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAAGXUDCAAQRWBV7NBIULJLRTQG7TANCNFSM4NFN66WQ
.

--
Brian E. Granger
Principal Technical Program Manager, AWS AI Platform (brgrange@amazon.com)
On Leave - Professor of Physics and Data Science, Cal Poly
@ellisonbg on GitHub

This bring up a question, do we want to have a separate process for PRs to this repo that are not actually changing the governance model to make work like this faster?

And a process for deciding if a PR does change the governance model or not?

My current read is that if it does not change a policy, it does not fall under "Changes to the governance documents".  e.g. #81

@blink1073 that was my understanding from reading through the governance document as well.

My take on "should this require a full vote or not" is that we should assume everyone is acting in good faith and under the (reasonable) assumption that it's OK to merge w/o a full vote if the change is not substantially changing the governance documents themselves. (e.g. purely infrastructure changes, or minor typos in the docs)

wohooo https://jupyter.org/governance/intro.html

Great work Chris!
On Wed, May 27, 2020 at 8:38 AM Chris Holdgraf notifications@github.com wrote:

wohooo https://jupyter.org/governance/intro.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

--
Brian E. Granger
Principal Technical Program Manager, AWS AI Platform (brgrange@amazon.com)
On Leave - Professor of Physics and Data Science, Cal Poly
@ellisonbg on GitHub

Totally fine with that being a follow up PR.

@ellisonbg - do you want to open a follow-up PR?

authors: afshin blink1073 choldgraf ellisonbg fperez jasongrout sharanf tgeorgeux

repo: jupyter/governance


text:
Error installing configurable-http-proxy

Hi,
I've been testing out JupyterHub on Openstack, and it's worked well, but as of today, the following error crops up when installing configurable-http-proxy.
Command:
"/usr/bin/nodejs" "/usr/bin/npm" "install" "--global" "configurable-http-proxy"
Error Log Extract:
npm http GET https://registry.npmjs.org/strftime/-/strftime-0.8.4.tgz
npm http 200 https://registry.npmjs.org/strftime/-/strftime-0.8.4.tgz
npm ERR! Error: shasum check failed for /root/tmp/npm-12521-fswefMRr/1442410163225-0.8111752143595368/tmp.tgz
npm ERR! Expected: 86b15949845e7de20c0c3d69db2b74fb73e4d25e
npm ERR! Actual:   da39a3ee5e6b4b0d3255bfef95601890afd80709
npm ERR!     at /usr/lib/nodejs/sha/index.js:38:8
npm ERR!     at ReadStream.<anonymous> (/usr/lib/nodejs/sha/index.js:85:7)
npm ERR!     at ReadStream.EventEmitter.emit (events.js:117:20)
npm ERR!     at _stream_readable.js:920:16
npm ERR!     at process._tickCallback (node.js:415:13)
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.13.0-63-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" "--global" "configurable-http-proxy"
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.10

I've  retested this on Amazon EC2 with Ubuntu 14.04, and the same problem crops up. So I'm guessing there's some sort of package corruption? I've also tried building from source after upgrading the dependency on strftime from 0.8.4 to 0.9.2, which seems to solve the problem. Is there a possibility of getting the npm version fixed?

This has resolved itself - so presumably, the node packages were repaired.

Not for me - I get this with configurable-http-proxy installed.

@nuwang hi, hope you will be find. I'm getting the following error when trying to run configurable http-proxy command on ubuntu 16.04.
Command:npm install -g configurable-http-proxy
Error:
npm ERR! Linux 4.15.0-39-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "--global" "configurable-http-proxy"
npm ERR! node v4.2.6
npm ERR! npm  v3.5.2
npm ERR! code ECONNRESET
npm ERR! network tunneling socket could not be established, cause=write EPROTO
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
npm ERR! Please include the following file with any support request:
npm ERR!     /home/imtiaz/npm-debug.log
Please reply me as soon as possible. This is barrier while running jupyterhub.
Thanks in advance.

authors: Muhammad-Imtiaz jbrant nuwang

repo: jupyter/jupyterhub


text:
Editor cannot push text to console

A fundamental part of a data science focused IDE (R studio, Spyder, numerous plugins for sublime/emacs) is the ability to push text from the script editor to the terminal. I'm proposing in this issue that such functionality is added to jupyter lab. There should exist a key combo to automatically send a line or selection of text from the editor to the Console and or the terminal tabs. I'm not sure I know enough javascript to contribute such a feature, but I thought I'd put it out there.

Discussion is happening on #450 for this. We'd love to have your input there too!

authors: jasongrout thenomemac

repo: jupyter/jupyterlab


text:
Autodetect repo to launch based on HTTP referer

Given https://github.com/jupyterhub/binderhub/pull/891 has been in draft for a few years, I wanted to memorialize the feature it is trying to add in this issue so we can close the PR.
We could add an /autodetect endpoint that would detect the URL to launch based on the referer, and redirect the user to the correct full URL.
However, I think there's been some changes in which links get Referer passed and which don't in the last few years, so I'm not sure what the feasibility of this is.

I don't think it's worth doing any more. Browser security and anti-tracking protections have increased a lot to the point where it wouldn't be reliable.
Auto detecting a pasted URL is nice though (covered in another issue).

authors: manics yuvipanda

repo: jupyterhub/binderhub


text:
bqplot example in configuration docs is broken

Description

When running the example notebook in https://jupyterlite-sphinx.readthedocs.io/en/latest/configuration.html, I get the following:

ValueError: Requested 'widgetsnbextension~=3.6.0', but widgetsnbextension==3.5.0 is already installed

I am especially interested in this since I am trying to use bqplot for my project also, that's why I visited the page actually
Reproduce

Go to https://jupyterlite-sphinx.readthedocs.io/en/latest/configuration.html
Click on run all
Scroll down to the first cell
See error

ValueError: Requested 'widgetsnbextension~=3.6.0', but widgetsnbextension==3.5.0 is already installed

Expected behavior

Context

JupyterLite version:
Operating System and version: MacOS 12.1
Browser and version: Chrome 99

Browser Output

index.es6.js:288 Plugin '@jupyterlab/drawio-extension:plugin' failed to activate.
(anonymous) @ index.es6.js:288
Promise.catch (async)
(anonymous) @ index.es6.js:287
e.start @ index.es6.js:286
(anonymous) @ index.js:306
await in (anonymous) (async)
86798 @ index.js:310
v @ bootstrap:19
Promise.then (async)
(anonymous) @ bootstrap.js:90
await in (anonymous) (async)
20514 @ bootstrap.js:64
v @ bootstrap:19
(anonymous) @ startup:4
(anonymous) @ bundle.js?_=75b8d6e:1
index.es6.js:289 Error: No provider for: @jupyterlab/application:ILayoutRestorer.
    at f.e.resolveRequiredService (index.es6.js:201:35)
    at index.es6.js:156:70
    at Array.map ()
    at f.e.activatePlugin (index.es6.js:156:38)
    at index.es6.js:287:26
    at Array.map ()
    at f.e.start (index.es6.js:286:33)
    at index.js:306:13

Thanks for reporting! We probably need to update the configuration https://github.com/jupyterlite/jupyterlite-sphinx/blob/main/docs/jupyterlite_config.json

Rebuilding the docs with the latest jupyterlite version fixed it https://jupyterlite-sphinx.readthedocs.io/en/latest/configuration.html thanks again for reporting!

authors: horaceg martinRenou

repo: jupyterlite/jupyterlite-sphinx