Feature Request: Retire shields branch — badge strategy for a private repo
Type: Feature Request (FR)
ID: FR-064
Submitted: 2026-03-30
Submitted By: User (via maintainer agent)
Priority: MEDIUM
Status: COMPLETE (2026-03-30 — E5:S01:T69 / v0.5.1.69+1)
Repository Pattern: FR-064 = E5:S01:T69
Implementing Task: E5:S01:T69 – Shields branch retirement (private repo)
Summary
AI Dev Kit is a private GitHub repository. The remote shields branch carries an unrelated Git history whose sole file is shields.json, maintained by automated commits (e.g. “Updating tag "version"") for external badge tooling. That branch does not merge into main, duplicates no product value, and creates confusion. This FR captures work to implement a sustainable badge / metadata approach compatible with a private repo so the shields branch can be deleted from origin.
Problem Statement
origin/shieldshas no merge base withmain— it is not feature work; it is a parallel line of hundreds of tiny JSON commits.- Private repo constraints: Many Shields.io dynamic endpoints assume public GitHub data (release count, stars, workflow status). Those often fail or leak “private” semantics when the repo is private, so teams fall back to static badges or internal dashboards.
- Operational debt: Keeping a long-lived orphan branch for
shields.jsonis a hygiene and security-discussion smell (who authorizes the bot, what is BYOB/yarr.is, is the branch documented anywhere?). - End state: We want no dependency on
shieldsfor README or automation, and permission to delete the branch after migration.
Goals
- Document current state — What consumes
shields.jsontoday (if anything besides the historical bot)? What does root README use? (Today: static Shields.io image URLs for license/status/Python — see README header comment.) - Define target state — Badges and version visibility on
mainwithout theshieldsbranch:- Prefer static
img.shields.io/badge/...labels maintained alongside RW-updated README version text, or - Documented private-repo-safe alternatives (e.g. org-internal badge endpoint, GitHub-only viewers, “no network badge” policy).
- Prefer static
- Decommission
shields— Disable or redirect automation that pushes toshields; archive any required JSON onmainonly if a tool still needs it (otherwise remove). - Delete remote branch — After validation, delete
origin/shields(and localshieldsif present) with a short runbook note in maintainer docs or Epic 6 tooling notes.
Proposed implementation plan (high level)
| Phase | Action |
|---|---|
| 1. Inventory | Confirm no CI, README, or third-party integration requires shields / shields.json; grep org + docs. |
| 2. README / docs | Ensure README.md badge block explicitly documents private repo choice (static badges; link to this FR). |
| 3. Replacement | If any consumer needed shields.json, generate equivalent under main (one file, versioned, optional) or replace with static badges only. |
| 4. Automation off | Turn off BYOB / external job pushing to shields (org setting, PAT revoke, or branch protection). |
| 5. Delete branch | git push origin --delete shields after maintainer ACK; record in changelog or Epic 6 maintenance note if required. |
Functional requirements
- FR-064-F1: No documented install or RW step may require the
shieldsbranch. - FR-064-F2: README (or agreed doc surface) shows license / status / version without relying on dynamic GitHub repo stats that break for private repos.
- FR-064-F3: Automation pushing orphan commits to
shieldsis stopped before branch deletion. - FR-064-F4:
origin/shieldsdeleted (or explicitly archived per org policy) with evidence linked from the implementing task.
Non-functional requirements
- FR-064-NF1: No secrets in badge URLs or static JSON committed to
main. - FR-064-NF2: Deletion is reversible only via GitHub reflog — document that for safety.
Acceptance criteria
- Inventory complete; gaps documented in the task file.
- Target badge/metadata approach agreed and reflected on
main. - External automation to
shieldsdisabled or documented as removed. -
shieldsbranch removed from remote (and locals cleaned up). - Task E5:S01:T69 closed with Version Anchor via normal RW.
Related
- E5:S01:T68 — consumer path / README hygiene (packaging narrative).
- FR-062 — GitHub releases (public artifact story; orthogonal to private source repo badges).
References
- Discussion context:
origin/shieldstip contains onlyshields.json(badge meta: version label, license, status, tests/coverage placeholders); commit history dominated by “Updating tag "version"".