ledger: Census of stackchain org repos (9) with verify gate
This commit is contained in:
1 parent
b882336fa6
commit
02252e403e
5 files changed
+1131
No files matched your search
@@ -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
|
||||
|
@@ -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 |
|
||||
@@ -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())
|
||||
Reference in new issue
Block a user