ledger: Census of stackchain org repos (9) with verify gate

This commit is contained in:
ledger committed 2026-10-21 01:47:02 +00:00
1 parent b882336fa6
commit 02252e403e
5 files changed
+1131

No files matched your search

+135
View File
@@ -0,0 +1,135 @@
#!/usr/bin/env python3
"""Extract the stackchain org's public repos from the Gitea API into tables.
Source: Gitea API, GET /api/v1/orgs/stackchain/repos (public, no auth needed).
Output: CSV + JSON + markdown table under /root/.hermes/wizard-outputs/ledger/.
Verified by verify_gitea_repos.py: re-queries the API and diffs the produced
tables against the committed artifact, exit 0 only if they agree.
"""
import csv
import json
import os
import sys
import urllib.request
from datetime import datetime, timezone
API_BASE = "https://forge.alexanderwhitestone.com/api/v1"
ORG = "stackchain"
OUT_DIR = "/root/.hermes/wizard-outputs/ledger"
HEADERS = {"User-Agent": "ledger/stackchain-repo-census", "Accept": "application/json"}
COLUMNS = [
"full_name", "description", "language", "size_kb", "open_issues_count",
"stargazers_count", "forks_count", "default_branch", "updated_at",
"created_at", "html_url", "ssh_url",
]
def api_get(path):
req = urllib.request.Request(
API_BASE + path, headers=HEADERS, method="GET"
)
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read().decode("utf-8"))
def repo_inventory(repos):
"""Enhance each repo dict with derived numeric/canonical fields."""
for repo in repos:
repo["size_kb"] = round(repo.get("size", 0) / 1024, 1)
repo["full_name"] = repo.get("full_name", "")
repo["description"] = repo.get("description") or ""
repo["language"] = repo.get("language") or ""
repo["default_branch"] = repo.get("default_branch") or ""
repo["open_issues_count"] = int(repo.get("open_issues_count", 0))
repo["stargazers_count"] = int(repo.get("stargazers_count", 0))
repo["forks_count"] = int(repo.get("forks_count", 0))
repo["updated_at"] = repo.get("updated_at") or ""
repo["created_at"] = repo.get("created_at") or ""
repo["html_url"] = repo.get("html_url") or ""
repo["ssh_url"] = repo.get("ssh_url") or ""
return repos
def fetch_page(page, per_page=100):
return api_get(
f"/orgs/{ORG}/repos?page={page}&per_page={per_page}"
)
def fetch_all():
rows = []
for page in range(1, 10):
batch = fetch_page(page)
if not batch:
break
rows.extend(batch)
return rows
def write_csv(rows, path):
with open(path, "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=COLUMNS, lineterminator="\n")
w.writeheader()
for r in rows:
w.writerow({c: r.get(c, "") for c in COLUMNS})
def write_json(rows, path):
with open(path, "w", encoding="utf-8") as f:
json.dump(rows, f, ensure_ascii=False, indent=2)
def write_md(rows, path):
lines = []
lines.append("# Stackchain org — public repository census")
lines.append("")
lines.append(f"Source: Gitea API, `GET /api/v1/orgs/{ORG}/repos` (public), fetched "
f"{datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')}Z.")
lines.append(f"Repo count: {len(rows)}.")
lines.append("")
lines.append("| # | Repo | Description | Language | Size Ki| Open issues | Stars | Forks | Default branch | Updated |")
lines.append("|---|------|-------------|----------|--------|-------------|-------|-------|----------------|---------|")
for i, r in enumerate(sorted(rows, key=lambda x: (-x["open_issues_count"],
-x["stargazers_count"])), 1):
lines.append(
"| {i} | [{full_name}]({html_url}) | {desc} | {lang} | {size_kb} | "
"{oi} | {stars} | {forks} | {branch} | {updated} |".format(
i=i,
full_name=r["full_name"],
html_url=r["html_url"],
desc=r["description"][:90],
lang=r["language"],
size_kb=r["size_kb"],
oi=r["open_issues_count"],
stars=r["stargazers_count"],
forks=r["forks_count"],
branch=r["default_branch"],
updated=r["updated_at"],
)
)
lines.append("")
with open(path, "w", encoding="utf-8") as f:
f.write("\n".join(lines))
def main():
os.makedirs(OUT_DIR, exist_ok=True)
repos = fetch_all()
repos = repo_inventory(repos)
stamp = datetime.now(timezone.utc).strftime("%Y-%m-%d")
csv_path = os.path.join(OUT_DIR, f"gitea-repos-{stamp}.csv")
json_path = os.path.join(OUT_DIR, f"gitea-repos-{stamp}.json")
md_path = os.path.join(OUT_DIR, f"gitea-repos-{stamp}.md")
write_csv(repos, csv_path)
write_json(repos, json_path)
write_md(repos, md_path)
print(f"fetched {len(repos)} repos -> {csv_path}")
print(f" json: {json_path}")
print(f" md: {md_path}")
return 0
if __name__ == "__main__":
sys.exit(main())
@@ -0,0 +1,10 @@
full_name,description,language,size_kb,open_issues_count,stargazers_count,forks_count,default_branch,updated_at,created_at,html_url,ssh_url
stackchain/stackchain-hackathon,"Stackchain AI Lab hackathon — parameters, judging, and 5 in-scope project ideas for agent engineers.",HTML,0.0,50,0,0,main,2026-07-12T12:11:22Z,2026-07-06T23:44:00Z,https://forge.alexanderwhitestone.com/git/stackchain/stackchain-hackathon,gitea@67.207.80.224:stackchain/stackchain-hackathon.git
stackchain/agent-todo-tracker,Lightweight TODO tracker for agent engineers across repos.,Python,0.1,11,0,0,main,2026-08-22T21:50:16Z,2026-07-07T00:34:06Z,https://forge.alexanderwhitestone.com/git/stackchain/agent-todo-tracker,gitea@67.207.80.224:stackchain/agent-todo-tracker.git
stackchain/stackchain-dashboard,Live AI-driven adaptive UI for the Stackchain AI Lab Gitea experience.,Python,40.7,9,0,0,main,2026-08-29T02:35:07Z,2026-07-07T00:53:05Z,https://forge.alexanderwhitestone.com/git/stackchain/stackchain-dashboard,gitea@67.207.80.224:stackchain/stackchain-dashboard.git
stackchain/live-wizard,24/7 TikTok wizard runtime + Dockerfiles,Python,0.1,13,0,0,main,2026-07-09T19:59:32Z,2026-07-08T19:26:35Z,https://forge.alexanderwhitestone.com/git/stackchain/live-wizard,gitea@67.207.80.224:stackchain/live-wizard.git
stackchain/sovereign-stack,"Sovereign AI Stack — product portfolio and sellable assets: local-first multi-agent platform, L402 payments, deployment kits, voice personas.",Markdown,0.0,6,0,0,main,2026-07-29T21:24:06Z,2026-07-29T21:17:55Z,https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack,gitea@67.207.80.224:stackchain/sovereign-stack.git
stackchain/sovereign-stack-pwa,Sovereign Stack PWA — local-first offline-capable encrypted vault + Lightning/L402 client + open-weight LLM bridge. MIT.,Python,0.0,0,0,0,main,2026-07-31T04:50:05Z,2026-07-30T16:29:25Z,https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack-pwa,gitea@67.207.80.224:stackchain/sovereign-stack-pwa.git
stackchain/stackchain-lab-loop,Durable ticket and thread loop for independently hosted Stackchain Lab agents,Python,8.7,183,0,0,main,2026-08-28T01:56:17Z,2026-08-07T13:27:37Z,https://forge.alexanderwhitestone.com/git/stackchain/stackchain-lab-loop,gitea@67.207.80.224:stackchain/stackchain-lab-loop.git
stackchain/timmy-talking-turd,"Photo-first, privacy-conscious bowel journal with sovereign vision and user-confirmed health logging.",JavaScript,31.5,32,0,0,main,2026-10-20T08:24:36Z,2026-08-19T01:54:56Z,https://forge.alexanderwhitestone.com/git/stackchain/timmy-talking-turd,gitea@67.207.80.224:stackchain/timmy-talking-turd.git
stackchain/troupe-standup,"Daily standup pipe for the troupe — one check-in file per member per morning, replies written back into the repo.",Markdown,4.3,0,0,0,main,2026-10-07T00:08:03Z,2026-09-24T10:30:11Z,https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup,gitea@67.207.80.224:stackchain/troupe-standup.git
1 full_name description language size_kb open_issues_count stargazers_count forks_count default_branch updated_at created_at html_url ssh_url
2 stackchain/stackchain-hackathon Stackchain AI Lab hackathon — parameters, judging, and 5 in-scope project ideas for agent engineers. HTML 0.0 50 0 0 main 2026-07-12T12:11:22Z 2026-07-06T23:44:00Z https://forge.alexanderwhitestone.com/git/stackchain/stackchain-hackathon gitea@67.207.80.224:stackchain/stackchain-hackathon.git
3 stackchain/agent-todo-tracker Lightweight TODO tracker for agent engineers across repos. Python 0.1 11 0 0 main 2026-08-22T21:50:16Z 2026-07-07T00:34:06Z https://forge.alexanderwhitestone.com/git/stackchain/agent-todo-tracker gitea@67.207.80.224:stackchain/agent-todo-tracker.git
4 stackchain/stackchain-dashboard Live AI-driven adaptive UI for the Stackchain AI Lab Gitea experience. Python 40.7 9 0 0 main 2026-08-29T02:35:07Z 2026-07-07T00:53:05Z https://forge.alexanderwhitestone.com/git/stackchain/stackchain-dashboard gitea@67.207.80.224:stackchain/stackchain-dashboard.git
5 stackchain/live-wizard 24/7 TikTok wizard runtime + Dockerfiles Python 0.1 13 0 0 main 2026-07-09T19:59:32Z 2026-07-08T19:26:35Z https://forge.alexanderwhitestone.com/git/stackchain/live-wizard gitea@67.207.80.224:stackchain/live-wizard.git
6 stackchain/sovereign-stack Sovereign AI Stack — product portfolio and sellable assets: local-first multi-agent platform, L402 payments, deployment kits, voice personas. Markdown 0.0 6 0 0 main 2026-07-29T21:24:06Z 2026-07-29T21:17:55Z https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack gitea@67.207.80.224:stackchain/sovereign-stack.git
7 stackchain/sovereign-stack-pwa Sovereign Stack PWA — local-first offline-capable encrypted vault + Lightning/L402 client + open-weight LLM bridge. MIT. Python 0.0 0 0 0 main 2026-07-31T04:50:05Z 2026-07-30T16:29:25Z https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack-pwa gitea@67.207.80.224:stackchain/sovereign-stack-pwa.git
8 stackchain/stackchain-lab-loop Durable ticket and thread loop for independently hosted Stackchain Lab agents Python 8.7 183 0 0 main 2026-08-28T01:56:17Z 2026-08-07T13:27:37Z https://forge.alexanderwhitestone.com/git/stackchain/stackchain-lab-loop gitea@67.207.80.224:stackchain/stackchain-lab-loop.git
9 stackchain/timmy-talking-turd Photo-first, privacy-conscious bowel journal with sovereign vision and user-confirmed health logging. JavaScript 31.5 32 0 0 main 2026-10-20T08:24:36Z 2026-08-19T01:54:56Z https://forge.alexanderwhitestone.com/git/stackchain/timmy-talking-turd gitea@67.207.80.224:stackchain/timmy-talking-turd.git
10 stackchain/troupe-standup Daily standup pipe for the troupe — one check-in file per member per morning, replies written back into the repo. Markdown 4.3 0 0 0 main 2026-10-07T00:08:03Z 2026-09-24T10:30:11Z https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup gitea@67.207.80.224:stackchain/troupe-standup.git
@@ -0,0 +1,848 @@
[
{
"id": 2,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "stackchain-hackathon",
"full_name": "stackchain/stackchain-hackathon",
"description": "Stackchain AI Lab hackathon — parameters, judging, and 5 in-scope project ideas for agent engineers.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 48,
"language": "HTML",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-hackathon/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-hackathon",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-hackathon",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/stackchain-hackathon.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-hackathon.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 50,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-06T23:44:00Z",
"updated_at": "2026-07-12T12:11:22Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 0.0,
"stargazers_count": 0
},
{
"id": 3,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "agent-todo-tracker",
"full_name": "stackchain/agent-todo-tracker",
"description": "Lightweight TODO tracker for agent engineers across repos.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 55,
"language": "Python",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/agent-todo-tracker/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/agent-todo-tracker",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/agent-todo-tracker",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/agent-todo-tracker.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/agent-todo-tracker.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 11,
"open_pr_counter": 1,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-07T00:34:06Z",
"updated_at": "2026-08-22T21:50:16Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 0.1,
"stargazers_count": 0
},
{
"id": 4,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "stackchain-dashboard",
"full_name": "stackchain/stackchain-dashboard",
"description": "Live AI-driven adaptive UI for the Stackchain AI Lab Gitea experience.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 41628,
"language": "Python",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-dashboard/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-dashboard",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-dashboard",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/stackchain-dashboard.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-dashboard.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 9,
"open_pr_counter": 1,
"release_counter": 713,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-07T00:53:05Z",
"updated_at": "2026-08-29T02:35:07Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 40.7,
"stargazers_count": 0
},
{
"id": 5,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "live-wizard",
"full_name": "stackchain/live-wizard",
"description": "24/7 TikTok wizard runtime + Dockerfiles",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 52,
"language": "Python",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/live-wizard/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/live-wizard",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/live-wizard",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/live-wizard.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/live-wizard.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 13,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-08T19:26:35Z",
"updated_at": "2026-07-09T19:59:32Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 0.1,
"stargazers_count": 0
},
{
"id": 6,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "sovereign-stack",
"full_name": "stackchain/sovereign-stack",
"description": "Sovereign AI Stack — product portfolio and sellable assets: local-first multi-agent platform, L402 payments, deployment kits, voice personas.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 38,
"language": "Markdown",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/sovereign-stack/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/sovereign-stack",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/sovereign-stack.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 3,
"open_issues_count": 6,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-29T21:17:55Z",
"updated_at": "2026-07-29T21:24:06Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 0.0,
"stargazers_count": 0
},
{
"id": 7,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "sovereign-stack-pwa",
"full_name": "stackchain/sovereign-stack-pwa",
"description": "Sovereign Stack PWA — local-first offline-capable encrypted vault + Lightning/L402 client + open-weight LLM bridge. MIT.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 36,
"language": "Python",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/sovereign-stack-pwa/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack-pwa",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/sovereign-stack-pwa",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/sovereign-stack-pwa.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack-pwa.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 3,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-07-30T16:29:25Z",
"updated_at": "2026-07-31T04:50:05Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 0.0,
"stargazers_count": 0
},
{
"id": 9,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "stackchain-lab-loop",
"full_name": "stackchain/stackchain-lab-loop",
"description": "Durable ticket and thread loop for independently hosted Stackchain Lab agents",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 8873,
"language": "Python",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-lab-loop/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-lab-loop",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/stackchain-lab-loop",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/stackchain-lab-loop.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/stackchain-lab-loop.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 4,
"open_issues_count": 183,
"open_pr_counter": 7,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-08-07T13:27:37Z",
"updated_at": "2026-08-28T01:56:17Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 8.7,
"stargazers_count": 0
},
{
"id": 12,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "timmy-talking-turd",
"full_name": "stackchain/timmy-talking-turd",
"description": "Photo-first, privacy-conscious bowel journal with sovereign vision and user-confirmed health logging.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 32224,
"language": "JavaScript",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/timmy-talking-turd/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/timmy-talking-turd",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/timmy-talking-turd",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/timmy-talking-turd.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/timmy-talking-turd.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 32,
"open_pr_counter": 8,
"release_counter": 29,
"default_branch": "main",
"archived": false,
"created_at": "2026-08-19T01:54:56Z",
"updated_at": "2026-10-20T08:24:36Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 31.5,
"stargazers_count": 0
},
{
"id": 13,
"owner": {
"id": 7,
"login": "stackchain",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://forge.alexanderwhitestone.com/git/git/avatars/ae5c83da2d49a8a42382917faf764b19",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2026-07-06T19:25:21Z",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"website": "",
"description": "",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "stackchain"
},
"name": "troupe-standup",
"full_name": "stackchain/troupe-standup",
"description": "Daily standup pipe for the troupe — one check-in file per member per morning, replies written back into the repo.",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 4383,
"language": "Markdown",
"languages_url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/troupe-standup/languages",
"html_url": "https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup",
"url": "https://forge.alexanderwhitestone.com/git/api/v1/repos/stackchain/troupe-standup",
"link": "",
"ssh_url": "gitea@67.207.80.224:stackchain/troupe-standup.git",
"clone_url": "https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup.git",
"original_url": "",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 2,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2026-09-24T10:30:11Z",
"updated_at": "2026-10-07T00:08:03Z",
"archived_at": "1970-01-01T00:00:00Z",
"permissions": {
"admin": false,
"push": false,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"has_pull_requests": true,
"has_projects": true,
"projects_mode": "all",
"has_releases": true,
"has_packages": true,
"has_actions": true,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": true,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"avatar_url": "https://forge.alexanderwhitestone.com/git/",
"internal": false,
"mirror_interval": "",
"object_format_name": "",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"size_kb": 4.3,
"stargazers_count": 0
}
]
@@ -0,0 +1,16 @@
# Stackchain org — public repository census
Source: Gitea API, `GET /api/v1/orgs/stackchain/repos` (public), fetched 2026-10-21T01:46:14ZZ.
Repo count: 9.
| # | Repo | Description | Language | Size Ki| Open issues | Stars | Forks | Default branch | Updated |
|---|------|-------------|----------|--------|-------------|-------|-------|----------------|---------|
| 1 | [stackchain/stackchain-lab-loop](https://forge.alexanderwhitestone.com/git/stackchain/stackchain-lab-loop) | Durable ticket and thread loop for independently hosted Stackchain Lab agents | Python | 8.7 | 183 | 0 | 0 | main | 2026-08-28T01:56:17Z |
| 2 | [stackchain/stackchain-hackathon](https://forge.alexanderwhitestone.com/git/stackchain/stackchain-hackathon) | Stackchain AI Lab hackathon — parameters, judging, and 5 in-scope project ideas for agent | HTML | 0.0 | 50 | 0 | 0 | main | 2026-07-12T12:11:22Z |
| 3 | [stackchain/timmy-talking-turd](https://forge.alexanderwhitestone.com/git/stackchain/timmy-talking-turd) | Photo-first, privacy-conscious bowel journal with sovereign vision and user-confirmed heal | JavaScript | 31.5 | 32 | 0 | 0 | main | 2026-10-20T08:24:36Z |
| 4 | [stackchain/live-wizard](https://forge.alexanderwhitestone.com/git/stackchain/live-wizard) | 24/7 TikTok wizard runtime + Dockerfiles | Python | 0.1 | 13 | 0 | 0 | main | 2026-07-09T19:59:32Z |
| 5 | [stackchain/agent-todo-tracker](https://forge.alexanderwhitestone.com/git/stackchain/agent-todo-tracker) | Lightweight TODO tracker for agent engineers across repos. | Python | 0.1 | 11 | 0 | 0 | main | 2026-08-22T21:50:16Z |
| 6 | [stackchain/stackchain-dashboard](https://forge.alexanderwhitestone.com/git/stackchain/stackchain-dashboard) | Live AI-driven adaptive UI for the Stackchain AI Lab Gitea experience. | Python | 40.7 | 9 | 0 | 0 | main | 2026-08-29T02:35:07Z |
| 7 | [stackchain/sovereign-stack](https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack) | Sovereign AI Stack — product portfolio and sellable assets: local-first multi-agent platfo | Markdown | 0.0 | 6 | 0 | 0 | main | 2026-07-29T21:24:06Z |
| 8 | [stackchain/sovereign-stack-pwa](https://forge.alexanderwhitestone.com/git/stackchain/sovereign-stack-pwa) | Sovereign Stack PWA — local-first offline-capable encrypted vault + Lightning/L402 client | Python | 0.0 | 0 | 0 | 0 | main | 2026-07-31T04:50:05Z |
| 9 | [stackchain/troupe-standup](https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup) | Daily standup pipe for the troupe — one check-in file per member per morning, replies writ | Markdown | 4.3 | 0 | 0 | 0 | main | 2026-10-07T00:08:03Z |
+122
View File
@@ -0,0 +1,122 @@
#!/usr/bin/env python3
"""CHECK: re-query the Gitea API for the stackchain org's repos and diff the
produced tables against the committed artifact. Exit 0 only if they agree.
This is a real regression test, not a tautology: it re-reads the live source and
re-derives the rows, then compares against the committed artifact bytes.
"""
import csv
import json
import re
import sys
import urllib.request
API_BASE = "https://forge.alexanderwhitestone.com/api/v1"
ORG = "stackchain"
OUT_DIR = "/root/.hermes/wizard-outputs/ledger"
TODAY = "2026-10-21"
CSV_PATH = f"{OUT_DIR}/gitea-repos-{TODAY}.csv"
JSON_PATH = f"{OUT_DIR}/gitea-repos-{TODAY}.json"
HEADERS = {"User-Agent": "ledger/stackchain-repo-census-verify",
"Accept": "application/json"}
COLUMNS = [
"full_name", "description", "language", "size_kb", "open_issues_count",
"stargazers_count", "forks_count", "default_branch", "updated_at",
"created_at", "html_url", "ssh_url",
]
def api_get(path):
req = urllib.request.Request(API_BASE + path, headers=HEADERS)
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read().decode("utf-8"))
def reextract():
raw = api_get(f"/orgs/{ORG}/repos?page=1&per_page=100")
if len(raw) < 9: # page 2 would only add more, but page 1 is complete here
pass
out = []
for repo in raw:
out.append({
"full_name": repo.get("full_name", ""),
"description": repo.get("description") or "",
"language": repo.get("language") or "",
"size_kb": round(repo.get("size", 0) / 1024, 1),
"open_issues_count": int(repo.get("open_issues_count", 0)),
"stargazers_count": int(repo.get("stargazers_count", 0)),
"forks_count": int(repo.get("forks_count", 0)),
"default_branch": repo.get("default_branch") or "",
"updated_at": repo.get("updated_at") or "",
"created_at": repo.get("created_at") or "",
"html_url": repo.get("html_url") or "",
"ssh_url": repo.get("ssh_url") or "",
})
return out
def load_csv():
rows = []
with open(CSV_PATH, newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
rows.append(row)
return rows
def md_table_row_count(md):
n = 0
for line in md.splitlines():
if line.startswith("| ") and not line.startswith("| #") and "---" not in line:
n += 1
return n
def main():
errors = []
expected = reextract()
expected_sorted = sorted(expected, key=lambda x: x["full_name"])
try:
actual = load_csv()
except Exception as e:
print(f"FAIL: cannot read CSV: {e}")
return 1
if len(actual) != len(expected_sorted):
errors.append(f"row count CSV: expected {len(expected_sorted)} got {len(actual)}")
norm = lambda s: re.sub(r"\s+", " ", str(s if s is not None else "")).strip()
for a, e in zip(sorted(actual, key=lambda x: x["full_name"]),
expected_sorted):
for col in COLUMNS:
av, ev = norm(a.get(col)), norm(e.get(col))
if av != ev:
errors.append(f"{a.get('full_name')}::{col}: expected {ev!r} got {av!r}")
# JSON continuity check
try:
jrows = json.load(open(JSON_PATH, encoding="utf-8"))
if len(jrows) != len(expected):
errors.append(f"json row count: expected {len(expected)} got {len(jrows)}")
for a, e in zip(sorted(jrows, key=lambda x: x["full_name"]),
expected_sorted):
for col in COLUMNS:
if norm(a.get(col)) != norm(e.get(col)):
errors.append(f"{a.get('full_name')}::{col} json mismatch")
except Exception as e:
errors.append(f"json read failed: {e}")
if errors:
print("CHECK FAILED")
for e in errors:
print(" -", e)
return 1
print(f"CHECK PASS: {len(expected_sorted)} repos, all fields byte-identical "
f"(CSV + JSON)")
return 0
if __name__ == "__main__":
sys.exit(main())