Files
holocron/docs/adr/0029-onedev-supersedes-gitea-canonical-forge.md
Defame1297 a3453c5d6f docs(adr): supersede ADR-0007, plan OneDev migration
This repo's own hosting, issue tracking, and pull requests move from Gitea
to OneDev (ADR-0029), keeping the Gitea repo as a read-only archive rather
than deleting it. plugins/gitea is unaffected — it continues to ship as a
marketplace product regardless of what this repo hosts itself on.

Records the full execution plan (prerequisites, mirror/issue/PR/release
phases, verification checklist) and updates CONTEXT.md's Issue entry and
AGENTS.md's source-of-truth line to name OneDev instead of Gitea.

ADR: 0029
Refs: ADR-0007
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GGCPJBXPLJP5FprL4C8nu3
2026-09-22 19:24:48 +00:00

3.0 KiB

OneDev supersedes Gitea as this repo's canonical forge

Supersedes: ADR-0007 (Gitea as the exclusive issue tracker)

This repo's own hosting, issue tracking, and pull requests move from Gitea (git.dev.rkdr.net) to OneDev (onedev.dev.rkdr.net/Holocron). Gitea is frozen and kept reachable read-only as a historical archive rather than deleted, so commit messages, branch names, and ADRs that cite Gitea issue/PR numbers (e.g. #124, #140) stay resolvable. plugins/gitea/ is unaffected — it continues to ship as a marketplace product for consumers with Gitea repos of their own; this decision is about what this repo uses on itself, not what this repo authors and distributes.

Considered and rejected

  • Preserving Gitea's issue/PR numbers in OneDev. Rejected: OneDev issues and pull requests use independent per-type counters, unlike Gitea's single shared sequence — there is no API path to reproduce both simultaneously without a fragile create/delete padding hack. Migrated issues carry a back-link to their original Gitea URL instead; new work uses OneDev's own numbers from the cutover point forward.
  • Recreating historical PR objects (title/description/reviews) in OneDev. Rejected for the existing ~140 closed/merged PRs: tod pr create requires a live source branch, and Gitea already deletes head branches on merge, so recreating them means resurrecting deleted branches from merge-commit parent SHAs, opening throwaway PRs, and discarding them without merging (to avoid a second, divergent merge commit alongside the mirrored git history). The git mirror already carries every commit, message, author, and merge losslessly; the archived Gitea instance still holds the original PR/review UI for anyone who needs it. Any PRs genuinely open and in flight at cutover time are migrated for real, not archived.
  • Recreating Gitea's Reviewed/*, Status/*, and Compat/Breaking labels as new OneDev labels. Rejected in favor of OneDev's own out-of-the-box shape: structured Type/Priority fields (which Kind/* and Priority/* map onto directly) plus the native three-state workflow (Open / In Progress / Closed, no built-in disposition states). Disposition information that has no native home becomes a one-line note in the migrated issue body instead of a second, parallel, unstructured label taxonomy next to the real fields.

Consequences

  • Gitea issue/PR numbers cited in existing commit messages and docs remain valid only as long as the archived Gitea instance stays reachable; they are not remapped to OneDev numbers anywhere.
  • The six first-party apm.yml plugin dependencies (git, gitea, kyberforge, lint, core, bin), previously resolved unpinned against git@git.dev.rkdr.net:Defame1297/holocron.git, are repointed to the OneDev remote as part of this migration — apm's own dependency resolution must track the now-canonical remote, not a frozen archive.
  • AGENTS.md's "this repo and Gitea are the only source of truth" language is updated to name OneDev.