Package Stage: Protocells Support - Tracking Issue
**⚠️ AUTO-GENERATED:** Do not edit this description directly. Source of truth: [tracking_issue_description.md](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/protocells_geo_support_workflow/tracking_issue_description.md). Any manual edits **will be overwritten** on next sync.
# Package Stage: Protocells Support - Tracking
**Implementation plan:** https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md
**Verification environment:** https://gitlab.com/issue-reproduce/pkg-geo-get — see `docs/verification-process.md`
## Current Status
### In Progress
- GroupDistribution and ProjectDistribution — leaning towards D-split migration (consistent with other Debian models), but doing due diligence spike on dual-blob replicator approach first ([comment](https://gitlab.com/gitlab-org/gitlab/-/work_items/592643#note_3229900022))
### Verification Complete — Awaiting Review
- ProjectComponentFile — automated and manual verification passed, ready for review request
### On Hold
- RPM: Package team confirmed RPM registry is an abandoned MVC. Geo replication on hold per @crystalpoole ([comment](https://gitlab.com/gitlab-org/gitlab/-/issues/379055#note_3220415029)). Tasks and MRs closed.
## Process per Add Geo Support Issue
**Entry point:** Run `/protocells-geo-next` to see what's actionable and pick the next step.
For each issue, the cycle is ([Per-Model Execution Checklist](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#per-model-execution-checklist)):
1. [Validate generator](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c1-pre-flight-validate-generator) against Nuget::Symbol reference
2. [Generate Task 1](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c2-task-1-modify-db-schema-for-geo-support--mr-1) (DB schema) → create MR
3. [Generate Task 2](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c3-task-2-implement-geo-replication-behind-feature-flag--mr-2) (implementation) → create stacked MR
4. [Deploy, verify, and iterate](https://gitlab.com/issue-reproduce/pkg-geo-get/-/blob/main/docs/verification-process.md) — omnibus build → deploy to GET → automated verification → manual verification. Iterate as needed: fix issues → re-generate → rebuild → re-verify. See also [review iteration protocol](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c8-review-iteration-protocol).
5. When both MRs are verified and review-ready, request review
6. After Task 1 and Task 2 merge: [Task 3](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c4-task-3-release-geo-support--mr-3) (release) → [feature flag rollout](https://gitlab.com/cwoolley-gitlab/ai-workflow-artifacts/-/blob/master/workflow-artifacts/workitem-19604/a-plan/v40/plan-v40.md#c7-feature-flag-rollout-process-per-issue-after-task-3)
Task 1 is never merged independently — both Task 1 and Task 2 must be fully verified before requesting review on either.
## Prerequisites
- [x] A1: Dual-uploader question resolved → implementation in https://gitlab.com/gitlab-org/gitlab/-/issues/592643+s
- [x] A2: Organization-based selective sync validated
- [x] A3: Object storage handling decided for package models
## Workflow Tooling
- [x] B2: Generator script created and validated
- [x] B3: Claude Code skills created and symlinked
- [x] B4: This tracking issue created
- [x] B5: Geo tracking database configured for development (via `geo.experimental.allow_secondary_tests_in_primary`)
## Add Geo Support Issues
### 1. Packages::Debian::ProjectComponentFile (https://gitlab.com/gitlab-org/gitlab/-/issues/333611+s)
- [x] Generate Task 1 (DB schema) → https://gitlab.com/gitlab-org/gitlab/-/work_items/594713+s
- [x] MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/228787+s
- [x] Generate Task 2 (implementation) → https://gitlab.com/gitlab-org/gitlab/-/work_items/594714+s
- [x] MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/228959+s
- [x] Verification passed — **Status: automated and manual verification PASS**
- 2026-03-30: Discovered llhttp-ffi bug blocking ALL Geo blob sync (#595139+s) — runtime workaround (gem upgrade + monkey-patch) required on both nodes until MR !229530+s merges
- 2026-03-30: Debian ProjectComponentFile replication verified via S3 bucket content match — PASS, but REST API counters absent (replicator not registered in REPLICATOR_CLASSES)
- 2026-03-31: Omnibus build green, deployed to GET, 0 Geo-related CI failures
- 2026-04-07: **Automated verification PASS.** With llhttp workaround + `geo_packages_debian_project_component_file_replication` feature flag enabled, REST counter incremented 4→5 in ~50s. Root cause of llhttp issue: `rugged` 1.9.0 corrupts Omnibus libffi 3.2.1 FFI callbacks on kernel >= 6.8 (#595139+s). Upstream fix: MR !230361+s.
- 2026-04-13: **Manual verification PASS.** GUI inspection confirmed replication working correctly.
- [ ] Request review
- [ ] Task 1 and Task 2 merged
- [ ] Task 3: Release → https://gitlab.com/gitlab-org/gitlab/-/work_items/594715+s
- [ ] MR: _not yet created_
- [ ] Feature flag rollout
### 2. Packages::Debian::GroupComponentFile (https://gitlab.com/gitlab-org/gitlab/-/issues/556945+s)
- [ ] Generate Task 1 (DB schema) — **Status: not started**
- [ ] MR: _not yet created_
- [ ] Generate Task 2 (implementation)
- [ ] MR: _not yet created_
- [ ] Verification passed
- [ ] Request review
- [ ] Task 1 and Task 2 merged
- [ ] Task 3: Release
- [ ] MR: _not yet created_
- [ ] Feature flag rollout
### 3. Packages::Debian::GroupDistribution (https://gitlab.com/gitlab-org/gitlab/-/issues/556947+s)
- [ ] Generate Task 1 (DB schema) — **Status: waiting on https://gitlab.com/gitlab-org/gitlab/-/issues/592643+s (spike on dual-blob vs D-split in progress)**
- [ ] MR: _not yet created_
- [ ] Generate Task 2 (implementation)
- [ ] MR: _not yet created_
- [ ] Verification passed
- [ ] Request review
- [ ] Task 1 and Task 2 merged
- [ ] Task 3: Release
- [ ] MR: _not yet created_
- [ ] Feature flag rollout
### 4. Packages::Debian::ProjectDistribution (https://gitlab.com/gitlab-org/gitlab/-/issues/556946+s)
- [ ] Generate Task 1 (DB schema) — **Status: waiting on https://gitlab.com/gitlab-org/gitlab/-/issues/592643+s (spike on dual-blob vs D-split in progress)**
- [ ] MR: _not yet created_
- [ ] Generate Task 2 (implementation)
- [ ] MR: _not yet created_
- [ ] Verification passed
- [ ] Request review
- [ ] Task 1 and Task 2 merged
- [ ] Task 3: Release
- [ ] MR: _not yet created_
- [ ] Feature flag rollout
### 5. Packages::Rpm::RepositoryFile (https://gitlab.com/gitlab-org/gitlab/-/issues/379055+s) — **ON HOLD**
RPM registry upload was never implemented (abandoned mid-2022 MVC). Package team (@crystalpoole) confirmed Geo replication on hold until the format is revisited. Prod RPM tables are empty (0 rows). Tasks closed, MRs closed.
- [x] Generate Task 1 (DB schema) → https://gitlab.com/gitlab-org/gitlab/-/work_items/593815+s (closed)
- [x] MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/227615+s (closed)
- [x] Generate Task 2 (implementation) → https://gitlab.com/gitlab-org/gitlab/-/work_items/593816+s (closed)
- [x] MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/227707+s (closed)
- [ ] Update `every_gitlab_uploader_spec.rb` to mark RPM replication as not needed → https://gitlab.com/gitlab-org/gitlab/-/merge_requests/230471+s
issue