Skip to content

xhard flow evals + design skills: project-specific, general, eval-proven - #16

Merged
TomasPalsson merged 44 commits into
mainfrom
worktree-hard-evals-and-next-finish
Oct 3, 2026
Merged

TomasPalsson merged 44 commits into
mainfrom
worktree-hard-evals-and-next-finish

Conversation

@TomasPalsson

Copy link
Copy Markdown
Owner

What

Three pieces of work from one long session.

1. Flow: harder pipeline evals and fixes

  • 32 xhard-* pipeline eval cases, plus scripts/case-selfcheck: a static proof that each case is sound, and a --live runner that runs headless claude -p outside the eval sandbox (the sandbox masks git).
  • Fixes found by the live runs:
    • /flow:next §Keep going, and §Finish rules tightened
    • task-brief sections
    • flow check --since <ref> with lint/format ratchets
    • review-package ranges
    • eval CLI --case and a plugin-dir probe
  • --finish itself landed earlier in flow: /flow:next --finish — run one spec to the end, pre-approved #13. This branch carries the follow-up fixes.

2. Design skills (/design:design, /design:vary): project-specific and general

  • Grounded concepts and a hero treatment per concept: scene, photography, product UI, typography, data visual, pattern or utility. User directives outrank the skill.
  • The signature fact leads, and the loudest element is the most important one.
  • Two new blocking fold-check rows: page-overflow and meta-copy.
  • The world pool is hints-only. Product UI can be grounded by screens the brief describes.
  • Eval results, 3-judge panels:
    • hard exam 5.8 → 8.0 (min 6.1, all builds pass the blocking rows)
    • breadth exam (SaaS, dashboard, docs, photo-led luxury, iOS onboarding, plain Swiss notice) 6.4 → 7.8
    • 48/48 builds obeyed their brief

3. Merge of main (#14, #15). Two conflicts resolved:

  • bin/flow help text: main's wording kept.
  • skills/next/SKILL.md: the branch's later §Finish / §Keep going text kept.

Checks

  • flow tests (via tests/run.sh, TEST_ONLY):
    • test_next 129/0
    • test_finish 51/0
    • test_flow 99/0
    • test_eval_cli 135/0
    • test_case_selfcheck 59/0
    • test_no_slop_seams 22/0
  • design scripts:
    • roll.test.mjs 35/0
    • fold-check.test.mjs 34/0
    • check.test.mjs green
  • The design-script code changes went through two adversarial reviews. Every finding was fixed, and a mutation check showed the new wildcard test fails when its gate is removed.

Known open items

  • fold-check plates counts inline svg/canvas only, not <img src=*.svg>. This gives a non-blocking false FAIL.
  • bench-fold.sh's hitataekni benchmark needs its store backend running.

🤖 Generated with Claude Code

TomasPalsson and others added 30 commits September 29, 2026 13:28
flow finish on|off|status|check arms FINISH.md for the active spec; the
finish-gate Stop hook keeps the session building until the spec is done,
silent on hard stops, released after 3 no-progress blocks. The next skill
treats --finish as the user's pre-approval of plan, checkpoints and
verification, never of evidence.

17 xhard cases walk the whole pipeline (prep, spec, drafting, gates, waves,
lying ticks, phase tests, checkpoints, gating, stale PASS, unverified, e2e
python/node, one --finish run); scripts/case-selfcheck proves each fails on
the pristine scaffold and passes on its solution.sh.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Lets the long xhard pipeline cases run as parallel groups instead of one
serial 17-case run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
claude 2.1.284's plugin eval dropped --plugin-dir; passing it failed every
case with an unknown-option error the runner reported only as 'no result
file'. Probe the help once, skip flow-extras with a notice, and put the
child's last stderr lines into the 'no result file' error.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ases

claude plugin eval reads timeout_seconds under execution: (max 3600) and
rejects max_turns > 200; every case put it at the top level, so all ran at
the 300 s default, and the three 250-turn cases never ran. case-selfcheck
now refuses both, plus non-EVAL_* execution.env keys.

Round 2 adds crash-mid-wave, invalid-tasks-repair, ambiguous-features,
disagreement, converge-gap, review-catches-edge, wide-parallel-wave,
stealth-build and e2e-two-phase. README records that the sandbox masks
/bin/git, which leaves every git-dependent case at scan-failed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…al sandbox

claude plugin eval masks /bin/git, so every flow pipeline case read
scan-failed. --live scaffolds each case in a throwaway dir and drives
claude -p with only this checkout's flow plugin (project settings only,
no CLAUDE.md, no auto-memory, no MCP, this checkout's bin first on PATH),
then grades trace regex, tool_used, llm (headless judge), file graders and
postcheck. Tree-diff postchecks now ignore the runtime .claude dir.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude Code denies every write under ~/.claude in -p mode, so a run there
built nothing and graded as 26 model failures.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Round 1's llm grades were mostly noise: the judge had tools and one turn,
so it often spent the turn on a tool call ('(empty reply)') or described
its own empty cwd ('not a git repo'); it saw only the final message; and
without the user's prompt it called every pre-approved gate 'invented'.
Now: --tools '', a grader system prompt, the prompt on stdin, and a
no-focus grader gets the user prompt + a clipped whole-run transcript.
Trace regexes search JSON-decoded text, so a plain '"' or an em dash in a
pattern matches (two correct runs failed on the escaped quotes).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- F1 parallel waves: each task commits only its files: (pathspec commit),
  never one combined commit (four [P] tasks shared one done: sha)
- F2 hard-gate turns end on the router's own Next: line (stated under the
  state table, where the model reads)
- F3 drafting: one ## Behaviors row per acceptance criterion; a human-only
  criterion becomes a CHK (a 5-criterion spec was drafted with 4 rows)
- F4 gates: after --fix, git diff <Base> shows only feature lines; revert
  formatter rewrites of older lines, never edit an existing test line
- F5 router stays in gating while any G### is open, even with a green
  PASS (a --finish run wrote PASS and moved on with 3 gates unticked)
- F6 developers report every defect they saw as Seen:, which becomes a
  Discovered: line (a passing-but-wrong formatter went unmentioned)
- F7 'keep going until done' in the user's own words loops states in one
  turn; human gates still stop (one run drafted and stopped, others looped)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
.next-call-count and .claude/review/ are flow's own runtime files; NS-16
name similarity is advisory; appended regression tests are allowed; the
prompt-mandated constructor rename is not test weakening; llm graders
focused on a file judge only what that file shows. Every loosened check
was re-proven against the cheat its case exists to catch. Ledger gains the
live round 1 line (9/26, mean 0.89).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
xhard-e2e-go (Go module, go test/vet gates, errors.Is), -monorepo-subdir
(task in services/worker, the api untouched), -security-review (path
traversal a review must catch, reuse safe_join, sibling-prefix mutant),
-spec-vs-legacy-test (the spec retires one assertion; nothing else in that
file may weaken; a decoy known-red test stays untouched), -twelve-task-plan
(12 tasks, 4 waves, 2 phases, one sha per task, phase test before phase 2)
and -sql-param-reuse (parameterized query helper vs a string-built decoy).
Each proven by case-selfcheck: pristine fails, solution.sh passes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Some stream-json system events carry message as a string; reading .get off
it crashed the grading of three finished runs ($11 of agent work scored 0).
One event_content() helper guards all four readers, and grading is split
out as grade_run() so a finished run can be re-graded without re-running
the agent. Ledger gains live round 2 (30/52 runs, mean 0.86).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Router-read accepts the SessionStart hook's injected state; wave-2 tick is
a Bash tool_used check (decoded trace made [^"]* span prose); drafting
drops the task-count floor (a task may serve several criteria); streaming
scan accepts lines that reject streaming; bulleted '- Discovered:' lines
count; converge-gap names T004; finish's CHK tick allows flags between;
three llm criteria stop failing allowed behaviour. e2e-two-phase gains a
field-preservation check a dropped-fields migration had slipped past.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Real repos carry lint/format debt. A whole-repo 'flow check --fix' either
rewrote pre-existing code and tests (the evals caught a whole CLI file
requoted and existing asserts rewrapped) or stayed red on debt the feature
never touched. --since limits lint/format gates to files changed since the
ref plus untracked ones (NUL-safe paths; ruff/black honour their exclude
config via --force-exclude; eslint/prettier/biome scoped when the script is
a single known command, otherwise flagged unscoped); typecheck and tests
stay unscoped. Without --since the output is byte-identical. The TASKS
template's G001 now uses it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- K1 every developer report ends with Seen: (or 'Seen: none'); dispatch
  never paraphrases the report format (a paraphrase dropped 'even if its
  tests pass' and a neighbouring bug went unreported)
- K2 any wording asking for repeated /flow:next is Keep going; every
  table 'stop' yields to Keep going/Finish except human gates and hard stops
- K3 the converge pass runs a command per criterion into verify/acceptance.md;
  no PASS or gate tick while a row is unmet
- K4 gates use flow check --fix --since <Base>; git status after every
  --fix; debt at Base on untouched files is Discovered, never reformatted
- K5 PASS files carry a Gate | Command | Exit table with integer exits
- K6 finish arms on the first state-changing action (reading state first is fine)
- K7 review: a changed pre-existing line outside the feature is a finding

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…only

A feature adding one function to a file with old lint debt made the scoped
gate red on lines it never touched, and 2/2 live runs then rewrote those
old lines. Under --since the ruff and single-command eslint gates lint the
touched files and their <ref> versions, match violations by (path, rule,
stripped line) as a multiset, and fail only on new ones; --fix skips files
that carry pre-existing violations and says so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s, exit codes

- L1 the generated brief now owns the report: a Seen: section separate from
  the searched: receipt (one run relabelled the receipt as Seen:), and the
  orchestrator copies Seen: into NOTES before ticking and re-reads every
  touched file itself (0/4 runs logged the planted neighbour bug)
- L2 RED lists the spec's boundaries and negatives first; a test the obvious
  wrong implementation passes is not RED; review asks per task 'name one
  plausible wrong implementation — would these tests fail on it?' (6 runs:
  a planted mutant survived the model's own tests)
- L3 Behaviors rows open with the spec's criterion id
- L4 acceptance rows carry integer exit codes, 'human' for CHK rows

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
.claude/ excluded from touched-file lists; the streaming scan flags only
lines that make streaming a requirement; the stealth scaffold is
deterministic (20 consecutive scaffolds); adding tests to the legacy test
file is allowed, changing other existing assertions is not; e2e-go judges
the gates that ran, not the Test: header; any NOTES line recording no PR
counts. Ledger gains live round 3 (39/64 runs, mean 0.96).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…aw it

The user's benchmark sites (ara-bar, hitataekni) came from real content,
concepts taken from the trade's own artefacts, and an art engine critiqued
from screenshots before any UI; the skills rolled subject-blind worlds and
had no step that drew anything, so output read as 'random things'.

- Step 0/0b: a fact dossier (.vary/dossier.json, validated: >=12 sourced
  facts, >=4 kinds, sector) and 4-7 grounded concepts, each citing facts,
  an antecedent artefact, a functional reskin and 2-3 signature devices
- roll.mjs deals a concept, then a signature-graphic technique, then a
  world from the concept's hints plus worlds that suit the sector (sector
  vocabulary on all 47 worlds; avoid_sectors filtered; 15% seeded wildcard
  keeps variety); --lock concept=<id> re-rolls the world only
- Step 3a art first: graphics.md playbook ported from the benchmark art
  engines (seeded oblique illustration, char/zoned fills, tapered ribbons,
  trace pipeline + dimension lines, swatch/style bridge, guarded shader),
  art brief + gallery + two screenshot critique rounds before UI code
- check.mjs: concept-contract, facts-in-build, bespoke-graphics,
  seeded-art, svg-a11y; evaluators gain project-specificity tests and get
  the dossier, art brief and critique; design/ rubric gains a specificity
  and signature-graphics dimension
- 21 node tests (roll + check)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, ordered judge digest

- CLAUDE_PLUGIN_ROOT points at the plugin under test; a run whose Bash
  touched ~/.claude/plugins or ~/.claude/skills is marked contaminated
  (one run had found the installed OLD task-brief there)
- runs whose scaffold writes under $HOME get an isolated stealth store
  (two parallel runs shared one store and wrote phantom done: shas)
- the judge transcript keeps head and tail in full and replaces the
  clipped middle with an ordered one-line-per-tool-call digest

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Behaviors rows counted by table shape and AC ids; bulleted Discovered
lines in sql-param-reuse; gates-not-started is a Bash tool_used check;
e2e-two-phase's judge knows 'go' covers plan approval only and stopping
at unverified passes; finish allows branch creation before arming and
states the malformed-month rule; twelve-task-plan checks phase order
deterministically; slop failures print every finding. Ledger gains live
round 4 (41/64 runs, mean 0.93).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A/B trial builds were more project-specific than the old skill (a granary
section with the lost mill wheel, the 96-drawer parts wall) but far below
the user's benchmarks on richness: one thin diagram in a box, an icon, an
empty grid, a text-only hero. The benchmarks open on full-bleed scenes.

- S1-S3: persuade/experience heroes are full-bleed scenes (>=55% of the
  desktop fold, >=5 drawn subject objects over >=3 depth layers, headline
  set into the scene, >=2 real facts painted into the art), a richness
  floor (filled shapes, one light source, texture, 4-7 inks), and >=3
  more drawn plates down the page
- graphics.md 1b composing a scene (layer order, headline-in-scene,
  readable over art, a seeded skeleton with sign, lamp, bulbs, figures
  and cast shadows) and 1c scale up (stroke weights from canvas width)
- fold-check.mjs measures fold coverage, shape detail, headline-in-scene
  and drawn plates with Playwright; on real pages it passes every
  benchmark hero (ara-bar 1.00/194, hitataekni 1.00/59) and fails every
  thin trial hero (<=12 shapes); check.mjs --fold runs it; evaluators
  score richness against the benchmarks
- scripts resolve from the skill's own base directory (<VARY>); never
  search ~/.claude for them — 7 of 12 trial runs had run the installed copy

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…collision gates

A 3-judge panel scored the round-2 trial builds 6.5/10 (old skill 2.4,
round 1 4.9, the user's benchmarks 9.0) and named what still separates
them: the art stops at the fold, flat muddy rendering with dead zones,
UI cards laid over the art, and text collisions in heroes.

- vary/design: every section below the fold carries its own drawn plate
  (catalogues draw each item); a finish pass (one key light + glow on the
  focal fact, >=3 value steps per material, visible grain checked by
  pixel stdev, no empty region >20% of the hero); headline, phone and
  primary action painted onto in-scene surfaces, no frosted card over
  art; every label fully visible at both viewports; the art loop is two
  critique rounds then build (open items go to NOTES.md)
- fold-check: text collisions (text over text, text under an opaque
  later-painted element, svg shapes crossing or half-swallowing text),
  dead zone, card over art, art down the page. It passes ara-bar/1 and
  hitataekni/1 and /4, and catches the two known trial collisions (a
  press screw through the sign, the press over the phone number).
  Layered lettering (same words stacked) and 1-2 character grid labels
  are not collisions. The in-page measure lives in fold-text.browser.js
  (small functions) so fold-check.mjs stays under the size limits.
- 30/30 node tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ards and plate size

Trial-3 builds ran fold-check dozens of times and 7/9 passed, yet judges
still scored them ~6/10 vs the benchmarks' ~9.4 for four things the gate
did not measure. New checks, calibrated so ara-bar/1 and hitataekni/1+4
pass all 15:
- full-bleed: hero art spans >=95% of the viewport, margins <=3%
- rendering-depth: hero luminance p95-p5 >= 90 and >=5 of 16 value bins
  (texture is printed, not gated: ara-bar's smooth sky scores 0.06)
- card-over-art now also fails a solid text card covering >6% of the art
- plates-size: below-fold plates >=35% of the section width, >=280px tall,
  >=3 value steps
The gate is stricter than the judges on framing (their favourite build is
a 61%-wide framed hero; rank correlation 0.05), deliberately. Rules in
vary/design and a depth recipe in graphics.md match the numbers. Two
stray fold screenshots committed earlier are removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…router change left out)

The classifier had blocked these when a subagent first wrote them; the user
then asked for them to be applied as far as judged sound. Applied:
- keep-going clause inside the drafting/invalid rows; one What-will-happen
  line per Phase; Discovered lines written after the developer returns and
  before flow tick; the phase Independent test also after the last phase;
  feature-branch creation is not a state change under --finish
- the unapproved row checks .claude/flow.config.json for autoApprove first
- task-brief emits a ## Tests section (boundaries and negatives, one
  assertion each, helper call sites) and an absolute slop-check line
- check-all --since skips the format gate on files unformatted at <ref>
- review-package accepts A..B and A.., refuses A...B
Left out: the router flipping human_gate off under autoApprove — the one
change that weakens a human gate; the skill text now reads the config.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… boxes; varied sections

Trial-4 judges (mean 6.4 vs 9.0): the two weakest builds had Bauhaus
primary blocks dealt to a Victorian bindery and a Westfjords pool; art
drew boxes standing in for trains and books; bodies repeated one
copy-left/diagram-right layout; prices appeared twice; some folds had no
headline.
- concepts carry a temperament (heritage-craft, warm-domestic, civic-calm,
  technical-precise, playful-bright, natural-raw, nocturnal-social,
  avant-garde); every world lists 2-4; the roll removes worlds that cannot
  serve the concept's temperament before sector/hint narrowing, and the
  wildcard never widens it (300 heritage keys: no bauhaus/de-stijl/memphis/y2k)
- graphics.md 1e objects not boxes (a carriage and a bound book drawn from
  the kit with shading), six named section skeletons, no two consecutive
  sections alike, each fact once in the body, name + value line painted
  on a drawn surface in the fold
- fold-check: duplicate-content and headline-on-fold; benchmarks still pass
  every check; 40/40 node tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-bug gates

Hard eval round 1 (5 hard clients x {vary, design}) scored 5.8 vs 9.1:
the facts became objects, but the drawings were thin ('pill-shaped
figures', 'clip-art with no shared ground'), bodies fell back to a
template, and craft bugs shipped (a dark overlay over the hero, a hero
hidden by a reveal animation, clipped badge text). One session was doing
plan, every plate, build and polish inside an hour.
- art-crew.md: illustrator subagents draw the hero and each section plate
  in parallel from the art brief (shared ground line, key light, glow,
  grain fixed in the brief), each rendering and fixing its own plate; a
  fresh critic subagent scores the screenshots against the benchmark
  anchors and lists the 5 biggest fixes, up to 2 rounds or mean >= 7.5
- craft-bug rules: no JS-gated reveal, no leftover overlay, nothing
  cropped by the nav, monotonic labelled scales, leaders end on objects
- fold-check: hidden-content, stray-overlay and clipped-text checks
  (benchmarks still pass every check); 43/43 node tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TomasPalsson and others added 14 commits October 1, 2026 18:45
…fails, hint-led roll

Hard eval round 2 scored 6.55 (min 5.2; design arm ~6.9, vary ~6.2):
- the skill said 'paint the headline into the scene' while the gate
  demanded an HTML h1, so five builds shipped with no headline; now the
  fold carries a real <h1>, a value line and an action positioned over
  a drawn surface (an aspect-locked stage so the text stays on the board)
- vary dealt Bauhaus circles to a fish auction and a sunburst ticket to a
  children's dentist; the concept's own world hints now dominate (x8),
  the wildcard is 5% and never avant-garde for a non-avant-garde concept,
  and the art brief and critic check the audience's mood need
- collisions, clipped text, hidden content, stray overlays, duplicates
  and the headline checks block shipping; fold-check prints BLOCKING:
- at least half the below-fold sections are full-width drawn plates
- 49/49 node tests; benchmarks pass every check

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… the skill

The user asked that the design skills stay general, not tuned to his two
illustrated benchmark sites. An audit walked ten briefs (SaaS, dashboard,
docs, a photo-led minimal brand, a portfolio, a mobile app, 'plain black
and white Swiss', extend mode, a nonprofit with real photos, an event) and
found the skill would force a drawn scene on all of them, filter supplied
photos, redraw real people as silhouettes, and REBUILD an obedient
'no illustrations' page.
- concepts choose a hero treatment: scene, pattern, photography,
  product-ui, typography, data-visual or utility (operate/read default);
  the scene bar, art crew and scene fold gates apply to scene only;
  fold-check takes --treatment with a per-treatment gate table
- precedence: truth > accessibility > user directives (dossier.directives,
  with locks: no illustrations, black and white, Swiss, use our photos,
  minimal, keep our brand) > existing brand > platform conventions > the
  roll > skill defaults; a broken directive is now the REBUILD trigger
- photos and identity assets (headshots, logos, product screens) ship
  unaltered; real people are never redrawn; data sections and code are
  exempt from plates and duplicate checks; operate keeps conventional nav
- bugs fixed: dashboards failed plates/detail gates; canon dealt a layout
  its own gate fails; extend-mode worlds weren't exempt; design forced a
  dossier and roll for a one-component critique
- scene path unchanged: ara-bar and hitataekni still pass every check;
  72/72 node tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…photo-led and honest-data rules

Hard-4 fell to 4.74 (from 6.55) because concepts spread across typography,
pattern and data-visual for clients that needed drawn art. Breadth-1 (6.38,
12/12 obey the brief) flagged phone clipping, designer notes on the page,
framed photos and invented dashboard data.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ints-only, wildcard only for drawn treatments

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… element first; review fixes

Rules from breadth-2 (5.85, 12/12 obey) and hard-5 (5.80): concepts show the
client's signature fact, never its customers or an adjacent trade; a SaaS
landing rebuilds described screens as product-ui; minimal/quiet means
photo-direction only; the element the brief cannot do without is built first;
a mock asked for a view its data lacks gets labelled sample data; the phone
header is one row; page-overflow and meta-copy join the blocking list.

Review fixes: product.screens must all be non-empty strings; a test that
fails when the operate/read wildcard gate is removed; page-overflow skips a
closed drawer off the right edge and pages whose html/body clip x; TODO and
TBD match upper case only.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rose, honest photo slots, headline in the scene's open area

From breadth-3 (5.88, 12/12 obey) and hard-6 (5.65 on 8 builds, every build
passing the blocking fold rows): a non-illustrating genre binds every concept's
treatment; visual weight goes to what the user most needs; body copy uses a
text face; described-but-missing photos are neutral frames captioned with file
name and description; the scene headline defaults to large display type in the
art's open area with a real value range, a sign only at real scale.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… sites and ELI5 published

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd-next-finish

# Conflicts:
#	plugins/flow/bin/flow
#	plugins/flow/skills/next/SKILL.md
@TomasPalsson
TomasPalsson merged commit 95eedb9 into main Oct 3, 2026
TomasPalsson added a commit that referenced this pull request Oct 3, 2026
flow: xhard pipeline evals and case-selfcheck, flow check --since with lint
ratchets, /flow:next Keep going and Finish fixes.
design: hero treatments, directives outrank the skill, signature fact leads,
page-overflow and meta-copy blocking rows, hints-only world roll (#16).

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant