diff --git a/README.md b/README.md
index 3db50b7..5b7d3bb 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Note, though, that internationalisation files for languages other than British E
 
 The following severity levels are understood:
 
-   0. `info` things which are not actuallys fault, but issues noted during
+   0. `info` things which are not actually faults, but issues noted during
       validation;
    1. `minor` things which I consider to be faults, but which
       don't actually breach the spec;
diff --git a/docs/cloverage/codecov.json b/docs/cloverage/codecov.json
index def2f8e..bb5d8b2 100644
--- a/docs/cloverage/codecov.json
+++ b/docs/cloverage/codecov.json
@@ -2,95 +2,90 @@
  {"dog_and_duck/quack/picky/constants.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, 1, null, null, null,
-   null, 1, null, null, null, null, 1, null, null, null, null, null, 1,
-   null, null, null, 1, null, 1, null, null, null, null, null, null,
-   null, null, null, null, null, 1, null, 1, null, 1, 1, 1, 1, 1, 1,
-   null, 1, null, null, null, null, 1, null, null, null, null, 1, null,
-   null, null, null],
+   null, null, null, null, null, 1, null, null, null, null, 1, null,
+   null, null, null, null, 1, null, null, null, 1, null, 1, null, null,
+   null, null, 1, null, null, null, null, null, null, null, null, null,
+   null, null, 1, null, 1, null, 1, 1, 1, 1, 1, 1, null, 1, null, null,
+   null, null, 1, null, null, null, null, 1, null, null, null, null, 1,
+   null, null, null, null, null, 1, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, 1, null, null,
+   null, 1, null],
   "dog_and_duck/quack/picky/utils.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, null, null, null, null, null, null, 1,
-   null, null, 7, null, 1, null, null, null, 0, null, 1, null, null,
-   null, null, null, 0, 0, 0, 0, 0, null, 1, null, null, 0, 0, 0, null,
-   null, null, null, true, null, null, 0, null, null, 1, null, null,
-   null, 4, null, 1, null, null, null, 0, 0, 0, 0, null, 1, null, null,
-   null, 3, 3, true, 3, null, 1, null, null, null, true, true, 45, 45,
-   45, 70, 45, null, 0, 0, null, 0, 0, null, 1, null, null, null, null,
-   null, null, true, 162, 66, true, 6, null, null, null, 53, null,
-   null, 3, null, 1, null, null, null, null, null, null, null, null,
-   220, 220, 220, 220, null, 220, null, 220, null, 220, 220, true,
-   null, 0, 0, null, 53, null, null, 2, 2, null, 1, null, null, null,
-   true, null, 1, null, null, null, null, null, null, 0, 0, 0, 0, 0, 0,
-   0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, null,
-   null, null, null, null, null, 0, 0, null, 0, null, 3, null, null,
-   null, 3, null, 1, null, null, null, null, null, 0, null, 0, 0, null,
-   null, 1, null, null, null, null, null, null, true, 53, 53, 53, 3,
-   53, 53, 41, 53, 9, 53, 16, null, 0, 0, 0, 0, 0, null, null, 1, null,
+   null, null, null, null, null, null, null, null, null, 1, null, null,
+   7, null, 1, null, null, null, 1023, null, 1, null, null, null, true,
+   null, 1, null, null, null, null, null, null, null, null, null, true,
+   1023, 1023, true, true, true, 1023, 140, null, 1, null, null, true,
+   408, 352, null, null, null, null, 125, 122, 70, null, null, null,
+   true, null, null, 0, null, null, 1, null, null, null, 74, null, 1,
+   null, null, null, 70, 70, true, 70, null, 1, null, null, null, 3, 3,
+   true, 3, null, 1, null, null, null, true, 0, null, 0, 0, 16, true,
+   11, 11, 11, true, 21, null, 11, null, 0, 0, null, 0, 0, null, 1,
+   null, null, null, null, null, null, true, 56, 47, true, 8, null,
+   null, null, 1, null, null, 1, null, 1, null, null, null, null, null,
+   null, null, null, 99, 99, 99, 99, null, 99, null, 99, null, 99, 99,
+   true, null, 0, 0, null, 115, null, null, 2, 2, null, 1, null, null,
+   null, true, null, 1, null, null, null, null, null, null, 12, 12, 12,
+   true, true, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 1, null, 1,
+   null, null, null, null, null, null, null, null, null, 1, 1, null, 1,
+   null, 1, null, null, null, 298, null, 1, null, null, null, null,
+   null, 0, null, 0, 0],
+  "dog_and_duck/quack/picky/time.clj":
+  [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, null,
-   null, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 1,
-   null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0],
+   null, null, null, null, null, 1, null, null, null, true, true, null,
+   0, null, null, 0, null, null, 1, null, null, null, 0, 0, 0, null, 0,
+   null, null, 0, null, null, 1, null, null, null, null, null, null, 0,
+   0, 0, 0, 0],
   "dog_and_duck/quack/quack.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, null, 1, null, null, null, null, null,
+   null, null, null, null, null, null, null, 1, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, 34, null, 34, null, 1, null, null, null, null,
-   null, 4, null, 4, null, 1, null, 3, null, 3, null, 1, null, null,
-   null, null, null, null, null, 0, 0, 0, 0, null, null, null, null, 1,
-   null, 0, null, 0, null, 1, null, 0, null, 0, null, 1, null, null,
-   null, null, null, 0, 0, 0, null, null, 1, null, null, null, null,
-   null, true, true, true, true, 2, 1, null, 1, 1, true, true, 1, null,
-   null, null, null, null, null, null, null, 0, 0, 0, 0, null, null, 1,
-   null, null, 0, null, 1, null, null, 0, null, 1, null, null, 0, null,
-   1, null, null, 2, null, null],
-  "dog_and_duck/quack/picky/fault_messages.clj":
-  [null, 1, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, null, null, null, null, 1, null, 1,
-   null, null, null, null, null, null, null, null, null, null, null,
-   null],
+   null, null, null, null, 14, null, 14, null, 1, null, null, null,
+   null, null, 1, null, true, null, 1, null, 3, null, 3, null, 1, null,
+   null, null, null, null, null, null, 0, 0, 0, 0, null, null, null,
+   null, 1, null, 0, null, 0, null, 1, null, 0, null, 0, null, 1, null,
+   null, null, null, null, 0, 0, 0, null, null, 1, null, null, null,
+   null, null, true, true, true, true, 2, 1, null, 1, 1, true, true, 1,
+   null, null, null, null, null, null, null, null, 0, 0, 0, 0, null,
+   null, 1, null, null, 0, null, 1, null, null, 0, null, 1, null, null,
+   0, null, 1, null, null, 2, null, null],
   "dog_and_duck/utils/process.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, 1, null, null, null,
    null, null, null, 1, 1, 1, 1, 1, null, true, null, null, null, null,
    null, null, null, null, null, 1, null, 1, null, null, null, null,
    1],
-  "clj_activitypub/internal/http_util.clj":
-  [null, 1, null, null, null, null, null, null, null, null, 1, 1, 1, 1,
-   2, 2, 1, 1, 1, null, 1, 0, 0, null, 1, null, null, null, 0],
-  "clj_activitypub/internal/thread_cache.clj":
-  [null, 1, null, null, null, null, 1, null, null, 8, null, 1, 4, 4, 4,
-   null, 1, null, 2, null, 2, 2, 2, 2, 2, 2, 2, 2, null, 4, 4, 4, null,
-   4, 4, 2, 2, true, 2, 2, null, 0, 0, 0, 2, 2, 2, 2],
   "dog_and_duck/scratch/parser.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, 1, null, null, null, 9, 9, 9, 9, 9, true, 0, null, null, null,
-   null, null, null, null, null, null, null, null, null, null],
-  "dog_and_duck/quack/picky/required_properties.clj":[null, 1],
+   null, 1, null, null, null, 11, 11, 11, 11, 11, true, 0, null, null,
+   null, null, null, null, null, null, null, null, null, null, null],
+  "dog_and_duck/quack/picky/scratch.clj":
+  [null, 1, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null],
   "dog_and_duck/quack/picky/control_variables.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, 1, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, 1, null, null, null, null, null,
    null, null, null],
-  "clj_activitypub/core.clj":
-  [null, 1, null, null, null, null, null, null, null, null, null, 1,
-   null, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null,
-   null, null, 6, 2, 2, null, 1, 1, null, null, null, 1, 1, 1, 1, null,
-   null, 1, null, 1, null, null, null, 0, null, 0, null, 0, 0, 0, 0, 0,
-   0, null, 1, null, 1, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null, null, 0,
-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, 0, 0, 0, 0,
-   0, 0, 0, null, 1, null, null, null, true, null, 1, null, null, null,
-   null, null, 0, null, 0, 0, 0, 0, 0, null, 1, null, null, null, true,
-   null, 1, 0, null, null, 0, 0, null, 1, 0, null, null, 0, 0, null, 1,
-   null, null, null, 0, 0, 0, 0, 0, 0],
-  "clj_activitypub/internal/crypto.clj":
-  [null, 1, null, null, null, null, null, null, null, 1, 1, null, 1, 0,
-   0, null, null, 1, 0, 0, null, 1, 0, 0, null, null, 1, 0, null, 1, 0,
-   0, null, 1, 0, 0, 0, 0, 0, null],
+  "dog_and_duck/quack/cli.clj":
+  [null, 1, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, 1, null, null, null, 1, null, 1, null, 1,
+   null, 1, null, 0, true, 1, 1, 1, null, 0, true, 1, null, 1, 1, null,
+   1, null, 0, 0, 0, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, 0, null,
+   1, null, 0, null, 1, null, 0, 0, null, 1, 0, null, 0, 0, 0, 0, 0, 0,
+   0, null, null, 1, null, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, 0,
+   null, 0, 0, 0, 0, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 1,
+   null, 0, 0, 0, 0, 0, 0, null, 1, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0,
+   0, 0, 0, 0, 0, 0, 0],
   "dog_and_duck/quack/picky.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
@@ -98,34 +93,68 @@
    null, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, 1, null, null, null, null, 0,
-   null, 6, 6, null, 0, null, 0, null, 4, null, 1, null, null, 12, 12,
-   12, 12, 9, 8, 4, null, 1, null, 0, 3, null, 0, 0, 0, 0, null, 1,
-   null, null, 3, 3, 3, 3, 1, 3, 3, 3, 3, null, 1, null, null, null,
-   null, 0, 0, 0, 0, 0, 0, null, null, null, 1, null, null, null, true,
-   0, true, true, null, 1, null, null, null, 1, null, 1, null, null, 1,
-   null, 1, 0, null, null, null, 1, null, null, 1, 1, 1, 1, null, 1, 1,
-   1, 1, 1, 1, null, 1, 1, 1, 0, null, null, null, 1, 1, 1, 1, 1, 1, 1,
-   1, 1, 1, 1, 1, 1, 1, 1, 1, null, 1, null, null, null, null, null,
-   null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0,
-   0, 0, null, 1, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, null, 0, 0, 0, 0, 0, 0, null, null,
-   null, null, null, 0, 0, 0, 0, null, null, 0, 0],
-  "dog_and_duck/scratch/core.clj":
+   null, 6, 6, null, 0, null, 0, null, 4, null, 1, null, null, 9, 9, 8,
+   8, 7, 6, 3, null, 1, null, 0, 1, null, 0, 0, 0, 0, null, 1, null,
+   null, 3, 3, 3, 3, 1, 3, 3, 3, 3, null, 1, null, null, null, null, 0,
+   0, 0, 0, 0, 0, null, null, null, 1, null, null, null, true, 0, true,
+   true, null, 1, null, null, null, 1, null, 1, null, null, 1, null, 1,
+   0, null, null, null, 1, null, null, 1, 1, 1, 1, null, 1, 1, 1, 1, 1,
+   1, null, 1, 1, 1, 0, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, null, 1, null, null, null, null, null, null, null,
+   0, 0, 0, null, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, 0, 0, 0,
+   null, 1, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, 3, 3, 3, 3, 12, 3, null, null, null,
+   null, null, 3, true, 1, 1, null, null, true, 0],
+  "dog_and_duck/quack/picky/objects.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
-   null, null, null, null, null, null, null, 1, null, null, 0],
-  "clj_activitypub/webfinger.clj":
-  [null, 1, null, null, null, null, null, null, null, 1, null, 1, 1,
-   null, 1, null, null, 1, 1, 1, null, 1, 1, null, 1, null, null, null,
-   3, 3, 3, true, 1, true, 2, null],
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, 1, null, 0, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null, 1,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, 1, 1, true, 0, 0, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, null, null, null, null, null, 85, 85, 73, 33, true, null, 1, 1,
+   1, 78, 1, 1, 76, 1, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, null, null, null, null, null, 70, 70, 58, 20, 8, null, 1, 1, 1,
+   70, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, null, true, 1, 1,
+   null, null, true, 1, 1, 547, 51, null, 1, 1, true, 1, 1, true, 1, 1,
+   1, 1, null, 1, 1, true, 70, null, null, 12, 12, 12, true, 1, 1, 1,
+   true, 70, 0, null, null, null, null, null, null, null, null, 70, 70,
+   null, 20, 8, null, 1, 1, null, null, null, 1, 1, 1, true, 1, 1, 1,
+   1, 1, true, 1, 1, 1, 1, 1, 12, null, 1, 1, 1, 1, null, null, null,
+   1, 1, null, 1, null, 1, 1, true, 66, null, null, 14, 14, 0, true, 1,
+   1, 1, 1, 1, 1, 70, null, 12, null, 1, 1, 12, null, 1, 1, null, 1, 1,
+   1, 1, 1, 1, true, null, 1, 1, true, 1, 1, null, true, 1, null, null,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, null, null, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, null, 1, 1, 1, null, null,
+   true, 1, 1, 1, 1, 1, true, 1, 1, 1, null, 1, 1104, 1104, 1104, 807,
+   807, 21, null, 1, null, null, 1104, 1104, 1104, 1104, 283, 283, 283,
+   null, 1, 549, true, 547, true, 547, 547, 547, 547, null, 1, null,
+   null, null, 42, 42, 42, 41, 41, 2542, 41, 41, 549, 41, null, 1,
+   null, null, null, null, null, null, null, null, null, null, null,
+   42, 42, 42, 42, 3, 42, 42, 20, 42, 3, 42, 17, 42, null, 16, 16, 16,
+   12, 12, null, 1, null, null, null, null, null, null, null, null, 1,
+   1, true, true, 0, null, 0, null, null, 0, null, null, 1, null, null,
+   null, null, 10, 10, 0, true, null, 1, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, 18, 18, 8, 0, null, null, 0, 0, 0, null, 0, 0, 7, 1, 1, null,
+   1, 1, 1, 1, 17, null, 1, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0,
+   0, null, 0, 0, 0, 0],
   "dog_and_duck/scratch/scratch.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, null, 1, null, 1, 1, 1, null, null, null, null, 1, null, 1, 1,
-   1, 1, null, null, 1, null, null, null, null, null, null, null, 1, 1,
-   1, 1, 1, 1, null, null],
+   null, null, null, null, null, 1, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, null, null, null],
   "dog_and_duck/quack/picky/collections.clj":
   [null, 1, null, null, null, null, null, null, null, null, null, null,
    null, null, null, null, null, null, null, null, null, null, null,
-   null, 1, null, null, null, 0, 0, 0, 0, 0, 0, null, 1, null, null,
-   null, 0, 0, 0, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, null, null,
-   0, 0]}}
+   null, 1, null, null, null, 3, 3, 3, 3, 3, 2, null, 1, null, null,
+   null, 6, 6, 6, 6, 6, 6, 6, 6, null, 1, null, null, null, 2, 2, 2, 2,
+   2, null, null, 2, 2],
+  "dog_and_duck/quack/picky/distribution.clj":
+  [null, 1, null, null, null, null, null, null, null, null, null, null,
+   null, null, null, null, null, null, null, 1, null, null, null, null,
+   null, 0, 0, 0, 0, null, null]}}
diff --git a/docs/cloverage/coverage.xml b/docs/cloverage/coverage.xml
index a91e783..d2621c3 100644
--- a/docs/cloverage/coverage.xml
+++ b/docs/cloverage/coverage.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><report><stats><packages value="17"/><methods value="2634"/><srcfiles value="17"/><srclines value="572"/></stats><data><all name="total"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="50% (1326/2634)"/><coverage type="line, %" value="53% (303/572)"/><package name="dog-and-duck.scratch.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (66/66)"/><coverage type="line, %" value="100% (17/17)"/></package><package name="clj-activitypub.internal.thread-cache"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="83% (105/126)"/><coverage type="line, %" value="88% (30/34)"/></package><package name="clj-activitypub.internal.crypto"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="19% (9/48)"/><coverage type="line, %" value="39% (9/23)"/></package><package name="dog-and-duck.quack.quack"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="47% (122/262)"/><coverage type="line, %" value="51% (25/49)"/></package><package name="clj-activitypub.webfinger"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="96% (107/112)"/><coverage type="line, %" value="89% (16/18)"/></package><package name="dog-and-duck.quack.picky"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="42% (169/406)"/><coverage type="line, %" value="59% (65/111)"/></package><package name="clj-activitypub.internal.http-util"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="74% (29/39)"/><coverage type="line, %" value="80% (12/15)"/></package><package name="dog-and-duck.quack.picky.collections"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="3% (4/133)"/><coverage type="line, %" value="17% (4/24)"/></package><package name="dog-and-duck.quack.picky.constants"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (73/73)"/><coverage type="line, %" value="100% (18/18)"/></package><package name="dog-and-duck.quack.picky.required-properties"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (1/1)"/><coverage type="line, %" value="100% (1/1)"/></package><package name="dog-and-duck.scratch.core"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="33% (2/6)"/><coverage type="line, %" value="67% (2/3)"/></package><package name="dog-and-duck.quack.picky.control-variables"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (5/5)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.utils.process"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="89% (34/38)"/><coverage type="line, %" value="91% (10/11)"/></package><package name="dog-and-duck.quack.picky.utils"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="50% (479/959)"/><coverage type="line, %" value="39% (57/147)"/></package><package name="dog-and-duck.quack.picky.fault-messages"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (29/29)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.scratch.parser"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="70% (21/30)"/><coverage type="line, %" value="78% (7/9)"/></package><package name="clj-activitypub.core"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="24% (71/301)"/><coverage type="line, %" value="28% (24/86)"/></package></all></data></report>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><report><stats><packages value="14"/><methods value="3905"/><srcfiles value="14"/><srclines value="793"/></stats><data><all name="total"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="61% (2375/3905)"/><coverage type="line, %" value="68% (538/793)"/><package name="dog-and-duck.scratch.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (3/3)"/><coverage type="line, %" value="100% (2/2)"/></package><package name="dog-and-duck.quack.picky.time"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="7% (10/135)"/><coverage type="line, %" value="22% (4/18)"/></package><package name="dog-and-duck.quack.quack"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="46% (121/262)"/><coverage type="line, %" value="49% (24/49)"/></package><package name="dog-and-duck.quack.picky"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="55% (225/406)"/><coverage type="line, %" value="66% (74/112)"/></package><package name="dog-and-duck.quack.picky.distribution"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="10% (2/20)"/><coverage type="line, %" value="33% (2/6)"/></package><package name="dog-and-duck.quack.picky.objects"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="81% (1220/1499)"/><coverage type="line, %" value="83% (278/333)"/></package><package name="dog-and-duck.quack.picky.collections"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (130/130)"/><coverage type="line, %" value="100% (25/25)"/></package><package name="dog-and-duck.quack.picky.constants"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (99/99)"/><coverage type="line, %" value="100% (23/23)"/></package><package name="dog-and-duck.quack.cli"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="12% (70/584)"/><coverage type="line, %" value="22% (20/93)"/></package><package name="dog-and-duck.quack.picky.control-variables"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (5/5)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.utils.process"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="89% (34/38)"/><coverage type="line, %" value="91% (10/11)"/></package><package name="dog-and-duck.quack.picky.utils"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="63% (434/693)"/><coverage type="line, %" value="60% (65/108)"/></package><package name="dog-and-duck.quack.picky.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (1/1)"/><coverage type="line, %" value="100% (1/1)"/></package><package name="dog-and-duck.scratch.parser"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="70% (21/30)"/><coverage type="line, %" value="78% (7/9)"/></package></all></data></report>
\ No newline at end of file
diff --git a/docs/cloverage/dog_and_duck/quack/cli.clj.html b/docs/cloverage/dog_and_duck/quack/cli.clj.html
new file mode 100644
index 0000000..6611554
--- /dev/null
+++ b/docs/cloverage/dog_and_duck/quack/cli.clj.html
@@ -0,0 +1,425 @@
+<html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <link rel="stylesheet" href="../../coverage.css"/>  <title> dog_and_duck/quack/cli.clj </title>
+ </head>
+ <body>
+<span class="covered" title="1 out of 1 forms covered">
+                001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.cli
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:refer&nbsp;[read-str]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.java.io&nbsp;:refer&nbsp;[resource]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.pprint&nbsp;:refer&nbsp;[pprint]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.string&nbsp;:refer&nbsp;[join]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.tools.cli&nbsp;:refer&nbsp;[parse-opts]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[severity]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[hiccup.core&nbsp;:refer&nbsp;[html]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[scot.weft.i18n.core&nbsp;:refer&nbsp;[get-message&nbsp;*config*]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[trptr.java-wrapper.locale&nbsp;:as&nbsp;locale])
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                014&nbsp;&nbsp;&nbsp;&nbsp;(:gen-class))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                015&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                016&nbsp;&nbsp;(def&nbsp;^:const&nbsp;stylesheet-url
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                017&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;fix&nbsp;this&nbsp;to&nbsp;github&nbsp;pages&nbsp;before&nbsp;go&nbsp;live
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;style.css&quot;)
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                019&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                020&nbsp;&nbsp;(def&nbsp;cli-options
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;An&nbsp;option&nbsp;with&nbsp;a&nbsp;required&nbsp;argument
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                022&nbsp;&nbsp;&nbsp;&nbsp;[[&quot;-i&quot;&nbsp;&quot;--input&nbsp;SOURCE&quot;&nbsp;&quot;The&nbsp;file&nbsp;or&nbsp;URL&nbsp;to&nbsp;validate&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;&quot;standard&nbsp;input&quot;]
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-o&quot;&nbsp;&quot;--output&nbsp;DEST&quot;&nbsp;&quot;The&nbsp;file&nbsp;to&nbsp;write&nbsp;to,&nbsp;defaults&nbsp;to&nbsp;standard&nbsp;out&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;&quot;standard&nbsp;output&quot;]
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-f&quot;&nbsp;&quot;--format&nbsp;FORMAT&quot;&nbsp;&quot;The&nbsp;format&nbsp;to&nbsp;output,&nbsp;one&nbsp;of&nbsp;`edn`&nbsp;`csv`&nbsp;`html`&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;:edn
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:parse-fn&nbsp;#(keyword&nbsp;%)
+                </span><br/>
+<span class="partial" title="3 out of 9 forms covered">
+                029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validate&nbsp;[#(#{:csv&nbsp;:edn&nbsp;:html}&nbsp;%)&nbsp;&quot;Expect&nbsp;one&nbsp;of&nbsp;`edn`&nbsp;`csv`&nbsp;`html`&quot;]]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-l&quot;&nbsp;&quot;--language&nbsp;LANG&quot;&nbsp;&quot;The&nbsp;ISO&nbsp;639-1&nbsp;code&nbsp;for&nbsp;the&nbsp;language&nbsp;to&nbsp;output&quot;
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;(-&gt;&nbsp;(locale&#x2F;get-default)&nbsp;locale&#x2F;to-language-tag)]
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-s&quot;&nbsp;&quot;--severity&nbsp;LEVEL&quot;&nbsp;&quot;The&nbsp;minimum&nbsp;severity&nbsp;of&nbsp;faults&nbsp;to&nbsp;report&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;:info
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:parse-fn&nbsp;#(keyword&nbsp;%)
+                </span><br/>
+<span class="partial" title="5 out of 8 forms covered">
+                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validate&nbsp;[#(severity&nbsp;%)&nbsp;(join&nbsp;&quot;&nbsp;&quot;
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Expected&nbsp;one&nbsp;of&quot;
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;name&nbsp;severity)))]]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-h&quot;&nbsp;&quot;--help&quot;]])
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                040&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                041&nbsp;&nbsp;(defn&nbsp;validate
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                042&nbsp;&nbsp;&nbsp;&nbsp;[source]
+                </span><br/>
+<span class="not-covered" title="0 out of 6 forms covered">
+                043&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Reading&nbsp;&quot;&nbsp;source))
+                </span><br/>
+<span class="not-covered" title="0 out of 6 forms covered">
+                044&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[input&nbsp;(read-str&nbsp;(slurp&nbsp;source))]
+                </span><br/>
+<span class="not-covered" title="0 out of 11 forms covered">
+                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(map?&nbsp;input)&nbsp;(object-faults&nbsp;(keywordize-keys&nbsp;input))
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;input)
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;map?&nbsp;input))&nbsp;(map&nbsp;#(object-faults
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;%)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                050&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                051&nbsp;&nbsp;(defn&nbsp;output-csv
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                052&nbsp;&nbsp;&nbsp;&nbsp;[faults]
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                053&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[cols&nbsp;(set&nbsp;(reduce&nbsp;concat&nbsp;(map&nbsp;keys&nbsp;faults)))]
+                </span><br/>
+<span class="not-covered" title="0 out of 15 forms covered">
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(with-out-str
+                </span><br/>
+<span class="not-covered" title="0 out of 9 forms covered">
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(join&nbsp;&quot;,&nbsp;&quot;&nbsp;(map&nbsp;name&nbsp;cols)))
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
+                </span><br/>
+<span class="not-covered" title="0 out of 12 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(println&nbsp;(join&nbsp;&quot;,&nbsp;&quot;&nbsp;(map&nbsp;(fn&nbsp;[p]&nbsp;(p&nbsp;%))&nbsp;cols)))
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                059&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                060&nbsp;&nbsp;(defn&nbsp;html-header-row
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                061&nbsp;&nbsp;&nbsp;&nbsp;[cols]
+                </span><br/>
+<span class="not-covered" title="0 out of 16 forms covered">
+                062&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;vector&nbsp;(cons&nbsp;:tr&nbsp;(map&nbsp;#(vector&nbsp;:th&nbsp;(name&nbsp;%))&nbsp;cols))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                063&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                064&nbsp;&nbsp;(defn&nbsp;html-fault-row
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                065&nbsp;&nbsp;&nbsp;&nbsp;[fault&nbsp;cols]
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                066&nbsp;&nbsp;&nbsp;&nbsp;(apply
+                </span><br/>
+<span class="not-covered" title="0 out of 14 forms covered">
+                067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&nbsp;(cons&nbsp;:tr&nbsp;(map&nbsp;(fn&nbsp;[col]&nbsp;(vector&nbsp;:td&nbsp;(col&nbsp;fault)))&nbsp;cols))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                068&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                069&nbsp;&nbsp;(defn-&nbsp;version-string&nbsp;[]
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                070&nbsp;&nbsp;&nbsp;&nbsp;(join
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;dog-and-duck&#x2F;quack&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try
+                </span><br/>
+<span class="not-covered" title="0 out of 21 forms covered">
+                074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(some-&gt;&gt;
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(resource&nbsp;&quot;META-INF&#x2F;maven&#x2F;dog-and-duck&#x2F;dog-and-duck&#x2F;pom.properties&quot;)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slurp
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(re-find&nbsp;#&quot;version=(.*)&quot;)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;_&nbsp;nil))]))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                080&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                081&nbsp;&nbsp;(defn&nbsp;output-html
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                082&nbsp;&nbsp;&nbsp;&nbsp;[faults&nbsp;opts]
+                </span><br/>
+<span class="not-covered" title="0 out of 13 forms covered">
+                083&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[source-name&nbsp;(if&nbsp;(=&nbsp;(:input&nbsp;opts)&nbsp;*in*)&nbsp;&quot;Standard&nbsp;input&quot;&nbsp;(str&nbsp;(:input&nbsp;opts)))
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;(join&nbsp;&quot;&nbsp;&quot;&nbsp;[(get-message&nbsp;:validation-report-for)&nbsp;source-name])
+                </span><br/>
+<span class="not-covered" title="0 out of 9 forms covered">
+                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cols&nbsp;(set&nbsp;(reduce&nbsp;concat&nbsp;(map&nbsp;keys&nbsp;faults)))
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;(version-string)]
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;!DOCTYPE&nbsp;html&gt;&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 130 forms covered">
+                089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(html
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:html
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:head
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:title&nbsp;title]
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:meta&nbsp;{:name&nbsp;&quot;generator&quot;&nbsp;:content&nbsp;version}]
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:link&nbsp;{:rel&nbsp;&quot;stylesheet&quot;&nbsp;:media&nbsp;&quot;screen&quot;&nbsp;:href&nbsp;stylesheet-url&nbsp;:type&nbsp;&quot;text&#x2F;css&quot;}]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:body
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:h1&nbsp;title]
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:p&nbsp;(join&nbsp;&quot;&nbsp;&quot;&nbsp;(remove&nbsp;nil?&nbsp;[(get-message&nbsp;:generated-on)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(java.time.LocalDateTime&#x2F;now)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-message&nbsp;:by)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version]))]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if-not
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;faults)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:table
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(html-header-row&nbsp;cols)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(html-fault-row&nbsp;%&nbsp;cols)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults))
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:p&nbsp;(get-message&nbsp;:no-faults-found)])]]))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                111&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                112&nbsp;&nbsp;(defn&nbsp;output
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                113&nbsp;&nbsp;&nbsp;&nbsp;[content&nbsp;options]
+                </span><br/>
+<span class="not-covered" title="0 out of 7 forms covered">
+                114&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(filter-severity&nbsp;content&nbsp;(:severity&nbsp;options))]
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(spit&nbsp;(:output&nbsp;options)
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;(:format&nbsp;options)
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:html&nbsp;(output-html&nbsp;faults&nbsp;options)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:csv&nbsp;(output-csv&nbsp;faults)
+                </span><br/>
+<span class="not-covered" title="0 out of 18 forms covered">
+                119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(with-out-str&nbsp;(pprint&nbsp;faults))))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                120&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                121&nbsp;&nbsp;(defn&nbsp;-main&nbsp;[&amp;&nbsp;args]
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                122&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[opts&nbsp;(parse-opts&nbsp;args&nbsp;cli-options)
+                </span><br/>
+<span class="not-covered" title="0 out of 7 forms covered">
+                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;(assoc&nbsp;(:options&nbsp;opts)
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:input&nbsp;(if&nbsp;(=&nbsp;(:input&nbsp;(:options&nbsp;opts))&nbsp;&quot;standard&nbsp;input&quot;)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*in*
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:input&nbsp;(:options&nbsp;opts)))
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:output&nbsp;(if&nbsp;(=&nbsp;(:output&nbsp;(:options&nbsp;opts))&nbsp;&quot;standard&nbsp;output&quot;)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*out*
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:output&nbsp;(:options&nbsp;opts))))]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;(println&nbsp;options)
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:help&nbsp;options)
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(:summary&nbsp;opts)))
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:errors&nbsp;opts)
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(:errors&nbsp;opts)))
+                </span><br/>
+<span class="not-covered" title="0 out of 13 forms covered">
+                135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(or&nbsp;(:help&nbsp;options)&nbsp;(:errors&nbsp;options))
+                </span><br/>
+<span class="not-covered" title="0 out of 16 forms covered">
+                136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(binding&nbsp;[*config*&nbsp;(assoc&nbsp;*config*&nbsp;:default-language&nbsp;(:language&nbsp;options))]
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(output
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(validate&nbsp;(:input&nbsp;options))
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options)))))
+                </span><br/>
+ </body>
+</html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky.clj.html b/docs/cloverage/dog_and_duck/quack/picky.clj.html
index 9364e58..201ba62 100644
--- a/docs/cloverage/dog_and_duck/quack/picky.clj.html
+++ b/docs/cloverage/dog_and_duck/quack/picky.clj.html
@@ -104,31 +104,31 @@
                 033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[actor-types]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[any-or-faults
+                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[coll-object-reference-or-fault
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coll-object-reference-or-fault
+                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
+                036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-activity-type?
+                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[any-or-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-actor-type?&nbsp;has-type?
+                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type-or-fault
+                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-activity-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
+                040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-actor-type?&nbsp;has-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults
+                041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type-or-fault
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults
+                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
                 043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string-or-fault]])
@@ -628,134 +628,137 @@
 <span class="not-tracked" title="0 out of 0 forms covered">
                 208&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                209&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty&nbsp;(persistent-object-faults&nbsp;x)
+<span class="not-covered" title="0 out of 2 forms covered">
+                209&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activity-type-faults&nbsp;x)
+                210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object-faults&nbsp;x)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activity-type-faults&nbsp;x)
                 </span><br/>
 <span class="not-covered" title="0 out of 2 forms covered">
-                211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
+                212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
+                213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-activity-type?&nbsp;x)
+                214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-activity-type?&nbsp;x)
                 </span><br/>
 <span class="not-covered" title="0 out of 4 forms covered">
-                214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:must&nbsp;:not-activity-type))
+                215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:must&nbsp;:not-activity-type))
                 </span><br/>
 <span class="not-covered" title="0 out of 12 forms covered">
-                215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;(:summary&nbsp;x))&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-summary)))))
+                216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;(:summary&nbsp;x))&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-summary)))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                216&nbsp;&nbsp;
+                217&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                217&nbsp;&nbsp;(defn&nbsp;collection-faults
+                218&nbsp;&nbsp;(defn&nbsp;collection-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                218&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;the&nbsp;collection&nbsp;`x`;&nbsp;if&nbsp;`type`&nbsp;is&nbsp;also&nbsp;
+                219&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;the&nbsp;collection&nbsp;`x`;&nbsp;if&nbsp;`type`&nbsp;is&nbsp;also&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specified,&nbsp;it&nbsp;should&nbsp;be&nbsp;a&nbsp;string&nbsp;naming&nbsp;a&nbsp;specific&nbsp;collection&nbsp;type&nbsp;for
+                220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specified,&nbsp;it&nbsp;should&nbsp;be&nbsp;a&nbsp;string&nbsp;naming&nbsp;a&nbsp;specific&nbsp;collection&nbsp;type&nbsp;for
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;checks&nbsp;should&nbsp;be&nbsp;performed.&nbsp;
+                221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;checks&nbsp;should&nbsp;be&nbsp;performed.&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Every&nbsp;collection&nbsp;*should*(?)&nbsp;have&nbsp;a&nbsp;`totalItems`&nbsp;field&nbsp;(an&nbsp;integer).
+                223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Every&nbsp;collection&nbsp;*should*(?)&nbsp;have&nbsp;a&nbsp;`totalItems`&nbsp;field&nbsp;(an&nbsp;integer).
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                224&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                224&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beyond&nbsp;that,&nbsp;collections&nbsp;are&nbsp;either&nbsp;&#x27;just&nbsp;collections&#x27;&nbsp;(in&nbsp;which&nbsp;case
+                225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beyond&nbsp;that,&nbsp;collections&nbsp;are&nbsp;either&nbsp;&#x27;just&nbsp;collections&#x27;&nbsp;(in&nbsp;which&nbsp;case
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;*should*&nbsp;have&nbsp;an&nbsp;`items`&nbsp;field&nbsp;(a&nbsp;sequence)),&nbsp;or&nbsp;else&nbsp;they&#x27;re&nbsp;paged
+                226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;*should*&nbsp;have&nbsp;an&nbsp;`items`&nbsp;field&nbsp;(a&nbsp;sequence)),&nbsp;or&nbsp;else&nbsp;they&#x27;re&nbsp;paged
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collections,&nbsp;in&nbsp;which&nbsp;case&nbsp;they&nbsp;*must*(?)&nbsp;have&nbsp;a&nbsp;`first`&nbsp;field&nbsp;which&nbsp;is&nbsp;
+                227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collections,&nbsp;in&nbsp;which&nbsp;case&nbsp;they&nbsp;*must*(?)&nbsp;have&nbsp;a&nbsp;`first`&nbsp;field&nbsp;which&nbsp;is&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;collection&nbsp;page&nbsp;or&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;a&nbsp;collection&nbsp;page,&nbsp;and&nbsp;*should*&nbsp;
+                228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;collection&nbsp;page&nbsp;or&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;a&nbsp;collection&nbsp;page,&nbsp;and&nbsp;*should*&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;a&nbsp;`last`&nbsp;field&nbsp;which&nbsp;is&nbsp;similar.
+                229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;a&nbsp;`last`&nbsp;field&nbsp;which&nbsp;is&nbsp;similar.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;pages&nbsp;of&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;collection&nbsp;pages;&nbsp;the&nbsp;pages&nbsp;of&nbsp;
+                231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;pages&nbsp;of&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;collection&nbsp;pages;&nbsp;the&nbsp;pages&nbsp;of&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;ordered&nbsp;collection&nbsp;pages.&quot;
+                232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;ordered&nbsp;collection&nbsp;pages.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                232&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                233&nbsp;&nbsp;&nbsp;&nbsp;([x]
                 </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection-faults
+<span class="covered" title="2 out of 2 forms covered">
+                234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection-faults
                 </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x
+<span class="covered" title="1 out of 1 forms covered">
+                235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x
                 </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first
+<span class="covered" title="2 out of 2 forms covered">
+                236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first
                 </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;nil?
+<span class="covered" title="3 out of 3 forms covered">
+                237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;nil?
                 </span><br/>
-<span class="not-covered" title="0 out of 10 forms covered">
-                237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(when&nbsp;(has-type?&nbsp;x&nbsp;%)&nbsp;%)
+<span class="covered" title="10 out of 10 forms covered">
+                238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(when&nbsp;(has-type?&nbsp;x&nbsp;%)&nbsp;%)
                 </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;Collection&quot;
+<span class="covered" title="5 out of 5 forms covered">
+                239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;Collection&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;
+                240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CollectionPage&quot;
+                241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CollectionPage&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;])))))
+                242&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;])))))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                242&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;type]
+                243&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;type]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                243&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(log&#x2F;info&nbsp;&quot;collection-faults&nbsp;called&nbsp;with&nbsp;argumens&nbsp;&quot;&nbsp;x&nbsp;&quot;,&nbsp;&quot;&nbsp;type)
+                244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(log&#x2F;info&nbsp;&quot;collection-faults&nbsp;called&nbsp;with&nbsp;argumens&nbsp;&quot;&nbsp;x&nbsp;&quot;,&nbsp;&quot;&nbsp;type)
                 </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;type
+<span class="covered" title="3 out of 3 forms covered">
+                245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;type
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;Collection&quot;&nbsp;&quot;OrderedCollection&quot;)&nbsp;(any-or-faults
+<span class="partial" title="6 out of 8 forms covered">
+                246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;Collection&quot;&nbsp;&quot;OrderedCollection&quot;)&nbsp;(any-or-faults
                 </span><br/>
-<span class="not-covered" title="0 out of 12 forms covered">
-                246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
+<span class="covered" title="12 out of 12 forms covered">
+                247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(paged-collection-faults&nbsp;x&nbsp;type))
+<span class="covered" title="8 out of 8 forms covered">
+                248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(paged-collection-faults&nbsp;x&nbsp;type))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must
+                249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:no-items)
+                250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:no-items)
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;CollectionPage&quot;&nbsp;&quot;OrderedCollectionPage&quot;)&nbsp;(collection-page-faults&nbsp;x&nbsp;type)
+<span class="partial" title="4 out of 8 forms covered">
+                251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;CollectionPage&quot;&nbsp;&quot;OrderedCollectionPage&quot;)&nbsp;(collection-page-faults&nbsp;x&nbsp;type)
                 </span><br/>
 <span class="not-covered" title="0 out of 6 forms covered">
-                251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(make-fault-object&nbsp;:critical&nbsp;:expected-collection)))))
+                252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(make-fault-object&nbsp;:critical&nbsp;:expected-collection)))))
                 </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/collections.clj.html b/docs/cloverage/dog_and_duck/quack/picky/collections.clj.html
index f6149ce..7c3b846 100644
--- a/docs/cloverage/dog_and_duck/quack/picky/collections.clj.html
+++ b/docs/cloverage/dog_and_duck/quack/picky/collections.clj.html
@@ -8,16 +8,16 @@
                 001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.collections
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
+                002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond-make-fault-object
+                003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]]))
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond-make-fault-object]]))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 006&nbsp;&nbsp;
@@ -85,23 +85,23 @@
 <span class="not-tracked" title="0 out of 0 forms covered">
                 027&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
                 </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
+<span class="covered" title="2 out of 2 forms covered">
                 028&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
                 </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
+<span class="covered" title="4 out of 4 forms covered">
                 029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type)
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
+<span class="covered" title="8 out of 8 forms covered">
                 030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(object-reference-or-faults&nbsp;x&nbsp;type&nbsp;:critical&nbsp;:expected-collection)
                 </span><br/>
-<span class="not-covered" title="0 out of 11 forms covered">
+<span class="covered" title="9 out of 9 forms covered">
                 031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items)
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:first&nbsp;x)&nbsp;nil&nbsp;:must&nbsp;:no-first-page)
+<span class="covered" title="11 out of 11 forms covered">
+                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:first&nbsp;x)&nbsp;(str&nbsp;type&nbsp;&quot;Page&quot;)&nbsp;:must&nbsp;:no-first-page)
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:last&nbsp;x)&nbsp;nil&nbsp;:should&nbsp;:no-last-page))))
+<span class="covered" title="11 out of 11 forms covered">
+                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:last&nbsp;x)&nbsp;(str&nbsp;type&nbsp;&quot;Page&quot;)&nbsp;:should&nbsp;:no-last-page))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 034&nbsp;&nbsp;
@@ -118,62 +118,71 @@
 <span class="not-tracked" title="0 out of 0 forms covered">
                 038&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
                 </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
+<span class="covered" title="2 out of 2 forms covered">
                 039&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
                 </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
+<span class="covered" title="4 out of 4 forms covered">
                 040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type)
                 </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
+<span class="covered" title="2 out of 2 forms covered">
+                041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(object-reference-or-faults&nbsp;x&nbsp;type&nbsp;:critical&nbsp;:expected-collection)
+<span class="covered" title="11 out of 11 forms covered">
+                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items)
                 </span><br/>
-<span class="not-covered" title="0 out of 11 forms covered">
-                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items)
+<span class="covered" title="9 out of 9 forms covered">
+                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(coll?&nbsp;(:items&nbsp;x))&nbsp;:must&nbsp;:no-items-collection))
                 </span><br/>
-<span class="not-covered" title="0 out of 11 forms covered">
-                044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(coll?&nbsp;(:items&nbsp;x))&nbsp;:must&nbsp;:no-items-collection))
-                </span><br/>
-<span class="not-covered" title="0 out of 12 forms covered">
-                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(object-reference-or-faults&nbsp;%&nbsp;nil&nbsp;:must&nbsp;:not-object-reference)&nbsp;(:items&nbsp;x)))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                046&nbsp;&nbsp;
+<span class="covered" title="2 out of 2 forms covered">
+                044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                047&nbsp;&nbsp;(defn&nbsp;collection-page-faults
+                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat
+                </span><br/>
+<span class="covered" title="12 out of 12 forms covered">
+                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(object-reference-or-faults&nbsp;%&nbsp;nil&nbsp;:must&nbsp;:not-object-reference)&nbsp;(:items&nbsp;x))))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                047&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                048&nbsp;&nbsp;(defn&nbsp;collection-page-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                048&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                049&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
-                </span><br/>
-<span class="not-covered" title="0 out of 7 forms covered">
-                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:partOf&nbsp;x)
-                </span><br/>
-<span class="not-covered" title="0 out of 7 forms covered">
-                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;str&nbsp;(drop-last&nbsp;4&nbsp;type))
+                049&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;`x`&nbsp;considered&nbsp;as&nbsp;a&nbsp;collection&nbsp;page
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should
+                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;of&nbsp;this&nbsp;sub-`type`,&nbsp;or&nbsp;`nil`&nbsp;if&nbsp;none&nbsp;are&nbsp;found.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:n-part-of)
+                051&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:next&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-next-page)
+<span class="covered" title="2 out of 2 forms covered">
+                052&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
                 </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:prev&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-prev-page))))
+<span class="covered" title="4 out of 4 forms covered">
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:partOf&nbsp;x)
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;str&nbsp;(drop-last&nbsp;4&nbsp;type))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:n-part-of)
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:next&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-next-page)
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:prev&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-prev-page))))
                 </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/constants.clj.html b/docs/cloverage/dog_and_duck/quack/picky/constants.clj.html
index e174b06..86f1761 100644
--- a/docs/cloverage/dog_and_duck/quack/picky/constants.clj.html
+++ b/docs/cloverage/dog_and_duck/quack/picky/constants.clj.html
@@ -68,178 +68,289 @@
                 021&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;an&nbsp;ActivityStreams&nbsp;object&nbsp;is&nbsp;expected&nbsp;to&nbsp;be&nbsp;this
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot;
+                022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                023&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;ns&#x2F;activitystreams&quot;)
+                023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;the&nbsp;URI&nbsp;actually&nbsp;used&nbsp;in&nbsp;the&nbsp;published&nbsp;suite&nbsp;of&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activitystreams-test-documents&nbsp;use&nbsp;this&nbsp;URI&nbsp;with&nbsp;&#x27;http&#x27;&nbsp;rather&nbsp;than
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;https&#x27;&nbsp;as&nbsp;the&nbsp;property&nbsp;part,&nbsp;but&nbsp;the&nbsp;spec&nbsp;itself&nbsp;specifies&nbsp;&#x27;https&#x27;.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                027&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;ns&#x2F;activitystreams&quot;)
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                024&nbsp;&nbsp;
+                028&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                025&nbsp;&nbsp;(def&nbsp;^:const&nbsp;actor-types
+                029&nbsp;&nbsp;(def&nbsp;^:const&nbsp;actor-types
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                026&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;actors.
+                030&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;actors.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;actor&nbsp;types]
+                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;actor&nbsp;types]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#actor-types).&quot;
+                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#actor-types).&quot;
                 </span><br/>
 <span class="covered" title="6 out of 6 forms covered">
-                030&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Application&quot;
+                034&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Application&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Group&quot;
+                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Group&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Organization&quot;
+                036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Organization&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Person&quot;
+                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Person&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Service&quot;})
+                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Service&quot;})
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                035&nbsp;&nbsp;
+                039&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                036&nbsp;&nbsp;(def&nbsp;^:const&nbsp;context-key
+                040&nbsp;&nbsp;(def&nbsp;^:const&nbsp;context-key
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                037&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;Clojure&nbsp;reader&nbsp;barfs&nbsp;on&nbsp;`:@context`,&nbsp;although&nbsp;it&nbsp;is&nbsp;in&nbsp;principle&nbsp;a&nbsp;valid&nbsp;
+                041&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;Clojure&nbsp;reader&nbsp;barfs&nbsp;on&nbsp;`:@context`,&nbsp;although&nbsp;it&nbsp;is&nbsp;in&nbsp;principle&nbsp;a&nbsp;valid&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyword.&nbsp;So&nbsp;we&#x27;ll&nbsp;make&nbsp;it&nbsp;once,&nbsp;here,&nbsp;to&nbsp;make&nbsp;the&nbsp;code&nbsp;more&nbsp;performant&nbsp;and
+                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyword.&nbsp;So&nbsp;we&#x27;ll&nbsp;make&nbsp;it&nbsp;once,&nbsp;here,&nbsp;to&nbsp;make&nbsp;the&nbsp;code&nbsp;more&nbsp;performant&nbsp;and
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;easier&nbsp;to&nbsp;read.&quot;
+                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;easier&nbsp;to&nbsp;read.&quot;
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                040&nbsp;&nbsp;&nbsp;&nbsp;(keyword&nbsp;&quot;@context&quot;))
+                044&nbsp;&nbsp;&nbsp;&nbsp;(keyword&nbsp;&quot;@context&quot;))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                041&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                042&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                043&nbsp;&nbsp;&nbsp;&nbsp;&quot;Severity&nbsp;of&nbsp;faults&nbsp;found,&nbsp;as&nbsp;follows:
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.&nbsp;`:info`&nbsp;not&nbsp;actually&nbsp;a&nbsp;fault,&nbsp;but&nbsp;an&nbsp;issue&nbsp;noted&nbsp;during&nbsp;validation;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;`:minor`&nbsp;things&nbsp;which&nbsp;I&nbsp;consider&nbsp;to&nbsp;be&nbsp;faults,&nbsp;but&nbsp;which&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;actually&nbsp;breach&nbsp;the&nbsp;spec;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;`:should`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;SHOULD
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;`:must`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;MUST
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;`:critical`&nbsp;instances&nbsp;where&nbsp;I&nbsp;believe&nbsp;the&nbsp;fault&nbsp;means&nbsp;that
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;object&nbsp;cannot&nbsp;be&nbsp;meaningfully&nbsp;processed.&quot;
-                </span><br/>
-<span class="covered" title="6 out of 6 forms covered">
-                054&nbsp;&nbsp;&nbsp;&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must&nbsp;:critical})
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                055&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                056&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity-filters
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                057&nbsp;&nbsp;&nbsp;&nbsp;&quot;Hack&nbsp;for&nbsp;implementing&nbsp;a&nbsp;severity&nbsp;hierarchy&quot;
-                </span><br/>
-<span class="covered" title="8 out of 8 forms covered">
-                058&nbsp;&nbsp;&nbsp;&nbsp;{:all&nbsp;#{}
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:info&nbsp;#{}
+                045&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:minor&nbsp;#{:info}
+                046&nbsp;&nbsp;(def&nbsp;^:const&nbsp;re-rfc5646&nbsp;
                 </span><br/>
-<span class="covered" title="3 out of 3 forms covered">
-                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should&nbsp;#{:info&nbsp;:minor}
+<span class="not-tracked" title="0 out of 0 forms covered">
+                047&nbsp;&nbsp;&nbsp;&nbsp;&quot;A&nbsp;regex&nbsp;which&nbsp;tests&nbsp;conformity&nbsp;to&nbsp;RFC&nbsp;5646.&nbsp;Cribbed&nbsp;from
                 </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must&nbsp;#{:info&nbsp;:minor&nbsp;:should}
+<span class="not-tracked" title="0 out of 0 forms covered">
+                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https:&#x2F;&#x2F;newbedev.com&#x2F;regex-to-detect-locales&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                049&nbsp;&nbsp;&nbsp;&nbsp;#&quot;^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$&quot;)
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                050&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:critical&nbsp;severity})
+                051&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                052&nbsp;&nbsp;&nbsp;&nbsp;&quot;Severity&nbsp;of&nbsp;faults&nbsp;found,&nbsp;as&nbsp;follows:
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.&nbsp;`:info`&nbsp;not&nbsp;actually&nbsp;a&nbsp;fault,&nbsp;but&nbsp;an&nbsp;issue&nbsp;noted&nbsp;during&nbsp;validation;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;`:minor`&nbsp;things&nbsp;which&nbsp;I&nbsp;consider&nbsp;to&nbsp;be&nbsp;faults,&nbsp;but&nbsp;which&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;actually&nbsp;breach&nbsp;the&nbsp;spec;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;`:should`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;SHOULD
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;`:must`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;MUST
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;`:critical`&nbsp;instances&nbsp;where&nbsp;I&nbsp;believe&nbsp;the&nbsp;fault&nbsp;means&nbsp;that
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;object&nbsp;cannot&nbsp;be&nbsp;meaningfully&nbsp;processed.&quot;
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                063&nbsp;&nbsp;&nbsp;&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must&nbsp;:critical})
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 064&nbsp;&nbsp;
                 </span><br/>
-<span class="covered" title="2 out of 2 forms covered">
-                065&nbsp;&nbsp;(def&nbsp;^:const&nbsp;validation-fault-context-uri
+<span class="covered" title="1 out of 1 forms covered">
+                065&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity-filters
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                066&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;a&nbsp;validation&nbsp;fault&nbsp;report&nbsp;object&nbsp;shall&nbsp;be&nbsp;this
+                066&nbsp;&nbsp;&nbsp;&nbsp;&quot;Hack&nbsp;for&nbsp;implementing&nbsp;a&nbsp;severity&nbsp;hierarchy&quot;
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                068&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;codox&#x2F;Validation_Faults.html&quot;)
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                069&nbsp;&nbsp;
+<span class="covered" title="8 out of 8 forms covered">
+                067&nbsp;&nbsp;&nbsp;&nbsp;{:all&nbsp;#{}
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                070&nbsp;&nbsp;(def&nbsp;^:const&nbsp;verb-types
+                068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:info&nbsp;#{}
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                071&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;verbs.
+<span class="covered" title="2 out of 2 forms covered">
+                069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:minor&nbsp;#{:info}
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<span class="covered" title="3 out of 3 forms covered">
+                070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should&nbsp;#{:info&nbsp;:minor}
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;verb&nbsp;types]
+<span class="covered" title="4 out of 4 forms covered">
+                071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must&nbsp;#{:info&nbsp;:minor&nbsp;:should}
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#activity-types).&quot;
-                </span><br/>
-<span class="covered" title="29 out of 29 forms covered">
-                075&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Accept&quot;&nbsp;&quot;Add&quot;&nbsp;&quot;Announce&quot;&nbsp;&quot;Arrive&quot;&nbsp;&quot;Block&quot;&nbsp;&quot;Create&quot;&nbsp;&quot;Delete&quot;&nbsp;&quot;Dislike&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Flag&quot;&nbsp;&quot;Follow&quot;&nbsp;&quot;Ignore&quot;&nbsp;&quot;Invite&quot;&nbsp;&quot;Join&quot;&nbsp;&quot;Leave&quot;&nbsp;&quot;Like&quot;&nbsp;&quot;Listen&quot;&nbsp;&quot;Move&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Offer&quot;&nbsp;&quot;Question&quot;&nbsp;&quot;Reject&quot;&nbsp;&quot;Read&quot;&nbsp;&quot;Remove&quot;&nbsp;&quot;TentativeAccept&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TentativeReject&quot;&nbsp;&quot;Travel&quot;&nbsp;&quot;Undo&quot;&nbsp;&quot;Update&quot;&nbsp;&quot;View&quot;})
+<span class="covered" title="5 out of 5 forms covered">
+                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:critical&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must}})
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                079&nbsp;&nbsp;
+                073&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                074&nbsp;&nbsp;(def&nbsp;^:const&nbsp;validation-fault-context-uri
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                075&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;a&nbsp;validation&nbsp;fault&nbsp;report&nbsp;object&nbsp;shall&nbsp;be&nbsp;this
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                077&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;codox&#x2F;Validation_Faults.html&quot;)
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                078&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                079&nbsp;&nbsp;(def&nbsp;^:const&nbsp;activity-types
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                080&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;activities.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;activity&nbsp;types]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#activity-types).&quot;
+                </span><br/>
+<span class="covered" title="29 out of 29 forms covered">
+                084&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Accept&quot;&nbsp;&quot;Add&quot;&nbsp;&quot;Announce&quot;&nbsp;&quot;Arrive&quot;&nbsp;&quot;Block&quot;&nbsp;&quot;Create&quot;&nbsp;&quot;Delete&quot;&nbsp;&quot;Dislike&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Flag&quot;&nbsp;&quot;Follow&quot;&nbsp;&quot;Ignore&quot;&nbsp;&quot;Invite&quot;&nbsp;&quot;Join&quot;&nbsp;&quot;Leave&quot;&nbsp;&quot;Like&quot;&nbsp;&quot;Listen&quot;&nbsp;&quot;Move&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Offer&quot;&nbsp;&quot;Question&quot;&nbsp;&quot;Reject&quot;&nbsp;&quot;Read&quot;&nbsp;&quot;Remove&quot;&nbsp;&quot;TentativeAccept&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TentativeReject&quot;&nbsp;&quot;Travel&quot;&nbsp;&quot;Undo&quot;&nbsp;&quot;Update&quot;&nbsp;&quot;View&quot;})
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                088&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                089&nbsp;&nbsp;(def&nbsp;^:const&nbsp;noun-types
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                090&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;object&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;nouns.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;&#x27;object&nbsp;types&#x27;]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#object-types),&nbsp;but&nbsp;by&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;implication&nbsp;it&nbsp;is&nbsp;not&nbsp;exhaustive.&quot;
+                </span><br/>
+<span class="covered" title="16 out of 16 forms covered">
+                095&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Article&quot;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Audio&quot;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Document&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Event&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Image&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Link&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Mention&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Note&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Object&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Page&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Place&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Profile&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Relationsip&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tombstone&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Video&quot;})
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                110&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                111&nbsp;&nbsp;(def&nbsp;^:const&nbsp;implicit-noun-types
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                112&nbsp;&nbsp;&nbsp;&nbsp;&quot;These&nbsp;types&nbsp;are&nbsp;not&nbsp;explicitly&nbsp;listed&nbsp;in&nbsp;[Section&nbsp;3.3&nbsp;of&nbsp;the&nbsp;spec]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#object-types),&nbsp;but&nbsp;are&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mentioned&nbsp;in&nbsp;narrative&quot;
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                115&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Link&quot;})
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                116&nbsp;&nbsp;
                 </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/distribution.clj.html b/docs/cloverage/dog_and_duck/quack/picky/distribution.clj.html
new file mode 100644
index 0000000..31f4f81
--- /dev/null
+++ b/docs/cloverage/dog_and_duck/quack/picky/distribution.clj.html
@@ -0,0 +1,98 @@
+<html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <link rel="stylesheet" href="../../../coverage.css"/>  <title> dog_and_duck/quack/picky/distribution.clj </title>
+ </head>
+ <body>
+<span class="covered" title="1 out of 1 forms covered">
+                001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.distribution)
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                002&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                003&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                004&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                005&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                006&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                010&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                014&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                019&nbsp;&nbsp;(defn&nbsp;distribution
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                020&nbsp;&nbsp;&nbsp;&nbsp;&quot;Distribution&nbsp;of&nbsp;values&nbsp;of&nbsp;function&nbsp;`f`&nbsp;when&nbsp;applied&nbsp;to&nbsp;`vals`.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;*know*&nbsp;there&#x27;s&nbsp;a&nbsp;library&nbsp;function&nbsp;that&nbsp;does&nbsp;this,&nbsp;probably&nbsp;better,&nbsp;but&nbsp;I
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;remember&nbsp;what&nbsp;it&#x27;s&nbsp;called!&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                024&nbsp;&nbsp;&nbsp;&nbsp;[f&nbsp;vals]
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                025&nbsp;&nbsp;&nbsp;&nbsp;(loop&nbsp;[result&nbsp;{}&nbsp;values&nbsp;vals]
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(empty?&nbsp;values)&nbsp;result&nbsp;
+                </span><br/>
+<span class="not-covered" title="0 out of 9 forms covered">
+                027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[r&nbsp;(apply&nbsp;f&nbsp;(list&nbsp;(first&nbsp;values)))]
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(recur&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;result&nbsp;r&nbsp;(if&nbsp;(result&nbsp;r)&nbsp;(inc&nbsp;(result&nbsp;r))&nbsp;1))&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rest&nbsp;values))))))
+                </span><br/>
+ </body>
+</html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/objects.clj.html b/docs/cloverage/dog_and_duck/quack/picky/objects.clj.html
new file mode 100644
index 0000000..952a4a3
--- /dev/null
+++ b/docs/cloverage/dog_and_duck/quack/picky/objects.clj.html
@@ -0,0 +1,1574 @@
+<html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <link rel="stylesheet" href="../../../coverage.css"/>  <title> dog_and_duck/quack/picky/objects.clj </title>
+ </head>
+ <body>
+<span class="covered" title="1 out of 1 forms covered">
+                001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.objects
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:as&nbsp;json]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.set&nbsp;:refer&nbsp;[union]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[actor-types
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noun-types
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re-rfc5646]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.control-variables&nbsp;:refer&nbsp;[*reify-refs*]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.time&nbsp;:refer&nbsp;[date-time-property-or-fault
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsd-date-time?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsd-duration?]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond-make-fault-object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-activity-type?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-context?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type-or-fault
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil-if-empty
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-or-uri?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;truthy?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsd-non-negative-integer?]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:refer&nbsp;[info&nbsp;warn]])
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                023&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.io&nbsp;FileNotFoundException]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                025&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                026&nbsp;&nbsp;(defn-&nbsp;xsd-float?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                027&nbsp;&nbsp;&nbsp;&nbsp;[pv]
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                028&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(integer?&nbsp;pv)&nbsp;(float?&nbsp;pv)))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                029&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                030&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                031&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                032&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                033&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                034&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                035&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                036&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                037&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                038&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                039&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                040&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                041&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                042&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                043&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                044&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                045&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                046&nbsp;&nbsp;(def&nbsp;object-expected-properties
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                047&nbsp;&nbsp;&nbsp;&nbsp;&quot;Requirements&nbsp;of&nbsp;properties&nbsp;of&nbsp;object,&nbsp;cribbed&nbsp;from
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#properties
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;the&nbsp;following&nbsp;sub-key&nbsp;value&nbsp;types:
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:collection`&nbsp;opposite&nbsp;of&nbsp;`:functional`:&nbsp;if&nbsp;true,&nbsp;value&nbsp;should&nbsp;be&nbsp;a
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collection&nbsp;(in&nbsp;the&nbsp;Clojure&nbsp;sense),&nbsp;not&nbsp;a&nbsp;single&nbsp;object;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:functional`&nbsp;if&nbsp;true,&nbsp;value&nbsp;should&nbsp;be&nbsp;a&nbsp;single&nbsp;object;&nbsp;if&nbsp;false,&nbsp;may
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;a&nbsp;single&nbsp;object&nbsp;or&nbsp;a&nbsp;sequence&nbsp;of&nbsp;objects,&nbsp;but&nbsp;each&nbsp;must&nbsp;pass&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validation&nbsp;checks;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:if-invalid`&nbsp;a&nbsp;sequence&nbsp;of&nbsp;two&nbsp;keywords,&nbsp;first&nbsp;indicating&nbsp;severity,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second&nbsp;being&nbsp;a&nbsp;message&nbsp;key;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:if-missing`&nbsp;a&nbsp;sequence&nbsp;of&nbsp;two&nbsp;keywords,&nbsp;first&nbsp;indicating&nbsp;severity,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second&nbsp;being&nbsp;a&nbsp;message&nbsp;key;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:required`&nbsp;a&nbsp;boolean,&nbsp;or&nbsp;a&nbsp;function&nbsp;of&nbsp;one&nbsp;argument&nbsp;returning&nbsp;a&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean,&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;function&nbsp;will&nbsp;be&nbsp;applied&nbsp;to&nbsp;the&nbsp;object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;having&nbsp;the&nbsp;property;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:validator`&nbsp;a&nbsp;function&nbsp;of&nbsp;one&nbsp;argument&nbsp;returning&nbsp;a&nbsp;boolean,&nbsp;which&nbsp;will&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;applied&nbsp;to&nbsp;the&nbsp;value&nbsp;or&nbsp;values&nbsp;of&nbsp;the&nbsp;identified&nbsp;property.&quot;
+                </span><br/>
+<span class="covered" title="68 out of 68 forms covered">
+                066&nbsp;&nbsp;&nbsp;&nbsp;{:accuracy&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-number]
+                </span><br/>
+<span class="partial" title="1 out of 14 forms covered">
+                068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(and&nbsp;(xsd-float?&nbsp;pv)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;=&nbsp;pv&nbsp;0)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt;=&nbsp;pv&nbsp;100)))}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:actor&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-actor]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:must&nbsp;:no-actor]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;has-activity-type?
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:altitude&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-number]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-float?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:anyOf&nbsp;{:collection&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:functional&nbsp;false
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;a&nbsp;Question&nbsp;should&nbsp;have&nbsp;a&nbsp;`:oneOf`&nbsp;or&nbsp;`:anyOf`,&nbsp;but&nbsp;at&nbsp;this&nbsp;layer
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;that&#x27;s&nbsp;hard&nbsp;to&nbsp;check.
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-option]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:attachment&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-attachment]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:attributedTo&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-attribution]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:audience&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-audience]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:bcc&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-audience]&nbsp;;;&nbsp;do&nbsp;we&nbsp;need&nbsp;a&nbsp;separate&nbsp;message&nbsp;for&nbsp;bcc,&nbsp;cc,&nbsp;etc?
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cc&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-audience]&nbsp;;;&nbsp;do&nbsp;we&nbsp;need&nbsp;a&nbsp;separate&nbsp;message&nbsp;for&nbsp;bcc,&nbsp;cc,&nbsp;etc?
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:closed&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-closed]
+                </span><br/>
+<span class="partial" title="1 out of 15 forms covered">
+                102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(truthy?&nbsp;(or&nbsp;(object-or-uri?&nbsp;pv)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(xsd-date-time?&nbsp;pv)
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(#{&quot;true&quot;&nbsp;&quot;false&quot;}&nbsp;pv))))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:content&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-content]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;string?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:context&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-context]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:current&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:paged-collection-no-current]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:paged-collection-invalid-current]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;;;&nbsp;if&nbsp;an&nbsp;object&nbsp;is&nbsp;a&nbsp;collection&nbsp;which&nbsp;has&nbsp;pages,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it&nbsp;ought&nbsp;to&nbsp;have&nbsp;a&nbsp;`:current`&nbsp;page.&nbsp;But&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;1.&nbsp;it&nbsp;isn&#x27;t&nbsp;required&nbsp;to,&nbsp;and
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;2.&nbsp;there&#x27;s&nbsp;no&nbsp;certain&nbsp;way&nbsp;of&nbsp;telling&nbsp;that&nbsp;it
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;have&nbsp;pages&nbsp;-&nbsp;although&nbsp;if&nbsp;it&nbsp;has&nbsp;a
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;`:first`,&nbsp;then&nbsp;it&nbsp;is.
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                </span><br/>
+<span class="covered" title="10 out of 10 forms covered">
+                121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(has-type?&nbsp;x&nbsp;&quot;Collection&quot;)
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type?&nbsp;x&nbsp;&quot;OrderedCollection&quot;))
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:first&nbsp;x)))
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:deleted&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:tombstone-missing-deleted]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-deleted]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(has-type?&nbsp;x&nbsp;&quot;Tombstone&quot;))
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-date-time?}
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:describes&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(has-type?&nbsp;x&nbsp;&quot;Profile&quot;))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-describes]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;actually&nbsp;the&nbsp;spec&nbsp;says&nbsp;this&nbsp;MUST&nbsp;be&nbsp;an&nbsp;object&nbsp;and
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;not&nbsp;a&nbsp;URI,&nbsp;which&nbsp;it&nbsp;doesn&#x27;t&nbsp;say&nbsp;anywhere&nbsp;else,&nbsp;but&nbsp;this&nbsp;seems
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;to&nbsp;make&nbsp;no&nbsp;sense?
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:duration&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-duration]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-duration?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:endTime&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-date-time]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-date-time?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:first&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:paged-collection-no-first]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:paged-collection-invalid-first]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;;;&nbsp;if&nbsp;an&nbsp;object&nbsp;is&nbsp;a&nbsp;collection&nbsp;which&nbsp;has&nbsp;pages,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it&nbsp;ought&nbsp;to&nbsp;have&nbsp;a&nbsp;`:first`&nbsp;page.&nbsp;But&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;1.&nbsp;it&nbsp;isn&#x27;t&nbsp;required&nbsp;to,&nbsp;and
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;2.&nbsp;there&#x27;s&nbsp;no&nbsp;certain&nbsp;way&nbsp;of&nbsp;telling&nbsp;that&nbsp;it
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;have&nbsp;pages&nbsp;-&nbsp;although&nbsp;if&nbsp;it&nbsp;has&nbsp;a
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;`:last`,&nbsp;then&nbsp;it&nbsp;is.
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                </span><br/>
+<span class="covered" title="12 out of 12 forms covered">
+                154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(has-type?&nbsp;x&nbsp;&quot;Collection&quot;)
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type?&nbsp;x&nbsp;&quot;OrderedCollection&quot;))
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:last&nbsp;x)))
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:formerType&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:tombstone-missing-former-type]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-former-type]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(has-type?&nbsp;x&nbsp;&quot;Tombstone&quot;))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                163&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;The&nbsp;narrative&nbsp;of&nbsp;the&nbsp;spec&nbsp;says&nbsp;this&nbsp;should&nbsp;be&nbsp;an&nbsp;`Object`,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;but&nbsp;in&nbsp;all&nbsp;the&nbsp;provided&nbsp;examples&nbsp;it&#x27;s&nbsp;a&nbsp;string.
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                165&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;string?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                166&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:generator&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                167&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-generator]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                168&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                169&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:height&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-non-negative]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-non-negative-integer?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                172&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:href&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-href]
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(try&nbsp;(uri?&nbsp;(URI.&nbsp;pv))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)))}
+                </span><br/>
+<span class="partial" title="3 out of 9 forms covered">
+                176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:hreflang&nbsp;{:validator&nbsp;(fn&nbsp;[pv]&nbsp;(truthy?&nbsp;(re-matches&nbsp;re-rfc5646&nbsp;pv)))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:icon&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-icon]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                179&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;an&nbsp;icon&nbsp;is&nbsp;also&nbsp;expected&nbsp;to&nbsp;have&nbsp;a&nbsp;1:1&nbsp;aspect&nbsp;ratio,&nbsp;but&nbsp;that&#x27;s
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;too&nbsp;much&nbsp;detail&nbsp;at&nbsp;this&nbsp;level&nbsp;of&nbsp;verification
+                </span><br/>
+<span class="partial" title="1 out of 5 forms covered">
+                181&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;&quot;Image&quot;))}
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                182&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:id&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:no-id-transient]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-id]
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                185&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(try&nbsp;(uri?&nbsp;(URI.&nbsp;pv))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                186&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:image&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-image]
+                </span><br/>
+<span class="partial" title="1 out of 5 forms covered">
+                189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;&quot;Image&quot;))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                190&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inReplyTo&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                191&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-in-reply-to]
+                </span><br/>
+<span class="partial" title="1 out of 5 forms covered">
+                192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;noun-types))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:instrument&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                194&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-instrument]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                195&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                196&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:items&nbsp;{:collection&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                197&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-items]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:must&nbsp;:no-items-or-pages]
+                </span><br/>
+<span class="partial" title="19 out of 22 forms covered">
+                200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(or&nbsp;(has-type?&nbsp;x&nbsp;&quot;CollectionPage&quot;)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                201&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(has-type?&nbsp;x&nbsp;&quot;Collection&quot;)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                202&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;it&#x27;s&nbsp;a&nbsp;collection&nbsp;and&nbsp;has&nbsp;pages,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it&nbsp;doesn&#x27;t&nbsp;need&nbsp;items.
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:current&nbsp;x))
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:first&nbsp;x))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:last&nbsp;x)))))
+                </span><br/>
+<span class="partial" title="11 out of 12 forms covered">
+                207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(and&nbsp;(coll?&nbsp;pv)&nbsp;(every?&nbsp;object-or-uri?&nbsp;pv)))}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:last&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                209&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:paged-collection-no-last]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:paged-collection-invalid-last]
+                </span><br/>
+<span class="partial" title="6 out of 9 forms covered">
+                211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(if&nbsp;(and
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;x)
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(uri?&nbsp;(URI.&nbsp;x))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;an&nbsp;object&nbsp;is&nbsp;a&nbsp;collection&nbsp;which&nbsp;has&nbsp;pages,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it&nbsp;ought&nbsp;to&nbsp;have&nbsp;a&nbsp;`:last`&nbsp;page.&nbsp;But&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;1.&nbsp;it&nbsp;isn&#x27;t&nbsp;required&nbsp;to,&nbsp;and
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;2.&nbsp;there&#x27;s&nbsp;no&nbsp;certain&nbsp;way&nbsp;of&nbsp;telling&nbsp;that&nbsp;it
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;does&nbsp;have&nbsp;pages&nbsp;-&nbsp;although&nbsp;if&nbsp;it&nbsp;has&nbsp;a
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;`:first`,&nbsp;then&nbsp;it&nbsp;is.
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type?&nbsp;x&nbsp;#{&quot;Collection&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                224&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;})
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:first&nbsp;x))))
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:latitude&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-latitude]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;The&nbsp;XSD&nbsp;spec&nbsp;says&nbsp;this&nbsp;is&nbsp;an&nbsp;IEEE&nbsp;754-2008,&nbsp;and&nbsp;the&nbsp;IEEE
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;wants&nbsp;US$104&nbsp;for&nbsp;me&nbsp;to&nbsp;find&nbsp;out&nbsp;what&nbsp;that&nbsp;is.&nbsp;So&nbsp;I&nbsp;don&#x27;t
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;strictly&nbsp;know&nbsp;that&nbsp;an&nbsp;integer&nbsp;is&nbsp;valid&nbsp;here.
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-float?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:location&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-location]
+                </span><br/>
+<span class="partial" title="1 out of 6 forms covered">
+                236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;Place&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:longitude&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-longitude]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-float?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:mediaType&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-mime-type]
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                242&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(truthy?&nbsp;(re-matches&nbsp;#&quot;\w+&#x2F;[-.\w]+(?:\+[-.\w]+)?&quot;&nbsp;pv)))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                243&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:name&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-name]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;string?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:next&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-next-page]
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:object&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-direct-object]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                253&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:oneOf&nbsp;{:collection&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                254&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:functional&nbsp;false
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                255&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;a&nbsp;Question&nbsp;should&nbsp;have&nbsp;a&nbsp;`:oneOf`&nbsp;ot&nbsp;`:anyOf`,&nbsp;but&nbsp;at&nbsp;this&nbsp;layer
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;that&#x27;s&nbsp;hard&nbsp;to&nbsp;check.
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                257&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-option]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                258&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                259&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                260&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:orderedItems&nbsp;{:collection&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                261&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                262&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-items]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                263&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:must&nbsp;:no-items-or-pages]
+                </span><br/>
+<span class="partial" title="20 out of 22 forms covered">
+                264&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(or&nbsp;(has-type?&nbsp;x&nbsp;&quot;OrderedCollectionPage&quot;)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                265&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(has-type?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                266&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;it&#x27;s&nbsp;a&nbsp;collection&nbsp;and&nbsp;has&nbsp;pages,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                267&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it&nbsp;doesn&#x27;t&nbsp;need&nbsp;items.
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                268&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:current&nbsp;x))
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                269&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:first&nbsp;x))
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                270&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(:last&nbsp;x)))))
+                </span><br/>
+<span class="partial" title="11 out of 12 forms covered">
+                271&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(and&nbsp;(coll?&nbsp;pv)&nbsp;(every?&nbsp;object-or-uri?&nbsp;pv)))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                272&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:origin&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                273&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-origin]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                274&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:partOf&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                276&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:must&nbsp;:missing-part-of]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                277&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-part-of]
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                278&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(object-or-uri?&nbsp;x&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                279&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                280&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;Collection&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                281&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                282&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prev&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-prior-page]
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;CollectionPage&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                286&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:preview&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                287&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-preview]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                288&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;probably&nbsp;likely&nbsp;to&nbsp;be&nbsp;an&nbsp;Image&nbsp;or&nbsp;Video,&nbsp;but&nbsp;that&nbsp;isn&#x27;t&nbsp;stated.
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                289&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                290&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:published&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                291&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-date-time]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                292&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-date-time?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                293&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:replies&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                294&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-replies]
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                295&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;#{&quot;Collection&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                296&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;}))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:radius&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-positive-number]
+                </span><br/>
+<span class="partial" title="1 out of 11 forms covered">
+                299&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(and&nbsp;(xsd-float?&nbsp;pv)&nbsp;(&gt;&nbsp;pv&nbsp;0)))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                300&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:rel&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-link-relation]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;this&nbsp;is&nbsp;not&nbsp;really&nbsp;good&nbsp;enough.
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                303&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(truthy?&nbsp;(re-matches&nbsp;#&quot;[a-zA-A0-9_\-\.\:\?&#x2F;\\]*&quot;&nbsp;pv)))}
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:relationship&nbsp;{;;&nbsp;this&nbsp;exists&nbsp;in&nbsp;the&nbsp;spec,&nbsp;but&nbsp;it&nbsp;doesn&#x27;t&nbsp;seem&nbsp;to&nbsp;be&nbsp;required&nbsp;and&nbsp;it&#x27;s
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                305&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;extremely&nbsp;hazily&nbsp;specified.&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                307&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:result&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                308&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-result]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                310&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:startIndex&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                311&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-start-index]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-non-negative-integer?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                313&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:start-time&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                314&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-date-time]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                315&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-date-time?}
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                316&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:subject&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                317&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-subject]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                318&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:no-relationship-subject]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                319&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:required&nbsp;(fn&nbsp;[x]&nbsp;(has-type?&nbsp;x&nbsp;&quot;Relationship&quot;))
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:summary&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                322&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-summary]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                323&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;HTML&nbsp;formatting&nbsp;is&nbsp;allowed,&nbsp;but&nbsp;other&nbsp;forms&nbsp;of&nbsp;formatting
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                324&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;are&nbsp;not.&nbsp;Can&nbsp;this&nbsp;be&nbsp;validated?
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                325&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;string?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                326&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:tag&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-tag]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                328&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                329&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:target&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                330&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-target]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                331&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;object-or-uri?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                332&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:to&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                333&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-to]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                334&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;actor-types))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                335&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:totalItems&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                336&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-total-items]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                337&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-non-negative-integer?}
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                338&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                339&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-missing&nbsp;[:minor&nbsp;:no-type]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                340&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-type]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                341&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;strictly,&nbsp;it&#x27;s&nbsp;an&nbsp;`anyURI`,&nbsp;but&nbsp;realistically&nbsp;these&nbsp;are&nbsp;not&nbsp;checkable.
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                342&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;string?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                343&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:units&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                344&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-units]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                345&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;the&nbsp;narrative&nbsp;says&nbsp;that&nbsp;`anyURI`,&nbsp;but&nbsp;actually&nbsp;unless&nbsp;it&#x27;s&nbsp;a&nbsp;recognised
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                346&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;unit&nbsp;the&nbsp;property&nbsp;is&nbsp;useless.&nbsp;These&nbsp;are&nbsp;the&nbsp;units&nbsp;explicitly&nbsp;specified.
+                </span><br/>
+<span class="partial" title="1 out of 10 forms covered">
+                347&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(#{&quot;cm&quot;&nbsp;&quot;feet&quot;&nbsp;&quot;inches&quot;&nbsp;&quot;km&quot;&nbsp;&quot;m&quot;&nbsp;&quot;miles&quot;}&nbsp;pv))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                348&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:updated&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                349&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-updated]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                350&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-date-time?}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                351&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:url&nbsp;{:functional&nbsp;false
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                352&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-url-property]
+                </span><br/>
+<span class="partial" title="1 out of 5 forms covered">
+                353&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;(fn&nbsp;[pv]&nbsp;(object-or-uri?&nbsp;pv&nbsp;&quot;Link&quot;))}
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                354&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:width&nbsp;{:functional&nbsp;true
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                355&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:if-invalid&nbsp;[:must&nbsp;:invalid-width]
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                356&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validator&nbsp;xsd-non-negative-integer?}})
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                357&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                358&nbsp;&nbsp;(defn&nbsp;check-property-required&nbsp;[obj&nbsp;prop&nbsp;clause]
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                359&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[required&nbsp;(:required&nbsp;clause)
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                360&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[severity&nbsp;token]&nbsp;(:if-missing&nbsp;clause)]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                361&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;required
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                362&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when
+                </span><br/>
+<span class="covered" title="15 out of 15 forms covered">
+                363&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(apply&nbsp;required&nbsp;(list&nbsp;obj))&nbsp;(not&nbsp;(obj&nbsp;prop)))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                364&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                365&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                366&nbsp;&nbsp;(defn&nbsp;check-property-valid
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                367&nbsp;&nbsp;&nbsp;&nbsp;[obj&nbsp;prop&nbsp;clause]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                368&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(info&nbsp;&quot;obj&quot;&nbsp;obj&nbsp;&quot;prop&quot;&nbsp;prop&nbsp;&quot;clause&quot;&nbsp;clause)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                369&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[val&nbsp;(obj&nbsp;prop)
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                370&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validator&nbsp;(:validator&nbsp;clause)
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                371&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[severity&nbsp;token]&nbsp;(:if-invalid&nbsp;clause)]
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                372&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(and&nbsp;val&nbsp;validator)
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                373&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                374&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;validator&nbsp;(list&nbsp;val))
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                375&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;severity&nbsp;token))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                376&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                377&nbsp;&nbsp;(defn&nbsp;check-property&nbsp;[obj&nbsp;prop]
+                </span><br/>
+<span class="covered" title="14 out of 14 forms covered">
+                378&nbsp;&nbsp;&nbsp;&nbsp;(assert&nbsp;(map?&nbsp;obj))
+                </span><br/>
+<span class="partial" title="5 out of 14 forms covered">
+                379&nbsp;&nbsp;&nbsp;&nbsp;(assert&nbsp;(keyword?&nbsp;prop))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                380&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[clause&nbsp;(object-expected-properties&nbsp;prop)]
+                </span><br/>
+<span class="partial" title="7 out of 8 forms covered">
+                381&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil-if-empty
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                382&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;nil?
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                383&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
+                </span><br/>
+<span class="covered" title="15 out of 15 forms covered">
+                384&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(check-property-required&nbsp;obj&nbsp;prop&nbsp;clause)
+                </span><br/>
+<span class="covered" title="15 out of 15 forms covered">
+                385&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(check-property-valid&nbsp;obj&nbsp;prop&nbsp;clause))))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                386&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                387&nbsp;&nbsp;(defn&nbsp;properties-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                388&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;lost&nbsp;of&nbsp;faults&nbsp;found&nbsp;on&nbsp;properties&nbsp;of&nbsp;the&nbsp;object&nbsp;`x`,&nbsp;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`nil`&nbsp;if&nbsp;none&nbsp;are.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                390&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                391&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                392&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                393&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[props&nbsp;(set&nbsp;(keys&nbsp;x))
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                394&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;required&nbsp;(set
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                395&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                396&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#((object-expected-properties&nbsp;%)&nbsp;:required)
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                397&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;object-expected-properties)))]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                398&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                399&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[p]&nbsp;(check-property&nbsp;x&nbsp;p))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(union&nbsp;props&nbsp;required)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                401&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                402&nbsp;&nbsp;(defn&nbsp;object-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                403&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;object&nbsp;`x`,&nbsp;or&nbsp;`nil`&nbsp;if&nbsp;none&nbsp;are.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                405&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`expected-type`&nbsp;is&nbsp;also&nbsp;passed,&nbsp;verify&nbsp;that&nbsp;`x`&nbsp;has&nbsp;`expected-type`.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                406&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`expected-type`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a&nbsp;string&nbsp;or&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;strings.&nbsp;Detailed
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                407&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verification&nbsp;of&nbsp;the&nbsp;particular&nbsp;features&nbsp;of&nbsp;types&nbsp;is&nbsp;not&nbsp;done&nbsp;here.&quot;
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                408&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                409&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;many&nbsp;more&nbsp;properties&nbsp;which&nbsp;are&nbsp;nor&nbsp;required,&nbsp;nevertheless&nbsp;have&nbsp;required
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                410&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;property&nbsp;TYPES&nbsp;as&nbsp;detailed&nbsp;in
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                411&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#properties
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                412&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;these&nbsp;properties&nbsp;are&nbsp;present,&nbsp;these&nbsp;types&nbsp;should&nbsp;be&nbsp;checked.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                413&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;empty?
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                417&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(map?&nbsp;x)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                418&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:critical&nbsp;:not-an-object))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                419&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-context?&nbsp;x)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                421&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-context))
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                422&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(:type&nbsp;x)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                423&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:minor&nbsp;:no-type))
+                </span><br/>
+<span class="covered" title="14 out of 14 forms covered">
+                424&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(and&nbsp;(map?&nbsp;x)&nbsp;(contains?&nbsp;x&nbsp;:id))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                425&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:minor&nbsp;:no-id-transient))))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                426&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(properties-faults&nbsp;x)))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                427&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;expected-type]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                428&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                429&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x)
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;expected-type
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                432&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type-or-fault&nbsp;x&nbsp;expected-type&nbsp;:critical&nbsp;:unexpected-type))))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                433&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                434&nbsp;&nbsp;(def&nbsp;maybe-reify
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                435&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;`*reify-refs*`&nbsp;is&nbsp;`true`,&nbsp;return&nbsp;the&nbsp;object&nbsp;at&nbsp;this&nbsp;`target`&nbsp;URI.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                436&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;`nil`&nbsp;if
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                437&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                438&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;`*reify-refs*`&nbsp;is&nbsp;false;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                439&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;the&nbsp;object&nbsp;was&nbsp;not&nbsp;found;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;access&nbsp;to&nbsp;the&nbsp;object&nbsp;was&nbsp;not&nbsp;permitted.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                442&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Consequently,&nbsp;use&nbsp;with&nbsp;care.&quot;
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                443&nbsp;&nbsp;&nbsp;&nbsp;(memoize
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                444&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[target]
+                </span><br/>
+<span class="partial" title="4 out of 6 forms covered">
+                445&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(let&nbsp;[uri&nbsp;(URI.&nbsp;target)]
+                </span><br/>
+<span class="partial" title="2 out of 3 forms covered">
+                446&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;*reify-refs*
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                447&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(json&#x2F;read-str&nbsp;(slurp&nbsp;uri))))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                448&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_
+                </span><br/>
+<span class="not-covered" title="0 out of 18 forms covered">
+                449&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;&quot;Reification&nbsp;target&quot;&nbsp;target&nbsp;&quot;was&nbsp;not&nbsp;a&nbsp;valid&nbsp;URI.&quot;)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                450&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                451&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;FileNotFoundException&nbsp;_
+                </span><br/>
+<span class="not-covered" title="0 out of 18 forms covered">
+                452&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;&quot;Reification&nbsp;target&quot;&nbsp;target&nbsp;&quot;was&nbsp;not&nbsp;found.&quot;)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                453&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                454&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                455&nbsp;&nbsp;(defn&nbsp;maybe-reify-or-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                456&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;`*reify-refs*`&nbsp;is&nbsp;`true`,&nbsp;runs&nbsp;basic&nbsp;checks&nbsp;on&nbsp;the&nbsp;object&nbsp;at&nbsp;this&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                457&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`target`&nbsp;URI,&nbsp;if&nbsp;it&nbsp;is&nbsp;found,&nbsp;or&nbsp;a&nbsp;list&nbsp;containing&nbsp;a&nbsp;fault&nbsp;object&nbsp;with
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;`severity`&nbsp;and&nbsp;`token`&nbsp;if&nbsp;it&nbsp;is&nbsp;not.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                459&nbsp;&nbsp;&nbsp;&nbsp;[value&nbsp;expected-type&nbsp;severity&nbsp;token]
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                460&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[object&nbsp;(maybe-reify&nbsp;value)]
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                461&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;object
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;object&nbsp;expected-type)
+                </span><br/>
+<span class="partial" title="1 out of 7 forms covered">
+                463&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*reify-refs*&nbsp;(list&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                464&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                465&nbsp;&nbsp;(defn&nbsp;object-reference-or-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                466&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;this&nbsp;`value`&nbsp;is&nbsp;either&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                467&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                468&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;an&nbsp;object&nbsp;of&nbsp;`expected-type`;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                469&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;a&nbsp;URI&nbsp;referencing&nbsp;an&nbsp;object&nbsp;of&nbsp;&nbsp;`expected-type`;&nbsp;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                470&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;a&nbsp;link&nbsp;object&nbsp;referencing&nbsp;an&nbsp;object&nbsp;of&nbsp;&nbsp;`expected-type`
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                471&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                472&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;no&nbsp;faults&nbsp;are&nbsp;returned&nbsp;from&nbsp;validating&nbsp;the&nbsp;linked&nbsp;object,&nbsp;then&nbsp;return
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                473&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`nil`;&nbsp;else&nbsp;return&nbsp;a&nbsp;sequence&nbsp;comprising&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                474&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;`token`,&nbsp;prepended&nbsp;to&nbsp;the&nbsp;faults&nbsp;returned.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                475&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                476&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As&nbsp;with&nbsp;`has-type-or-fault`&nbsp;(q.v.),&nbsp;`expected-type`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                477&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string,&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;strings,&nbsp;or&nbsp;`nil`&nbsp;(indicating&nbsp;the&nbsp;type&nbsp;of&nbsp;the&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                478&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;referenced&nbsp;object&nbsp;should&nbsp;not&nbsp;be&nbsp;checked).
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                479&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;if&nbsp;`*reify-refs*`&nbsp;is&nbsp;`false`,&nbsp;referenced&nbsp;objects&nbsp;will&nbsp;not
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                481&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actually&nbsp;be&nbsp;checked.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                482&nbsp;&nbsp;&nbsp;&nbsp;[value&nbsp;expected-type&nbsp;severity&nbsp;token]
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                483&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(cond
+                </span><br/>
+<span class="covered" title="9 out of 9 forms covered">
+                484&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;value)&nbsp;(maybe-reify-or-faults&nbsp;value&nbsp;severity&nbsp;token&nbsp;expected-type)
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                485&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;value)&nbsp;(if&nbsp;(has-type?&nbsp;value&nbsp;&quot;Link&quot;)
+                </span><br/>
+<span class="not-covered" title="0 out of 7 forms covered">
+                486&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                487&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;we&nbsp;were&nbsp;looking&nbsp;for&nbsp;a&nbsp;link&nbsp;and&nbsp;we&#x27;ve&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                488&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;found&nbsp;a&nbsp;link,&nbsp;that&#x27;s&nbsp;OK.
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                489&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;expected-type&nbsp;&quot;Link&quot;)&nbsp;nil
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                490&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(set?&nbsp;expected-type)&nbsp;(expected-type&nbsp;&quot;Link&quot;))&nbsp;nil
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                491&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;expected-type)&nbsp;nil
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                492&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                493&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults
+                </span><br/>
+<span class="not-covered" title="0 out of 6 forms covered">
+                494&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:href&nbsp;value)&nbsp;expected-type&nbsp;severity&nbsp;token))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                495&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;value&nbsp;expected-type))
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                496&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(throw
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                497&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                498&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`value`&nbsp;was&nbsp;not&nbsp;an&nbsp;object&nbsp;or&nbsp;a&nbsp;link&nbsp;to&nbsp;an&nbsp;object&quot;
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                499&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:value&nbsp;value}
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:expected-type&nbsp;expected-type
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                502&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token})))]
+                </span><br/>
+<span class="covered" title="10 out of 10 forms covered">
+                503&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;faults&nbsp;(cons&nbsp;(make-fault-object&nbsp;severity&nbsp;token)&nbsp;faults))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                504&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                505&nbsp;&nbsp;(defn&nbsp;coll-object-reference-or-fault
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                506&nbsp;&nbsp;&nbsp;&nbsp;&quot;As&nbsp;object-reference-or-fault,&nbsp;except&nbsp;`value`&nbsp;argument&nbsp;may&nbsp;also&nbsp;be&nbsp;a&nbsp;list&nbsp;of
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                507&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objects&nbsp;and&#x2F;or&nbsp;object&nbsp;references.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                508&nbsp;&nbsp;&nbsp;&nbsp;[value&nbsp;expected-type&nbsp;severity&nbsp;token]
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                509&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                </span><br/>
+<span class="not-covered" title="0 out of 9 forms covered">
+                510&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;value)&nbsp;(object-reference-or-faults&nbsp;value&nbsp;expected-type&nbsp;severity&nbsp;token)
+                </span><br/>
+<span class="not-covered" title="0 out of 5 forms covered">
+                511&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;value)&nbsp;(concat-non-empty
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                513&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(object-reference-or-faults
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                514&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;expected-type&nbsp;severity&nbsp;token)
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                515&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value))
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                516&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(throw
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                517&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                518&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`value`&nbsp;was&nbsp;not&nbsp;an&nbsp;object,&nbsp;a&nbsp;link&nbsp;to&nbsp;an&nbsp;object,&nbsp;nor&nbsp;a&nbsp;list&nbsp;of&nbsp;these.&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                519&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:value&nbsp;value}
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                520&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:expected-type&nbsp;expected-type
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                522&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token}))))
+                </span><br/>
+ </body>
+</html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/scratch.clj.html b/docs/cloverage/dog_and_duck/quack/picky/scratch.clj.html
new file mode 100644
index 0000000..3a5ad6b
--- /dev/null
+++ b/docs/cloverage/dog_and_duck/quack/picky/scratch.clj.html
@@ -0,0 +1,167 @@
+<html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <link rel="stylesheet" href="../../../coverage.css"/>  <title> dog_and_duck/quack/picky/scratch.clj </title>
+ </head>
+ <body>
+<span class="covered" title="1 out of 1 forms covered">
+                001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.scratch
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Development&nbsp;scratchpad&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:refer&nbsp;[read-str]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.java.io&nbsp;:refer&nbsp;[file]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.distribution&nbsp;:refer&nbsp;[distribution]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[object-faults&nbsp;properties-faults]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter-severity]]))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                011&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;;;&nbsp;(def&nbsp;files&nbsp;(filter
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                013&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                014&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                015&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                016&nbsp;&nbsp;;;&nbsp;(def&nbsp;r
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                017&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(reduce
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                019&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;(map
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                020&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(try
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[contents&nbsp;(read-str&nbsp;(slurp&nbsp;%))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                022&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults&nbsp;(cond&nbsp;(map?&nbsp;contents)&nbsp;(filter-severity
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                023&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                024&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;contents))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                025&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                026&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(coll?&nbsp;contents)&nbsp;(apply
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                027&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                028&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;(fn&nbsp;[obj]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                029&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                030&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;obj)))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                031&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contents))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                032&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                033&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;(fn&nbsp;[f]&nbsp;(assoc&nbsp;f&nbsp;:document&nbsp;(.getName&nbsp;%)))&nbsp;faults))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                034&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;any
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                035&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(.getName&nbsp;%)&nbsp;(str&nbsp;&quot;Exception&nbsp;&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                036&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(.getName&nbsp;(.getClass&nbsp;any))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                037&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;:&nbsp;&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                038&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(.getMessage&nbsp;any))]))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                039&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                040&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                041&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                042&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                043&nbsp;&nbsp;;;&nbsp;(count&nbsp;(filter-severity&nbsp;(object-faults&nbsp;(keywordize-keys&nbsp;(read-str&nbsp;(slurp&nbsp;&quot;resources&#x2F;activitystreams-test-documents&#x2F;vocabulary-ex189-jsonld.json&quot;))))&nbsp;:critical))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                044&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                045&nbsp;&nbsp;;;&nbsp;(count&nbsp;(filter
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                046&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                047&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                048&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                049&nbsp;&nbsp;;;&nbsp;(count&nbsp;r)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                050&nbsp;&nbsp;;;&nbsp;(last&nbsp;r)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                051&nbsp;&nbsp;;;&nbsp;(clojure.pprint&#x2F;pprint&nbsp;(last&nbsp;r))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                052&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                053&nbsp;&nbsp;;;&nbsp;(distribution&nbsp;:fault&nbsp;r)
+                </span><br/>
+ </body>
+</html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/time.clj.html b/docs/cloverage/dog_and_duck/quack/picky/time.clj.html
new file mode 100644
index 0000000..914070a
--- /dev/null
+++ b/docs/cloverage/dog_and_duck/quack/picky/time.clj.html
@@ -0,0 +1,206 @@
+<html>
+ <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <link rel="stylesheet" href="../../../coverage.css"/>  <title> dog_and_duck/quack/picky/time.clj </title>
+ </head>
+ <body>
+<span class="covered" title="1 out of 1 forms covered">
+                001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.time
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Time,&nbsp;gentleman,&nbsp;please!&nbsp;Recognising&nbsp;and&nbsp;validating&nbsp;date&nbsp;time&nbsp;values.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[cond-make-fault-object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;truthy?]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[scot.weft.i18n.core&nbsp;:refer&nbsp;[get-message]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:refer&nbsp;[warn&nbsp;error]])
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.time&nbsp;LocalDateTime]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java.time.format&nbsp;DateTimeFormatter&nbsp;DateTimeParseException]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[javax.xml.datatype&nbsp;DatatypeFactory]))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                011&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2023
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                013&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                014&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                023&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                026&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                027&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                028&nbsp;&nbsp;(defn&nbsp;xsd-date-time?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                029&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;pattern&nbsp;for&nbsp;an&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[xsd:dateTime](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;xmlschema11-2&#x2F;#dateTime),&nbsp;else&nbsp;`false`&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                031&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;value]
+                </span><br/>
+<span class="partial" title="1 out of 3 forms covered">
+                032&nbsp;&nbsp;&nbsp;&nbsp;(try
+                </span><br/>
+<span class="partial" title="5 out of 6 forms covered">
+                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(LocalDateTime&#x2F;from&nbsp;(.parse&nbsp;DateTimeFormatter&#x2F;ISO_DATE_TIME&nbsp;value))&nbsp;true&nbsp;false)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;DateTimeParseException&nbsp;_
+                </span><br/>
+<span class="not-covered" title="0 out of 20 forms covered">
+                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;(get-message&nbsp;:bad-date-time)&nbsp;&quot;:&quot;&nbsp;value)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;e
+                </span><br/>
+<span class="not-covered" title="0 out of 18 forms covered">
+                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(error&nbsp;&quot;Exception&nbsp;thrown&nbsp;while&nbsp;parsing&nbsp;date&quot;&nbsp;value&nbsp;e)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                040&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                041&nbsp;&nbsp;(defn&nbsp;xsd-duration?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                042&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;pattern&nbsp;for&nbsp;an&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[xsd:duration](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;xmlschema11-2&#x2F;#duration),&nbsp;else&nbsp;`false`&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                044&nbsp;&nbsp;&nbsp;&nbsp;[value]
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                045&nbsp;&nbsp;&nbsp;&nbsp;(truthy?
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;value)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(.newDuration&nbsp;(DatatypeFactory&#x2F;newInstance)&nbsp;value)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;IllegalArgumentException&nbsp;_
+                </span><br/>
+<span class="not-covered" title="0 out of 20 forms covered">
+                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;(get-message&nbsp;:bad-duration)&nbsp;&quot;:&quot;&nbsp;value)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;e
+                </span><br/>
+<span class="not-covered" title="0 out of 18 forms covered">
+                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(error&nbsp;&quot;Exception&nbsp;thrown&nbsp;while&nbsp;parsing&nbsp;duration&quot;&nbsp;value&nbsp;e)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                054&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                055&nbsp;&nbsp;(defn&nbsp;date-time-property-or-fault
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;the&nbsp;value&nbsp;of&nbsp;this&nbsp;`property`&nbsp;of&nbsp;object&nbsp;`x`&nbsp;is&nbsp;a&nbsp;valid&nbsp;xsd:dateTime&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`token`&nbsp;and&nbsp;`severity`.&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`required?`&nbsp;is&nbsp;false&nbsp;and&nbsp;there&nbsp;is&nbsp;no&nbsp;such&nbsp;property,&nbsp;no&nbsp;fault&nbsp;will&nbsp;be
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returned.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                061&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;property&nbsp;severity&nbsp;token&nbsp;required?]
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                062&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[value&nbsp;(property&nbsp;x)]
+                </span><br/>
+<span class="not-covered" title="0 out of 11 forms covered">
+                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;required?&nbsp;(not&nbsp;(x&nbsp;property)))
+                </span><br/>
+<span class="not-covered" title="0 out of 4 forms covered">
+                064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object
+                </span><br/>
+<span class="not-covered" title="0 out of 10 forms covered">
+                066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;value&nbsp;(xsd-date-time?&nbsp;value))&nbsp;severity&nbsp;token))))
+                </span><br/>
+ </body>
+</html>
diff --git a/docs/cloverage/dog_and_duck/quack/picky/utils.clj.html b/docs/cloverage/dog_and_duck/quack/picky/utils.clj.html
index 51c6d14..2180db1 100644
--- a/docs/cloverage/dog_and_duck/quack/picky/utils.clj.html
+++ b/docs/cloverage/dog_and_duck/quack/picky/utils.clj.html
@@ -11,955 +11,757 @@
                 002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Utility&nbsp;functions&nbsp;supporting&nbsp;the&nbsp;picky&nbsp;validator&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:as&nbsp;json]
+                003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.set&nbsp;:refer&nbsp;[intersection]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.set&nbsp;:refer&nbsp;[intersection]]
+                004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[activitystreams-context-uri
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[activitystreams-context-uri
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actor-types
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actor-types
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context-key&nbsp;severity-filters
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context-key&nbsp;severity-filters
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validation-fault-context-uri
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validation-fault-context-uri
+                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity-types]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verb-types]]
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.utils.process&nbsp;:refer&nbsp;[get-hostname&nbsp;get-pid]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.control-variables&nbsp;:refer&nbsp;[*reify-refs*]]
+                010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[scot.weft.i18n.core&nbsp;:refer&nbsp;[get-message]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.fault-messages&nbsp;:refer&nbsp;[messages]]
+                011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:as&nbsp;log&nbsp;:refer&nbsp;[warn]])
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                012&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.utils.process&nbsp;:refer&nbsp;[get-hostname&nbsp;get-pid]]
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:as&nbsp;log&nbsp;:refer&nbsp;[warn]])
+                013&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 014&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                015&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
+                015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 016&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
+                017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                018&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                018&nbsp;&nbsp;
+                021&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                023&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                023&nbsp;&nbsp;
+                026&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                028&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                026&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                028&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                030&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                031&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
+                030&nbsp;&nbsp;
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                032&nbsp;&nbsp;
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                033&nbsp;&nbsp;
+                031&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                034&nbsp;&nbsp;(defn&nbsp;actor-type?
+                032&nbsp;&nbsp;(defn&nbsp;actor-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                035&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;`x`&nbsp;is&nbsp;a&nbsp;recognised&nbsp;actor&nbsp;type,&nbsp;else&nbsp;`false`.&quot;
+                033&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;`x`&nbsp;is&nbsp;a&nbsp;recognised&nbsp;actor&nbsp;type,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                036&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;x]
+                034&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;x]
                 </span><br/>
 <span class="covered" title="6 out of 6 forms covered">
-                037&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(actor-types&nbsp;x)&nbsp;true&nbsp;false))
+                035&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(actor-types&nbsp;x)&nbsp;true&nbsp;false))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                038&nbsp;&nbsp;
+                036&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                039&nbsp;&nbsp;(defn&nbsp;truthy?
+                037&nbsp;&nbsp;(defn&nbsp;truthy?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                040&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;truthy,&nbsp;else&nbsp;`false`.&nbsp;There&nbsp;must&nbsp;be&nbsp;some&nbsp;more&nbsp;
+                038&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;truthy,&nbsp;else&nbsp;`false`.&nbsp;There&nbsp;must&nbsp;be&nbsp;some&nbsp;more&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idiomatic&nbsp;way&nbsp;to&nbsp;do&nbsp;this?&quot;
+                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idiomatic&nbsp;way&nbsp;to&nbsp;do&nbsp;this?&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                042&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                040&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                043&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;x&nbsp;true&nbsp;false))
+<span class="covered" title="4 out of 4 forms covered">
+                041&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;x&nbsp;true&nbsp;false))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                044&nbsp;&nbsp;
+                042&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                045&nbsp;&nbsp;(defn&nbsp;has-type?
+                043&nbsp;&nbsp;(defn&nbsp;xsd-non-negative-integer?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                046&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;object&nbsp;`x`&nbsp;has&nbsp;type&nbsp;`type`,&nbsp;else&nbsp;`false`.
+                044&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;pattern&nbsp;for&nbsp;an&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[xsd:nonNegativeInteger](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;xmlschema11-2&#x2F;#nonNegativeInteger),&nbsp;else&nbsp;`false`&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;values&nbsp;of&nbsp;`type`&nbsp;fields&nbsp;of&nbsp;ActivityStreams&nbsp;objects&nbsp;may&nbsp;be&nbsp;lists;&nbsp;they
+                046&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;considered&nbsp;to&nbsp;have&nbsp;a&nbsp;type&nbsp;if&nbsp;the&nbsp;type&nbsp;token&nbsp;is&nbsp;a&nbsp;member&nbsp;of&nbsp;the&nbsp;list.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                050&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
-                </span><br/>
-<span class="not-covered" title="0 out of 18 forms covered">
-                051&nbsp;&nbsp;&nbsp;&nbsp;(assert&nbsp;(map?&nbsp;x)&nbsp;(string?&nbsp;type))
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                052&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
-                </span><br/>
-<span class="not-covered" title="0 out of 14 forms covered">
-                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;tv)&nbsp;(truthy?&nbsp;(not-empty&nbsp;(filter&nbsp;#(=&nbsp;%&nbsp;type)&nbsp;tv)))
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(=&nbsp;tv&nbsp;type))))
+<span class="partial" title="9 out of 10 forms covered">
+                047&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(integer?&nbsp;x)(&gt;=&nbsp;x&nbsp;0)))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                056&nbsp;&nbsp;
+                048&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                057&nbsp;&nbsp;(defn&nbsp;object-or-uri?
+                049&nbsp;&nbsp;(defn&nbsp;has-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                058&nbsp;&nbsp;&nbsp;&nbsp;&quot;Very&nbsp;basic&nbsp;check&nbsp;that&nbsp;`x`&nbsp;is&nbsp;either&nbsp;an&nbsp;object&nbsp;or&nbsp;a&nbsp;URI.&quot;
+                050&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;type&nbsp;in&nbsp;`acceptable`,&nbsp;else&nbsp;`false`.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                059&nbsp;&nbsp;&nbsp;&nbsp;[x]
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                060&nbsp;&nbsp;&nbsp;&nbsp;(try
-                </span><br/>
-<span class="not-covered" title="0 out of 11 forms covered">
-                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
-                </span><br/>
-<span class="not-covered" title="0 out of 16 forms covered">
-                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;x)&nbsp;(if&nbsp;(and&nbsp;(:type&nbsp;x)&nbsp;(:id&nbsp;x))&nbsp;true&nbsp;false)
+                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false)
+                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;values&nbsp;of&nbsp;`:type`&nbsp;fields&nbsp;of&nbsp;ActivityStreams&nbsp;objects&nbsp;may&nbsp;be&nbsp;lists;&nbsp;they
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;considered&nbsp;to&nbsp;have&nbsp;a&nbsp;type&nbsp;if&nbsp;a&nbsp;member&nbsp;of&nbsp;the&nbsp;list&nbsp;is&nbsp;in&nbsp;`acceptable`.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false)))
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acceptable`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a&nbsp;string,&nbsp;in&nbsp;which&nbsp;case&nbsp;there&nbsp;is&nbsp;only&nbsp;one
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptable&nbsp;value,&nbsp;or&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;strings,&nbsp;in&nbsp;which&nbsp;case&nbsp;any&nbsp;member&nbsp;of&nbsp;the
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;is&nbsp;acceptable.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;acceptable]
+                </span><br/>
+<span class="partial" title="5 out of 25 forms covered">
+                059&nbsp;&nbsp;&nbsp;&nbsp;(assert&nbsp;(map?&nbsp;x)&nbsp;(or&nbsp;(string?&nbsp;acceptable)&nbsp;(set?&nbsp;acceptable)))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                060&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(truthy?
+                </span><br/>
+<span class="partial" title="4 out of 5 forms covered">
+                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                </span><br/>
+<span class="partial" title="10 out of 19 forms covered">
+                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;acceptable)&nbsp;(coll?&nbsp;tv))&nbsp;(not-empty&nbsp;(filter&nbsp;#(=&nbsp;%&nbsp;acceptable)&nbsp;tv))
+                </span><br/>
+<span class="partial" title="10 out of 19 forms covered">
+                064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(set?&nbsp;acceptable)&nbsp;(coll?&nbsp;tv))&nbsp;(not-empty&nbsp;(filter&nbsp;#(acceptable&nbsp;%)&nbsp;tv))
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;acceptable)&nbsp;(=&nbsp;tv&nbsp;acceptable)
+                </span><br/>
+<span class="covered" title="6 out of 6 forms covered">
+                066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set?&nbsp;acceptable)&nbsp;(acceptable&nbsp;tv)))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                066&nbsp;&nbsp;
+                067&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                068&nbsp;&nbsp;(defn&nbsp;object-or-uri?
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                069&nbsp;&nbsp;&nbsp;&nbsp;&quot;Very&nbsp;basic&nbsp;check&nbsp;that&nbsp;`x`&nbsp;is&nbsp;either&nbsp;an&nbsp;object&nbsp;or&nbsp;a&nbsp;URI.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                070&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                </span><br/>
+<span class="partial" title="1 out of 3 forms covered">
+                071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try
+                </span><br/>
+<span class="covered" title="12 out of 12 forms covered">
+                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;x)&nbsp;true
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false)))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                077&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;type]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(object-or-uri?&nbsp;x)
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(map?&nbsp;x)
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type?&nbsp;x&nbsp;type)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                083&nbsp;&nbsp;
                 </span><br/>
 <span class="partial" title="5 out of 46 forms covered">
-                067&nbsp;&nbsp;(defmacro&nbsp;link-or-uri?
+                084&nbsp;&nbsp;(defmacro&nbsp;link-or-uri?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                068&nbsp;&nbsp;&nbsp;&nbsp;&quot;Very&nbsp;basic&nbsp;check&nbsp;that&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;link&nbsp;object&nbsp;or&nbsp;a&nbsp;URI.&quot;
+                085&nbsp;&nbsp;&nbsp;&nbsp;&quot;Very&nbsp;basic&nbsp;check&nbsp;that&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;link&nbsp;object&nbsp;or&nbsp;a&nbsp;URI.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                069&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                086&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 2 forms covered">
-                070&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(object-or-uri?&nbsp;~x)&nbsp;(has-type?&nbsp;~x&nbsp;&quot;Link&quot;)&nbsp;false))
+                087&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(object-or-uri?&nbsp;~x)&nbsp;(has-type?&nbsp;~x&nbsp;&quot;Link&quot;)&nbsp;false))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                071&nbsp;&nbsp;
+                088&nbsp;&nbsp;
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                072&nbsp;&nbsp;
+                089&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                073&nbsp;&nbsp;(defn&nbsp;verb-type?
+                090&nbsp;&nbsp;(defn&nbsp;activity-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                074&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`,&nbsp;a&nbsp;string,&nbsp;represents&nbsp;a&nbsp;recognised&nbsp;ActivityStreams&nbsp;activity
+                091&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`,&nbsp;a&nbsp;string,&nbsp;represents&nbsp;a&nbsp;recognised&nbsp;ActivityStreams&nbsp;activity
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type.&quot;
+                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                076&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;x]
+                093&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;x]
                 </span><br/>
 <span class="covered" title="6 out of 6 forms covered">
-                077&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(verb-types&nbsp;x)&nbsp;true&nbsp;false))
+                094&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(activity-types&nbsp;x)&nbsp;true&nbsp;false))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                078&nbsp;&nbsp;
+                095&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                079&nbsp;&nbsp;(defn&nbsp;has-activity-type?
+                096&nbsp;&nbsp;(defn&nbsp;has-activity-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                080&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;type&nbsp;which&nbsp;is&nbsp;an&nbsp;activity&nbsp;type,&nbsp;else&nbsp;
+                097&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;type&nbsp;which&nbsp;is&nbsp;an&nbsp;activity&nbsp;type,&nbsp;else&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`false`.&quot;
+                098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                082&nbsp;&nbsp;&nbsp;&nbsp;[x]
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                083&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
-                </span><br/>
-<span class="not-covered" title="0 out of 11 forms covered">
-                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;tv)&nbsp;(truthy?&nbsp;(not-empty&nbsp;(filter&nbsp;verb-type?&nbsp;tv)))
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(verb-type?&nbsp;tv))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                087&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                088&nbsp;&nbsp;(defn&nbsp;has-actor-type?
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                089&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;type&nbsp;which&nbsp;is&nbsp;an&nbsp;actor&nbsp;type,&nbsp;else&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`false`.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                091&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                099&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                092&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
+                100&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
                 </span><br/>
 <span class="partial" title="3 out of 11 forms covered">
-                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;tv)&nbsp;(truthy?&nbsp;(not-empty&nbsp;(filter&nbsp;actor-type?&nbsp;tv)))
+                102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;tv)&nbsp;(truthy?&nbsp;(not-empty&nbsp;(filter&nbsp;activity-type?&nbsp;tv)))
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor-type?&nbsp;tv))))
+                103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(activity-type?&nbsp;tv))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                096&nbsp;&nbsp;
+                104&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                097&nbsp;&nbsp;(defn&nbsp;filter-severity
+                105&nbsp;&nbsp;(defn&nbsp;has-actor-type?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                098&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;reports&nbsp;taken&nbsp;from&nbsp;these&nbsp;`reports`&nbsp;where&nbsp;the&nbsp;severity
+                106&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;the&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;type&nbsp;which&nbsp;is&nbsp;an&nbsp;actor&nbsp;type,&nbsp;else&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;report&nbsp;is&nbsp;greater&nbsp;than&nbsp;this&nbsp;or&nbsp;equal&nbsp;to&nbsp;this&nbsp;`severity`.&quot;
+                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                100&nbsp;&nbsp;&nbsp;&nbsp;[reports&nbsp;severity]
+                108&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
-<span class="partial" title="6 out of 7 forms covered">
-                101&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(nil?&nbsp;reports)&nbsp;nil
+<span class="covered" title="4 out of 4 forms covered">
+                109&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
+                </span><br/>
+<span class="covered" title="2 out of 2 forms covered">
+                110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                </span><br/>
+<span class="partial" title="3 out of 11 forms covered">
+                111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;tv)&nbsp;(truthy?&nbsp;(not-empty&nbsp;(filter&nbsp;actor-type?&nbsp;tv)))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor-type?&nbsp;tv))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                113&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                114&nbsp;&nbsp;(defn&nbsp;filter-severity
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                115&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;reports&nbsp;taken&nbsp;from&nbsp;these&nbsp;`reports`&nbsp;where&nbsp;the&nbsp;severity
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;report&nbsp;is&nbsp;greater&nbsp;than&nbsp;this&nbsp;or&nbsp;equal&nbsp;to&nbsp;this&nbsp;`severity`.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                117&nbsp;&nbsp;&nbsp;&nbsp;[reports&nbsp;severity]
+                </span><br/>
+<span class="partial" title="9 out of 11 forms covered">
+                118&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(nil?&nbsp;(severity-filters&nbsp;severity))&nbsp;(throw
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`severity`&nbsp;was&nbsp;not&nbsp;a&nbsp;valid&nbsp;severity&nbsp;key&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 6 forms covered">
+                121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:reports&nbsp;reports
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity}}))
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;reports)&nbsp;nil
                 </span><br/>
 <span class="partial" title="8 out of 10 forms covered">
-                102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;reports)
+                125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;reports)
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;map?&nbsp;reports)
+                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;map?&nbsp;reports)
                 </span><br/>
 <span class="covered" title="5 out of 5 forms covered">
-                105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;:severity&nbsp;reports))&nbsp;(remove
+                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;:severity&nbsp;reports))(remove
+                </span><br/>
+<span class="partial" title="4 out of 5 forms covered">
+                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(if&nbsp;&nbsp;(:severity&nbsp;%)
                 </span><br/>
 <span class="covered" title="7 out of 7 forms covered">
-                106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#((severity-filters&nbsp;severity)&nbsp;(:severity&nbsp;%))
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reports)
+                129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((severity-filters&nbsp;severity)&nbsp;(:severity&nbsp;%))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
+                130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reports)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
                 </span><br/>
 <span class="not-covered" title="0 out of 1 forms covered">
-                109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw
+                133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
+                134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`reports`&nbsp;was&nbsp;not&nbsp;a&nbsp;collection&nbsp;of&nbsp;fault&nbsp;reports&quot;
+                135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`reports`&nbsp;was&nbsp;not&nbsp;a&nbsp;collection&nbsp;of&nbsp;fault&nbsp;reports&quot;
                 </span><br/>
 <span class="not-covered" title="0 out of 6 forms covered">
-                112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:reports&nbsp;reports
+                136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:reports&nbsp;reports
                 </span><br/>
 <span class="not-covered" title="0 out of 1 forms covered">
-                113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity}}))))
+                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity}}))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                114&nbsp;&nbsp;
+                138&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                115&nbsp;&nbsp;(defn&nbsp;context?
+                139&nbsp;&nbsp;(defn&nbsp;context?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                116&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ActivityStreams&nbsp;context,&nbsp;else&nbsp;false.
+                140&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ActivityStreams&nbsp;context,&nbsp;else&nbsp;false.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;context&nbsp;is&nbsp;either
+                142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;context&nbsp;is&nbsp;either
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;the&nbsp;URI&nbsp;(actually&nbsp;an&nbsp;IRI)&nbsp;`activitystreams-context-uri`,&nbsp;or
+                143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;the&nbsp;URI&nbsp;(actually&nbsp;an&nbsp;IRI)&nbsp;`activitystreams-context-uri`,&nbsp;or
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;a&nbsp;collection&nbsp;comprising&nbsp;that&nbsp;URI&nbsp;and&nbsp;a&nbsp;map.&quot;
+                144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;a&nbsp;collection&nbsp;comprising&nbsp;that&nbsp;URI&nbsp;and&nbsp;a&nbsp;map.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                121&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                145&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="partial" title="4 out of 6 forms covered">
-                122&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                146&nbsp;&nbsp;&nbsp;&nbsp;(cond
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;x)&nbsp;false
+                147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;x)&nbsp;false
                 </span><br/>
 <span class="covered" title="11 out of 11 forms covered">
-                124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;x)&nbsp;(and&nbsp;(=&nbsp;x&nbsp;activitystreams-context-uri)&nbsp;true)
+                148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;x)&nbsp;(and&nbsp;(=&nbsp;x&nbsp;activitystreams-context-uri)&nbsp;true)
                 </span><br/>
 <span class="partial" title="19 out of 20 forms covered">
-                125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;x)&nbsp;(and&nbsp;(context?&nbsp;(first&nbsp;(remove&nbsp;map?&nbsp;x)))
+                149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;x)&nbsp;(and&nbsp;(context?&nbsp;(first&nbsp;(remove&nbsp;map?&nbsp;x)))
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(count&nbsp;x)&nbsp;2)
+                150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(count&nbsp;x)&nbsp;2)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
+                151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false))
+                152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                129&nbsp;&nbsp;
+                153&nbsp;&nbsp;
                 </span><br/>
-<span class="covered" title="33 out of 33 forms covered">
-                130&nbsp;&nbsp;(defmacro&nbsp;has-context?
+<span class="covered" title="27 out of 27 forms covered">
+                154&nbsp;&nbsp;(defmacro&nbsp;has-context?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                131&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;`x`&nbsp;is&nbsp;an&nbsp;ActivityStreams&nbsp;object&nbsp;with&nbsp;a&nbsp;valid&nbsp;context,&nbsp;else&nbsp;`false`.&quot;
+                155&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;`x`&nbsp;is&nbsp;an&nbsp;ActivityStreams&nbsp;object&nbsp;with&nbsp;a&nbsp;valid&nbsp;context,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                132&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                156&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                133&nbsp;&nbsp;&nbsp;&nbsp;`(context?&nbsp;(context-key&nbsp;~x)))
+                157&nbsp;&nbsp;&nbsp;&nbsp;`(context?&nbsp;(context-key&nbsp;~x)))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                134&nbsp;&nbsp;
+                158&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                135&nbsp;&nbsp;(defn&nbsp;make-fault-object
+                159&nbsp;&nbsp;(defn&nbsp;make-fault-object
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                136&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;these&nbsp;`severity`,&nbsp;`fault`&nbsp;and&nbsp;`narrative`&nbsp;values.
+                160&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;these&nbsp;`severity`,&nbsp;`fault`&nbsp;and&nbsp;`narrative`&nbsp;values.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;ActivityPub&nbsp;object&nbsp;MUST&nbsp;have&nbsp;a&nbsp;globally&nbsp;unique&nbsp;ID.&nbsp;Whether&nbsp;this&nbsp;is&nbsp;
+                162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An&nbsp;ActivityPub&nbsp;object&nbsp;MUST&nbsp;have&nbsp;a&nbsp;globally&nbsp;unique&nbsp;ID.&nbsp;Whether&nbsp;this&nbsp;is&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meaningful&nbsp;depends&nbsp;on&nbsp;whether&nbsp;we&nbsp;persist&nbsp;fault&nbsp;report&nbsp;objects&nbsp;and&nbsp;serve
+                163&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;meaningful&nbsp;depends&nbsp;on&nbsp;whether&nbsp;we&nbsp;persist&nbsp;fault&nbsp;report&nbsp;objects&nbsp;and&nbsp;serve
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;them,&nbsp;which&nbsp;at&nbsp;present&nbsp;I&nbsp;have&nbsp;no&nbsp;plans&nbsp;to&nbsp;do.&quot;
+                164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;them,&nbsp;which&nbsp;at&nbsp;present&nbsp;I&nbsp;have&nbsp;no&nbsp;plans&nbsp;to&nbsp;do.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                141&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;should&nbsp;not&nbsp;pass&nbsp;in&nbsp;the&nbsp;narrative;&nbsp;instead&nbsp;should&nbsp;use&nbsp;the&nbsp;:fault&nbsp;value
+                165&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;should&nbsp;not&nbsp;pass&nbsp;in&nbsp;the&nbsp;narrative;&nbsp;instead&nbsp;should&nbsp;use&nbsp;the&nbsp;:fault&nbsp;value
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                142&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;to&nbsp;look&nbsp;up&nbsp;the&nbsp;narrative&nbsp;in&nbsp;a&nbsp;resource&nbsp;file.
+                166&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;to&nbsp;look&nbsp;up&nbsp;the&nbsp;narrative&nbsp;in&nbsp;a&nbsp;resource&nbsp;file.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                143&nbsp;&nbsp;&nbsp;&nbsp;[severity&nbsp;fault]
+                167&nbsp;&nbsp;&nbsp;&nbsp;[severity&nbsp;fault]
                 </span><br/>
 <span class="covered" title="9 out of 9 forms covered">
-                144&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;{}
+                168&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;{}
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context-key&nbsp;validation-fault-context-uri
+                169&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context-key&nbsp;validation-fault-context-uri
                 </span><br/>
 <span class="covered" title="5 out of 5 forms covered">
-                146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:id&nbsp;(str&nbsp;&quot;https:&#x2F;&#x2F;&quot;
+                170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:id&nbsp;(str&nbsp;&quot;https:&#x2F;&#x2F;&quot;
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-hostname)
+                171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-hostname)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&#x2F;fault&#x2F;&quot;
+                172&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&#x2F;fault&#x2F;&quot;
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-pid)
+                173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-pid)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;:&quot;
+                174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;:&quot;
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(inst-ms&nbsp;(java.util.Date.)))
+                175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(inst-ms&nbsp;(java.util.Date.)))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;&quot;Fault&quot;
+                176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;&quot;Fault&quot;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
+                177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fault&nbsp;fault
+                178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fault&nbsp;fault
                 </span><br/>
 <span class="partial" title="7 out of 8 forms covered">
-                155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:narrative&nbsp;(or&nbsp;(messages&nbsp;fault)
+                179&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:narrative&nbsp;(or&nbsp;(get-message&nbsp;fault)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
+                180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
                 </span><br/>
 <span class="not-covered" title="0 out of 17 forms covered">
-                157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;&quot;No&nbsp;narrative&nbsp;provided&nbsp;for&nbsp;fault&nbsp;token&nbsp;&quot;&nbsp;fault)
+                181&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;&quot;No&nbsp;narrative&nbsp;provided&nbsp;for&nbsp;fault&nbsp;token&nbsp;&quot;&nbsp;fault)
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;fault)))))
+                182&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;fault)))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                159&nbsp;&nbsp;
+                183&nbsp;&nbsp;
                 </span><br/>
-<span class="covered" title="60 out of 60 forms covered">
-                160&nbsp;&nbsp;(defmacro&nbsp;nil-if-empty
+<span class="covered" title="58 out of 58 forms covered">
+                184&nbsp;&nbsp;(defmacro&nbsp;nil-if-empty
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                161&nbsp;&nbsp;&nbsp;&nbsp;&quot;if&nbsp;`x`&nbsp;is&nbsp;an&nbsp;empty&nbsp;collection,&nbsp;return&nbsp;`nil`;&nbsp;else&nbsp;return&nbsp;`x`.&quot;
+                185&nbsp;&nbsp;&nbsp;&nbsp;&quot;if&nbsp;`x`&nbsp;is&nbsp;an&nbsp;empty&nbsp;collection,&nbsp;return&nbsp;`nil`;&nbsp;else&nbsp;return&nbsp;`x`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                162&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                186&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                163&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(and&nbsp;(coll?&nbsp;~x)&nbsp;(empty?&nbsp;~x))&nbsp;nil
+                187&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(and&nbsp;(coll?&nbsp;~x)&nbsp;(empty?&nbsp;~x))&nbsp;nil
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~x))
+                188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~x))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                165&nbsp;&nbsp;
+                189&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                166&nbsp;&nbsp;(defn&nbsp;concat-non-empty
+                190&nbsp;&nbsp;(defn&nbsp;concat-non-empty
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                167&nbsp;&nbsp;&nbsp;&nbsp;&quot;Quick&nbsp;function&nbsp;to&nbsp;replace&nbsp;the&nbsp;pattern&nbsp;(nil-if-empty&nbsp;(remove&nbsp;nil?&nbsp;(concat&nbsp;...)))
+                191&nbsp;&nbsp;&nbsp;&nbsp;&quot;Quick&nbsp;function&nbsp;to&nbsp;replace&nbsp;the&nbsp;pattern&nbsp;(nil-if-empty&nbsp;(remove&nbsp;nil?&nbsp;(concat&nbsp;...)))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                168&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;I&#x27;m&nbsp;using&nbsp;a&nbsp;lot!&quot;
+                192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;I&#x27;m&nbsp;using&nbsp;a&nbsp;lot!&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                169&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;lists]
+                193&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;lists]
                 </span><br/>
 <span class="partial" title="28 out of 29 forms covered">
-                170&nbsp;&nbsp;&nbsp;&nbsp;(nil-if-empty&nbsp;(remove&nbsp;nil?&nbsp;(apply&nbsp;concat&nbsp;lists))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                171&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                172&nbsp;&nbsp;(defn&nbsp;has-type-or-fault
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                173&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;`:type`&nbsp;value&nbsp;which&nbsp;is&nbsp;`acceptable`,&nbsp;return&nbsp;`nil`;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;and&nbsp;`token`.
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acceptable`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;either&nbsp;nil,&nbsp;a&nbsp;string,&nbsp;or&nbsp;a&nbsp;set&nbsp;of&nbsp;strings.
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`acceptable`&nbsp;is&nbsp;`nil`,&nbsp;no&nbsp;type&nbsp;specific&nbsp;tests&nbsp;will&nbsp;be&nbsp;performed.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                178&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;acceptable&nbsp;severity&nbsp;token]
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                179&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;acceptable
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                181&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
-                </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                182&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
-                </span><br/>
-<span class="not-covered" title="0 out of 13 forms covered">
-                183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;tv)&nbsp;(string?&nbsp;acceptable))&nbsp;(=&nbsp;tv&nbsp;acceptable)
-                </span><br/>
-<span class="not-covered" title="0 out of 13 forms covered">
-                184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;tv)&nbsp;(set?&nbsp;acceptable))&nbsp;(acceptable&nbsp;tv)
-                </span><br/>
-<span class="not-covered" title="0 out of 15 forms covered">
-                185&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;tv)&nbsp;(string?&nbsp;acceptable))&nbsp;((set&nbsp;tv)&nbsp;acceptable)
-                </span><br/>
-<span class="not-covered" title="0 out of 12 forms covered">
-                186&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;tv)&nbsp;(set?&nbsp;acceptable))&nbsp;(not-empty
-                </span><br/>
-<span class="not-covered" title="0 out of 6 forms covered">
-                187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(intersection&nbsp;(set&nbsp;tv)&nbsp;acceptable))
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;&quot;Type&nbsp;value&nbsp;or&nbsp;`acceptable`&nbsp;argument&nbsp;not&nbsp;as&nbsp;expected.&quot;
-                </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                190&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:x&nbsp;x
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                191&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:acceptable&nbsp;acceptable
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token}})))
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                194&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))))
+                194&nbsp;&nbsp;&nbsp;&nbsp;(nil-if-empty&nbsp;(remove&nbsp;nil?&nbsp;(apply&nbsp;concat&nbsp;lists))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 195&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                196&nbsp;&nbsp;(defn&nbsp;any-or-faults
+                196&nbsp;&nbsp;(defn&nbsp;has-type-or-fault
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                197&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`nil`&nbsp;if&nbsp;validating&nbsp;one&nbsp;of&nbsp;these&nbsp;options&nbsp;returns&nbsp;`nil`;&nbsp;otherwise&nbsp;
+                197&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;object&nbsp;`x`&nbsp;has&nbsp;a&nbsp;`:type`&nbsp;value&nbsp;which&nbsp;is&nbsp;`acceptable`,&nbsp;return&nbsp;`nil`;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;list&nbsp;comprising&nbsp;a&nbsp;fault&nbsp;report&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity-if-none`
+                198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;and&nbsp;`token`.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;this&nbsp;token&nbsp;followed&nbsp;by&nbsp;all&nbsp;the&nbsp;fault&nbsp;reports&nbsp;from&nbsp;validating&nbsp;each
+                199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option.
+                200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acceptable`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;either&nbsp;nil,&nbsp;a&nbsp;string,&nbsp;or&nbsp;a&nbsp;set&nbsp;of&nbsp;strings.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                201&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                201&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`acceptable`&nbsp;is&nbsp;`nil`,&nbsp;no&nbsp;type&nbsp;specific&nbsp;tests&nbsp;will&nbsp;be&nbsp;performed.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                202&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;places&nbsp;-&nbsp;but&nbsp;especially&nbsp;in&nbsp;validating&nbsp;collections&nbsp;-&nbsp;where
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;there&nbsp;are&nbsp;several&nbsp;different&nbsp;valid&nbsp;configurations,&nbsp;but&nbsp;few&nbsp;or&nbsp;no&nbsp;properties
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;always&nbsp;required.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                205&nbsp;&nbsp;&nbsp;&nbsp;[options&nbsp;severity-if-none&nbsp;token]
-                </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                206&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(filter&nbsp;empty?&nbsp;options)]
-                </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(empty?&nbsp;faults)&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;i.e.&nbsp;there&nbsp;was&nbsp;at&nbsp;least&nbsp;one&nbsp;option&nbsp;that&nbsp;returned&nbsp;no&nbsp;faults...
-                </span><br/>
-<span class="not-covered" title="0 out of 7 forms covered">
-                209&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons&nbsp;(make-fault-object&nbsp;severity-if-none&nbsp;token)&nbsp;faults))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                210&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="31 out of 31 forms covered">
-                211&nbsp;&nbsp;(defmacro&nbsp;cond-make-fault-object
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                212&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;`v`&nbsp;is&nbsp;`false`&nbsp;or&nbsp;`nil`,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;and&nbsp;`token`,
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;nil.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                214&nbsp;&nbsp;&nbsp;&nbsp;[v&nbsp;severity&nbsp;token]
+                202&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;acceptable&nbsp;severity&nbsp;token]
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                215&nbsp;&nbsp;&nbsp;&nbsp;`(when-not&nbsp;~v&nbsp;(make-fault-object&nbsp;~severity&nbsp;~token)))
+                203&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;acceptable
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[tv&nbsp;(:type&nbsp;x)]
+                </span><br/>
+<span class="covered" title="3 out of 3 forms covered">
+                205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
+                </span><br/>
+<span class="partial" title="1 out of 6 forms covered">
+                206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                </span><br/>
+<span class="partial" title="12 out of 13 forms covered">
+                207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;tv)&nbsp;(string?&nbsp;acceptable))&nbsp;(=&nbsp;tv&nbsp;acceptable)
+                </span><br/>
+<span class="not-covered" title="0 out of 13 forms covered">
+                208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;tv)&nbsp;(set?&nbsp;acceptable))&nbsp;(acceptable&nbsp;tv)
+                </span><br/>
+<span class="not-covered" title="0 out of 15 forms covered">
+                209&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;tv)&nbsp;(string?&nbsp;acceptable))&nbsp;((set&nbsp;tv)&nbsp;acceptable)
+                </span><br/>
+<span class="not-covered" title="0 out of 12 forms covered">
+                210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;tv)&nbsp;(set?&nbsp;acceptable))&nbsp;(not-empty
+                </span><br/>
+<span class="not-covered" title="0 out of 6 forms covered">
+                211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(intersection&nbsp;(set&nbsp;tv)&nbsp;acceptable))
+                </span><br/>
+<span class="not-covered" title="0 out of 2 forms covered">
+                212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(string?&nbsp;acceptable)
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set?&nbsp;acceptable)))&nbsp;(throw
+                </span><br/>
+<span class="not-covered" title="0 out of 3 forms covered">
+                215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;`acceptable`&nbsp;argument&nbsp;not&nbsp;as&nbsp;expected.&quot;
+                </span><br/>
+<span class="not-covered" title="0 out of 8 forms covered">
+                217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:x&nbsp;x
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:acceptable&nbsp;acceptable
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
+                </span><br/>
+<span class="not-covered" title="0 out of 1 forms covered">
+                220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token}})))
+                </span><br/>
+<span class="covered" title="4 out of 4 forms covered">
+                221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                216&nbsp;&nbsp;
+                222&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                217&nbsp;&nbsp;(defn&nbsp;string-or-fault
+                223&nbsp;&nbsp;(defn&nbsp;any-or-faults
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                218&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;this&nbsp;`value`&nbsp;is&nbsp;not&nbsp;a&nbsp;string,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;
+                224&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`nil`&nbsp;if&nbsp;validating&nbsp;one&nbsp;of&nbsp;these&nbsp;options&nbsp;returns&nbsp;`nil`;&nbsp;otherwise&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;`token`,&nbsp;else&nbsp;`nil`.&nbsp;If&nbsp;`pattern`&nbsp;is&nbsp;also&nbsp;passed,&nbsp;it&nbsp;is&nbsp;expected&nbsp;to&nbsp;be
+                225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;list&nbsp;comprising&nbsp;a&nbsp;fault&nbsp;report&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity-if-none`
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;Regex,&nbsp;and&nbsp;the&nbsp;fault&nbsp;object&nbsp;will&nbsp;be&nbsp;returned&nbsp;unless&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;
+                226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;this&nbsp;token&nbsp;followed&nbsp;by&nbsp;all&nbsp;the&nbsp;fault&nbsp;reports&nbsp;from&nbsp;validating&nbsp;each
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`pattern`.&quot;
+                227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                222&nbsp;&nbsp;&nbsp;&nbsp;([value&nbsp;severity&nbsp;token]
+                228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;places&nbsp;-&nbsp;but&nbsp;especially&nbsp;in&nbsp;validating&nbsp;collections&nbsp;-&nbsp;where
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;there&nbsp;are&nbsp;several&nbsp;different&nbsp;valid&nbsp;configurations,&nbsp;but&nbsp;few&nbsp;or&nbsp;no&nbsp;properties
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;always&nbsp;required.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                232&nbsp;&nbsp;&nbsp;&nbsp;[options&nbsp;severity-if-none&nbsp;token]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                233&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(filter&nbsp;empty?&nbsp;options)]
+                </span><br/>
+<span class="covered" title="5 out of 5 forms covered">
+                234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(empty?&nbsp;faults)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;i.e.&nbsp;there&nbsp;was&nbsp;at&nbsp;least&nbsp;one&nbsp;option&nbsp;that&nbsp;returned&nbsp;no&nbsp;faults...
+                </span><br/>
+<span class="covered" title="7 out of 7 forms covered">
+                236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons&nbsp;(make-fault-object&nbsp;severity-if-none&nbsp;token)&nbsp;faults))))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                237&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                238&nbsp;&nbsp;(defn&nbsp;cond-make-fault-object
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                239&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;`v`&nbsp;is&nbsp;`false`&nbsp;or&nbsp;`nil`,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;and&nbsp;`token`,
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;return&nbsp;nil.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                241&nbsp;&nbsp;&nbsp;&nbsp;[v&nbsp;severity&nbsp;token]
+                </span><br/>
+<span class="covered" title="8 out of 8 forms covered">
+                242&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;v&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                243&nbsp;&nbsp;
+                </span><br/>
+<span class="covered" title="1 out of 1 forms covered">
+                244&nbsp;&nbsp;(defn&nbsp;string-or-fault
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                245&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;this&nbsp;`value`&nbsp;is&nbsp;not&nbsp;a&nbsp;string,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;`token`,&nbsp;else&nbsp;`nil`.&nbsp;If&nbsp;`pattern`&nbsp;is&nbsp;also&nbsp;passed,&nbsp;it&nbsp;is&nbsp;expected&nbsp;to&nbsp;be
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;Regex,&nbsp;and&nbsp;the&nbsp;fault&nbsp;object&nbsp;will&nbsp;be&nbsp;returned&nbsp;unless&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`pattern`.&quot;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                249&nbsp;&nbsp;&nbsp;&nbsp;([value&nbsp;severity&nbsp;token]
                 </span><br/>
 <span class="not-covered" title="0 out of 10 forms covered">
-                223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;value)&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))
+                250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;value)&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                224&nbsp;&nbsp;&nbsp;&nbsp;([value&nbsp;severity&nbsp;token&nbsp;pattern]
+                251&nbsp;&nbsp;&nbsp;&nbsp;([value&nbsp;severity&nbsp;token&nbsp;pattern]
                 </span><br/>
 <span class="not-covered" title="0 out of 14 forms covered">
-                225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;not&nbsp;(and&nbsp;(string?&nbsp;value)&nbsp;(re-matches&nbsp;pattern&nbsp;value))
+                252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;not&nbsp;(and&nbsp;(string?&nbsp;value)&nbsp;(re-matches&nbsp;pattern&nbsp;value))
                 </span><br/>
 <span class="not-covered" title="0 out of 4 forms covered">
-                226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                227&nbsp;&nbsp;
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                228&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                229&nbsp;&nbsp;(defn&nbsp;object-faults
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                230&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;object&nbsp;`x`,&nbsp;or&nbsp;`nil`&nbsp;if&nbsp;none&nbsp;are.
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`expected-type`&nbsp;is&nbsp;also&nbsp;passed,&nbsp;verify&nbsp;that&nbsp;`x`&nbsp;has&nbsp;`expected-type`.
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`expected-type`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a&nbsp;string&nbsp;or&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;strings.&nbsp;Detailed
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verification&nbsp;of&nbsp;the&nbsp;particular&nbsp;features&nbsp;of&nbsp;types&nbsp;is&nbsp;not&nbsp;done&nbsp;here.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                235&nbsp;&nbsp;&nbsp;&nbsp;([x]
-                </span><br/>
-<span class="partial" title="7 out of 8 forms covered">
-                236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil-if-empty
-                </span><br/>
-<span class="covered" title="9 out of 9 forms covered">
-                237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;empty?
-                </span><br/>
-<span class="covered" title="6 out of 6 forms covered">
-                238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
-                </span><br/>
-<span class="covered" title="18 out of 18 forms covered">
-                239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(map?&nbsp;x)
-                </span><br/>
-<span class="covered" title="12 out of 12 forms covered">
-                240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:critical&nbsp;:not-an-object))
-                </span><br/>
-<span class="covered" title="9 out of 9 forms covered">
-                241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
-                </span><br/>
-<span class="covered" title="9 out of 9 forms covered">
-                242&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-context?&nbsp;x)
-                </span><br/>
-<span class="covered" title="12 out of 12 forms covered">
-                243&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-context))
-                </span><br/>
-<span class="covered" title="18 out of 18 forms covered">
-                244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(:type&nbsp;x)
-                </span><br/>
-<span class="covered" title="12 out of 12 forms covered">
-                245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:minor&nbsp;:no-type))
-                </span><br/>
-<span class="covered" title="42 out of 42 forms covered">
-                246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(and&nbsp;(map?&nbsp;x)&nbsp;(contains?&nbsp;x&nbsp;:id))
-                </span><br/>
-<span class="covered" title="12 out of 12 forms covered">
-                247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:minor&nbsp;:no-id-transient))))))
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                248&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;expected-type]
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x)
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;expected-type
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
-                </span><br/>
-<span class="not-covered" title="0 out of 6 forms covered">
-                253&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-type-or-fault&nbsp;x&nbsp;expected-type&nbsp;:critical&nbsp;:unexpected-type))))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                254&nbsp;&nbsp;
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                255&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                256&nbsp;&nbsp;(defn&nbsp;object-reference-or-faults
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                257&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;this&nbsp;`value`&nbsp;is&nbsp;either&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                258&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                259&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;an&nbsp;object&nbsp;of&nbsp;`expected-type`;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                260&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;a&nbsp;URI&nbsp;referencing&nbsp;an&nbsp;object&nbsp;of&nbsp;&nbsp;`expected-type`;&nbsp;or
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                261&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;a&nbsp;link&nbsp;object&nbsp;referencing&nbsp;an&nbsp;object&nbsp;of&nbsp;&nbsp;`expected-type`
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                262&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                263&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;no&nbsp;faults&nbsp;are&nbsp;returned&nbsp;from&nbsp;validating&nbsp;the&nbsp;linked&nbsp;object,&nbsp;then&nbsp;return
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                264&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`nil`;&nbsp;else&nbsp;return&nbsp;a&nbsp;sequence&nbsp;comprising&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`severity`
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                265&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;`token`,&nbsp;prepended&nbsp;to&nbsp;the&nbsp;faults&nbsp;returned.
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                266&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                267&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As&nbsp;with&nbsp;`has-type-or-fault`&nbsp;(q.v.),&nbsp;`expected-type`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                268&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string,&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;strings,&nbsp;or&nbsp;`nil`&nbsp;(indicating&nbsp;the&nbsp;type&nbsp;of&nbsp;the&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                269&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;referenced&nbsp;object&nbsp;should&nbsp;not&nbsp;be&nbsp;checked).
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                270&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                271&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;if&nbsp;`*reify-refs*`&nbsp;is&nbsp;`false`,&nbsp;referenced&nbsp;objects&nbsp;will&nbsp;not
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                272&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actually&nbsp;be&nbsp;checked.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                273&nbsp;&nbsp;&nbsp;&nbsp;[value&nbsp;expected-type&nbsp;severity&nbsp;token]
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                274&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(cond
-                </span><br/>
-<span class="not-covered" title="0 out of 7 forms covered">
-                275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string?&nbsp;value)&nbsp;(try&nbsp;(let&nbsp;[uri&nbsp;(URI.&nbsp;value)
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                276&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;(when&nbsp;*reify-refs*
-                </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                277&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(json&#x2F;read-str&nbsp;(slurp&nbsp;uri)))]
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                278&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;object
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                279&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;object&nbsp;expected-type)))
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                280&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                281&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)))
-                </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                282&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;value)&nbsp;(if&nbsp;(has-type?&nbsp;value&nbsp;&quot;Link&quot;)
-                </span><br/>
-<span class="not-covered" title="0 out of 7 forms covered">
-                283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;we&nbsp;were&nbsp;looking&nbsp;for&nbsp;a&nbsp;link&nbsp;and&nbsp;we&#x27;ve&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;found&nbsp;a&nbsp;link,&nbsp;that&#x27;s&nbsp;OK.
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                286&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;expected-type&nbsp;&quot;Link&quot;)&nbsp;nil
-                </span><br/>
-<span class="not-covered" title="0 out of 10 forms covered">
-                287&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(set?&nbsp;expected-type)&nbsp;(expected-type&nbsp;&quot;Link&quot;))&nbsp;nil
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                288&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;expected-type)&nbsp;nil
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                289&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
-                </span><br/>
-<span class="not-covered" title="0 out of 2 forms covered">
-                290&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults
-                </span><br/>
-<span class="not-covered" title="0 out of 6 forms covered">
-                291&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:href&nbsp;value)&nbsp;expected-type&nbsp;severity&nbsp;token))
-                </span><br/>
-<span class="not-covered" title="0 out of 4 forms covered">
-                292&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;value&nbsp;expected-type))
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                293&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(throw
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                294&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                295&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`value`&nbsp;was&nbsp;not&nbsp;an&nbsp;object&nbsp;or&nbsp;a&nbsp;link&nbsp;to&nbsp;an&nbsp;object&quot;
-                </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                296&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:value&nbsp;value}
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:expected-type&nbsp;expected-type
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                299&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token})))]
-                </span><br/>
-<span class="not-covered" title="0 out of 10 forms covered">
-                300&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;faults&nbsp;(cons&nbsp;(make-fault-object&nbsp;severity&nbsp;token)&nbsp;faults))))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                301&nbsp;&nbsp;
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                302&nbsp;&nbsp;(defn&nbsp;coll-object-reference-or-fault
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                303&nbsp;&nbsp;&nbsp;&nbsp;&quot;As&nbsp;object-reference-or-fault,&nbsp;except&nbsp;`value`&nbsp;argument&nbsp;may&nbsp;also&nbsp;be&nbsp;a&nbsp;list&nbsp;of
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objects&nbsp;and&#x2F;or&nbsp;object&nbsp;references.&quot;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                305&nbsp;&nbsp;&nbsp;&nbsp;[value&nbsp;expected-type&nbsp;severity&nbsp;token]
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                306&nbsp;&nbsp;&nbsp;&nbsp;(cond
-                </span><br/>
-<span class="not-covered" title="0 out of 9 forms covered">
-                307&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;value)&nbsp;(object-reference-or-faults&nbsp;value&nbsp;expected-type&nbsp;severity&nbsp;token)
-                </span><br/>
-<span class="not-covered" title="0 out of 5 forms covered">
-                308&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;value)&nbsp;(concat-non-empty
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                310&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(object-reference-or-faults
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                311&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;expected-type&nbsp;severity&nbsp;token)
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value))
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                313&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(throw
-                </span><br/>
-<span class="not-covered" title="0 out of 3 forms covered">
-                314&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ex-info
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                315&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Argument&nbsp;`value`&nbsp;was&nbsp;not&nbsp;an&nbsp;object,&nbsp;a&nbsp;link&nbsp;to&nbsp;an&nbsp;object,&nbsp;nor&nbsp;a&nbsp;list&nbsp;of&nbsp;these.&quot;
-                </span><br/>
-<span class="not-covered" title="0 out of 8 forms covered">
-                316&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:arguments&nbsp;{:value&nbsp;value}
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                317&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:expected-type&nbsp;expected-type
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                318&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:severity&nbsp;severity
-                </span><br/>
-<span class="not-covered" title="0 out of 1 forms covered">
-                319&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:token&nbsp;token}))))
+                253&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token))))
                 </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/dog_and_duck/quack/quack.clj.html b/docs/cloverage/dog_and_duck/quack/quack.clj.html
index 00d1cff..ebd588c 100644
--- a/docs/cloverage/dog_and_duck/quack/quack.clj.html
+++ b/docs/cloverage/dog_and_duck/quack/quack.clj.html
@@ -62,460 +62,463 @@
                 019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.control-variables&nbsp;:refer&nbsp;[*reject-severity*]]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity&nbsp;object-faults]])
+                020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity]])
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                021&nbsp;&nbsp;
+                022&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                022&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
+                023&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                023&nbsp;&nbsp;
+                024&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
+                025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                025&nbsp;&nbsp;
+                026&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                026&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                028&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                028&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                030&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                030&nbsp;&nbsp;
+                031&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                031&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                032&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                032&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                033&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                033&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
+                034&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                034&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                035&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                035&nbsp;&nbsp;
+                036&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                036&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                037&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                037&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
+                038&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                038&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
+                039&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                039&nbsp;&nbsp;
+                040&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                040&nbsp;&nbsp;(defn&nbsp;object?
+                041&nbsp;&nbsp;(defn&nbsp;object?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                041&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;recognisably&nbsp;an&nbsp;ActivityStreams&nbsp;object.
+                042&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;recognisably&nbsp;an&nbsp;ActivityStreams&nbsp;object.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityStreams&nbsp;spec&nbsp;
+                044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityStreams&nbsp;spec&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-core&#x2F;#object):
+                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-core&#x2F;#object):
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;All&nbsp;properties&nbsp;are&nbsp;optional&nbsp;(including&nbsp;the&nbsp;id&nbsp;and&nbsp;type)
+                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;All&nbsp;properties&nbsp;are&nbsp;optional&nbsp;(including&nbsp;the&nbsp;id&nbsp;and&nbsp;type)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;But&nbsp;we&nbsp;are&nbsp;*just&nbsp;not&nbsp;having&nbsp;that*,&nbsp;because&nbsp;otherwise&nbsp;we&#x27;re&nbsp;flying&nbsp;blind.
+                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;But&nbsp;we&nbsp;are&nbsp;*just&nbsp;not&nbsp;having&nbsp;that*,&nbsp;because&nbsp;otherwise&nbsp;we&#x27;re&nbsp;flying&nbsp;blind.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;*shall*&nbsp;reject&nbsp;objects&nbsp;lacking&nbsp;at&nbsp;least&nbsp;`:type`.&nbsp;Missing&nbsp;`:id`&nbsp;keys&nbsp;are
+                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;*shall*&nbsp;reject&nbsp;objects&nbsp;lacking&nbsp;at&nbsp;least&nbsp;`:type`.&nbsp;Missing&nbsp;`:id`&nbsp;keys&nbsp;are
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tolerable&nbsp;because&nbsp;they&nbsp;represent&nbsp;transient&nbsp;objects,&nbsp;which&nbsp;we&nbsp;expect&nbsp;to&nbsp;
+                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tolerable&nbsp;because&nbsp;they&nbsp;represent&nbsp;transient&nbsp;objects,&nbsp;which&nbsp;we&nbsp;expect&nbsp;to&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle.
+                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityPub&nbsp;spec&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitypub&#x2F;#obj)
+                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityPub&nbsp;spec&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitypub&#x2F;#obj)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;Implementers&nbsp;SHOULD&nbsp;include&nbsp;the&nbsp;ActivityPub&nbsp;context&nbsp;in&nbsp;their&nbsp;object&nbsp;
+                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;Implementers&nbsp;SHOULD&nbsp;include&nbsp;the&nbsp;ActivityPub&nbsp;context&nbsp;in&nbsp;their&nbsp;object&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;definitions
+                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;definitions
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;in&nbsp;samples&nbsp;found&nbsp;in&nbsp;the&nbsp;wild&nbsp;they&nbsp;typically&nbsp;don&#x27;t.&quot;
+                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;in&nbsp;samples&nbsp;found&nbsp;in&nbsp;the&nbsp;wild&nbsp;they&nbsp;typically&nbsp;don&#x27;t.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                059&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                060&nbsp;&nbsp;&nbsp;&nbsp;([x]
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x&nbsp;*reject-severity*))
+                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x&nbsp;*reject-severity*))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                061&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
+                062&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
                 </span><br/>
 <span class="covered" title="8 out of 8 forms covered">
-                062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(object-faults&nbsp;x)&nbsp;severity))))
+                063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(object-faults&nbsp;x)&nbsp;severity))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                063&nbsp;&nbsp;
+                064&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                064&nbsp;&nbsp;(defn&nbsp;persistent-object?
+                065&nbsp;&nbsp;(defn&nbsp;persistent-object?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                065&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;a&nbsp;persistent&nbsp;object.
+                066&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;a&nbsp;persistent&nbsp;object.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                066&nbsp;&nbsp;
+                067&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transient&nbsp;objects&nbsp;in&nbsp;ActivityPub&nbsp;are&nbsp;not&nbsp;required&nbsp;to&nbsp;have&nbsp;an&nbsp;`id`&nbsp;key,&nbsp;but&nbsp;persistent
+                068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transient&nbsp;objects&nbsp;in&nbsp;ActivityPub&nbsp;are&nbsp;not&nbsp;required&nbsp;to&nbsp;have&nbsp;an&nbsp;`id`&nbsp;key,&nbsp;but&nbsp;persistent
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ones&nbsp;must&nbsp;have&nbsp;a&nbsp;key,&nbsp;and&nbsp;it&nbsp;must&nbsp;be&nbsp;an&nbsp;IRI&nbsp;(but&nbsp;normally&nbsp;a&nbsp;URI).&quot;
+                069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ones&nbsp;must&nbsp;have&nbsp;a&nbsp;key,&nbsp;and&nbsp;it&nbsp;must&nbsp;be&nbsp;an&nbsp;IRI&nbsp;(but&nbsp;normally&nbsp;a&nbsp;URI).&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                069&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                070&nbsp;&nbsp;&nbsp;&nbsp;([x]
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object?&nbsp;x&nbsp;*reject-severity*))
+                071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object?&nbsp;x&nbsp;*reject-severity*))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                071&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
+                072&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
                 </span><br/>
-<span class="covered" title="8 out of 8 forms covered">
-                072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(persistent-object-faults&nbsp;x)&nbsp;severity))))
+<span class="partial" title="7 out of 8 forms covered">
+                073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(persistent-object-faults&nbsp;x)&nbsp;severity))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                073&nbsp;&nbsp;
+                074&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                074&nbsp;&nbsp;(defn&nbsp;actor?
+                075&nbsp;&nbsp;(defn&nbsp;actor?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                075&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;actor,&nbsp;else&nbsp;false.&quot;
+                076&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;actor,&nbsp;else&nbsp;false.&quot;
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                076&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(actor?&nbsp;x&nbsp;*reject-severity*))
+                077&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(actor?&nbsp;x&nbsp;*reject-severity*))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                077&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
+                078&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
                 </span><br/>
 <span class="covered" title="8 out of 8 forms covered">
-                078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(actor-faults&nbsp;x)&nbsp;severity))))
+                079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(actor-faults&nbsp;x)&nbsp;severity))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                079&nbsp;&nbsp;
+                080&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                080&nbsp;&nbsp;(defn&nbsp;actor-or-uri?
+                081&nbsp;&nbsp;(defn&nbsp;actor-or-uri?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                081&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;an&nbsp;actor.
+                082&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;an&nbsp;actor.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**TODO**:&nbsp;I&nbsp;need&nbsp;to&nbsp;decide&nbsp;about&nbsp;whether&nbsp;to&nbsp;reify&nbsp;referenced&nbsp;objects
+                084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**TODO**:&nbsp;I&nbsp;need&nbsp;to&nbsp;decide&nbsp;about&nbsp;whether&nbsp;to&nbsp;reify&nbsp;referenced&nbsp;objects
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;validation&nbsp;or&nbsp;after.&nbsp;After&nbsp;reification,&nbsp;every&nbsp;reference&nbsp;to&nbsp;an&nbsp;actor
+                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;validation&nbsp;or&nbsp;after.&nbsp;After&nbsp;reification,&nbsp;every&nbsp;reference&nbsp;to&nbsp;an&nbsp;actor
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*must&nbsp;be*&nbsp;to&nbsp;an&nbsp;actor&nbsp;object,&nbsp;but&nbsp;before,&nbsp;may&nbsp;only&nbsp;be&nbsp;to&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;
+                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*must&nbsp;be*&nbsp;to&nbsp;an&nbsp;actor&nbsp;object,&nbsp;but&nbsp;before,&nbsp;may&nbsp;only&nbsp;be&nbsp;to&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one.&quot;
+                087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                087&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                088&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                088&nbsp;&nbsp;&nbsp;&nbsp;(try
+                089&nbsp;&nbsp;&nbsp;&nbsp;(try
                 </span><br/>
 <span class="not-covered" title="0 out of 5 forms covered">
-                089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
                 </span><br/>
 <span class="not-covered" title="0 out of 9 forms covered">
-                090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
+                091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor?&nbsp;x))
+                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor?&nbsp;x))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
+                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)
+                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false)))
+                095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false)))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                095&nbsp;&nbsp;
+                096&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                096&nbsp;&nbsp;(defn&nbsp;activity?
+                097&nbsp;&nbsp;(defn&nbsp;activity?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                097&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;activity,&nbsp;else&nbsp;false.&quot;
+                098&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;activity,&nbsp;else&nbsp;false.&quot;
                 </span><br/>
 <span class="not-covered" title="0 out of 4 forms covered">
-                098&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(activity?&nbsp;x&nbsp;*reject-severity*))
+                099&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(activity?&nbsp;x&nbsp;*reject-severity*))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                099&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
+                100&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
                 </span><br/>
 <span class="not-covered" title="0 out of 8 forms covered">
-                100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(activity-faults&nbsp;x)&nbsp;severity))))
+                101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(activity-faults&nbsp;x)&nbsp;severity))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                101&nbsp;&nbsp;
+                102&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                102&nbsp;&nbsp;(defn&nbsp;link?
+                103&nbsp;&nbsp;(defn&nbsp;link?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                103&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.&quot;
+                104&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.&quot;
                 </span><br/>
 <span class="not-covered" title="0 out of 4 forms covered">
-                104&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(link?&nbsp;x&nbsp;*reject-severity*))
+                105&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(link?&nbsp;x&nbsp;*reject-severity*))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                105&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
+                106&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
                 </span><br/>
 <span class="not-covered" title="0 out of 8 forms covered">
-                106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(link-faults&nbsp;x)&nbsp;severity))))
+                107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(link-faults&nbsp;x)&nbsp;severity))))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                107&nbsp;&nbsp;
+                108&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                108&nbsp;&nbsp;(defn&nbsp;link-or-uri?
+                109&nbsp;&nbsp;(defn&nbsp;link-or-uri?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                109&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.
+                110&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;points&nbsp;in&nbsp;the&nbsp;specification&nbsp;where&nbsp;e.g.&nbsp;the&nbsp;`:image`
+                112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;points&nbsp;in&nbsp;the&nbsp;specification&nbsp;where&nbsp;e.g.&nbsp;the&nbsp;`:image`
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;(if&nbsp;present)&nbsp;may&nbsp;be&nbsp;either&nbsp;a&nbsp;link&nbsp;or&nbsp;a&nbsp;URI.&quot;
+                113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;(if&nbsp;present)&nbsp;may&nbsp;be&nbsp;either&nbsp;a&nbsp;link&nbsp;or&nbsp;a&nbsp;URI.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                113&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                114&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 5 forms covered">
-                114&nbsp;&nbsp;&nbsp;&nbsp;(and
+                115&nbsp;&nbsp;&nbsp;&nbsp;(and
                 </span><br/>
 <span class="not-covered" title="0 out of 9 forms covered">
-                115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
+                116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
                 </span><br/>
 <span class="not-covered" title="0 out of 3 forms covered">
-                116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(link?&nbsp;x))
+                117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(link?&nbsp;x))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true))
+                118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                118&nbsp;&nbsp;
+                119&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                119&nbsp;&nbsp;(defn&nbsp;collection?
+                120&nbsp;&nbsp;(defn&nbsp;collection?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                120&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;collection&nbsp;of&nbsp;type&nbsp;`object-type`,&nbsp;else&nbsp;`false`.
+                121&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;collection&nbsp;of&nbsp;type&nbsp;`object-type`,&nbsp;else&nbsp;`false`.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;one&nbsp;argument,&nbsp;will&nbsp;recognise&nbsp;plain&nbsp;collections&nbsp;and&nbsp;ordered&nbsp;collections,
+                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;one&nbsp;argument,&nbsp;will&nbsp;recognise&nbsp;plain&nbsp;collections&nbsp;and&nbsp;ordered&nbsp;collections,
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;(currently)&nbsp;not&nbsp;collection&nbsp;pages.&quot;
+                124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;(currently)&nbsp;not&nbsp;collection&nbsp;pages.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                124&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;^String&nbsp;object-type]
+                125&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;^String&nbsp;object-type]
                 </span><br/>
 <span class="partial" title="10 out of 11 forms covered">
-                125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[items&nbsp;(or&nbsp;(:items&nbsp;x)&nbsp;(:orderedItems&nbsp;x))]
+                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[items&nbsp;(or&nbsp;(:items&nbsp;x)&nbsp;(:orderedItems&nbsp;x))]
                 </span><br/>
 <span class="partial" title="14 out of 17 forms covered">
-                126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
                 </span><br/>
 <span class="partial" title="5 out of 6 forms covered">
-                127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
+                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
                 </span><br/>
 <span class="partial" title="3 out of 8 forms covered">
-                128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:items&nbsp;x)&nbsp;(nil?&nbsp;(:orderedItems&nbsp;x))
+                129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:items&nbsp;x)&nbsp;(nil?&nbsp;(:orderedItems&nbsp;x))
                 </span><br/>
 <span class="covered" title="8 out of 8 forms covered">
-                129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:orderedItems&nbsp;x)&nbsp;(nil?&nbsp;(:items&nbsp;x))&nbsp;;;&nbsp;can&#x27;t&nbsp;have&nbsp;both&nbsp;properties
+                130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:orderedItems&nbsp;x)&nbsp;(nil?&nbsp;(:items&nbsp;x))&nbsp;;;&nbsp;can&#x27;t&nbsp;have&nbsp;both&nbsp;properties
                 </span><br/>
 <span class="covered" title="5 out of 5 forms covered">
-                130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true&nbsp;;;&nbsp;can&nbsp;have&nbsp;neither,&nbsp;provided&nbsp;it&nbsp;has&nbsp;totalItems.
+                131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true&nbsp;;;&nbsp;can&nbsp;have&nbsp;neither,&nbsp;provided&nbsp;it&nbsp;has&nbsp;totalItems.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false)
+                132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false)
                 </span><br/>
 <span class="covered" title="3 out of 3 forms covered">
-                132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x)
+                133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x)
                 </span><br/>
 <span class="covered" title="5 out of 5 forms covered">
-                133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(:type&nbsp;x)&nbsp;object-type)
+                134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(:type&nbsp;x)&nbsp;object-type)
                 </span><br/>
 <span class="partial" title="2 out of 3 forms covered">
-                134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;items
+                135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;items
                 </span><br/>
 <span class="partial" title="10 out of 12 forms covered">
-                135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;items)
+                136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;items)
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;object?&nbsp;items)&nbsp;;;&nbsp;if&nbsp;there&nbsp;are&nbsp;items,&nbsp;they&nbsp;must&nbsp;form&nbsp;a
+                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;object?&nbsp;items)&nbsp;;;&nbsp;if&nbsp;there&nbsp;are&nbsp;items,&nbsp;they&nbsp;must&nbsp;form&nbsp;a
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;collection&nbsp;of&nbsp;objects.
+                138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;collection&nbsp;of&nbsp;objects.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
+                139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)&nbsp;;;&nbsp;but&nbsp;it&#x27;s&nbsp;OK&nbsp;if&nbsp;there&nbsp;aren&#x27;t.
+                140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)&nbsp;;;&nbsp;but&nbsp;it&#x27;s&nbsp;OK&nbsp;if&nbsp;there&nbsp;aren&#x27;t.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
+                141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;test&nbsp;for&nbsp;totalItems&nbsp;not&nbsp;done&nbsp;here,&nbsp;because&nbsp;collection&nbsp;pages&nbsp;don&#x27;t
+                142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;test&nbsp;for&nbsp;totalItems&nbsp;not&nbsp;done&nbsp;here,&nbsp;because&nbsp;collection&nbsp;pages&nbsp;don&#x27;t
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;have&nbsp;it.
+                143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;have&nbsp;it.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
+                144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                144&nbsp;&nbsp;&nbsp;&nbsp;([x]
+                145&nbsp;&nbsp;&nbsp;&nbsp;([x]
                 </span><br/>
 <span class="not-covered" title="0 out of 9 forms covered">
-                145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
+                146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
                 </span><br/>
 <span class="not-covered" title="0 out of 10 forms covered">
-                146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)
+                147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)
                 </span><br/>
 <span class="not-covered" title="0 out of 2 forms covered">
-                147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;))
+                148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;))
                 </span><br/>
 <span class="not-covered" title="0 out of 5 forms covered">
-                148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))
+                149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)))
+                150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                150&nbsp;&nbsp;
+                151&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                151&nbsp;&nbsp;(defn&nbsp;unordered-collection?
+                152&nbsp;&nbsp;(defn&nbsp;unordered-collection?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                152&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;unordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
+                153&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;unordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                153&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                154&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 18 forms covered">
-                154&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
+                155&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                155&nbsp;&nbsp;
+                156&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                156&nbsp;&nbsp;(defn&nbsp;ordered-collection?
+                157&nbsp;&nbsp;(defn&nbsp;ordered-collection?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                157&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
+                158&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                158&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                159&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 18 forms covered">
-                159&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
+                160&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                160&nbsp;&nbsp;
+                161&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                161&nbsp;&nbsp;(defn&nbsp;collection-page?
+                162&nbsp;&nbsp;(defn&nbsp;collection-page?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                162&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;a&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
+                163&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;a&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                163&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                164&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="not-covered" title="0 out of 4 forms covered">
-                164&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;CollectionPage&quot;))
+                165&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;CollectionPage&quot;))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                165&nbsp;&nbsp;
+                166&nbsp;&nbsp;
                 </span><br/>
 <span class="covered" title="1 out of 1 forms covered">
-                166&nbsp;&nbsp;(defn&nbsp;ordered-collection-page?
+                167&nbsp;&nbsp;(defn&nbsp;ordered-collection-page?
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                167&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;an&nbsp;ordered&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
+                168&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;an&nbsp;ordered&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                168&nbsp;&nbsp;&nbsp;&nbsp;[x]
+                169&nbsp;&nbsp;&nbsp;&nbsp;[x]
                 </span><br/>
 <span class="covered" title="4 out of 4 forms covered">
-                169&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollectionPage&quot;))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                170&nbsp;&nbsp;
+                170&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollectionPage&quot;))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 171&nbsp;&nbsp;
                 </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                172&nbsp;&nbsp;
+                </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/dog_and_duck/scratch/scratch.clj.html b/docs/cloverage/dog_and_duck/scratch/scratch.clj.html
index 4452f7b..56f94ec 100644
--- a/docs/cloverage/dog_and_duck/scratch/scratch.clj.html
+++ b/docs/cloverage/dog_and_duck/scratch/scratch.clj.html
@@ -17,163 +17,190 @@
                 004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-activitypub.webfinger&nbsp;:as&nbsp;webfinger]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-pgp.generate&nbsp;:as&nbsp;pgp-gen]
+                005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-activitypub.net&nbsp;:as&nbsp;activitypub-net]
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]))
+                006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-pgp.generate&nbsp;:as&nbsp;pgp-gen]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.pprint&nbsp;:refer&nbsp;[pprint]]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.data.json&nbsp;:as&nbsp;json]))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                007&nbsp;&nbsp;
+                010&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                008&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
+                011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                009&nbsp;&nbsp;
+                012&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                010&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
+                013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                014&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
+                015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
+                016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
+                018&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
+                019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
+                020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                018&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
+                021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
+                023&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
+                024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                023&nbsp;&nbsp;
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                024&nbsp;&nbsp;;;;&nbsp;Use&nbsp;any&nbsp;ActivityPub&nbsp;account&nbsp;handle&nbsp;you&nbsp;like&nbsp;-&nbsp;for&nbsp;example,&nbsp;your&nbsp;own
-                </span><br/>
-<span class="covered" title="2 out of 2 forms covered">
-                025&nbsp;&nbsp;(def&nbsp;account-handle&nbsp;&quot;@simon_brooke@mastodon.scot&quot;)
+                025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 026&nbsp;&nbsp;
                 </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                027&nbsp;&nbsp;(def&nbsp;handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle))
-                </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                028&nbsp;&nbsp;(webfinger&#x2F;fetch-user-id&nbsp;&quot;mastodon.scot&quot;&nbsp;&quot;simon_brooke&quot;)
-                </span><br/>
-<span class="covered" title="9 out of 9 forms covered">
-                029&nbsp;&nbsp;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))
-                </span><br/>
-<span class="blank" title="0 out of 0 forms covered">
-                030&nbsp;&nbsp;
-                </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                031&nbsp;&nbsp;;;;&nbsp;Retrieve&nbsp;the&nbsp;account&nbsp;details&nbsp;from&nbsp;its&nbsp;home&nbsp;server
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                032&nbsp;&nbsp;;;;&nbsp;(`keywordize-keys`&nbsp;is&nbsp;not&nbsp;necessary&nbsp;here&nbsp;but&nbsp;produces&nbsp;a&nbsp;more&nbsp;idiomatic&nbsp;clojure
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                033&nbsp;&nbsp;;;;&nbsp;data&nbsp;structure)
-                </span><br/>
-<span class="covered" title="1 out of 1 forms covered">
-                034&nbsp;&nbsp;(def&nbsp;account
-                </span><br/>
-<span class="not-tracked" title="0 out of 0 forms covered">
-                035&nbsp;&nbsp;&nbsp;&nbsp;&quot;Fetch&nbsp;my&nbsp;account&nbsp;to&nbsp;mess&nbsp;with&quot;
-                </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                036&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle)]
+                027&nbsp;&nbsp;;;;&nbsp;Use&nbsp;any&nbsp;ActivityPub&nbsp;account&nbsp;handle&nbsp;you&nbsp;like&nbsp;-&nbsp;for&nbsp;example,&nbsp;your&nbsp;own
                 </span><br/>
 <span class="covered" title="2 out of 2 forms covered">
-                037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys
-                </span><br/>
-<span class="covered" title="2 out of 2 forms covered">
-                038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activitypub&#x2F;fetch-user
-                </span><br/>
-<span class="covered" title="9 out of 9 forms covered">
-                039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))))))
+                028&nbsp;&nbsp;(def&nbsp;account-handle&nbsp;&quot;@simon_brooke@mastodon.scot&quot;)
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                040&nbsp;&nbsp;
+                029&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                041&nbsp;&nbsp;;;;&nbsp;examine&nbsp;what&nbsp;you&nbsp;got&nbsp;back!
+                030&nbsp;&nbsp;;;(def&nbsp;handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle))
                 </span><br/>
-<span class="covered" title="3 out of 3 forms covered">
-                042&nbsp;&nbsp;(:inbox&nbsp;account)
+<span class="not-tracked" title="0 out of 0 forms covered">
+                031&nbsp;&nbsp;;;(webfinger&#x2F;fetch-user-id&nbsp;&quot;mastodon.scot&quot;&nbsp;&quot;simon_brooke&quot;)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                032&nbsp;&nbsp;;;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                033&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                034&nbsp;&nbsp;;;;&nbsp;Retrieve&nbsp;the&nbsp;account&nbsp;details&nbsp;from&nbsp;its&nbsp;home&nbsp;server
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                035&nbsp;&nbsp;;;;&nbsp;(`keywordize-keys`&nbsp;is&nbsp;not&nbsp;necessary&nbsp;here&nbsp;but&nbsp;produces&nbsp;a&nbsp;more&nbsp;idiomatic&nbsp;clojure
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                036&nbsp;&nbsp;;;;&nbsp;data&nbsp;structure)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                037&nbsp;&nbsp;;;&nbsp;(def&nbsp;account
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                038&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;account-handle
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                039&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(webfinger&#x2F;parse-handle)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                040&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(webfinger&#x2F;fetch-user-id!)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                041&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activitypub-net&#x2F;fetch-user!)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                042&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-keys&nbsp;[:name&nbsp;:preferredUsername&nbsp;:inbox&nbsp;:summary])))
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 043&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                044&nbsp;&nbsp;;;&nbsp;(def&nbsp;rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048))
+                044&nbsp;&nbsp;;;&nbsp;;;;&nbsp;examine&nbsp;what&nbsp;you&nbsp;got&nbsp;back!
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                045&nbsp;&nbsp;;;&nbsp;(def&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general))
+                045&nbsp;&nbsp;;;&nbsp;(:inbox&nbsp;account)
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
                 046&nbsp;&nbsp;
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                047&nbsp;&nbsp;;;&nbsp;how&nbsp;we&nbsp;make&nbsp;a&nbsp;public&#x2F;private&nbsp;key&nbsp;pair.&nbsp;But&nbsp;this&nbsp;key&nbsp;pair&nbsp;is&nbsp;not&nbsp;the&nbsp;one&nbsp;
+                047&nbsp;&nbsp;;;&nbsp;(-&gt;&nbsp;account
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                048&nbsp;&nbsp;;;&nbsp;known&nbsp;to&nbsp;mastodon.scot&nbsp;as&nbsp;my&nbsp;key&nbsp;pair,&nbsp;so&nbsp;that&nbsp;doesn&#x27;t&nbsp;get&nbsp;us&nbsp;very&nbsp;far...
+                048&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inbox
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                049&nbsp;&nbsp;;;&nbsp;I&nbsp;think.
-                </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                050&nbsp;&nbsp;(let&nbsp;[rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048)
-                </span><br/>
-<span class="covered" title="4 out of 4 forms covered">
-                051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general)
-                </span><br/>
-<span class="covered" title="2 out of 2 forms covered">
-                052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;(-&gt;&nbsp;kp&nbsp;.getPublicKey&nbsp;.getEncoded)
-                </span><br/>
-<span class="covered" title="3 out of 3 forms covered">
-                053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;(-&gt;&nbsp;kp&nbsp;.getPrivateKey&nbsp;.getPrivateKeyDataPacket&nbsp;.getEncoded)]
-                </span><br/>
-<span class="covered" title="6 out of 6 forms covered">
-                054&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Public&nbsp;key:&nbsp;&nbsp;&quot;&nbsp;public))
-                </span><br/>
-<span class="covered" title="6 out of 6 forms covered">
-                055&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Private&nbsp;key:&nbsp;&quot;&nbsp;private))
+                049&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slurp
                 </span><br/>
 <span class="not-tracked" title="0 out of 0 forms covered">
-                056&nbsp;&nbsp;&nbsp;&nbsp;)
+                050&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;json&#x2F;read-str
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                051&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pprint)&nbsp;;;&nbsp;=&gt;&nbsp;80
                 </span><br/>
 <span class="blank" title="0 out of 0 forms covered">
-                057&nbsp;&nbsp;
+                052&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                053&nbsp;&nbsp;;;&nbsp;(def&nbsp;rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                054&nbsp;&nbsp;;;&nbsp;(def&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general))
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                055&nbsp;&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                056&nbsp;&nbsp;;;&nbsp;how&nbsp;we&nbsp;make&nbsp;a&nbsp;public&#x2F;private&nbsp;key&nbsp;pair.&nbsp;But&nbsp;this&nbsp;key&nbsp;pair&nbsp;is&nbsp;not&nbsp;the&nbsp;one&nbsp;
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                057&nbsp;&nbsp;;;&nbsp;known&nbsp;to&nbsp;mastodon.scot&nbsp;as&nbsp;my&nbsp;key&nbsp;pair,&nbsp;so&nbsp;that&nbsp;doesn&#x27;t&nbsp;get&nbsp;us&nbsp;very&nbsp;far...
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                058&nbsp;&nbsp;;;&nbsp;I&nbsp;think.
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                059&nbsp;&nbsp;;;&nbsp;(let&nbsp;[rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                060&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                061&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;(-&gt;&nbsp;kp&nbsp;.getPublicKey&nbsp;.getEncoded)
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                062&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;(-&gt;&nbsp;kp&nbsp;.getPrivateKey&nbsp;.getPrivateKeyDataPacket&nbsp;.getEncoded)]
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                063&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Public&nbsp;key:&nbsp;&nbsp;&quot;&nbsp;public))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                064&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Private&nbsp;key:&nbsp;&quot;&nbsp;private))
+                </span><br/>
+<span class="not-tracked" title="0 out of 0 forms covered">
+                065&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;)
+                </span><br/>
+<span class="blank" title="0 out of 0 forms covered">
+                066&nbsp;&nbsp;
                 </span><br/>
  </body>
 </html>
diff --git a/docs/cloverage/index.html b/docs/cloverage/index.html
index b0c5087..0b55056 100644
--- a/docs/cloverage/index.html
+++ b/docs/cloverage/index.html
@@ -15,126 +15,60 @@
 <td class="with-number">Total</td><td class="with-number">Blank</td><td class="with-number">Instrumented</td>
    </tr></thead>
 <tr>
- <td><a href="clj_activitypub/core.clj.html">clj-activitypub.core</a></td><td class="with-bar"><div class="covered"
-                                style="width:23.588039867109636%;
-                                        float:left;"> 71 </div><div class="not-covered"
-                                style="width:76.41196013289037%;
-                                        float:left;"> 230 </div></td>
-<td class="with-number">23.59 %</td>
+ <td><a href="dog_and_duck/quack/cli.clj.html">dog-and-duck.quack.cli</a></td><td class="with-bar"><div class="covered"
+                                style="width:11.986301369863014%;
+                                        float:left;"> 70 </div><div class="not-covered"
+                                style="width:88.01369863013699%;
+                                        float:left;"> 514 </div></td>
+<td class="with-number">11.99 %</td>
 <td class="with-bar"><div class="covered"
-                                style="width:27.906976744186046%;
-                                        float:left;"> 24 </div><div class="partial"
-                                style="width:2.3255813953488373%;
+                                style="width:21.50537634408602%;
+                                        float:left;"> 20 </div><div class="partial"
+                                style="width:2.150537634408602%;
                                         float:left;"> 2 </div><div class="not-covered"
-                                style="width:69.76744186046511%;
-                                        float:left;"> 60 </div></td>
-<td class="with-number">30.23 %</td>
-<td class="with-number">150</td><td class="with-number">14</td><td class="with-number">86</td>
-</tr>
-<tr>
- <td><a href="clj_activitypub/internal/crypto.clj.html">clj-activitypub.internal.crypto</a></td><td class="with-bar"><div class="covered"
-                                style="width:18.75%;
-                                        float:left;"> 9 </div><div class="not-covered"
-                                style="width:81.25%;
-                                        float:left;"> 39 </div></td>
-<td class="with-number">18.75 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:39.130434782608695%;
-                                        float:left;"> 9 </div><div class="not-covered"
-                                style="width:60.869565217391305%;
-                                        float:left;"> 14 </div></td>
-<td class="with-number">39.13 %</td>
-<td class="with-number">39</td><td class="with-number">8</td><td class="with-number">23</td>
-</tr>
-<tr>
- <td><a href="clj_activitypub/internal/http_util.clj.html">clj-activitypub.internal.http-util</a></td><td class="with-bar"><div class="covered"
-                                style="width:74.35897435897436%;
-                                        float:left;"> 29 </div><div class="not-covered"
-                                style="width:25.641025641025642%;
-                                        float:left;"> 10 </div></td>
-<td class="with-number">74.36 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:80.0%;
-                                        float:left;"> 12 </div><div class="not-covered"
-                                style="width:20.0%;
-                                        float:left;"> 3 </div></td>
-<td class="with-number">80.00 %</td>
-<td class="with-number">28</td><td class="with-number">3</td><td class="with-number">15</td>
-</tr>
-<tr>
- <td><a href="clj_activitypub/internal/thread_cache.clj.html">clj-activitypub.internal.thread-cache</a></td><td class="with-bar"><div class="covered"
-                                style="width:83.33333333333333%;
-                                        float:left;"> 105 </div><div class="not-covered"
-                                style="width:16.666666666666668%;
-                                        float:left;"> 21 </div></td>
-<td class="with-number">83.33 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:88.23529411764706%;
-                                        float:left;"> 30 </div><div class="partial"
-                                style="width:2.9411764705882355%;
-                                        float:left;"> 1 </div><div class="not-covered"
-                                style="width:8.823529411764707%;
-                                        float:left;"> 3 </div></td>
-<td class="with-number">91.18 %</td>
-<td class="with-number">47</td><td class="with-number">3</td><td class="with-number">34</td>
-</tr>
-<tr>
- <td><a href="clj_activitypub/webfinger.clj.html">clj-activitypub.webfinger</a></td><td class="with-bar"><div class="covered"
-                                style="width:95.53571428571429%;
-                                        float:left;"> 107 </div><div class="not-covered"
-                                style="width:4.464285714285714%;
-                                        float:left;"> 5 </div></td>
-<td class="with-number">95.54 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:88.88888888888889%;
-                                        float:left;"> 16 </div><div class="partial"
-                                style="width:11.11111111111111%;
-                                        float:left;"> 2 </div></td>
-<td class="with-number">100.00 %</td>
-<td class="with-number">35</td><td class="with-number">5</td><td class="with-number">18</td>
+                                style="width:76.34408602150538%;
+                                        float:left;"> 71 </div></td>
+<td class="with-number">23.66 %</td>
+<td class="with-number">139</td><td class="with-number">10</td><td class="with-number">93</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/quack/picky.clj.html">dog-and-duck.quack.picky</a></td><td class="with-bar"><div class="covered"
-                                style="width:41.6256157635468%;
-                                        float:left;"> 169 </div><div class="not-covered"
-                                style="width:58.3743842364532%;
-                                        float:left;"> 237 </div></td>
-<td class="with-number">41.63 %</td>
+                                style="width:55.41871921182266%;
+                                        float:left;"> 225 </div><div class="not-covered"
+                                style="width:44.58128078817734%;
+                                        float:left;"> 181 </div></td>
+<td class="with-number">55.42 %</td>
 <td class="with-bar"><div class="covered"
-                                style="width:58.55855855855856%;
-                                        float:left;"> 65 </div><div class="partial"
-                                style="width:2.7027027027027026%;
-                                        float:left;"> 3 </div><div class="not-covered"
-                                style="width:38.73873873873874%;
-                                        float:left;"> 43 </div></td>
-<td class="with-number">61.26 %</td>
-<td class="with-number">251</td><td class="with-number">15</td><td class="with-number">111</td>
+                                style="width:66.07142857142857%;
+                                        float:left;"> 74 </div><div class="partial"
+                                style="width:4.464285714285714%;
+                                        float:left;"> 5 </div><div class="not-covered"
+                                style="width:29.464285714285715%;
+                                        float:left;"> 33 </div></td>
+<td class="with-number">70.54 %</td>
+<td class="with-number">252</td><td class="with-number">15</td><td class="with-number">112</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/quack/picky/collections.clj.html">dog-and-duck.quack.picky.collections</a></td><td class="with-bar"><div class="covered"
-                                style="width:3.007518796992481%;
-                                        float:left;"> 4 </div><div class="not-covered"
-                                style="width:96.99248120300751%;
-                                        float:left;"> 129 </div></td>
-<td class="with-number">3.01 %</td>
+                                style="width:100.0%;
+                                        float:left;"> 130 </div></td>
+<td class="with-number">100.00 %</td>
 <td class="with-bar"><div class="covered"
-                                style="width:16.666666666666668%;
-                                        float:left;"> 4 </div><div class="not-covered"
-                                style="width:83.33333333333333%;
-                                        float:left;"> 20 </div></td>
-<td class="with-number">16.67 %</td>
-<td class="with-number">57</td><td class="with-number">8</td><td class="with-number">24</td>
+                                style="width:100.0%;
+                                        float:left;"> 25 </div></td>
+<td class="with-number">100.00 %</td>
+<td class="with-number">60</td><td class="with-number">8</td><td class="with-number">25</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/quack/picky/constants.clj.html">dog-and-duck.quack.picky.constants</a></td><td class="with-bar"><div class="covered"
                                 style="width:100.0%;
-                                        float:left;"> 73 </div></td>
+                                        float:left;"> 99 </div></td>
 <td class="with-number">100.00 %</td>
 <td class="with-bar"><div class="covered"
                                 style="width:100.0%;
-                                        float:left;"> 18 </div></td>
+                                        float:left;"> 23 </div></td>
 <td class="with-number">100.00 %</td>
-<td class="with-number">79</td><td class="with-number">12</td><td class="with-number">18</td>
+<td class="with-number">116</td><td class="with-number">15</td><td class="with-number">23</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/quack/picky/control_variables.clj.html">dog-and-duck.quack.picky.control-variables</a></td><td class="with-bar"><div class="covered"
@@ -148,75 +82,98 @@
 <td class="with-number">49</td><td class="with-number">6</td><td class="with-number">3</td>
 </tr>
 <tr>
- <td><a href="dog_and_duck/quack/picky/fault_messages.clj.html">dog-and-duck.quack.picky.fault-messages</a></td><td class="with-bar"><div class="covered"
-                                style="width:100.0%;
-                                        float:left;"> 29 </div></td>
-<td class="with-number">100.00 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:100.0%;
-                                        float:left;"> 3 </div></td>
-<td class="with-number">100.00 %</td>
-<td class="with-number">35</td><td class="with-number">5</td><td class="with-number">3</td>
-</tr>
-<tr>
- <td><a href="dog_and_duck/quack/picky/required_properties.clj.html">dog-and-duck.quack.picky.required-properties</a></td><td class="with-bar"><div class="covered"
-                                style="width:100.0%;
-                                        float:left;"> 1 </div></td>
-<td class="with-number">100.00 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:100.0%;
-                                        float:left;"> 1 </div></td>
-<td class="with-number">100.00 %</td>
-<td class="with-number">1</td><td class="with-number">0</td><td class="with-number">1</td>
-</tr>
-<tr>
- <td><a href="dog_and_duck/quack/picky/utils.clj.html">dog-and-duck.quack.picky.utils</a></td><td class="with-bar"><div class="covered"
-                                style="width:49.94786235662148%;
-                                        float:left;"> 479 </div><div class="not-covered"
-                                style="width:50.05213764337852%;
-                                        float:left;"> 480 </div></td>
-<td class="with-number">49.95 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:38.775510204081634%;
-                                        float:left;"> 57 </div><div class="partial"
-                                style="width:6.122448979591836%;
-                                        float:left;"> 9 </div><div class="not-covered"
-                                style="width:55.10204081632653%;
-                                        float:left;"> 81 </div></td>
-<td class="with-number">44.90 %</td>
-<td class="with-number">319</td><td class="with-number">30</td><td class="with-number">147</td>
-</tr>
-<tr>
- <td><a href="dog_and_duck/quack/quack.clj.html">dog-and-duck.quack.quack</a></td><td class="with-bar"><div class="covered"
-                                style="width:46.56488549618321%;
-                                        float:left;"> 122 </div><div class="not-covered"
-                                style="width:53.43511450381679%;
-                                        float:left;"> 140 </div></td>
-<td class="with-number">46.56 %</td>
-<td class="with-bar"><div class="covered"
-                                style="width:51.02040816326531%;
-                                        float:left;"> 25 </div><div class="partial"
-                                style="width:12.244897959183673%;
-                                        float:left;"> 6 </div><div class="not-covered"
-                                style="width:36.734693877551024%;
+ <td><a href="dog_and_duck/quack/picky/distribution.clj.html">dog-and-duck.quack.picky.distribution</a></td><td class="with-bar"><div class="covered"
+                                style="width:10.0%;
+                                        float:left;"> 2 </div><div class="not-covered"
+                                style="width:90.0%;
                                         float:left;"> 18 </div></td>
-<td class="with-number">63.27 %</td>
-<td class="with-number">171</td><td class="with-number">21</td><td class="with-number">49</td>
-</tr>
-<tr>
- <td><a href="dog_and_duck/scratch/core.clj.html">dog-and-duck.scratch.core</a></td><td class="with-bar"><div class="covered"
+<td class="with-number">10.00 %</td>
+<td class="with-bar"><div class="covered"
                                 style="width:33.333333333333336%;
                                         float:left;"> 2 </div><div class="not-covered"
                                 style="width:66.66666666666667%;
                                         float:left;"> 4 </div></td>
 <td class="with-number">33.33 %</td>
+<td class="with-number">30</td><td class="with-number">5</td><td class="with-number">6</td>
+</tr>
+<tr>
+ <td><a href="dog_and_duck/quack/picky/objects.clj.html">dog-and-duck.quack.picky.objects</a></td><td class="with-bar"><div class="covered"
+                                style="width:81.38759172781855%;
+                                        float:left;"> 1220 </div><div class="not-covered"
+                                style="width:18.612408272181455%;
+                                        float:left;"> 279 </div></td>
+<td class="with-number">81.39 %</td>
 <td class="with-bar"><div class="covered"
-                                style="width:66.66666666666667%;
-                                        float:left;"> 2 </div><div class="not-covered"
-                                style="width:33.333333333333336%;
+                                style="width:83.48348348348348%;
+                                        float:left;"> 278 </div><div class="partial"
+                                style="width:7.5075075075075075%;
+                                        float:left;"> 25 </div><div class="not-covered"
+                                style="width:9.00900900900901%;
+                                        float:left;"> 30 </div></td>
+<td class="with-number">90.99 %</td>
+<td class="with-number">522</td><td class="with-number">16</td><td class="with-number">333</td>
+</tr>
+<tr>
+ <td><a href="dog_and_duck/quack/picky/scratch.clj.html">dog-and-duck.quack.picky.scratch</a></td><td class="with-bar"><div class="covered"
+                                style="width:100.0%;
                                         float:left;"> 1 </div></td>
-<td class="with-number">66.67 %</td>
-<td class="with-number">22</td><td class="with-number">5</td><td class="with-number">3</td>
+<td class="with-number">100.00 %</td>
+<td class="with-bar"><div class="covered"
+                                style="width:100.0%;
+                                        float:left;"> 1 </div></td>
+<td class="with-number">100.00 %</td>
+<td class="with-number">53</td><td class="with-number">6</td><td class="with-number">1</td>
+</tr>
+<tr>
+ <td><a href="dog_and_duck/quack/picky/time.clj.html">dog-and-duck.quack.picky.time</a></td><td class="with-bar"><div class="covered"
+                                style="width:7.407407407407407%;
+                                        float:left;"> 10 </div><div class="not-covered"
+                                style="width:92.5925925925926%;
+                                        float:left;"> 125 </div></td>
+<td class="with-number">7.41 %</td>
+<td class="with-bar"><div class="covered"
+                                style="width:22.22222222222222%;
+                                        float:left;"> 4 </div><div class="partial"
+                                style="width:11.11111111111111%;
+                                        float:left;"> 2 </div><div class="not-covered"
+                                style="width:66.66666666666667%;
+                                        float:left;"> 12 </div></td>
+<td class="with-number">33.33 %</td>
+<td class="with-number">66</td><td class="with-number">7</td><td class="with-number">18</td>
+</tr>
+<tr>
+ <td><a href="dog_and_duck/quack/picky/utils.clj.html">dog-and-duck.quack.picky.utils</a></td><td class="with-bar"><div class="covered"
+                                style="width:62.62626262626262%;
+                                        float:left;"> 434 </div><div class="not-covered"
+                                style="width:37.37373737373738%;
+                                        float:left;"> 259 </div></td>
+<td class="with-number">62.63 %</td>
+<td class="with-bar"><div class="covered"
+                                style="width:60.18518518518518%;
+                                        float:left;"> 65 </div><div class="partial"
+                                style="width:16.666666666666668%;
+                                        float:left;"> 18 </div><div class="not-covered"
+                                style="width:23.14814814814815%;
+                                        float:left;"> 25 </div></td>
+<td class="with-number">76.85 %</td>
+<td class="with-number">253</td><td class="with-number">26</td><td class="with-number">108</td>
+</tr>
+<tr>
+ <td><a href="dog_and_duck/quack/quack.clj.html">dog-and-duck.quack.quack</a></td><td class="with-bar"><div class="covered"
+                                style="width:46.18320610687023%;
+                                        float:left;"> 121 </div><div class="not-covered"
+                                style="width:53.81679389312977%;
+                                        float:left;"> 141 </div></td>
+<td class="with-number">46.18 %</td>
+<td class="with-bar"><div class="covered"
+                                style="width:48.97959183673469%;
+                                        float:left;"> 24 </div><div class="partial"
+                                style="width:14.285714285714286%;
+                                        float:left;"> 7 </div><div class="not-covered"
+                                style="width:36.734693877551024%;
+                                        float:left;"> 18 </div></td>
+<td class="with-number">63.27 %</td>
+<td class="with-number">172</td><td class="with-number">21</td><td class="with-number">49</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/scratch/parser.clj.html">dog-and-duck.scratch.parser</a></td><td class="with-bar"><div class="covered"
@@ -238,13 +195,13 @@
 <tr>
  <td><a href="dog_and_duck/scratch/scratch.clj.html">dog-and-duck.scratch.scratch</a></td><td class="with-bar"><div class="covered"
                                 style="width:100.0%;
-                                        float:left;"> 66 </div></td>
+                                        float:left;"> 3 </div></td>
 <td class="with-number">100.00 %</td>
 <td class="with-bar"><div class="covered"
                                 style="width:100.0%;
-                                        float:left;"> 17 </div></td>
+                                        float:left;"> 2 </div></td>
 <td class="with-number">100.00 %</td>
-<td class="with-number">57</td><td class="with-number">9</td><td class="with-number">17</td>
+<td class="with-number">66</td><td class="with-number">10</td><td class="with-number">2</td>
 </tr>
 <tr>
  <td><a href="dog_and_duck/utils/process.clj.html">dog-and-duck.utils.process</a></td><td class="with-bar"><div class="covered"
@@ -263,9 +220,9 @@
 </tr>
 <tr><td>Totals:</td>
 <td class="with-bar"></td>
-<td class="with-number">50.34 %</td>
+<td class="with-number">60.82 %</td>
 <td class="with-bar"></td>
-<td class="with-number">57.34 %</td>
+<td class="with-number">75.54 %</td>
    </tr>
   </table>
  </body>
diff --git a/docs/codox/Desiderata.html b/docs/codox/Desiderata.html
index 810a57a..fd544c4 100644
--- a/docs/codox/Desiderata.html
+++ b/docs/codox/Desiderata.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>Desiderata</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1  current"><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#desiderata" name="desiderata"></a>Desiderata</h1>
+<html><head><meta charset="UTF-8" /><title>Desiderata</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1  current"><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#desiderata" name="desiderata"></a>Desiderata</h1>
 <p><em>Social media features which users want which [Mastodon](<a href="https://en.wikipedia.org/wiki/Mastodon_(social_network)">https://en.wikipedia.org/wiki/Mastodon_(social_network)</a>) does not provide, or provides poorly.</em></p>
 <ol>
   <li>User-specified inbox-ordering algorithms;</li>
diff --git a/docs/codox/Using_ActivityPub.html b/docs/codox/Using_ActivityPub.html
index 2d7035c..ff9b583 100644
--- a/docs/codox/Using_ActivityPub.html
+++ b/docs/codox/Using_ActivityPub.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>Using ActivityPub</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1  current"><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#using-activitypub" name="using-activitypub"></a>Using ActivityPub</h1>
+<html><head><meta charset="UTF-8" /><title>Using ActivityPub</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1  current"><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#using-activitypub" name="using-activitypub"></a>Using ActivityPub</h1>
 <h2><a href="#introduction" name="introduction"></a>Introduction</h2>
 <p>I do not know what I am doing; I am learning, and playing. Nothing in this document should be treated as good advice; it simply relates to the current state of my knowledge.</p>
 <h2><a href="#what-happens-when-you-post-a-new-item-to-an-activitypub-server" name="what-happens-when-you-post-a-new-item-to-an-activitypub-server"></a>What happens when you post a new item to an ActivityPub server</h2>
diff --git a/docs/codox/Validation_Faults.html b/docs/codox/Validation_Faults.html
index f6ae4bd..a792602 100644
--- a/docs/codox/Validation_Faults.html
+++ b/docs/codox/Validation_Faults.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>Validation Faults in ActivityPub documents</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1  current"><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#validation-faults-in-activitypub-documents" name="validation-faults-in-activitypub-documents"></a>Validation Faults in ActivityPub documents</h1>
+<html><head><meta charset="UTF-8" /><title>Validation Faults in ActivityPub documents</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1  current"><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#validation-faults-in-activitypub-documents" name="validation-faults-in-activitypub-documents"></a>Validation Faults in ActivityPub documents</h1>
 <h2><a href="#motivation" name="motivation"></a>Motivation</h2>
 <p>This document is intended to provide an extension vocabulary for <a href="https://www.w3.org/TR/activitystreams-core/">ActivityStreams</a> documents, which provides vocabulary for categorising and describing faults in <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a> documents.</p>
 <p>The motivation is to be able to serialise a validation report on an ActivityPub document as an ActivityStreams document.</p>
diff --git a/docs/codox/dog-and-duck.quack.cli.html b/docs/codox/dog-and-duck.quack.cli.html
new file mode 100644
index 0000000..ea99992
--- /dev/null
+++ b/docs/codox/dog-and-duck.quack.cli.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html PUBLIC ""
+    "">
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.cli documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch current"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var--main"><div class="inner"><span>-main</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-cli-options"><div class="inner"><span>cli-options</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-html-fault-row"><div class="inner"><span>html-fault-row</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-html-header-row"><div class="inner"><span>html-header-row</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-output"><div class="inner"><span>output</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-output-csv"><div class="inner"><span>output-csv</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-output-html"><div class="inner"><span>output-html</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-stylesheet-url"><div class="inner"><span>stylesheet-url</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.cli.html#var-validate"><div class="inner"><span>validate</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.cli</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var--main"><h3>-main</h3><div class="usage"><code>(-main &amp; args)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L121">view source</a></div></div><div class="public anchor" id="var-cli-options"><h3>cli-options</h3><div class="usage"></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L20">view source</a></div></div><div class="public anchor" id="var-html-fault-row"><h3>html-fault-row</h3><div class="usage"><code>(html-fault-row fault cols)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L64">view source</a></div></div><div class="public anchor" id="var-html-header-row"><h3>html-header-row</h3><div class="usage"><code>(html-header-row cols)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L60">view source</a></div></div><div class="public anchor" id="var-output"><h3>output</h3><div class="usage"><code>(output content options)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L112">view source</a></div></div><div class="public anchor" id="var-output-csv"><h3>output-csv</h3><div class="usage"><code>(output-csv faults)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L51">view source</a></div></div><div class="public anchor" id="var-output-html"><h3>output-html</h3><div class="usage"><code>(output-html faults opts)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L81">view source</a></div></div><div class="public anchor" id="var-stylesheet-url"><h3>stylesheet-url</h3><div class="usage"></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L16">view source</a></div></div><div class="public anchor" id="var-validate"><h3>validate</h3><div class="usage"><code>(validate source)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/cli.clj#L41">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.collections.html b/docs/codox/dog-and-duck.quack.picky.collections.html
index 9b3f142..d89cb27 100644
--- a/docs/codox/dog-and-duck.quack.picky.collections.html
+++ b/docs/codox/dog-and-duck.quack.picky.collections.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.collections documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-collection-page-faults"><div class="inner"><span>collection-page-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-paged-collection-faults"><div class="inner"><span>paged-collection-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-simple-collection-faults"><div class="inner"><span>simple-collection-faults</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.collections</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-collection-page-faults"><h3>collection-page-faults</h3><div class="usage"><code>(collection-page-faults x type)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L47">view source</a></div></div><div class="public anchor" id="var-paged-collection-faults"><h3>paged-collection-faults</h3><div class="usage"><code>(paged-collection-faults x type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in <code>x</code> considered as a paged collection object of this sub-<code>type</code>, or <code>nil</code> if none are found.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L24">view source</a></div></div><div class="public anchor" id="var-simple-collection-faults"><h3>simple-collection-faults</h3><div class="usage"><code>(simple-collection-faults x type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in <code>x</code> considered as a non-paged collection object of this sub-<code>type</code>, or <code>nil</code> if none are found.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L35">view source</a></div></div></div></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.collections documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-collection-page-faults"><div class="inner"><span>collection-page-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-paged-collection-faults"><div class="inner"><span>paged-collection-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.collections.html#var-simple-collection-faults"><div class="inner"><span>simple-collection-faults</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.collections</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-collection-page-faults"><h3>collection-page-faults</h3><div class="usage"><code>(collection-page-faults x type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in <code>x</code> considered as a collection page object of this sub-<code>type</code>, or <code>nil</code> if none are found.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L48">view source</a></div></div><div class="public anchor" id="var-paged-collection-faults"><h3>paged-collection-faults</h3><div class="usage"><code>(paged-collection-faults x type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in <code>x</code> considered as a paged collection object of this sub-<code>type</code>, or <code>nil</code> if none are found.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L24">view source</a></div></div><div class="public anchor" id="var-simple-collection-faults"><h3>simple-collection-faults</h3><div class="usage"><code>(simple-collection-faults x type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in <code>x</code> considered as a non-paged collection object of this sub-<code>type</code>, or <code>nil</code> if none are found.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/collections.clj#L35">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.constants.html b/docs/codox/dog-and-duck.quack.picky.constants.html
index 7dd8bad..78543bd 100644
--- a/docs/codox/dog-and-duck.quack.picky.constants.html
+++ b/docs/codox/dog-and-duck.quack.picky.constants.html
@@ -1,12 +1,14 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.constants documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-activitystreams-context-uri"><div class="inner"><span>activitystreams-context-uri</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-actor-types"><div class="inner"><span>actor-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-context-key"><div class="inner"><span>context-key</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-severity"><div class="inner"><span>severity</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-severity-filters"><div class="inner"><span>severity-filters</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-validation-fault-context-uri"><div class="inner"><span>validation-fault-context-uri</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-verb-types"><div class="inner"><span>verb-types</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.constants</h1><div class="doc"><div class="markdown"><p>Constants supporting the picky validator.</p></div></div><div class="public anchor" id="var-activitystreams-context-uri"><h3>activitystreams-context-uri</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The URI of the context of an ActivityStreams object is expected to be this literal string.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L20">view source</a></div></div><div class="public anchor" id="var-actor-types"><h3>actor-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as actors.</p>
-<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#actor-types">explicit set of allowed actor types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L25">view source</a></div></div><div class="public anchor" id="var-context-key"><h3>context-key</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The Clojure reader barfs on <code>:@context</code>, although it is in principle a valid keyword. So we’ll make it once, here, to make the code more performant and easier to read.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L36">view source</a></div></div><div class="public anchor" id="var-severity"><h3>severity</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Severity of faults found, as follows:</p>
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.constants documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-activity-types"><div class="inner"><span>activity-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-activitystreams-context-uri"><div class="inner"><span>activitystreams-context-uri</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-actor-types"><div class="inner"><span>actor-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-context-key"><div class="inner"><span>context-key</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-implicit-noun-types"><div class="inner"><span>implicit-noun-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-noun-types"><div class="inner"><span>noun-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-re-rfc5646"><div class="inner"><span>re-rfc5646</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-severity"><div class="inner"><span>severity</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-severity-filters"><div class="inner"><span>severity-filters</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.constants.html#var-validation-fault-context-uri"><div class="inner"><span>validation-fault-context-uri</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.constants</h1><div class="doc"><div class="markdown"><p>Constants supporting the picky validator.</p></div></div><div class="public anchor" id="var-activity-types"><h3>activity-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as activities.</p>
+<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#activity-types">explicit set of allowed activity types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L79">view source</a></div></div><div class="public anchor" id="var-activitystreams-context-uri"><h3>activitystreams-context-uri</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The URI of the context of an ActivityStreams object is expected to be this literal string.</p>
+<p><strong>NOTE THAT</strong> the URI actually used in the published suite of activitystreams-test-documents use this URI with ‘http’ rather than ‘https’ as the property part, but the spec itself specifies ‘https’.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L20">view source</a></div></div><div class="public anchor" id="var-actor-types"><h3>actor-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as actors.</p>
+<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#actor-types">explicit set of allowed actor types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L29">view source</a></div></div><div class="public anchor" id="var-context-key"><h3>context-key</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The Clojure reader barfs on <code>:@context</code>, although it is in principle a valid keyword. So we’ll make it once, here, to make the code more performant and easier to read.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L40">view source</a></div></div><div class="public anchor" id="var-implicit-noun-types"><h3>implicit-noun-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>These types are not explicitly listed in <a href="https://www.w3.org/TR/activitystreams-vocabulary/#object-types">Section 3.3 of the spec</a>, but are mentioned in narrative</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L111">view source</a></div></div><div class="public anchor" id="var-noun-types"><h3>noun-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of object types we will accept as nouns.</p>
+<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#object-types">explicit set of allowed ‘object types’</a>, but by implication it is not exhaustive.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L89">view source</a></div></div><div class="public anchor" id="var-re-rfc5646"><h3>re-rfc5646</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>A regex which tests conformity to RFC 5646. Cribbed from <a href="https://newbedev.com/regex-to-detect-locales">https://newbedev.com/regex-to-detect-locales</a></p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L46">view source</a></div></div><div class="public anchor" id="var-severity"><h3>severity</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Severity of faults found, as follows:</p>
 <ol>
   <li><code>:info</code> not actually a fault, but an issue noted during validation;</li>
   <li><code>:minor</code> things which I consider to be faults, but which  don’t actually breach the spec;</li>
   <li><code>:should</code> instances where the spec says something SHOULD  be done, which isn’t;</li>
   <li><code>:must</code> instances where the spec says something MUST  be done, which isn’t;</li>
   <li><code>:critical</code> instances where I believe the fault means that  the object cannot be meaningfully processed.</li>
-</ol></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L42">view source</a></div></div><div class="public anchor" id="var-severity-filters"><h3>severity-filters</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Hack for implementing a severity hierarchy</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L56">view source</a></div></div><div class="public anchor" id="var-validation-fault-context-uri"><h3>validation-fault-context-uri</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The URI of the context of a validation fault report object shall be this literal string.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L65">view source</a></div></div><div class="public anchor" id="var-verb-types"><h3>verb-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as verbs.</p>
-<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#activity-types">explicit set of allowed verb types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L70">view source</a></div></div></div></body></html>
\ No newline at end of file
+</ol></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L51">view source</a></div></div><div class="public anchor" id="var-severity-filters"><h3>severity-filters</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Hack for implementing a severity hierarchy</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L65">view source</a></div></div><div class="public anchor" id="var-validation-fault-context-uri"><h3>validation-fault-context-uri</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The URI of the context of a validation fault report object shall be this literal string.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/constants.clj#L74">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.control-variables.html b/docs/codox/dog-and-duck.quack.picky.control-variables.html
index 93114ad..9c3579d 100644
--- a/docs/codox/dog-and-duck.quack.picky.control-variables.html
+++ b/docs/codox/dog-and-duck.quack.picky.control-variables.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.control-variables documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.control-variables.html#var-*reify-refs*"><div class="inner"><span>*reify-refs*</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.control-variables.html#var-*reject-severity*"><div class="inner"><span>*reject-severity*</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.control-variables</h1><div class="doc"><div class="markdown"><p>Control variables for the picky validator.</p></div></div><div class="public anchor" id="var-*reify-refs*"><h3>*reify-refs*</h3><h4 class="dynamic">dynamic</h4><div class="usage"></div><div class="doc"><div class="markdown"><p>If <code>true</code>, references to objects in fields will be reified and validated. If <code>false</code>, they won’t, but an <code>:info</code> level fault report will be generated.</p>
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.control-variables documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.control-variables.html#var-*reify-refs*"><div class="inner"><span>*reify-refs*</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.control-variables.html#var-*reject-severity*"><div class="inner"><span>*reject-severity*</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.control-variables</h1><div class="doc"><div class="markdown"><p>Control variables for the picky validator.</p></div></div><div class="public anchor" id="var-*reify-refs*"><h3>*reify-refs*</h3><h4 class="dynamic">dynamic</h4><div class="usage"></div><div class="doc"><div class="markdown"><p>If <code>true</code>, references to objects in fields will be reified and validated. If <code>false</code>, they won’t, but an <code>:info</code> level fault report will be generated.</p>
 <p>There are several things in the spec which, in a document, may correctly be either</p>
 <ol>
   <li>a fully fleshed out object, or</li>
diff --git a/docs/codox/dog-and-duck.quack.picky.distribution.html b/docs/codox/dog-and-duck.quack.picky.distribution.html
new file mode 100644
index 0000000..6cd5e59
--- /dev/null
+++ b/docs/codox/dog-and-duck.quack.picky.distribution.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html PUBLIC ""
+    "">
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.distribution documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.distribution.html#var-distribution"><div class="inner"><span>distribution</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.distribution</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-distribution"><h3>distribution</h3><div class="usage"><code>(distribution f vals)</code></div><div class="doc"><div class="markdown"><p>Distribution of values of function <code>f</code> when applied to <code>vals</code>.</p>
+<p>I <em>know</em> there’s a library function that does this, probably better, but I don’t remember what it’s called!</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/distribution.clj#L19">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.html b/docs/codox/dog-and-duck.quack.picky.html
index 654beba..f598648 100644
--- a/docs/codox/dog-and-duck.quack.picky.html
+++ b/docs/codox/dog-and-duck.quack.picky.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 current"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-accept-required-properties"><div class="inner"><span>accept-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-faults"><div class="inner"><span>activity-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-required-properties"><div class="inner"><span>activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-type-faults"><div class="inner"><span>activity-type-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-actor-faults"><div class="inner"><span>actor-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-base-activity-required-properties"><div class="inner"><span>base-activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-collection-faults"><div class="inner"><span>collection-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-intransitive-activity-required-properties"><div class="inner"><span>intransitive-activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-link-faults"><div class="inner"><span>link-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-persistent-object-faults"><div class="inner"><span>persistent-object-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-uri-or-fault"><div class="inner"><span>uri-or-fault</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky</h1><div class="doc"><div class="markdown"><p>Fault-finder for ActivityPub documents. </p>
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-accept-required-properties"><div class="inner"><span>accept-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-faults"><div class="inner"><span>activity-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-required-properties"><div class="inner"><span>activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-activity-type-faults"><div class="inner"><span>activity-type-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-actor-faults"><div class="inner"><span>actor-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-base-activity-required-properties"><div class="inner"><span>base-activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-collection-faults"><div class="inner"><span>collection-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-intransitive-activity-required-properties"><div class="inner"><span>intransitive-activity-required-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-link-faults"><div class="inner"><span>link-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-persistent-object-faults"><div class="inner"><span>persistent-object-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.html#var-uri-or-fault"><div class="inner"><span>uri-or-fault</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky</h1><div class="doc"><div class="markdown"><p>Fault-finder for ActivityPub documents. </p>
 <p>Generally, each <code>-faults</code> function will return:</p>
 <ol>
   <li><code>nil</code> if no faults were found;</li>
diff --git a/docs/codox/dog-and-duck.quack.picky.objects.html b/docs/codox/dog-and-duck.quack.picky.objects.html
new file mode 100644
index 0000000..67d7b5b
--- /dev/null
+++ b/docs/codox/dog-and-duck.quack.picky.objects.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC ""
+    "">
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.objects documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-check-property"><div class="inner"><span>check-property</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-check-property-required"><div class="inner"><span>check-property-required</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-check-property-valid"><div class="inner"><span>check-property-valid</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-coll-object-reference-or-fault"><div class="inner"><span>coll-object-reference-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-maybe-reify"><div class="inner"><span>maybe-reify</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-maybe-reify-or-faults"><div class="inner"><span>maybe-reify-or-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-object-expected-properties"><div class="inner"><span>object-expected-properties</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-object-faults"><div class="inner"><span>object-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-object-reference-or-faults"><div class="inner"><span>object-reference-or-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.objects.html#var-properties-faults"><div class="inner"><span>properties-faults</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.objects</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-check-property"><h3>check-property</h3><div class="usage"><code>(check-property obj prop)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L377">view source</a></div></div><div class="public anchor" id="var-check-property-required"><h3>check-property-required</h3><div class="usage"><code>(check-property-required obj prop clause)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L358">view source</a></div></div><div class="public anchor" id="var-check-property-valid"><h3>check-property-valid</h3><div class="usage"><code>(check-property-valid obj prop clause)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L366">view source</a></div></div><div class="public anchor" id="var-coll-object-reference-or-fault"><h3>coll-object-reference-or-fault</h3><div class="usage"><code>(coll-object-reference-or-fault value expected-type severity token)</code></div><div class="doc"><div class="markdown"><p>As object-reference-or-fault, except <code>value</code> argument may also be a list of objects and/or object references.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L505">view source</a></div></div><div class="public anchor" id="var-maybe-reify"><h3>maybe-reify</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>If <code>*reify-refs*</code> is <code>true</code>, return the object at this <code>target</code> URI. Returns <code>nil</code> if</p>
+<ol>
+  <li><code>*reify-refs*</code> is false;</li>
+  <li>the object was not found;</li>
+  <li>access to the object was not permitted.</li>
+</ol>
+<p>Consequently, use with care.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L434">view source</a></div></div><div class="public anchor" id="var-maybe-reify-or-faults"><h3>maybe-reify-or-faults</h3><div class="usage"><code>(maybe-reify-or-faults value expected-type severity token)</code></div><div class="doc"><div class="markdown"><p>If <code>*reify-refs*</code> is <code>true</code>, runs basic checks on the object at this <code>target</code> URI, if it is found, or a list containing a fault object with this <code>severity</code> and <code>token</code> if it is not.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L455">view source</a></div></div><div class="public anchor" id="var-object-expected-properties"><h3>object-expected-properties</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Requirements of properties of object, cribbed from <a href="https://www.w3.org/TR/activitystreams-vocabulary/#properties">https://www.w3.org/TR/activitystreams-vocabulary/#properties</a></p>
+<p>Note the following sub-key value types:</p>
+<ul>
+  <li><code>:collection</code> opposite of <code>:functional</code>: if true, value should be a  collection (in the Clojure sense), not a single object;</li>
+  <li><code>:functional</code> if true, value should be a single object; if false, may  be a single object or a sequence of objects, but each must pass  validation checks;</li>
+  <li><code>:if-invalid</code> a sequence of two keywords, first indicating severity,  second being a message key;</li>
+  <li><code>:if-missing</code> a sequence of two keywords, first indicating severity,  second being a message key;</li>
+  <li><code>:required</code> a boolean, or a function of one argument returning a  boolean, in which case the function will be applied to the object  having the property;</li>
+  <li><code>:validator</code> a function of one argument returning a boolean, which will  be applied to the value or values of the identified property.</li>
+</ul></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L46">view source</a></div></div><div class="public anchor" id="var-object-faults"><h3>object-faults</h3><div class="usage"><code>(object-faults x)</code><code>(object-faults x expected-type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in object <code>x</code>, or <code>nil</code> if none are.</p>
+<p>If <code>expected-type</code> is also passed, verify that <code>x</code> has <code>expected-type</code>. <code>expected-type</code> may be passed as a string or as a set of strings. Detailed verification of the particular features of types is not done here.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L402">view source</a></div></div><div class="public anchor" id="var-object-reference-or-faults"><h3>object-reference-or-faults</h3><div class="usage"><code>(object-reference-or-faults value expected-type severity token)</code></div><div class="doc"><div class="markdown"><p>If this <code>value</code> is either </p>
+<ol>
+  <li>an object of <code>expected-type</code>;</li>
+  <li>a URI referencing an object of <code>expected-type</code>; or</li>
+  <li>a link object referencing an object of <code>expected-type</code></li>
+</ol>
+<p>and no faults are returned from validating the linked object, then return <code>nil</code>; else return a sequence comprising a fault object with this <code>severity</code> and <code>token</code>, prepended to the faults returned.</p>
+<p>As with <code>has-type-or-fault</code> (q.v.), <code>expected-type</code> may be passed as a string, as a set of strings, or <code>nil</code> (indicating the type of the referenced object should not be checked).</p>
+<p><strong>NOTE THAT</strong> if <code>*reify-refs*</code> is <code>false</code>, referenced objects will not actually be checked.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L465">view source</a></div></div><div class="public anchor" id="var-properties-faults"><h3>properties-faults</h3><div class="usage"><code>(properties-faults x)</code></div><div class="doc"><div class="markdown"><p>Return a lost of faults found on properties of the object <code>x</code>, or <code>nil</code> if none are.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/objects.clj#L387">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.scratch.html b/docs/codox/dog-and-duck.quack.picky.scratch.html
new file mode 100644
index 0000000..ac8693c
--- /dev/null
+++ b/docs/codox/dog-and-duck.quack.picky.scratch.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html PUBLIC ""
+    "">
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.scratch documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.scratch</h1><div class="doc"><div class="markdown"><p>Development scratchpad</p></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.time.html b/docs/codox/dog-and-duck.quack.picky.time.html
new file mode 100644
index 0000000..196063d
--- /dev/null
+++ b/docs/codox/dog-and-duck.quack.picky.time.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html PUBLIC ""
+    "">
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.time documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch current"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.time.html#var-date-time-property-or-fault"><div class="inner"><span>date-time-property-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.time.html#var-xsd-date-time.3F"><div class="inner"><span>xsd-date-time?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.time.html#var-xsd-duration.3F"><div class="inner"><span>xsd-duration?</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.time</h1><div class="doc"><div class="markdown"><p>Time, gentleman, please! Recognising and validating date time values.</p></div></div><div class="public anchor" id="var-date-time-property-or-fault"><h3>date-time-property-or-fault</h3><div class="usage"><code>(date-time-property-or-fault x property severity token required?)</code></div><div class="doc"><div class="markdown"><p>If the value of this <code>property</code> of object <code>x</code> is a valid xsd:dateTime value, return a fault object with this <code>token</code> and <code>severity</code>. </p>
+<p>If <code>required?</code> is false and there is no such property, no fault will be returned.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/time.clj#L55">view source</a></div></div><div class="public anchor" id="var-xsd-date-time.3F"><h3>xsd-date-time?</h3><div class="usage"><code>(xsd-date-time? value)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if <code>value</code> matches the pattern for an <a href="https://www.w3.org/TR/xmlschema11-2/#dateTime">xsd:dateTime</a>, else <code>false</code></p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/time.clj#L28">view source</a></div></div><div class="public anchor" id="var-xsd-duration.3F"><h3>xsd-duration?</h3><div class="usage"><code>(xsd-duration? value)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if <code>value</code> matches the pattern for an <a href="https://www.w3.org/TR/xmlschema11-2/#duration">xsd:duration</a>, else <code>false</code></p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/time.clj#L41">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.picky.utils.html b/docs/codox/dog-and-duck.quack.picky.utils.html
index 41b6075..ed78aad 100644
--- a/docs/codox/dog-and-duck.quack.picky.utils.html
+++ b/docs/codox/dog-and-duck.quack.picky.utils.html
@@ -1,17 +1,9 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.utils documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4 current"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-actor-type.3F"><div class="inner"><span>actor-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-any-or-faults"><div class="inner"><span>any-or-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-coll-object-reference-or-fault"><div class="inner"><span>coll-object-reference-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-concat-non-empty"><div class="inner"><span>concat-non-empty</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-cond-make-fault-object"><div class="inner"><span>cond-make-fault-object</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-context.3F"><div class="inner"><span>context?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-filter-severity"><div class="inner"><span>filter-severity</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-activity-type.3F"><div class="inner"><span>has-activity-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-actor-type.3F"><div class="inner"><span>has-actor-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-context.3F"><div class="inner"><span>has-context?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-type-or-fault"><div class="inner"><span>has-type-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-type.3F"><div class="inner"><span>has-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-link-or-uri.3F"><div class="inner"><span>link-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-make-fault-object"><div class="inner"><span>make-fault-object</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-nil-if-empty"><div class="inner"><span>nil-if-empty</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-object-faults"><div class="inner"><span>object-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-object-or-uri.3F"><div class="inner"><span>object-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-object-reference-or-faults"><div class="inner"><span>object-reference-or-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-string-or-fault"><div class="inner"><span>string-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-truthy.3F"><div class="inner"><span>truthy?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-verb-type.3F"><div class="inner"><span>verb-type?</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.utils</h1><div class="doc"><div class="markdown"><p>Utility functions supporting the picky validator</p></div></div><div class="public anchor" id="var-actor-type.3F"><h3>actor-type?</h3><div class="usage"><code>(actor-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the <code>x</code> is a recognised actor type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L34">view source</a></div></div><div class="public anchor" id="var-any-or-faults"><h3>any-or-faults</h3><div class="usage"><code>(any-or-faults options severity-if-none token)</code></div><div class="doc"><div class="markdown"><p>Return <code>nil</code> if validating one of these options returns <code>nil</code>; otherwise return a list comprising a fault report object with this <code>severity-if-none</code> and this token followed by all the fault reports from validating each option.</p>
-<p>There are several places - but especially in validating collections - where there are several different valid configurations, but few or no properties are always required.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L196">view source</a></div></div><div class="public anchor" id="var-coll-object-reference-or-fault"><h3>coll-object-reference-or-fault</h3><div class="usage"><code>(coll-object-reference-or-fault value expected-type severity token)</code></div><div class="doc"><div class="markdown"><p>As object-reference-or-fault, except <code>value</code> argument may also be a list of objects and/or object references.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L302">view source</a></div></div><div class="public anchor" id="var-concat-non-empty"><h3>concat-non-empty</h3><div class="usage"><code>(concat-non-empty &amp; lists)</code></div><div class="doc"><div class="markdown"><p>Quick function to replace the pattern (nil-if-empty (remove nil? (concat …))) which I’m using a lot!</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L166">view source</a></div></div><div class="public anchor" id="var-cond-make-fault-object"><h3>cond-make-fault-object</h3><h4 class="type">macro</h4><div class="usage"><code>(cond-make-fault-object v severity token)</code></div><div class="doc"><div class="markdown"><p>If <code>v</code> is <code>false</code> or <code>nil</code>, return a fault object with this <code>severity</code> and <code>token</code>, else return nil.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L211">view source</a></div></div><div class="public anchor" id="var-context.3F"><h3>context?</h3><div class="usage"><code>(context? x)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> iff <code>x</code> quacks like an ActivityStreams context, else false.</p>
-<p>A context is either 1. the URI (actually an IRI) <code>activitystreams-context-uri</code>, or 2. a collection comprising that URI and a map.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L115">view source</a></div></div><div class="public anchor" id="var-filter-severity"><h3>filter-severity</h3><div class="usage"><code>(filter-severity reports severity)</code></div><div class="doc"><div class="markdown"><p>Return a list of reports taken from these <code>reports</code> where the severity of the report is greater than this or equal to this <code>severity</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L97">view source</a></div></div><div class="public anchor" id="var-has-activity-type.3F"><h3>has-activity-type?</h3><div class="usage"><code>(has-activity-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the object <code>x</code> has a type which is an activity type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L79">view source</a></div></div><div class="public anchor" id="var-has-actor-type.3F"><h3>has-actor-type?</h3><div class="usage"><code>(has-actor-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the object <code>x</code> has a type which is an actor type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L88">view source</a></div></div><div class="public anchor" id="var-has-context.3F"><h3>has-context?</h3><h4 class="type">macro</h4><div class="usage"><code>(has-context? x)</code></div><div class="doc"><div class="markdown"><p>True if <code>x</code> is an ActivityStreams object with a valid context, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L130">view source</a></div></div><div class="public anchor" id="var-has-type-or-fault"><h3>has-type-or-fault</h3><div class="usage"><code>(has-type-or-fault x acceptable severity token)</code></div><div class="doc"><div class="markdown"><p>If object <code>x</code> has a <code>:type</code> value which is <code>acceptable</code>, return <code>nil</code>; else return a fault object with this <code>severity</code> and <code>token</code>.</p>
-<p><code>acceptable</code> may be passed as either nil, a string, or a set of strings. If <code>acceptable</code> is <code>nil</code>, no type specific tests will be performed.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L172">view source</a></div></div><div class="public anchor" id="var-has-type.3F"><h3>has-type?</h3><div class="usage"><code>(has-type? x type)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if object <code>x</code> has type <code>type</code>, else <code>false</code>.</p>
-<p>The values of <code>type</code> fields of ActivityStreams objects may be lists; they are considered to have a type if the type token is a member of the list.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L45">view source</a></div></div><div class="public anchor" id="var-link-or-uri.3F"><h3>link-or-uri?</h3><h4 class="type">macro</h4><div class="usage"><code>(link-or-uri? x)</code></div><div class="doc"><div class="markdown"><p>Very basic check that <code>x</code> is either a link object or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L67">view source</a></div></div><div class="public anchor" id="var-make-fault-object"><h3>make-fault-object</h3><div class="usage"><code>(make-fault-object severity fault)</code></div><div class="doc"><div class="markdown"><p>Return a fault object with these <code>severity</code>, <code>fault</code> and <code>narrative</code> values.</p>
-<p>An ActivityPub object MUST have a globally unique ID. Whether this is meaningful depends on whether we persist fault report objects and serve them, which at present I have no plans to do.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L135">view source</a></div></div><div class="public anchor" id="var-nil-if-empty"><h3>nil-if-empty</h3><h4 class="type">macro</h4><div class="usage"><code>(nil-if-empty x)</code></div><div class="doc"><div class="markdown"><p>if <code>x</code> is an empty collection, return <code>nil</code>; else return <code>x</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L160">view source</a></div></div><div class="public anchor" id="var-object-faults"><h3>object-faults</h3><div class="usage"><code>(object-faults x)</code><code>(object-faults x expected-type)</code></div><div class="doc"><div class="markdown"><p>Return a list of faults found in object <code>x</code>, or <code>nil</code> if none are.</p>
-<p>If <code>expected-type</code> is also passed, verify that <code>x</code> has <code>expected-type</code>. <code>expected-type</code> may be passed as a string or as a set of strings. Detailed verification of the particular features of types is not done here.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L229">view source</a></div></div><div class="public anchor" id="var-object-or-uri.3F"><h3>object-or-uri?</h3><div class="usage"><code>(object-or-uri? x)</code></div><div class="doc"><div class="markdown"><p>Very basic check that <code>x</code> is either an object or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L57">view source</a></div></div><div class="public anchor" id="var-object-reference-or-faults"><h3>object-reference-or-faults</h3><div class="usage"><code>(object-reference-or-faults value expected-type severity token)</code></div><div class="doc"><div class="markdown"><p>If this <code>value</code> is either </p>
-<ol>
-  <li>an object of <code>expected-type</code>;</li>
-  <li>a URI referencing an object of <code>expected-type</code>; or</li>
-  <li>a link object referencing an object of <code>expected-type</code></li>
-</ol>
-<p>and no faults are returned from validating the linked object, then return <code>nil</code>; else return a sequence comprising a fault object with this <code>severity</code> and <code>token</code>, prepended to the faults returned.</p>
-<p>As with <code>has-type-or-fault</code> (q.v.), <code>expected-type</code> may be passed as a string, as a set of strings, or <code>nil</code> (indicating the type of the referenced object should not be checked).</p>
-<p><strong>NOTE THAT</strong> if <code>*reify-refs*</code> is <code>false</code>, referenced objects will not actually be checked.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L256">view source</a></div></div><div class="public anchor" id="var-string-or-fault"><h3>string-or-fault</h3><div class="usage"><code>(string-or-fault value severity token)</code><code>(string-or-fault value severity token pattern)</code></div><div class="doc"><div class="markdown"><p>If this <code>value</code> is not a string, return a fault object with this <code>severity</code> and <code>token</code>, else <code>nil</code>. If <code>pattern</code> is also passed, it is expected to be a Regex, and the fault object will be returned unless <code>value</code> matches the <code>pattern</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L217">view source</a></div></div><div class="public anchor" id="var-truthy.3F"><h3>truthy?</h3><div class="usage"><code>(truthy? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if <code>x</code> is truthy, else <code>false</code>. There must be some more idiomatic way to do this?</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L39">view source</a></div></div><div class="public anchor" id="var-verb-type.3F"><h3>verb-type?</h3><div class="usage"><code>(verb-type? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> if <code>x</code>, a string, represents a recognised ActivityStreams activity type.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L73">view source</a></div></div></div></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.picky.utils documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4 current"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-activity-type.3F"><div class="inner"><span>activity-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-actor-type.3F"><div class="inner"><span>actor-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-any-or-faults"><div class="inner"><span>any-or-faults</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-concat-non-empty"><div class="inner"><span>concat-non-empty</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-cond-make-fault-object"><div class="inner"><span>cond-make-fault-object</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-context.3F"><div class="inner"><span>context?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-filter-severity"><div class="inner"><span>filter-severity</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-activity-type.3F"><div class="inner"><span>has-activity-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-actor-type.3F"><div class="inner"><span>has-actor-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-context.3F"><div class="inner"><span>has-context?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-type-or-fault"><div class="inner"><span>has-type-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-has-type.3F"><div class="inner"><span>has-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-link-or-uri.3F"><div class="inner"><span>link-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-make-fault-object"><div class="inner"><span>make-fault-object</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-nil-if-empty"><div class="inner"><span>nil-if-empty</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-object-or-uri.3F"><div class="inner"><span>object-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-string-or-fault"><div class="inner"><span>string-or-fault</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-truthy.3F"><div class="inner"><span>truthy?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.picky.utils.html#var-xsd-non-negative-integer.3F"><div class="inner"><span>xsd-non-negative-integer?</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.picky.utils</h1><div class="doc"><div class="markdown"><p>Utility functions supporting the picky validator</p></div></div><div class="public anchor" id="var-activity-type.3F"><h3>activity-type?</h3><div class="usage"><code>(activity-type? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> if <code>x</code>, a string, represents a recognised ActivityStreams activity type.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L90">view source</a></div></div><div class="public anchor" id="var-actor-type.3F"><h3>actor-type?</h3><div class="usage"><code>(actor-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the <code>x</code> is a recognised actor type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L32">view source</a></div></div><div class="public anchor" id="var-any-or-faults"><h3>any-or-faults</h3><div class="usage"><code>(any-or-faults options severity-if-none token)</code></div><div class="doc"><div class="markdown"><p>Return <code>nil</code> if validating one of these options returns <code>nil</code>; otherwise return a list comprising a fault report object with this <code>severity-if-none</code> and this token followed by all the fault reports from validating each option.</p>
+<p>There are several places - but especially in validating collections - where there are several different valid configurations, but few or no properties are always required.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L223">view source</a></div></div><div class="public anchor" id="var-concat-non-empty"><h3>concat-non-empty</h3><div class="usage"><code>(concat-non-empty &amp; lists)</code></div><div class="doc"><div class="markdown"><p>Quick function to replace the pattern (nil-if-empty (remove nil? (concat …))) which I’m using a lot!</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L190">view source</a></div></div><div class="public anchor" id="var-cond-make-fault-object"><h3>cond-make-fault-object</h3><div class="usage"><code>(cond-make-fault-object v severity token)</code></div><div class="doc"><div class="markdown"><p>If <code>v</code> is <code>false</code> or <code>nil</code>, return a fault object with this <code>severity</code> and <code>token</code>, else return nil.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L238">view source</a></div></div><div class="public anchor" id="var-context.3F"><h3>context?</h3><div class="usage"><code>(context? x)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> iff <code>x</code> quacks like an ActivityStreams context, else false.</p>
+<p>A context is either 1. the URI (actually an IRI) <code>activitystreams-context-uri</code>, or 2. a collection comprising that URI and a map.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L139">view source</a></div></div><div class="public anchor" id="var-filter-severity"><h3>filter-severity</h3><div class="usage"><code>(filter-severity reports severity)</code></div><div class="doc"><div class="markdown"><p>Return a list of reports taken from these <code>reports</code> where the severity of the report is greater than this or equal to this <code>severity</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L114">view source</a></div></div><div class="public anchor" id="var-has-activity-type.3F"><h3>has-activity-type?</h3><div class="usage"><code>(has-activity-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the object <code>x</code> has a type which is an activity type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L96">view source</a></div></div><div class="public anchor" id="var-has-actor-type.3F"><h3>has-actor-type?</h3><div class="usage"><code>(has-actor-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if the object <code>x</code> has a type which is an actor type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L105">view source</a></div></div><div class="public anchor" id="var-has-context.3F"><h3>has-context?</h3><h4 class="type">macro</h4><div class="usage"><code>(has-context? x)</code></div><div class="doc"><div class="markdown"><p>True if <code>x</code> is an ActivityStreams object with a valid context, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L154">view source</a></div></div><div class="public anchor" id="var-has-type-or-fault"><h3>has-type-or-fault</h3><div class="usage"><code>(has-type-or-fault x acceptable severity token)</code></div><div class="doc"><div class="markdown"><p>If object <code>x</code> has a <code>:type</code> value which is <code>acceptable</code>, return <code>nil</code>; else return a fault object with this <code>severity</code> and <code>token</code>.</p>
+<p><code>acceptable</code> may be passed as either nil, a string, or a set of strings. If <code>acceptable</code> is <code>nil</code>, no type specific tests will be performed.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L196">view source</a></div></div><div class="public anchor" id="var-has-type.3F"><h3>has-type?</h3><div class="usage"><code>(has-type? x acceptable)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if object <code>x</code> has a type in <code>acceptable</code>, else <code>false</code>.</p>
+<p>The values of <code>:type</code> fields of ActivityStreams objects may be lists; they are considered to have a type if a member of the list is in <code>acceptable</code>.</p>
+<p><code>acceptable</code> may be passed as a string, in which case there is only one acceptable value, or as a set of strings, in which case any member of the set is acceptable.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L49">view source</a></div></div><div class="public anchor" id="var-link-or-uri.3F"><h3>link-or-uri?</h3><h4 class="type">macro</h4><div class="usage"><code>(link-or-uri? x)</code></div><div class="doc"><div class="markdown"><p>Very basic check that <code>x</code> is either a link object or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L84">view source</a></div></div><div class="public anchor" id="var-make-fault-object"><h3>make-fault-object</h3><div class="usage"><code>(make-fault-object severity fault)</code></div><div class="doc"><div class="markdown"><p>Return a fault object with these <code>severity</code>, <code>fault</code> and <code>narrative</code> values.</p>
+<p>An ActivityPub object MUST have a globally unique ID. Whether this is meaningful depends on whether we persist fault report objects and serve them, which at present I have no plans to do.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L159">view source</a></div></div><div class="public anchor" id="var-nil-if-empty"><h3>nil-if-empty</h3><h4 class="type">macro</h4><div class="usage"><code>(nil-if-empty x)</code></div><div class="doc"><div class="markdown"><p>if <code>x</code> is an empty collection, return <code>nil</code>; else return <code>x</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L184">view source</a></div></div><div class="public anchor" id="var-object-or-uri.3F"><h3>object-or-uri?</h3><div class="usage"><code>(object-or-uri? x)</code><code>(object-or-uri? x type)</code></div><div class="doc"><div class="markdown"><p>Very basic check that <code>x</code> is either an object or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L68">view source</a></div></div><div class="public anchor" id="var-string-or-fault"><h3>string-or-fault</h3><div class="usage"><code>(string-or-fault value severity token)</code><code>(string-or-fault value severity token pattern)</code></div><div class="doc"><div class="markdown"><p>If this <code>value</code> is not a string, return a fault object with this <code>severity</code> and <code>token</code>, else <code>nil</code>. If <code>pattern</code> is also passed, it is expected to be a Regex, and the fault object will be returned unless <code>value</code> matches the <code>pattern</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L244">view source</a></div></div><div class="public anchor" id="var-truthy.3F"><h3>truthy?</h3><div class="usage"><code>(truthy? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if <code>x</code> is truthy, else <code>false</code>. There must be some more idiomatic way to do this?</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L37">view source</a></div></div><div class="public anchor" id="var-xsd-non-negative-integer.3F"><h3>xsd-non-negative-integer?</h3><div class="usage"><code>(xsd-non-negative-integer? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> if <code>value</code> matches the pattern for an <a href="https://www.w3.org/TR/xmlschema11-2/#nonNegativeInteger">xsd:nonNegativeInteger</a>, else <code>false</code></p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/picky/utils.clj#L43">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.quack.quack.html b/docs/codox/dog-and-duck.quack.quack.html
index cfba417..3d3a69d 100644
--- a/docs/codox/dog-and-duck.quack.quack.html
+++ b/docs/codox/dog-and-duck.quack.quack.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.quack documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-activity.3F"><div class="inner"><span>activity?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor-or-uri.3F"><div class="inner"><span>actor-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor.3F"><div class="inner"><span>actor?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection-page.3F"><div class="inner"><span>collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection.3F"><div class="inner"><span>collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link-or-uri.3F"><div class="inner"><span>link-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link.3F"><div class="inner"><span>link?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-object.3F"><div class="inner"><span>object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection-page.3F"><div class="inner"><span>ordered-collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection.3F"><div class="inner"><span>ordered-collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-persistent-object.3F"><div class="inner"><span>persistent-object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-unordered-collection.3F"><div class="inner"><span>unordered-collection?</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.quack</h1><div class="doc"><div class="markdown"><p>Validator for ActivityPub objects: if it walks like a duck, and it quacks like a duck…</p>
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.quack documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-activity.3F"><div class="inner"><span>activity?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor-or-uri.3F"><div class="inner"><span>actor-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor.3F"><div class="inner"><span>actor?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection-page.3F"><div class="inner"><span>collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection.3F"><div class="inner"><span>collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link-or-uri.3F"><div class="inner"><span>link-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link.3F"><div class="inner"><span>link?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-object.3F"><div class="inner"><span>object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection-page.3F"><div class="inner"><span>ordered-collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection.3F"><div class="inner"><span>ordered-collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-persistent-object.3F"><div class="inner"><span>persistent-object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-unordered-collection.3F"><div class="inner"><span>unordered-collection?</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.quack</h1><div class="doc"><div class="markdown"><p>Validator for ActivityPub objects: if it walks like a duck, and it quacks like a duck…</p>
 <p>**NOTE THAT the ActivityPub spec <a href="https://www.w3.org/TR/activitypub/#obj">says</a></p>
 <blockquote>
   <p>Servers SHOULD validate the content they receive to avoid content spoofing attacks</p>
 </blockquote>
-<p>but in practice ActivityPub content collected in the wild bears only a hazy relationship to the spec, so this is difficult. I suspect that I may have to implement a <code>*strict*</code> dynamic variable, so that users can toggle some checks off.</p></div></div><div class="public anchor" id="var-activity.3F"><h3>activity?</h3><div class="usage"><code>(activity? x)</code><code>(activity? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an activity, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L96">view source</a></div></div><div class="public anchor" id="var-actor-or-uri.3F"><h3>actor-or-uri?</h3><div class="usage"><code>(actor-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> if <code>x</code> is either a URI or an actor.</p>
-<p><strong>TODO</strong>: I need to decide about whether to reify referenced objects before validation or after. After reification, every reference to an actor <em>must be</em> to an actor object, but before, may only be to a URI pointing to one.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L80">view source</a></div></div><div class="public anchor" id="var-actor.3F"><h3>actor?</h3><div class="usage"><code>(actor? x)</code><code>(actor? x severity)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> if <code>x</code> quacks like an actor, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L74">view source</a></div></div><div class="public anchor" id="var-collection-page.3F"><h3>collection-page?</h3><div class="usage"><code>(collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in a paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L161">view source</a></div></div><div class="public anchor" id="var-collection.3F"><h3>collection?</h3><div class="usage"><code>(collection? x object-type)</code><code>(collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a collection of type <code>object-type</code>, else <code>false</code>.</p>
-<p>With one argument, will recognise plain collections and ordered collections, but (currently) not collection pages.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L119">view source</a></div></div><div class="public anchor" id="var-link-or-uri.3F"><h3>link-or-uri?</h3><div class="usage"><code>(link-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is either a URI or a link, else false.</p>
-<p>There are several points in the specification where e.g. the <code>:image</code> property (if present) may be either a link or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L108">view source</a></div></div><div class="public anchor" id="var-link.3F"><h3>link?</h3><div class="usage"><code>(link? x)</code><code>(link? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a link, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L102">view source</a></div></div><div class="public anchor" id="var-object.3F"><h3>object?</h3><div class="usage"><code>(object? x)</code><code>(object? x severity)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> iff <code>x</code> is recognisably an ActivityStreams object.</p>
+<p>but in practice ActivityPub content collected in the wild bears only a hazy relationship to the spec, so this is difficult. I suspect that I may have to implement a <code>*strict*</code> dynamic variable, so that users can toggle some checks off.</p></div></div><div class="public anchor" id="var-activity.3F"><h3>activity?</h3><div class="usage"><code>(activity? x)</code><code>(activity? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an activity, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L97">view source</a></div></div><div class="public anchor" id="var-actor-or-uri.3F"><h3>actor-or-uri?</h3><div class="usage"><code>(actor-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> if <code>x</code> is either a URI or an actor.</p>
+<p><strong>TODO</strong>: I need to decide about whether to reify referenced objects before validation or after. After reification, every reference to an actor <em>must be</em> to an actor object, but before, may only be to a URI pointing to one.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L81">view source</a></div></div><div class="public anchor" id="var-actor.3F"><h3>actor?</h3><div class="usage"><code>(actor? x)</code><code>(actor? x severity)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> if <code>x</code> quacks like an actor, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L75">view source</a></div></div><div class="public anchor" id="var-collection-page.3F"><h3>collection-page?</h3><div class="usage"><code>(collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in a paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L162">view source</a></div></div><div class="public anchor" id="var-collection.3F"><h3>collection?</h3><div class="usage"><code>(collection? x object-type)</code><code>(collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a collection of type <code>object-type</code>, else <code>false</code>.</p>
+<p>With one argument, will recognise plain collections and ordered collections, but (currently) not collection pages.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L120">view source</a></div></div><div class="public anchor" id="var-link-or-uri.3F"><h3>link-or-uri?</h3><div class="usage"><code>(link-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is either a URI or a link, else false.</p>
+<p>There are several points in the specification where e.g. the <code>:image</code> property (if present) may be either a link or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L109">view source</a></div></div><div class="public anchor" id="var-link.3F"><h3>link?</h3><div class="usage"><code>(link? x)</code><code>(link? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a link, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L103">view source</a></div></div><div class="public anchor" id="var-object.3F"><h3>object?</h3><div class="usage"><code>(object? x)</code><code>(object? x severity)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> iff <code>x</code> is recognisably an ActivityStreams object.</p>
 <p><strong>NOTE THAT</strong> The ActivityStreams spec <a href="https://www.w3.org/TR/activitystreams-core/#object">says</a>:</p>
 <blockquote>
   <p>All properties are optional (including the id and type)</p>
@@ -18,5 +18,5 @@
 <blockquote>
   <p>Implementers SHOULD include the ActivityPub context in their object definitions</p>
 </blockquote>
-<p>but in samples found in the wild they typically don’t.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L40">view source</a></div></div><div class="public anchor" id="var-ordered-collection-page.3F"><h3>ordered-collection-page?</h3><div class="usage"><code>(ordered-collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in an ordered paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L166">view source</a></div></div><div class="public anchor" id="var-ordered-collection.3F"><h3>ordered-collection?</h3><div class="usage"><code>(ordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an ordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L156">view source</a></div></div><div class="public anchor" id="var-persistent-object.3F"><h3>persistent-object?</h3><div class="usage"><code>(persistent-object? x)</code><code>(persistent-object? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is a persistent object.</p>
-<p>Transient objects in ActivityPub are not required to have an <code>id</code> key, but persistent ones must have a key, and it must be an IRI (but normally a URI).</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L64">view source</a></div></div><div class="public anchor" id="var-unordered-collection.3F"><h3>unordered-collection?</h3><div class="usage"><code>(unordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an unordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L151">view source</a></div></div></div></body></html>
\ No newline at end of file
+<p>but in samples found in the wild they typically don’t.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L41">view source</a></div></div><div class="public anchor" id="var-ordered-collection-page.3F"><h3>ordered-collection-page?</h3><div class="usage"><code>(ordered-collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in an ordered paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L167">view source</a></div></div><div class="public anchor" id="var-ordered-collection.3F"><h3>ordered-collection?</h3><div class="usage"><code>(ordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an ordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L157">view source</a></div></div><div class="public anchor" id="var-persistent-object.3F"><h3>persistent-object?</h3><div class="usage"><code>(persistent-object? x)</code><code>(persistent-object? x severity)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is a persistent object.</p>
+<p>Transient objects in ActivityPub are not required to have an <code>id</code> key, but persistent ones must have a key, and it must be an IRI (but normally a URI).</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L65">view source</a></div></div><div class="public anchor" id="var-unordered-collection.3F"><h3>unordered-collection?</h3><div class="usage"><code>(unordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an unordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L152">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.scratch.parser.html b/docs/codox/dog-and-duck.scratch.parser.html
index 1d60fba..da2de6c 100644
--- a/docs/codox/dog-and-duck.scratch.parser.html
+++ b/docs/codox/dog-and-duck.scratch.parser.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.scratch.parser documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch current"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.scratch.parser.html#var-clean"><div class="inner"><span>clean</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.scratch.parser</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-clean"><h3>clean</h3><div class="usage"><code>(clean json)</code></div><div class="doc"><div class="markdown"><p>Take this <code>json</code> input, and return a sequence of ActivityPub objects represented by it.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/scratch/parser.clj#L24">view source</a></div></div></div></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.scratch.parser documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch current"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.scratch.parser.html#var-clean"><div class="inner"><span>clean</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.scratch.parser</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-clean"><h3>clean</h3><div class="usage"><code>(clean json)</code></div><div class="doc"><div class="markdown"><p>Take this <code>json</code> input, and return a sequence of ActivityPub objects represented by it.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/scratch/parser.clj#L24">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.scratch.scratch.html b/docs/codox/dog-and-duck.scratch.scratch.html
index 45ff4af..b993d57 100644
--- a/docs/codox/dog-and-duck.scratch.scratch.html
+++ b/docs/codox/dog-and-duck.scratch.scratch.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.scratch.scratch documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.scratch.scratch.html#var-account"><div class="inner"><span>account</span></div></a></li><li class="depth-1"><a href="dog-and-duck.scratch.scratch.html#var-account-handle"><div class="inner"><span>account-handle</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.scratch.scratch</h1><div class="doc"><div class="markdown"><p>Scratchpad where I try to understand how to do this stuff.</p></div></div><div class="public anchor" id="var-account"><h3>account</h3><div class="usage"></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/scratch/scratch.clj#L37">view source</a></div></div><div class="public anchor" id="var-account-handle"><h3>account-handle</h3><div class="usage"></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/scratch/scratch.clj#L28">view source</a></div></div></div></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.scratch.scratch documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.scratch.scratch.html#var-account-handle"><div class="inner"><span>account-handle</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.scratch.scratch</h1><div class="doc"><div class="markdown"><p>Scratchpad where I try to understand how to do this stuff.</p></div></div><div class="public anchor" id="var-account-handle"><h3>account-handle</h3><div class="usage"></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/scratch/scratch.clj#L28">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/dog-and-duck.utils.process.html b/docs/codox/dog-and-duck.utils.process.html
index 4e8ae03..9a4c9f7 100644
--- a/docs/codox/dog-and-duck.utils.process.html
+++ b/docs/codox/dog-and-duck.utils.process.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>dog-and-duck.utils.process documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3 current"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.utils.process.html#var-get-hostname"><div class="inner"><span>get-hostname</span></div></a></li><li class="depth-1"><a href="dog-and-duck.utils.process.html#var-get-pid"><div class="inner"><span>get-pid</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.utils.process</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-get-hostname"><h3>get-hostname</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>return the hostname of the current host.</p>
+<html><head><meta charset="UTF-8" /><title>dog-and-duck.utils.process documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3 current"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.utils.process.html#var-get-hostname"><div class="inner"><span>get-hostname</span></div></a></li><li class="depth-1"><a href="dog-and-duck.utils.process.html#var-get-pid"><div class="inner"><span>get-pid</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.utils.process</h1><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="public anchor" id="var-get-hostname"><h3>get-hostname</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>return the hostname of the current host.</p>
 <p>Java’s methods for getting the hostname are quite startlingly slow, we do not want todo this repeatedly!</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/utils/process.clj#L45">view source</a></div></div><div class="public anchor" id="var-get-pid"><h3>get-pid</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>Get the process id of the current process.</p>
 <p>OK, this is hacky as fuck, but I hope it works. The problem is that the way to get the process id has changed several times during the history of Java development, and the code for one version of Java won’t even compile in a different version.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/utils/process.clj#L20">view source</a></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/index.html b/docs/codox/index.html
index 5c9c887..df3f44e 100644
--- a/docs/codox/index.html
+++ b/docs/codox/index.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>Dog-and-duck 0.1.0-SNAPSHOT</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 current"><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="namespace-index" id="content"><h1><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></h1><h5 class="license">Released under the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL-2.0-or-later</a></h5><div class="doc"><p>A playground for hacking ActivityPub stuff.</p></div><h2>Installation</h2><p>To install, add the following dependency to your project or build file:</p><pre class="deps">[dog-and-duck "0.1.0-SNAPSHOT"]</pre><h2>Topics</h2><ul class="topics"><li><a href="Desiderata.html">Desiderata</a></li><li><a href="Using_ActivityPub.html">Using ActivityPub</a></li><li><a href="Validation_Faults.html">Validation Faults in ActivityPub documents</a></li><li><a href="intro.html">Introduction</a></li></ul><h2>Namespaces</h2><div class="namespace"><h3><a href="dog-and-duck.quack.picky.html">dog-and-duck.quack.picky</a></h3><div class="doc"><div class="markdown"><p>Fault-finder for ActivityPub documents. </p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.html#var-accept-required-properties">accept-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-faults">activity-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-required-properties">activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-type-faults">activity-type-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-actor-faults">actor-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-base-activity-required-properties">base-activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-collection-faults">collection-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-intransitive-activity-required-properties">intransitive-activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-link-faults">link-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-persistent-object-faults">persistent-object-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-uri-or-fault">uri-or-fault</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.collections.html">dog-and-duck.quack.picky.collections</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.collections.html#var-collection-page-faults">collection-page-faults</a> </li><li> <a href="dog-and-duck.quack.picky.collections.html#var-paged-collection-faults">paged-collection-faults</a> </li><li> <a href="dog-and-duck.quack.picky.collections.html#var-simple-collection-faults">simple-collection-faults</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.constants.html">dog-and-duck.quack.picky.constants</a></h3><div class="doc"><div class="markdown"><p>Constants supporting the picky validator.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.constants.html#var-activitystreams-context-uri">activitystreams-context-uri</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-actor-types">actor-types</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-context-key">context-key</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-severity">severity</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-severity-filters">severity-filters</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-validation-fault-context-uri">validation-fault-context-uri</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-verb-types">verb-types</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.control-variables.html">dog-and-duck.quack.picky.control-variables</a></h3><div class="doc"><div class="markdown"><p>Control variables for the picky validator.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.control-variables.html#var-*reify-refs*">*reify-refs*</a> </li><li> <a href="dog-and-duck.quack.picky.control-variables.html#var-*reject-severity*">*reject-severity*</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.fault-messages.html">dog-and-duck.quack.picky.fault-messages</a></h3><div class="doc"><div class="markdown"><p>Narrative values for fault reports of specific types, used by the picky validator.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.fault-messages.html#var-messages">messages</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.required-properties.html">dog-and-duck.quack.picky.required-properties</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.utils.html">dog-and-duck.quack.picky.utils</a></h3><div class="doc"><div class="markdown"><p>Utility functions supporting the picky validator</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.utils.html#var-actor-type.3F">actor-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-any-or-faults">any-or-faults</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-coll-object-reference-or-fault">coll-object-reference-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-concat-non-empty">concat-non-empty</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-cond-make-fault-object">cond-make-fault-object</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-context.3F">context?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-filter-severity">filter-severity</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-activity-type.3F">has-activity-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-actor-type.3F">has-actor-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-context.3F">has-context?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-type-or-fault">has-type-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-type.3F">has-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-link-or-uri.3F">link-or-uri?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-make-fault-object">make-fault-object</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-nil-if-empty">nil-if-empty</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-object-faults">object-faults</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-object-or-uri.3F">object-or-uri?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-object-reference-or-faults">object-reference-or-faults</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-string-or-fault">string-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-truthy.3F">truthy?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-verb-type.3F">verb-type?</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.quack.html">dog-and-duck.quack.quack</a></h3><div class="doc"><div class="markdown"><p>Validator for ActivityPub objects: if it walks like a duck, and it quacks like a duck…</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.quack.html#var-activity.3F">activity?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-actor-or-uri.3F">actor-or-uri?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-actor.3F">actor?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-collection-page.3F">collection-page?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-collection.3F">collection?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-link-or-uri.3F">link-or-uri?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-link.3F">link?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-object.3F">object?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-ordered-collection-page.3F">ordered-collection-page?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-ordered-collection.3F">ordered-collection?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-persistent-object.3F">persistent-object?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-unordered-collection.3F">unordered-collection?</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.scratch.core.html">dog-and-duck.scratch.core</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.scratch.core.html#var-foo">foo</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.scratch.parser.html">dog-and-duck.scratch.parser</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.scratch.parser.html#var-clean">clean</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.scratch.scratch.html">dog-and-duck.scratch.scratch</a></h3><div class="doc"><div class="markdown"><p>Scratchpad where I try to understand how to do this stuff.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.scratch.scratch.html#var-account">account</a> </li><li> <a href="dog-and-duck.scratch.scratch.html#var-account-handle">account-handle</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.utils.process.html">dog-and-duck.utils.process</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.utils.process.html#var-get-hostname">get-hostname</a> </li><li> <a href="dog-and-duck.utils.process.html#var-get-pid">get-pid</a> </li></ul></div></div></div></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8" /><title>Dog-and-duck 0.1.0</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 current"><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="namespace-index" id="content"><h1><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></h1><h5 class="license">Released under the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html">GPL-2.0-or-later</a></h5><div class="doc"><p>A playground for hacking ActivityPub stuff.</p></div><h2>Installation</h2><p>To install, add the following dependency to your project or build file:</p><pre class="deps">[dog-and-duck "0.1.0"]</pre><h2>Topics</h2><ul class="topics"><li><a href="Desiderata.html">Desiderata</a></li><li><a href="Using_ActivityPub.html">Using ActivityPub</a></li><li><a href="Validation_Faults.html">Validation Faults in ActivityPub documents</a></li><li><a href="intro.html">The Old Dog and Duck</a></li></ul><h2>Namespaces</h2><div class="namespace"><h3><a href="dog-and-duck.quack.cli.html">dog-and-duck.quack.cli</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.cli.html#var--main">-main</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-cli-options">cli-options</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-html-fault-row">html-fault-row</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-html-header-row">html-header-row</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-output">output</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-output-csv">output-csv</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-output-html">output-html</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-stylesheet-url">stylesheet-url</a> </li><li> <a href="dog-and-duck.quack.cli.html#var-validate">validate</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.html">dog-and-duck.quack.picky</a></h3><div class="doc"><div class="markdown"><p>Fault-finder for ActivityPub documents. </p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.html#var-accept-required-properties">accept-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-faults">activity-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-required-properties">activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-activity-type-faults">activity-type-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-actor-faults">actor-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-base-activity-required-properties">base-activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-collection-faults">collection-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-intransitive-activity-required-properties">intransitive-activity-required-properties</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-link-faults">link-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-persistent-object-faults">persistent-object-faults</a> </li><li> <a href="dog-and-duck.quack.picky.html#var-uri-or-fault">uri-or-fault</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.collections.html">dog-and-duck.quack.picky.collections</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.collections.html#var-collection-page-faults">collection-page-faults</a> </li><li> <a href="dog-and-duck.quack.picky.collections.html#var-paged-collection-faults">paged-collection-faults</a> </li><li> <a href="dog-and-duck.quack.picky.collections.html#var-simple-collection-faults">simple-collection-faults</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.constants.html">dog-and-duck.quack.picky.constants</a></h3><div class="doc"><div class="markdown"><p>Constants supporting the picky validator.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.constants.html#var-activity-types">activity-types</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-activitystreams-context-uri">activitystreams-context-uri</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-actor-types">actor-types</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-context-key">context-key</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-implicit-noun-types">implicit-noun-types</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-noun-types">noun-types</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-re-rfc5646">re-rfc5646</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-severity">severity</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-severity-filters">severity-filters</a> </li><li> <a href="dog-and-duck.quack.picky.constants.html#var-validation-fault-context-uri">validation-fault-context-uri</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.control-variables.html">dog-and-duck.quack.picky.control-variables</a></h3><div class="doc"><div class="markdown"><p>Control variables for the picky validator.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.control-variables.html#var-*reify-refs*">*reify-refs*</a> </li><li> <a href="dog-and-duck.quack.picky.control-variables.html#var-*reject-severity*">*reject-severity*</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.distribution.html">dog-and-duck.quack.picky.distribution</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.distribution.html#var-distribution">distribution</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.objects.html">dog-and-duck.quack.picky.objects</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.objects.html#var-check-property">check-property</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-check-property-required">check-property-required</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-check-property-valid">check-property-valid</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-coll-object-reference-or-fault">coll-object-reference-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-maybe-reify">maybe-reify</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-maybe-reify-or-faults">maybe-reify-or-faults</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-object-expected-properties">object-expected-properties</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-object-faults">object-faults</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-object-reference-or-faults">object-reference-or-faults</a> </li><li> <a href="dog-and-duck.quack.picky.objects.html#var-properties-faults">properties-faults</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.scratch.html">dog-and-duck.quack.picky.scratch</a></h3><div class="doc"><div class="markdown"><p>Development scratchpad</p></div></div><div class="index"><p>Public variables and functions:</p><ul></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.time.html">dog-and-duck.quack.picky.time</a></h3><div class="doc"><div class="markdown"><p>Time, gentleman, please! Recognising and validating date time values.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.time.html#var-date-time-property-or-fault">date-time-property-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.time.html#var-xsd-date-time.3F">xsd-date-time?</a> </li><li> <a href="dog-and-duck.quack.picky.time.html#var-xsd-duration.3F">xsd-duration?</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.picky.utils.html">dog-and-duck.quack.picky.utils</a></h3><div class="doc"><div class="markdown"><p>Utility functions supporting the picky validator</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.picky.utils.html#var-activity-type.3F">activity-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-actor-type.3F">actor-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-any-or-faults">any-or-faults</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-concat-non-empty">concat-non-empty</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-cond-make-fault-object">cond-make-fault-object</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-context.3F">context?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-filter-severity">filter-severity</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-activity-type.3F">has-activity-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-actor-type.3F">has-actor-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-context.3F">has-context?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-type-or-fault">has-type-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-has-type.3F">has-type?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-link-or-uri.3F">link-or-uri?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-make-fault-object">make-fault-object</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-nil-if-empty">nil-if-empty</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-object-or-uri.3F">object-or-uri?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-string-or-fault">string-or-fault</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-truthy.3F">truthy?</a> </li><li> <a href="dog-and-duck.quack.picky.utils.html#var-xsd-non-negative-integer.3F">xsd-non-negative-integer?</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.quack.quack.html">dog-and-duck.quack.quack</a></h3><div class="doc"><div class="markdown"><p>Validator for ActivityPub objects: if it walks like a duck, and it quacks like a duck…</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.quack.quack.html#var-activity.3F">activity?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-actor-or-uri.3F">actor-or-uri?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-actor.3F">actor?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-collection-page.3F">collection-page?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-collection.3F">collection?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-link-or-uri.3F">link-or-uri?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-link.3F">link?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-object.3F">object?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-ordered-collection-page.3F">ordered-collection-page?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-ordered-collection.3F">ordered-collection?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-persistent-object.3F">persistent-object?</a> </li><li> <a href="dog-and-duck.quack.quack.html#var-unordered-collection.3F">unordered-collection?</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.scratch.parser.html">dog-and-duck.scratch.parser</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.scratch.parser.html#var-clean">clean</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.scratch.scratch.html">dog-and-duck.scratch.scratch</a></h3><div class="doc"><div class="markdown"><p>Scratchpad where I try to understand how to do this stuff.</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.scratch.scratch.html#var-account-handle">account-handle</a> </li></ul></div></div><div class="namespace"><h3><a href="dog-and-duck.utils.process.html">dog-and-duck.utils.process</a></h3><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="index"><p>Public variables and functions:</p><ul><li> <a href="dog-and-duck.utils.process.html#var-get-hostname">get-hostname</a> </li><li> <a href="dog-and-duck.utils.process.html#var-get-pid">get-pid</a> </li></ul></div></div></div></body></html>
\ No newline at end of file
diff --git a/docs/codox/intro.html b/docs/codox/intro.html
index b19fbd1..7ad3c51 100644
--- a/docs/codox/intro.html
+++ b/docs/codox/intro.html
@@ -1,16 +1,41 @@
 <!DOCTYPE html PUBLIC ""
     "">
-<html><head><meta charset="UTF-8" /><title>Introduction</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1  current"><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.required-properties.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>required-properties</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#introduction" name="introduction"></a>Introduction</h1>
-<h2><a href="#the-old-dog-and-duck" name="the-old-dog-and-duck"></a>The Old Dog and Duck</h2>
+<html><head><meta charset="UTF-8" /><title>The Old Dog and Duck</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Desiderata.html"><div class="inner"><span>Desiderata</span></div></a></li><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1  current"><a href="intro.html"><div class="inner"><span>The Old Dog and Duck</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.cli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cli</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.collections.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>collections</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.constants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>constants</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.control-variables.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>control-variables</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.distribution.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>distribution</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.objects.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>objects</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-4 branch"><a href="dog-and-duck.quack.picky.time.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-4"><a href="dog-and-duck.quack.picky.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-3"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree" style="top: -269px;"><span class="top" style="height: 278px;"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -362px;"><span class="top" style="height: 371px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#the-old-dog-and-duck" name="the-old-dog-and-duck"></a>The Old Dog and Duck</h1>
 <p>A Clojure library designed to implement the ActivityPub protocol, obviously.</p>
-<p><img src="../images/dog-and-duck-beverley.jpg" alt="The Dog and Duck, Derby" /></p>
+<p><img src="https://simon-brooke.github.io/dog-and-duck/images/Dog_and_Duck_tavern.jpg" alt="The Dog and Duck, St George’s Fields, London, 1647" /></p>
+<h2><a href="#introduction" name="introduction"></a>Introduction</h2>
 <p>The Old Dog and Duck is clearly a pub, and it’s a pub related to an activity; to whit, hunting ducks with dogs. Yes, of course one could also hunt dogs with ducks, but in practice that doesn’t work so well. The point isn’t whether or not I approve of hunting ducks with dogs (or vice versa); to be clear, I don’t. The point is that it’s a pub related to an activity, and is therefore an <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a>.</p>
 <p>Are we clear?</p>
 <p>Good.</p>
 <p>Let us proceed.</p>
 <p><strong>The Old Dog and Duck</strong> is intended to be a set of libraries to enable people to build stuff which interacts with ActivityPub. It isn’t intended to be a replacement for, or clone of, Mastodon. I do think I might implement my own ActivityPub server on top of The Old Dog and Duck, that specifically might allow for user-pluggable feed-sorting algorithms and with my own user interface/user experience take, but that project is not (yet, at any rate) this project.</p>
 <h2><a href="#status" name="status"></a>Status</h2>
-<p>This is a long way pre-alpha. Everything will change. Feel free to play, but do so at your own risk. Contributions welcome.</p>
+<p>This is still pre-alpha. Everything will change. There’s still a lot of code that was written when I was feeling my way around the problems, which is redundant and should now be pruned. Feel free to play, but do so at your own risk. Contributions welcome.</p>
+<h2><a href="#usage" name="usage"></a>Usage</h2>
+<p>At present, only the duck-typing validator works. To play with it, build the uberjar (or download it from github) and run it with</p>
+<pre><code>java -jar target/dog-and-duck-0.1.0-standalone.jar -i resources/activitystreams-test-documents/vocabulary-ex10-jsonld.json -f html -o report.html -s info
+</code></pre>
+<p>The full range of command-line switches is as follows:</p>
+<pre><code>    -i, --input SOURCE    standard input   The file or URL to validate
+    -o, --output DEST     standard output  The file to write to, defaults to standard out
+    -f, --format FORMAT   :edn             The format to output, one of `edn` `csv` `html`
+    -l, --language LANG   en-GB            The ISO 639-1 code for the language to output
+    -s, --severity LEVEL  :info            The minimum severity of faults to report
+    -h, --help                             Print this message and exit
+</code></pre>
+<p>Note, though, that internationalisation files for languages other than British English have not yet been written, and that one is not complete.</p>
+<p>The following severity levels are understood:</p>
+<ol>
+  <li><code>info</code> things which are not actuallys fault, but issues noted during  validation;</li>
+  <li><code>minor</code> things which I consider to be faults, but which  don’t actually breach the spec;</li>
+  <li><code>should</code> instances where the spec says something <em>SHOULD</em>  be done, which isn’t;</li>
+  <li><code>must</code> instances where the spec says something <em>MUST</em>  be done, which isn’t;</li>
+  <li><code>critical</code> instances where I believe the fault means that  the object cannot be meaningfully processed.</li>
+</ol>
+<p>Note that it is almost certain that in some places I have misinterpreted the spec. Of all 205 documents in the <a href="https://github.com/w3c-social/activitystreams-test-documents">activitystreams-test-documents repository</a>, not a single one passes validation, and that must be wrong.</p>
+<p>Nevertheless I think that this is a basis on which a useful validator can be built. Feedback and contributions welcome.</p>
+<h2><a href="#documentation" name="documentation"></a>Documentation</h2>
+<p>Full documentation is <a href="https://simon-brooke.github.io/dog-and-duck/">here</a>.</p>
 <h2><a href="#architecture" name="architecture"></a>Architecture</h2>
 <p>There are a number of separate concerns required to implement ActivityPub. They include</p>
 <ol>
@@ -48,11 +73,25 @@
 <h3><a href="#quack" name="quack"></a>Quack</h3>
 <p>Duck-typing for ActivityStreams objects.</p>
 <p>As of version 0.1.0, this is substantially the only part that is yet at all useful, and it is still a long way from finished or robust.</p>
+<h3><a href="#bouncer" name="bouncer"></a>Bouncer</h3>
+<p>Enhanced tools for moderators (I have as yet absolutely no idea what this looks like).</p>
 <h3><a href="#scratch" name="scratch"></a>Scratch</h3>
 <p>What the dog does when bored. Essentially, a place where I can learn how to make this stuff work, but perhaps eventually an ActivityPub server in its own right.</p>
-<h2><a href="#usage" name="usage"></a>Usage</h2>
-<p>At present, only the duck-typing functions work. To play with them, use</p>
-<pre><code class="clojure">(require '[dog-and-duck.quack.quack :as q])
+<h2><a href="#building" name="building"></a>Building</h2>
+<h3><a href="#clj-activitypub" name="clj-activitypub"></a>clj-activitypub</h3>
+<p><strong>NOTE THAT</strong> <code>dog-and-duck</code> depends on Jahfer’s <code>clj-activitypub</code>, which is also currently not yet released and under rapid development and consequently currently <em>very</em> unstable. For this reason it’s probably best to clone <a href="https://github.com/simon-brooke/clj-activitypub">my fork</a> rather than <a href="https://github.com/jahfer/clj-activitypub">the original</a>, because that way you are less likely to encounter version incompatibilities.</p>
+<p><code>clj-activitypub</code> is configured to build with <a href="https://clojure.org/guides/tools_build">tools.bui;d</a>. To prepare <code>clj-activitypub</code> before building <code>dog-and-duck</code>, do</p>
+<pre><code class="bash">$ git clone git@github.com:simon-brooke/clj-activitypub.git
+$ cd clj-activitypub/
+$ clj -T:build jar
+$ clj -T:build install
+</code></pre>
+<p>I shall keep <code>dog-and-duck</code> and my fork of <code>clj-activitypub</code> in sync at least until Jahfer makes a production release of his project to <a href="">Clojars</a>.</p>
+<h3><a href="#leiningen" name="leiningen"></a>Leiningen</h3>
+<p><code>dog-and-duck</code> itself is still set up to build with <a href="https://leiningen.org/">Leiningen</a>. Yes, I know that’s not what the cool kids are using any more but hey, I’m an old man, leave me be. To get <code>dog-and-duck</code> up to a point where you can start to play,</p>
+<pre><code class="bash">$ git clone git@github.com:simon-brooke/dog-and-duck.git
+$ cd dog-and-duck
+$ lein repl
 </code></pre>
 <h2><a href="#testing" name="testing"></a>Testing</h2>
 <p>Prior to testing, you should clone <a href="https://github.com/w3c-social/activitystreams-test-documents">activitystreams-test-documents</a> into the <code>resources</code> directory. You can then test with</p>
diff --git a/src/dog_and_duck/scratch/scratch.clj b/src/dog_and_duck/scratch/scratch.clj
index 54aee05..abb6f90 100644
--- a/src/dog_and_duck/scratch/scratch.clj
+++ b/src/dog_and_duck/scratch/scratch.clj
@@ -56,11 +56,11 @@
 ;; how we make a public/private key pair. But this key pair is not the one 
 ;; known to mastodon.scot as my key pair, so that doesn't get us very far...
 ;; I think.
-(let [rsa (pgp-gen/rsa-keypair-generator 2048)
-      kp (pgp-gen/generate-keypair rsa :rsa-general)
-      public (-> kp .getPublicKey .getEncoded)
-      private (-> kp .getPrivateKey .getPrivateKeyDataPacket .getEncoded)]
-  (println (str "Public key:  " public))
-  (println (str "Private key: " private))
-  )
+;; (let [rsa (pgp-gen/rsa-keypair-generator 2048)
+;;       kp (pgp-gen/generate-keypair rsa :rsa-general)
+;;       public (-> kp .getPublicKey .getEncoded)
+;;       private (-> kp .getPrivateKey .getPrivateKeyDataPacket .getEncoded)]
+;;   (println (str "Public key:  " public))
+;;   (println (str "Private key: " private))
+;;   )