# Page Surface Classification Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** 列表页直接使用自身白色卡片，表单和详情页继续使用主布局提供的白色圆角画布。

**Architecture:** 使用 Vue Router `meta.pageSurface` 做显式页面表面分类。主布局默认渲染白色画布，仅在 `pageSurface === 'self'` 时切换为透明、无内边距的承载容器。

**Tech Stack:** Vue 3、Vue Router 4、TypeScript、SCSS、Node.js 回归脚本

## Global Constraints

- 只给六个自带白色列表卡片的路由声明 `pageSurface: 'self'`。
- 其他路由默认继续使用白色页面画布。
- 不新增依赖，不修改业务逻辑。
- 先写失败测试，再实现最小修复。

---

### Task 1: 路由级页面表面分类

**Files:**
- Modify: `frontend/scripts/regression-page-surface.mjs`
- Modify: `frontend/src/router/index.ts`
- Modify: `frontend/src/layouts/MainLayout.vue`
- Test: `frontend/scripts/regression-page-surface.mjs`

**Interfaces:**
- Consumes: Vue Router 当前路由对象的 `route.meta.pageSurface`。
- Produces: `pageSurface: 'self'` 路由元数据和 `.page-canvas.is-self-surface` 布局状态。

- [ ] **Step 1: 写入失败回归测试**

在 `regression-page-surface.mjs` 中读取 `src/router/index.ts`，断言六个列表路由包含
`pageSurface: 'self'`；断言 `MainLayout` 使用 `useRoute()` 和动态类；断言状态样式为：

```scss
.page-canvas.is-self-surface {
  padding: 0;
  border-radius: 0;
  background-color: transparent;
  box-shadow: none;
}
```

- [ ] **Step 2: 运行测试并确认 RED**

Run: `npm run test:page-surface`

Expected: FAIL，提示列表路由缺少 `pageSurface: 'self'` 或主布局缺少自表面状态。

- [ ] **Step 3: 写入最小实现**

在六个列表路由中加入：

```ts
meta: { title: '页面标题', pageSurface: 'self' },
```

在 `MainLayout.vue` 中使用：

```ts
const route = useRoute()
```

```vue
<div
  class="page-canvas"
  :class="{ 'is-self-surface': route.meta.pageSurface === 'self' }"
>
```

并加入透明承载容器样式。

- [ ] **Step 4: 运行专项测试并确认 GREEN**

Run: `npm run test:page-surface`

Expected: PASS，输出“全局页面背景与内容表面回归检查通过”。

- [ ] **Step 5: 运行相关回归与生产构建**

Run: `npm run test:training-log-layout`

Expected: PASS。

Run: `npx vite build`

Expected: build exit code 0；允许保留项目既有字体解析和 chunk size 警告。

- [ ] **Step 6: 浏览器视觉验证**

打开 `/fine-tune`，确认灰色背景上仅有列表自身白色卡片；打开
`/training-log/1`，确认白色圆角页面画布仍存在。两个页面均不得水平溢出，控制台不得新增错误。
