SLOPGUARD

Classification: fix before release
run 002 target hexento.com (rebuild, pre-deploy) 2026-08-09 files 7 candidates 23 → verified 14 4 lenses · adversarial verify
Markdown, with paths and line numbers — paste it into your agent's terminal and say "fix these."
view raw markdown

  

Editor's note

The site ships finished prose: no placeholder text made it through, and the deterministic checks came back empty. The failures concentrate in contradictions between what the site claims and what its own pages and shipped code do; every embarrassing finding is of that kind. Start with SG-001, where the method page offers the rebuild report as checkable against live pages and then states the findings were fixed before ship, cancelling the check it just offered. Take SG-004 second, because the privacy page's pageviews-only claim is contradicted by analytics.js itself, and the fix touches code or policy rather than copy.

0 trust-killers 4 embarrassing 10 nits
SG-001
embarrassing self-contradicting-facts 3/4 lenses

Method page claims the rebuild report is checkable against live pages, then says its findings were fixed before ship.

Line 30 invites the visitor to verify the pre-deploy report's receipts against the current pages, while line 98 on the same page says those findings were fixed before ship. If the defects were fixed, their verbatim receipts no longer exist on the live pages, so the checkability claim fails for exactly the findings that matter.

claim — method/index.html:30
the <a href="/report/hexento-rebuild/">pre-deploy report on this site</a> is checkable against the pages you are reading
ships — method/index.html:98
the report is public</a> and its findings were fixed before ship

A visitor who takes the invitation, opens the rebuild report, and cannot re-find a quoted receipt on the live page concludes the receipts are wrong — on the one page whose entire job is convincing them the receipts are trustworthy.

fix — Rewrite the lede clause so it no longer claims the rebuild report's receipts match the live pages, e.g. change 'is checkable against the pages you are reading' to 'documents this site as it stood before its findings were fixed'.

this line
SG-002
embarrassing self-contradicting-facts 2/4 lenses

The site invites reruns while saying only the first report is free, leaving rerun cost undefined.

The homepage tells you to ask for a rerun after fixing, but the queue promises 'one free report per site', the cost section says 'your first report is free', and scheduled reruns are listed as an unpriced future paid feature. Nowhere does the site say what a manually requested rerun costs today — free, paid, or unavailable.

claim — index.html:82
Ask us for a rerun when the fixes land; diffs become automatic with the watch.
ships — queue/index.html:30
One free report per site

At the exact moment a visitor is deciding whether to commit (fix findings, then verify), the money question goes unanswered; a skeptical buyer reads 'first report free' plus 'ask us for a rerun' as a soft upsell with a hidden price.

fix — Add one sentence to the 'What it costs' section stating what a manually requested rerun of the same site costs today (free, paid, or unavailable until the watch ships).

this line
SG-003
embarrassing unverifiable-accountability 1/4 lenses

The only completed run is a self-review of a retired site no visitor can check.

Run 001 — the sole proof of value, with its 158 findings and 5 trust-killers — was performed by the tool's owner on the owner's own now-retired site. The queue confirms slot 002 is still open, so no external site has ever been through the pipeline.

index.html:45
The first target was the security catalog that used to live on this domain, built at agent speed.

A first-time visitor is asked to trust a review tool whose entire track record is one self-administered review of content that no longer exists. Honest, but the evidence loop is fully closed on itself, and a skeptic notices within a minute.

fix — Label run 001 as a self-run on a retired target at every place its 158 findings are cited (header meta, run-001 section, queue slot 001) and link an archived snapshot of the reviewed catalog so the receipts can be independently checked.

restructure
SG-004
embarrassing claim-code-contradiction 1/4 lenses

Privacy page says pageviews only while the shipped analytics helper advertises interaction events.

The privacy page frames interaction events as a hypothetical future ("If named interaction events ship later"), but analytics.js ships today with a header describing itself as doing "pageviews plus explicitly named interaction events" and exposes a live HexentoAnalytics.track API on every page. No page currently calls it, so behavior matches, but the shipped code contradicts the "right now" framing.

claim — privacy/index.html:35
Right now that means pageviews only.
ships — analytics.js:3
Cookieless pageviews plus explicitly named interaction events.

The homepage's flagship story is a previous site whose trust-killer was a privacy page contradicted by its own analytics code. A visitor who views source and finds an events-capable tracker under a "pageviews only" privacy promise sees the tool's owner flirting with the exact failure the tool exists to catch.

fix — Rewrite privacy line 35 to acknowledge the shipped capability, e.g. 'Right now that means pageviews only; the analytics helper supports named interaction events, but none are sent today, and any that ship follow the same rules.'

this line
SG-005
nit other 2/4 lenses

A not-yet-built paid feature is presented inside the description of what a run does today.

Step four of 'What a run does' mentions the watch as if it were part of the current product, while the cost section two paragraphs later reveals it is still being built with no price. Future capability is mixed into present-tense product description without a marker.

claim — index.html:82
diffs become automatic with the watch
ships — index.html:90
Paid features are being built now: scheduled reruns, diffs between runs, a CI gate.

A buyer skimming the steps mentally credits the product with automatic diffs, then feels a small bait when the cost section walks it back; small, but it is exactly the shipped-vs-promised blur this product claims to police.

fix — Mark the watch as future in step 4, e.g. change 'diffs become automatic with the watch' to 'diffs become automatic once the watch ships'.

this line
SG-006
nit generated-copy-defects 2/4 lenses

The private-report rule is stated twice in adjacent sentences with different metaphors.

"The slot moves on" and "private reports close their slot" say the same thing back to back, and neither phrasing makes the mechanic concrete — a submitter is left inferring what actually happens to their slot.

queue/index.html:37
it stays private and the slot moves on. The queue exists to be public, so private reports close their slot.

Ground rules are where a potential submitter decides whether to trust the process; doubled, slightly foggy phrasing here makes the terms feel less carefully drafted than the rest of the page.

fix — Merge the two sentences into a single concrete statement of what happens to a private report's slot, removing the duplicate 'the slot moves on' / 'private reports close their slot' phrasing.

this line
SG-007
nit self-contradicting-facts 2/4 lenses

The queue meta description promises unconditional publication, dropping the consent step the page itself insists on.

The search-snippet copy says a submitted report 'publishes here' as a flat consequence, while the page lede and ground rules make publication conditional on the owner's OK and allow a private report. The one sentence a stranger sees before clicking overstates what happens to their report.

claim — queue/index.html:7
You submit, we run, you read it first, it publishes here.
ships — queue/index.html:30
it publishes here with your OK.

A founder deciding whether to submit reads the Google snippet first; 'it publishes here' with no consent clause makes the roast queue sound compulsory-public and could scare off exactly the cautious submitter the consent rule exists for.

fix — Change the queue meta description's final clause to 'you read it first, and it publishes here with your OK.'

this line
SG-008
nit other 1/4 lenses

Header meta reads as the current site having 158 findings before any explanation appears.

The very first data a visitor sees is "run 001 · target hexento.com · findings 158" — on hexento.com. That the target was a retired previous site on this domain is only explained further down (line 44-45), so the top-of-page read is "this site failed its own review 158 times."

index.html:35
<span>run <b>001</b> · target <b>hexento.com</b></span>

In the first five seconds a stranger either thinks the site they are on is riddled with 158 defects, or thinks the numbers are decorative theater. Both readings damage trust before the pitch has even started.

fix — Add the retired-site qualifier to the header badge, e.g. change 'target <b>hexento.com</b>' to 'target <b>hexento.com</b> (previous site)'.

this line
SG-009
nit missing-meta 1/4 lenses

The heavily promoted rebuild report is missing from the sitemap.

The pre-deploy rebuild report is linked four times across index and method as public proof, but sitemap.xml lists only /report/hexento/ among report URLs, and no navigation item points to the rebuild report either.

claim — index.html:46
<a href="/report/hexento-rebuild/">that report is public too</a>
ships — sitemap.xml:7
<url><loc>https://hexento.com/report/hexento/</loc></url>

A minor discoverability gap on its own, but on a site selling deterministic pre-deploy checks ("head-metadata gaps" are literally in the pitch), an incomplete sitemap invites the question of whether the tool was actually run on this deploy.

fix — Add <url><loc>https://hexento.com/report/hexento-rebuild/</loc></url> to sitemap.xml.

this line
SG-010
nit internal-vocabulary-leak 1/4 lenses

"The watch" is used in step 4 before it is defined two sections later.

The reading-order first mention of "the watch" appears inside the pipeline steps with no gloss; its definition ("scheduled reruns, diffs between runs, a CI gate. We call that the watch") only arrives in the pricing section at line 90.

index.html:82
diffs become automatic with the watch.

A first-time reader hits an unexplained product name mid-pitch and momentarily wonders if they missed something — a small but avoidable "huh?" on the most important page.

fix — Gloss the term at first use, e.g. change 'diffs become automatic with the watch.' to 'diffs become automatic with the watch, the scheduled-rerun service described under costs.'

this line
SG-011
nit other 1/4 lenses

The header SVG calls itself decorative in an aria-label that forces screen readers to announce it as content.

An image described as 'Decorative' should be aria-hidden; instead it gets role="img" plus a label, so assistive tech reads the word 'Decorative' aloud as page content. The label also asserts the traces are 'scaled to run 001's severity tally' (5/51/102), but the three path endpoints (x=253, 429, 618; rises of 3, 17, 32) match no evident proportional mapping of those counts.

index.html:28
role="img" aria-label="Decorative traces scaled to run 001's severity tally"

A screen-reader user hears an admission of decoration announced as meaningful content, and a nitpicky visitor who checks the numbers finds the 'scaled to' claim does not obviously hold — small cracks on a site that stakes everything on verifiable claims.

fix — Make the header SVG genuinely decorative: replace role="img" and the aria-label with aria-hidden="true" focusable="false".

this line
SG-012
nit missing-meta 1/4 lenses

Method, privacy, and queue pages ship og:title without og:description while the homepage sets both.

index.html carries a full og:title/og:description pair, but the three inner pages stop at og:title, and no page sets og:image. The method page's own copy lists 'head-metadata gaps' among the deterministic checks the product runs, making the half-finished OG set an on-the-nose self-check miss.

claim — method/index.html:9
<meta property="og:title" content="Method — SlopGuard">
ships — index.html:10
<meta property="og:description" content="Receipt-verified review of AI-built sites, delivered as a report your coding agent can fix from.">

When someone shares the method page in Slack or on social, the preview card renders thinner than the homepage's, and a visitor who read 'head-metadata gaps' two scrolls earlier can catch the tool's own site failing its cheapest check.

fix — Search every page head for 'og:title' lacking a paired 'og:description' and add matching og:description tags to method/index.html, privacy/index.html, and queue/index.html.

sweep all instances
SG-013
nit generated-copy-defects 1/4 lenses

The queue-submissions sentence yokes email and URL to both verbs, implying the email address helps run the report.

As written, both 'your email address and URL' are 'used to run the report and reply to you'; in fact the URL runs the report and the email receives the reply. A privacy page is the one place where data-use sentences should map each datum to its exact use.

privacy/index.html:40
your email address and URL are used to run the report and reply to you

A careful reader of a privacy policy — the reader this page is for — momentarily wonders why an email address is needed to run a crawl, a wobble a one-clause rewrite would remove.

fix — Rewrite as 'your URL is used to run the report and your email address to reply to you'.

this line
SG-014
nit claim-code-contradiction 1/4 lenses

The copy-address fallback shows 'Copied' even when the copy fails, since execCommand returns false, not a throw.

document.execCommand('copy') signals failure by returning false, not by throwing, so ok() runs and the button reads 'Copied' even when nothing reached the clipboard. The fallback is also invoked from the writeText rejection callback, where transient user activation may have expired, making that silent-failure path more likely.

queue/index.html:95
try { document.execCommand('copy'); ok(); } catch (e) { btn.textContent = addr; }

A visitor who clicks, sees 'Copied', pastes nothing, and has to retype the address gets a small but pointed demonstration that the site's UI states can lie — on a product whose pitch is catching UI states that lie.

fix — Use execCommand's boolean return instead of try/catch success: 'var copied = false; try { copied = document.execCommand("copy"); } catch (e) {} if (copied) ok(); else btn.textContent = addr;'.

this line

Rollup — 7 failure classes

other3
self-contradicting-facts3
claim-code-contradiction2
generated-copy-defects2
missing-meta2
internal-vocabulary-leak1
unverifiable-accountability1