Review: Create ldraney user on Forgejo for public-facing profile URL
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 containforgejo_adminURLs 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.htmlpal-e-platform-- terraform forgejo module, .woodpecker.yaml, scripts/update-kustomize-tag.sh, scripts/woodpecker-update-tag-step.yamlpal-e-services-- variables.tf, main.tf, k3s.tfvars.example, SERVICE_ONBOARDING.md, README.mdpal-e-app-- .woodpecker.yaml, docker-compose.yml, CLAUDE.mdpal-e-docs-- .woodpecker.yaml, forgejo_client.py, alembic migrations, README.mdwestside-app-- .woodpecker.yamlbasketball-api-- .woodpecker.yaml, Dockerfile, scripts/create_groupme_groups.py, docs/migrations.mdminio-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
ldraneyuser, every Woodpecker pipeline that referencesforgejo_admin/in clone URLs, script downloads, or PyPI index URLs will break - [ ] UNDOCUMENTED: Terraform state references
forgejo_adminas the Forgejo admin username -- changing this may require state surgery - [ ] UNDOCUMENTED: Harbor image paths and Forgejo package registry may reference
forgejo_adminnamespace
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_adminin 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_adminpackage 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.