46 lines
2.3 KiB
YAML
46 lines
2.3 KiB
YAML
# audit:allow test-scenario-coverage reason: 본 매니페스트는 미등록 경로 404 응답 시나리오 매트릭스 SSoT. 핵심 회귀 가드는 test_files 의 통과 테스트로 커버.
|
|
|
|
feature: 미등록 경로 HTTP 404 응답 (soft 404 방지 — 공개#47)
|
|
|
|
description: |
|
|
존재하지 않는 URL 이 catch-all 라우트로 SPA 셸을 HTTP 200 으로 반환하던 soft 404 를
|
|
HTTP 404 로 교정하는 시나리오. SPA 셸 본문은 유지(클라가 404 레이아웃 렌더)하되 상태만 404.
|
|
|
|
배경:
|
|
- catch-all `/{any?}` 가 모든 미매칭을 무조건 200 view 로 반환 → 봇이 미존재 페이지 색인.
|
|
- TemplateRouteResolver::routeExists() 신규 — resolve()와 달리 auth_required/guest_only
|
|
라우트도 "존재"로 인정 (SEO 비대상 ≠ 미등록). 미설치/로드 실패 시 true(404 억제 안전측).
|
|
|
|
axes:
|
|
template_type: [user, admin]
|
|
route_registration: [registered_static, registered_dynamic, registered_auth_required, registered_guest_only, unregistered, excess_segment]
|
|
bot: [bot, non_bot]
|
|
template_state: [installed, missing]
|
|
|
|
exclusions:
|
|
- { template_state: missing, route_registration: registered_static, reason: "미설치 시 routeExists=true 폴백 — 모든 경로 200" }
|
|
- { route_registration: excess_segment, template_type: admin, reason: "초과 세그먼트 규칙은 user/admin 동일 — user 케이스로 대표" }
|
|
|
|
effects:
|
|
- unregistered_user_path_returns_404
|
|
- unregistered_admin_path_returns_404
|
|
- registered_static_path_returns_200
|
|
- registered_dynamic_path_returns_200
|
|
- registered_auth_required_path_returns_200_via_route_exists
|
|
- registered_guest_only_path_returns_200_via_route_exists
|
|
- excess_segment_path_returns_404
|
|
- bot_unregistered_path_returns_404_consistent_with_non_bot
|
|
- missing_template_suppresses_404_returns_200_safe_fallback
|
|
- not_found_response_keeps_spa_shell_body
|
|
- static_asset_extension_path_bypasses_catchall
|
|
|
|
test_files:
|
|
- tests/Unit/Seo/TemplateRouteResolverTest.php
|
|
- tests/Feature/CatchAllNotFoundTest.php
|
|
|
|
rules_layer_coverage:
|
|
- rule: routing
|
|
coverage: catch-all 라우트는 name() 없는 closure(기존 동작 유지) — Laravel catch-all 관례
|
|
- rule: service-direct-data-access
|
|
coverage: routeExists 는 TemplateService/TemplateManager 위임만 — DB facade 미사용
|