Skip to content

Commit 4d0fc99

Browse files
hyperpolymathclaude
andcommitted
data: regen index.json from scans/ (301 entries) + add freshness CI
The committed index.json was stale: total_scans=301 (correct) but repos=["nafa-app","outreach","playbooks","project-cb","v-ecosystem"] (5 entries when there are 301 on disk), last_updated=2026-03-07 (two months stale at time of regen). Changes: - scripts/regen-index.sh — deterministic regen from scans/ on disk. last_updated derived from `git log -1 --format=%cI -- scans` so running it twice produces byte-identical output. Schema preserved (last_updated/total_scans/total_repos/repos); subdirectories under scans/ (e.g. scans/octads/) are intentionally not counted in total_scans — they are a separate space; if they need their own index, that is a follow-up. - index.json — regenerated. 301 scans, 301 repos (one repo per top-level file), last_updated=2026-03-28T08:28:32+00:00 (commit time of the most recent scans/ change). - .github/workflows/index-freshness.yml — runs regen-index.sh on push/PR and fails if index.json drifts from scans/. Triggers only on changes to scans/, index.json, the regen script, or the workflow itself. Pair with branch protection so the check is required for merge. Verified locally: - bash scripts/regen-index.sh produces a clean tree on second run (`git diff --quiet index.json` passes). Closes #1 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 05d991b commit 4d0fc99

3 files changed

Lines changed: 431 additions & 4 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
#
4+
# Fails if the committed index.json drifts from what scripts/regen-index.sh
5+
# produces from scans/ on disk. Pair with branch protection so this check
6+
# is required on PRs touching scans/ or index.json.
7+
#
8+
# Closes V-L3-M1.
9+
10+
name: index.json freshness
11+
12+
on:
13+
push:
14+
branches: [main]
15+
pull_request:
16+
branches: [main]
17+
paths:
18+
- 'scans/**'
19+
- 'index.json'
20+
- 'scripts/regen-index.sh'
21+
- '.github/workflows/index-freshness.yml'
22+
23+
concurrency:
24+
group: index-freshness-${{ github.ref }}
25+
cancel-in-progress: true
26+
27+
permissions:
28+
contents: read
29+
30+
jobs:
31+
check:
32+
name: index.json matches scans/
33+
runs-on: ubuntu-latest
34+
timeout-minutes: 5
35+
steps:
36+
- name: Checkout (with history; regen-index needs git log on scans/)
37+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
38+
with:
39+
fetch-depth: 0
40+
41+
- name: Regenerate index.json
42+
run: bash scripts/regen-index.sh
43+
44+
- name: Fail if index.json drifted
45+
run: |
46+
if ! git diff --quiet --exit-code index.json; then
47+
echo "::error::index.json is out of sync with scans/."
48+
echo "Run 'bash scripts/regen-index.sh' locally and commit the result."
49+
echo ""
50+
echo "----- diff -----"
51+
git --no-pager diff index.json
52+
exit 1
53+
fi
54+
echo "index.json is in sync with scans/."

index.json

Lines changed: 300 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,308 @@
11
{
2-
"last_updated": "2026-03-07T22:19:01+00:00",
3-
"total_scans": 301,
2+
"last_updated": "2026-03-28T08:28:32+00:00",
43
"repos": [
4+
"0-ai-gatekeeper-protocol",
5+
"7-tentacles",
6+
"Axiology.jl",
7+
"Axiom.jl",
8+
"BowtieRisk.jl",
9+
"Causals.jl",
10+
"Cladistics.jl",
11+
"Cliodynamics.jl",
12+
"Cliometrics.jl",
13+
"Exnovation.jl",
14+
"HackenbushGames.jl",
15+
"IDApixiTIK",
16+
"KnotTheory.jl",
17+
"PolyglotFormalisms.jl",
18+
"ProvenCrypto.jl",
19+
"SMTLib.jl",
20+
"ZeroProb.jl",
21+
"_pathroot",
22+
"a2ml",
23+
"absolute-zero",
24+
"academic-workflow-suite",
25+
"accessibility-everywhere",
26+
"accessibilitybot",
27+
"ada-loom-registry",
28+
"aerie",
29+
"affinescript",
30+
"aggregate-library",
31+
"aletheia",
32+
"algorithm-shield",
33+
"alkahest-shell-transmuter",
34+
"ambientops",
35+
"amethe",
36+
"anamnesis",
37+
"anvomidav",
38+
"asdf-augmenters",
39+
"asdf-tool-plugins",
40+
"assemblyline-20260307195240",
41+
"ats2-tui",
42+
"avatar-fabrication-facility",
43+
"avow-protocol",
44+
"axel-protocol",
45+
"befunge93-vault-cracker",
46+
"betlang",
47+
"bgp-backbone-lab",
48+
"bitfuckit",
49+
"blocky-writer",
50+
"blue-screen-of-app",
51+
"bofig",
52+
"boinc-boinc",
53+
"branch-newspaper",
54+
"bridge-nginx-zig",
55+
"broad-spectrum",
56+
"bunsenite",
57+
"cadre-router",
58+
"candy-crash",
59+
"casket-ssg",
60+
"cccp",
61+
"cerro-torre",
62+
"checky-monkey",
63+
"chimichanga",
64+
"cicada",
65+
"cipherbot",
66+
"civic-connect",
67+
"civic-stream",
68+
"claim-forge",
69+
"claude-integrations",
70+
"cloud-sync-tuner",
71+
"cloudflare-dns-terraform",
72+
"conative-gating",
73+
"conflow",
74+
"consent-aware-http",
75+
"contractiles",
76+
"coq-jr",
77+
"czech-file-knife",
78+
"defensive-multiplicity",
79+
"defiant",
80+
"deno-ecosystem",
81+
"developer-ecosystem",
82+
"devkit-risc-v",
83+
"dicti0nary-attack",
84+
"did-you-actually-do-that",
85+
"disinfo-nesy-detector",
86+
"displace",
87+
"dnfinition",
88+
"docmatrix",
89+
"docudactyl",
90+
"dotmatrix-fileprinter",
91+
"double-track-browser",
92+
"echidna",
93+
"echidnabot",
94+
"echomesh",
95+
"eclexia",
96+
"elegant-state",
97+
"elixir-mcp-server",
98+
"emergency-button",
99+
"empty-linter",
100+
"ephapax",
101+
"error-lang",
102+
"esn",
103+
"etma-handler",
104+
"excel-economic-numbers-tool",
105+
"explicit-trust-plane",
106+
"feedback-o-tron",
107+
"ffmpeg-ffi",
108+
"filesoup",
109+
"finishingbot",
110+
"fireflag",
111+
"flat-mate",
112+
"flatracoon",
113+
"flatracoon-os",
114+
"fogbinder",
115+
"formatrix-docs",
116+
"formdb-http",
117+
"forth-dotmatrix",
118+
"funfriendly-git",
119+
"games",
120+
"git-inflate",
121+
"git-private-farm",
122+
"gitbot-fleet",
123+
"glambot",
124+
"glyphbase",
125+
"gql-dt",
126+
"grim-repo",
127+
"gsbot",
128+
"hesiod-dns-map",
129+
"heterogenous-mobile-computing",
130+
"http-capability-gateway",
131+
"hybrid-automation-router",
132+
"hypatia",
133+
"hyperpolymath",
134+
"hyperpolymath-archive",
135+
"hyperpolymath-sovereign-registry",
136+
"hyperpolymath.github.io",
137+
"idaptik",
138+
"idris2-ecosystem",
139+
"im-docs",
140+
"immutable-linux-auditor",
141+
"indieweb2-bastion",
142+
"ipfs-overlay",
143+
"ipv6-site-enforcer",
144+
"ipv6-tools",
145+
"januskey",
146+
"julia-the-viper",
147+
"k9-svc",
148+
"k9-tools",
149+
"kaldor-iiot",
150+
"kea-tools",
151+
"kith",
152+
"laminar",
153+
"language-bridges",
154+
"language-interop-compiler",
155+
"laniakea",
156+
"lcb-website",
157+
"libstamp",
158+
"lithoglyph",
159+
"live-files",
160+
"llm-tools",
161+
"lol",
162+
"lsm",
163+
"maa-framework",
164+
"manifesto",
165+
"mcp-repo-guardian",
166+
"me-dialect",
167+
"megadog",
168+
"metadata-grammar",
169+
"misinformation-defence-platform",
170+
"modshells",
171+
"must",
172+
"my-lang",
173+
"my-lang-archive",
5174
"nafa-app",
175+
"nafa-app-ambient",
176+
"nano-aider",
177+
"nerdsafe-restart",
178+
"network-dashboard",
179+
"network-orchestrator",
180+
"neural-foundations",
181+
"neurophone",
182+
"nexia-list",
183+
"nextgen-languages",
184+
"nick-shells",
185+
"nickel-augmentation",
186+
"no-nonsense-nntps",
187+
"nuj-lcb-production",
188+
"oblibeny",
189+
"ochrance",
190+
"odds-and-sods-package-manager",
191+
"opam-repository",
192+
"opm-canonicalizer",
193+
"opsm-ui",
6194
"outreach",
195+
"package-publishers",
196+
"packages",
197+
"palimpsest-license",
198+
"palimpsest-plasma",
199+
"panic-attacker",
200+
"panll",
201+
"panoptes",
202+
"patallm-gallery",
203+
"personal-sysadmin",
204+
"phantom-metal-taste",
205+
"php-aegis",
206+
"phronesis",
207+
"pimcore-fortress",
7208
"playbooks",
209+
"poly-k8s-mcp",
210+
"poly-observability-mcp",
211+
"poly-secret-mcp",
212+
"polyglot-formalisms-elixir",
213+
"polyglot-formalisms-gleam",
214+
"polyglot-i18n",
215+
"polysafe-gitfixer",
216+
"polystack",
217+
"preference-injector",
218+
"presswerk",
8219
"project-cb",
9-
"v-ecosystem"
220+
"project-wharf",
221+
"proof-of-work",
222+
"protocol-squisher",
223+
"proven",
224+
"proven-specialist-repos",
225+
"qubes-sdp",
226+
"raze-tui",
227+
"reasonably-good-token-vault",
228+
"recon-silly-ation",
229+
"refugia",
230+
"repo-batcher",
231+
"repo-customiser",
232+
"repo-guardian-fs",
233+
"repo-slm-augmentor",
234+
"reposystem",
235+
"rescript-ecosystem",
236+
"resource-record-fluctuator",
237+
"rhodibot",
238+
"rhodium-pipeline",
239+
"rhodium-standard-repositories",
240+
"riscv-guix-buildsys",
241+
"robodog-ecm",
242+
"robot-repo-automaton",
243+
"robot-vacuum-cleaner",
244+
"rpa-elysium",
245+
"rrecord-verity",
246+
"rsr-template-repo",
247+
"safe-brute-force",
248+
"sanctify-php",
249+
"scaffoldia",
250+
"scripts",
251+
"sdp-hkdf-deployment",
252+
"seambot",
253+
"seamstress",
254+
"selur",
255+
"slopctl",
256+
"snapcreate",
257+
"social-media-tools",
258+
"squisher-corpus",
259+
"ssg-collection",
260+
"standards",
261+
"stapeln",
262+
"stateful-artefacts",
263+
"stateful-artefacts-for-gitforges",
264+
"supernorma",
265+
"sustainabot",
266+
"svalinn",
267+
"synapse",
268+
"system-tools",
269+
"tangle",
270+
"techstack-filterlist",
271+
"template-repo",
272+
"the-hotchocolabot",
273+
"thejeffparadox",
274+
"theoneshow",
275+
"thunderbird-template-reloaded",
276+
"tma-mark2",
277+
"total-recall",
278+
"total-update",
279+
"traffic-conditioner",
280+
"tree-navigator",
281+
"twingate-helm-deploy",
282+
"ubicity",
283+
"unified-dataset-vocab",
284+
"union-policy-parser",
285+
"universal-chat-extractor",
286+
"universal-extension-format",
287+
"universal-language-server-plugin",
288+
"universal-project-manager",
289+
"v-ecosystem",
290+
"v3-templater",
291+
"valence-shell",
292+
"verified-container-spec",
293+
"verisimdb",
294+
"vex-tools",
295+
"volumod",
296+
"vordr",
297+
"voyage-enterprise-decision-system",
298+
"well-known-ecosystem",
299+
"wokelang",
300+
"wordpress-tools",
301+
"zerostep",
302+
"zerotier-k8s-link",
303+
"zig-ffi",
304+
"zotero-tools"
10305
],
11-
"total_repos": 5
306+
"total_repos": 301,
307+
"total_scans": 301
12308
}

0 commit comments

Comments
 (0)