fix(identity): 잔여 과제 전건 처리 + 로딩 표시 실렌더 확정

앞선 커밋이 CHANGELOG 에 주장한 "로딩 표시가 나오지 않던 문제 수정" 이 실제로
화면에 나타나는지 브라우저로 확정했다. 전달 경로부터 DOM 마운트·해제까지 측정했고,
지연·에러 응답에서도 영구 로딩이 남지 않음을 확인했다.

측정 과정에서 앞선 세션의 판단 하나가 틀렸음을 확인했다 — "오버레이 DOM 이 어느
화면에서도 관측되지 않는다" 는 관측 대상 노드를 잘못 잡은 것이었다. 스피너 방식
레이아웃은 다른 노드를 쓰며, 대조군에서도 안 보였던 이유가 이것이다.

미뤄 두었던 과제 4건을 함께 구현했다.

- 인증창을 그냥 닫고 이탈하면 그 인증 요청을 서버에도 종료로 표시한다.
 이전에는 브라우저만 알고 있어 인증 이력에 "보낸 뒤 소식 없는" 항목이 남았다
- 플러그인 설정 화면이 저장된 비밀값을 다시 내려받던 것을 가려서 표시한다.
 그 항목을 건드리지 않고 저장하면 저장된 값이 그대로 유지된다
- 언어팩 반영 누락 검사가 버전만 비교해 "버전 같고 내용 다름" 을 놓치던 사각을
 콘텐츠 비교로 닫았다
- 확장이 검증 규칙을 추가할 때 쓰는 필터 이름 6개를 표준 형태로 통일했다.
 예전 이름도 함께 발행하므로 기존 확장은 수정 없이 동작한다

정적 검사 룰 2종의 오탐·사각을 함께 고쳤고, 개명으로 검사 대상에 편입된 파일의
사전 결함 8건을 해소했다. 검수용 데이터는 전량 정리했다.
This commit is contained in:
HeuJung committed 2026-07-31 00:32:48 +09:00
1 parent bd215bc586
commit b127afcea7
38 files changed
+503 -53

No files matched your search

@@ -14,7 +14,7 @@ use Modules\Sirsoft\Board\Traits\FormatsBoardDate;
*
* core.search.results Filter Hook을 구독하여 검색 결과에 게시글을 추가합니다.
* core.search.build_response Filter Hook을 구독하여 응답 구조를 생성합니다.
* core.search.validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
* core.search.index_validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
*/
class SearchPostsListener implements HookListenerInterface
{
@@ -43,7 +43,7 @@ class SearchPostsListener implements HookListenerInterface
'priority' => 10,
'type' => 'filter',
],
'core.search.validation_rules' => [
'core.search.index_validation_rules' => [
'method' => 'addValidationRules',
'priority' => 10,
'type' => 'filter',
@@ -38,7 +38,7 @@ class SearchPostsListenerTest extends TestCase
$this->assertArrayHasKey('core.search.results', $hooks);
$this->assertArrayHasKey('core.search.build_response', $hooks);
$this->assertArrayHasKey('core.search.validation_rules', $hooks);
$this->assertArrayHasKey('core.search.index_validation_rules', $hooks);
foreach ($hooks as $hook) {
$this->assertEquals('filter', $hook['type']);
@@ -13,7 +13,7 @@ use Modules\Sirsoft\Ecommerce\Services\ProductService;
*
* core.search.results Filter Hook을 구독하여 검색 결과에 상품을 추가합니다.
* core.search.build_response Filter Hook을 구독하여 응답 구조를 생성합니다.
* core.search.validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
* core.search.index_validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
*/
class SearchProductsListener implements HookListenerInterface
{
@@ -41,7 +41,7 @@ class SearchProductsListener implements HookListenerInterface
'priority' => 20,
'type' => 'filter',
],
'core.search.validation_rules' => [
'core.search.index_validation_rules' => [
'method' => 'addValidationRules',
'priority' => 20,
'type' => 'filter',
@@ -36,7 +36,7 @@ class SearchProductsListenerTest extends TestCase
$this->assertArrayHasKey('core.search.results', $hooks);
$this->assertArrayHasKey('core.search.build_response', $hooks);
$this->assertArrayHasKey('core.search.validation_rules', $hooks);
$this->assertArrayHasKey('core.search.index_validation_rules', $hooks);
// 모두 filter 타입인지 확인
foreach ($hooks as $hook) {
@@ -11,7 +11,7 @@ use Modules\Sirsoft\Page\Services\PageService;
*
* core.search.results Filter Hook을 구독하여 검색 결과에 페이지를 추가합니다.
* core.search.build_response Filter Hook을 구독하여 응답 구조를 생성합니다.
* core.search.validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
* core.search.index_validation_rules Filter Hook을 구독하여 검색 파라미터 규칙을 추가합니다.
*/
class SearchPagesListener implements HookListenerInterface
{
@@ -37,7 +37,7 @@ class SearchPagesListener implements HookListenerInterface
'priority' => 10,
'type' => 'filter',
],
'core.search.validation_rules' => [
'core.search.index_validation_rules' => [
'method' => 'addValidationRules',
'priority' => 10,
'type' => 'filter',
@@ -49,7 +49,7 @@ class SearchPagesListenerTest extends ModuleTestCase
$this->assertCount(3, $hooks);
$this->assertArrayHasKey('core.search.results', $hooks);
$this->assertArrayHasKey('core.search.build_response', $hooks);
$this->assertArrayHasKey('core.search.validation_rules', $hooks);
$this->assertArrayHasKey('core.search.index_validation_rules', $hooks);
}
/**