# Dragon Fork — Upstream Rebase Policy Tracks the relationship between `forge.wilddragon.net/zgaetano/datarhei-dragonfork-core` (this fork) and upstream `github.com/datarhei/core`. --- ## Baseline | Point | Value | |---|---| | Fork date | 2026-04-17 | | Fork commit | `0de97f4` ("Add linux/arm/v8 build") | | Upstream module path | `github.com/datarhei/core/v16` (kept — see `NOTES.md`) | | First rebase target | upstream `main` (post-v16.16.0) | --- ## Cadence Rebase against upstream `main` **monthly**, timed to follow an upstream minor release (`v16.X.0`) appearing on the upstream default branch. Emergency rebases (CVE in a transitive dependency, critical upstream fix) are performed ad-hoc following the same procedure, just sooner. --- ## Strategy: Rebase, Not Merge Use `git rebase upstream/main` rather than `git merge upstream/main`. - Keeps a linear history; `git log --oneline` stays readable. - Dragon Fork commits remain visually distinct from upstream commits. - Conflicts surface one commit at a time rather than in a single merge blob. Merge commits are only used for feature branches merging into `main` via PR. --- ## Divergence Boundaries ### Files exclusively owned by Dragon Fork (expect zero conflicts) These paths did not exist upstream at fork time and are not being upstreamed: | Path | Description | |---|---| | `app/webrtc/` | WebRTC app subsystem | | `core/webrtc/` | Pion peer factory, Source, ICE helpers | | `deploy/truenas/` | TrueNAS deployment bundle | | `docs/design/` | Dragon Fork design documents | | `docs/REBASE.md` | This file | | `.forgejo/` | Forgejo CI workflows | | `test/load/` | WHEP load-test harness | ### Files modified from upstream (higher conflict risk) | Path | Our change | Conflict strategy | |---|---|---| | `go.mod` / `go.sum` | Added Pion + Prometheus deps | Accept upstream base; re-add our `require` blocks; run `go mod tidy` | | `http/server.go` | WebRTC handler registration | Search for `WebRTC` in diff; reapply our three-line wiring | | `restream/` | `ProcessHooks` interface + `SetHooks` | Check if upstream changed hook shape; adapt our callbacks | | `config/` | `DataWebRTC` config block | Keep our field additions; adopt upstream structural changes | | `README.md` | Dragon Fork branding | Keep our content; cherry-pick upstream security notices | | `CHANGELOG.md` | Dragon Fork version entries | Keep our entries at top; adopt upstream format changes | --- ## Pre-Rebase Checklist ``` [ ] git fetch upstream # confirm new upstream commits exist [ ] CI is green on current main [ ] go mod vendor is clean: go mod vendor && git diff --quiet vendor/ # commit if dirty [ ] Tag current tip: git tag pre-rebase-v # e.g. pre-rebase-v16.17.0 ``` --- ## First Rebase Procedure Run these commands locally (or on any machine with the repo checked out): ```sh # 1. Add upstream remote (idempotent) git remote add upstream https://github.com/datarhei/core.git 2>/dev/null || true # 2. Fetch git fetch upstream # 3. Tag current tip UPSTREAM_VER=$(git describe --tags upstream/main --abbrev=0 2>/dev/null || echo manual) git tag pre-rebase-${UPSTREAM_VER} # 4. Rebase git rebase upstream/main # On conflict: # git diff — see what conflicted # # git add # git rebase --continue # 5. Update vendored dependencies go mod tidy go mod vendor git add vendor/ go.mod go.sum git commit -m "chore: update vendor after upstream rebase to ${UPSTREAM_VER}" # 6. Run verification gate (see below) # 7. Push git push origin main ``` --- ## Post-Rebase Verification Gate All of the following must pass before pushing the rebased `main`: | Check | Command | |---|---| | Build | `go build ./...` | | Vet | `go vet ./...` | | Unit + race | `go test -race -short -count=1 ./...` | | WebRTC smoke | `go test -race -count=1 -v -run 'TestIntegration_\|TestSubsystem_\|TestHandler_' ./app/webrtc/... ./core/webrtc/...` | | Latency gate | `go test -tags latency -timeout 90s -race -count=1 -run TestLatencyServerHop ./app/webrtc/... -v` | | TrueNAS smoke | Deploy to staging, subscribe one WHEP peer, verify video renders | Forgejo CI covers the first four automatically on push. The latency gate and TrueNAS smoke are manual. --- ## go.mod / Vendored Dependencies After rebasing and running `go mod tidy`: 1. Confirm Pion packages (`github.com/pion/*`) remain in `vendor/` at our required versions. 2. If upstream bumped a shared dep (e.g. `labstack/echo`), review that dep's changelog before accepting the version bump. 3. Commit `vendor/`, `go.mod`, and `go.sum` together: `chore: update vendor after upstream rebase to v` --- ## CI Automation (Future) Automated monthly rebase via a Forgejo-Actions scheduled workflow is a v0.3 consideration. Blocked on: runner having a git identity for push, and a strategy for surfacing conflict PRs when automation fails. --- ## Record-Keeping After each successful rebase, append a row to this table: | Date | Upstream version | Pre-rebase tag | Conflicts | Notes | |---|---|---|---|---| | (first rebase pending) | v16.X.0 | pre-rebase-v16.X.0 | — | run locally per procedure above |