| Ticket Hash: | 09386931e99a10898b63a4bc54914af887e18291 | ||
| Title: | Large git-native upstreams (Linux kernel): keep in git, sit a Fossil infra repo beside as a pinned peer — don't import | ||
| Status: | Active | Type: | Feature_Request |
| Severity: | Important | Priority: | Medium |
| Subsystem: | Resolution: | ||
| Last Modified: |
2026-09-20 14:42:31 51.7 days ago |
Created: |
2026-07-09 19:55:34 124.5 days ago |
| Version Found In: | |||
| Description: | ||||
|
Architecture (operator, 2026-07-09), superseding the rejected kernel-import ticket 087b4a0650. Principle: not every upstream belongs in Fossil. A large git-native history (Linux/TI kernel = 2.18M commits; other big monorepos) STAYS IN GIT — that's git's job; forcing a fossil import is pathological (178GB intermediate, disk-exhausting). Instead:
1. Kernel lives in GIT — mirrored/cloned via forgejo (github->openbeagle sync per system-topology), read-only for us. 2. A SMALL Fossil INFRASTRUCTURE repo sits BESIDE it (e.g. ti-kernel-infra.fossil) holding OUR work: board bring-up configs, patch series / patches against the kernel, build recipes, and the agent tickets/threads/wiki for this work. Small, fully Fossil-native (gets our threads/branches coordination substrate). 3. The infra repo references the git kernel as a PINNED PEER DEPENDENCY: a peer-dep edge (PeerRegistry, shipped) carrying the kernel's VERSION PIN (the commit/tag we build+test against) + read binding (ro_bind so a session reads the kernel at the pin) + the ticket channel for kernel-needs. This is exactly the cohosted-vs-peer-dependency model (ticket e1465affdf) applied to a git upstream. Generalize into the IMPORT PATH: import-project should distinguish "import small git/fossil history INTO fossil" vs "register a large git upstream as a git-native PINNED PEER (no import)". Add a size/commit-count threshold or an explicit --as-peer mode that clones the git mirror + creates/points the fossil infra repo's peer-dep instead of running fast-export|import. Also fold in: the disk_tmp fast-export materialization (178GB file vs a streaming pipe) should be fixed OR the import should refuse repos above a threshold with this peer path as the guided alternative. Related: cohosted-vs-peer-dependency (e1465affdf), multi-repo-dependencies (24415a30c7), beaglebadge-onboarding (bb8fc57110 — Interactor is the same pattern: git submodule = pinned peer), architecture T2 mirror-sync (the git side). | ||||
| User Comments: | ||||
added on 2026-07-09 19:57:16:
REFINEMENT (operator, 2026-07-09): the fossil infra repo must also DRIVE DEVELOPMENT on the git repo — we sometimes need to EDIT the git kernel, not just read it at a pin. So the peer edge for this case is READ-WRITE (a drive edge), not the read-only ro_bind of a pure pinned dependency. Two planes: - FOSSIL infra repo = CONTROL/DRIVE plane: threads (coordination, sessions, review), config (version pin, build recipes, board configs), tickets, wiki. Fossil-native so it carries our threads/branches coordination substrate. - GIT kernel = EDITABLE code plane: a kernel-dev session gets a WRITABLE git checkout (rw bind, not ro_bind), edits it, and changes land as GIT COMMITS on a working branch that flow back to github/openbeagle via the git-write path (forgejo mirror / desktop bridge / the git remote). The version PIN in the fossil repo advances DELIBERATELY when we adopt kernel changes. Session flow: read+edit the git checkout -> git commit on a working branch -> the why/what/review lives in the fossil infra repo's thread; pin bump is a reviewed act. This is distinct from a pure read-only pinned peer (that's for upstreams we only consume). Distinguish in the peer model: peer-dep edges gain a MODE (read-only-consume vs drive-edit); drive-edit gives the session a writable git working tree + a git-commit/push path, and pairs the fossil control repo with the git target. Note this also differs from architecture T2 mirror-sync (that publishes OUR fossil work out to git); here sessions edit the git kernel DIRECTLY while fossil holds only coordination/config. Ties: cohosted-vs-peer-dependency (e1465affdf) — the pin + ticket-channel still apply; the new axis is read-only vs drive. added on 2026-07-09 21:53:45: CORRECTION to the read-only-vs-drive framing (operator, 2026-07-09): do NOT treat "read-only-consume" as a distinct default class. "We haven't edited it yet" does NOT mean "we won't" — every git peer is DRIVE-EDIT-CAPABLE by default; the pin + a working branch track wherever development is (or will be) happening. A peer we're only tracking today is just a drive-edit peer we haven't pushed to yet, not a locked read-only one. So don't provision read-only-only; provision the writable working tree + git commit/push path as the norm, with the pin/ticket-channel on top. CONCRETE PROOF — the `badge-snake` branch: the TI kernel import was `--branch badge-snake`, and badge-snake is AGENT-BASED KERNEL DEVELOPMENT done on the BeagleBadge and pushed by the operator. So the kernel already carries our working development line — it's an active drive-edit target, not a passive upstream. The fossil infra repo's job is to DRIVE this development line (badge-snake): threads/review/config/pin in fossil, the actual kernel edits as git commits on badge-snake, flowing back to github/openbeagle. This is the SAME pattern as beaglebadge-onboarding (bb8fc57110): the badge does agent development on a git repo (Interactor there, kernel badge-snake here) and pushes it; the desktop bridge + forgejo carry it. Fold the kernel-infra design into that badge/peer development story rather than a separate read-only reference. The version pin still advances deliberately; the ticket channel still applies; the difference from a passive dependency is simply that we have (and expect) a live working branch. | ||||