0003 — Rocky consolidation policy: rocky-hq is the only home
- Date: 2026-05-02
- Status: Accepted
- Supersedes: none
- Reinforces: 0001-redesign-bootstrap.md, 0002-rename-fleet-to-hearth.md
Context
Rocky's source code currently lives in three places:
https://github.com/rocky-hq/rocky— the parent superproject (this repo).https://github.com/grace-hq/rocky— the freestanding origin of the existing@rocky/opsNext.js console (predates this redesign; the console's git history lives here).devarno-cloud/rocky— a submodule ofdevarno-cloudwhose URL points atgrace-hq/rocky.
Phase 2 (lift-console) moves the console's history into rocky-hq/console (a sibling of this superproject under the rocky-hq GitHub org). After Phase 2 lands, the old locations are stale duplicates of the same code under different orgs — exactly the situation that produces "which one's canonical?" confusion six months from now.
Decision
All Rocky source repositories live under the rocky-hq GitHub org. Period.
- The canonical home for Rocky parent + every submodule (
console,ralph,hearth,algo,contracts) ishttps://github.com/rocky-hq/<name>. - Rocky source code does not live under any other GitHub org (
grace-hq,devarno-cloud,devarno,petrova-hq, etc.). The only exceptions are wrappers and integration adapters — repos whose purpose is consuming Rocky from a different product line, not being Rocky. Wrappers depend onrocky-hq/*over public APIs/packages; they never re-host Rocky source. - Rocky source code does not appear as a git submodule of any non-
rocky-hqrepo. If a non-rocky-hqrepo previously embedded Rocky as a submodule, that submodule is removed; the consumer either calls Rocky over a network API or vendors a thin client/SDK.
Immediate consequences (Phase 2 close-out actions)
grace-hq/rocky— archive on GitHub (read-only, with the description and topmost README updated to point atrocky-hq/console). Do not delete: history matters, archival preserves it without inviting drift. Move-direction signal is the GitHub "archived" badge plus a one-line README banner.devarno-cloud/rockysubmodule — remove entirely fromdevarno-cloud. Devarno-cloud is a consumer of Rocky per its ownAGENTS.xml; consumers depend on Rocky's public surface (e.g. the deployed console, or a future SDK), not on its source tree. The removal lands indevarno-cloudwith its own MR-7 decision doc.- Phase-2 plan operator-follow-up — these become required actions, not optional. The Phase-2 plan is updated alongside this decision to reflect that.
Future consequences (any new Rocky-adjacent work)
- A Rocky-adjacent project elsewhere is acceptable only if it satisfies the wrapper/integration test: it depends on
rocky-hq/*public surface, never re-hosts Rocky source, and a single sentence can describe what the wrapper adds on top of Rocky. Examples:petrova-hqcalling Rocky'sprovision_rockyverb (integration); adevarno-cloud/rocky-sdkpackage that wraps the console API for in-process callers (wrapper). - Counter-example: forking Rocky into another org because it's "easier to iterate there" — that's drift, not a wrapper. Reject.
Why this policy now (and not later)
The cost to centralise Rocky is lowest the moment before Phase 2 merges. After Phase 2 merges, three locations exist with overlapping, drifting copies of the console's history. Three months from now, the cleanup cost is multiplied by however many ref-bumps and consumer-side changes have happened in the duplicate repos. Six months from now, the cleanup is a pull-out-the-spreadsheet refactor.
The grace-hq/rocky archival and devarno-cloud submodule removal are the same action repeated for consistency: collapse the surface area to one canonical location. Wrapper projects are fine; duplicates are not.
Why "archive" and not "delete" for grace-hq/rocky
GitHub's archive flag preserves all history, all PRs, all issues — the repo becomes read-only and is clearly badged as archived. Deletion is irreversible and would orphan any external links, tarballs, vendor checkouts, or bookmarks. Archival is the standard-of-care move.
References
- Spec:
docs/specs/2026-05-02-rocky-system-redesign.md - Devarno-cloud's consumer-submodule rule:
devarno-cloud/AGENTS.xml<handoff>rule 3 ("Consumer submodules ... are NOT governed by devarno-cloud"). - Phase 2 plan operator follow-up:
docs/plans/2026-05-02-rocky-lift-console-phase-2.md(updated post-this-decision to reflect required actions).