Repo Lifecycle Management
Applies to: All repos in the 2cld federation
Principle
Repos should be intentionally created, actively maintained, or explicitly archived. Prevent “repo sprawl” — abandoned repos with no clear status.
Lifecycle States
Active → Merge Candidate → Archived
| State |
Meaning |
Indicators |
| Active |
Being worked on, has open issues or recent commits |
Commits in last 90 days |
| Merge Candidate |
Could be absorbed into another repo |
No unique purpose, overlaps with another |
| Archived |
Read-only, preserved for history |
No commits needed, repo archived in settings |
Creating a New Repo
Before creating a repo, ask:
- Does this work belong in an existing repo?
- Is this a new project or a sub-component?
- Who will maintain it?
- What’s the Definition of Done for this repo’s purpose?
Setup checklist:
Flagging for Merge/Archive
- Create an issue on the repo: “Consider merge into [target-repo] and archive”
- Describe what the repo does and why it could merge
- Tag with
lifecycle or cleanup
- Review during weekly review
Stale Detection
During weekly review or via status scripts:
- No commits in 90+ days → flag for review
- No open issues → is this done or abandoned?
- Overlaps with another repo → merge candidate
Decision: keep active, merge, or archive.
Merging
- Move relevant code/docs into the target repo
- Create a final commit noting the merge source
- Update any references in coordination docs
- Archive the source repo
Archiving
- In GitHub/Gitea repo settings → Archive repository
- Repo becomes read-only, stays accessible for history
- Remove from active inventory
- Note in coordination docs: “archived [date], merged into [target]”