feature: 비밀글 하위 리소스(첨부·댓글) 게이팅 (KVE-2026-1914 A-3/A-4) description: | 부모 게시글이 비밀글이면, 본문뿐 아니라 하위 리소스(첨부 다운로드/미리보기, 댓글 목록)도 열람 권한(작성자/manager/posts.read-secret) 없는 요청에는 원문을 노출하지 않는다. 게이트 SSoT 는 SecretContentGate 이며, 첨부 서빙(preview/download)·댓글 목록·본문이 모두 같은 판정을 재적용한다. 미리보기 라우트는 permission 미들웨어 없이(공개 썸네일 정책) 컨트롤러/서비스의 비밀 게이트만이 게스트를 막는다. 이중 방어(A-4b): 댓글 목록은 1차로 CommentController::index 가 비뷰어에게 빈 컬렉션을 반환하고, 2차로 CommentResource 가 컨트롤러가 넘긴 부모 post 로 댓글당 원문을 재확인한다 (요청 속성 재사용 — 댓글당 board_posts lazy-load 없이). axes: viewer: [guest, regular, owner, manager] effects: - regular_user_cannot_preview_secret_post_attachment - regular_user_cannot_download_secret_post_attachment - guest_cannot_preview_secret_post_attachment - guest_cannot_download_secret_post_attachment - owner_can_access_secret_post_attachment - manager_can_access_secret_post_attachment - normal_post_attachment_still_public - guest_can_preview_normal_post_attachment # 서명 preview URL 축 — 무인증 렌더 경로 (게이트 약화 없는 자격 위임, 7.0.7 사전점검 실측 발견) - guest_with_valid_signature_passes_secret_preview_gate - guest_with_tampered_signature_still_blocked - guest_with_expired_signature_still_blocked - secret_post_detail_serializes_signed_preview_url - normal_post_detail_serializes_plain_preview_url - regular_user_gets_empty_comment_list_on_secret_post - guest_blocked_from_secret_post_comments - owner_sees_secret_post_comments - manager_sees_secret_post_comments - normal_post_comments_still_visible - second_defense_masks_secret_comment_content - owner_second_defense_not_masked - comment_list_no_per_comment_post_query test_files: - modules/_bundled/sirsoft-board/tests/Feature/User/SecretPostAttachmentAccessTest.php - modules/_bundled/sirsoft-board/tests/Feature/User/SecretPostCommentAccessTest.php rules_layer_coverage: - rule: list-resource-resource-relation-requery-n-plus-one coverage: CommentResource 는 컨트롤러가 넘긴 부모 post 를 재사용 — 댓글당 board_posts 조회 0건 (comment_list_no_per_comment_post_query 가 고정)