Commit Graph
1008 Commits
Author SHA1 Message Date
Paul Bakaus bbed6eef08 Refresh the Impeccable product experience
Rework the landing page proof, steering demo, feature grid, slop catalog, detector coverage, theming, Live workflow, and responsive behavior.\n\nAI-assisted implementation by OpenAI Codex.
2026-07-15 23:29:47 -07:00
Paul Bakaus 8682c85c57 Fix Live side-tab validation gaps
Scan Astro style blocks for inset-shadow stripes, recognize semantically chromatic external tokens without flagging neutral unknowns, and make the polling generator run advisory detector checks before publication. Sync the affected detector bundles and add a paired regression fixture.\n\nAI-assisted: Codex analyzed the failed Live task, implemented the detector and generator changes, and ran the validation suites under maintainer direction.
2026-07-15 16:23:49 -07:00
Paul Bakaus 0ac1ca6867 Restore polling as the primary Live architecture
Default Codex back to one-shot foreground polling, delegate generation to the existing low-effort agent, and keep the app-server worker available only through an explicit experimental opt-in. Preserve progressive publication and the shared safety and framework optimizations.

Prepared with Codex assistance under maintainer direction.
2026-07-15 16:16:08 -07:00
Paul Bakaus ead6ddabe5 Preserve experimental Live app-server workstream
Snapshot the current app-server implementation, shared Live optimizations, generated harness output, and in-progress site work before restoring polling as the primary runtime path.

Prepared with Codex assistance under maintainer direction.
2026-07-15 16:07:34 -07:00
Paul BakausandClaude Fable 5 ed7a6fbe4e detector: text-occlusion + first-viewport-column-overflow (57 -> 59)
Two browser-engine quality rules, both warning severity.

text-occlusion / element-overlap fires on three shapes: an opaque
decorated box painted over a text element (elementFromPoint confirms
real coverage, box >= 30%), one text run buried under another when at
least one side is a positioned layer (text >= 45%, so line-box leading
bleed between stacked flow blocks does not count), and an inline element
whose opaque fill leaks past its line onto a neighbour (the class-name
collision bug). A large headline whose edge overhangs a bounded content
card is caught as an element collision even when the text stays on top.
Gradient scrims, decorative SVG emblems, fixed/sticky overlays, floats,
and raw image backdrops (contrast territory, deduped against the pixel
low-contrast rule) are exempt.

first-viewport-column-overflow fires when a multi-column opening section
runs one column past 140% of the viewport while a sibling fits inside
one screen, the stretched-hero signature. Single-column pages and
full-page heroes with no fitting sibling are exempt.

Validated: fires on the diagnosed repros, clean across a 60-sample
sweep. Fixtures + browser tests added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 14:53:03 -07:00
Paul BakausandClaude Fable 5 d8eb4d73c7 bolder.md: prose-lint fix (banned tell)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 13:56:17 -07:00
Paul BakausandClaude Fable 5 16feeb4c17 bolder.md: refinement procedure from campaign learnings
Rewrite the routed bolder reference around what wins scoped
"make this section bolder" asks vs the frontend-design competitor.
Old prose was all visual levers and treated copy as secondary, so
the model kept flat placeholder copy verbatim and reached for a
decorative import for heft. New prose: scope stays sovereign;
diagnose flatness as opting out of the system's own moves; amplify
the system's own vocabulary; let content carry the weight; commit
then clarify; give the section its own scroll rhythm; a skeleton
test scoped to the section; a placeholder is a job, not a photo cue.
Drops the opening named-slop enumeration (self-priming) and the
120-line checklist (ceremony tax); now 31 lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 13:53:29 -07:00
Paul BakausandClaude Fable 5 dc0b25d393 detector: hero pulsing-dot promotion, nav-CTA contrast gap closure, shape-assembled-illustration (56 -> 57)
Item 1 (hero liveness theater):
- pulsing-dot now merges declarations per selector across rule blocks
  (cascade-approximate), descends into media queries, and strips
  prefers-reduced-motion: reduce overrides before the predicate runs.
  Catches the shipped split-block constructions (size in the base rule,
  animation added later or inside a no-preference media block).
- Dots whose element sits inside a header/nav landmark are promoted to
  error severity (string-level landmark ranges in both engines); the
  browser engine additionally promotes dots resting in the first ~900px.
- blinking-cursor findings in the first ~900px or inside header/nav are
  promoted from advisory to warning.
- Per-finding severity overrides now flow through static-html,
  browser-injected serialization, and detect-url.

Item 2 (nav-CTA contrast constructions):
- The a24-opus 01/002 header CTA already fires (specificity cascade +
  oklch + var() all resolved); systematic sweep found two remaining
  escapes and closes both:
  - own gradient background on a SAFE_TAGS element (checkColors styled-
    control exception now treats an own gradient as an own surface,
    contrast measured against the worst stop)
  - ::before/::after full-cover surface (static cascade marks pseudo
    surfaces; browser adapter reads the pseudo computed style) so text is
    measured against the surface the browser actually paints
- nav-cta-constructions fixture locks all eight computable construction
  families; background-image: url() remains unflaggable by design.

Item 3 (shape-assembled-illustration, slop/advisory):
- New rule for large inline SVGs composing a pictorial scene from >= 8
  primitive shapes at >= 200x200 intrinsic size with >= 3 distinct fills.
  Charts (axis labels), stroke-only technical drawings, icons/logos
  (small explicit size), and pattern-tiled backgrounds are exempt.
  1.8 percent fire rate over the 3069-sample eval corpus, all verified
  pictorial scenes; zero fires across val-a22/val-a24.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 19:29:29 -07:00
Paul BakausandClaude Fable 5 1734f13a2e a26: finishing review runs in a separate agent when the harness supports it (fresh reader, builder thread stays building)
Paul's goal 7: post-checks in a separate agent thread; subagent
spawn-at-end now, pro-tier remote endpoint later.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 19:18:29 -07:00
Paul BakausandClaude Fable 5 5e13b4bfe1 a25: written wireframe test removed from build context; keep only the generative line (borrow the form's skeleton)
Skeleton checking moves outside the builder (wireframe-judge, separate
context). In-context written checks taxed execution: a24 regression.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 18:41:19 -07:00
Paul BakausandClaude Fable 5 036dded377 SKILL.md polish pass (Paul's seven notes)
- Setup 1 collapsed to run-and-follow; NO_PRODUCT_MD divert logic incl.
  unattended exception moved into context.mjs directive (no circular ref)
- Modes moved before Craft floor; Registers heading renamed Modes
- frontend-design near-verbatims removed (structural-devices rule,
  CSS-specificity example); copy rule rewritten in own voice
- Craft floor: dropped prefers-reduced-motion (a11y lives in polish/
  harden/audit) and edit-source clause; heading space-above folded
  into spacing rhythm
- Mode descriptions de-biased: surface-role definitions, no niche
  lists; Read rewritten (comprehension earned twice), density claims
  removed from Read and Operate
- craft/teach deprecation reduced to routing facts; codex illustration
  line reworded; codex tells flagged for gpt-5.6 revalidation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:46:51 -07:00
Paul Bakaus f46830fe42 Improve Codex CLI fallback in Live
Detect a missing CLI before worker startup, keep Live usable through the foreground poller, and surface actionable status in Live and Live Lab.\n\nAI-assisted implementation.
2026-07-14 17:40:16 -07:00
Paul BakausandClaude Fable 5 c98f5d42ed detector: script-error, content-hidden-at-rest, edge-flush-cards + chip contrast and inline-overflow widenings (53 -> 56)
Three new rules and three widenings, all from confirmed eval-corpus
escapes found by eye:

script-error (quality, error severity, URL engine): pageerror listener
attached before goto catches uncaught exceptions AND parse errors (a
syntax error fires during the initial parse, long before load). Deduped
by message, capped at 3. A JS typo was silently deleting whole pages.

content-hidden-at-rest (quality, error, URL engine): after the main
at-rest scan, an instant-scroll reveal sweep (bypasses scroll-behavior:
smooth, which silently defeated the first sweep design) gives every
IntersectionObserver reveal its chance to fire, returns to top, then
measures the share of text characters still at opacity 0 / visibility
hidden. display:none / [hidden] / aria-hidden subtrees stay out of the
denominator. Fires above 30% with a 200/150-char floor. Calibration on
30 corpus samples: broken repro holds 83% after the sweep, all clean
samples (including 0.75-0.93 at-rest reveal pages) drop to <= 7%.

edge-flush-cards (quality, warning, browser): cards with their own
opaque background or 2+ borders inside a horizontal scroller, flush
against one edge of the clip box at rest (< 8px, > -24px so deliberate
mid-card peeks stay exempt) while keeping a gutter on the other side.
Grouped per scroller. Repro: transit-mobile pager whose first snap
panel is 407px wide inside a 390px clip. New --viewport WxH CLI flag
makes mobile-width URL scans reachable (--viewport 390x844).

Chip/badge contrast widening: the SAFE_TAGS styled-button exception in
checkColors now covers any text-bearing element painting its own opaque
background at >= 9px font, not just a/button. The shipped miss: a span
SEV-2 chip whose white text lost a specificity fight and rendered
muted-on-red at 1.2:1. Static adapter also resolves var() own-bg via
the custom-property map so the gate engages on token backgrounds.

background:none cascade fix: the background shorthand now resets
background-color/-image when it names neither (and no var()). Exposed
by the chip widening: pre code { background: none } left an earlier
surface color standing and manufactured 1.1:1 phantom findings.

text-overflow inline-owner widening: inline elements have no client
geometry (clientWidth 0) so the scrollWidth path never saw them, and
their block parent owns no direct text. New branch measures the inline
rect against the nearest block container's padding box (16px floor,
transform-path exempt). Repro: nowrap span.v spilling 45px past its
grid cell.

The round-3 nav-CTA contrast escape (val-a22-opus obs 003 header CTA)
was verified already covered at HEAD by the earlier parseAnyColor
oklch fallback; both engines fire 3.6:1 on the repro, no change needed.

FP sweep across 36 val-a21/a22/a23 samples: new rules fire only on
their repros (script-error also catches a second genuinely broken
sample); static-engine delta is limited to the chip repro plus two
borderline-but-real chip findings on one sample.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:10:44 -07:00
Paul BakausandClaude Fable 5 d3599d7895 concept-seed: pinned direction (user / PRODUCT.md / DESIGN.md) beats the roll, always
Regular-use guard ahead of the realistic-lane validation: forced
creativity must never supersede user input or product context.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:01:52 -07:00
Paul BakausandClaude Fable 5 1e58072257 a24: wireframe test is written, not silent — forensics showed zero verdicts ever produced by the in-your-head version
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:45:26 -07:00
Paul BakausandClaude Fable 5 bcfaa31186 a23: wireframe test — skeleton survives with skin stripped; borrow the form's skeleton, not its clothes
Opus probe (r10-opus-wireframe): control articulates loose skeletons,
wireframe arm names them (dubbing script sheet, timecode gutter spine)
and diffs against the standard stack every time. Targets Paul's
layout-diversity question: concept-atom commitment with template
skeletons underneath.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:59:09 -07:00
Paul BakausandClaude Fable 5 ac90c37df0 a22: costume check DELETED; commit every atom; land fully committed, later passes clarify without diluting
Paul: 'way better to have the first iteration land fully committed to
the concept, because that's the genuinely hard part. the next pass can
make sure it is clear and effective.' The check selected against the
original lektor site itself, the campaign's 10/10 reference.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:31:56 -07:00
Paul BakausandClaude Fable 5 cc8906ecaa detector: add heading-rhythm and blinking-cursor rules (51 -> 53)
heading-rhythm (quality): a heading binds to the content it introduces,
so its rendered space above must exceed its space below. Browser-only:
measures real getBoundingClientRect gaps (margin collapsing, flex rows,
and section padding make authored margins untrustworthy), merges eyebrow
labels into the heading cluster, requires same-column edges, and exempts
first-in-container headings, bounded bands, and small cards. Fires only
when 2+ headings on a page invert the rhythm.

blinking-cursor (slop, advisory): a decorative blinking caret (solid
block, underscore bar, or block glyph) bound to an infinite blink
animation in the landing region of a page. Real editable surfaces
(contenteditable, role=textbox, inputs) are exempt; round pulsing dots
stay with the pulsing-dot rule.

Verified against eval corpus repros: heading-rhythm fires on the
val-a18 observability sample Paul flagged (6 headings, 0px above vs
40px below) and blinking-cursor on the val-a19 hero terminal cursor;
10 other samples across both runs stay clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 09:35:03 -07:00
Paul BakausandClaude Fable 5 1866afe789 a21: pace the scroll like a studio (banded rhythm, treatment variety, heading spacing, quiet section, anchored close)
The inverse-probe extracted this from Paul's NewRelic review and it won
in the batch4 forward test; it was never ported. Craft diagnosis: pages
lose on rhythm monotony (one treatment uniformly applied), not defects.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 09:04:29 -07:00
Paul BakausandClaude Fable 5 313b641361 hooks: direction-contract audit in the Stop deep pass
The skill's decide-then-build step opens the built HTML artifact with a
DIRECTION CONTRACT comment (UNIQUE / NOT-TEMPLATE / OWN-WORLD / STORY /
FIRST VIEWPORT / FORM). Until now nothing ever judged the finished build
against that contract; the eval harness proved sample contracts promised
radical compositions while the build shipped the standard template anyway.

The Stop deep pass now extracts the leading contract comment from each
session-touched HTML file (marker match in the first 200 chars, body
capped at 1800 chars) and appends a contract-audit section after the
detector findings: audit the render promise by promise, naming the two
observed failure shapes (a promise not in the pixels; a contract whose
own plan is the standard template wearing the concept's nouns). Zero
extra API calls; the audit rides the existing single Stop emission and
fires at most once per file per session via a contractAudited flag on
the same session cache entry the finding dedupe uses.

Ported from the eval harness reference implementation
(extractDirectionContract / composeContractAuditMessage in
impeccable-evals runner/workers/anthropic-native.ts). No hooks.json
changes needed: Claude Code and Codex both already dispatch Stop to
hook.mjs.

Tests: 163 -> 179 in tests/hook.test.mjs (extraction unit coverage plus
Stop-pass integration: present/absent/once-per-session/non-HTML/
malformed/oversized). hook-build 18/18, build:skills prose gate clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 08:58:19 -07:00
Paul BakausandClaude Fable 5 4c7a3651d5 a20: 7-deep candidate list, roll 3-7, reproduction key printed + FORM/key telemetry in contract
Paul: no stochastic challenger-assignment mode (unreproducible bad draws
= undebuggable bug reports); keep the weigh-off. Every roll now prints
its key so any field report can be replayed with --from.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 08:50:22 -07:00
Paul BakausandClaude Fable 5 513c8768b3 a19: form dictates viewport geometry at life scale; cinematic/divergent/drenched in bounds; native motion once — probe-validated (batch7); delete seed-094 (Paul)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 07:57:58 -07:00
Paul BakausandClaude Fable 5 8fe2737950 concept-ingredients: 103-entry pool, merged from gpt-5.6-sol + gemini-3.5-pro expansion (global forms, product-design metaphors) — for Paul's curation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 18:25:33 -07:00
Paul BakausandClaude Fable 5 c1953a379d a18: concept-seed mechanism — derive grounded shortlist, script assigns build index + challengers; contract adopts UNIQUE/NOT-TEMPLATE/OWN-WORLD/STORY/FIRST-VIEWPORT
Contract-probe campaign findings (evals repo, notes/fable-oneshot-craft-plan.md):
a single model's resonance ranking is deterministic (30/35 identical
concepts across 16 framings); dice must come from the script, mirroring
the palette-seed result. Derived candidates stay grounded in the
audience's world + subject's cultural home; challengers win only on
identification x clarity; incumbent-with-deliberate-idea overrides the
roll. Validated at contract level on 01-observability + r10-lektor
(teletext ranks #3 for lektor; assigned index 3 produced it).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 18:18:22 -07:00
Paul Bakaus e7ed663ecd Fix target-mode Live evidence capture
Capture below-fold selected targets and each progressive variant reliably for portable evidence bundles. AI-assisted implementation under maintainer direction.
2026-07-13 14:13:40 -07:00
Paul Bakaus e0c19eff28 Export portable Live evidence bundles
AI-assisted implementation under maintainer direction.
2026-07-13 13:56:25 -07:00
Paul BakausandClaude Fable 5 7a99e1725d detector: four human-review rules — nav-CTA oklch contrast, numbered section labels, floating side-tab stripes, repeated card text
Four gaps found shipping in Opus 4.8 eval samples during human review:

1. low-contrast (extended): the browser adapters parsed text/own-bg
   colors with parseRgb only, so Chrome's oklch()-serialized computed
   colors silently skipped every contrast check — a flat dark-on-dark
   nav CTA (broader nav selector beating the button class) shipped at
   1.5:1 undetected. checkElementColorsDOM and readOwnBackgroundColor
   now fall back to parseAnyColor. Near-threshold ratios print two
   decimals so a 4.497 finding no longer reads "4.5 needs 4.5".

2. NEW numbered-section-labels (slop, advisory): tiny (<=13px) styled
   numeric index labels riding beside section headings, repeated across
   2+ sections with distinct indices. Sibling of repeated-section-kickers
   (which deliberately excludes bare numeric labels); handles both the
   direct prev-sibling shape and label-before-heading-wrapper shape.
   List/nav/table/card-item numbering is exempt.

3. side-tab (extended): the vertical pseudo-element stripe scan required
   the stripe to touch both corners (top/bottom 0 or height 100%), so a
   left accent bar inset a few px from each end evaded it; small end
   insets (<=20px each) now count. Added a browser-side pseudo-element
   check (getComputedStyle(el, '::before'/'::after')) since runtime-
   assigned custom-property colors are invisible to the text scanner.
   Selection-state exemptions stay as narrowed: only aria-selected=true /
   aria-current / active-class markers exempt, plus button/link
   affordances on the horizontal variant.

4. NEW repeated-container-text (quality): the same literal string (>=4
   chars, contains letters) rendered 3+ times at 3+ structurally distinct
   positions inside one bordered/elevated container. Parallel/templated
   repetition (table cells, calendar grids, nav lists, identical sibling
   rows) never counts — structural signatures, not word lists.

Verified: each rule fires on its repro sample via the file:// browser
scan; clean eval samples add no new findings (the new low-contrast hits
on other samples are genuine sub-AA oklch button pairs). Full test
suite green; browser bundle regenerated; README/homepage rule counts
bumped 49 -> 51 (docs-integrity test enforces them).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 13:09:54 -07:00
Paul Bakaus 50fc88ec85 Update Live Lab performance evidence
AI-assisted implementation under maintainer direction.
2026-07-13 13:09:29 -07:00
Paul Bakaus 0ae45b9f62 Fence the final Live source delivery
AI-assisted implementation under maintainer direction.
2026-07-13 13:03:00 -07:00
Paul Bakaus efa2ce9ed2 Preserve failed Live benchmark evidence
AI-assisted implementation under maintainer direction.
2026-07-13 12:43:45 -07:00
Paul Bakaus 6e92da3ba5 Cut Live first review latency
AI-assisted implementation under maintainer direction.
2026-07-13 12:43:36 -07:00
Paul BakausandClaude Fable 5 62ee3a9b00 a17: colored space, derived composition, subtraction, incumbent-as-evidence
Four lines from the r10 dual consultation (codex gpt-5.6-sol + gemini
3.5-pro on the actual HTMLs) and the hero-probe micro-eval: the probe
isolated a first-viewport monoculture (same split template in every
sample, control and skill alike) and showed these lines break it while
codex's raw 15-liner alone does not. The incumbent sentence swap fixes
the r10 root cause both consultants independently identified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:41:34 -07:00
Paul Bakaus dd928f81d4 Fix Live Lab prose validation 2026-07-13 12:17:36 -07:00
Paul Bakaus 0c255e6c2a Record Live delta and standby evidence 2026-07-13 12:11:44 -07:00
Paul Bakaus 7a3ef022d9 Cut Live variant two output latency 2026-07-13 12:09:39 -07:00
Paul Bakaus 265502a125 Update Live Lab checkpoint evidence 2026-07-13 11:48:05 -07:00
Paul Bakaus 4c07124198 Deliver Live variant two independently 2026-07-13 11:42:25 -07:00
Paul Bakaus 2f619f9bdb Prove Live benchmark target selection 2026-07-13 11:22:43 -07:00
Paul Bakaus eedccaedb0 Add durable Live variant planning 2026-07-13 11:22:26 -07:00
Paul Bakaus 49bff8da75 Improve Live variant quality guardrails 2026-07-13 11:05:30 -07:00
Paul Bakaus d293b803d0 Calibrate Live rendered quality review 2026-07-13 11:05:13 -07:00
Paul Bakaus 0ee3e80aec Register Live Codex test coverage
AI-assisted: Codex
2026-07-13 10:52:55 -07:00
Paul Bakaus e6d1206c45 Update Live Lab production evidence
AI-assisted: Codex
2026-07-13 10:47:44 -07:00
Paul Bakaus c6dfd22329 Harden Live worker recovery
AI-assisted: Codex
2026-07-13 10:44:37 -07:00
Paul Bakaus a274f93c4e Add atomic Live benchmark controls
AI-assisted: Codex
2026-07-13 10:43:21 -07:00
Paul Bakaus e9121b26fe Harden Live production benchmarks and turn failures
AI-assisted: Codex
2026-07-13 10:19:42 -07:00
Paul Bakaus db63d08168 Detach canceled Live generation tails
AI-assisted: Codex
2026-07-13 10:08:27 -07:00
Paul Bakaus 2008381e91 Improve Live worker recovery and Accept latency
AI-assisted: Codex
2026-07-13 09:56:48 -07:00
Paul Bakaus 8a6c4ab486 Fix early Live choice queue ownership
AI-assisted: Codex
2026-07-13 09:54:23 -07:00
Paul Bakaus 78b1b5878d Add rendered Live quality evidence
AI-assisted: Codex
2026-07-13 09:51:21 -07:00