diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index 2dcbec076673aa95e6b980525bfab3f8208d9051..e7a02b8282c2fd195b6fb9bb5ae1864e74133f31 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -3359,7 +3359,7 @@ class Population:
                 )
 
                 # Keep track of the amount of failed systems and their error codes
-                self.grid_options["_failed_prob"] += system_dict["probability"]
+                self.grid_options["_failed_prob"] += system_dict.get("probability", 1)
                 self.grid_options["_failed_count"] += 1
                 self.grid_options["_errors_found"] = True
 
diff --git a/reports/docstring_coverage/docstring_coverage.svg b/reports/docstring_coverage/docstring_coverage.svg
new file mode 100644
index 0000000000000000000000000000000000000000..836e4960ec38bd920d07d1f7c9ac54041161769c
--- /dev/null
+++ b/reports/docstring_coverage/docstring_coverage.svg
@@ -0,0 +1,20 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="142" height="20">
+    <linearGradient id="s" x2="0" y2="100%">
+        <stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
+        <stop offset="1" stop-opacity=".1"/>
+    </linearGradient>
+    <clipPath id="r">
+        <rect width="142" height="20" rx="3" fill="#fff"/>
+    </clipPath>
+    <g clip-path="url(#r)">
+        <rect width="99" height="20" fill="#555"/>
+        <rect x="99" width="43" height="20" fill="#4c1"/>
+        <rect width="142" height="20" fill="url(#s)"/>
+    </g>
+    <g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="110">
+        <text x="505" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="890">docstr-coverage</text>
+        <text x="505" y="140" transform="scale(.1)" textLength="890">docstr-coverage</text>
+        <text x="1195" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)">96%</text>
+        <text x="1195" y="140" transform="scale(.1)">96%</text>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/reports/docstring_coverage/docstring_coverage.txt b/reports/docstring_coverage/docstring_coverage.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7d76699317dab9d20f1551bf41d25908e962bf48
--- /dev/null
+++ b/reports/docstring_coverage/docstring_coverage.txt
@@ -0,0 +1,28 @@
+
+File: "/home/david/projects/binary_c_root/binarycpython_dev/binary_c-python/binarycpython/utils/distribution_functions.py"
+ - No docstring for `build_q_table`
+ Needed: 42; Found: 41; Missing: 1; Coverage: 97.6%
+
+
+File: "/home/david/projects/binary_c_root/binarycpython_dev/binary_c-python/binarycpython/utils/functions.py"
+ - No docstring for `AutoVivificationDict.__getitem__`
+ - No docstring for `AutoVivificationDict.__iadd__`
+ - No docstring for `imports`
+ - No docstring for `get_username`
+ Needed: 60; Found: 56; Missing: 4; Coverage: 93.3%
+
+
+File: "/home/david/projects/binary_c_root/binarycpython_dev/binary_c-python/binarycpython/utils/grid.py"
+ - No docstring for `Population._write_gridcode_system_call`
+ Needed: 50; Found: 49; Missing: 1; Coverage: 98.0%
+
+
+File: "/home/david/projects/binary_c_root/binarycpython_dev/binary_c-python/binarycpython/utils/grid_options_defaults.py"
+ - No docstring for `print_option_descriptions`
+ Needed: 5; Found: 4; Missing: 1; Coverage: 80.0%
+
+
+Overall statistics for 15 files:
+Needed: 195  -  Found: 188  -  Missing: 7
+Total coverage: 96.4%  -  Grade: Excellent
+Docstring coverage badge saved to '/home/david/projects/binary_c_root/binarycpython_dev/binary_c-python/reports/docstring_coverage/docstring_coverage.svg'
diff --git a/reports/test_coverage/test_coverage.svg b/reports/test_coverage/test_coverage.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f5af1dbeee2cacec20e9e6d0fbc93e757733fa2f
--- /dev/null
+++ b/reports/test_coverage/test_coverage.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="99" height="20">
+    <linearGradient id="b" x2="0" y2="100%">
+        <stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
+        <stop offset="1" stop-opacity=".1"/>
+    </linearGradient>
+    <mask id="a">
+        <rect width="99" height="20" rx="3" fill="#fff"/>
+    </mask>
+    <g mask="url(#a)">
+        <path fill="#555" d="M0 0h63v20H0z"/>
+        <path fill="#dfb317" d="M63 0h36v20H63z"/>
+        <path fill="url(#b)" d="M0 0h99v20H0z"/>
+    </g>
+    <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
+        <text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
+        <text x="31.5" y="14">coverage</text>
+        <text x="80" y="15" fill="#010101" fill-opacity=".3">72%</text>
+        <text x="80" y="14">72%</text>
+    </g>
+</svg>