Remove Problem Description Display on Problem Detail Page — Redirect to Source Link

SummaryRemoved the problem body text (`description`) render block from the problem detail page (`/problems/[id]`), redirecting problem access to the Programmers/BOJ source link. Only the display render logic was deleted (DB data and the AI-analysis prompt are unaffected), so it applies immediately and uniformly to all problems, new and existing. Source link, difficulty, tags, and deadline metadata are retained. PR #475 `b5b83e2`, `page.tsx` +1/−8. As a small frontend display removal, no Critic gate applied.

Date
ImpactMedium

Date: 2026-07-20

Goal

On the problem detail page (frontend/src/app/[locale]/problems/[id]/page.tsx), do not render the problem body (description) text directly on screen. Users are redirected to the original problem via the Programmers/BOJ source link.

Background: Exposing the full problem body on our own page is undesirable from a source (Programmers/BOJ) copyright standpoint. Problem access is delegated to the source link, while the platform focuses on metadata and study flow such as difficulty, tags, and deadlines.

Decisions

D1. Remove only the problem body render block (delete display logic, preserve data)

Deleted the problem body render block in page.tsx:

diff
-              {/* description */}
-              {problem.description && (
-                <p className="text-[13px] leading-relaxed whitespace-pre-wrap" style={{ color: 'var(--text-2)' }}>
-                  {problem.description}
-                </p>
-              )}
-
-              {/* source link */}
+              {/* source link (problem body not exposed — Sprint 252: access via Programmers/BOJ link) */}
                 {problem.sourceUrl && ( ... )}
  • Only the display render logic is removed — the description field value (DB / API response) remains intact. No data deletion, no migration.
  • Independent of when a problem was created, it applies immediately and uniformly to all problem detail pages, new and existing (since it is a removal of the render branch).
  • Minimal revert cost: restoring the render block alone fully reverts the change (no migration needed).

D2. Explicitly retained elements

Instead of the body, the following are kept as-is:

  • Source link (problem.sourceUrl — Programmers/BOJ)
  • Problem metadata such as difficulty, tags, and deadline
  • AI analysis flow — ai-analysis worker.py _get_problem reads description directly from the DB, so prompt context injection is unaffected (the Sprint 248/249 problem-context enrichment path is preserved).

Completed Items

CommitPRContent
b5b83e2#475Remove problem body render block on problem detail page (page.tsx +1/−8)

Critic result: Not applicable — a single-file, small frontend display removal (render block deletion; logic, data, and API unchanged), so no separate cross-review gate was run.

Backlog

  • 🔴 Security: ANTHROPIC_API_KEY rotation (user-deferred — revoke in Anthropic Console, reissue + reseal SealedSecret)
  • 🔴 Security: claude setup-token long-lived token exposed in plaintext transcript — revoke and reissue if external sharing is a concern
  • GA4 admin Enhanced Measurement OFF / production UAT / data stream URL alignment (user-direct)
  • Server redeploy + live SEO verification (ops, Sprint 212/213 deliverables)
  • Harness checkup --full CI scheduled automation (monthly cron) review (Sprint 209 follow-up)