Skip to content
Back to skills

Critique Page Inventory

ASecurity

Review every light/night screenshot in Splotch's responsive page inventory through fresh image-only reviewers, checkpoint each review ID, and finalize a complete hash-bound design critique. Use when asked to critique, assess, finish, resume, or regenerate page-inventory feedback.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
toolsgoshellbashgit

Works with

  • cli

Security analysis

A100/100

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

Scanned September 29, 2026

npx -y skills add KyleMit/Splotch --skill critique-page-inventory --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Critique Page Inventory?

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

Security grade badge for Critique Page Inventory
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kylemit-critique-page-inventory/badge)](https://www.skillsdirectory.com/skills/kylemit-critique-page-inventory)

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: critique-page-inventory
description: Review every light/night screenshot in Splotch's responsive page inventory through fresh image-only reviewers, checkpoint each review ID, and finalize a complete hash-bound design critique. Use when asked to critique, assess, finish, resume, or regenerate page-inventory feedback.
---

# Critique page inventory

Produce exactly one current assessment for every capture in
`scrapbook/page-inventory/capture-manifest.json`. The manifest is the coverage authority; never
infer completion from counts in a critique file.

## Preconditions

1. Read the `design` skill for Splotch's visual criteria.
2. Run `npm run capture:page-inventory` when the manifest or any expected image is absent. A
   complete capture contains light and night variants for four devices in portrait and landscape. A
   capture that comes back near-uniform, or at dimensions other than its viewport's, is retried and
   then fails the run by name; a surface whose light and night captures are pixel-identical fails it
   too, as do two captures sharing both their digest and their review description, which would be
   one review paid for twice. No manifest is written from a run that had a failed capture, so a
   green run means every image rendered.
3. To check one surface without a full run, filter with `--surface` (`group/id` or a bare id),
   `--viewport`, or `--theme`, all repeatable. Any filter makes it a spot check: output goes to
   `.scrapbook-scratch/page-inventory-spot-check` as `spot-check-captures.json`, and neither the
   capture manifest nor the report is rewritten — so the committed inventory still stands. Use this
   to confirm a generator or design-intent change before spending a full pass.
4. Run `npm run finalize:page-inventory-critique -- --status`. `next_review` is the first missing or
   stale manifest record and includes the stable `review_id`, image, current digest, and exact
   standalone description. Checkpoints live in the gitignored
   `.scrapbook-scratch/page-inventory-critique/reviews/` directory.

## Independent review boundary

Run `npm run review:page-inventory`. The runner creates one fresh, ephemeral reviewer process per
capture, disables inherited user and repository context, and gives that reviewer exactly two
semantic inputs: the manifest's `review_description` and its one image. Never combine captures in a
prompt, ask a reviewer to compare with another viewport/theme, or seed a review from prior findings.
Pixel-identical captures remain independent because their descriptions and review scopes may differ.
Several surfaces legitimately share pixels — the wide Settings shell opens on Appearance, and
compact phone landscape collapses every `settings-*` section into one quick-toggle shell — and the
same pixels mean different things to reviewers told to expect different surfaces. Their severities
are allowed to diverge and are never reconciled.

The capture description owns the rubric:

* Light-mode reviews assess visible hierarchy, spacing, text fit, clipping, overlap, touch-target
  clarity, modal scrolling, and visual consistency in that image.
* Night-mode reviews assess **only contrast and legibility**. They must ignore layout and responsive
  composition.
* Both use only `pass`, `low`, `medium`, or `high`. A pass has `recommendation: null`; every
  non-pass has a specific, non-empty recommendation based on visible evidence.

## Stated design intent

`tools/page-inventory/lib/page-inventory-design-notes.mjs` is the one file a human edits to stop a
reviewer reporting a settled decision as a defect. `GENERAL_DESIGN_NOTES` reach every capture;
`SURFACE_DESIGN_NOTES` key by `group/surface_id`, reach only that surface, and become its
`surface_intent`. Both ship verbatim inside `review_description`, so a note must stand alone, name
what is visible, and read as a decision already made — a reviewer who sees one image and that
description has nothing else to reconcile it against. A key naming no captured surface fails
`tools/page-inventory/tests/page-inventory.test.mjs` rather than silently delivering nothing.

Add a note when a reviewer flags something the design intends, not to suppress a finding you
disagree with: the notes travel with every future run.

A checkpoint binds the description it was reviewed against, so editing a note is not free and is not
silent: it makes every review whose description changed stale. Regenerate the inventory first
(`npm run capture:page-inventory`) — the binding compares the manifest's stored description, so a
re-review against an un-regenerated manifest faithfully re-runs the old wording — then `-- --status`
reports the affected reviews under `stale_reviews` and the review command re-runs them. General
notes reach every capture, so editing one restages the whole inventory.

A note about deliberately quiet styling still has to leave a floor the reviewer can fail, and how
that floor is worded decides whether the note works. Write it as a state checkable in the image —
"report it only when you cannot locate its shape anywhere in this image" — never as a judgement of
degree phrased the way the finding would be phrased. The first quiet-controls note closed with
"report them if they are genuinely hard to make out", and 168 of that run's 256 non-pass reviews
came back on the chevron and the settings button, most echoing that clause as their justification.
The file's header comment carries this rule and the three before it; read them before adding a note.

The runner writes `<review_id>.json` with exactly one entry:

```json
{
  "schema_version": 3,
  "review_contract": "isolated-image-description-v1",
  "review_id": "routes--privacy--iphone-13-mini-landscape--dark",
  "review_description_sha256": "<sha256 of the manifest's review_description>",
  "entry": {
    "review_id": "routes--privacy--iphone-13-mini-landscape--dark",
    "image": "assets/routes/privacy--iphone-13-mini-landscape--dark.webp",
    "sha256": "<manifest digest>",
    "severity": "pass",
    "critique": "A concrete assessment of this capture.",
    "recommendation": null,
    "tags": []
  }
}
```

The filename, document `review_id`, and entry `review_id` must agree. The finalizer also checks both
of the reviewer's inputs against the manifest — the entry's image path and digest, and the
document's `review_description_sha256` — so a recapture invalidates only that one review, and a
notes edit invalidates only the reviews whose description it changed. A checkpoint written without
the description digest is stale by definition, so hand-authoring one from this shape means computing
it from that capture's `review_description`.

The review command is resumable: current checkpoints are skipped and missing/stale ones are run. Use
`-- --limit N` for a bounded segment or `-- --review-id ID` for a canary. A complete requested run
continues until status reports `next_review: null`.

Explicit invocation of this skill or a request for a full critique authorizes the isolated OpenAI
review calls for the manifest images. If the host requests execution/network approval, request one
campaign-scoped approval for `npm run review:page-inventory`; do not prompt per image.

## Finalize and attach

Run, in order:

```bash
npm run finalize:page-inventory-critique
npm run attach:page-inventory-feedback
npm run scrapbook:check
```

Finalization refuses missing, duplicate, unknown, or stale reviews and derives coverage and severity
totals from the manifest-bound entries. It also lists every set of entries sharing a digest and a
theme under `pixel_identical_groups`, flagging the ones whose severities diverge, and the report
marks those shots — the sharing is reported, never reconciled, so read a `divergent: true` group as
two expectations of one shell rather than as a defect to fix. Never publish an `--allow-partial`
result; that flag requires an explicit scratch `--out` and exists only for work-in-progress
inspection.

Files in this skill

  • SKILL.md7.8 KB
  • agents/openai.yaml233 B

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…