chore(impeccable): 审计工具链重构与精简
更新 .agents/skills/impeccable:移除旧 detector/live 脚本簇与若干 reference, 改用打包后的 scripts/bin 与精简 reference(含 degraded/*、native/*)。 纯工具链,不触及营销站源码与站点运行时。
This commit is contained in:
@@ -1,241 +1,105 @@
|
||||
> **Additional context needed**: quality bar (MVP vs flagship).
|
||||
> **Additional context needed**: quality bar and shipping constraints.
|
||||
|
||||
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
|
||||
Polish is refinement, never concealed redesign. Preserve the incumbent visual world, content, behavior, and everything outside scope. If the concept itself is wrong, say so and recommend redesign or `bolder` instead of smuggling in a replacement.
|
||||
|
||||
Detector and automated QA output are defect evidence only. A clean script result is never proof that the design is strong; gather browser evidence and inspect the real interaction path.
|
||||
A detector result is defect evidence, not proof of quality. Inspect the rendered experience and real interaction path.
|
||||
|
||||
## Design System Discovery
|
||||
## 1. Establish the system
|
||||
|
||||
Aligning the feature to the design system is **not optional**. Polish without alignment is decoration on top of drift, and it makes the next person's job harder. Discovery comes before any other polish work.
|
||||
Read DESIGN.md and representative tokens, shared components, patterns, and neighboring flows. If no formal system exists, use coherent project conventions.
|
||||
|
||||
1. **Find the design system**: Search for design system documentation, component libraries, style guides, or token definitions. Study the core patterns: design principles, target audience, color tokens, spacing scale, typography styles, component API, motion conventions.
|
||||
2. **Note the conventions**: How are shared components imported? What spacing scale is used? Which colors come from tokens vs hard-coded values? What motion and interaction patterns are established? What flow shapes are used for comparable actions (modal vs full-page, inline vs route, save-on-blur vs explicit submit)?
|
||||
3. **Identify drift, then name the root cause**: For every deviation, classify it as a **missing token** (the value should exist in the system but doesn't), a **one-off implementation** (a shared component already exists but wasn't used), or a **conceptual misalignment** (the feature's flow, IA, or hierarchy doesn't match neighboring features). The fix differs by category: patch the value, swap to the shared component, or rework the flow. Fixing the symptom without naming the cause is how drift compounds.
|
||||
Classify each drift before fixing it:
|
||||
|
||||
If a design system exists, polish **must** align the feature with it. If none exists, polish against the conventions visible in the codebase. **If anything about the system is ambiguous, ask. Never guess at design system principles.**
|
||||
- **missing token:** the system needs a reusable value;
|
||||
- **one-off implementation:** an existing shared component or pattern should replace it;
|
||||
- **conceptual mismatch:** the flow, information architecture, or hierarchy differs from comparable product areas;
|
||||
- **local defect:** the implementation is simply incomplete or inconsistent.
|
||||
|
||||
## Pre-Polish Assessment
|
||||
Fix the cause at the narrowest correct level. Ask when a binding system principle cannot be inferred.
|
||||
|
||||
Understand the current state and goals before touching anything:
|
||||
## 2. Gather the evidence
|
||||
|
||||
1. **Review completeness**:
|
||||
- Is it functionally complete?
|
||||
- Are there known issues to preserve (mark with TODOs)?
|
||||
- What's the quality bar? (MVP vs flagship feature?)
|
||||
- When does it ship? (How much time for polish?)
|
||||
Use the feature yourself at the surface's representative sizes: desktop and mobile on the web; on a native platform (`ios` / `android` / `adaptive`), the shipped device classes on the simulator, emulator, or hardware, captured per the platform reference's Verifying the build section. Determine:
|
||||
|
||||
2. **Think experience-first**: Who actually uses this, and what's the best possible experience for them? Effective design beats decorative polish; a feature that looks beautiful but fights the user's flow is not polished. Walk the path from their perspective before opening DevTools.
|
||||
- whether the path is functionally complete;
|
||||
- the intended quality bar and time available;
|
||||
- known constraints or deliberately unfinished work;
|
||||
- the states, content lengths, roles, and input methods users will actually encounter.
|
||||
|
||||
3. **Identify polish areas**:
|
||||
- Visual inconsistencies
|
||||
- Spacing and alignment issues
|
||||
- Interaction state gaps
|
||||
- Copy inconsistencies
|
||||
- Edge cases and error states
|
||||
- Loading and transition smoothness
|
||||
- Information architecture and flow drift (does this feature reveal complexity the way neighboring features do?)
|
||||
If a prior critique exists, use it as one input:
|
||||
|
||||
4. **Pull in any prior critique** (optional signal): If `$impeccable critique` has been run on the same target, its priority issues are a useful prior for what to address first. Resolve the target to a file path or URL, then:
|
||||
```bash
|
||||
slug=$(node .agents/skills/impeccable/scripts/critique-storage.mjs slug "<resolved>")
|
||||
node .agents/skills/impeccable/scripts/critique-storage.mjs latest "$slug"
|
||||
```
|
||||
Exit 0 with body = found; fold the P0/P1 items into your polish list and mention the snapshot path so the user sees what you read. Exit 2 = no snapshot, continue without it. The critique is one input among many. Do your own pass either way.
|
||||
```bash
|
||||
.agents/skills/impeccable/scripts/impeccable critique-storage latest "<resolved target>" --json
|
||||
```
|
||||
|
||||
5. **Triage cosmetic vs functional**: Classify each issue as **cosmetic** (looks off, doesn't impede the user) or **functional** (breaks, blocks, or confuses the experience). When polish time is tight, functional issues ship first; cosmetic ones can land in a follow-up. Quality should be consistent; never perfect one corner while leaving another rough.
|
||||
Exit 0 returns JSON with the latest snapshot's `body` and an exact `snapshot_file` identity. Retain `snapshot_file` until the end of the pass. For a local file target, the helper compares the file's exact current content fingerprint with the fingerprint captured by critique. Unchanged staged, unstaged, or untracked content remains current; any byte change, deletion, or replacement with a non-file closes the backlog it identified while preserving its trend history and exits 2. A URL target has no local fingerprint and remains current until explicitly closed. When current, incorporate relevant P0/P1 findings from `body` and name the snapshot read. Exit 2 means none exists or the target changed. Perform an independent pass either way.
|
||||
|
||||
**CRITICAL**: Polish is the last step, not the first. Don't polish work that's not functionally complete.
|
||||
## 3. Triage
|
||||
|
||||
## Polish Systematically
|
||||
Separate functional defects from cosmetic ones and fix in this order:
|
||||
|
||||
Work through these dimensions methodically:
|
||||
1. broken or blocked tasks, data loss, misleading state, and inaccessible paths;
|
||||
2. missing loading, empty, error, success, disabled, and permission states;
|
||||
3. flow, hierarchy, responsive, and design-system drift;
|
||||
4. visual and motion inconsistencies;
|
||||
5. code and asset cleanup.
|
||||
|
||||
### Visual Alignment & Spacing
|
||||
Do not perfect one corner while leaving the rest below the same quality bar.
|
||||
|
||||
- **Pixel-perfect alignment**: Everything lines up to grid
|
||||
- **Consistent spacing**: All gaps use spacing scale (no random 13px gaps)
|
||||
- **Optical alignment**: Adjust for visual weight (icons may need offset for optical centering)
|
||||
- **Responsive consistency**: Spacing and alignment work at all breakpoints
|
||||
- **Grid adherence**: Elements snap to baseline grid
|
||||
## 4. Polish the whole path
|
||||
|
||||
**Check**:
|
||||
- Enable grid overlay and verify alignment
|
||||
- Check spacing with browser inspector
|
||||
- Test at multiple viewport sizes
|
||||
- Look for elements that "feel" off
|
||||
### Flow and hierarchy
|
||||
|
||||
### Information Architecture & Flow
|
||||
- Match neighboring mental models, terminology, disclosure, routing, save behavior, and optimistic or pessimistic patterns.
|
||||
- Make the primary task and current state obvious without flattening every element to equal weight.
|
||||
- Ensure arrival, transition, empty, and recovery paths connect instead of behaving as isolated screens.
|
||||
|
||||
Visual polish on a misshapen flow is wasted work. Match the *shape* of the experience to the system, not just the surface.
|
||||
### Layout and type
|
||||
|
||||
- **Progressive disclosure**: Match how much is revealed when, compared to neighboring features. A settings page exposing 40 fields when the rest of the app reveals 5 at a time is drift, even if every field is perfectly styled.
|
||||
- **Established user flows**: Multi-step actions follow the same shape as comparable flows elsewhere: modal vs full-page, inline edit vs separate route, save-on-blur vs explicit submit, optimistic vs pessimistic updates.
|
||||
- **Hierarchy & complexity**: The same conceptual weight gets the same visual weight throughout. Primary actions don't become tertiary in one corner of the product, and tertiary actions don't shout.
|
||||
- **Empty, loading, and arrival transitions**: How content arrives, updates, and leaves matches how it does in adjacent features.
|
||||
- **Naming and mental model**: The feature uses the same nouns and verbs as the rest of the system. A "Workspace" here shouldn't be a "Project" three screens away.
|
||||
- Align to the project's grid and spacing scale; fix optical as well as mathematical alignment.
|
||||
- Group related content tightly and separate distinct groups generously.
|
||||
- Keep same-role typography consistent; test measure, wrapping, localization expansion, zoom, and font loading.
|
||||
- Verify every supported viewport rather than correcting only the current screenshot.
|
||||
|
||||
### Typography Refinement
|
||||
### Color, imagery, and icons
|
||||
|
||||
- **Hierarchy consistency**: Same elements use same sizes/weights throughout
|
||||
- **Line length**: 45-75 characters for body text
|
||||
- **Line height**: Appropriate for font size and context
|
||||
- **Widows & orphans**: No single words on last line
|
||||
- **Hyphenation**: Appropriate for language and column width
|
||||
- **Kerning**: Adjust letter spacing where needed (especially headlines)
|
||||
- **Font loading**: No FOUT/FOIT flashes
|
||||
- Use semantic tokens and stable color meanings across themes.
|
||||
- Verify text, control, and focus contrast in every state.
|
||||
- Keep icon families, stroke/weight, sizing, and optical alignment coherent.
|
||||
- Prevent image layout shift; use correct aspect ratios, responsive sources, and useful alt text.
|
||||
|
||||
### Color & Contrast
|
||||
### Interaction and state
|
||||
|
||||
- **Contrast ratios**: All text meets WCAG standards
|
||||
- **Consistent token usage**: No hard-coded colors, all use design tokens
|
||||
- **Theme consistency**: Works in all theme variants
|
||||
- **Color meaning**: Same colors mean same things throughout
|
||||
- **Accessible focus**: Focus indicators visible with sufficient contrast
|
||||
- **Gray on color**: Never put gray text on colored backgrounds; use a shade of that color or transparency
|
||||
- Every control needs appropriate default, hover, focus, active, disabled, loading, error, and success behavior.
|
||||
- Preserve visible keyboard focus, logical tab order, labels, and platform-appropriate touch targets.
|
||||
- Keep motion coherent, interruptible, and performant. Do not add animation merely to make polish visible.
|
||||
- Validate long, missing, localized, offline, slow, and permission-limited content where the product can encounter it.
|
||||
|
||||
### Interaction States
|
||||
### Content and code
|
||||
|
||||
Every interactive element needs all states:
|
||||
- Keep terminology, capitalization, punctuation, and factual copy consistent. Ask before changing claims.
|
||||
- Remove debug output, dead code, unused imports, obsolete styles, and polish-created duplication.
|
||||
- Replace custom implementations with shared components where the system owns the pattern.
|
||||
- Promote genuinely reusable values to tokens; do not create a system abstraction for one local exception.
|
||||
|
||||
- **Default**: Resting state
|
||||
- **Hover**: Subtle feedback (color, scale, shadow)
|
||||
- **Focus**: Keyboard focus indicator (never remove without replacement)
|
||||
- **Active**: Click/tap feedback
|
||||
- **Disabled**: Clearly non-interactive
|
||||
- **Loading**: Async action feedback
|
||||
- **Error**: Validation or error state
|
||||
- **Success**: Successful completion
|
||||
## 5. Verify and finish
|
||||
|
||||
**Missing states create confusion and broken experiences**.
|
||||
Walk the complete path again with mouse, keyboard, and touch where applicable. Check:
|
||||
|
||||
### Micro-interactions & Transitions
|
||||
- mobile, intermediate, and wide layouts on the web; phone and tablet size classes in both supported orientations on native;
|
||||
- loading, empty, error, success, disabled, long-content, and missing-content states;
|
||||
- zoom, contrast, focus, semantics, and screen-reader names;
|
||||
- console errors, layout shift, interaction latency, and image loading everywhere; supported browsers on the web; supported OS versions, runtime warnings, and dropped frames on native;
|
||||
- agreement with DESIGN.md, neighboring features, and the user's scope.
|
||||
|
||||
- **Smooth transitions**: All state changes animated appropriately (150-300ms)
|
||||
- **Consistent easing**: Use ease-out-quart/quint/expo for natural deceleration. Never bounce or elastic; they feel dated.
|
||||
- **No jank**: Smooth animations; use atmospheric blur/filter/mask/shadow effects when they add polish, but bound expensive paint areas and avoid casual layout-property animation
|
||||
- **Appropriate motion**: Motion serves purpose, not decoration
|
||||
- **Reduced motion**: Respects `prefers-reduced-motion`
|
||||
Follow the quality guidance supplied by `impeccable context` and hooks, then run any other relevant QA commands. Context requests a manual scan only when no automatic detector is active; never add another detector pass. Fix real defects and document only narrow intentional exceptions. A clean scan does not replace visual judgment.
|
||||
|
||||
### Content & Copy
|
||||
Finish with a source diff: remove accidental churn, orphaned code, redundant values, and temporary artifacts. Ship only when the feature is functionally complete and consistently finished across the path.
|
||||
|
||||
- **Consistent terminology**: Same things called same names throughout
|
||||
- **Consistent capitalization**: Title Case vs Sentence case applied consistently
|
||||
- **Grammar & spelling**: No typos
|
||||
- **Appropriate length**: Not too wordy, not too terse
|
||||
- **Punctuation consistency**: Periods on sentences, not on labels (unless all labels have them)
|
||||
When this pass clears every Priority Issue it took from a snapshot, close that snapshot:
|
||||
|
||||
### Icons & Images
|
||||
```bash
|
||||
.agents/skills/impeccable/scripts/impeccable critique-storage close "<resolved target>" "<snapshot_file returned by latest>"
|
||||
```
|
||||
|
||||
- **Consistent style**: All icons from same family or matching style
|
||||
- **Appropriate sizing**: Icons sized consistently for context
|
||||
- **Proper alignment**: Icons align with adjacent text optically
|
||||
- **Alt text**: All images have descriptive alt text
|
||||
- **Loading states**: Images don't cause layout shift, proper aspect ratios
|
||||
- **Retina support**: 2x assets for high-DPI screens
|
||||
|
||||
### Forms & Inputs
|
||||
|
||||
- **Label consistency**: All inputs properly labeled
|
||||
- **Required indicators**: Clear and consistent
|
||||
- **Error messages**: Helpful and consistent
|
||||
- **Tab order**: Logical keyboard navigation
|
||||
- **Auto-focus**: Appropriate (don't overuse)
|
||||
- **Validation timing**: Consistent (on blur vs on submit)
|
||||
|
||||
### Edge Cases & Error States
|
||||
|
||||
- **Loading states**: All async actions have loading feedback
|
||||
- **Empty states**: Helpful empty states, not just blank space
|
||||
- **Error states**: Clear error messages with recovery paths
|
||||
- **Success states**: Confirmation of successful actions
|
||||
- **Long content**: Handles very long names, descriptions, etc.
|
||||
- **No content**: Handles missing data gracefully
|
||||
- **Offline**: Appropriate offline handling (if applicable)
|
||||
|
||||
### Responsiveness
|
||||
|
||||
- **All breakpoints**: Test mobile, tablet, desktop
|
||||
- **Touch targets**: 44x44px minimum on touch devices
|
||||
- **Readable text**: No text smaller than 14px on mobile
|
||||
- **No horizontal scroll**: Content fits viewport
|
||||
- **Appropriate reflow**: Content adapts logically
|
||||
|
||||
### Performance
|
||||
|
||||
- **Fast initial load**: Optimize critical path
|
||||
- **No layout shift**: Elements don't jump after load (CLS)
|
||||
- **Smooth interactions**: No lag or jank
|
||||
- **Optimized images**: Appropriate formats and sizes
|
||||
- **Lazy loading**: Off-screen content loads lazily
|
||||
|
||||
### Code Quality
|
||||
|
||||
- **Remove console logs**: No debug logging in production
|
||||
- **Remove commented code**: Clean up dead code
|
||||
- **Remove unused imports**: Clean up unused dependencies
|
||||
- **Consistent naming**: Variables and functions follow conventions
|
||||
- **Type safety**: No TypeScript `any` or ignored errors
|
||||
- **Accessibility**: Proper ARIA labels and semantic HTML
|
||||
|
||||
## Polish Checklist
|
||||
|
||||
Go through systematically:
|
||||
|
||||
- [ ] Aligned to the design system (drift named and resolved by root cause)
|
||||
- [ ] Information architecture and flow shape match neighboring features
|
||||
- [ ] Visual alignment perfect at all breakpoints
|
||||
- [ ] Spacing uses design tokens consistently
|
||||
- [ ] Typography hierarchy consistent
|
||||
- [ ] All interactive states implemented
|
||||
- [ ] All transitions smooth (60fps)
|
||||
- [ ] Copy is consistent and polished
|
||||
- [ ] Icons are consistent and properly sized
|
||||
- [ ] All forms properly labeled and validated
|
||||
- [ ] Error states are helpful
|
||||
- [ ] Loading states are clear
|
||||
- [ ] Empty states are welcoming
|
||||
- [ ] Touch targets are 44x44px minimum
|
||||
- [ ] Contrast ratios meet WCAG AA
|
||||
- [ ] Keyboard navigation works
|
||||
- [ ] Focus indicators visible
|
||||
- [ ] No console errors or warnings
|
||||
- [ ] No layout shift on load
|
||||
- [ ] Works in all supported browsers
|
||||
- [ ] Respects reduced motion preference
|
||||
- [ ] Code is clean (no TODOs, console.logs, commented code)
|
||||
|
||||
**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. The little things add up.
|
||||
|
||||
Sweat the details. Zoom in until the alignment is right and the spacing reads as deliberate. Then ship.
|
||||
|
||||
**NEVER**:
|
||||
- Polish before it's functionally complete
|
||||
- Polish without aligning to the design system; that's decoration on drift
|
||||
- Guess at design system principles instead of asking when something is ambiguous
|
||||
- Spend hours on polish if it ships in 30 minutes (triage)
|
||||
- Introduce bugs while polishing (test thoroughly)
|
||||
- Ignore systematic issues (if spacing is off everywhere, fix the system, not just one screen)
|
||||
- Perfect one thing while leaving others rough (consistent quality level)
|
||||
- Create new one-off components when design system equivalents exist
|
||||
- Hard-code values that should use design tokens
|
||||
- Introduce new patterns or flows that diverge from established ones
|
||||
|
||||
## Final Verification
|
||||
|
||||
Before marking as done:
|
||||
|
||||
- **Use it yourself**: Actually interact with the feature.
|
||||
- **Test on real devices**: Not just browser DevTools.
|
||||
- **Ask someone else to review**: Fresh eyes catch things.
|
||||
- **Compare to design**: Match intended design.
|
||||
- **Check all states**: Don't just test happy path.
|
||||
- **Treat automation carefully**: Run detector or QA commands when they are available and relevant, fix their defects, but never cite a clean result as proof that the work is polished.
|
||||
|
||||
## Clean Up
|
||||
|
||||
After polishing, ensure code quality:
|
||||
|
||||
- **Replace custom implementations**: If the design system provides a component you reimplemented, switch to the shared version.
|
||||
- **Remove orphaned code**: Delete unused styles, components, or files made obsolete by polish.
|
||||
- **Consolidate tokens**: If you introduced new values, check whether they should be tokens.
|
||||
- **Verify DRYness**: Look for duplication introduced during polishing and consolidate.
|
||||
This closes only the snapshot this pass actually processed; if a newer critique landed meanwhile, its backlog stays live. Do not close when no snapshot was read, when `snapshot_file` was not retained, or when Priority Issues remain.
|
||||
|
||||
Reference in New Issue
Block a user