fix(ui): использовать <Link> вместо <a> для internal routes (build error) #439
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#439
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/landing-nav-link-component"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
65c77b9: ESLint rule @next/next/no-html-link-for-pages запрещает для internal Next.js pagesTest plan
Merged via deep-code-reviewer — verdict APPROVE.
Deep Code Review — verdict
Summary
e5c5b2de(single, clean, no force/amend/no-verify)Cross-app navigation verification (critical concern)
Architecture confirmed via vault
audits/TradeIn_MVP_CodeReview_May23.md:tradein-mvp/— отдельный Next.js stack (tradein-frontend:3000) с basePath/trade-in@tradein path /trade-in /trade-in/*→ routes BEFORE default frontend, ловит доhandle { reverse_proxy frontend:3000 }frontend/src/app/trade-in/page.tsx— это DEAD CODE (vault audit M-1 "Delete from main, tradein-mvp is canonical"), но Caddy туда никогда не дойдёт<Link href="/trade-in/">поведение в проде:/trade-in/→ tradein-frontend рендерит trade-in page корректно<a>, просто с одним лишним prefetch round-trip)<Link href="/admin/scrape/all">: page существует в main app (frontend/src/app/admin/scrape/all/page.tsx) → нормальная client-side nav ✅Footer
<a href="/api/v1/docs">и<a href="/health">: backend endpoints, не Next pages → ESLint rule не triggers, оставлены<a>корректно ✅Findings
Green:
@next/next/no-html-link-for-pagesправильно понят: только internal Next pages, не external/backendimport Link from "next/link"— нет namespace collision (другихLinkimports в файле нет)/trade-in/Yellow (follow-ups, не блокирующие):
<Link href="/trade-in/">рекомендуется доработать до<Link href="/trade-in/" prefetch={false}>— отключит ненужный RSC prefetch на hover для cross-app route (tradein-frontend всё равно вернёт HTML, prefetch впустую). Косметика, не deploy-blocker.aria-currentдля активной страницы, без visible focus underline. Можно отдельным PR.Self-acknowledged miss (3rd in a row)
В review PR #438 я флагнул "Logo
<a>вместо<Link>(full reload, acceptable trade-off)" — но не предсказал что ESLint rule@next/next/no-html-link-for-pagesBLOCK'нет GHA build. Это 3-й missed finding подряд (послеcaddy/**paths в #433 и Caddy REDACT assumption в #434).Pattern для future UI-PRs: при review
<a href="/internal-route">в Next.js — VERIFY:@next/next/no-html-link-for-pagesне fail'нет CIapp/**/page.tsx) → требовать<Link><a>сeslint-disable-next-linecomment + reasonPost-merge action items
43a8ec42https://gendsgn.ru/→ click Trade-In / Concept / Admin / Site Finder / Аналитика — все routes должны open без TypeError / 404 flash<Link href="/trade-in/" prefetch={false}>(UX nit)fixes/про ESLintno-html-link-for-pagesrule pattern для future