diff --git a/skills/hallmark/SKILL.md b/skills/hallmark/SKILL.md index e5b34ac..523f42e 100644 --- a/skills/hallmark/SKILL.md +++ b/skills/hallmark/SKILL.md @@ -69,7 +69,7 @@ If the input does not clearly map to a verb, treat it as default. If the user at ## Disciplines that hold across every verb -1. **Pre-emit self-critique.** Before handing back any output, score it 1-5 on six axes: Philosophy, Hierarchy, Execution, Specificity, Restraint, Variety. Anything **< 3** triggers a revision pass. Stamp the scores at the top of the artifact (`/* Hallmark · pre-emit critique: P5 H4 E5 S4 R5 V5 */`). See [`references/slop-test.md`](references/slop-test.md) § Pre-emit self-critique. +1. **Pre-emit self-critique.** Before handing back any output, score it 1-5 on six axes: Philosophy, Hierarchy, Execution, Specificity, Restraint, Variety. Anything **< 3** triggers a revision pass, and at least one axis must score <= 4 with its reason and fix named in the stamp's `weakest:` clause (straight 5s = unexamined). Stamp: `/* Hallmark · pre-emit critique: P5 H4 E5 S3 R5 V4 · weakest: S - */`. See [`references/slop-test.md`](references/slop-test.md) § Pre-emit self-critique. 2. **Honest copy, no fabricated content.** If the user did not supply a metric, do not invent one. Stat layouts, comparison rows, and proof bars use real numbers, a labelled placeholder ("metric to confirm"), or a different macrostructure. Same for testimonials, logos, and case-study counts. See [`references/anti-patterns.md` § Invented metrics](references/anti-patterns.md) and gate **46**. @@ -198,6 +198,8 @@ Two non-default signals firing (rare): ask one short either/or. State the genre The `axes` and `fingerprint` fields are how Rotation and gate 32 become checkable instead of remembered; older entries without them are treated as unconstrained. First run for a project: no constraint, note it in one line. User explicitly re-orders the same archetype: same shape, different knob values, and say the knob deltas. +**The mirror test, before the block.** Would this exact macro + theme + nav + hero combination have come out for a NEIGHBOURING brief (same category, different product)? If yes, at least one pick must change, and the Picks block names which one in its parenthetical. A pick that survives the mirror is a decision; one that doesn't was a default. + **The Picks block.** One compact fenced block, said once, replacing all narration: ``` @@ -300,6 +302,8 @@ Emit code that satisfies the tone and the structural fingerprint. Match code com Component scope runs the Core-15 sweep named in `slop-test.md`. Update the preview's Slop test row with the real outcome. If any gate fails, fix it. Do not ship slop. +**Verification is budgeted.** One batched inspection round (desktop 1280x800 AND mobile 375 together; `--render` on the sloplint call when Chrome is available), one batch of fixes, at most one confirming round, then stop polishing. Endless single-issue re-render loops are their own failure mode. + **Edit-time linting (optional, Claude Code).** Instead of waiting for Step 7, the user can wire sloplint as a PostToolUse hook so every `.html`/`.css` artifact is linted the moment it is written and FAILs are fed back advisorily: `node /scripts/install-hook.mjs` (project scope; `--global` for all projects; `--remove` to undo). It never blocks a write and no-ops on non-artifacts; Step 7 still runs regardless. Off Claude Code the hook never fires and Step 7 is the only sweep. --- diff --git a/skills/hallmark/references/custom-theme.md b/skills/hallmark/references/custom-theme.md index 302c706..333b28e 100644 --- a/skills/hallmark/references/custom-theme.md +++ b/skills/hallmark/references/custom-theme.md @@ -48,6 +48,8 @@ Name the category's obvious aesthetic AND the second-order trap, then reject bot Format: *"Reflex check: rejecting (the category default) and (the tasteful fallback)."* Landing on either after writing this line means the self-check failed; redirect before continuing. +Third altitude, **the mirror**: if the slate you are about to write would fit the category's OTHER products unchanged, it is category gravity wearing a slate's clothes. Sharpen entries until at least three are only defensible for THIS product. + ### R.2 · Spent defaults Hallmark's own house defaults count as already spent for this brief family. Declare it before writing the slate. The spent table: diff --git a/skills/hallmark/references/slop-test.md b/skills/hallmark/references/slop-test.md index bfb2ac3..36a9737 100644 --- a/skills/hallmark/references/slop-test.md +++ b/skills/hallmark/references/slop-test.md @@ -27,7 +27,7 @@ Every gate below carries a class tag: - **[R/J]** Render-verifiable: confirm on the rendered page when rendering is available, else judge. - **[J]** Judged: the model verifies these at Step 7; no script can. -When sloplint has run, walk the J and R/J gates, plus the judged halves of M/R gates when --render did not run, and confirm or dismiss every WARN; re-litigating M gates the script already passed is wasted judgment. +When sloplint has run, walk the J and R/J gates, plus the judged halves of M/R gates when --render did not run, and confirm or dismiss every WARN; re-litigating M gates the script already passed is wasted judgment. Verification is budgeted: one batched inspection round, one fix batch, at most one confirm round, then stop. --- @@ -37,16 +37,16 @@ Run this **before** the gate list, not after. Score the planned output 1–5 on Two passes is normal. Three is a sign the brief is wrong, not the design — re-read the brief. -| # | Axis | What you're scoring | +| # | Axis | What you're scoring (what a 3 looks like vs a 5) | |---|---|---| -| **A** | **Philosophy** | Is there a clear *why* — a position the page is taking? Or is it just a layout? | -| **B** | **Hierarchy** | Can a reader tell, in 2 seconds, what's primary, secondary, tertiary? Or is everything the same weight? | -| **C** | **Execution** | Are the details (rule weight, accent footprint, text-wrap, focus rings, contrast) all in spec, or is there sloppiness even if the bones are right? | -| **D** | **Specificity** | Does this look like *this brief* — or does it look like a generic "page that could be anyone"? | -| **E** | **Restraint** | Have you removed everything that isn't earning its place? Decoration, redundancy, padding-for-padding's-sake? | -| **F** | **Variety** | Does this output share a structural fingerprint with a previous Hallmark output in the project? Score by structural distance, not visual distance — colour-swaps don't count as variety. | +| **P** | **Philosophy** | Is there a clear *why* — a position the page is taking? A 3 has a tone; a 5 has an argument a reader could disagree with. | +| **H** | **Hierarchy** | Can a reader tell, in 2 seconds, what's primary, secondary, tertiary? A 3 needs a second look; a 5 survives the squint test. | +| **E** | **Execution** | Are the details (rule weight, accent footprint, text-wrap, focus rings, contrast) in spec? A 3 has two or three loose details; a 5 would pass the gates on the first sweep. | +| **S** | **Specificity** | Does this look like *this brief*? A 3 fits the category; a 5 could belong to no other product. | +| **R** | **Restraint** | Is everything earning its place? A 3 keeps one decoration too many; a 5 lost something you liked. | +| **V** | **Variety** | Structural distance from the log's `fingerprint` entries, never visual distance — colour-swaps don't count. A 3 differs on three of the six axes; a 5 shares almost nothing with the last three runs. | -Record the six scores in a one-line stamp comment directly below the macrostructure stamp (which stays line 1, per gate 20): `/* Hallmark · pre-emit critique: P5 H4 E5 S4 R5 V5 */`. Future runs should be able to find this and avoid repeating the same weakness. +Record the six scores in a one-line stamp comment directly below the macrostructure stamp (which stays line 1, per gate 20), with the weakest axis named and answered: `/* Hallmark · pre-emit critique: P5 H4 E5 S3 R5 V4 · weakest: S - hero could be any dev tool; added the ledger-rule motif */`. **At least one axis scores <= 4, with its reason and the fix taken in the `weakest:` clause. A straight-5s stamp is unexamined, not excellent; rewrite until one real weakness is found and addressed.** Future runs should be able to find this and avoid repeating the same weakness. ---