mirror of
https://github.com/Nutlope/hallmark.git
synced 2026-08-14 12:35:33 +02:00
Critique with teeth, the mirror test, and a verification budget
- Pre-emit critique: the axis letters now match the stamp (P/H/E/S/R/V), every axis carries a what-a-3-looks-like-vs-a-5 anchor, the V axis scores against the log's fingerprint entries instead of memory, and at least one axis must score <= 4 with its reason and fix named in a new weakest: clause - a straight-5s stamp is called what it is, unexamined - The mirror test lands in Step 2 (would these picks have come out for a neighbouring brief? then change one and name it) and as the reflex check's third altitude in the custom ritual (a slate that fits the category's other products unchanged is category gravity) - Step 7 and the gate-classes section both carry the verification budget: one batched desktop+mobile inspection round, one fix batch, at most one confirm round, stop polishing. Step 7 finally names --render
This commit is contained in:
@@ -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 - <reason; fix taken> */`. 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 <skill-dir>/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.
|
||||
|
||||
---
|
||||
|
||||
@@ -48,6 +48,8 @@ Name the category's obvious aesthetic AND the second-order trap, then reject bot
|
||||
|
||||
Format: *"Reflex check: rejecting <first-order> (the category default) and <second-order> (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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user