Skip to content

feat: add central package dashboard published to GitHub Pages - #17

Merged
00o-sh merged 3 commits into
mainfrom
claude/central-package-dashboard-wohblh
Aug 14, 2026
Merged

feat: add central package dashboard published to GitHub Pages#17
00o-sh merged 3 commits into
mainfrom
claude/central-package-dashboard-wohblh

Conversation

@00o-sh

@00o-sh 00o-sh commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

What & why

Gives the program a single status + documentation dashboard for every @unabandoned/* fork — pending Renovate updates, open PRs/issues, latest release, CI, security fast-path in flight, and what each package is used for — built so it can't go stale.

The sustainability design splits the data in two:

  • Derivable state (open PRs/issues, pending Renovate updates, releases, CI, security / autorelease: pending) is pulled live from the GitHub API at build time — never stored anywhere.
  • Editorial state (upstream source, what the package does, why we forked it, where it's used) lives in each fork's own .unabandoned.yml, co-located with the code so it's updated in the same PR. The dashboard reads it straight from the fork's default branch — there is no central registry to drift.

The dashboard is generated and never hand-edited, published to GitHub Pages at https://unabandoned.github.io/.github/ on a daily schedule, on demand, and whenever the builder changes. Since the org has no forks published yet, this ships the whole convention before there's anything to retrofit; the page renders a clean empty state until the first fork lands.

What's included

  • scripts/build_dashboard.py + scripts/dashboard_template.html — discovers forks (a repo is a fork iff it carries .unabandoned.yml), gathers live state, renders a theme-aware, self-contained static site + machine-readable data.json. Best-effort by construction: one failing API call degrades a single datum to "unknown" rather than failing the build.
  • scripts/validate_metadata.py — the single definition of the .unabandoned.yml schema, imported by the builder and run by reusable-ci on every fork PR, so a fork can't merge broken metadata or silently fall off the dashboard.
  • templates/.unabandoned.yml — the metadata template + fork-standup docs.
  • .github/workflows/dashboard.yml — build + Pages deploy (SHA-pinned checkout; Pages actions on major-version tags per the existing "Renovate pins to digests on first run" convention).
  • reusable-ci.yml — new metadata job validating .unabandoned.yml (no-op when absent).
  • DocsCONTRIBUTING.md checklist, templates/README.md, README.md, profile/README.md link, and CLAUDE.md program guidance including the one-time human Settings → Pages → Source: GitHub Actions step.

One-time human setup

Enable Pages in unabandoned/.github: Settings → Pages → Build and deployment → Source: GitHub Actions. Like the Renovate app and npm trust, this repo toggle can't be scripted.

Type of change

  • fix / feat / perf — consumer-facing
  • deps — dependency update (add the security label if it fixes a CVE)
  • chore / ci / build / docs / test / refactor — maintenance

Checklist

  • Commits follow Conventional Commits (commitlint passes)
  • npm test passes on Node 20 / 22 / 24 — no JS/test surface changed; the Python scripts are py_compile-clean and smoke-tested (validator against valid/invalid metadata, renderer against populated + empty states, all placeholders filled)
  • No new runtime dependency — the only new dependency is PyYAML, installed into an isolated venv in CI only for the dashboard build; it never touches any published or fork dev tree
  • Dev tree kept lean (prefer built-in node:test over new runners)

Generated by Claude Code

claude added 3 commits August 14, 2026 03:43
Adds a self-updating status + documentation surface for the fork program:

- `scripts/build_dashboard.py` + `dashboard_template.html`: discover org forks
  (a repo is a fork iff it carries `.unabandoned.yml`), pull live state from the
  GitHub API (open PRs/issues, pending Renovate updates, latest release, CI,
  security fast-path, autorelease-pending), and render a theme-aware static site
  plus `data.json`. Empty-state handled for the pre-fork org.
- `.unabandoned.yml` metadata convention (`templates/.unabandoned.yml`): each
  fork's single source of truth for editorial facts (upstream, summary,
  why-forked, used-by), co-located so it can't drift. Derivable state is never
  stored — only pulled live.
- `scripts/validate_metadata.py`: one schema definition, imported by the builder
  and run by `reusable-ci` so forks can't merge broken metadata or fall off the
  dashboard silently.
- `dashboard` workflow: rebuilds and deploys to Pages on a daily schedule, on
  demand, and whenever the builder changes.
- Docs: fork-standup checklist, templates, org profile link, and CLAUDE.md
  program guidance (including the one-time Pages-enable human step).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EiJUpqQvbWm8pVyV8bRYy1
A filled-in reference alongside the blank template, showing what a fork's
dashboard metadata looks like once completed.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EiJUpqQvbWm8pVyV8bRYy1
Renders the owned subtree as a computed, dependency-free SVG — a panel on the
main dashboard plus a standalone topology.html — with consumers on top, the
@unabandoned forks in dependency layers beneath, and shared leaves at the
bottom. Node colour carries live CI/security health.

Every edge is derived, never hand-drawn:
- fork -> fork from each fork's package.json dependencies, filtered to the
  @unabandoned scope (build_dashboard now fetches package.json per fork);
- consumer -> fork from used-by in each .unabandoned.yml.

scripts/topology.py does a layered (Sugiyama-lite) layout with a barycenter
crossing-reduction sweep and emits SVG that inherits the page's CSS variables,
so it themes light/dark with the rest of the page. data.json gains a topology
{nodes, edges} block. Docs (profile, README, CLAUDE.md) link the new view.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EiJUpqQvbWm8pVyV8bRYy1
@00o-sh
00o-sh merged commit ae2bd5a into main Aug 14, 2026
2 checks passed
@00o-sh
00o-sh deleted the claude/central-package-dashboard-wohblh branch August 14, 2026 04:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants