KDG Lab · specimen №001 · run 2026-07-14

The has-website quality gate

Can a deterministic checker reproduce a four-second human judgment — this local service business website is weak enough that a demo embarrasses it — with near-zero false GREENs? Finding: the objective floor of that judgment, yes; the aesthetic middle, no — and conceding the middle is precisely how the precision is bought. One page load, no LLM calls, $0 per site.

The asymmetry is the spec

A false RED skips one weak site out of hundreds. A false GREEN mails "I built you a better website" to someone whose site is fine — a credibility hit in a market where owners talk to each other. Every weight below leans one way: when uncertain, protect the prospect from the pitch. The machine judges neglect and era, which are objective; it deliberately refuses to judge beauty. A dated-but-working site walks free, and that is correct.

The failure classes

Verdict is mechanical: findings carry weights, WEAK at score ≥ 10. Forcing classes end the argument on their own; damning classes nearly so; corroborators must gang up. The one deliberate exception on absence signals: a local service site with no phone at all may cross on absences alone — a business that cannot be called is weak by definition.

classsignalweight
forcing — there is no site here
parkedregistrar lander, "this domain may be for sale"forces WEAK
server-default"Welcome to nginx!" — never builtforces WEAK
no-real-siteredirects to Facebook/Instagram/Linktreeforces WEAK
damning — one alone is enough, or nearly
placeholderlorem ipsum, "Your Text Here", live10
pre-mobileno viewport; a shrunken desktop on a phone10
archaicframeset/Flash · font-tags & layout tables · dated generator10 · 8 · 5
under-construction"coming soon" as the whole site8
no-sslno working https in 20268
bad-certhttps present, certificate rotten7
mobile-brokenviewport declared, layout overflows anyway6
corroborating — must gang up
free-subdomainmikesplumbing.wixsite.com — never bought a domain7
stale-dates© five, three, two years old5 · 3 · 1
broken-imagesdead image boxes on the page4 · 2
no-phoneno phone anywhere, on a call-driven trade4
builder-defaultunmodified default template3
thin-contentunder ~60 words3
no-cta-above-foldfirst screen offers no way to act2
no-trustno reviews, licensed, insured, years — anywhere2
default-title"Home" · "New Page 1" · "Untitled"2
mixed-contenthttps page pulling http assets2
platformWix/Squarespace named, never punished1

The matrix, honestly

Nineteen synthetic fixtures, ground truth fixed before the first run. Three calibration iterations — every one a mechanism bug, not a weight change; the weights survived their corpus untouched (a corpus that shares authorship with the detectors, which is why five public pages were also run — see the wall notes).

truth \ verdictWEAKDECENTUNREACHABLE
WEAK1210
DECENT040
UNREACHABLE002

Precision on WEAK 1.000 (12/12) · recall 0.923 (12/13) · false GREENs: zero — the cell that matters is the DECENT-row zero. The one miss is weak-borderline, a fixture designed to hover at the threshold (score 8 of 10): the accepted false RED, one prospect traded for no credibility risk. It is in the gallery below wearing its miss.

The gallery — every fixture, its verdict, no retouching

All businesses invented, all pages synthetic, photographed at 390 × 844 — the four-second view. Scores out of a threshold of 10.

Provably weak — the pitch goes out

Parked domain lander
WEAK parked-domain · forced
Stock nginx welcome page
WEAK server-default · forced
Live site full of lorem ipsum
WEAK lorem-placeholder · 13
Under construction page
WEAK under-construction · 19
2014 builder site rendering as a shrunken desktop
WEAK builder-2014 · 18
Frameset-era relic
WEAK frameset-relic · 35
Flash splash page
WEAK flash-splash · 30
Aging site with no https
WEAK no-ssl-neglect · 17
Small business site frozen in 2013
WEAK stale-2013-smallbiz · 23
Builder site on a free subdomain
WEAK godaddy-free-sub · 19
Gallery with dead images
WEAK broken-images · 14

Twelfth of the twelve: redirect-social — the domain 302s to a Facebook page. No screenshot exists because none was taken: the gate classified it from the redirect header alone and fetched nothing. WEAK · forced.

The hard middle — designed to test the seam

Deliberately minimal but clean one-pager
DECENT minimal-fine · 5 — minimal is not abandoned
Dated-looking but functioning site
DECENT decent-but-dated · 1 — the aesthetic concession, illustrated
Borderline weak site the gate let pass
DECENT weak-borderline · 8 — truth: WEAK. The accepted miss, hung without retouching

Fine — the people the gate protects

Clean modern custom one-pager
DECENT clean-modern-custom · 0
Fine Squarespace site on a custom domain
DECENT fine-squarespace · 1 — a platform is not a failure

And the two nobody could render: unreachable-refused (dead server) and unreachable-hang (answered in 28s of silence — verdict inside the 30s budget). UNREACHABLE is a verdict, not a crash, and it is never judged weak.

Wall notes — what the honest record holds

  • The wall had to be made mechanical. In iteration 1 a fixture's 302 sailed through the route guard to m.facebook.com — Playwright does not re-intercept server redirect hops — and the matrix still read green, because the stripped page scored WEAK by junk findings. One off-origin document was fetched, in-Lab, to a fictional URL. The fix classifies redirects from the Location header with zero bytes fetched. A green matrix must be read row by row.
  • Transport states are simulated on localhost (marked "(simulated)" in evidence), so the live paths were proven against public test endpoints: expired.badssl.com (cert rejected → http fallback attempted → UNREACHABLE, correct) and http.badssl.com (upgrade probe found working https, so no flag — precision first).
  • Fingerprints were validated on real markup, not just self-authored fixtures: a public Squarespace template demo (free-subdomain + platform both fired) and a public Wix template preview (platform fired). A wordpress.com theme demo answered 403 to headless Chrome — and the gate refused to judge it, which is the design working.
  • Determinism: same input → byte-identical JSON across runs; staleness anchors to an explicit --today. No LLM calls anywhere; the run cost $0.

Graduation

Proven here ≠ wired there. The production memo (GRADUATION.md, in the Lab repo) specifies the input contract, the runtime, the human-review slice — every GREEN still gets the real four seconds before any pitch — and the one decision that belongs to the CEO, not the checker: what "batch-able" means for the bad-website segment. Lab code never copy-pastes into prod; the front door is the only door.