ソース情報
- リポジトリ
- ccwq/infocard-pub
- ソースの最終更新活動
- 2026年8月27日 00:31
- 検出された SKILL.md の言語
- 英語
- スター
- 1
- フォーク
- 1
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/ccwq/infocard-pub --skill visual-verification-gateコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
Use before infocard .docs authoring to select a registered theme from content-aware candidates. Owns the only content-to-theme association, capability filtering, bounded reproducible variation, and theme-decision.json.
Use when one URL or a complete user brief should become one published infocard through the .docs promotion workflow.
Light-batch publish 2–3 cards in parallel without worktree.
| name | visual-verification-gate |
| description | Use before publishing any card or cheatsheet. |
| version | 1.1.0 |
| date | 2026-08-26 |
HTTP 200 + npm run build success are NEVER sufficient evidence of a finished card. This skill owns the verification loop and the recurring CSS defects that break shipped themes on long-Chinese titles and narrow viewports.
It complements infocard-publish-sop (which defines the gate) by capturing the defect recipes the gate catches.
npm run build for any new card / page / cheatsheet.HTTP 200 + a previously-passing visual review do NOT cover subsequent HTML edits. The visual gate must re-run after every modification:
0 critical / 0 major before commit/push.PUBLISHED_PENDING_VISUAL fallback does not carry over from a previous successful run — it only applies when the current run's vision tool itself fails 5x.Anti-pattern to avoid: main thread treats "small" follow-up patches (terminology enrichment, link correction, copy fixes) as below-the-gate because the first review already passed. The first review covered the version it reviewed; it does not cover the patched version.
After the primary visual route has exhausted its differentiated infrastructure retries, and static/DOM/page-identity gates pass without any actual visual critical/major result, ChatGPT Web may be used as the final fallback. Follow chatgpt-web-skill's references/visual-review-fallback-spec.md for session, upload, result, evidence, and cleanup rules. Do not use the fallback to bypass a real visual defect. The fallback must return structured critical / major / minor results for desktop and mobile; otherwise keep VISUAL_PENDING.
For a batch of two or more cards, visual review must record the selected theme and implementation fingerprint per card. Same-theme reuse is not accepted as visual evidence by itself; it requires the approved same_theme_exception. If the target theme has changed after the screenshot, all prior evidence is invalid and the card must be re-rendered.
The following are mechanical preconditions only, never visual PASS evidence: build success, HTTP 200, DOM/accessibility snapshots, CSS/class presence, and scrollWidth == clientWidth.
Before the first push of every card, require a current rendered screenshot manifest covering desktop and 390px mobile, with Hero, ordinary body, every table/matrix, code/deployment, risk, and footer/control regions. Each required image must have an explicit critical / major / minor disposition; any critical or major defect blocks push. If capture or analysis infrastructure fails after differentiated retries, keep VISUAL_PENDING and do not push unless an explicitly authorized pending-visual release path is used.
Any HTML/CSS/structure/content change invalidates all prior visual evidence. Re-render the exact public URL after CDN propagation and re-audit after every publish repair. For multi-card batches, track evidence per card; never infer batch visual status from HTTP 200 or one card's PASS.
Render the target HTML at desktop (1280px) AND mobile (480px / 720px).
For a long page, capture evidence by region rather than trusting one full-height image: Hero, ordinary body, every table/matrix/risk region, and page end/control. A full-height capture may be retained as supplementary evidence but is not the sole review input.
Route screenshot capture through web-capture. Do NOT use browser_exec built-in cdp() — it repeatedly times out on Page.captureScreenshot calls (confirmed 2026-08-26 across 5+ cards).
Desktop capture via web-capture preset pc or desktop.
Mobile capture via web-capture preset mobile.
Tablet capture via web-capture preset tablet when needed.
web-capture owns the agent-browser --cdp 9222 tab selection, viewport switch, geometry checks, and PNG output path.
Run vision_analyze on each screenshot. Demand an explicit critical / major / minor defect list. Screenshot delivery to the user is evidence-sharing or requested human review; it never substitutes for the Agent's disposition.
Classify only observable release defects as critical/major: clipping, overlap, missing text, unreadable contrast, broken responsive layout, unintended overflow, or controls obscuring content. Treat subjective suggestions (different shadow, border weight, or stylistic preference) as minor unless they produce one of those observable failures. If an assessment is ambiguous, recapture the affected region at the same viewport and ask a narrow, defect-specific question before editing; do not let fluctuating aesthetic commentary trigger unbounded CSS churn.
If vision infrastructure fails, retry up to five times with a different strategy each time: split the image/region, reduce size, recapture the affected region, or switch to an actually available visual entrypoint. Do not spend retries merely rephrasing the same prompt. From the second failure, record input, strategy, error category, and outcome in run-local evidence.
If any critical or major defect remains, BLOCK publish. Label 视觉未通过 — 待修复.
After any repair, repeat from step 1. Only 0 critical / 0 major may promote to PUBLISHED.
See references/darkblue-template-pitfalls.md for the full list and CSS fixes. Top three:
.title line-height collisionTemplate ships .title { line-height: .92; letter-spacing: -.07em }. Long Chinese titles (≥ 18 chars, or with「」/?/:) overlap visually.
Override:
.title { line-height: 1.22; letter-spacing: -.02em; font-size: clamp(34px, 5.6vw, 76px); }
@media (max-width: 768px) {
.title { line-height: 1.36; letter-spacing: -.01em; font-size: clamp(28px, 8.4vw, 42px); }
}
When patching, watch for duplicate line-height: the template often has line-height: .92 AND your override — the later one wins. Verify with grep -A 4 '^.title{'.
The shipped @media (max-width: 720px) only handles .hero / .feature-row / .visual-grid. Cards using .grid-2 / .grid-3 / .matrix / .risk-grid stay multi-column on mobile.
Fix: add grid-template-columns: 1fr !important for these selectors in a @media (max-width: 768px) block. The !important is required to beat repeat(auto-fit, minmax(220px, 1fr)) rules defined later in the cascade.
A screenshot where a card heading is inside its border but the description appears to the right or below is usually malformed HTML, not a missing overflow-wrap rule. Before iterating on CSS, inspect the exact section and verify that every card's heading and paragraph are descendants of the card element. A premature </div> or </h4> can turn the paragraph into a grid sibling; min-width:0, max-width, overflow:hidden, and word-break will not restore the intended ownership. Prefer replacing the affected block with a known-good sibling structure such as .grid-3 + <article class="card"> with properly nested <h3> and <p>. Use browser parentElement inspection when possible, then re-screenshot desktop and mobile.
str.replace silently failspython3 - <<'PY' ... PY may interpret escape sequences so replace returns 0 without raising. The patch "succeeds" but the file is unchanged.
Always grep after the heredoc:
grep -c '<new pattern>' docs/<slug>.html
Or prefer the patch tool for targeted CSS edits — its diff makes success/failure unambiguous.
After build, verify dist/docs/<slug>.html contains a newly introduced, release-specific phrase or structural token. After Pages propagation, fetch the public URL and verify the same fingerprint. HTTP 200 and build success prove transport, not that the current revision is being served.
All screenshots use agent-browser --cdp 9222:
# Desktop 1280×900
agent-browser --cdp 9222 tab <id> && set viewport 1280 900 && screenshot <path>/desktop.png
# Mobile 390×844
agent-browser --cdp 9222 tab <id> && set viewport 390 844 && screenshot <path>/mobile.png
A local render pass does not promote a public page to visual PASS. After any HTML/CSS rebuild:
data-theme, target section count, code-block/risk classes).VISUAL_PENDING; do not convert local PASS + HTTP 200 + DOM checks into public visual PASS.age/last-modified when available, viewport, screenshot path, and critical/major/minor disposition.A tool timeout is infrastructure evidence, not a visual pass and not a visual fail. Retry through a different capture route (fresh CDP target, region capture, or a different available vision entrypoint) only when the route is actually available; after the retry budget is exhausted, report VISUAL_PENDING explicitly.
Theme regression guard: if a page previously rendered as white/raw HTML, inspect both CSS selector ownership and HTML class alignment. A valid theme token block alone is insufficient; the rendered DOM must use the same theme's structural classes for hero, section headers, tables, code blocks, and risk panels.
HTTP 200 as completion evidence.PUBLISHED_PENDING_VISUAL) for skipping review on a happy-path release.The visual gate may be passed by explicit exception after at least 3 recorded visual failure attempts; 4 or more attempts also qualify. Attempts include real visual defects and screenshot/capture/visual-review infrastructure failures. Infrastructure failures count as attempts, but are not completed repair rounds and must record an explicit evidence gap without fabricated screenshots or review dispositions.
Counting rule: A completed repair round counts only when:
change_made: true), ANDEvery failure attempt must have deterministic name, type (visual_defect or infrastructure_failure), and outcome. The manifest must record visual_failure_attempts and valid completed repair_rounds; fewer than three attempts, missing/malformed/unrecorded attempts, stale evidence, or VISUAL_PENDING remain blocked.
Exception manifest contract:
Add a top-level visual_failure_attempts array. Each entry is { "name": "...", "type": "visual_defect" | "infrastructure_failure", "outcome": "..." }; infrastructure entries also require evidence_gap: true and error_category, and must omit screenshots/review dispositions.
{
"target": "docs/<slug>.html",
"html_sha256": "<current-sha256>",
"review_status": "VISUAL_EXCEPTION_AFTER_MAX_REPAIRS",
"theme_match": true,
"repair_rounds": [
{
"attempt": 1,
"repair_completed": true,
"html_sha256": "<same-sha256>",
"desktop": { "critical": 1, "major": 1, "minor": 0, "screenshot_path": "/path/to/desktop-1.png" },
"mobile": {
repair_rounds must contain completed repair records; its length is not the failure-attempt count and is not required to be exactly 3.repair_completed: true, change_made: true, and use sequential attempt values; these fields make repair evidence deterministic rather than dependent on prose.visual_failure_attempts must contain at least 3 valid records for the exception, and may contain 4 or more.html_sha256 must match the manifest root html_sha256 (evidence binding to the reviewed HTML).desktop and mobile objects with critical, major, minor numbers and a screenshot_path string.review_status must be the exact string "VISUAL_EXCEPTION_AFTER_MAX_REPAIRS".VISUAL_PENDING fail the gate — no automatic upgrade. The exception report must disclose the evidence gap and must not claim visual PASS.No automatic retry loop: The mechanical validator (scripts/verify-visual-gate.js) does not edit HTML, recapture, or re-review. The publisher/agent owns each repair action; the validator only checks the declared evidence and final disposition.
Non-visual gates are unaffected: theme_match=false, hash mismatches, build failures, leak checks, taxonomy failures, and Git policy violations all remain blocking regardless of visual exception status.
Final report wording (use verbatim after an exception release):
视觉门禁:三轮修复后例外放行。已完成 3 次"修复 → 重新截图 → 重新审查";最终仍遗留 critical=N、major=N、minor=N。该放行仅适用于视觉门禁,非视觉门禁均已独立通过。
A clean visual pass (zero critical/major on initial review) must not be reported as an exception.
After five infrastructure-only failures, static checks may be reported as passed but visual status is VISUAL_PENDING / PUBLISHED_PENDING_VISUAL, never visual pass.
After any HTML edit that touches structure (new section, new table row, new timeline block, new grid component, content enrichment patch), repeat from step 1. The first review is invalidated by the edit, regardless of how "small" the change feels.