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+22713d8)
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.6)
Requirement already satisfied: currencyconverter<0.19.0,>=0.18.15 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.18.16)
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: pandas>=2.2.2 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (2.3.3)
Requirement already satisfied: pyarrow>=16 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (23.0.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.3)
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.33.1)
Requirement already satisfied: tabulate<0.11,>=0.9 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.10.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.26 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.6.3)
Requirement already satisfied: certifi>=2023.5.7 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: numpy>=1.23.2 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pandas>=2.2.2->almanack) (2.3.1)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pandas>=2.2.2->almanack) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pandas>=2.2.2->almanack) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pandas>=2.2.2->almanack) (2024.1)
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) (2.0.0)
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)
Requirement already satisfied: six>=1.5 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas>=2.2.2->almanack) (1.16.0)
# 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: 4648, done.
remote: Counting objects:   0% (1/315)
remote: Counting objects:   1% (4/315)
remote: Counting objects:   2% (7/315)
remote: Counting objects:   3% (10/315)
remote: Counting objects:   4% (13/315)
remote: Counting objects:   5% (16/315)
remote: Counting objects:   6% (19/315)
remote: Counting objects:   7% (23/315)
remote: Counting objects:   8% (26/315)
remote: Counting objects:   9% (29/315)
remote: Counting objects:  10% (32/315)
remote: Counting objects:  11% (35/315)
remote: Counting objects:  12% (38/315)
remote: Counting objects:  13% (41/315)
remote: Counting objects:  14% (45/315)
remote: Counting objects:  15% (48/315)
remote: Counting objects:  16% (51/315)
remote: Counting objects:  17% (54/315)
remote: Counting objects:  18% (57/315)
remote: Counting objects:  19% (60/315)
remote: Counting objects:  20% (63/315)
remote: Counting objects:  21% (67/315)
remote: Counting objects:  22% (70/315)
remote: Counting objects:  23% (73/315)
remote: Counting objects:  24% (76/315)
remote: Counting objects:  25% (79/315)
remote: Counting objects:  26% (82/315)
remote: Counting objects:  27% (86/315)
remote: Counting objects:  28% (89/315)
remote: Counting objects:  29% (92/315)
remote: Counting objects:  30% (95/315)
remote: Counting objects:  31% (98/315)
remote: Counting objects:  32% (101/315)
remote: Counting objects:  33% (104/315)
remote: Counting objects:  34% (108/315)
remote: Counting objects:  35% (111/315)
remote: Counting objects:  36% (114/315)
remote: Counting objects:  37% (117/315)
remote: Counting objects:  38% (120/315)
remote: Counting objects:  39% (123/315)
remote: Counting objects:  40% (126/315)
remote: Counting objects:  41% (130/315)
remote: Counting objects:  42% (133/315)
remote: Counting objects:  43% (136/315)
remote: Counting objects:  44% (139/315)
remote: Counting objects:  45% (142/315)
remote: Counting objects:  46% (145/315)
remote: Counting objects:  47% (149/315)
remote: Counting objects:  48% (152/315)
remote: Counting objects:  49% (155/315)
remote: Counting objects:  50% (158/315)
remote: Counting objects:  51% (161/315)
remote: Counting objects:  52% (164/315)
remote: Counting objects:  53% (167/315)
remote: Counting objects:  54% (171/315)
remote: Counting objects:  55% (174/315)
remote: Counting objects:  56% (177/315)
remote: Counting objects:  57% (180/315)
remote: Counting objects:  58% (183/315)
remote: Counting objects:  59% (186/315)
remote: Counting objects:  60% (189/315)
remote: Counting objects:  61% (193/315)
remote: Counting objects:  62% (196/315)
remote: Counting objects:  63% (199/315)
remote: Counting objects:  64% (202/315)
remote: Counting objects:  65% (205/315)
remote: Counting objects:  66% (208/315)
remote: Counting objects:  67% (212/315)
remote: Counting objects:  68% (215/315)
remote: Counting objects:  69% (218/315)
remote: Counting objects:  70% (221/315)
remote: Counting objects:  71% (224/315)
remote: Counting objects:  72% (227/315)
remote: Counting objects:  73% (230/315)
remote: Counting objects:  74% (234/315)
remote: Counting objects:  75% (237/315)
remote: Counting objects:  76% (240/315)
remote: Counting objects:  77% (243/315)
remote: Counting objects:  78% (246/315)
remote: Counting objects:  79% (249/315)
remote: Counting objects:  80% (252/315)
remote: Counting objects:  81% (256/315)
remote: Counting objects:  82% (259/315)
remote: Counting objects:  83% (262/315)
remote: Counting objects:  84% (265/315)
remote: Counting objects:  85% (268/315)
remote: Counting objects:  86% (271/315)
remote: Counting objects:  87% (275/315)
remote: Counting objects:  88% (278/315)
remote: Counting objects:  89% (281/315)
remote: Counting objects:  90% (284/315)
remote: Counting objects:  91% (287/315)
remote: Counting objects:  92% (290/315)
remote: Counting objects:  93% (293/315)
remote: Counting objects:  94% (297/315)
remote: Counting objects:  95% (300/315)
remote: Counting objects:  96% (303/315)
remote: Counting objects:  97% (306/315)
remote: Counting objects:  98% (309/315)
remote: Counting objects:  99% (312/315)
remote: Counting objects: 100% (315/315)
remote: Counting objects: 100% (315/315), done.
remote: Compressing objects:   0% (1/206)
remote: Compressing objects:   1% (3/206)
remote: Compressing objects:   2% (5/206)
remote: Compressing objects:   3% (7/206)
remote: Compressing objects:   4% (9/206)
remote: Compressing objects:   5% (11/206)
remote: Compressing objects:   6% (13/206)
remote: Compressing objects:   7% (15/206)
remote: Compressing objects:   8% (17/206)
remote: Compressing objects:   9% (19/206)
remote: Compressing objects:  10% (21/206)
remote: Compressing objects:  11% (23/206)
remote: Compressing objects:  12% (25/206)
remote: Compressing objects:  13% (27/206)
remote: Compressing objects:  14% (29/206)
remote: Compressing objects:  15% (31/206)
remote: Compressing objects:  16% (33/206)
remote: Compressing objects:  17% (36/206)
remote: Compressing objects:  18% (38/206)
remote: Compressing objects:  19% (40/206)
remote: Compressing objects:  20% (42/206)
remote: Compressing objects:  21% (44/206)
remote: Compressing objects:  22% (46/206)
remote: Compressing objects:  23% (48/206)
remote: Compressing objects:  24% (50/206)
remote: Compressing objects:  25% (52/206)
remote: Compressing objects:  26% (54/206)
remote: Compressing objects:  27% (56/206)
remote: Compressing objects:  28% (58/206)
remote: Compressing objects:  29% (60/206)
remote: Compressing objects:  30% (62/206)
remote: Compressing objects:  31% (64/206)
remote: Compressing objects:  32% (66/206)
remote: Compressing objects:  33% (68/206)
remote: Compressing objects:  34% (71/206)
remote: Compressing objects:  35% (73/206)
remote: Compressing objects:  36% (75/206)
remote: Compressing objects:  37% (77/206)
remote: Compressing objects:  38% (79/206)
remote: Compressing objects:  39% (81/206)
remote: Compressing objects:  40% (83/206)
remote: Compressing objects:  41% (85/206)
remote: Compressing objects:  42% (87/206)
remote: Compressing objects:  43% (89/206)
remote: Compressing objects:  44% (91/206)
remote: Compressing objects:  45% (93/206)
remote: Compressing objects:  46% (95/206)
remote: Compressing objects:  47% (97/206)
remote: Compressing objects:  48% (99/206)
remote: Compressing objects:  49% (101/206)
remote: Compressing objects:  50% (103/206)
remote: Compressing objects:  51% (106/206)
remote: Compressing objects:  52% (108/206)
remote: Compressing objects:  53% (110/206)
remote: Compressing objects:  54% (112/206)
remote: Compressing objects:  55% (114/206)
remote: Compressing objects:  56% (116/206)
remote: Compressing objects:  57% (118/206)
remote: Compressing objects:  58% (120/206)
remote: Compressing objects:  59% (122/206)
remote: Compressing objects:  60% (124/206)
remote: Compressing objects:  61% (126/206)
remote: Compressing objects:  62% (128/206)
remote: Compressing objects:  63% (130/206)
remote: Compressing objects:  64% (132/206)
remote: Compressing objects:  65% (134/206)
remote: Compressing objects:  66% (136/206)
remote: Compressing objects:  67% (139/206)
remote: Compressing objects:  68% (141/206)
remote: Compressing objects:  69% (143/206)
remote: Compressing objects:  70% (145/206)
remote: Compressing objects:  71% (147/206)
remote: Compressing objects:  72% (149/206)
remote: Compressing objects:  73% (151/206)
remote: Compressing objects:  74% (153/206)
remote: Compressing objects:  75% (155/206)
remote: Compressing objects:  76% (157/206)
remote: Compressing objects:  77% (159/206)
remote: Compressing objects:  78% (161/206)
remote: Compressing objects:  79% (163/206)
remote: Compressing objects:  80% (165/206)
remote: Compressing objects:  81% (167/206)
remote: Compressing objects:  82% (169/206)
remote: Compressing objects:  83% (171/206)
remote: Compressing objects:  84% (174/206)
remote: Compressing objects:  85% (176/206)
remote: Compressing objects:  86% (178/206)
remote: Compressing objects:  87% (180/206)
remote: Compressing objects:  88% (182/206)
remote: Compressing objects:  89% (184/206)
remote: Compressing objects:  90% (186/206)
remote: Compressing objects:  91% (188/206)
remote: Compressing objects:  92% (190/206)
remote: Compressing objects:  93% (192/206)
remote: Compressing objects:  94% (194/206)
remote: Compressing objects:  95% (196/206)
remote: Compressing objects:  96% (198/206)
remote: Compressing objects:  97% (200/206)
remote: Compressing objects:  98% (202/206)
remote: Compressing objects:  99% (204/206)
remote: Compressing objects: 100% (206/206)
remote: Compressing objects: 100% (206/206), done.
Receiving objects:   0% (1/4648)
Receiving objects:   1% (47/4648)
Receiving objects:   2% (93/4648)
Receiving objects:   3% (140/4648)
Receiving objects:   4% (186/4648)
Receiving objects:   5% (233/4648)
Receiving objects:   6% (279/4648)
Receiving objects:   7% (326/4648)
Receiving objects:   8% (372/4648)
Receiving objects:   9% (419/4648)
Receiving objects:  10% (465/4648), 39.32 MiB | 78.63 MiB/s
Receiving objects:  11% (512/4648), 39.32 MiB | 78.63 MiB/s
Receiving objects:  11% (537/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  12% (558/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  13% (605/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  14% (651/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  15% (698/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  16% (744/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  17% (791/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  18% (837/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  19% (884/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  20% (930/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  21% (977/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  22% (1023/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  23% (1070/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  24% (1116/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  25% (1162/4648), 70.91 MiB | 70.97 MiB/s
Receiving objects:  26% (1209/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  27% (1255/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  28% (1302/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  29% (1348/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  30% (1395/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  31% (1441/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  32% (1488/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  33% (1534/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  34% (1581/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  35% (1627/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  36% (1674/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  37% (1720/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  38% (1767/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  39% (1813/4648), 90.88 MiB | 60.62 MiB/s
Receiving objects:  39% (1820/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  40% (1860/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  41% (1906/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  42% (1953/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  43% (1999/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  44% (2046/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  45% (2092/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  46% (2139/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  47% (2185/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  48% (2232/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  49% (2278/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  50% (2324/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  51% (2371/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  52% (2417/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  53% (2464/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  54% (2510/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  55% (2557/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  56% (2603/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  57% (2650/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  58% (2696/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  59% (2743/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  60% (2789/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  61% (2836/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  62% (2882/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  63% (2929/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  64% (2975/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  65% (3022/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  66% (3068/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  67% (3115/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  68% (3161/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  69% (3208/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  70% (3254/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  71% (3301/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  72% (3347/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  73% (3394/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  74% (3440/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  75% (3486/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  76% (3533/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  77% (3579/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  78% (3626/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  79% (3672/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  80% (3719/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  81% (3765/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  82% (3812/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  83% (3858/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  84% (3905/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  85% (3951/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  86% (3998/4648), 116.05 MiB | 58.05 MiB/s
Receiving objects:  87% (4044/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  88% (4091/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  89% (4137/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  90% (4184/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  91% (4230/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  92% (4277/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  93% (4323/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  94% (4370/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  95% (4416/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  96% (4463/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  97% (4509/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  98% (4556/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects:  99% (4602/4648), 146.07 MiB | 58.45 MiB/s
remote: Total 4648 (delta 250), reused 109 (delta 109), pack-reused 4333 (from 2)
Receiving objects: 100% (4648/4648), 146.07 MiB | 58.45 MiB/s
Receiving objects: 100% (4648/4648), 168.05 MiB | 57.61 MiB/s, done.
Resolving deltas:   0% (0/2544)
Resolving deltas:   1% (26/2544)
Resolving deltas:   2% (51/2544)
Resolving deltas:   3% (77/2544)
Resolving deltas:   4% (103/2544)
Resolving deltas:   5% (128/2544)
Resolving deltas:   6% (153/2544)
Resolving deltas:   7% (179/2544)
Resolving deltas:   8% (204/2544)
Resolving deltas:   9% (229/2544)
Resolving deltas:  10% (255/2544)
Resolving deltas:  11% (280/2544)
Resolving deltas:  12% (306/2544)
Resolving deltas:  13% (331/2544)
Resolving deltas:  14% (357/2544)
Resolving deltas:  15% (382/2544)
Resolving deltas:  16% (408/2544)
Resolving deltas:  17% (433/2544)
Resolving deltas:  18% (458/2544)
Resolving deltas:  19% (484/2544)
Resolving deltas:  20% (509/2544)
Resolving deltas:  21% (535/2544)
Resolving deltas:  22% (560/2544)
Resolving deltas:  23% (586/2544)
Resolving deltas:  24% (611/2544)
Resolving deltas:  25% (636/2544)
Resolving deltas:  26% (662/2544)
Resolving deltas:  27% (687/2544)
Resolving deltas:  28% (713/2544)
Resolving deltas:  29% (738/2544)
Resolving deltas:  30% (764/2544)
Resolving deltas:  31% (789/2544)
Resolving deltas:  32% (815/2544)
Resolving deltas:  33% (840/2544)
Resolving deltas:  34% (865/2544)
Resolving deltas:  35% (891/2544)
Resolving deltas:  36% (916/2544)
Resolving deltas:  37% (942/2544)
Resolving deltas:  38% (967/2544)
Resolving deltas:  39% (993/2544)
Resolving deltas:  40% (1018/2544)
Resolving deltas:  41% (1044/2544)
Resolving deltas:  42% (1069/2544)
Resolving deltas:  43% (1094/2544)
Resolving deltas:  44% (1120/2544)
Resolving deltas:  45% (1145/2544)
Resolving deltas:  46% (1171/2544)
Resolving deltas:  47% (1196/2544)
Resolving deltas:  48% (1222/2544)
Resolving deltas:  49% (1247/2544)
Resolving deltas:  50% (1272/2544)
Resolving deltas:  51% (1298/2544)
Resolving deltas:  52% (1323/2544)
Resolving deltas:  53% (1349/2544)
Resolving deltas:  53% (1368/2544)
Resolving deltas:  54% (1374/2544)
Resolving deltas:  55% (1400/2544)
Resolving deltas:  56% (1425/2544)
Resolving deltas:  57% (1451/2544)
Resolving deltas:  58% (1476/2544)
Resolving deltas:  59% (1501/2544)
Resolving deltas:  60% (1527/2544)
Resolving deltas:  61% (1552/2544)
Resolving deltas:  62% (1578/2544)
Resolving deltas:  63% (1603/2544)
Resolving deltas:  64% (1629/2544)
Resolving deltas:  65% (1654/2544)
Resolving deltas:  66% (1680/2544)
Resolving deltas:  67% (1705/2544)
Resolving deltas:  68% (1730/2544)
Resolving deltas:  69% (1756/2544)
Resolving deltas:  70% (1781/2544)
Resolving deltas:  71% (1807/2544)
Resolving deltas:  72% (1832/2544)
Resolving deltas:  73% (1858/2544)
Resolving deltas:  74% (1883/2544)
Resolving deltas:  75% (1908/2544)
Resolving deltas:  76% (1934/2544)
Resolving deltas:  77% (1959/2544)
Resolving deltas:  78% (1985/2544)
Resolving deltas:  79% (2010/2544)
Resolving deltas:  80% (2036/2544)
Resolving deltas:  81% (2061/2544)
Resolving deltas:  82% (2087/2544)
Resolving deltas:  83% (2112/2544)
Resolving deltas:  84% (2137/2544)
Resolving deltas:  85% (2163/2544)
Resolving deltas:  86% (2188/2544)
Resolving deltas:  87% (2214/2544)
Resolving deltas:  88% (2239/2544)
Resolving deltas:  89% (2266/2544)
Resolving deltas:  90% (2290/2544)
Resolving deltas:  91% (2316/2544)
Resolving deltas:  92% (2341/2544)
Resolving deltas:  93% (2366/2544)
Resolving deltas:  94% (2392/2544)
Resolving deltas:  95% (2417/2544)
Resolving deltas:  96% (2443/2544)
Resolving deltas:  97% (2468/2544)
Resolving deltas:  98% (2494/2544)
Resolving deltas:  99% (2519/2544)
Resolving deltas: 100% (2544/2544)
Resolving deltas: 100% (2544/2544), 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 7.61 s, sys: 224 ms, total: 7.83 s
Wall time: 13.7 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 279
2 repo-file-count SGA-META-0003 int 0 Total number of files tracked within the repos... None None None 190
3 repo-commit-time-range SGA-META-0004 tuple 0 Starting commit and most recent commit for the... None None None (2024-03-05, 2026-04-08)
4 repo-days-of-development SGA-META-0005 int 0 Integer representing the number of days of dev... None None None 765
... ... ... ... ... ... ... ... ... ...
95 repo-code-coverage-executed-lines SGA-SF-0009 int 0 Total lines covered code within repository giv... None None None None
96 repo-agg-info-entropy SGA-VS-0001 float 0 Aggregated information entropy for all files w... None None None 0.025446
97 repo-file-info-entropy SGA-VS-0002 dict 0 File-level information entropy for all files w... None None None {'.alexignore': 0.0010504530188751254, '.githu...
98 repo-agg-history-complexity-decay SGA-VS-0003 float 0 Aggregated history complexity with decay (HCM_... None None None 0.004248
99 repo-file-history-complexity-decay SGA-VS-0004 dict 0 File-level history complexity with decay (HCM_... None None None {'.github/ISSUE_TEMPLATE/feature.yml': 0.0, 's...

100 rows × 9 columns

# 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": 279
    },
    {
        "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": 190
    },
    {
        "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",
            "2026-04-08"
        ]
    },
    {
        "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": 765
    },
    {
        "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.36470588235294116
    },
    {
        "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": "2026-04-08T22:25:00.811291Z"
    },
    {
        "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+22713d8"
    },
    {
        "name": "repo-software-description",
        "id": "SGA-META-0018",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Short free-text description of the software project, assembled from repository hosting metadata (for example, GitHub or GitLab description), CITATION.cff abstract, or README content when available.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "An open-source handbook of applied guidance and tools for sustainable software development and maintenance."
    },
    {
        "name": "repo-docs-homepage-url",
        "id": "SGA-META-0019",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "URL of the primary documentation or project homepage, when available. Derived from repository hosting metadata (for example, homepage field on Git hosting platform APIs).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "https://software-gardening.github.io/almanack"
    },
    {
        "name": "repo-source-code-url",
        "id": "SGA-META-0020",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "Canonical URL pointing to the primary source code repository for the software project (for example, the Git hosting HTML URL).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "https://github.com/software-gardening/almanack"
    },
    {
        "name": "repo-issue-tracker-url",
        "id": "SGA-META-0021",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "URL for the primary issue tracker associated with the software project. This may be on the code hosting platform (for example, /issues on GitHub) or a separate tracker URL. A value of null indicates that no issue tracker URL was detected.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": "https://github.com/software-gardening/almanack/issues"
    },
    {
        "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": "2025-02-10T00:00:00.000000Z"
    },
    {
        "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": true
    },
    {
        "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": []
    },
    {
        "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": 10,
            "almanack-score-denominator": 11,
            "almanack-score": 0.9090909090909091
        }
    },
    {
        "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 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 or `.github/` directory 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 (for example, 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 (for example, 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 (for example, 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": 8
    },
    {
        "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": 6
    },
    {
        "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": 6
    },
    {
        "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": 22
    },
    {
        "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": 15
    },
    {
        "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": 23
    },
    {
        "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 (for example, 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": 67
    },
    {
        "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": 5
    },
    {
        "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": 22
    },
    {
        "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 (for example, 10.1234) and a suffix (for example, 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": 0,
        "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": 3
    },
    {
        "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": 422
    },
    {
        "name": "repo-check-notebook-dir",
        "id": "SGA-GL-0029",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Checks whether there is a dedicated `notebooks/` directory.",
        "correction_guidance": "Consider creating a dedicated `notebooks/` directory to organize your Jupyter notebooks.",
        "fix_why": "Having a `notebooks/` directory is required as it provides a clear and intuitive structure for your project. By placing all Jupyter notebooks in a dedicated notebooks directory, collaborators and future users can easily locate and understand the project's interactive analyses and explorations.",
        "fix_how": "Create a `notebooks/` directory in the root of your project and move all Jupyter notebook files into this directory. Update any references to the notebook files in your code or documentation to reflect the new location.",
        "result": false
    },
    {
        "name": "repo-check-notebook-exec-order",
        "id": "SGA-GL-0030",
        "result-type": "bool",
        "sustainability_correlation": 1,
        "description": "Checks whether the notebooks cells are executed in sequential order.",
        "correction_guidance": "Consider executing notebook cells in sequential order to improve reproducibility.",
        "fix_why": "Ensuring that notebook cells are executed in order improves readability and maintains reproducibility. Out-of-order execution can cause unexpected results, make it difficult to follow the workflow, and lead to errors when running or sharing the notebook with others.",
        "fix_how": "Open your notebook and use the \"Run All\" or \"Restart & Run All\" option in your notebook interface (such as Jupyter Notebook or JupyterLab) to execute all cells sequentially from top to bottom. This ensures that all variables and outputs are generated in the correct order, making the notebook reproducible and easier to understand for others.",
        "result": false
    },
    {
        "name": "repo-software-mentions-count",
        "id": "SGA-GL-0031",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Aggregated count of OpenAlex works matching the repository software name. This is based on OpenAlex work search using the project name. Unlike citation metrics, this includes name-based mentions that may not directly cite the repository DOI-linked work.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 4494
    },
    {
        "name": "repo-software-mentions",
        "id": "SGA-GL-0032",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Minimal OpenAlex reference details for works matching the repository software name, including query metadata and sampled matching works.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "query": "almanack",
            "mentions_count": 4494,
            "references": [
                {
                    "id": "https://openalex.org/W4300750523",
                    "title": "On the origin of species by means of natural selection, or, The preservation of favoured races in the struggle for life /",
                    "doi": "https://doi.org/10.5962/bhl.title.68064",
                    "publication_year": 1859,
                    "cited_by_count": 4379
                },
                {
                    "id": "https://openalex.org/W2123392156",
                    "title": "Jews and modern capitalism",
                    "doi": "https://doi.org/10.1522/cla.sow.jew",
                    "publication_year": 2005,
                    "cited_by_count": 252
                },
                {
                    "id": "https://openalex.org/W2765538454",
                    "title": "The Decline and Persistence of the Old Boy: Private Schools and Elite Recruitment 1897 to 2016",
                    "doi": "https://doi.org/10.1177/0003122417735742",
                    "publication_year": 2017,
                    "cited_by_count": 180
                },
                {
                    "id": "https://openalex.org/W2010266113",
                    "title": "A History of Epidemiologic Methods and Concepts",
                    "doi": "https://doi.org/10.1007/978-3-0348-7603-2",
                    "publication_year": 2004,
                    "cited_by_count": 173
                },
                {
                    "id": "https://openalex.org/W2170795007",
                    "title": "Productive Consumption in the Class-Mediated Construction of Domestic Masculinity: Do-It-Yourself (DIY) Home Improvement in Men's Identity Work",
                    "doi": "https://doi.org/10.1086/670238",
                    "publication_year": 2013,
                    "cited_by_count": 170
                },
                {
                    "id": "https://openalex.org/W2073645201",
                    "title": "<b>Language and gender:</b> Interdisciplinary perspectives. Ed. By Sara Mills. Harlow: Longman, 1995. Pp. xiv, 282.",
                    "doi": "https://doi.org/10.2307/417644",
                    "publication_year": 1998,
                    "cited_by_count": 152
                },
                {
                    "id": "https://openalex.org/W1607929292",
                    "title": "The Expedition of Humphry Clinker",
                    "doi": "https://doi.org/10.1093/owc/9780199538980.001.0001",
                    "publication_year": 2009,
                    "cited_by_count": 140
                },
                {
                    "id": "https://openalex.org/W1680531415",
                    "title": "The voyage of the 'Discovery'",
                    "doi": "https://doi.org/10.5962/bhl.title.61076",
                    "publication_year": 1905,
                    "cited_by_count": 123
                },
                {
                    "id": "https://openalex.org/W2921518941",
                    "title": "The Scottish Motor Neuron Disease Register: a prospective study of adult onset motor neuron disease in Scotland. Methodology, demography and clinical features of incident cases in 1989.",
                    "doi": "https://doi.org/10.1136/jnnp.55.7.536",
                    "publication_year": 1992,
                    "cited_by_count": 120
                },
                {
                    "id": "https://openalex.org/W52039798",
                    "title": "Risk aversion as a problem of conjoint measurement",
                    "doi": "https://doi.org/10.1017/cbo9780511609220.010",
                    "publication_year": 1988,
                    "cited_by_count": 111
                }
            ]
        }
    },
    {
        "name": "repo-funding-details",
        "id": "SGA-GL-0033",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Funding details for the software's DOI-linked work, derived from OpenAlex using the repository DOI.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "doi": "10.5281/zenodo.14765834",
            "source_work_id": "https://openalex.org/W6911960640",
            "doi_work_funding_records_count": 0,
            "doi_work_funding_amount_usd_total": 0.0,
            "doi_work_funding_sources_count": 0,
            "doi_work_unique_funders_count": 0,
            "doi_work_unique_funders": [],
            "funding_records": []
        }
    },
    {
        "name": "repo-funding-details-of-citing-works",
        "id": "SGA-GL-0034",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Funding details from OpenAlex works that cite the software's DOI-linked work.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "source_work_id": "https://openalex.org/W6911960640",
            "citing_works_count_total": 3,
            "citing_works_count_sampled": 3,
            "citing_works_with_funding_count": 1,
            "citing_works_funding_records_count_sampled": 3,
            "citing_works_funding_amount_usd_total_sampled": 0.0,
            "citing_works_funding_sources_count_sampled": 0,
            "citing_works_unique_funders_count_sampled": 2,
            "citing_works_unique_funders_sampled": [
                "https://openalex.org/F4320306230",
                "https://openalex.org/F4320306589"
            ],
            "sample_limit": 25,
            "references": [
                {
                    "id": "https://openalex.org/W4411649147",
                    "title": "Scalable data harmonization for single-cell image-based profiling with CytoTable",
                    "doi": "https://doi.org/10.1101/2025.06.19.660613",
                    "publication_year": 2025,
                    "cited_by_count": 6,
                    "funding_records_count": 3,
                    "funding_amount_usd_total": 0.0,
                    "funding_sources_count": 0,
                    "unique_funders_count": 2
                },
                {
                    "id": "https://openalex.org/W7104016306",
                    "title": "Sustaining Growth of Scientific Software with the Software Gardening Almanack",
                    "doi": "https://doi.org/10.5281/zenodo.17527521",
                    "publication_year": 2025,
                    "cited_by_count": 0,
                    "funding_records_count": 0,
                    "funding_amount_usd_total": 0.0,
                    "funding_sources_count": 0,
                    "unique_funders_count": 0
                },
                {
                    "id": "https://openalex.org/W7103994138",
                    "title": "Sustaining Growth of Scientific Software with the Software Gardening Almanack",
                    "doi": "https://doi.org/10.5281/zenodo.17527522",
                    "publication_year": 2025,
                    "cited_by_count": 0,
                    "funding_records_count": 0,
                    "funding_amount_usd_total": 0.0,
                    "funding_sources_count": 0,
                    "unique_funders_count": 0
                }
            ]
        }
    },
    {
        "name": "repo-funding-count",
        "id": "SGA-GL-0035",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of funding records on the OpenAlex work linked to the software project's DOI.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-funding-count-of-citing-works",
        "id": "SGA-GL-0036",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Sampled count of funding records across queried OpenAlex works that cite the software project's DOI-linked work.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 3
    },
    {
        "name": "repo-funding-amount-usd",
        "id": "SGA-GL-0037",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Estimated funding amount total in USD for the OpenAlex work linked to the software project's DOI. OpenAlex records with missing currency are treated as USD.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.0
    },
    {
        "name": "repo-funding-amount-usd-of-citing-works",
        "id": "SGA-GL-0038",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Estimated sampled funding amount total in USD across queried OpenAlex citing works linked to the software project's DOI work. OpenAlex records with missing currency are treated as USD.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.0
    },
    {
        "name": "repo-funding-amount-usd-combined",
        "id": "SGA-GL-0039",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Combined funding amount in USD, computed as: `repo-funding-amount-usd + repo-funding-amount-usd-of-citing-works`.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.0
    },
    {
        "name": "repo-funder-references-count",
        "id": "SGA-GL-0040",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of funder references discovered on the OpenAlex work linked to the software project's DOI.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-funder-references-count-of-citing-works",
        "id": "SGA-GL-0041",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of sampled funder references discovered across queried OpenAlex citing works.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-funder-references-count-combined",
        "id": "SGA-GL-0042",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Combined funder-reference count, computed as: `repo-funder-references-count + repo-funder-references-count-of-citing-works`.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-unique-funders-count",
        "id": "SGA-GL-0043",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of unique funders discovered on the OpenAlex work linked to the software project's DOI.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "name": "repo-unique-funders-count-of-citing-works",
        "id": "SGA-GL-0044",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of unique sampled funders discovered across queried OpenAlex citing works.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 2
    },
    {
        "name": "repo-unique-funders-count-combined",
        "id": "SGA-GL-0045",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Combined unique-funder count across DOI work and sampled citing works (set-union cardinality, not a simple sum).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 2
    },
    {
        "name": "repo-languages-line-counts",
        "id": "SGA-SF-0012",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Mapping from detected programming language name to an approximate line or byte count of source code for that language. Values are derived from repository hosting language statistics (for example, the GitHub languages API or ecosyste.ms mirrors).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "Jupyter Notebook": 1323525,
            "Python": 331878,
            "TeX": 18315,
            "Typst": 7599,
            "CSS": 419,
            "Jinja": 107
        }
    },
    {
        "name": "repo-languages-total-lines",
        "id": "SGA-SF-0013",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Aggregate total of language line/byte counts across all detected programming languages in the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 1681843
    },
    {
        "name": "repo-languages-count",
        "id": "SGA-SF-0014",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Number of distinct programming languages detected for the repository based on hosting platform language statistics.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 6
    },
    {
        "name": "repo-noncode-extension-line-counts",
        "id": "SGA-SF-0015",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "Mapping from non-programming file extension (for example, .md, .txt, .csv, .png) to an approximate line or size count for repository files with that extension. For text-like files this is a line count; for binary or undecodable files this is estimated from their byte size.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            "<no_ext>": 321,
            ".yml": 1781,
            ".ini": 31,
            ".yaml": 212,
            ".cff": 195,
            ".txt": 60,
            ".xml": 2113,
            ".svg": 1,
            ".json": 1295,
            ".lock": 4637,
            ".toml": 202,
            ".pdf": 14678257,
            ".png": 11469854,
            ".qmd": 125,
            ".odp": 59821889,
            ".css": 18,
            ".j2": 10,
            ".gif": 78106,
            ".jpeg": 206847,
            ".bib": 303,
            ".ipynb": 2923,
            ".parquet": 5576897,
            ".lcov": 999
        }
    },
    {
        "name": "repo-noncode-total-lines",
        "id": "SGA-SF-0016",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Aggregate total of approximate line or size counts across all detected non-programming-language files in the repository.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 91847076
    },
    {
        "name": "repo-noncode-extensions-count",
        "id": "SGA-SF-0017",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Number of distinct non-programming file extensions detected when scanning the repository tree.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 23
    },
    {
        "name": "repo-has-cli",
        "id": "SGA-SF-0018",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the software exposes at least one command-line interface (CLI) entrypoint, as detected from packaging metadata and common configuration files (for example, pyproject.toml or setup.cfg console_scripts).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": true
    },
    {
        "name": "repo-cli-entrypoints",
        "id": "SGA-SF-0019",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of CLI commands used to invoke the software, as inferred from packaging metadata (for example, [project.scripts], [tool.poetry.scripts], or console_scripts in setup.cfg).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": [
            "almanack"
        ]
    },
    {
        "name": "repo-topics",
        "id": "SGA-GL-0046",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of descriptive topics, labels, or tags associated with the software project as reported by the hosting platform (for example, GitHub repository topics) or mirrored metadata.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": [
            "open-source",
            "software-sustainability"
        ]
    },
    {
        "name": "repo-topics-count",
        "id": "SGA-GL-0047",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of descriptive topics, labels, or tags associated with the software project.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 2
    },
    {
        "name": "repo-environment-managers",
        "id": "SGA-SF-0021",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of detected environment management tools configured for the software project (for example, Poetry, Conda, Pipenv, or Nix). These tools manage the full environment including Python version pinning and isolated environment creation, as distinct from dependency-only tools captured in repo-dependency-managers.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-has-managed-environment",
        "id": "SGA-SF-0022",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the software project appears to use at least one explicit environment manager rather than relying solely on baseline language imports.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-dependency-managers",
        "id": "SGA-SF-0010",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "List of detected dependency management tools configured for the software project (for example, pip via requirements.txt, setup.py, or setup.cfg). Unlike environment managers, these tools declare dependencies but do not fully control the Python version or isolated environment creation.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-has-declared-dependencies",
        "id": "SGA-SF-0011",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the software project declares its dependencies via at least one dependency management file (for example, requirements.txt, setup.py, or setup.cfg), even if a full environment manager is not present.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-declared-python-versions",
        "id": "SGA-SF-0023",
        "result-type": "list",
        "sustainability_correlation": 0,
        "description": "Python version constraints declared by the project in packaging or environment configuration files (for example, pyproject.toml, environment.yml, or runtime.txt), normalized to a list of strings.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-cost-model",
        "id": "SGA-GL-0048",
        "result-type": "str",
        "sustainability_correlation": 0,
        "description": "High-level cost model for the software project (for example, free, open-source with paid support, freemium, or paid), as reported by external catalog or hosting metadata when available. A null value indicates that no cost model information was found.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": null
    },
    {
        "name": "repo-has-edam-owl",
        "id": "SGA-SF-0024",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the repository contains an EDAM ontology file (for example, edam.owl) used to describe software semantics or interoperability.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": false
    },
    {
        "name": "repo-has-biotools-json",
        "id": "SGA-SF-0025",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the repository includes a bio.tools JSON metadata file (for example, biotools.json) describing the software.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": false
    },
    {
        "name": "repo-has-codemeta-json",
        "id": "SGA-SF-0026",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the repository includes a CodeMeta JSON file (for example, codemeta.json) providing machine-readable software metadata.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": false
    },
    {
        "name": "repo-has-ro-crate-metadata-json",
        "id": "SGA-SF-0027",
        "result-type": "bool",
        "sustainability_correlation": 0,
        "description": "Indicates whether the repository includes an RO-Crate metadata file (for example, ro-crate-metadata.json) describing the research object or software package.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": false
    },
    {
        "name": "repo-software-metadata-files-count",
        "id": "SGA-SF-0028",
        "result-type": "int",
        "sustainability_correlation": 0,
        "description": "Count of distinct software description metadata specifications detected in the repository (for example, EDAM, bio.tools, CodeMeta, RO-Crate).",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0
    },
    {
        "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.92
    },
    {
        "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": 92
    },
    {
        "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": 8
    },
    {
        "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.025446111697740775
    },
    {
        "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": 0.0010504530188751254,
            ".github/CODEOWNERS": 0.00473784254513168,
            ".github/ISSUE_TEMPLATE/bug.yml": 0.025921725166461854,
            ".github/ISSUE_TEMPLATE/config.yml": 0.0010504530188751254,
            ".github/ISSUE_TEMPLATE/feature.yml": 0.02351169719292215,
            ".github/PULL_REQUEST_TEMPLATE.md": 0.013755346828658274,
            ".github/actions/install-node-env/action.yml": 0.005842796491098808,
            ".github/actions/install-python-env/action.yml": 0.011252655790841296,
            ".github/dependabot.yml": 0.013139293373957039,
            ".github/release-drafter.yml": 0.008292124468600242,
            ".github/workflows/deploy-book.yml": 0.014970230030121857,
            ".github/workflows/draft-release.yml": 0.008965847831378321,
            ".github/workflows/pre-commit-checks.yml": 0.011252655790841296,
            ".github/workflows/publish-pypi.yml": 0.010285106126099506,
            ".github/workflows/pytest-tests.yml": 0.015867404540444868,
            ".github/workflows/test-links.yml": 0.008292124468600242,
            ".gitignore": 0.042878865218402,
            ".linkcheckerrc.ini": 0.006911831664924934,
            ".pre-commit-config.yaml": 0.0539819232865232,
            ".pre-commit-hooks.yaml": 0.005110667156035556,
            ".vale.ini": 0.005842796491098808,
            "CITATION.cff": 0.052906087671691505,
            "CODE_OF_CONDUCT.md": 0.00150824091859155,
            "CONTRIBUTING.md": 0.00150824091859155,
            "LICENSE": 0.010609580377478531,
            "LICENSE.txt": 0.010609580377478531,
            "README.md": 0.046744468885189634,
            "coverage.xml": 0.2941381079186846,
            "docs/readme.md": 0.00150824091859155,
            "media/coverage-badge.svg": 0.0005636555310346729,
            "pa11y.json": 0.003190401396729175,
            "package-lock.json": 0.21397525325800454,
            "package.json": 0.0023721305306465485,
            "poetry.lock": 0.4433129045922632,
            "pyproject.toml": 0.054410307226891004,
            "src/almanack/__init__.py": 0.010609580377478531,
            "src/almanack/batch_processing.py": 0.0613276424285038,
            "src/almanack/book.py": 0.022420979722492757,
            "src/almanack/cli.py": 0.08065364455694447,
            "src/almanack/git.py": 0.1044264873736187,
            "src/almanack/metrics/data.py": 0.29464021208260005,
            "src/almanack/metrics/entropy/calculate_entropy.py": 0.08360931484371593,
            "src/almanack/metrics/entropy/processing_repositories.py": 0.022420979722492757,
            "src/almanack/metrics/garden_lattice/connectedness.py": 0.12493953935399717,
            "src/almanack/metrics/garden_lattice/practicality.py": 0.034322464854501,
            "src/almanack/metrics/garden_lattice/understanding.py": 0.019067135545518896,
            "src/almanack/metrics/metrics.yml": 0.2038793951180007,
            "src/almanack/metrics/notebooks.py": 0.06719257662115181,
            "src/almanack/metrics/programming_extensions.yml": 0.015867404540444868,
            "src/almanack/metrics/remote.py": 0.04985532625515682,
            "src/almanack/reporting/report.py": 0.03578765798005875,
            "src/book/_config.yml": 0.01762915852806283,
            "src/book/_ext/__init__.py": 0.0,
            "src/book/_ext/gen_check_pages.py": 0.03083386380297262,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 0.004359970845321996,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 0.024052391202009565,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 0.04830770607547392,
            "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.0369959070398229,
            "src/book/_posters/2025/readme.md": 0.019635265065732377,
            "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.007261369075726502,
            "src/book/_templates/check_template.md.j2": 0.004359970845321996,
            "src/book/_toc.yml": 0.013755346828658274,
            "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.050513962729421776,
            "src/book/garden-circle/garden-circle.md": 0.0023721305306465485,
            "src/book/garden-circle/garden-map.md": 0.01556961627998103,
            "src/book/garden-circle/package-api.md": 0.03554463720574443,
            "src/book/garden-circle/pavilion.md": 0.01282897711195816,
            "src/book/garden-lattice/garden-lattice.md": 0.014970230030121857,
            "src/book/garden-lattice/understanding.md": 0.03505719401095612,
            "src/book/introduction.md": 0.042878865218402,
            "src/book/references.bib": 0.0748041612585015,
            "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.2730680989538714,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.05182314341127235,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.041954210736177826,
            "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/images/cdf_repository_inactivity_by_last_commit_date.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/primary-language-counts.png": 0.0,
            "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/batch_1.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_10.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_11.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_12.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_13.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_14.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_15.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_16.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_17.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_18.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_19.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_2.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_20.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_21.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_22.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_23.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_24.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_25.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_26.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_27.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_28.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_29.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_3.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_30.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_31.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_32.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_33.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_34.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_35.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_36.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_37.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_38.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_39.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_4.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_40.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_41.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_42.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_43.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_44.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_45.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_46.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_47.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_48.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_49.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_5.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_6.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_7.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_8.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_9.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/understanding-pubmed-github-repos.ipynb": 0.14944169418257866,
            "src/book/seed-bank/seed-bank.md": 0.0023721305306465485,
            "src/book/software-forest/software-forest.md": 0.015270567880137304,
            "src/book/verdant-sundial/verdant-sundial.md": 0.01556961627998103,
            "styles/config/vocabularies/almanack/accept.txt": 0.011888333537571912,
            "tests/__init__.py": 0.0,
            "tests/conftest.py": 0.046744468885189634,
            "tests/data/almanack/coverage/python/coverage.json": 0.0005636555310346729,
            "tests/data/almanack/coverage/python/coverage.lcov": 0.1805549249646856,
            "tests/data/almanack/repo_setup/create_repo.py": 0.06838328070532725,
            "tests/data/almanack/repo_setup/insert_code.py": 0.01645931145625283,
            "tests/data/jupyter-book/ordered-nb.ipynb": 0.04148961527586044,
            "tests/data/jupyter-book/sandbox.md": 0.006559031114339717,
            "tests/data/jupyter-book/unordered-nb.ipynb": 0.04148961527586044,
            "tests/metrics/test_calculate_entropy.py": 0.06798720890853503,
            "tests/metrics/test_data.py": 0.27116090790039515,
            "tests/metrics/test_garden_lattice.py": 0.05988311278486089,
            "tests/metrics/test_remote.py": 0.011252655790841296,
            "tests/test_almanack.py": 0.01282897711195816,
            "tests/test_batch.py": 0.043797605254590775,
            "tests/test_build.py": 0.022420979722492757,
            "tests/test_cli.py": 0.04985532625515682,
            "tests/test_git.py": 0.10459364470636584,
            "tests/test_notebooks.py": 0.08543589299867997,
            "tests/utils.py": 0.01282897711195816,
            "uv.lock": 0.00150824091859155
        }
    },
    {
        "name": "repo-agg-history-complexity-decay",
        "id": "SGA-VS-0003",
        "result-type": "float",
        "sustainability_correlation": 0,
        "description": "Aggregated history complexity with decay (HCM_1d) for all files within a repository over a range between two commits (by default, the first and latest commits). Uses one-hour burst periods and exponential decay.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": 0.00424752946917333
    },
    {
        "name": "repo-file-history-complexity-decay",
        "id": "SGA-VS-0004",
        "result-type": "dict",
        "sustainability_correlation": 0,
        "description": "File-level history complexity with decay (HCM_1d) over a range between two commits (by default, the first and latest commits), using one-hour burst periods and exponential decay.",
        "correction_guidance": null,
        "fix_why": null,
        "fix_how": null,
        "result": {
            ".github/ISSUE_TEMPLATE/feature.yml": 0.0,
            "src/book/software-forest/software-forest.md": 0.0,
            "src/book/_posters/2025/images/spacer.png": 0.0,
            "src/book/assets/Sundial_2916_HDR.jpeg": 0.0,
            "tests/metrics/test_remote.py": 4.124187747976083e-84,
            "src/book/_posters/2025/images/dbmi.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_38.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_9.parquet": 0.0,
            "CITATION.cff": 8.093641717873496e-234,
            ".github/workflows/draft-release.yml": 9.73658257802949e-10,
            "src/book/_posters/2025/images/forest_modified.png": 0.0,
            "docs/readme.md": 0.0,
            "CONTRIBUTING.md": 0.0,
            "src/almanack/metrics/garden_lattice/understanding.py": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_32.parquet": 0.0,
            "tests/test_almanack.py": 0.0,
            "src/book/introduction.md": 4.61424439076e-313,
            ".github/workflows/publish-pypi.yml": 1.1761074384935927e-138,
            "src/book/garden-circle/contributing.md": 0.0,
            "tests/data/almanack/repo_setup/insert_code.py": 3.166382929199427e-84,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_1.parquet": 0.0,
            "src/book/_posters/2025/images/almanack-notebook.png": 0.0,
            "src/book/_posters/2025/almanack-2025-poster.pdf": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_26.parquet": 0.0,
            ".github/workflows/pre-commit-checks.yml": 9.73658257802949e-10,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_20.parquet": 0.0,
            "src/almanack/__init__.py": 1.3429337830516744e-102,
            "src/book/seed-bank/pubmed-github-repositories/images/primary-language-counts.png": 0.0,
            "src/book/garden-circle/garden-map.md": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_36.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_14.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_18.parquet": 0.0,
            "tests/data/jupyter-book/sandbox.md": 0.0,
            ".github/CODEOWNERS": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0,
            "tests/metrics/test_data.py": 2.2847255091467947e-10,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 7.776665491559453e-241,
            "src/book/_posters/2025/images/header-combined-images.png": 0.0,
            ".github/workflows/deploy-book.yml": 1.1761074384935927e-138,
            "src/book/assets/software-gardening-logo.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links_with_github_data.parquet": 0.0,
            "tests/data/almanack/repo_setup/create_repo.py": 0.0,
            ".gitignore": 3.0399862739333575e-66,
            "tests/metrics/test_garden_lattice.py": 7.54919329176451e-29,
            "src/book/_ext/__init__.py": 0.0,
            "src/almanack/metrics/garden_lattice/connectedness.py": 1.242036460693247e-28,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_2.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_6.parquet": 0.0,
            "src/almanack/metrics/notebooks.py": 9.90208637851198e-60,
            ".vale.ini": 0.0,
            "src/almanack/book.py": 8.68576668952685e-252,
            "src/book/favicon.png": 0.0,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 2.1952905696061204e-241,
            "src/almanack/metrics/metrics.yml": 1.836675887411304e-10,
            "tests/metrics/test_calculate_entropy.py": 1.1093259884278974e-33,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_22.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_16.parquet": 0.0,
            ".github/ISSUE_TEMPLATE/config.yml": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/cdf_repository_inactivity_by_last_commit_date.png": 0.0,
            "tests/data/almanack/coverage/python/coverage.json": 0.0,
            "src/book/_posters/2025/images/sustainable-horizons-institute-logo.png": 0.0,
            "tests/test_notebooks.py": 8.571264692224804e-60,
            "src/book/_posters/2025/images/title-text.png": 0.0,
            "src/book/_posters/2025/images/almanack-handbook.png": 0.0,
            "pa11y.json": 0.0,
            "package-lock.json": 0.31127812445913283,
            "tests/test_cli.py": 5.984300224273795e-102,
            "src/book/assets/640px-Forgard2-003.gif": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_46.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_33.parquet": 0.0,
            "src/book/_posters/2025/images/cu-anschutz-short.png": 0.0,
            ".github/dependabot.yml": 7.779760658899612e-53,
            "tests/utils.py": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_13.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_25.parquet": 0.0,
            "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.pdf": 0.0,
            "src/book/_posters/2025/readme.md": 6.903142480791043e-241,
            "coverage.xml": 1.2653315547164482e-28,
            "src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_17.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_40.parquet": 0.0,
            "CODE_OF_CONDUCT.md": 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/batch_23.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_35.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_45.parquet": 0.0,
            "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_3.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0,
            "src/almanack/metrics/programming_extensions.yml": 5.7630974543822435e-11,
            "src/book/assets/software-gardening-almanack-logo.png": 0.0,
            "src/book/_posters/2025/images/roadmap.png": 0.0,
            ".linkcheckerrc.ini": 0.0,
            "src/book/assets/software-lifecycle.png": 0.0,
            ".alexignore": 0.0,
            "src/book/_ext/gen_check_pages.py": 1.4746358153333636e-256,
            "src/book/_posters/2025/images/software-lifecycle.png": 0.0,
            "LICENSE.txt": 0.0,
            "src/book/_static/custom.css": 0.0,
            "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 9.779521244665354e-241,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_48.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_5.parquet": 0.0,
            "src/almanack/git.py": 2.3327366093663093e-65,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_34.parquet": 0.0,
            ".github/workflows/test-links.yml": 1.1761074384935927e-138,
            "src/almanack/metrics/data.py": 2.219479213500492e-10,
            "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0,
            "src/book/garden-lattice/understanding.md": 6.9935998811e-313,
            "pyproject.toml": 9.762615231305445e-10,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_41.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_42.parquet": 0.0,
            "poetry.lock": 5.226298552021884e-10,
            "src/book/assets/almanack-influencing-software.png": 0.0,
            "src/book/assets/garden-lattice-understanding-transfer.png": 0.0,
            "styles/config/vocabularies/almanack/accept.txt": 4.621951150644543e-234,
            ".github/actions/install-node-env/action.yml": 0.0,
            "src/book/_templates/check_template.md.j2": 3.0509312319524667e-257,
            "src/almanack/metrics/garden_lattice/practicality.py": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_49.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_8.parquet": 0.0,
            "tests/__init__.py": 0.0,
            "src/book/references.bib": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_47.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_24.parquet": 0.0,
            ".github/ISSUE_TEMPLATE/bug.yml": 0.0,
            "README.md": 5.446185207743722e-66,
            "src/book/garden-circle/package-api.md": 1.704044913531203e-102,
            "tests/test_build.py": 5.9408719361e-313,
            "media/coverage-badge.svg": 2.6521360278808826e-30,
            "src/almanack/cli.py": 3.656524144225166e-65,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_19.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_28.parquet": 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/gather-pubmed-repos/generate_data.py": 0.0,
            ".github/release-drafter.yml": 0.0,
            "src/book/_posters/2025/images/entropy-for-repos.png": 0.0,
            "src/book/seed-bank/seed-bank.md": 0.0,
            "tests/data/jupyter-book/ordered-nb.ipynb": 6.096705647635182e-65,
            "src/book/_posters/2025/images/sga-qr-text.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/understanding-pubmed-github-repos.ipynb": 3.177097784119179e-101,
            "src/book/_toc.yml": 1.4712808974846264e-257,
            "tests/data/jupyter-book/unordered-nb.ipynb": 6.096705647635182e-65,
            "src/book/_posters/2025/images/seed-bank-entropy-pubmed.png": 0.0,
            "src/book/verdant-sundial/verdant-sundial.md": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_39.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_7.parquet": 0.0,
            "tests/test_batch.py": 1.567795050561876e-101,
            "src/book/_posters/2025/images/sga-qr.png": 0.0,
            "tests/data/almanack/coverage/python/coverage.lcov": 0.0,
            "src/book/_posters/2025/images/bssw-logo-w-background.png": 0.0,
            "src/book/_posters/2025/images/almanack-package.png": 0.0,
            "package.json": 1.0851195512460224e-39,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_12.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_29.parquet": 0.0,
            "src/book/_posters/2025/poster.qmd": 6.81599637877667e-234,
            "src/book/garden-lattice/garden-lattice.md": 0.0,
            ".github/workflows/pytest-tests.yml": 2.0193270781516324e-138,
            "src/almanack/reporting/report.py": 0.0,
            "src/book/garden-circle/pavilion.md": 7.840729255626729e-234,
            "uv.lock": 4.2848712799328184e-60,
            "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0,
            ".github/PULL_REQUEST_TEMPLATE.md": 0.0,
            "src/book/_posters/2025/images/almanack-package-and-handbook.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_15.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_21.parquet": 0.0,
            ".github/actions/install-python-env/action.yml": 0.0,
            "tests/test_git.py": 6.177087927498746e-164,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_44.parquet": 0.0,
            "LICENSE": 0.0,
            "src/book/garden-circle/garden-circle.md": 0.0,
            "src/book/assets/xkcd_dependency.png": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_10.parquet": 0.0,
            "src/book/_config.yml": 1.4712808974846264e-257,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_43.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_30.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_4.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_11.parquet": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_27.parquet": 0.0,
            "src/almanack/metrics/entropy/calculate_entropy.py": 1.3111550768232947e-33,
            ".pre-commit-hooks.yaml": 1.8280445215101085e-60,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_31.parquet": 0.0,
            "tests/conftest.py": 8.114583629457315e-165,
            ".pre-commit-config.yaml": 0.5000000000150463,
            "src/almanack/batch_processing.py": 2.018981709718797e-101,
            "src/almanack/metrics/entropy/processing_repositories.py": 1.4631435886725338e-251,
            "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_37.parquet": 0.0,
            "src/almanack/metrics/remote.py": 2.741657526628264e-81,
            "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.odp": 0.0,
            "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0
        }
    }
]
%%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": 279}, {"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": 190}, {"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", "2026-04-08"]}, {"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": 765}, {"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.36470588235294116}, {"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": "2026-04-08T22:25:22.769739Z"}, {"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+22713d8"}, {"name": "repo-software-description", "id": "SGA-META-0018", "result-type": "str", "sustainability_correlation": 0, "description": "Short free-text description of the software project, assembled from repository hosting metadata (for example, GitHub or GitLab description), CITATION.cff abstract, or README content when available.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "An open-source handbook of applied guidance and tools for sustainable software development and maintenance."}, {"name": "repo-docs-homepage-url", "id": "SGA-META-0019", "result-type": "str", "sustainability_correlation": 0, "description": "URL of the primary documentation or project homepage, when available. Derived from repository hosting metadata (for example, homepage field on Git hosting platform APIs).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "https://software-gardening.github.io/almanack"}, {"name": "repo-source-code-url", "id": "SGA-META-0020", "result-type": "str", "sustainability_correlation": 0, "description": "Canonical URL pointing to the primary source code repository for the software project (for example, the Git hosting HTML URL).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "https://github.com/software-gardening/almanack"}, {"name": "repo-issue-tracker-url", "id": "SGA-META-0021", "result-type": "str", "sustainability_correlation": 0, "description": "URL for the primary issue tracker associated with the software project. This may be on the code hosting platform (for example, /issues on GitHub) or a separate tracker URL. A value of null indicates that no issue tracker URL was detected.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": "https://github.com/software-gardening/almanack/issues"}, {"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": "2025-02-10T00:00:00.000000Z"}, {"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": true}, {"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": []}, {"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": 10, "almanack-score-denominator": 11, "almanack-score": 0.9090909090909091}}, {"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 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 or `.github/` directory 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 (for example, 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 (for example, 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 (for example, 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": 8}, {"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": 6}, {"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": 6}, {"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": 22}, {"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": 15}, {"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": 23}, {"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 (for example, 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": 67}, {"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": 5}, {"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": 22}, {"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 (for example, 10.1234) and a suffix (for example, 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": 0, "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": 3}, {"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": 422}, {"name": "repo-check-notebook-dir", "id": "SGA-GL-0029", "result-type": "bool", "sustainability_correlation": 0, "description": "Checks whether there is a dedicated `notebooks/` directory.", "correction_guidance": "Consider creating a dedicated `notebooks/` directory to organize your Jupyter notebooks.", "fix_why": "Having a `notebooks/` directory is required as it provides a clear and intuitive structure for your project. By placing all Jupyter notebooks in a dedicated notebooks directory, collaborators and future users can easily locate and understand the project's interactive analyses and explorations.", "fix_how": "Create a `notebooks/` directory in the root of your project and move all Jupyter notebook files into this directory. Update any references to the notebook files in your code or documentation to reflect the new location.", "result": false}, {"name": "repo-check-notebook-exec-order", "id": "SGA-GL-0030", "result-type": "bool", "sustainability_correlation": 1, "description": "Checks whether the notebooks cells are executed in sequential order.", "correction_guidance": "Consider executing notebook cells in sequential order to improve reproducibility.", "fix_why": "Ensuring that notebook cells are executed in order improves readability and maintains reproducibility. Out-of-order execution can cause unexpected results, make it difficult to follow the workflow, and lead to errors when running or sharing the notebook with others.", "fix_how": "Open your notebook and use the \"Run All\" or \"Restart & Run All\" option in your notebook interface (such as Jupyter Notebook or JupyterLab) to execute all cells sequentially from top to bottom. This ensures that all variables and outputs are generated in the correct order, making the notebook reproducible and easier to understand for others.", "result": false}, {"name": "repo-software-mentions-count", "id": "SGA-GL-0031", "result-type": "int", "sustainability_correlation": 0, "description": "Aggregated count of OpenAlex works matching the repository software name. This is based on OpenAlex work search using the project name. Unlike citation metrics, this includes name-based mentions that may not directly cite the repository DOI-linked work.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 4494}, {"name": "repo-software-mentions", "id": "SGA-GL-0032", "result-type": "dict", "sustainability_correlation": 0, "description": "Minimal OpenAlex reference details for works matching the repository software name, including query metadata and sampled matching works.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"query": "almanack", "mentions_count": 4494, "references": [{"id": "https://openalex.org/W4300750523", "title": "On the origin of species by means of natural selection, or, The preservation of favoured races in the struggle for life /", "doi": "https://doi.org/10.5962/bhl.title.68064", "publication_year": 1859, "cited_by_count": 4379}, {"id": "https://openalex.org/W2123392156", "title": "Jews and modern capitalism", "doi": "https://doi.org/10.1522/cla.sow.jew", "publication_year": 2005, "cited_by_count": 252}, {"id": "https://openalex.org/W2765538454", "title": "The Decline and Persistence of the Old Boy: Private Schools and Elite Recruitment 1897 to 2016", "doi": "https://doi.org/10.1177/0003122417735742", "publication_year": 2017, "cited_by_count": 180}, {"id": "https://openalex.org/W2010266113", "title": "A History of Epidemiologic Methods and Concepts", "doi": "https://doi.org/10.1007/978-3-0348-7603-2", "publication_year": 2004, "cited_by_count": 173}, {"id": "https://openalex.org/W2170795007", "title": "Productive Consumption in the Class-Mediated Construction of Domestic Masculinity: Do-It-Yourself (DIY) Home Improvement in Men's Identity Work", "doi": "https://doi.org/10.1086/670238", "publication_year": 2013, "cited_by_count": 170}, {"id": "https://openalex.org/W2073645201", "title": "<b>Language and gender:</b> Interdisciplinary perspectives. Ed. By Sara Mills. Harlow: Longman, 1995. Pp. xiv, 282.", "doi": "https://doi.org/10.2307/417644", "publication_year": 1998, "cited_by_count": 152}, {"id": "https://openalex.org/W1607929292", "title": "The Expedition of Humphry Clinker", "doi": "https://doi.org/10.1093/owc/9780199538980.001.0001", "publication_year": 2009, "cited_by_count": 140}, {"id": "https://openalex.org/W1680531415", "title": "The voyage of the 'Discovery'", "doi": "https://doi.org/10.5962/bhl.title.61076", "publication_year": 1905, "cited_by_count": 123}, {"id": "https://openalex.org/W2921518941", "title": "The Scottish Motor Neuron Disease Register: a prospective study of adult onset motor neuron disease in Scotland. Methodology, demography and clinical features of incident cases in 1989.", "doi": "https://doi.org/10.1136/jnnp.55.7.536", "publication_year": 1992, "cited_by_count": 120}, {"id": "https://openalex.org/W52039798", "title": "Risk aversion as a problem of conjoint measurement", "doi": "https://doi.org/10.1017/cbo9780511609220.010", "publication_year": 1988, "cited_by_count": 111}]}}, {"name": "repo-funding-details", "id": "SGA-GL-0033", "result-type": "dict", "sustainability_correlation": 0, "description": "Funding details for the software's DOI-linked work, derived from OpenAlex using the repository DOI.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"doi": "10.5281/zenodo.14765834", "source_work_id": "https://openalex.org/W6911960640", "doi_work_funding_records_count": 0, "doi_work_funding_amount_usd_total": 0.0, "doi_work_funding_sources_count": 0, "doi_work_unique_funders_count": 0, "doi_work_unique_funders": [], "funding_records": []}}, {"name": "repo-funding-details-of-citing-works", "id": "SGA-GL-0034", "result-type": "dict", "sustainability_correlation": 0, "description": "Funding details from OpenAlex works that cite the software's DOI-linked work.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"source_work_id": "https://openalex.org/W6911960640", "citing_works_count_total": 3, "citing_works_count_sampled": 3, "citing_works_with_funding_count": 1, "citing_works_funding_records_count_sampled": 3, "citing_works_funding_amount_usd_total_sampled": 0.0, "citing_works_funding_sources_count_sampled": 0, "citing_works_unique_funders_count_sampled": 2, "citing_works_unique_funders_sampled": ["https://openalex.org/F4320306230", "https://openalex.org/F4320306589"], "sample_limit": 25, "references": [{"id": "https://openalex.org/W4411649147", "title": "Scalable data harmonization for single-cell image-based profiling with CytoTable", "doi": "https://doi.org/10.1101/2025.06.19.660613", "publication_year": 2025, "cited_by_count": 6, "funding_records_count": 3, "funding_amount_usd_total": 0.0, "funding_sources_count": 0, "unique_funders_count": 2}, {"id": "https://openalex.org/W7104016306", "title": "Sustaining Growth of Scientific Software with the Software Gardening Almanack", "doi": "https://doi.org/10.5281/zenodo.17527521", "publication_year": 2025, "cited_by_count": 0, "funding_records_count": 0, "funding_amount_usd_total": 0.0, "funding_sources_count": 0, "unique_funders_count": 0}, {"id": "https://openalex.org/W7103994138", "title": "Sustaining Growth of Scientific Software with the Software Gardening Almanack", "doi": "https://doi.org/10.5281/zenodo.17527522", "publication_year": 2025, "cited_by_count": 0, "funding_records_count": 0, "funding_amount_usd_total": 0.0, "funding_sources_count": 0, "unique_funders_count": 0}]}}, {"name": "repo-funding-count", "id": "SGA-GL-0035", "result-type": "int", "sustainability_correlation": 0, "description": "Count of funding records on the OpenAlex work linked to the software project's DOI.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-funding-count-of-citing-works", "id": "SGA-GL-0036", "result-type": "int", "sustainability_correlation": 0, "description": "Sampled count of funding records across queried OpenAlex works that cite the software project's DOI-linked work.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 3}, {"name": "repo-funding-amount-usd", "id": "SGA-GL-0037", "result-type": "float", "sustainability_correlation": 0, "description": "Estimated funding amount total in USD for the OpenAlex work linked to the software project's DOI. OpenAlex records with missing currency are treated as USD.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.0}, {"name": "repo-funding-amount-usd-of-citing-works", "id": "SGA-GL-0038", "result-type": "float", "sustainability_correlation": 0, "description": "Estimated sampled funding amount total in USD across queried OpenAlex citing works linked to the software project's DOI work. OpenAlex records with missing currency are treated as USD.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.0}, {"name": "repo-funding-amount-usd-combined", "id": "SGA-GL-0039", "result-type": "float", "sustainability_correlation": 0, "description": "Combined funding amount in USD, computed as: `repo-funding-amount-usd + repo-funding-amount-usd-of-citing-works`.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.0}, {"name": "repo-funder-references-count", "id": "SGA-GL-0040", "result-type": "int", "sustainability_correlation": 0, "description": "Count of funder references discovered on the OpenAlex work linked to the software project's DOI.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-funder-references-count-of-citing-works", "id": "SGA-GL-0041", "result-type": "int", "sustainability_correlation": 0, "description": "Count of sampled funder references discovered across queried OpenAlex citing works.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-funder-references-count-combined", "id": "SGA-GL-0042", "result-type": "int", "sustainability_correlation": 0, "description": "Combined funder-reference count, computed as: `repo-funder-references-count + repo-funder-references-count-of-citing-works`.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-unique-funders-count", "id": "SGA-GL-0043", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique funders discovered on the OpenAlex work linked to the software project's DOI.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"name": "repo-unique-funders-count-of-citing-works", "id": "SGA-GL-0044", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique sampled funders discovered across queried OpenAlex citing works.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 2}, {"name": "repo-unique-funders-count-combined", "id": "SGA-GL-0045", "result-type": "int", "sustainability_correlation": 0, "description": "Combined unique-funder count across DOI work and sampled citing works (set-union cardinality, not a simple sum).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 2}, {"name": "repo-languages-line-counts", "id": "SGA-SF-0012", "result-type": "dict", "sustainability_correlation": 0, "description": "Mapping from detected programming language name to an approximate line or byte count of source code for that language. Values are derived from repository hosting language statistics (for example, the GitHub languages API or ecosyste.ms mirrors).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"Jupyter Notebook": 1323525, "Python": 331878, "TeX": 18315, "Typst": 7599, "CSS": 419, "Jinja": 107}}, {"name": "repo-languages-total-lines", "id": "SGA-SF-0013", "result-type": "int", "sustainability_correlation": 0, "description": "Aggregate total of language line/byte counts across all detected programming languages in the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 1681843}, {"name": "repo-languages-count", "id": "SGA-SF-0014", "result-type": "int", "sustainability_correlation": 0, "description": "Number of distinct programming languages detected for the repository based on hosting platform language statistics.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 6}, {"name": "repo-noncode-extension-line-counts", "id": "SGA-SF-0015", "result-type": "dict", "sustainability_correlation": 0, "description": "Mapping from non-programming file extension (for example, .md, .txt, .csv, .png) to an approximate line or size count for repository files with that extension. For text-like files this is a line count; for binary or undecodable files this is estimated from their byte size.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"<no_ext>": 321, ".yml": 1781, ".ini": 31, ".yaml": 212, ".cff": 195, ".txt": 60, ".xml": 2113, ".svg": 1, ".json": 1295, ".lock": 4637, ".toml": 202, ".pdf": 14678257, ".png": 11469854, ".qmd": 125, ".odp": 59821889, ".css": 18, ".j2": 10, ".gif": 78106, ".jpeg": 206847, ".bib": 303, ".ipynb": 2923, ".parquet": 5576897, ".lcov": 999}}, {"name": "repo-noncode-total-lines", "id": "SGA-SF-0016", "result-type": "int", "sustainability_correlation": 0, "description": "Aggregate total of approximate line or size counts across all detected non-programming-language files in the repository.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 91847076}, {"name": "repo-noncode-extensions-count", "id": "SGA-SF-0017", "result-type": "int", "sustainability_correlation": 0, "description": "Number of distinct non-programming file extensions detected when scanning the repository tree.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 23}, {"name": "repo-has-cli", "id": "SGA-SF-0018", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the software exposes at least one command-line interface (CLI) entrypoint, as detected from packaging metadata and common configuration files (for example, pyproject.toml or setup.cfg console_scripts).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": true}, {"name": "repo-cli-entrypoints", "id": "SGA-SF-0019", "result-type": "list", "sustainability_correlation": 0, "description": "List of CLI commands used to invoke the software, as inferred from packaging metadata (for example, [project.scripts], [tool.poetry.scripts], or console_scripts in setup.cfg).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": ["almanack"]}, {"name": "repo-topics", "id": "SGA-GL-0046", "result-type": "list", "sustainability_correlation": 0, "description": "List of descriptive topics, labels, or tags associated with the software project as reported by the hosting platform (for example, GitHub repository topics) or mirrored metadata.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": ["open-source", "software-sustainability"]}, {"name": "repo-topics-count", "id": "SGA-GL-0047", "result-type": "int", "sustainability_correlation": 0, "description": "Count of descriptive topics, labels, or tags associated with the software project.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 2}, {"name": "repo-environment-managers", "id": "SGA-SF-0021", "result-type": "list", "sustainability_correlation": 0, "description": "List of detected environment management tools configured for the software project (for example, Poetry, Conda, Pipenv, or Nix). These tools manage the full environment including Python version pinning and isolated environment creation, as distinct from dependency-only tools captured in repo-dependency-managers.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-has-managed-environment", "id": "SGA-SF-0022", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the software project appears to use at least one explicit environment manager rather than relying solely on baseline language imports.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-dependency-managers", "id": "SGA-SF-0010", "result-type": "list", "sustainability_correlation": 0, "description": "List of detected dependency management tools configured for the software project (for example, pip via requirements.txt, setup.py, or setup.cfg). Unlike environment managers, these tools declare dependencies but do not fully control the Python version or isolated environment creation.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-has-declared-dependencies", "id": "SGA-SF-0011", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the software project declares its dependencies via at least one dependency management file (for example, requirements.txt, setup.py, or setup.cfg), even if a full environment manager is not present.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-declared-python-versions", "id": "SGA-SF-0023", "result-type": "list", "sustainability_correlation": 0, "description": "Python version constraints declared by the project in packaging or environment configuration files (for example, pyproject.toml, environment.yml, or runtime.txt), normalized to a list of strings.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-cost-model", "id": "SGA-GL-0048", "result-type": "str", "sustainability_correlation": 0, "description": "High-level cost model for the software project (for example, free, open-source with paid support, freemium, or paid), as reported by external catalog or hosting metadata when available. A null value indicates that no cost model information was found.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": null}, {"name": "repo-has-edam-owl", "id": "SGA-SF-0024", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the repository contains an EDAM ontology file (for example, edam.owl) used to describe software semantics or interoperability.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": false}, {"name": "repo-has-biotools-json", "id": "SGA-SF-0025", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the repository includes a bio.tools JSON metadata file (for example, biotools.json) describing the software.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": false}, {"name": "repo-has-codemeta-json", "id": "SGA-SF-0026", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the repository includes a CodeMeta JSON file (for example, codemeta.json) providing machine-readable software metadata.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": false}, {"name": "repo-has-ro-crate-metadata-json", "id": "SGA-SF-0027", "result-type": "bool", "sustainability_correlation": 0, "description": "Indicates whether the repository includes an RO-Crate metadata file (for example, ro-crate-metadata.json) describing the research object or software package.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": false}, {"name": "repo-software-metadata-files-count", "id": "SGA-SF-0028", "result-type": "int", "sustainability_correlation": 0, "description": "Count of distinct software description metadata specifications detected in the repository (for example, EDAM, bio.tools, CodeMeta, RO-Crate).", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0}, {"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.92}, {"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": 92}, {"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": 8}, {"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.025446111697740775}, {"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": 0.0010504530188751254, ".github/CODEOWNERS": 0.00473784254513168, ".github/ISSUE_TEMPLATE/bug.yml": 0.025921725166461854, ".github/ISSUE_TEMPLATE/config.yml": 0.0010504530188751254, ".github/ISSUE_TEMPLATE/feature.yml": 0.02351169719292215, ".github/PULL_REQUEST_TEMPLATE.md": 0.013755346828658274, ".github/actions/install-node-env/action.yml": 0.005842796491098808, ".github/actions/install-python-env/action.yml": 0.011252655790841296, ".github/dependabot.yml": 0.013139293373957039, ".github/release-drafter.yml": 0.008292124468600242, ".github/workflows/deploy-book.yml": 0.014970230030121857, ".github/workflows/draft-release.yml": 0.008965847831378321, ".github/workflows/pre-commit-checks.yml": 0.011252655790841296, ".github/workflows/publish-pypi.yml": 0.010285106126099506, ".github/workflows/pytest-tests.yml": 0.015867404540444868, ".github/workflows/test-links.yml": 0.008292124468600242, ".gitignore": 0.042878865218402, ".linkcheckerrc.ini": 0.006911831664924934, ".pre-commit-config.yaml": 0.0539819232865232, ".pre-commit-hooks.yaml": 0.005110667156035556, ".vale.ini": 0.005842796491098808, "CITATION.cff": 0.052906087671691505, "CODE_OF_CONDUCT.md": 0.00150824091859155, "CONTRIBUTING.md": 0.00150824091859155, "LICENSE": 0.010609580377478531, "LICENSE.txt": 0.010609580377478531, "README.md": 0.046744468885189634, "coverage.xml": 0.2941381079186846, "docs/readme.md": 0.00150824091859155, "media/coverage-badge.svg": 0.0005636555310346729, "pa11y.json": 0.003190401396729175, "package-lock.json": 0.21397525325800454, "package.json": 0.0023721305306465485, "poetry.lock": 0.4433129045922632, "pyproject.toml": 0.054410307226891004, "src/almanack/__init__.py": 0.010609580377478531, "src/almanack/batch_processing.py": 0.0613276424285038, "src/almanack/book.py": 0.022420979722492757, "src/almanack/cli.py": 0.08065364455694447, "src/almanack/git.py": 0.1044264873736187, "src/almanack/metrics/data.py": 0.29464021208260005, "src/almanack/metrics/entropy/calculate_entropy.py": 0.08360931484371593, "src/almanack/metrics/entropy/processing_repositories.py": 0.022420979722492757, "src/almanack/metrics/garden_lattice/connectedness.py": 0.12493953935399717, "src/almanack/metrics/garden_lattice/practicality.py": 0.034322464854501, "src/almanack/metrics/garden_lattice/understanding.py": 0.019067135545518896, "src/almanack/metrics/metrics.yml": 0.2038793951180007, "src/almanack/metrics/notebooks.py": 0.06719257662115181, "src/almanack/metrics/programming_extensions.yml": 0.015867404540444868, "src/almanack/metrics/remote.py": 0.04985532625515682, "src/almanack/reporting/report.py": 0.03578765798005875, "src/book/_config.yml": 0.01762915852806283, "src/book/_ext/__init__.py": 0.0, "src/book/_ext/gen_check_pages.py": 0.03083386380297262, "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 0.004359970845321996, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 0.024052391202009565, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 0.04830770607547392, "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.0369959070398229, "src/book/_posters/2025/readme.md": 0.019635265065732377, "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.007261369075726502, "src/book/_templates/check_template.md.j2": 0.004359970845321996, "src/book/_toc.yml": 0.013755346828658274, "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.050513962729421776, "src/book/garden-circle/garden-circle.md": 0.0023721305306465485, "src/book/garden-circle/garden-map.md": 0.01556961627998103, "src/book/garden-circle/package-api.md": 0.03554463720574443, "src/book/garden-circle/pavilion.md": 0.01282897711195816, "src/book/garden-lattice/garden-lattice.md": 0.014970230030121857, "src/book/garden-lattice/understanding.md": 0.03505719401095612, "src/book/introduction.md": 0.042878865218402, "src/book/references.bib": 0.0748041612585015, "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.2730680989538714, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.05182314341127235, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.041954210736177826, "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/images/cdf_repository_inactivity_by_last_commit_date.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/primary-language-counts.png": 0.0, "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/batch_1.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_10.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_11.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_12.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_13.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_14.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_15.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_16.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_17.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_18.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_19.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_2.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_20.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_21.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_22.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_23.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_24.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_25.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_26.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_27.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_28.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_29.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_3.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_30.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_31.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_32.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_33.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_34.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_35.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_36.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_37.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_38.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_39.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_4.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_40.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_41.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_42.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_43.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_44.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_45.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_46.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_47.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_48.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_49.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_5.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_6.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_7.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_8.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_9.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/understanding-pubmed-github-repos.ipynb": 0.14944169418257866, "src/book/seed-bank/seed-bank.md": 0.0023721305306465485, "src/book/software-forest/software-forest.md": 0.015270567880137304, "src/book/verdant-sundial/verdant-sundial.md": 0.01556961627998103, "styles/config/vocabularies/almanack/accept.txt": 0.011888333537571912, "tests/__init__.py": 0.0, "tests/conftest.py": 0.046744468885189634, "tests/data/almanack/coverage/python/coverage.json": 0.0005636555310346729, "tests/data/almanack/coverage/python/coverage.lcov": 0.1805549249646856, "tests/data/almanack/repo_setup/create_repo.py": 0.06838328070532725, "tests/data/almanack/repo_setup/insert_code.py": 0.01645931145625283, "tests/data/jupyter-book/ordered-nb.ipynb": 0.04148961527586044, "tests/data/jupyter-book/sandbox.md": 0.006559031114339717, "tests/data/jupyter-book/unordered-nb.ipynb": 0.04148961527586044, "tests/metrics/test_calculate_entropy.py": 0.06798720890853503, "tests/metrics/test_data.py": 0.27116090790039515, "tests/metrics/test_garden_lattice.py": 0.05988311278486089, "tests/metrics/test_remote.py": 0.011252655790841296, "tests/test_almanack.py": 0.01282897711195816, "tests/test_batch.py": 0.043797605254590775, "tests/test_build.py": 0.022420979722492757, "tests/test_cli.py": 0.04985532625515682, "tests/test_git.py": 0.10459364470636584, "tests/test_notebooks.py": 0.08543589299867997, "tests/utils.py": 0.01282897711195816, "uv.lock": 0.00150824091859155}}, {"name": "repo-agg-history-complexity-decay", "id": "SGA-VS-0003", "result-type": "float", "sustainability_correlation": 0, "description": "Aggregated history complexity with decay (HCM_1d) for all files within a repository over a range between two commits (by default, the first and latest commits). Uses one-hour burst periods and exponential decay.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": 0.00424752946917333}, {"name": "repo-file-history-complexity-decay", "id": "SGA-VS-0004", "result-type": "dict", "sustainability_correlation": 0, "description": "File-level history complexity with decay (HCM_1d) over a range between two commits (by default, the first and latest commits), using one-hour burst periods and exponential decay.", "correction_guidance": null, "fix_why": null, "fix_how": null, "result": {"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_15.parquet": 0.0, ".github/workflows/draft-release.yml": 9.73658257802949e-10, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_18.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/cdf_repository_inactivity_by_last_commit_date.png": 0.0, "package.json": 1.0851195512460224e-39, "src/almanack/metrics/entropy/processing_repositories.py": 1.4631435886725338e-251, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_34.parquet": 0.0, "tests/data/jupyter-book/ordered-nb.ipynb": 6.096705647635182e-65, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_30.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_4.parquet": 0.0, "tests/test_git.py": 6.177087927498746e-164, "tests/test_batch.py": 1.567795050561876e-101, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_36.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_23.parquet": 0.0, "tests/metrics/test_calculate_entropy.py": 1.1093259884278974e-33, "src/book/_config.yml": 1.4712808974846264e-257, "src/book/software-forest/software-forest.md": 0.0, "tests/metrics/test_data.py": 2.2847255091467947e-10, "src/book/_ext/__init__.py": 0.0, ".gitignore": 3.0399862739333575e-66, "src/almanack/__init__.py": 1.3429337830516744e-102, ".github/PULL_REQUEST_TEMPLATE.md": 0.0, "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.0, "src/book/_posters/2025/images/seed-bank-entropy-pubmed.png": 0.0, "tests/data/almanack/repo_setup/create_repo.py": 0.0, "src/book/_posters/2025/images/roadmap.png": 0.0, ".alexignore": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_32.parquet": 0.0, "src/book/verdant-sundial/verdant-sundial.md": 0.0, ".github/CODEOWNERS": 0.0, "tests/data/almanack/repo_setup/insert_code.py": 3.166382929199427e-84, "src/almanack/metrics/notebooks.py": 9.90208637851198e-60, "src/book/assets/software-lifecycle.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0, "src/book/_posters/2025/images/software-lifecycle.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_21.parquet": 0.0, "src/book/_posters/2025/images/almanack-package-and-handbook.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_14.parquet": 0.0, "src/book/assets/Sundial_2916_HDR.jpeg": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_37.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_3.parquet": 0.0, "src/book/_posters/2025/images/almanack-handbook.png": 0.0, "src/almanack/git.py": 2.3327366093663093e-65, "src/book/seed-bank/seed-bank.md": 0.0, "package-lock.json": 0.31127812445913283, "README.md": 5.446185207743722e-66, "pyproject.toml": 9.762615231305445e-10, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_17.parquet": 0.0, ".github/workflows/pytest-tests.yml": 2.0193270781516324e-138, "src/book/assets/garden-lattice-understanding-transfer.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_40.parquet": 0.0, "src/book/_templates/check_template.md.j2": 3.0509312319524667e-257, "tests/test_notebooks.py": 8.571264692224804e-60, "tests/conftest.py": 8.114583629457315e-165, "uv.lock": 4.2848712799328184e-60, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_28.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_19.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_41.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0, "src/almanack/metrics/remote.py": 2.741657526628264e-81, ".github/workflows/test-links.yml": 1.1761074384935927e-138, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_27.parquet": 0.0, "tests/utils.py": 0.0, ".github/ISSUE_TEMPLATE/bug.yml": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_22.parquet": 0.0, "src/book/garden-lattice/understanding.md": 6.9935998811e-313, "src/almanack/metrics/programming_extensions.yml": 5.7630974543822435e-11, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_33.parquet": 0.0, ".pre-commit-config.yaml": 0.5000000000150463, "src/book/introduction.md": 4.61424439076e-313, "src/almanack/batch_processing.py": 2.018981709718797e-101, "src/book/references.bib": 0.0, "src/book/_posters/2025/images/bssw-logo-w-background.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_13.parquet": 0.0, "tests/metrics/test_remote.py": 4.124187747976083e-84, "src/book/garden-lattice/garden-lattice.md": 0.0, "src/book/_posters/2025/poster.qmd": 6.81599637877667e-234, "poetry.lock": 5.226298552021884e-10, "src/book/assets/xkcd_dependency.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_49.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0, "src/book/_posters/2025/images/entropy-for-repos.png": 0.0, "tests/data/jupyter-book/sandbox.md": 0.0, "src/almanack/metrics/entropy/calculate_entropy.py": 1.3111550768232947e-33, "src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0, "tests/metrics/test_garden_lattice.py": 7.54919329176451e-29, "src/almanack/book.py": 8.68576668952685e-252, "src/book/_posters/2025/images/header-combined-images.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-open-issues.png": 0.0, "tests/test_almanack.py": 0.0, "tests/data/almanack/coverage/python/coverage.json": 0.0, "src/book/assets/almanack-influencing-software.png": 0.0, "src/book/_posters/2025/images/spacer.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_42.parquet": 0.0, "src/book/garden-circle/garden-circle.md": 0.0, "src/almanack/reporting/report.py": 0.0, "src/book/_posters/2025/images/forest_modified.png": 0.0, "src/book/_posters/2025/images/almanack-package.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_44.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.0, "src/book/_posters/2025/images/title-text.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_12.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_48.parquet": 0.0, ".vale.ini": 0.0, "src/book/_posters/2025/images/sga-qr.png": 0.0, "src/book/favicon.png": 0.0, "src/almanack/metrics/garden_lattice/connectedness.py": 1.242036460693247e-28, "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/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_1.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_39.parquet": 0.0, "src/book/_posters/2025/images/sustainable-horizons-institute-logo.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_10.parquet": 0.0, "tests/__init__.py": 0.0, "src/book/_posters/2025/almanack-2025-poster.pdf": 0.0, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-show.typ": 7.776665491559453e-241, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_6.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_8.parquet": 0.0, "src/book/_ext/gen_check_pages.py": 1.4746358153333636e-256, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0, "src/book/_static/custom.css": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/primary-language-counts.png": 0.0, "tests/test_cli.py": 5.984300224273795e-102, "CITATION.cff": 8.093641717873496e-234, "src/book/garden-circle/pavilion.md": 7.840729255626729e-234, ".github/ISSUE_TEMPLATE/feature.yml": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_2.parquet": 0.0, ".github/actions/install-node-env/action.yml": 0.0, "media/coverage-badge.svg": 2.6521360278808826e-30, "docs/readme.md": 0.0, "src/book/_posters/2025/readme.md": 6.903142480791043e-241, "src/book/assets/software-gardening-logo.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-top-5-langs.png": 0.0, ".github/workflows/publish-pypi.yml": 1.1761074384935927e-138, "tests/data/jupyter-book/unordered-nb.ipynb": 6.096705647635182e-65, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_9.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_25.parquet": 0.0, ".github/actions/install-python-env/action.yml": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_47.parquet": 0.0, "src/book/_posters/2025/images/dbmi.png": 0.0, "src/book/_posters/2025/images/almanack-notebook.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_16.parquet": 0.0, "src/almanack/metrics/metrics.yml": 1.836675887411304e-10, "CODE_OF_CONDUCT.md": 0.0, "LICENSE.txt": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_11.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_38.parquet": 0.0, "src/book/_posters/2025/_extensions/quarto-ext/poster/_extension.yml": 2.1952905696061204e-241, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_46.parquet": 0.0, ".github/workflows/deploy-book.yml": 1.1761074384935927e-138, "src/book/garden-circle/contributing.md": 0.0, "src/book/_toc.yml": 1.4712808974846264e-257, ".pre-commit-hooks.yaml": 1.8280445215101085e-60, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0, "src/book/_posters/2025/_extensions/quarto-ext/poster/typst-template.typ": 9.779521244665354e-241, "src/book/assets/software-gardening-almanack-logo.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0, "pa11y.json": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_26.parquet": 0.0, "styles/config/vocabularies/almanack/accept.txt": 4.621951150644543e-234, "src/almanack/metrics/data.py": 2.219479213500492e-10, "src/almanack/metrics/garden_lattice/understanding.py": 0.0, "src/almanack/metrics/garden_lattice/practicality.py": 0.0, "src/book/_posters/2025/images/cu-anschutz-short.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_43.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_24.parquet": 0.0, ".github/release-drafter.yml": 0.0, ".github/ISSUE_TEMPLATE/config.yml": 0.0, "coverage.xml": 1.2653315547164482e-28, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_31.parquet": 0.0, "LICENSE": 0.0, ".linkcheckerrc.ini": 0.0, "src/book/_posters/2025/images/sga-qr-text.png": 0.0, "src/almanack/cli.py": 3.656524144225166e-65, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_5.parquet": 0.0, "src/book/assets/640px-Forgard2-003.gif": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_20.parquet": 0.0, "CONTRIBUTING.md": 0.0, ".github/dependabot.yml": 7.779760658899612e-53, "src/book/garden-circle/garden-map.md": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_7.parquet": 0.0, ".github/workflows/pre-commit-checks.yml": 9.73658257802949e-10, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_29.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/understanding-pubmed-github-repos.ipynb": 3.177097784119179e-101, "src/book/garden-circle/package-api.md": 1.704044913531203e-102, "tests/data/almanack/coverage/python/coverage.lcov": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/batch_35.parquet": 0.0, "tests/test_build.py": 5.9408719361e-313, "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/repository_analysis_results/batch_45.parquet": 0.0}}]
CPU times: user 135 ms, sys: 16.1 ms, total: 151 ms
Wall time: 10.5 s
%%time

# show the same results from the CLI
!almanack check "./almanack"
Running Software Gardening Almanack checks.
Datetime: 2026-04-08T22:25:33.340309Z
Almanack version: 0.0.0.post1.dev0+22713d8
Target repository path: ./almanack
The following Software Gardening Almanack metrics may be helpful to improve your repository:
╭─────────────┬────────────────────────────────┬─────────────────────────────╮
│ ID          │ Name                           │ Guidance                    │
├─────────────┼────────────────────────────────┼─────────────────────────────┤
│ SGA-GL-0030 │ repo-check-notebook-exec-order │ Consider executing notebook │
│             │                                │ cells in sequential order   │
│             │                                │ to improve reproducibility. │
╰─────────────┴────────────────────────────────┴─────────────────────────────╯
Software Gardening Almanack summary: 90.91% (10/11)
CPU times: user 118 ms, sys: 28.3 ms, total: 146 ms
Wall time: 10.2 s