Review r2: Close stale pal-e-app / pal-e-docs-app rename tickets

review-973-2026-04-11-r2 Review

review approved

Verdict: APPROVED

Round 2 of board item #973 (forgejo_admin/pal-e-platform#279). All four [BODY] refinements from review-973-2026-04-11 (round 1) are applied. Housekeeping scope is clean, dependencies are explicit, and the ticket fits comfortably in a single agent pass. Advance backlog → todo. (Execution order still gated on #278 per spawn prompt guidance, but review gate is satisfied.)

Round 1 Findings Verification

# Round 1 Finding Resolution in r2 body Status
1 [BODY] pal-e-app#87 is already closed — treat as pointer-comment-only, not state change What Broke table row marks #87 as <strong>already closed (2026-03-28)</strong>. Per-Ticket Action section says "NO state change. Add a single pointer comment." AC#2 says "<code>pal-e-app#87</code> (already closed) receives one pointer comment citing #278 — state unchanged." Test Expectation confirms "state remains <code>closed</code> (was closed 2026-03-28; this housekeeping pass does not reopen it)." FIXED
2 [BODY] Cite #278 by full URL / number in Related section Related section now lists <code>forgejo_admin/pal-e-platform#278</code> explicitly with a parenthetical describing its role as "the canonical hostname swap ticket." Body references #278 by number throughout Per-Ticket Action and Expected Behavior. FIXED
3 [BODY] Drop AC #5 (<code>feedback_naming_convention</code> update) as out of scope AC list no longer mentions <code>feedback_naming_convention</code> at all. AC count is now 4. Lineage section explicitly acknowledges: "(3) AC dropping the <code>feedback_naming_convention</code> lesson-capture (out of scope; that's a memory file, not a pal-e-docs note)." FIXED
4 [BODY] Clarify AC #4 "no new tickets" vs "if anyone cares to file it" tension Per-Ticket Action for #255 and #257 now says "<strong>Do not file a new Keycloak rename ticket from this housekeeping pass</strong> — that decision belongs to whoever executes #278." AC#4 explicitly says "Forward-facing decisions about Keycloak client rename, namespace rename, or frontend validation are explicitly <strong>deferred under #278</strong> — they are NOT this ticket's responsibility and are NOT filed as fresh tickets here." The "if anyone cares" language is gone. FIXED

Template Completeness

  • [x] Type (Bug)
  • [x] Lineage (includes explicit round-1 delta summary)
  • [x] Repo
  • [x] What Broke (now with a 5-row per-item state table)
  • [x] Repro Steps
  • [x] Expected Behavior (distinguishes close-as-wontfix from pointer-comment-only)
  • [x] Environment
  • [x] Per-Ticket Action (per-item decisions, wontfix rationale, deferral language)
  • [x] Acceptance Criteria (4 ACs — #5 dropped per round 1)
  • [x] Test Expectations (verification queries that will be machine-checked)
  • [x] Constraints (tool choices named)
  • [x] Checklist
  • [x] Related (cites #278, #256, arch-domain-pal-e-docs, review-973-2026-04-11)
  • [ ] User Story / Architecture sections not in body — labels carry the triangle on the board item (story:superuser-maintain, arch:k8s-deploy). Acceptable per bug-template conventions.

Traceability

  • [x] story:superuser-maintain label — verified on board item #973. Housekeeping closures are superuser maintenance via MCP.
  • [x] arch:k8s-deploy label — present on board item. Conceptually valid. Note (non-blocking): no dedicated arch-k8s-deploy note exists in pal-e-docs. Closest backing note is arch-domain-pal-e-docs. Creating a dedicated arch note is still out of scope for this housekeeping ticket. Round 1 already flagged this as a future separate ticket; not re-raising for r2.
  • [x] scope:discovered label — correct (discovered during 2026-04-11 routing review with Lucas).
  • [x] type:bug label — matches the body's "### Type Bug" header.
  • [x] Forgejo issue URL — forgejo_admin/pal-e-platform#279, state=open, verified via API 2026-04-11.
  • [ ] Forgejo issue labels are empty (body-only labeling). Still not a blocker; triangle lives on board item. [LABEL] recommendation is optional polish, not required for approval.

File Targets

N/A — this ticket operates entirely on Forgejo issues and pal-e-docs board items via MCP. All targets are identifier-based (issue numbers, board item IDs). Re-verified as of 2026-04-11:
  • [x] pal-e-platform#234 — state=open. Target valid.
  • [x] pal-e-platform#255 — state=open. Target valid.
  • [x] pal-e-platform#257 — state=open. Target valid.
  • [x] pal-e-app#87 — redirects to pal-e-production#87, state=closed (closed_at 2026-03-28T17:01:43Z). Body correctly treats this as pointer-comment-only.
  • [x] pal-e-app#88 — redirects to pal-e-production#88, state=open. Target valid. Note: the forgejo_admin/pal-e-app URL now 301s to pal-e-production; the dev agent should expect curl -L or use the canonical repo name when operating. Not a blocker — the MCP update_issue / comment_on_issue tools follow redirects.
  • [x] Board items #510 and #513 — both confirmed present on board-pal-e-docs, column backlog, linking to the correct pal-e-app issue URLs.

Repo Placement

OK. pal-e-platform is the correct umbrella repo for a cross-cutting housekeeping pass that closes tickets in both pal-e-platform and pal-e-app/pal-e-production. No repo code is touched.

Dependencies

Single dependency: forgejo_admin/pal-e-platform#278 (hostname swap), board item #972. State: open, backlog. The spawn prompt correctly gates execution on #278 landing first — this is an execution-order constraint, not a review-gate constraint. Review gate (backlog→todo) passes. Scheduling constraint (todo→in_progress) is a separate decision for Ava when #278 is in at least in_progress.
No circular dependencies. No new dependencies introduced in r2.

Acceptance Criteria

4 ACs, each machine-verifiable:
  • [x] AC#1 — "four tickets closed as wontfix with a comment citing #278 by full URL" — verifiable via Forgejo API.
  • [x] AC#2 — "pal-e-app#87 receives one pointer comment, state unchanged" — verifiable via issue API + comments endpoint.
  • [x] AC#3 — "board items #510 and #513 removed from board-pal-e-docs" — verifiable via list_board_items.
  • [x] AC#4 — "no new tickets filed by this pass; forward-facing work deferred under #278" — verifiable by absence + explicit deferral language in body.
Test Expectations section adds 5 concrete verification queries the QA agent can run directly. Strong.

Blast Radius

Low. All operations are reversible in Forgejo (reopen + re-add board item) and touch no code, no CI, no runtime services. The only residual risk — closing a ticket whose intent is still live — is addressed by the per-ticket action table and the explicit deferral-under-#278 language. Round 1's "intent-survives-rename" concern is now resolved by the "do not file new tickets from this pass" instruction.

Decomposition Assessment

No decomposition needed. 5-minute rule check:
  • File targets: 0 (API-only)
  • Acceptance criteria: 4 (under the 5-AC threshold)
  • Estimated agent work: ~2-3 minutes — 4 update_issue calls (close+wontfix), 5 comment_on_issue calls (4 closing comments + 1 pointer comment on #87), 2 remove_board_item calls. All independent and idempotent.
  • Repos touched: 1 umbrella (pal-e-platform) + cross-repo API calls (not a decomposition trigger).
Housekeeping ticket remains flat and well-scoped for a single agent pass.

Recommendation

APPROVED. No action needed in the body. All four round 1 [BODY] fixes are cleanly applied and verifiable in the current issue text. Advance board item #973 from backlog to todo.
Execution-order reminder (not a review gate, but relevant for Ava's scheduling): do not dispatch dev work on #973 until #278 is in at least in_progress, per the original spawn prompt.
Optional non-blocking polish (do NOT hold the ticket for these):
  • [LABEL] (optional) Mirror board labels onto the Forgejo issue itself for consistency across surfaces.
  • [SCOPE] (future) File a separate backlog ticket if arch:k8s-deploy is going to keep appearing on tickets, to create an arch-k8s-deploy note. Still not this ticket's job.