Review: Create ldraney user on Forgejo for public-facing profile URL

review-621-2026-03-28 Doc

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- board-pal-e-platform, story:portfolio, arch:forgejo
  • [x] Repo -- forgejo_admin/pal-e-platform
  • [x] User Story -- clear before/after (forgejo_admin URL vs ldraney URL)
  • [x] Context -- enough background for a fresh-context agent
  • [x] File Targets -- 3 listed (but see issues below)
  • [x] Acceptance Criteria -- 3 items
  • [x] Test Expectations -- 3 items
  • [x] Constraints -- present, mentions CI risk and 3 approach options
  • [x] Checklist -- 4 items
  • [x] Related -- references resume-playground#1

Traceability

  • [x] story:portfolio -- portfolio presentation story
  • [x] arch:forgejo -- Forgejo component
  • [x] Forgejo issue -- #237, open

File Targets

  • [x] Forgejo admin API -- not a file; API operation to create user or rename. Acceptable for this type of work.
  • [x] ~/resume-playground/index.html -- verified. Lines 502, 638, 639 contain forgejo_admin URLs that need updating.
  • [ ] "Woodpecker repo configs" -- ISSUE: vague. Does not specify which repos. Blast radius analysis found .woodpecker.yaml files in at least 6 repos that reference forgejo_admin: pal-e-platform, pal-e-app, pal-e-docs, westside-app, basketball-api, minio-api.
Targets are not specific enough for an agent to act without guessing. The Woodpecker reference needs to be an explicit list of repos and files.

Repo Placement

ISSUE: Filed on forgejo_admin/pal-e-platform, but the work spans multiple repos:
  • resume-playground -- URL updates in index.html
  • pal-e-platform -- terraform forgejo module, .woodpecker.yaml, scripts/update-kustomize-tag.sh, scripts/woodpecker-update-tag-step.yaml
  • pal-e-services -- variables.tf, main.tf, k3s.tfvars.example, SERVICE_ONBOARDING.md, README.md
  • pal-e-app -- .woodpecker.yaml, docker-compose.yml, CLAUDE.md
  • pal-e-docs -- .woodpecker.yaml, forgejo_client.py, alembic migrations, README.md
  • westside-app -- .woodpecker.yaml
  • basketball-api -- .woodpecker.yaml, Dockerfile, scripts/create_groupme_groups.py, docs/migrations.md
  • minio-api -- .woodpecker.yaml, pyproject.toml, Dockerfile, CLAUDE.md
This is a multi-repo change that needs a tracking issue with child issues per repo, or a sub-board.

Dependencies

  • [ ] Board item #611 (story:portfolio, arch:playground) -- resume-playground work, logically related but not blocking
  • [x] No items in in_progress or next_up block this work
  • [ ] UNDOCUMENTED: If repos are transferred to a new ldraney user, every Woodpecker pipeline that references forgejo_admin/ in clone URLs, script downloads, or PyPI index URLs will break
  • [ ] UNDOCUMENTED: Terraform state references forgejo_admin as the Forgejo admin username -- changing this may require state surgery
  • [ ] UNDOCUMENTED: Harbor image paths and Forgejo package registry may reference forgejo_admin namespace

Acceptance Criteria

The 3 ACs are testable but incomplete:
  • [x] "ldraney profile resolves" -- verifiable via curl, specific
  • [x] "Resume HTML updated" -- verifiable via grep, specific
  • [x] "Public repos accessible" -- verifiable via curl, specific
  • [ ] MISSING: "CI pipelines still trigger on push" -- mentioned in Test Expectations and Constraints but absent from AC
  • [ ] MISSING: "Terraform plan shows no drift" -- if admin username variable changes
  • [ ] MISSING: "PyPI package index still works" -- basketball-api pip install references forgejo_admin PyPI namespace
  • [ ] MISSING: "ArgoCD/kustomize deployments unaffected" -- deployment repo references

Blast Radius

CRITICAL. The string forgejo_admin appears across 8+ repos in production-critical paths:
  • CI pipelines: 6+ .woodpecker.yaml files use forgejo_admin in clone URLs and script download URLs
  • Terraform: forgejo module variables (pal-e-platform), admin username variable with default "forgejo_admin" (pal-e-services)
  • Scripts: update-kustomize-tag.sh defaults DEPLOY_REPO to forgejo_admin/pal-e-deployments
  • PyPI: basketball-api pip install references forgejo_admin package namespace
  • Resume: 3 URLs in resume-playground/index.html
  • Documentation: SERVICE_ONBOARDING.md, multiple README files, CLAUDE.md files
The approach (new user + repo transfer vs admin rename vs URL alias) determines whether any of these references break. Rollback is NOT straightforward -- a botched rename could take the entire CI pipeline offline.

Decomposition Assessment

NEEDS DECOMPOSITION -- recommend template-board.
  • File count: 20+ files across 8+ repos
  • AC count: 3 stated + 4 missing = 7+ criteria
  • Estimated agent work: well beyond 5 minutes -- this is a platform-wide change with an undecided approach
  • Independent subtasks: Yes -- once the approach is decided, per-repo updates are parallelizable
The implementation approach is undecided (Constraints lists 3 options: new user + repo transfer, org rename, URL alias). A spike must resolve this before any sub-tickets can be scoped. Recommended decomposition:
  • Spike: Investigate Forgejo user rename vs new user vs org approach (determines blast radius)
  • Execute the Forgejo API operation (create user / rename / alias)
  • Update resume-playground URLs (1 file, 1 repo)
  • Update CI pipeline references (per-repo tickets, parallelizable)
  • Update terraform variables and verify state (pal-e-platform + pal-e-services)
  • Update documentation references (per-repo)
  • End-to-end validation (CI, PyPI, ArgoCD, profile URL)

Recommendation

  • [SCOPE] Decide approach first: new user + repo transfer, admin rename, or URL alias. Each has radically different blast radius. Recommend creating a spike issue to investigate.
  • [BODY] File Targets: Replace vague "Woodpecker repo configs" with explicit list of affected repos and files (pal-e-platform, pal-e-app, pal-e-docs, westside-app, basketball-api, minio-api -- all have .woodpecker.yaml with forgejo_admin references).
  • [BODY] Add missing AC: CI pipelines still trigger, terraform plan shows no drift, PyPI index works, ArgoCD deployments unaffected.
  • [BODY] Add dependency note: pal-e-services terraform, pal-e-docs forgejo_client.py, basketball-api Dockerfile/pyproject all reference forgejo_admin.
  • [DECOMPOSE] 20+ files across 8+ repos, 7+ AC, undecided approach. Split into spike + sub-board via template-board after spike completes.