Add the shared project-status workflow - #7
Merged
Merged
Conversation
Each account keeps its own status hub and calls this, so a privacykey badge is served from a privacykey repo and no credential has to reach across the three identities. A leaked token costs one account rather than all of them. Tier definitions live in actions/project-status/tiers.json rather than in each hub, because a tier's promise is a claim made on two dozen public repos and three copies of it would drift. build.mjs regenerates badges, STATUS.md and the collapsed profile section from status.json, and refuses to run if a repo is marked listed while private — the badges directory is browsable, so that mistake would publish an index of unreleased work. --aggregate lets one hub render another's listed repos without a token, since every hub is public and already withholds its private entries. drift.mjs reports facts rather than re-deriving tiers: a version that inferred tiers from activity flagged 28 of 61 repos, almost all falsely, because those signals can't separate a billing block from an abandoned repo or a reusable workflow from a broken one. It now reports only what is objectively true and worth acting on — a dead link, a tap behind its own release, an ignored queue. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The adamXbot caller passes collapsed: false so its org profile renders the project list expanded, but the input was never declared, so the call would have failed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The engine behind the portfolio status system. One implementation, three consumers —
privacykey/.github,adamXbot/.githubandAdamXweb/AdamXwebeach keep their ownstatus.jsonand call this.Why per-account rather than one central hub
A single hub needs one credential that can read all three identities, stored in a public repo. Per-account, each token is scoped to its own owner, so a leak costs one identity instead of three. It also means a privacykey product's badge is served from a privacykey repo rather than a personal profile.
The unified list on the personal profile survives:
--aggregatepulls the other hubs'status.jsonover plain HTTPS with no token, because every hub is public and each already withholds its private repos.What's here
actions/project-status/tiers.json— canonical tier definitions, shared so three copies can't driftactions/project-status/build.mjs— regenerates badges,STATUS.md, profile section;--checkcatches hand-editsactions/project-status/drift.mjs— weekly reality check.github/workflows/project-status.yml— the reusable workflowVerified
All three hubs build; aggregation produces 24 listed rows on the profile; an unreachable hub fails loudly rather than silently publishing a partial list; a
listed: true+public: falsecombination is a hard build failure.The drift checker was rewritten after testing. The first version re-derived each tier from activity signals and flagged 28 of 61 repos, nearly all false — it read
startup_failure(the current Actions billing block) and reusableworkflow_callworkflows as broken repos. It now reports facts only, and finds 11 real issues across the portfolio.Needs a
v1retag after merge.🤖 Generated with Claude Code