세 갈래의 결함을 한 브랜치에서 정리한다.
## 목록 컨텍스트 왕복 시 URL 상태 소실 ( @jiwonpapa 님께서 제보해주셨습니다.)
목록에서 상세·형제 상세(이전/다음)·작성/수정 폼에 다녀오면 보고 있던
page/search/category/filters 가 사라지던 문제를 전 도메인에서 수정했다.
- 엔진(engine-v1.54.2): `mergeQuery: true` 만 적고 `query` 를 생략하면 병합이
통째로 건너뛰어지던 함정을 교정 — `ActionDispatcher.handleNavigate`/`handleReplaceUrl`.
- 게시판·이커머스·페이지·회원·마이페이지·gdpr 등 9개 확장 레이아웃의 왕복 leg 전수
적용(mergeQuery: true). 의도적 리셋(검색/필터 초기화·탭 전환·프리셋)은 면제 주석으로 구분.
- 무한스크롤 목록(브랜드·상품 공통정보·고시정보)의 새로고침이 URL 검색·정렬을 떨구던
결함 수정.
- 재발 차단: audit 룰 `layout-list-context-navigate-merge-query`(목록 클러스터 자동 도출,
page/필터 URL 신호 4종) + `layout-navigate-path-absolute`(navigate path 동작 키워드 금지).
## cellChildren 등 반복 렌더에서 단일 바인딩 파이프 미적용 ( @glitter-gim 님께서 제보해주셨습니다.)
목록 표의 각 칸에 넣은 날짜·숫자 서식(`{{row.x | datetime(...)}}`)이 빈 값이 되거나
서식 없는 원본으로 나오던 문제를, 표현식 판정 로직이 엔진 전역에 복제되며 갈라진
구조적 결함으로 진단하고 판정 경로를 단일화했다(engine-v1.54.3).
- `RenderHelpers`(renderItemChildren·evaluateIfCondition)·`ConditionEvaluator`·
`DataBindingEngine.resolveObject`·`DynamicRenderer` props 5곳에 단일 바인딩 파이프 분기 추가.
- 계획: `g7-scalable-lobster.md`(렌더 경로 비대칭 결함 일괄 수정).
## 공개 문서 내부 도구 귀속 제거
release 에 포함되는 공개 문서(`docs/**`)에서 내부 audit 룰 ID 귀속 서술을
도구 비귀속 표현("정적 검사")으로 정리. 재발 차단 룰 `public-no-internal-audit-reference` 신설.
전 계층 테스트(PHPUnit·Vitest·Playwright)·회귀 테스트 동반, 버전/CHANGELOG/활성 디렉토리 동기 완료.
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
/**
|
|
* sirsoft-admin_basic 템플릿 권한 fixture.
|
|
*
|
|
* 코어 `tests/Playwright/fixtures/auth.ts` 의 `issueToken` / `authenticatePage` 헬퍼를
|
|
* 재사용한다. 권한 식별자는 임의 string 이므로 코어 PlaywrightIssueToken 커맨드가
|
|
* Permission::firstOrCreate 로 자동 생성한다.
|
|
*/
|
|
import { test as base } from '@playwright/test';
|
|
// 6단계 상위 = 코어 루트의 tests/Playwright/fixtures/auth.ts
|
|
import { issueToken, authenticatePage } from '../../../../../../tests/Playwright/fixtures/auth';
|
|
|
|
type AdminTemplateAuthFixtures = {
|
|
/** 레이아웃 편집/조회 권한 보유 토큰 */
|
|
layoutEditToken: string;
|
|
/** 관리자 대시보드 진입 권한 보유 토큰 (모바일 뷰포트 검증용) */
|
|
adminDashboardToken: string;
|
|
/** 회원 목록·등록 권한 보유 토큰 (목록 컨텍스트 왕복 검증용) */
|
|
userManageToken: string;
|
|
/** 템플릿 목록 조회 권한 보유 토큰 (탭 전환 검증용) */
|
|
templateReadToken: string;
|
|
};
|
|
|
|
export const test = base.extend<AdminTemplateAuthFixtures>({
|
|
layoutEditToken: async ({}, use) => {
|
|
await use(issueToken('core.templates.layouts.edit', 'core.templates.read'));
|
|
},
|
|
adminDashboardToken: async ({}, use) => {
|
|
await use(issueToken('core.dashboard.read'));
|
|
},
|
|
userManageToken: async ({}, use) => {
|
|
await use(issueToken('core.users.read', 'core.users.write'));
|
|
},
|
|
templateReadToken: async ({}, use) => {
|
|
await use(issueToken('core.templates.read'));
|
|
},
|
|
});
|
|
|
|
export { issueToken, authenticatePage };
|
|
export { expect } from '@playwright/test';
|