Files
Gnuboard7/tests/scenarios/catchall-soft-404.yaml
2026-07-01 10:30:32 +09:00

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 미사용