diff --git a/.planning/phases/08-bg-00000-text-000000/08-VALIDATION.md b/.planning/phases/08-bg-00000-text-000000/08-VALIDATION.md new file mode 100644 index 00000000..865d1b73 --- /dev/null +++ b/.planning/phases/08-bg-00000-text-000000/08-VALIDATION.md @@ -0,0 +1,84 @@ +--- +phase: 8 +slug: bg-00000-text-000000 +status: ready +nyquist_compliant: true +wave_0_complete: true +created: 2026-04-23 +--- + +# Phase 8 — Validation Strategy + +> Per-phase validation contract for feedback sampling during execution. + +--- + +## Test Infrastructure + +| Property | Value | +|----------|-------| +| **Framework** | Playwright E2E + color guard script (`node`) | +| **Config file** | `frontend/playwright.config.ts` | +| **Quick run command** | `pnpm --dir frontend run guard:colors` | +| **Full suite command** | `pnpm --dir frontend run lint && pnpm --dir frontend run typecheck && pnpm --dir frontend run test:e2e -- theme-colors.spec.ts` | +| **Estimated runtime** | ~2-6 min(取决于 E2E 环境与线程数据) | + +--- + +## Sampling Rate + +- **After every task commit:** Run `pnpm --dir frontend run guard:colors` +- **After every plan wave:** Run `pnpm --dir frontend run lint && pnpm --dir frontend run typecheck && pnpm --dir frontend run test:e2e -- theme-colors.spec.ts` +- **Before `/gsd-verify-work 8`:** Full suite must be green +- **Max feedback latency:** 6 min(本 phase) + +--- + +## Command Matrix + +| Mode | Command | Goal | +|------|---------|------| +| quick | `pnpm --dir frontend run guard:colors` | 快速阻断新增硬编码颜色回归(P8-03) | +| full | `pnpm --dir frontend run lint && pnpm --dir frontend run typecheck && pnpm --dir frontend run test:e2e -- theme-colors.spec.ts` | Phase 8 完整验证链(静态检查 + 主题 E2E,覆盖 P8-04) | + +--- + +## Per-Task Verification Map + +| Task ID | Plan | Wave | Requirement | Threat Ref | Secure Behavior | Test Type | Automated Command | File Exists | Status | +|---------|------|------|-------------|------------|-----------------|-----------|-------------------|-------------|--------| +| 8-01-01 | 01 | 1 | P8-02 | T-08-02, T-08-03 | token 注册表与 `:root/.dark/@theme` 双向覆盖、唯一性可审计 | static | `node -e "import('./frontend/src/styles/workspace-color-tokens.ts').then(m=>{const t=m.WORKSPACE_COLOR_TOKENS;const vals=Object.values(t).map(x=>x.light.toLowerCase());if(new Set(vals).size!==vals.length) throw new Error('duplicate light color mapping');console.log('ok')})"` | ✅ | ✅ green | +| 8-01-02 | 01 | 1 | P8-03 | T-08-01 | 新增 `#hex` / arbitrary color 回归可被守卫阻断 | static | `pnpm --dir frontend run guard:colors` | ✅ | ✅ green | +| 8-02-01 | 02 | 2 | P8-01 | T-08-05, T-08-06 | thread/layout/header 从硬编码迁移到 token,保证 light/dark 可见性 | static | `pnpm --dir frontend run guard:colors` | ✅ | ✅ green | +| 8-02-02 | 02 | 2 | P8-01 | T-08-04 | input/suggestion/streaming 颜色迁移后保持 lint/typecheck 通过 | static | `pnpm --dir frontend run lint && pnpm --dir frontend run typecheck` | ✅ | ✅ green | +| 8-03-01 | 03 | 2 | P8-01 | T-08-07, T-08-08 | artifact list/detail 无硬编码色值回归 | static | `pnpm --dir frontend run guard:colors` | ✅ | ✅ green | +| 8-03-02 | 03 | 2 | P8-01 | T-08-09 | artifact 预览区内联变量迁移后类型与 lint 保持稳定 | static | `pnpm --dir frontend run lint && pnpm --dir frontend run typecheck` | ✅ | ✅ green | +| 8-04-01 | 04 | 3 | P8-04 | T-08-11, T-08-12 | E2E 覆盖 light/dark 关键交互并仅通过 `html` class 切换主题 | e2e | `pnpm --dir frontend exec playwright test --list tests/e2e/theme-colors.spec.ts` | ✅ | ✅ green | +| 8-04-02 | 04 | 3 | P8-03, P8-04 | T-08-10 | 验证文档命令可复制执行且无占位符残留 | static | `rg -n "\\{quick command\\}|\\{full command\\}|REQ-\\{XX\\}" .planning/phases/08-bg-00000-text-000000/08-VALIDATION.md && echo "unexpected placeholders found" && exit 1 || echo "validation doc clean"` | ✅ | ✅ green | + +*Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky* + +--- + +## Wave 0 Requirements + +Existing infrastructure covers all phase requirements. + +--- + +## Manual-Only Verifications + +All phase behaviors have automated verification. + +--- + +## Validation Sign-Off + +- [x] All tasks have `` verify or Wave 0 dependencies +- [x] Sampling continuity: no 3 consecutive tasks without automated verify +- [x] Wave 0 covers all MISSING references +- [x] No watch-mode flags +- [x] Feedback latency < 8s +- [x] `nyquist_compliant: true` set in frontmatter + +**Approval:** approved 2026-04-23