Review: Revert pal-e-docs-app rename — unblock CI + ship #105/#109
Verdict: NEEDS_REFINEMENT
The diagnosis is correct and the fix direction is right, but scope is under-specified for a clean dev-agent execution. PR #90's body enumerates every file it touched — that list is the canonical revert checklist and the issue body should reuse it verbatim instead of saying "playwright.config.ts (and elsewhere)." Two values in that list (Keycloak clientId, Harbor image repo) are semantically loaded and need explicit guidance with infra evidence so the dev doesn't second-guess.
Template Completeness
- [x] Type — Bug
- [x] Lineage — standalone, regression from PR #90
- [x] Repo — forgejo_admin/pal-e-app
- [x] What Broke — clear, with cascade diagram
- [x] Repro Steps — pipelines #114-#123 named
- [x] Expected Behavior — present
- [x] Environment — cluster/namespace, deployed SHA, main SHA, ingress all named
- [x] Acceptance Criteria — 6 items, mostly testable (see Acceptance Criteria section below)
- [x] Related — links to dictionary + PR #275 deferral guidance
Traceability
- [x] story:app-definition label present on board item #1015
- [ ] story note MISSING —
get_section(slug="project-pal-e-docs", anchor_id="user-stories")returns 5 stories (superuser-query, superuser-maintain, agent-read, agent-write, reader-browse).app-definitionis not listed.search_notes("story app-definition")returns empty. [SCOPE] Addstory:app-definitionentry to project-pal-e-docs user-stories table (or to a different project if the story lives elsewhere — clarify which). - [x] arch:pal-e-app label present on board item #1015
- [ ] arch note MISSING —
search_notes("arch-pal-e-app")andsearch_notes("arch pal-e-app frontend")return empty. [SCOPE] Create architecture notearch-pal-e-appdescribing the frontend component (SvelteKit + Keycloak + Tailscale ingress + Harbor image flow). - [x] Forgejo issue — #110 open and well-formed
Note: missing story/arch notes do not block this revert (it's a regression fix, not new architecture). Flagging per skill convention so they get tracked.
File Targets
The issue says "playwright.config.ts (and elsewhere)" — but PR #90's body enumerates the exact file list. Repo-wide grep for
pal-e-docs-app confirms PR #90's list matches the live repo state today. Verified files:- [x]
/home/ldraney/pal-e-app/playwright.config.ts— line 4 (comment), line 20 (baseURL default) — 2 hits - [x]
/home/ldraney/pal-e-app/.woodpecker.yaml— line 55 (PLAYWRIGHT_BASE_URL), line 69 (Kaniko repo), line 88 (OVERLAY) — 3 hits - [x]
/home/ldraney/pal-e-app/k8s/deployment.yaml— lines 4, 14, 18, 23, 24 (image repo) — 5 hits - [x]
/home/ldraney/pal-e-app/k8s/service.yaml— lines 4, 6, 9 — 3 hits - [x]
/home/ldraney/pal-e-app/src/lib/keycloak.ts— lines 2, 6, 13 (default clientId) — 3 hits - [x]
/home/ldraney/pal-e-app/.env.example— line 8 (VITE_KEYCLOAK_CLIENT_ID) — 1 hit - [x]
/home/ldraney/pal-e-app/package.json— line 2 (name field) - [x]
/home/ldraney/pal-e-app/package-lock.json— lines 2, 8 (name fields) - [x]
/home/ldraney/pal-e-app/README.md— line 1 (title) - [x]
/home/ldraney/pal-e-app/CLAUDE.md— lines 1, 72 (title + remote URL) - [x]
/home/ldraney/pal-e-app/e2e/home.spec.ts— line 4 (comment) - [x]
/home/ldraney/pal-e-app/e2e/auth.spec.ts— line 4 (comment) - [x]
/home/ldraney/pal-e-app/e2e/public-readiness.spec.ts— line 8 (comment)
13 files, 27+ hits total. Repo-wide grep for
pal-e-app\.tail5b443a returns no matches (confirms no orphan correct refs to preserve).[BODY] Replace "(and elsewhere)" with the exact PR #90 file enumeration above. Dev shouldn't have to re-derive scope.
Repo Placement
Correct repo. PR #90 was filed and merged on
forgejo_admin/pal-e-app (verified via curl to Forgejo API — repository.full_name returns forgejo_admin/pal-e-app). The Forgejo repo itself was NOT renamed; PR #90's premise ("Repo was renamed from pal-e-app to pal-e-docs-app") was wrong. [BODY] Add a one-liner: "PR #90 claimed the repo was renamed — it was not. Repo is and always has been forgejo_admin/pal-e-app. Do not attempt to rename anything in Forgejo as part of this revert."Dependencies
- Blocks: PRs #105, #109 deploy (already merged to main, stuck on stale image)
- Blocks: any future pal-e-app PR (every pipeline since #114 fails the same way)
- Related but separate: pal-e-platform PR #275 (decouples update-kustomize-tag from test failures). Issue body explicitly says "don't apply here" — that guidance is unambiguous and correct.
- No in-flight dependency on board (no other pal-e-app revert items in_progress / next_up).
Acceptance Criteria
Mostly testable. Two AC need a small tightening:
- AC1 (baseURL revert) — testable via
grep "pal-e-app.tail5b443a" playwright.config.ts - AC2 (repo-wide sweep) — testable via
rg pal-e-docs-appreturning zero matches. Strong as written. - AC3 (CI passes through update-kustomize-tag) — testable via Woodpecker pipeline status
- AC4 (pal-e-deployments commit) — testable via
git logon pal-e-deployments - AC5 (ArgoCD rolls to commit ≥ 4454c8d) — [BODY] verify
4454c8dis the actual main HEAD before the dev agent starts. The issue claims this is PR #109's commit; the dev agent should be told either to use the main HEAD at execution time, or this SHA needs to be pinned with provenance. - AC6 (manual /notes + role-based routing verification) — needs a how. Is this curl + auth, or browser? [BODY] add the verification recipe (e.g., "open https://pal-e-app.tail5b443a.ts.net/notes in browser after Keycloak login, confirm My Notes view renders").
Blast Radius
Important callouts the issue doesn't make:
- Keycloak clientId:
src/lib/keycloak.tsline 13 sets the defaultclientIdto'pal-e-docs-app'..env.examplesetsVITE_KEYCLOAK_CLIENT_ID=pal-e-docs-app. The deployed pod likely uses an env override, but if not, the running app is asking Keycloak for a client ID that may or may not exist in the realm. [BODY] Add: "If a Keycloak client namedpal-e-docs-appwas created during PR #90, that's also stale config — the canonical client ID ispal-e-app. Reverting the code defaults is correct; check Keycloak realm for orphan clients as a follow-up (NOT part of this fix)." - Harbor image repo:
k8s/deployment.yamlline 24 referencesharbor.tail5b443a.ts.net/pal-e-docs-app/app:e23a1d8c..., but the live overlay (pal-e-deployments/overlays/pal-e-app/prod/kustomization.yamlline 64) usesharbor.tail5b443a.ts.net/pal-e-app/app. The base manifest in this repo is overlay-overridden, so the wrong image path here doesn't break prod — but reverting it topal-e-app/appis correct AND aligns with .woodpecker.yaml line 69 (Kaniko push target). [BODY] Add: "Harbor project for this image ispal-e-app. Verify by listingharbor.tail5b443a.ts.net/v2/_catalog— do NOT create a new Harbor project. If apal-e-docs-appHarbor project was auto-created during failed pushes, leave it alone (cleanup is a separate ticket)." - Sibling services:
grep -r "pal-e-docs-app" /home/ldraney/pal-e-deployments/returns zero matches.grep -r "pal-e-docs-app" /home/ldraney/pal-e-services/not checked but should be sweep-verified. [BODY] Add an AC: "Repo-wide grep on pal-e-deployments and pal-e-services returns zeropal-e-docs-appmatches" (defensive — confirms no infra cross-contamination). - Original Issue #87: PR #90 closed Issue #87. The dev agent should NOT reopen #87 unless it explicitly described the (incorrect) rename request — if so, #87 needs a closing comment explaining the regression. [BODY] Add: "If PR #87 requested the rename, comment on it explaining the revert. Otherwise leave it closed."
Decomposition Assessment
13 files in 1 repo. AC count: 6 (with 2 needing tightening). Estimated agent work: ~10-15 min for the revert (mechanical sed + targeted manual review of keycloak.ts and deployment.yaml) + ~5 min waiting on CI. Total ~20 min agent time.
This exceeds the 5-minute rule on raw time, but the work is mechanical and tightly scoped (one repo, one rename direction). No decomposition needed — splitting would create more coordination overhead than it saves. A single agent can handle the revert + commit + push + monitor CI in one pass.
Recommendation
- [BODY] Replace "(and elsewhere)" in "What Broke" with the explicit 13-file list from PR #90 (reproduced in File Targets section above).
- [BODY] Add to "What Broke" or a new "Important context" section: "PR #90 claimed the Forgejo repo was renamed; it was not. Do not rename anything in Forgejo."
- [BODY] Pin or refresh AC5's reference SHA (
≥ 4454c8d) — either confirm it's main HEAD now or instruct dev to usegit rev-parse origin/mainat execution time. - [BODY] Add verification recipe to AC6 (how to manually verify /notes + role routing).
- [BODY] Add Keycloak clientId callout: revert code defaults to
pal-e-app, leave any orphan Keycloak client for follow-up cleanup. - [BODY] Add Harbor callout: image goes to
pal-e-app/app, do not create new Harbor project, leave any orphan project alone. - [BODY] Add new AC: "
rg pal-e-docs-appon pal-e-deployments returns zero matches." - [BODY] Add Issue #87 guidance (one line on whether to reopen / comment).
- [SCOPE] Create user story entry on project-pal-e-docs user-stories section for
story:app-definition(or clarify if story lives on a different project page). - [SCOPE] Create architecture note
arch-pal-e-appfor the frontend component.
Once the [BODY] fixes land, this is READY. The [SCOPE] items are independent backlog work and should not block this revert.