Skip to content
Back to skills

Infocard Visual Pass Loop

ASecurity

Screenshot-and-fix loop when 200 passes but theme is broken.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
devopsgo

Works with

  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 19, 2026

npx -y skills add ccwq/infocard-pub --skill infocard-visual-pass-loop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Infocard Visual Pass Loop?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Infocard Visual Pass Loop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ccwq-infocard-visual-pass-loop/badge)](https://www.skillsdirectory.com/skills/ccwq-infocard-visual-pass-loop)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: infocard-visual-pass-loop
description: "Screenshot-and-fix loop when 200 passes but theme is broken."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
  hermes:
    tags: [infocard, visual-verification, theme, hardblue, darkblue, hard-gate]
    related_skills: [infocard-publish-sop, theme-visual-reference-workflow]
---

# Infocard Visual Pass Loop

The missing chapter between `npm run build` → `HTTP 200` and `PUBLISHED`.

## When this skill applies

- The card builds without errors.
- `curl -I <url>` returns 200.
- BUT the user says "样式丢了" / "主题不对" / "看起来像长文" / "hero bar 没出来" / "卡片没背景".
- OR the agent itself is unsure the theme is actually applied.

In any of these cases: **do not push again yet**. Run this loop.

## The loop (non-negotiable)

1. **Screenshot** the live URL or local preview (see `scripts/capture-infocard-screenshots.sh`).
2. **`vision_analyze`** with a "list every defect as CRITICAL/MAJOR/MINOR" prompt.
3. **Block** if any CRITICAL or MAJOR defect remains.
4. **Fix** the HTML / CSS (most common fixes below).
5. **Re-screenshot**, re-analyze.
6. **Promote to PUBLISHED only when 0 critical / 0 major on both desktop (1280×1800) and mobile (720×1600).**

`HTTP 200` and `npm run build` success are NEVER sufficient evidence of completion.

## Common fixes when the visual gate fails

| Symptom | Root cause | Fix |
|---|---|---|
| Plain text rendering, no colors, mojibake | `<style>` block missing from final HTML | Rebuild full HTML: head + inline style + body. Never split across files. |
| Hero bar absent | `.hero-bar` rule not in template CSS | Add `.hero-bar{height:14px;border-radius:999px;background:linear-gradient(...);...}` to the template. |
| Sections float without container | `.section`, `.card`, `.grid-2`, `.risk-grid` not defined | Add `background+border+box-shadow` rules to each container class. |
| Theme not dominant | Wrong template cloned | Confirm `theme/<style>.html` matches the meta's `style:` field before cloning. |
| Mobile overflow / illegible | No `@media (max-width: 720px)` rules | Add responsive rules to collapse grid columns to 1fr. |

## Capture script

See `scripts/capture-infocard-screenshots.sh` for the verified Chrome headless invocation. It follows `chrome-automation-safety`: per-run temporary profile, no broad process cleanup, and no default `--no-sandbox`. Always:
- pick a free port (`4183`, `4184`, ...);
- `curl -sI` to verify the preview before screenshotting;
- bust cache with `?v=<n>` query on every retry.

## Verification report format

When reporting completion, MUST include:

```
Visual pass:
- desktop 1280×1800: <count> screenshots, 0 critical, 0 major
- mobile 720×1600: <count> screenshots, 0 critical, 0 major
- commit: <hash>
- cache-bust URL: <url>?cb=<hash>
```

Without this report, the card is `视觉未通过 — 待修复`, NOT `已发布`.

## Infrastructure failure boundary

A page identity check is necessary but not visual evidence. If URL/title/`readyState` and DOM checks succeed while `Page.captureScreenshot` times out, classify the run as `SCREENSHOT_TIMEOUT` / `VISUAL_PENDING` unless a readable screenshot is actually produced and reviewed. Do not upgrade HTTP 200, CSS/theme signatures, or `scrollWidth == clientWidth` into a visual pass.

Before retrying, confirm the exact target identity and use one fresh owned target for a viewport capture; do not blindly repeat full-page captures. If the fallback capture path also times out or produces no verifiable PNG, retain the pending state and report the concrete infrastructure failure. A publication that proceeds under an approved infrastructure-only fallback must remain `PUBLISHED_PENDING_VISUAL`, never `PUBLISHED` with an implied visual pass.

When using `live-server`, its configured port may already be occupied and the server may auto-select a different port. Read the actual serving URL from the server output, verify that URL with `curl`, and use the same port for browser review. Never review a stale page on the originally requested port.

## Related

- `references/pitfalls-20260728-visual-gate.md` — full incident transcript of the 2026-07-28 case.
- `infocard-pub-hardening` — additional screenshot and preview hardening notes (currently user-owned; adopt before autonomous edits).

## Deprecated compatibility entry

此旧入口仅作兼容转发,替代入口为 `infocard-quality-gate#repair-loop`。同一失败类别最多自动修复两轮,每轮后必须回到统一质量门禁。

Files in this skill

  • SKILL.md4.4 KB
  • references/cross-references.md1.1 KB
  • references/pitfalls-20260728-visual-gate.md3.2 KB
  • scripts/capture-infocard-screenshots.sh1.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.