Software Gardening Almanack Example

Software Gardening Almanack Example#

This notebook demonstrates installing and using the Software Gardening Almanack Python package. The Almanack is an open-source handbook of applied guidance and tools for sustainable software development and maintenance.

# install the almanack from pypi
import json

import pandas as pd

import almanack

!pip install almanack
Requirement already satisfied: almanack in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (0.0.0.post1.dev0+d4fcd79)
Requirement already satisfied: charset-normalizer<4.0.0,>=3.4.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (3.4.3)
Requirement already satisfied: defusedxml<0.8.0,>=0.7.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.7.1)
Requirement already satisfied: fire<0.8,>=0.6 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.7.1)
Requirement already satisfied: pygit2>=1.15.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (1.18.2)
Requirement already satisfied: pyyaml<7.0.0,>=6.0.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (6.0.2)
Requirement already satisfied: requests<3.0.0,>=2.32.3 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (2.32.5)
Requirement already satisfied: tabulate<0.10.0,>=0.9.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.9.0)
Requirement already satisfied: termcolor in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from fire<0.8,>=0.6->almanack) (2.4.0)
Requirement already satisfied: idna<4,>=2.5 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (2024.7.4)
Requirement already satisfied: cffi>=1.17.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pygit2>=1.15.1->almanack) (1.17.1)
Requirement already satisfied: pycparser in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from cffi>=1.17.0->pygit2>=1.15.1->almanack) (2.21)
[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: pip install --upgrade pip
# clone the almanack repo for example usage below
# we will apply the almanack tool to the almanack repo
!git clone https://github.com/software-gardening/almanack
Cloning into 'almanack'...
remote: Enumerating objects: 3427, done.
remote: Counting objects:   1% (1/79)
remote: Counting objects:   2% (2/79)
remote: Counting objects:   3% (3/79)
remote: Counting objects:   5% (4/79)
remote: Counting objects:   6% (5/79)
remote: Counting objects:   7% (6/79)
remote: Counting objects:   8% (7/79)
remote: Counting objects:  10% (8/79)
remote: Counting objects:  11% (9/79)
remote: Counting objects:  12% (10/79)
remote: Counting objects:  13% (11/79)
remote: Counting objects:  15% (12/79)
remote: Counting objects:  16% (13/79)
remote: Counting objects:  17% (14/79)
remote: Counting objects:  18% (15/79)
remote: Counting objects:  20% (16/79)
remote: Counting objects:  21% (17/79)
remote: Counting objects:  22% (18/79)
remote: Counting objects:  24% (19/79)
remote: Counting objects:  25% (20/79)
remote: Counting objects:  26% (21/79)
remote: Counting objects:  27% (22/79)
remote: Counting objects:  29% (23/79)
remote: Counting objects:  30% (24/79)
remote: Counting objects:  31% (25/79)
remote: Counting objects:  32% (26/79)
remote: Counting objects:  34% (27/79)
remote: Counting objects:  35% (28/79)
remote: Counting objects:  36% (29/79)
remote: Counting objects:  37% (30/79)
remote: Counting objects:  39% (31/79)
remote: Counting objects:  40% (32/79)
remote: Counting objects:  41% (33/79)
remote: Counting objects:  43% (34/79)
remote: Counting objects:  44% (35/79)
remote: Counting objects:  45% (36/79)
remote: Counting objects:  46% (37/79)
remote: Counting objects:  48% (38/79)
remote: Counting objects:  49% (39/79)
remote: Counting objects:  50% (40/79)
remote: Counting objects:  51% (41/79)
remote: Counting objects:  53% (42/79)
remote: Counting objects:  54% (43/79)
remote: Counting objects:  55% (44/79)
remote: Counting objects:  56% (45/79)
remote: Counting objects:  58% (46/79)
remote: Counting objects:  59% (47/79)
remote: Counting objects:  60% (48/79)
remote: Counting objects:  62% (49/79)
remote: Counting objects:  63% (50/79)
remote: Counting objects:  64% (51/79)
remote: Counting objects:  65% (52/79)
remote: Counting objects:  67% (53/79)
remote: Counting objects:  68% (54/79)
remote: Counting objects:  69% (55/79)
remote: Counting objects:  70% (56/79)
remote: Counting objects:  72% (57/79)
remote: Counting objects:  73% (58/79)
remote: Counting objects:  74% (59/79)
remote: Counting objects:  75% (60/79)
remote: Counting objects:  77% (61/79)
remote: Counting objects:  78% (62/79)
remote: Counting objects:  79% (63/79)
remote: Counting objects:  81% (64/79)
remote: Counting objects:  82% (65/79)
remote: Counting objects:  83% (66/79)
remote: Counting objects:  84% (67/79)
remote: Counting objects:  86% (68/79)
remote: Counting objects:  87% (69/79)
remote: Counting objects:  88% (70/79)
remote: Counting objects:  89% (71/79)
remote: Counting objects:  91% (72/79)
remote: Counting objects:  92% (73/79)
remote: Counting objects:  93% (74/79)
remote: Counting objects:  94% (75/79)
remote: Counting objects:  96% (76/79)
remote: Counting objects:  97% (77/79)
remote: Counting objects:  98% (78/79)
remote: Counting objects: 100% (79/79)
remote: Counting objects: 100% (79/79), done.
remote: Compressing objects:   1% (1/52)
remote: Compressing objects:   3% (2/52)
remote: Compressing objects:   5% (3/52)
remote: Compressing objects:   7% (4/52)
remote: Compressing objects:   9% (5/52)
remote: Compressing objects:  11% (6/52)
remote: Compressing objects:  13% (7/52)
remote: Compressing objects:  15% (8/52)
remote: Compressing objects:  17% (9/52)
remote: Compressing objects:  19% (10/52)
remote: Compressing objects:  21% (11/52)
remote: Compressing objects:  23% (12/52)
remote: Compressing objects:  25% (13/52)
remote: Compressing objects:  26% (14/52)
remote: Compressing objects:  28% (15/52)
remote: Compressing objects:  30% (16/52)
remote: Compressing objects:  32% (17/52)
remote: Compressing objects:  34% (18/52)
remote: Compressing objects:  36% (19/52)
remote: Compressing objects:  38% (20/52)
remote: Compressing objects:  40% (21/52)
remote: Compressing objects:  42% (22/52)
remote: Compressing objects:  44% (23/52)
remote: Compressing objects:  46% (24/52)
remote: Compressing objects:  48% (25/52)
remote: Compressing objects:  50% (26/52)
remote: Compressing objects:  51% (27/52)
remote: Compressing objects:  53% (28/52)
remote: Compressing objects:  55% (29/52)
remote: Compressing objects:  57% (30/52)
remote: Compressing objects:  59% (31/52)
remote: Compressing objects:  61% (32/52)
remote: Compressing objects:  63% (33/52)
remote: Compressing objects:  65% (34/52)
remote: Compressing objects:  67% (35/52)
remote: Compressing objects:  69% (36/52)
remote: Compressing objects:  71% (37/52)
remote: Compressing objects:  73% (38/52)
remote: Compressing objects:  75% (39/52)
remote: Compressing objects:  76% (40/52)
remote: Compressing objects:  78% (41/52)
remote: Compressing objects:  80% (42/52)
remote: Compressing objects:  82% (43/52)
remote: Compressing objects:  84% (44/52)
remote: Compressing objects:  86% (45/52)
remote: Compressing objects:  88% (46/52)
remote: Compressing objects:  90% (47/52)
remote: Compressing objects:  92% (48/52)
remote: Compressing objects:  94% (49/52)
remote: Compressing objects:  96% (50/52)
remote: Compressing objects:  98% (51/52)
remote: Compressing objects: 100% (52/52)
remote: Compressing objects: 100% (52/52), done.
Receiving objects:   0% (1/3427)
Receiving objects:   1% (35/3427)
Receiving objects:   2% (69/3427)
Receiving objects:   3% (103/3427)
Receiving objects:   4% (138/3427)
Receiving objects:   5% (172/3427)
Receiving objects:   6% (206/3427)
Receiving objects:   7% (240/3427)
Receiving objects:   8% (275/3427)
Receiving objects:   9% (309/3427)
Receiving objects:  10% (343/3427)
Receiving objects:  11% (377/3427)
Receiving objects:  12% (412/3427)
Receiving objects:  13% (446/3427)
Receiving objects:  13% (459/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  14% (480/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  15% (515/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  16% (549/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  17% (583/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  18% (617/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  19% (652/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  20% (686/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  21% (720/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  22% (754/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  23% (789/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  24% (823/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  25% (857/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  26% (892/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  27% (926/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  28% (960/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  29% (994/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  30% (1029/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  31% (1063/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  32% (1097/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  33% (1131/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  34% (1166/3427), 55.41 MiB | 55.40 MiB/s
Receiving objects:  35% (1200/3427), 79.86 MiB | 53.23 MiB/s
Receiving objects:  36% (1234/3427), 79.86 MiB | 53.23 MiB/s
Receiving objects:  37% (1268/3427), 79.86 MiB | 53.23 MiB/s
Receiving objects:  38% (1303/3427), 79.86 MiB | 53.23 MiB/s
Receiving objects:  39% (1337/3427), 79.86 MiB | 53.23 MiB/s
Receiving objects:  39% (1354/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  40% (1371/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  41% (1406/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  42% (1440/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  43% (1474/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  44% (1508/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  45% (1543/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  46% (1577/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  47% (1611/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  48% (1645/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  49% (1680/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  50% (1714/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  51% (1748/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  52% (1783/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  53% (1817/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  54% (1851/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  55% (1885/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  56% (1920/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  57% (1954/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  58% (1988/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  59% (2022/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  60% (2057/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  61% (2091/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  62% (2125/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  63% (2160/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  64% (2194/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  65% (2228/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  66% (2262/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  67% (2297/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  68% (2331/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  69% (2365/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  70% (2399/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  71% (2434/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  72% (2468/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  73% (2502/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  74% (2536/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  75% (2571/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  76% (2605/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  77% (2639/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  78% (2674/3427), 101.25 MiB | 50.62 MiB/s
Receiving objects:  79% (2708/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  80% (2742/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  81% (2776/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  82% (2811/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  83% (2845/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  84% (2879/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  85% (2913/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  86% (2948/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  87% (2982/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  88% (3016/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  89% (3051/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  90% (3085/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  91% (3119/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  92% (3153/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  93% (3188/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  94% (3222/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  95% (3256/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  96% (3290/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  97% (3325/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  98% (3359/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects:  99% (3393/3427), 127.75 MiB | 51.10 MiB/s
remote: Total 3427 (delta 21), reused 42 (delta 13), pack-reused 3348 (from 2)
Receiving objects: 100% (3427/3427), 127.75 MiB | 51.10 MiB/s
Receiving objects: 100% (3427/3427), 147.10 MiB | 53.10 MiB/s, done.
Resolving deltas:   0% (0/1862)
Resolving deltas:   1% (19/1862)
Resolving deltas:   2% (38/1862)
Resolving deltas:   3% (57/1862)
Resolving deltas:   4% (75/1862)
Resolving deltas:   5% (94/1862)
Resolving deltas:   6% (112/1862)
Resolving deltas:   7% (132/1862)
Resolving deltas:   8% (150/1862)
Resolving deltas:   9% (168/1862)
Resolving deltas:  10% (187/1862)
Resolving deltas:  11% (205/1862)
Resolving deltas:  12% (224/1862)
Resolving deltas:  13% (243/1862)
Resolving deltas:  14% (261/1862)
Resolving deltas:  15% (280/1862)
Resolving deltas:  16% (298/1862)
Resolving deltas:  17% (317/1862)
Resolving deltas:  18% (336/1862)
Resolving deltas:  19% (354/1862)
Resolving deltas:  20% (373/1862)
Resolving deltas:  21% (392/1862)
Resolving deltas:  22% (410/1862)
Resolving deltas:  23% (429/1862)
Resolving deltas:  24% (447/1862)
Resolving deltas:  25% (466/1862)
Resolving deltas:  26% (485/1862)
Resolving deltas:  27% (504/1862)
Resolving deltas:  28% (522/1862)
Resolving deltas:  29% (540/1862)
Resolving deltas:  30% (559/1862)
Resolving deltas:  31% (578/1862)
Resolving deltas:  32% (596/1862)
Resolving deltas:  33% (615/1862)
Resolving deltas:  34% (634/1862)
Resolving deltas:  35% (652/1862)
Resolving deltas:  36% (671/1862)
Resolving deltas:  37% (689/1862)
Resolving deltas:  38% (708/1862)
Resolving deltas:  39% (727/1862)
Resolving deltas:  40% (745/1862)
Resolving deltas:  41% (764/1862)
Resolving deltas:  42% (783/1862)
Resolving deltas:  43% (801/1862)
Resolving deltas:  44% (820/1862)
Resolving deltas:  45% (838/1862)
Resolving deltas:  46% (857/1862)
Resolving deltas:  47% (876/1862)
Resolving deltas:  48% (894/1862)
Resolving deltas:  49% (913/1862)
Resolving deltas:  50% (931/1862)
Resolving deltas:  51% (950/1862)
Resolving deltas:  52% (969/1862)
Resolving deltas:  53% (987/1862)
Resolving deltas:  54% (1006/1862)
Resolving deltas:  55% (1025/1862)
Resolving deltas:  56% (1043/1862)
Resolving deltas:  57% (1062/1862)
Resolving deltas:  58% (1080/1862)
Resolving deltas:  59% (1099/1862)
Resolving deltas:  60% (1118/1862)
Resolving deltas:  61% (1136/1862)
Resolving deltas:  62% (1155/1862)
Resolving deltas:  63% (1174/1862)
Resolving deltas:  64% (1192/1862)
Resolving deltas:  65% (1211/1862)
Resolving deltas:  66% (1229/1862)
Resolving deltas:  67% (1248/1862)
Resolving deltas:  68% (1267/1862)
Resolving deltas:  69% (1285/1862)
Resolving deltas:  70% (1304/1862)
Resolving deltas:  71% (1323/1862)
Resolving deltas:  72% (1341/1862)
Resolving deltas:  73% (1360/1862)
Resolving deltas:  73% (1367/1862)
Resolving deltas:  74% (1378/1862)
Resolving deltas:  75% (1397/1862)
Resolving deltas:  76% (1416/1862)
Resolving deltas:  76% (1427/1862)
Resolving deltas:  77% (1434/1862)
Resolving deltas:  78% (1453/1862)
Resolving deltas:  79% (1471/1862)
Resolving deltas:  80% (1490/1862)
Resolving deltas:  81% (1509/1862)
Resolving deltas:  82% (1527/1862)
Resolving deltas:  83% (1546/1862)
Resolving deltas:  84% (1565/1862)
Resolving deltas:  85% (1583/1862)
Resolving deltas:  86% (1602/1862)
Resolving deltas:  87% (1620/1862)
Resolving deltas:  88% (1639/1862)
Resolving deltas:  89% (1658/1862)
Resolving deltas:  90% (1676/1862)
Resolving deltas:  91% (1695/1862)
Resolving deltas:  92% (1714/1862)
Resolving deltas:  93% (1732/1862)
Resolving deltas:  94% (1751/1862)
Resolving deltas:  95% (1769/1862)
Resolving deltas:  96% (1788/1862)
Resolving deltas:  97% (1807/1862)
Resolving deltas:  98% (1825/1862)
Resolving deltas:  99% (1844/1862)
Resolving deltas: 100% (1862/1862)
Resolving deltas: 100% (1862/1862), done.
%%time


# gather the almanack table using the almanack repo as a reference
almanack_table = almanack.metrics.data.get_table("almanack")

# show the almanack table as a Pandas DataFrame
pd.DataFrame(almanack_table)
CPU times: user 3.03 s, sys: 108 ms, total: 3.14 s
Wall time: 5.65 s
name id result-type sustainability_correlation description correction_guidance fix_why fix_how result
0 repo-path SGA-META-0001 str 0 Repository path (local directory). None None None /home/runner/work/almanack/almanack/src/book/s...
1 repo-commits SGA-META-0002 int 0 Total number of commits for the repository. None None None 227
2 repo-file-count SGA-META-0003 int 0 Total number of files tracked within the repos... None None None 151
3 repo-commit-time-range SGA-META-0004 tuple 0 Starting commit and most recent commit for the... None None None (2024-03-05, 2025-09-03)
4 repo-days-of-development SGA-META-0005 int 0 Integer representing the number of days of dev... None None None 548
5 repo-commits-per-day SGA-META-0006 float 0 Floating point number which represents the num... None None None 0.414234
6 almanack-table-datetime SGA-META-0007 str 0 String representing the date when this table w... None None None 2025-09-03T23:52:09.537263Z
7 almanack-version SGA-META-0008 str 0 String representing the version of the almanac... None None None 0.0.0.post1.dev0+d4fcd79
8 repo-primary-language SGA-META-0009 str 0 Detected primary programming language of the r... None None None Jupyter Notebook
9 repo-primary-license SGA-META-0010 str 0 Detected primary license of the repository. None None None bsd-3-clause
10 repo-doi SGA-META-0011 str 0 Repository DOI value detected from CITATION.cf... None None None 10.5281/zenodo.14765834
11 repo-doi-publication-date SGA-META-0012 str 0 Repository DOI publication date detected from ... None None None None
12 repo-doi-fwci SGA-META-0013 float 0 Field-Weighted Citation Impact (FWCI) from Ope... None None None None
13 repo-doi-is-not-retracted SGA-META-0014 bool 0 If the work referenced by the repository DOI h... None None None None
14 repo-doi-grants-count SGA-META-0015 int 0 Count of grant records attached to the DOI's w... None None None 0
15 repo-doi-grants SGA-META-0016 list 0 List of grant records for the DOI's work (from... None None None None
16 repo-almanack-score SGA-META-0017 dict 0 Dictionary of length three, including the foll... None None None {'almanack-score-numerator': 11, 'almanack-sco...
17 repo-includes-readme SGA-GL-0001 bool 1 Boolean value indicating the presence of a REA... Consider adding a README file to the repository. A README file is essential for providing an ov... Create a README file in the root directory of ... True
18 repo-includes-contributing SGA-GL-0002 bool 1 Boolean value indicating the presence of a CON... Consider adding a CONTRIBUTING file to the rep... A CONTRIBUTING file is important for guiding p... Create a CONTRIBUTING file in the root directo... True
19 repo-includes-code-of-conduct SGA-GL-0003 bool 1 Boolean value indicating the presence of a COD... Consider adding a CODE_OF_CONDUCT file to the ... A CODE_OF_CONDUCT file is essential for establ... Create a CODE_OF_CONDUCT file in the root dire... True
20 repo-includes-license SGA-GL-0004 bool 1 Boolean value indicating the presence of a LIC... Consider adding a LICENSE file to the repository. A LICENSE file is crucial for defining the ter... Create a LICENSE file in the root directory of... True
21 repo-is-citable SGA-GL-0005 bool 1 Boolean value indicating the presence of a CIT... Consider adding a CITATION file to the reposit... A CITATION file is important for providing a s... Create a CITATION file in the root directory o... True
22 repo-default-branch-not-master SGA-GL-0006 bool 1 Boolean value indicating that the repo uses a ... Consider using a default source control branch... Using a default branch name other than 'master... Change the default branch name in your source ... True
23 repo-includes-common-docs SGA-GL-0007 bool 1 Boolean value indicating whether the repo incl... Consider including project documentation throu... Including a 'docs/' directory with common docu... Create a 'docs/' directory in the root of your... True
24 repo-unique-contributors SGA-GL-0008 int 0 Count of unique contributors since the beginni... None None None 5
25 repo-unique-contributors-past-year SGA-GL-0009 int 0 Count of unique contributors within the last y... None None None 3
26 repo-unique-contributors-past-182-days SGA-GL-0010 int 0 Count of unique contributors within the last 1... None None None 3
27 repo-tags-count SGA-GL-0011 int 0 Count of the number of tags within the reposit... None None None 14
28 repo-tags-count-past-year SGA-GL-0012 int 0 Count of the number of tags within the reposit... None None None 12
29 repo-tags-count-past-182-days SGA-GL-0013 int 0 Count of the number of tags within the reposit... None None None 7
30 repo-stargazers-count SGA-GL-0014 int 0 Count of the number of stargazers on repositor... None None None 12
31 repo-uses-issues SGA-GL-0015 bool 1 Whether the repository uses issues (for exampl... Consider leveraging issues for tracking bugs a... Using issues for tracking bugs and features he... Enable issues on your repository hosting platf... True
32 repo-issues-open-count SGA-GL-0016 int 0 Count of open issues for repository. None None None 73
33 repo-pull-requests-enabled SGA-GL-0017 bool 1 Whether the repository enables pull requests. Consider enabling pull requests for the reposi... None None True
34 repo-forks-count SGA-GL-0018 int 0 Count of forks of the repository. None None None 3
35 repo-subscribers-count SGA-GL-0019 int 0 Count of subscribers (or watchers) of the repo... None None None 1
36 repo-packages-ecosystems SGA-GL-0020 list 0 List of package platforms or services where th... None None None [pypi]
37 repo-packages-ecosystems-count SGA-GL-0021 int 0 Count of package platforms or services where t... None None None 1
38 repo-packages-versions-count SGA-GL-0022 int 0 Count of package versions on package hosts or ... None None None 15
39 repo-social-media-platforms SGA-GL-0023 list 0 Social media platforms detected within the rea... None None None []
40 repo-social-media-platforms-count SGA-GL-0024 int 0 Count of social media platforms detected withi... None None None 0
41 repo-doi-valid-format SGA-GL-0025 bool 1 Whether the DOI found in the CITATION.cff file... DOI within the CITATION.cff file is not of a v... A valid DOI format is essential for ensuring t... Ensure that the DOI in the CITATION.cff file f... True
42 repo-doi-https-resolvable SGA-GL-0026 bool 1 Whether the DOI found in the CITATION.cff file... DOI within the CITATION.cff file is not HTTPS ... An HTTPS resolvable DOI is crucial for ensurin... Verify that the DOI in the CITATION.cff file c... True
43 repo-doi-cited-by-count SGA-GL-0027 int 0 How many other works cite the DOI for the repo... None None None None
44 repo-days-between-doi-publication-date-and-lat... SGA-GL-0028 int 0 The number of days between the most recent com... None None None None
45 repo-gh-workflow-success-ratio SGA-SF-0001 float 0 Ratio of succeeding workflow runs out of queri... None None None 0.75
46 repo-gh-workflow-succeeding-runs SGA-SF-0002 int 0 Number of succeeding workflow runs out of quer... None None None 100
47 repo-gh-workflow-failing-runs SGA-SF-0003 int 0 Number of failing workflow runs out of queried... None None None 75
48 repo-gh-workflow-queried-total SGA-SF-0004 int 0 Total number of workflow runs from GitHub (onl... None None None 25
49 repo-code-coverage-percent SGA-SF-0005 float 0 Percentage of code coverage for repository giv... None None None None
50 repo-date-of-last-coverage-run SGA-SF-0006 str 0 Date of code coverage run for repository given... None None None None
51 repo-days-between-last-coverage-run-latest-commit SGA-SF-0007 int 0 Days between last coverage run date and latest... None None None None
52 repo-code-coverage-total-lines SGA-SF-0008 int 0 Total lines of code used for code coverage wit... None None None None
53 repo-code-coverage-executed-lines SGA-SF-0009 int 0 Total lines covered code within repository giv... None None None None
54 repo-agg-info-entropy SGA-VS-0001 float 0 Aggregated information entropy for all files w... None None None 0.00306
55 repo-file-info-entropy SGA-VS-0002 dict 0 File-level information entropy for all files w... None None None {'.alexignore': 8.07420058602789e-05, '.github...
# print the json with indentation
print(json.dumps(almanack_table, indent=4))
[
    {
        "name": "repo-path",
        "id": "SGA-META-0001",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Repository path (local directory).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "/home/runner/work/almanack/almanack/src/book/seed-bank/almanack-example/almanack"
    },
    {
        "name": "repo-commits",
        "id": "SGA-META-0002",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Total number of commits for the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 227
    },
    {
        "name": "repo-file-count",
        "id": "SGA-META-0003",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Total number of files tracked within the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 151
    },
    {
        "name": "repo-commit-time-range",
        "id": "SGA-META-0004",
        "result-type": "tuple",
        "sustainability_correlation": 0,
        "description": "Starting commit and most recent commit for the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": [
            "2024-03-05",
            "2025-09-03"
        ]
    },
    {
        "name": "repo-days-of-development",
        "id": "SGA-META-0005",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Integer representing the number of days of development between most recent commit and first commit.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 548
    },
    {
        "name": "repo-commits-per-day",
        "id": "SGA-META-0006",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Floating point number which represents the number of commits per day (using days of development).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.4142335766423358
    },
    {
        "name": "almanack-table-datetime",
        "id": "SGA-META-0007",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "String representing the date when this table was generated in the format of '%Y-%m-%dT%H:%M:%S.%fZ', for example: 2024-11-22T18:20:30.123456Z .",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "2025-09-03T23:52:09.537263Z"
    },
    {
        "name": "almanack-version",
        "id": "SGA-META-0008",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "String representing the version of the almanack which was used to generate this table.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "0.0.0.post1.dev0+d4fcd79"
    },
    {
        "name": "repo-primary-language",
        "id": "SGA-META-0009",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Detected primary programming language of the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "Jupyter Notebook"
    },
    {
        "name": "repo-primary-license",
        "id": "SGA-META-0010",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Detected primary license of the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "bsd-3-clause"
    },
    {
        "name": "repo-doi",
        "id": "SGA-META-0011",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Repository DOI value detected from CITATION.cff file.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "10.5281/zenodo.14765834"
    },
    {
        "name": "repo-doi-publication-date",
        "id": "SGA-META-0012",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Repository DOI publication date detected from CITATION.cff file and OpenAlex.org.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-doi-fwci",
        "id": "SGA-META-0013",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Field-Weighted Citation Impact (FWCI) from OpenAlex for the work referenced by the repository DOI.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-doi-is-not-retracted",
        "id": "SGA-META-0014",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "If the work referenced by the repository DOI has been retracted as reported by OpenAlex.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-doi-grants-count",
        "id": "SGA-META-0015",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of grant records attached to the DOI's work (from OpenAlex via Crossref).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-doi-grants",
        "id": "SGA-META-0016",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of grant records for the DOI's work (from OpenAlex via Crossref).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-almanack-score",
        "id": "SGA-META-0017",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Dictionary of length three, including the following: 1) number of Almanack boolean metrics that passed (numerator), 2) number of total Almanack boolean metrics considered (denominator), and 3) a score that represents how likely the repository will be maintained over time based (numerator / denominator).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "almanack-score-numerator": 11,
            "almanack-score-denominator": 11,
            "almanack-score": 1.0
        }
    },
    {
        "name": "repo-includes-readme",
        "id": "SGA-GL-0001",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating the presence of a README file in the repository.",
        "correction_guidance": "Consider adding a README file to the repository.",
        "fix_why": "A README file is essential for providing an overview of the project, its purpose, and how to use it. Many platforms like GitHub, GitLab, and Bitbucket use the README file to display project information prominently.",
        "fix_how": "Create a README file in the root directory of your repository. Include sections such as project description, installation instructions, usage examples, and contribution guidelines. You can use Markdown to format the README for better readability. For example, you can start with a text editor or use an online Markdown editor to create your README file. Save it as `README.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the README file directly.",
        "result": true
    },
    {
        "name": "repo-includes-contributing",
        "id": "SGA-GL-0002",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating the presence of a CONTRIBUTING file in the repository.",
        "correction_guidance": "Consider adding a CONTRIBUTING file to the repository.",
        "fix_why": "A CONTRIBUTING file is important for guiding potential contributors on how to contribute to the project, including coding standards, pull request guidelines, and other relevant information. It helps maintain a consistent contribution process and encourages community involvement.",
        "fix_how": "Create a CONTRIBUTING file in the root directory of your repository. Include guidelines for contributing, such as coding standards, pull request instructions, and any other relevant information. You can use Markdown to format the CONTRIBUTING file for better readability. For example, you can start with a text editor or use an online Markdown editor to create your CONTRIBUTING file. Save it as `CONTRIBUTING.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CONTRIBUTING file directly.",
        "result": true
    },
    {
        "name": "repo-includes-code-of-conduct",
        "id": "SGA-GL-0003",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating the presence of a CODE_OF_CONDUCT file in the repository.",
        "correction_guidance": "Consider adding a CODE_OF_CONDUCT file to the repository.",
        "fix_why": "A CODE_OF_CONDUCT file is essential for establishing a respectful and inclusive community within the project. It sets expectations for behavior, helps prevent harassment, and provides a framework for resolving conflicts.",
        "fix_how": "Create a CODE_OF_CONDUCT file in the root directory of your repository. Include guidelines for acceptable behavior, reporting procedures, and any other relevant information. You can use Markdown to format the CODE_OF_CONDUCT file for better readability. For example, you can start with a text editor or use an online Markdown editor to create your CODE_OF_CONDUCT file. Save it as `CODE_OF_CONDUCT.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CODE_OF_CONDUCT file directly.",
        "result": true
    },
    {
        "name": "repo-includes-license",
        "id": "SGA-GL-0004",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating the presence of a LICENSE file in the repository.",
        "correction_guidance": "Consider adding a LICENSE file to the repository.",
        "fix_why": "A LICENSE file is crucial for defining the terms under which the code can be used, modified, and distributed. It helps protect both the authors and users of the code by clarifying legal rights and responsibilities.",
        "fix_how": "Create a LICENSE file in the root directory of your repository. Include the text of the license you wish to apply to your code. You can choose from existing open-source licenses, such as MIT, Apache 2.0, or GPL, depending on your project's needs. For example, you can start with a text editor or use an online license generator to create your LICENSE file. Save it as `LICENSE` or `LICENSE.txt` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the LICENSE file directly.",
        "result": true
    },
    {
        "name": "repo-is-citable",
        "id": "SGA-GL-0005",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating the presence of a CITATION file or some other means of indicating how to cite the work.",
        "correction_guidance": "Consider adding a CITATION file to the repository (e.g. citation.cff, etc.).",
        "fix_why": "A CITATION file is important for providing a standardized way to cite the work, making it easier for others to reference and acknowledge the project in their own work. It helps promote the visibility and impact of the project within the academic and research communities.",
        "fix_how": "Create a CITATION file in the root directory of your repository. Include information on how to cite the work, such as the authors, title, publication date, and any relevant identifiers (e.g., DOI). You can use the Citation File Format (CFF) standard to structure the CITATION file for better compatibility with citation tools. For example, you can start with a text editor or use an online CFF editor to create your CITATION file. Save it as `CITATION.cff` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CITATION file directly.",
        "result": true
    },
    {
        "name": "repo-default-branch-not-master",
        "id": "SGA-GL-0006",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating that the repo uses a default branch name besides 'master'.",
        "correction_guidance": "Consider using a default source control branch name other than 'master'.",
        "fix_why": "Using a default branch name other than 'master' is more collaborative and avoids possible negative historical connotations associated with the term.",
        "fix_how": "Change the default branch name in your source control platform (e.g., GitHub, GitLab, Bitbucket) to a more inclusive term like 'main', 'develop', or any other preferred name. This can usually be done through the repository settings or by renaming the branch locally and pushing the changes to the remote repository.",
        "result": true
    },
    {
        "name": "repo-includes-common-docs",
        "id": "SGA-GL-0007",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Boolean value indicating whether the repo includes common documentation directory and files associated with building docsites.",
        "correction_guidance": "Consider including project documentation through the 'docs/' directory.",
        "fix_why": "Including a 'docs/' directory with common documentation files helps in maintaining a clear structure for project documentation, making it easier for contributors and users to find relevant information. It also promotes better collaboration and understanding of the project.",
        "fix_how": "Create a 'docs/' directory in the root of your repository. Inside this directory, include common documentation files such as 'index.md', 'CONTRIBUTING.md', 'CODE_OF_CONDUCT.md', and any other relevant documentation files that provide information about the project, its usage, and contribution guidelines. You can use Markdown to format these files for better readability. If you're using GitHub, you can also use their web interface to create and edit these files directly within the 'docs/' directory.",
        "result": true
    },
    {
        "name": "repo-unique-contributors",
        "id": "SGA-GL-0008",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of unique contributors since the beginning of the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 5
    },
    {
        "name": "repo-unique-contributors-past-year",
        "id": "SGA-GL-0009",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of unique contributors within the last year from now (where now is a reference to table value of almanack-table-datetime).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 3
    },
    {
        "name": "repo-unique-contributors-past-182-days",
        "id": "SGA-GL-0010",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of unique contributors within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 3
    },
    {
        "name": "repo-tags-count",
        "id": "SGA-GL-0011",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of the number of tags within the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 14
    },
    {
        "name": "repo-tags-count-past-year",
        "id": "SGA-GL-0012",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of the number of tags within the repository within the last year from now (where now is a reference to table value of almanack-table-datetime).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 12
    },
    {
        "name": "repo-tags-count-past-182-days",
        "id": "SGA-GL-0013",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of the number of tags within the repository within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 7
    },
    {
        "name": "repo-stargazers-count",
        "id": "SGA-GL-0014",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of the number of stargazers on repository remote hosting platform.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 12
    },
    {
        "name": "repo-uses-issues",
        "id": "SGA-GL-0015",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Whether the repository uses issues (for example, as a bug and/or feature tracking tool.",
        "correction_guidance": "Consider leveraging issues for tracking bugs and/or features within your repository hosting platform.",
        "fix_why": "Using issues for tracking bugs and features helps in maintaining a clear record of project development, facilitates collaboration, and allows for better prioritization of tasks.",
        "fix_how": "Enable issues on your repository hosting platform (e.g., GitHub, GitLab, Bitbucket) if not already enabled. This can usually be done through the repository settings or by creating an issue template. Encourage contributors to use issues for reporting bugs, suggesting features, and discussing project-related topics.",
        "result": true
    },
    {
        "name": "repo-issues-open-count",
        "id": "SGA-GL-0016",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of open issues for repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 73
    },
    {
        "name": "repo-pull-requests-enabled",
        "id": "SGA-GL-0017",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Whether the repository enables pull requests.",
        "correction_guidance": "Consider enabling pull requests for the repository through your repository hosting platform.",
        "fix_why": null,
        "fix_how": null,
        "result": true
    },
    {
        "name": "repo-forks-count",
        "id": "SGA-GL-0018",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of forks of the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 3
    },
    {
        "name": "repo-subscribers-count",
        "id": "SGA-GL-0019",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of subscribers (or watchers) of the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 1
    },
    {
        "name": "repo-packages-ecosystems",
        "id": "SGA-GL-0020",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": [
            "pypi"
        ]
    },
    {
        "name": "repo-packages-ecosystems-count",
        "id": "SGA-GL-0021",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 1
    },
    {
        "name": "repo-packages-versions-count",
        "id": "SGA-GL-0022",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of package versions on package hosts or services where the repository was detected (leveraging the ecosyste.ms packages API).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 15
    },
    {
        "name": "repo-social-media-platforms",
        "id": "SGA-GL-0023",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "Social media platforms detected within the readme.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": []
    },
    {
        "name": "repo-social-media-platforms-count",
        "id": "SGA-GL-0024",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of social media platforms detected within the readme.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-doi-valid-format",
        "id": "SGA-GL-0025",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Whether the DOI found in the CITATION.cff file is of a valid format.",
        "correction_guidance": "DOI within the CITATION.cff file is not of a valid format or missing.",
        "fix_why": "A valid DOI format is essential for ensuring that the DOI can be resolved and used to reference the work correctly.",
        "fix_how": "Ensure that the DOI in the CITATION.cff file follows the standard DOI format, which typically includes a prefix (e.g., 10.1234) and a suffix (e.g., 56789/abcde). The DOI should be in the format: `10.<prefix>/<suffix>`. If the DOI is missing or incorrectly formatted, update it to match the correct structure.",
        "result": true
    },
    {
        "name": "repo-doi-https-resolvable",
        "id": "SGA-GL-0026",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Whether the DOI found in the CITATION.cff file is HTTPS resolvable.",
        "correction_guidance": "DOI within the CITATION.cff file is not HTTPS resolvable or missing.",
        "fix_why": "An HTTPS resolvable DOI is crucial for ensuring that the DOI can be accessed securely and reliably, allowing users to retrieve the work associated with the DOI.",
        "fix_how": "Verify that the DOI in the CITATION.cff file can be resolved using an HTTPS URL. The DOI should be formatted as: `https://doi.org/10.<prefix>/<suffix>`. If the DOI is not resolvable or does not use HTTPS, update it to ensure it points to a valid and secure URL.",
        "result": true
    },
    {
        "name": "repo-doi-cited-by-count",
        "id": "SGA-GL-0027",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "How many other works cite the DOI for the repository found within the CITATION.cff as discovered by the OpenAlex.org API.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-days-between-doi-publication-date-and-latest-commit",
        "id": "SGA-GL-0028",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "The number of days between the most recent commit and DOI for the repository's publication date as discovered by the OpenAlex.org API.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-gh-workflow-success-ratio",
        "id": "SGA-SF-0001",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Ratio of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.75
    },
    {
        "name": "repo-gh-workflow-succeeding-runs",
        "id": "SGA-SF-0002",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Number of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 100
    },
    {
        "name": "repo-gh-workflow-failing-runs",
        "id": "SGA-SF-0003",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Number of failing workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 75
    },
    {
        "name": "repo-gh-workflow-queried-total",
        "id": "SGA-SF-0004",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Total number of workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 25
    },
    {
        "name": "repo-code-coverage-percent",
        "id": "SGA-SF-0005",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Percentage of code coverage for repository given detected code coverage data.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-date-of-last-coverage-run",
        "id": "SGA-SF-0006",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Date of code coverage run for repository given detected code coverage data.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-days-between-last-coverage-run-latest-commit",
        "id": "SGA-SF-0007",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Days between last coverage run date and latest commit date.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-code-coverage-total-lines",
        "id": "SGA-SF-0008",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Total lines of code used for code coverage within repository given detected code coverage data.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-code-coverage-executed-lines",
        "id": "SGA-SF-0009",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Total lines covered code within repository given detected code coverage data.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-agg-info-entropy",
        "id": "SGA-VS-0001",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Aggregated information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Represents value from 0 to 1 where 0 equals no information entropy and 1 represents maximum information entropy.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.0030602673416902076
    },
    {
        "name": "repo-file-info-entropy",
        "id": "SGA-VS-0002",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "File-level information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Shows all files and their corresponding information entropy measurements relative to the other files found within the range of commits.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            ".alexignore": 8.07420058602789e-05,
            ".github/ISSUE_TEMPLATE/bug.yml": 0.0022860628255131406,
            ".github/ISSUE_TEMPLATE/config.yml": 8.07420058602789e-05,
            ".github/ISSUE_TEMPLATE/feature.yml": 0.0020598892080447764,
            ".github/PULL_REQUEST_TEMPLATE.md": 0.0011668694232510053,
            ".github/actions/install-node-env/action.yml": 0.000475780917830426,
            ".github/actions/install-python-env/action.yml": 0.0009444881777740652,
            ".github/dependabot.yml": 0.001111843568000494,
            ".github/release-drafter.yml": 0.0006857251467934946,
            ".github/workflows/deploy-book.yml": 0.0012759015022791992,
            ".github/workflows/draft-release.yml": 0.0007441650202983199,
            ".github/workflows/entropy-check.yml": 0.0018300135635623657,
            ".github/workflows/pre-commit-checks.yml": 0.001111843568000494,
            ".github/workflows/publish-pypi.yml": 0.0008593760319026213,
            ".github/workflows/pytest-tests.yml": 0.0013568474881922171,
            ".github/workflows/test-links.yml": 0.0006857251467934946,
            ".gitignore": 0.003861238234043436,
            ".linkcheckerrc.ini": 0.0005669009349143671,
            ".pre-commit-config.yaml": 0.0048749573271535005,
            ".pre-commit-hooks.yaml": 0.00041388345158456806,
            ".vale.ini": 0.000475780917830426,
            "CITATION.cff": 0.00494120573985889,
            "CODE_OF_CONDUCT.md": 0.0001171206902258263,
            "CONTRIBUTING.md": 0.0001171206902258263,
            "LICENSE": 0.0008878626414556587,
            "LICENSE.txt": 0.0008878626414556587,
            "README.md": 0.0026802421499498305,
            "coverage.xml": 0.023154236188316423,
            "docs/readme.md": 0.0001171206902258263,
            "media/coverage-badge.svg": 4.2645974151753495e-05,
            "pa11y.json": 0.00025381525746651134,
            "package-lock.json": 0.026682330661217064,
            "package.json": 0.00018681827278613808,
            "poetry.lock": 0.06625317341062548,
            "pyproject.toml": 0.005270220396545561,
            "src/almanack/__init__.py": 0.0007731675938503989,
            "src/almanack/book.py": 0.0019582076535179585,
            "src/almanack/cli.py": 0.006279386033661657,
            "src/almanack/git.py": 0.009093980233265218,
            "src/almanack/metrics/data.py": 0.01748303678241423,
            "src/almanack/metrics/entropy/calculate_entropy.py": 0.002946110343741851,
            "src/almanack/metrics/entropy/processing_repositories.py": 0.0019582076535179585,
            "src/almanack/metrics/garden_lattice/connectedness.py": 0.0070121928193081825,
            "src/almanack/metrics/garden_lattice/practicality.py": 0.003089553445034517,
            "src/almanack/metrics/garden_lattice/understanding.py": 0.0016483268945009307,
            "src/almanack/metrics/metrics.yml": 0.014783453607424946,
            "src/almanack/metrics/remote.py": 0.0024843341592140243,
            "src/almanack/reporting/report.py": 0.0032319596179088894,
            "src/book/_config.yml": 0.0015168098568427203,
            "src/book/_ext/__init__.py": 0.0,
            "src/book/_ext/gen_check_pages.py": 0.002753139251947365,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 0.0003508868333561357,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 0.002110453836781493,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 0.004474147589660086,
            "src/book/_posters/2025/almanack-2025-poster.pdf": 0.0,
            "src/book/_posters/2025/images/almanack-handbook.png": 0.0,
            "src/book/_posters/2025/images/almanack-notebook.png": 0.0,
            "src/book/_posters/2025/images/almanack-package-and-handbook.png": 0.0,
            "src/book/_posters/2025/images/almanack-package.png": 0.0,
            "src/book/_posters/2025/images/bssw-logo-w-background.png": 0.0,
            "src/book/_posters/2025/images/cu-anschutz-short.png": 0.0,
            "src/book/_posters/2025/images/dbmi.png": 0.0,
            "src/book/_posters/2025/images/entropy-for-repos.png": 0.0,
            "src/book/_posters/2025/images/forest_modified.png": 0.0,
            "src/book/_posters/2025/images/header-combined-images.png": 0.0,
            "src/book/_posters/2025/images/roadmap.png": 0.0,
            "src/book/_posters/2025/images/seed-bank-entropy-pubmed.png": 0.0,
            "src/book/_posters/2025/images/sga-qr-text.png": 0.0,
            "src/book/_posters/2025/images/sga-qr.png": 0.0,
            "src/book/_posters/2025/images/software-lifecycle.png": 0.0,
            "src/book/_posters/2025/images/spacer.png": 0.0,
            "src/book/_posters/2025/images/sustainable-horizons-institute-logo.png": 0.0,
            "src/book/_posters/2025/images/title-text.png": 0.0,
            "src/book/_posters/2025/poster.qmd": 0.0033498769210219825,
            "src/book/_posters/2025/readme.md": 0.0017005156863224226,
            "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.odp": 0.0,
            "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.pdf": 0.0,
            "src/book/_static/custom.css": 0.0005968712659892998,
            "src/book/_templates/check_template.md.j2": 0.0003508868333561357,
            "src/book/_toc.yml": 0.0011668694232510053,
            "src/book/assets/640px-Forgard2-003.gif": 0.0,
            "src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0,
            "src/book/assets/Sundial_2916_HDR.jpeg": 0.0,
            "src/book/assets/almanack-influencing-software.png": 0.0,
            "src/book/assets/garden-lattice-understanding-transfer.png": 0.0,
            "src/book/assets/software-gardening-almanack-logo.png": 0.0,
            "src/book/assets/software-gardening-logo.png": 0.0,
            "src/book/assets/software-lifecycle.png": 0.0,
            "src/book/assets/xkcd_dependency.png": 0.0,
            "src/book/favicon.png": 0.0,
            "src/book/garden-circle/contributing.md": 0.004697536048055605,
            "src/book/garden-circle/garden-circle.md": 0.00018681827278613808,
            "src/book/garden-circle/garden-map.md": 0.0013299406706512894,
            "src/book/garden-circle/package-api.md": 0.003017964968282334,
            "src/book/garden-circle/pavilion.md": 0.0010841951015241509,
            "src/book/garden-lattice/garden-lattice.md": 0.0012759015022791992,
            "src/book/garden-lattice/understanding.md": 0.0031608827795269285,
            "src/book/introduction.md": 0.003930092949691444,
            "src/book/references.bib": 0.007239576141072257,
            "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.03352450497065555,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.004830706393295111,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.003838242208009742,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links_with_github_data.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/gather-software-information-entropy.ipynb": 0.004112753136226156,
            "src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-open-issues.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-top-5-langs.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_1.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_10.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_11.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_12.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_13.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_14.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_15.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_16.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_17.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_18.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_19.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_2.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_20.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_3.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_4.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_5.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_6.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_7.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_8.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_9.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/visualize-pubmed-repo-sofware-entropy.ipynb": 0.06196737298882196,
            "src/book/seed-bank/seed-bank.md": 0.00018681827278613808,
            "src/book/software-forest/software-forest.md": 0.0013029592537397475,
            "src/book/verdant-sundial/verdant-sundial.md": 0.0013299406706512894,
            "styles/config/vocabularies/almanack/accept.txt": 0.0010006757773978643,
            "tests/__init__.py": 0.0,
            "tests/conftest.py": 0.004271487512359321,
            "tests/data/almanack/coverage/python/coverage.json": 4.2645974151753495e-05,
            "tests/data/almanack/coverage/python/coverage.lcov": 0.019957408049737838,
            "tests/data/almanack/repo_setup/create_repo.py": 0.006553291798668434,
            "tests/data/almanack/repo_setup/insert_code.py": 0.0016483268945009307,
            "tests/data/jupyter-book/sandbox.md": 0.000536737428244757,
            "tests/metrics/test_calculate_entropy.py": 0.0016744500821492593,
            "tests/metrics/test_data.py": 0.02255626236671783,
            "tests/metrics/test_garden_lattice.py": 0.0022611015736617142,
            "tests/test_almanack.py": 0.0010841951015241509,
            "tests/test_build.py": 0.0019582076535179585,
            "tests/test_cli.py": 0.004316659316036976,
            "tests/test_git.py": 0.009545858772784693,
            "tests/utils.py": 0.0010841951015241509
        }
    }
]
%%time

# show the same results from the CLI
!almanack table "./almanack"
[{"name": "repo-path", "id": "SGA-META-0001", "result-type": "str", "sustainability_correlation": 0, "description": "Repository path (local directory).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "/home/runner/work/almanack/almanack/src/book/seed-bank/almanack-example/almanack"}, {"name": "repo-commits", "id": "SGA-META-0002", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of commits for the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 227}, {"name": "repo-file-count", "id": "SGA-META-0003", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of files tracked within the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 151}, {"name": "repo-commit-time-range", "id": "SGA-META-0004", "result-type": "tuple", "sustainability_correlation": 0, "description": "Starting commit and most recent commit for the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": ["2024-03-05", "2025-09-03"]}, {"name": "repo-days-of-development", "id": "SGA-META-0005", "result-type": "int", "sustainability_correlation": 0, "description": "Integer representing the number of days of development between most recent commit and first commit.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 548}, {"name": "repo-commits-per-day", "id": "SGA-META-0006", "result-type": "float", "sustainability_correlation": 0, "description": "Floating point number which represents the number of commits per day (using days of development).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.4142335766423358}, {"name": "almanack-table-datetime", "id": "SGA-META-0007", "result-type": "str", "sustainability_correlation": 0, "description": "String representing the date when this table was generated in the format of '%Y-%m-%dT%H:%M:%S.%fZ', for example: 2024-11-22T18:20:30.123456Z .", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "2025-09-03T23:52:22.921557Z"}, {"name": "almanack-version", "id": "SGA-META-0008", "result-type": "str", "sustainability_correlation": 0, "description": "String representing the version of the almanack which was used to generate this table.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "0.0.0.post1.dev0+d4fcd79"}, {"name": "repo-primary-language", "id": "SGA-META-0009", "result-type": "str", "sustainability_correlation": 0, "description": "Detected primary programming language of the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "Jupyter Notebook"}, {"name": "repo-primary-license", "id": "SGA-META-0010", "result-type": "str", "sustainability_correlation": 0, "description": "Detected primary license of the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "bsd-3-clause"}, {"name": "repo-doi", "id": "SGA-META-0011", "result-type": "str", "sustainability_correlation": 0, "description": "Repository DOI value detected from CITATION.cff file.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "10.5281/zenodo.14765834"}, {"name": "repo-doi-publication-date", "id": "SGA-META-0012", "result-type": "str", "sustainability_correlation": 0, "description": "Repository DOI publication date detected from CITATION.cff file and OpenAlex.org.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-doi-fwci", "id": "SGA-META-0013", "result-type": "float", "sustainability_correlation": 0, "description": "Field-Weighted Citation Impact (FWCI) from OpenAlex for the work referenced by the repository DOI.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-doi-is-not-retracted", "id": "SGA-META-0014", "result-type": "bool", "sustainability_correlation": 0, "description": "If the work referenced by the repository DOI has been retracted as reported by OpenAlex.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-doi-grants-count", "id": "SGA-META-0015", "result-type": "int", "sustainability_correlation": 0, "description": "Count of grant records attached to the DOI's work (from OpenAlex via Crossref).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-doi-grants", "id": "SGA-META-0016", "result-type": "list", "sustainability_correlation": 0, "description": "List of grant records for the DOI's work (from OpenAlex via Crossref).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-almanack-score", "id": "SGA-META-0017", "result-type": "dict", "sustainability_correlation": 0, "description": "Dictionary of length three, including the following: 1) number of Almanack boolean metrics that passed (numerator), 2) number of total Almanack boolean metrics considered (denominator), and 3) a score that represents how likely the repository will be maintained over time based (numerator / denominator).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"almanack-score-numerator": 11, "almanack-score-denominator": 11, "almanack-score": 1.0}}, {"name": "repo-includes-readme", "id": "SGA-GL-0001", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a README file in the repository.", "correction_guidance": "Consider adding a README file to the repository.", "fix_why": "A README file is essential for providing an overview of the project, its purpose, and how to use it. Many platforms like GitHub, GitLab, and Bitbucket use the README file to display project information prominently.", "fix_how": "Create a README file in the root directory of your repository. Include sections such as project description, installation instructions, usage examples, and contribution guidelines. You can use Markdown to format the README for better readability. For example, you can start with a text editor or use an online Markdown editor to create your README file. Save it as `README.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the README file directly.", "result": true}, {"name": "repo-includes-contributing", "id": "SGA-GL-0002", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CONTRIBUTING file in the repository.", "correction_guidance": "Consider adding a CONTRIBUTING file to the repository.", "fix_why": "A CONTRIBUTING file is important for guiding potential contributors on how to contribute to the project, including coding standards, pull request guidelines, and other relevant information. It helps maintain a consistent contribution process and encourages community involvement.", "fix_how": "Create a CONTRIBUTING file in the root directory of your repository. Include guidelines for contributing, such as coding standards, pull request instructions, and any other relevant information. You can use Markdown to format the CONTRIBUTING file for better readability. For example, you can start with a text editor or use an online Markdown editor to create your CONTRIBUTING file. Save it as `CONTRIBUTING.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CONTRIBUTING file directly.", "result": true}, {"name": "repo-includes-code-of-conduct", "id": "SGA-GL-0003", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CODE_OF_CONDUCT file in the repository.", "correction_guidance": "Consider adding a CODE_OF_CONDUCT file to the repository.", "fix_why": "A CODE_OF_CONDUCT file is essential for establishing a respectful and inclusive community within the project. It sets expectations for behavior, helps prevent harassment, and provides a framework for resolving conflicts.", "fix_how": "Create a CODE_OF_CONDUCT file in the root directory of your repository. Include guidelines for acceptable behavior, reporting procedures, and any other relevant information. You can use Markdown to format the CODE_OF_CONDUCT file for better readability. For example, you can start with a text editor or use an online Markdown editor to create your CODE_OF_CONDUCT file. Save it as `CODE_OF_CONDUCT.md` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CODE_OF_CONDUCT file directly.", "result": true}, {"name": "repo-includes-license", "id": "SGA-GL-0004", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a LICENSE file in the repository.", "correction_guidance": "Consider adding a LICENSE file to the repository.", "fix_why": "A LICENSE file is crucial for defining the terms under which the code can be used, modified, and distributed. It helps protect both the authors and users of the code by clarifying legal rights and responsibilities.", "fix_how": "Create a LICENSE file in the root directory of your repository. Include the text of the license you wish to apply to your code. You can choose from existing open-source licenses, such as MIT, Apache 2.0, or GPL, depending on your project's needs. For example, you can start with a text editor or use an online license generator to create your LICENSE file. Save it as `LICENSE` or `LICENSE.txt` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the LICENSE file directly.", "result": true}, {"name": "repo-is-citable", "id": "SGA-GL-0005", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CITATION file or some other means of indicating how to cite the work.", "correction_guidance": "Consider adding a CITATION file to the repository (e.g. citation.cff, etc.).", "fix_why": "A CITATION file is important for providing a standardized way to cite the work, making it easier for others to reference and acknowledge the project in their own work. It helps promote the visibility and impact of the project within the academic and research communities.", "fix_how": "Create a CITATION file in the root directory of your repository. Include information on how to cite the work, such as the authors, title, publication date, and any relevant identifiers (e.g., DOI). You can use the Citation File Format (CFF) standard to structure the CITATION file for better compatibility with citation tools. For example, you can start with a text editor or use an online CFF editor to create your CITATION file. Save it as `CITATION.cff` in the root of your repository. If you're using GitHub, you can also use their web interface to create and edit the CITATION file directly.", "result": true}, {"name": "repo-default-branch-not-master", "id": "SGA-GL-0006", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating that the repo uses a default branch name besides 'master'.", "correction_guidance": "Consider using a default source control branch name other than 'master'.", "fix_why": "Using a default branch name other than 'master' is more collaborative and avoids possible negative historical connotations associated with the term.", "fix_how": "Change the default branch name in your source control platform (e.g., GitHub, GitLab, Bitbucket) to a more inclusive term like 'main', 'develop', or any other preferred name. This can usually be done through the repository settings or by renaming the branch locally and pushing the changes to the remote repository.", "result": true}, {"name": "repo-includes-common-docs", "id": "SGA-GL-0007", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating whether the repo includes common documentation directory and files associated with building docsites.", "correction_guidance": "Consider including project documentation through the 'docs/' directory.", "fix_why": "Including a 'docs/' directory with common documentation files helps in maintaining a clear structure for project documentation, making it easier for contributors and users to find relevant information. It also promotes better collaboration and understanding of the project.", "fix_how": "Create a 'docs/' directory in the root of your repository. Inside this directory, include common documentation files such as 'index.md', 'CONTRIBUTING.md', 'CODE_OF_CONDUCT.md', and any other relevant documentation files that provide information about the project, its usage, and contribution guidelines. You can use Markdown to format these files for better readability. If you're using GitHub, you can also use their web interface to create and edit these files directly within the 'docs/' directory.", "result": true}, {"name": "repo-unique-contributors", "id": "SGA-GL-0008", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors since the beginning of the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 5}, {"name": "repo-unique-contributors-past-year", "id": "SGA-GL-0009", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors within the last year from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 3}, {"name": "repo-unique-contributors-past-182-days", "id": "SGA-GL-0010", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 3}, {"name": "repo-tags-count", "id": "SGA-GL-0011", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 14}, {"name": "repo-tags-count-past-year", "id": "SGA-GL-0012", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository within the last year from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 12}, {"name": "repo-tags-count-past-182-days", "id": "SGA-GL-0013", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 7}, {"name": "repo-stargazers-count", "id": "SGA-GL-0014", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of stargazers on repository remote hosting platform.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 12}, {"name": "repo-uses-issues", "id": "SGA-GL-0015", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the repository uses issues (for example, as a bug and/or feature tracking tool.", "correction_guidance": "Consider leveraging issues for tracking bugs and/or features within your repository hosting platform.", "fix_why": "Using issues for tracking bugs and features helps in maintaining a clear record of project development, facilitates collaboration, and allows for better prioritization of tasks.", "fix_how": "Enable issues on your repository hosting platform (e.g., GitHub, GitLab, Bitbucket) if not already enabled. This can usually be done through the repository settings or by creating an issue template. Encourage contributors to use issues for reporting bugs, suggesting features, and discussing project-related topics.", "result": true}, {"name": "repo-issues-open-count", "id": "SGA-GL-0016", "result-type": "int", "sustainability_correlation": 0, "description": "Count of open issues for repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 73}, {"name": "repo-pull-requests-enabled", "id": "SGA-GL-0017", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the repository enables pull requests.", "correction_guidance": "Consider enabling pull requests for the repository through your repository hosting platform.", "fix_why": null, "fix_how": null, "result": true}, {"name": "repo-forks-count", "id": "SGA-GL-0018", "result-type": "int", "sustainability_correlation": 0, "description": "Count of forks of the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 3}, {"name": "repo-subscribers-count", "id": "SGA-GL-0019", "result-type": "int", "sustainability_correlation": 0, "description": "Count of subscribers (or watchers) of the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 1}, {"name": "repo-packages-ecosystems", "id": "SGA-GL-0020", "result-type": "list", "sustainability_correlation": 0, "description": "List of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": ["pypi"]}, {"name": "repo-packages-ecosystems-count", "id": "SGA-GL-0021", "result-type": "int", "sustainability_correlation": 0, "description": "Count of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 1}, {"name": "repo-packages-versions-count", "id": "SGA-GL-0022", "result-type": "int", "sustainability_correlation": 0, "description": "Count of package versions on package hosts or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 15}, {"name": "repo-social-media-platforms", "id": "SGA-GL-0023", "result-type": "list", "sustainability_correlation": 0, "description": "Social media platforms detected within the readme.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": []}, {"name": "repo-social-media-platforms-count", "id": "SGA-GL-0024", "result-type": "int", "sustainability_correlation": 0, "description": "Count of social media platforms detected within the readme.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-doi-valid-format", "id": "SGA-GL-0025", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the DOI found in the CITATION.cff file is of a valid format.", "correction_guidance": "DOI within the CITATION.cff file is not of a valid format or missing.", "fix_why": "A valid DOI format is essential for ensuring that the DOI can be resolved and used to reference the work correctly.", "fix_how": "Ensure that the DOI in the CITATION.cff file follows the standard DOI format, which typically includes a prefix (e.g., 10.1234) and a suffix (e.g., 56789/abcde). The DOI should be in the format: `10.<prefix>/<suffix>`. If the DOI is missing or incorrectly formatted, update it to match the correct structure.", "result": true}, {"name": "repo-doi-https-resolvable", "id": "SGA-GL-0026", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the DOI found in the CITATION.cff file is HTTPS resolvable.", "correction_guidance": "DOI within the CITATION.cff file is not HTTPS resolvable or missing.", "fix_why": "An HTTPS resolvable DOI is crucial for ensuring that the DOI can be accessed securely and reliably, allowing users to retrieve the work associated with the DOI.", "fix_how": "Verify that the DOI in the CITATION.cff file can be resolved using an HTTPS URL. The DOI should be formatted as: `https://doi.org/10.<prefix>/<suffix>`. If the DOI is not resolvable or does not use HTTPS, update it to ensure it points to a valid and secure URL.", "result": true}, {"name": "repo-doi-cited-by-count", "id": "SGA-GL-0027", "result-type": "int", "sustainability_correlation": 0, "description": "How many other works cite the DOI for the repository found within the CITATION.cff as discovered by the OpenAlex.org API.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-days-between-doi-publication-date-and-latest-commit", "id": "SGA-GL-0028", "result-type": "int", "sustainability_correlation": 0, "description": "The number of days between the most recent commit and DOI for the repository's publication date as discovered by the OpenAlex.org API.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-gh-workflow-success-ratio", "id": "SGA-SF-0001", "result-type": "float", "sustainability_correlation": 0, "description": "Ratio of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.75}, {"name": "repo-gh-workflow-succeeding-runs", "id": "SGA-SF-0002", "result-type": "int", "sustainability_correlation": 0, "description": "Number of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 100}, {"name": "repo-gh-workflow-failing-runs", "id": "SGA-SF-0003", "result-type": "int", "sustainability_correlation": 0, "description": "Number of failing workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 75}, {"name": "repo-gh-workflow-queried-total", "id": "SGA-SF-0004", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 25}, {"name": "repo-code-coverage-percent", "id": "SGA-SF-0005", "result-type": "float", "sustainability_correlation": 0, "description": "Percentage of code coverage for repository given detected code coverage data.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-date-of-last-coverage-run", "id": "SGA-SF-0006", "result-type": "str", "sustainability_correlation": 0, "description": "Date of code coverage run for repository given detected code coverage data.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-days-between-last-coverage-run-latest-commit", "id": "SGA-SF-0007", "result-type": "int", "sustainability_correlation": 0, "description": "Days between last coverage run date and latest commit date.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-code-coverage-total-lines", "id": "SGA-SF-0008", "result-type": "int", "sustainability_correlation": 0, "description": "Total lines of code used for code coverage within repository given detected code coverage data.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-code-coverage-executed-lines", "id": "SGA-SF-0009", "result-type": "int", "sustainability_correlation": 0, "description": "Total lines covered code within repository given detected code coverage data.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-agg-info-entropy", "id": "SGA-VS-0001", "result-type": "float", "sustainability_correlation": 0, "description": "Aggregated information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Represents value from 0 to 1 where 0 equals no information entropy and 1 represents maximum information entropy.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.0030602673416902076}, {"name": "repo-file-info-entropy", "id": "SGA-VS-0002", "result-type": "dict", "sustainability_correlation": 0, "description": "File-level information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Shows all files and their corresponding information entropy measurements relative to the other files found within the range of commits.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {".alexignore": 8.07420058602789e-05, ".github/ISSUE_TEMPLATE/bug.yml": 0.0022860628255131406, ".github/ISSUE_TEMPLATE/config.yml": 8.07420058602789e-05, ".github/ISSUE_TEMPLATE/feature.yml": 0.0020598892080447764, ".github/PULL_REQUEST_TEMPLATE.md": 0.0011668694232510053, ".github/actions/install-node-env/action.yml": 0.000475780917830426, ".github/actions/install-python-env/action.yml": 0.0009444881777740652, ".github/dependabot.yml": 0.001111843568000494, ".github/release-drafter.yml": 0.0006857251467934946, ".github/workflows/deploy-book.yml": 0.0012759015022791992, ".github/workflows/draft-release.yml": 0.0007441650202983199, ".github/workflows/entropy-check.yml": 0.0018300135635623657, ".github/workflows/pre-commit-checks.yml": 0.001111843568000494, ".github/workflows/publish-pypi.yml": 0.0008593760319026213, ".github/workflows/pytest-tests.yml": 0.0013568474881922171, ".github/workflows/test-links.yml": 0.0006857251467934946, ".gitignore": 0.003861238234043436, ".linkcheckerrc.ini": 0.0005669009349143671, ".pre-commit-config.yaml": 0.0048749573271535005, ".pre-commit-hooks.yaml": 0.00041388345158456806, ".vale.ini": 0.000475780917830426, "CITATION.cff": 0.00494120573985889, "CODE_OF_CONDUCT.md": 0.0001171206902258263, "CONTRIBUTING.md": 0.0001171206902258263, "LICENSE": 0.0008878626414556587, "LICENSE.txt": 0.0008878626414556587, "README.md": 0.0026802421499498305, "coverage.xml": 0.023154236188316423, "docs/readme.md": 0.0001171206902258263, "media/coverage-badge.svg": 4.2645974151753495e-05, "pa11y.json": 0.00025381525746651134, "package-lock.json": 0.026682330661217064, "package.json": 0.00018681827278613808, "poetry.lock": 0.06625317341062548, "pyproject.toml": 0.005270220396545561, "src/almanack/__init__.py": 0.0007731675938503989, "src/almanack/book.py": 0.0019582076535179585, "src/almanack/cli.py": 0.006279386033661657, "src/almanack/git.py": 0.009093980233265218, "src/almanack/metrics/data.py": 0.01748303678241423, "src/almanack/metrics/entropy/calculate_entropy.py": 0.002946110343741851, "src/almanack/metrics/entropy/processing_repositories.py": 0.0019582076535179585, "src/almanack/metrics/garden_lattice/connectedness.py": 0.0070121928193081825, "src/almanack/metrics/garden_lattice/practicality.py": 0.003089553445034517, "src/almanack/metrics/garden_lattice/understanding.py": 0.0016483268945009307, "src/almanack/metrics/metrics.yml": 0.014783453607424946, "src/almanack/metrics/remote.py": 0.0024843341592140243, "src/almanack/reporting/report.py": 0.0032319596179088894, "src/book/_config.yml": 0.0015168098568427203, "src/book/_ext/__init__.py": 0.0, "src/book/_ext/gen_check_pages.py": 0.002753139251947365, "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 0.0003508868333561357, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 0.002110453836781493, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 0.004474147589660086, "src/book/_posters/2025/almanack-2025-poster.pdf": 0.0, "src/book/_posters/2025/images/almanack-handbook.png": 0.0, "src/book/_posters/2025/images/almanack-notebook.png": 0.0, "src/book/_posters/2025/images/almanack-package-and-handbook.png": 0.0, "src/book/_posters/2025/images/almanack-package.png": 0.0, "src/book/_posters/2025/images/bssw-logo-w-background.png": 0.0, "src/book/_posters/2025/images/cu-anschutz-short.png": 0.0, "src/book/_posters/2025/images/dbmi.png": 0.0, "src/book/_posters/2025/images/entropy-for-repos.png": 0.0, "src/book/_posters/2025/images/forest_modified.png": 0.0, "src/book/_posters/2025/images/header-combined-images.png": 0.0, "src/book/_posters/2025/images/roadmap.png": 0.0, "src/book/_posters/2025/images/seed-bank-entropy-pubmed.png": 0.0, "src/book/_posters/2025/images/sga-qr-text.png": 0.0, "src/book/_posters/2025/images/sga-qr.png": 0.0, "src/book/_posters/2025/images/software-lifecycle.png": 0.0, "src/book/_posters/2025/images/spacer.png": 0.0, "src/book/_posters/2025/images/sustainable-horizons-institute-logo.png": 0.0, "src/book/_posters/2025/images/title-text.png": 0.0, "src/book/_posters/2025/poster.qmd": 0.0033498769210219825, "src/book/_posters/2025/readme.md": 0.0017005156863224226, "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.odp": 0.0, "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.pdf": 0.0, "src/book/_static/custom.css": 0.0005968712659892998, "src/book/_templates/check_template.md.j2": 0.0003508868333561357, "src/book/_toc.yml": 0.0011668694232510053, "src/book/assets/640px-Forgard2-003.gif": 0.0, "src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0, "src/book/assets/Sundial_2916_HDR.jpeg": 0.0, "src/book/assets/almanack-influencing-software.png": 0.0, "src/book/assets/garden-lattice-understanding-transfer.png": 0.0, "src/book/assets/software-gardening-almanack-logo.png": 0.0, "src/book/assets/software-gardening-logo.png": 0.0, "src/book/assets/software-lifecycle.png": 0.0, "src/book/assets/xkcd_dependency.png": 0.0, "src/book/favicon.png": 0.0, "src/book/garden-circle/contributing.md": 0.004697536048055605, "src/book/garden-circle/garden-circle.md": 0.00018681827278613808, "src/book/garden-circle/garden-map.md": 0.0013299406706512894, "src/book/garden-circle/package-api.md": 0.003017964968282334, "src/book/garden-circle/pavilion.md": 0.0010841951015241509, "src/book/garden-lattice/garden-lattice.md": 0.0012759015022791992, "src/book/garden-lattice/understanding.md": 0.0031608827795269285, "src/book/introduction.md": 0.003930092949691444, "src/book/references.bib": 0.007239576141072257, "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.03352450497065555, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.004830706393295111, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.003838242208009742, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links_with_github_data.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-software-information-entropy.ipynb": 0.004112753136226156, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-open-issues.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-top-5-langs.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_1.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_10.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_11.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_12.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_13.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_14.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_15.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_16.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_17.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_18.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_19.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_2.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_20.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_3.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_4.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_5.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_6.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_7.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_8.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_9.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/visualize-pubmed-repo-sofware-entropy.ipynb": 0.06196737298882196, "src/book/seed-bank/seed-bank.md": 0.00018681827278613808, "src/book/software-forest/software-forest.md": 0.0013029592537397475, "src/book/verdant-sundial/verdant-sundial.md": 0.0013299406706512894, "styles/config/vocabularies/almanack/accept.txt": 0.0010006757773978643, "tests/__init__.py": 0.0, "tests/conftest.py": 0.004271487512359321, "tests/data/almanack/coverage/python/coverage.json": 4.2645974151753495e-05, "tests/data/almanack/coverage/python/coverage.lcov": 0.019957408049737838, "tests/data/almanack/repo_setup/create_repo.py": 0.006553291798668434, "tests/data/almanack/repo_setup/insert_code.py": 0.0016483268945009307, "tests/data/jupyter-book/sandbox.md": 0.000536737428244757, "tests/metrics/test_calculate_entropy.py": 0.0016744500821492593, "tests/metrics/test_data.py": 0.02255626236671783, "tests/metrics/test_garden_lattice.py": 0.0022611015736617142, "tests/test_almanack.py": 0.0010841951015241509, "tests/test_build.py": 0.0019582076535179585, "tests/test_cli.py": 0.004316659316036976, "tests/test_git.py": 0.009545858772784693, "tests/utils.py": 0.0010841951015241509}}]
CPU times: user 69.1 ms, sys: 16.2 ms, total: 85.3 ms
Wall time: 5.2 s
%%time

# show the same results from the CLI
!almanack check "./almanack"
Running Software Gardening Almanack checks.
Datetime: 2025-09-03T23:52:28.162186Z
Almanack version: 0.0.0.post1.dev0+d4fcd79
Target repository path: ./almanack
Software Gardening Almanack summary: 100.00% (11/11)
CPU times: user 66.8 ms, sys: 17.4 ms, total: 84.2 ms
Wall time: 5.34 s