모바일 메뉴와 주요 화면 UX 개선 및 시각 검수

This commit is contained in:
Yun Chan 2026-09-12 17:57:59 +09:00
parent 89b5093ec7
commit e8b770e4d9
50 changed files with 3189 additions and 457 deletions

View file

@ -273,9 +273,13 @@ test.describe("G6 supervision and research OS", () => {
await expect(
page.getByRole("heading", {
name: "먼저 볼 경로와, 믿을 수 있는 출처를 분리해 본다.",
name: "감독·연구",
}),
).toBeVisible();
await expect(page.getByText("학습 검토", { exact: true })).toBeVisible();
await expect(page.locator(".g6-hero p")).toHaveText(
"검토가 필요한 학습 회기와 평가 근거를 확인합니다.",
);
await expect(page.getByRole("tab", { name: "교수 감독" })).toHaveAttribute(
"aria-selected",
"true",
@ -292,11 +296,11 @@ test.describe("G6 supervision and research OS", () => {
await page.getByRole("button", { name: /learner-risk/ }).click();
await expect(page.locator(".g6-ledger li")).toHaveCount(3);
await expect(page.locator(".g6-drilldown a")).toHaveCount(3);
await expect(page.getByTestId("drilldown-depth")).toContainText("계약 상한 3번");
await expect(page.getByTestId("drilldown-depth")).toHaveText("선택한 항목의 근거를 확인합니다.");
await expect(page.getByRole("heading", { name: "개인의 순위를 만들지 않는 교육과정 공백" })).toBeVisible();
await expect(page.getByRole("heading", { name: "반복되는 학습 보완점" })).toBeVisible();
await expect(page.getByText("competency.rupture-repair").first()).toBeVisible();
await expect(page.getByText("근거 없는 상태를 유지하고 해석하지 않아.")).toBeVisible();
await expect(page.getByText("근거가 부족한 상태를 유지하고 해석하지 않습니다.")).toBeVisible();
await expect(page.getByText("resolved", { exact: true })).toBeVisible();
await expect(page.getByText("partial", { exact: true })).toBeVisible();
await expect(page.getByText("원문 축어록 제외")).toBeVisible();
@ -306,12 +310,36 @@ test.describe("G6 supervision and research OS", () => {
await expectNoHorizontalOverflow(page);
});
test("wraps a long learner reference without clipping at 320px", async ({ page }) => {
const longLearnerRef = "learner-bc2e3fe5b35e46a8b1c9d2e4f6a7b8c9d0e1f2a3b4c5d6e7f8";
const supervision = supervisionFixture();
supervision.attention_items[0] = {
...supervision.attention_items[0],
learner_ref: longLearnerRef,
};
await routeG6(page, "teacher", supervision);
await page.setViewportSize({ width: 320, height: 900 });
await page.goto("/teach/supervision");
const detailReference = page.locator(".g6-case h3");
await expect(detailReference).toHaveText(longLearnerRef);
await expect(detailReference).toHaveCSS("overflow-wrap", "anywhere");
expect(
await detailReference.evaluate((element) => element.scrollWidth <= element.clientWidth + 1),
).toBeTruthy();
await expectNoHorizontalOverflow(page);
});
test("research role traces model, prompt, instrument, subgroup, and four-domain provenance", async ({
page,
}) => {
await page.emulateMedia({ reducedMotion: "reduce" });
await routeG6(page, "admin");
await page.goto("/teach/supervision");
await expect(page.locator(".g6-hero p")).toHaveText(
"검토가 필요한 학습 회기와 평가 근거를 확인합니다. 연구 품질 탭에서는 평가 버전과 출처를 확인할 수 있습니다.",
);
await page.getByRole("tab", { name: "연구 품질" }).click();
await expect(page.getByRole("heading", { name: "모델·프롬프트·도구·하위집단 드리프트" })).toBeVisible();
@ -325,7 +353,7 @@ test.describe("G6 supervision and research OS", () => {
await expect(page.getByText("synthetic-low-disclosure", { exact: true })).toBeVisible();
await expect(page.getByText("-25%p", { exact: true })).toBeVisible();
await expect(page.getByText("4/4 provenance 연결", { exact: true })).toBeVisible();
await expect(page.getByText("4/4 출처 연결", { exact: true })).toBeVisible();
for (const label of ["동맹", "파열·수선", "전이", "보정"]) {
await expect(page.getByText(label, { exact: true }).first()).toBeVisible();
}
@ -373,14 +401,14 @@ test.describe("G6 supervision and research OS", () => {
await routeG6(page, "admin", emptySupervision, summaryOnlyResearch);
await page.goto("/teach/supervision");
await expect(page.getByText("현재 우선 검토 항목이 없")).toBeVisible();
await expect(page.getByText("현재 교육과정 공백이 없")).toBeVisible();
await expect(page.getByText("교수자AI 불일치 메타데이터가 없")).toBeVisible();
await expect(page.getByText("현재 우선 검토 항목이 없습니다")).toBeVisible();
await expect(page.getByText("현재 교육과정 공백이 없습니다")).toBeVisible();
await expect(page.getByText("교수자AI 불일치 메타데이터가 없습니다")).toBeVisible();
await page.getByRole("tab", { name: "연구 품질" }).click();
await expect(page.getByText("버전 드리프트 비교가 없")).toBeVisible();
await expect(page.getByText("provenance 저하", { exact: true })).toBeVisible();
await expect(page.getByText("매니페스트 요약만 도착했어")).toBeVisible();
await expect(page.getByText("원본 provenance 미제공").first()).toBeVisible();
await expect(page.getByText("버전 드리프트 비교가 없습니다")).toBeVisible();
await expect(page.getByText("출처 연결 저하", { exact: true })).toBeVisible();
await expect(page.getByText("매니페스트 요약만 있습니다")).toBeVisible();
await expect(page.getByText("원본 출처 미제공").first()).toBeVisible();
await expectNoHorizontalOverflow(page);
});
});