Files
jiapuapp/docs/superpowers/plans/2026-07-16-a01-scroll-skins-v3.md
T
2026-07-16 18:13:03 +08:00

198 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# A01 Scroll Skins V3 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. The user forbids subagents, worktrees, commits, and all Git mutation commands, so execution stays inline in the current worktree and every commit step is intentionally omitted.
**Goal:** Replace A01's current button, Toast, and verification-panel visuals with the user-approved option-2 scroll-and-cloud family while preserving live text, exact slot ratios, interaction behavior, and old assets.
**Architecture:** Keep the approved board as the immutable visual target. Generate one clean master per surface, then use the existing Node/Pillow pipeline to remove presentation backgrounds, preserve fixed decorative caps/corners, stretch only safe centers, and emit exact versioned outputs. A01 consumes the new outputs only after manifest and pixel tests pass; H5 comparison uses the approved board plus real runtime screenshots.
**Tech Stack:** uni-app/Vue, SCSS, Node.js 24, native `node:test`, Python 3.14, Pillow 12.3.0, PowerShell contracts, Chrome CDP 9222, built-in ImageGen.
## Global Constraints
- Scope is A01 only; do not edit other page implementations.
- Preserve `STKaiti`, `KaiTi`, live button copy, WeChat icon, verification copy, interactions, and current logical slots.
- Keep all old assets; write only versioned v3 outputs.
- Do not use `scaleToFill` to hide a ratio mismatch.
- Master and output assets contain no text, icons, logo, white halo, green fringe, or presentation shadow.
- A01 remains `[~]`; H5 output is internal evidence only until Android/HBuilderX and user review.
- Do not run worktree, subagent, `git add`, `commit`, `push`, `reset`, `checkout`, upload, delete, or cleanup commands.
---
### Task 1: Preserve Exact Individual Masters
**Files:**
- Reference: `docs/design/assets/a01-vnext/A01-shared-scroll-skins-with-dialog-approved.png`
- Create: `docs/design/assets/a01-vnext/masters/a01-scroll-primary-master-v3.png`
- Create: `docs/design/assets/a01-vnext/masters/a01-scroll-secondary-master-v3.png`
- Create: `docs/design/assets/a01-vnext/masters/a01-scroll-toast-master-v3.png`
- Create: `docs/design/assets/a01-vnext/masters/a01-scroll-dialog-master-v3.png`
**Interfaces:**
- Consumes: the approved four-component board and the measured slots from the design spec.
- Produces: four committed-quality visual masters with flat chroma presentation backgrounds, no text, and quiet safe centers.
- [ ] **Step 1: Generate the four masters independently**
Use ImageGen once per master. Attach the approved board every time. Require the exact family, one isolated component, a flat `#00ff00` background for deterministic extraction, no external shadow, and these target ratios: `622:92`, `622:100`, `590:82`, `620:520`.
- [ ] **Step 2: Inspect every master**
Open all four with `view_image`. Reject any master with text, asymmetric clouds, cropped scroll rods, missing gold lines, landscape above the dialog's lower 22%, or decoration crossing the live-content safe center.
- [ ] **Step 3: Save only the approved individual masters**
Copy each generated result to the exact master path without overwriting an existing file. Keep ImageGen originals untouched.
### Task 2: Declare the V3 Machine Contract
**Files:**
- Create: `design-pipeline/manifests/a01-scroll-skins-v3.json`
- Modify: `design-pipeline/tests/manifest-v2.test.mjs`
- Modify: `design-pipeline/package.json`
**Interfaces:**
- Consumes: four master paths from Task 1.
- Produces: manifest assets `a01-scroll-primary-v3`, `a01-scroll-secondary-v3`, `a01-scroll-toast-v3`, and `a01-scroll-dialog-v3`.
- [ ] **Step 1: Write failing manifest tests**
Add assertions that the manifest declares exactly four unique outputs, exact logical/output dimensions, `uniform-only` for fixed button/dialog outputs, `nine-slice` for Toast, and A01 consumer selectors.
- [ ] **Step 2: Run RED**
Run `npm.cmd --prefix design-pipeline run test:v2`. Expected: failure because `a01-scroll-skins-v3.json` does not exist.
- [ ] **Step 3: Add the manifest and scripts**
Declare outputs:
```text
static/assets/foundation/transparent/a01-scroll-primary-v3.png 1866×276
static/assets/foundation/transparent/a01-scroll-secondary-v3.png 1866×300
static/assets/foundation/transparent/a01-scroll-toast-v3.png 1770×246
static/assets/modules/auth/transparent/a01-scroll-dialog-v3.png 1860×1560
```
Add `build:a01-scroll-skins` and `verify:a01-scroll-skins` package scripts. All paths must remain inside the workspace.
- [ ] **Step 4: Run GREEN**
Run the Node tests and manifest validator. Expected: all tests pass and `MANIFEST-V2 PASS` names the v3 manifest.
### Task 3: Build Exact Clean Outputs
**Files:**
- Create: `design-pipeline/tests/test_build_scroll_skins.py`
- Create: `design-pipeline/scripts/build_scroll_skins.py`
- Create: `design-pipeline/scripts/build-a01-scroll-skins.mjs`
- Modify: `design-pipeline/scripts/asset_quality.py`
**Interfaces:**
- Produces: `remove_chroma_background(image, key, tolerance)`, `stretch_safe_center(image, output_size, insets)`, and `build_manifest(manifest, workspace)`.
- [ ] **Step 1: Write failing synthetic tests**
Tests must prove that chroma pixels become transparent black, decorative caps/corners remain pixel-identical after resizing, only the declared center stretches, exact output dimensions are returned, and a dialog with `alpha.required=false` remains opaque.
- [ ] **Step 2: Run RED**
Run the Python unittest discovery command. Expected: import failure for `build_scroll_skins`.
- [ ] **Step 3: Implement minimal Pillow processing**
Use RGBA conversion, chroma-distance Alpha removal, bounding-box trim, manifest insets, Pillow LANCZOS only for target-height normalization, center-only stretching, transparent-black cleanup, sRGB chunk writing, and optimized PNG output.
- [ ] **Step 4: Run GREEN and build actual assets**
Run Python tests, `npm.cmd --prefix design-pipeline run build:a01-scroll-skins`, and the quality verifier. Expected for every asset: exact dimensions, zero visible chroma residue, zero light fringe, zero transparent RGB, and no manifest errors.
- [ ] **Step 5: Inspect all four outputs**
Use `view_image`; reject seams, cropped rods, distorted clouds, weak gold contrast, center-knot drift, or dialog landscape entering the content region.
### Task 4: Integrate A01 Test-First
**Files:**
- Modify: `tests/a01-a02-ui-contract.ps1`
- Modify: `tests/a01-asset-alpha-audit.ps1`
- Modify: `tests/a01-responsive-runtime-smoke.js`
- Modify: `pages/auth/a01-entry.vue`
**Interfaces:**
- Consumes: four verified v3 outputs.
- Produces: A01 using v3 visuals without changing behavior or live content.
- [ ] **Step 1: Extend contracts before page changes**
Require the four v3 paths, exact sizes, no old A01 button/Toast/dialog references in A01, no `scaleToFill` on these skins, and the approved runtime selectors.
- [ ] **Step 2: Run RED**
Run both PowerShell contracts. Expected: failure because A01 still uses v2 buttons and the old dialog/code-native Toast.
- [ ] **Step 3: Make the minimal A01 change**
Replace only the decorative skin layers. Preserve copy, icon, state, click handlers, normal-flow layout, overlay positioning, and slot dimensions. Use `aspectFit` for exact button/dialog assets; use the Toast v3 asset through its declared adaptive rendering strategy.
- [ ] **Step 4: Run GREEN**
Run the PowerShell contracts and Python quality audit. Expected: pass.
### Task 5: Real Runtime and Visual Comparison
**Files:**
- Modify: `scripts/capture-chrome-page.js`
- Create ignored evidence under: `tmp/a01-scroll-skins-v3-*.png`
- Modify: `design-qa.md`
**Interfaces:**
- Produces: password, Toast, and verification-dialog runtime evidence at `412×915`, plus four-viewport structural verification.
- [ ] **Step 1: Add deterministic capture states**
The capture tool must support `password-tab`, `invalid-login`, and `verification-dialog` without arbitrary click timing. Runtime smoke must assert all four v3 assets load at expected natural dimensions.
- [ ] **Step 2: Run four viewports**
Run `node tests/a01-responsive-runtime-smoke.js`. Expected: pass at `320×568`, `360×640`, `360×800`, and `412×915`, with natural scrolling at 320×568 and no horizontal overflow.
- [ ] **Step 3: Capture and compare**
Capture the three meaningful A01 states. Compare the approved visual board and runtime evidence together. Fix P0/P1/P2 mismatches; do not loop on P3 polish.
- [ ] **Step 4: Update QA truthfully**
Record the exact source and runtime images in `design-qa.md`. The result may say H5 passed only; Android and user acceptance remain pending.
### Task 6: Documentation and Final Verification
**Files:**
- Modify: `docs/design/设计资产生产流水线规范.md`
- Modify: `docs/design/P00_页面结构与资产清单.md`
- Modify: `docs/交接记录.md`
- [ ] **Step 1: Record implemented facts**
Document the selected visual source, four v3 outputs, build/verify commands, A01-only scope, preserved old assets, and remaining Android/user gates.
- [ ] **Step 2: Run the focused verification set**
```powershell
npm.cmd --prefix design-pipeline run test:v2
npm.cmd --prefix design-pipeline run build:a01-scroll-skins
npm.cmd --prefix design-pipeline run verify:a01-scroll-skins
design-pipeline/.venv/Scripts/python.exe -m unittest discover -s design-pipeline/tests -p "test_*.py" -v
powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-a02-ui-contract.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File tests/a01-asset-alpha-audit.ps1
node tests/a01-responsive-runtime-smoke.js
git diff --check
```
Expected: all focused checks pass; `git diff --check` has no whitespace error. CRLF notices alone are not failures.
- [ ] **Step 3: Report remaining gates**
State explicitly: H5 internal evidence completed or blocked, Android/HBuilderX pending, user page acceptance pending, A01 remains `[~]`, no Git mutation commands executed.