Source identity
| Field | Recorded value |
|---|---|
| Source type | archive member |
| Original record | 02_classify.py |
| Date | Not specified in source |
| Path or archive member | archives/libsrc-1c3f88063121/NETLIFY_AI_RECOVERY_2026-10-14_21-10-49/scripts/02_classify.py |
| Original SHA-256 | d18d827022a2da5edf62a5dca55a4dd03c73ca86ec28955d9ed13168cf8552fc |
| Reading-copy SHA-256 | d18d827022a2da5edf62a5dca55a4dd03c73ca86ec28955d9ed13168cf8552fc |
| Archive source | {"sourceId": "libsrc-1c3f88063121", "member": "NETLIFY_AI_RECOVERY_2026-10-14_21-10-49/scripts/02_classify.py"} |
Recovered source transcript
Download complete source text ↓96 lines · 6.9 KB
"""Record the reviewed classification for every inventoried site (decisions made from the evidence files).
Writes checkpoints/classification.json. Sites not named here get an evidence based NON_AI reason."""
import glob
import json
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from nlr_common import ROOT, now, write_json
KNOWN = ["stalwart-stardust-052d42", "megamind-agi-documentation", "feed-the-joe"]
CONFIRMED = {
"stalwart-stardust-052d42": "Supplied URL. Title 'ThatAIGuy Dashboard'; content mentions AGI, G16, Lashon, DNA consciousness.",
"megamind-agi-documentation": "Supplied URL. Title 'MEGAMIND | AGI Documentation'; MEGAMIND, AGI, OmniCron, Skynet, Epona in content.",
"feed-the-joe": "Supplied URL. Title 'MEGAMIND | 258 Billion Neurons'; MEGAMIND, federation, MADDIE in content.",
"megamind-258b-neurons": "Custom domain feedthejoe.com. Title 'MEGAMIND | 258 Billion Neurons'; MEGAMIND, federation, MADDIE. Separate project ID from feed-the-joe.",
"hive-agi-thataiguy-v1": "Title 'The Hive AGI, That AI Guy'; repo Janady13/thataiguy-org-website.",
"hive-agi-thataiguy-v2": "Title 'The Hive AGI, That AI Guy'; repo Janady13/thataiguy-org-website. Separate project ID from v1.",
"oversize-route-builder": "Random looking name, but current deploy is 'About | ThatAIGuy, The Hive AGI' with AGI, DNA consciousness, Lashon, Feed The Joe.",
"thataiguy-api-clean-1": "Custom domain thataiguy.org. Title 'ThatAIGuy | AGI Web Services'; MEGAMIND, Epona, Rhiannon.",
"thataiguy-lenovo-20251107181056": "Custom domain thataiguy.com. Title 'ThatAIGuy, Enterprise AGI Architecture'; Rhiannon, Epona, G16; repo Janady13/ThatAIGuy.",
"thataiguy": "Title 'That AI Guy, AI Development and Tools Platform'.",
"thataicharity": "Custom domain freeaicharity.org. Title 'Free AI Charity | The AGI Journey'; MEGAMIND mentions; repo Janady13/charityOnMe.",
"aimusicinteraction": "Title 'Entrep AGI Consciousness Engine | AI Music Interaction'; AGI and consciousness throughout.",
"heroic-duckanoo-27bf42": "Index title is a cider site, but meta description reads 'Real AGI music generation powered by Entrep'; files include consciousness-engine.js and synthesizer.js.",
"ai-music-dashboard-v1": "Title 'AI Music Dashboard | Discover and Chat'.",
"ai-music-dashboard-v2": "Title 'AI Music Dashboard | Discover and Chat'. Separate project ID from v1.",
"ai-music-interaction-studio": "Title 'AI Music Interaction | Professional Studio'.",
"aimes-music-evolution-v2": "Title 'AIMES, Autonomous AI Music Evolution System'.",
"imaginative-starlight-5a334d": "Random name; title 'Autonomous AI Music Evolution System'.",
"taupe-belekoy-cda1f9": "Random name, server rendered Next.js app. Rendered pages are titled 'Feed The Joe, Starry Night' and mention MEGAMIND and AGI; routes /megammind, /lab, /story, /chapter/2, /donate.",
}
POSSIBLE = {
"tdg-personal-v3": "Developer portfolio; mentions MEGAMIND and AGI powered solutions. Portfolio, not necessarily an AI build.",
"tdg-personal-v4": "Developer portfolio 'Full Stack Developer and AI Engineer'; mentions MEGAMIND AGI. Portfolio, not necessarily an AI build.",
"chris-rock-lab-ai-mineral-id": "Title 'AI Powered Rock and Mineral Identification'; scan page. May be a client demo with AI features.",
"oversize-route-builder-20251204104754": "Create React App bundle stating 'Our AI instantly extracts route information'. AI feature app; name shared with oversize-route-builder.",
"feedthejoe-lenovo-20251107180319": "Named feedthejoe (Feed The Joe clue); 2 files with no AI text found.",
"thatcoputerdude-lenovo-20251107180230": "Mirror of skeetster.com (GoDaddy assets); content mentions feedthejoe and ThatAIGuy twice each. Weak evidence.",
"aimusicinteraction-lenovo-20251107180317": "Name suggests AI music; zero deploys exist, metadata only.",
"thataiguy-hive": "Name suggests The Hive / ThatAIGuy; zero deploys exist, metadata only.",
"thataiguy-api-clean": "Name suggests ThatAIGuy API; zero deploys exist, metadata only.",
}
MANUAL_NON_AI = {
"thatdeveloperguy": "Business marketing site; advertises AI consulting and chatbots as services but contains no AI build.",
"symphonious-reddit-music-trends": "Music trends dashboard demo; 'AI' appears only inside quoted Reddit post titles.",
"musical-puffpuff": "Music discovery demo page; no AI terms found.",
"exquisite-puffpuff-art-gallery": "Art gallery demo page; no AI terms found.",
"inquisitive-valkyrie-gaming": "Gaming hub demo page; no AI terms found.",
"thatcomputerdude-v3": "Tech support site; 'AI' match was a minified JavaScript variable name.",
"classy-taffy-2d852b": "Portfolio template; one 'AI features' phrase in sample project copy.",
"creative-developer-portfolio-template": "Portfolio template; no AI build evidence.",
"tcb-fight-factory-nwa-v2": "Combat sports gym; 'federation' refers to a sports federation.",
}
def main():
out = {}
for d in sorted(glob.glob(os.path.join(ROOT, "sites", "*"))):
try:
m = json.load(open(os.path.join(d, "metadata", "site.json")))
e = json.load(open(os.path.join(d, "metadata", "classification_evidence.json")))
except FileNotFoundError:
continue
n = m["name"]
if n in CONFIRMED:
c, why = "CONFIRMED_AI", CONFIRMED[n]
elif n in POSSIBLE:
c, why = "POSSIBLE_AI", POSSIBLE[n]
elif n in MANUAL_NON_AI:
c, why = "NON_AI", MANUAL_NON_AI[n]
elif not m.get("published_deploy"):
c, why = "NON_AI", "No published deploy and no AI clue in name or metadata."
elif set(e["strong_hits"]) <= {"ThatAIGuy", "That AI Guy"} and not e["generic_hits"]:
c, why = "NON_AI", ("Client or business site. " + (
"ThatAIGuy appears only as the site author credit." if e["strong_hits"] else "No AI terms found in metadata, file paths or sampled content."))
else:
c, why = "NON_AI", f"Weak or incidental matches only: {e['strong_hits']} {e['generic_hits']}"
out[m["id"]] = {"name": n, "class": c, "reason": why, "known_url": n in KNOWN,
"include": c in ("CONFIRMED_AI", "POSSIBLE_AI") or n in KNOWN,
"tier": 0 if n in KNOWN else (1 if c == "CONFIRMED_AI" else 2), "dir": d}
missing = [k for k in list(CONFIRMED) + list(POSSIBLE) if k not in {v["name"] for v in out.values()}]
write_json(os.path.join(ROOT, "checkpoints", "classification.json"), {"decided_at": now(), "sites": out,
"named_but_not_found": missing})
cnt = {}
for v in out.values():
cnt[v["class"]] = cnt.get(v["class"], 0) + 1
print("classified", len(out), cnt, "included", sum(v["include"] for v in out.values()), "not found:", missing)
if __name__ == "__main__":
main()