Skip to content

CLAUDE.md: agent 4-eyes before every commit - #482

Merged
pftg merged 1 commit into
masterfrom
claude-md-4eyes
Aug 20, 2026
Merged

pftg merged 1 commit into
masterfrom
claude-md-4eyes

Conversation

@pftg

@pftg pftg commented Aug 20, 2026

Copy link
Copy Markdown
Member

Codifies Paul's 2026-08-20 directive ("spawn appropriate agents… and re-review each changes before commit") as a standing behavioral constraint: at least one reviewer agent on the actual diff before any non-trivial commit — correctness reviewer for code/templates, cold-eyes ICP reader for customer-facing copy; verdict quoted in the commit/PR.

Same-day evidence it pays: pre-commit reviewers caught a markdownify <p>-stripping defect (would have broken CSS on every service page), a fabricated founder quote on the live rescue page, and 3 orphaned references in the ops migration — all after hugo-build/qtest were green.

Proposed via /reflection, approved by Paul. Docs-only.

🤖 Generated with Claude Code

Codifies the session directive that caught a CSS-breaking template defect,
a fabricated quote on a live page, and 3 orphaned migration references -
all after automated gates were already green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 70dc1912-ec67-4049-8aa6-28ff3e041038


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pftg
pftg merged commit 98cc1f7 into master Aug 20, 2026
4 checks passed
@pftg
pftg deleted the claude-md-4eyes branch August 20, 2026 12:53
pftg added a commit that referenced this pull request Aug 20, 2026
#483)

* Course/blog: dense tables scroll inside themselves on phones (C3.1)

W2's scroll gate flagged this in August and the fix was frozen 'until this
wave'. Reproduced before fixing, and it was worse than recorded: on
fractional-cto-sow-reference a table rendered 507px wide inside a 354px
column (recorded as 25px), with overflow-x visible on the parent - no
scroll container anywhere. first-paying-customer-operating-kit overflowed
51px, pre-existing since W1 #428.

Mobile-only media query in single-post.css, which both single.html and
course/single.html already load, so one rule covers blog and course and
every sibling reference table at once. display:block is what makes a
table scrollable; scoping it under 767px keeps the desktop auto-layout
the wide reference tables depend on.

Verified at a true 390x844 device render: all four tables now cap at the
354px column and scroll internally, document scrollWidth == viewport on
both named pages (was overflowing). Desktop re-checked at 1280:
display:table, overflow-x:visible, full 684px column - untouched.
bin/qtest --changed green (34 runs, 53 screenshots, 0 failures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Purge fabricated testimonials from four live pages; label invented case studies

Found by following C0.1's ratchet output: 25 of its 40 violations traced to
client copy syndicated across every services page. Pulling that thread
surfaced something much worse than a banned adjective.

**data/testimonials.yaml carried four synthetic testimonials** - Sarah Chen
/ TechStart Solutions, David Rodriguez / EcomMega, Maria Gonzalez /
HealthTech Innovations, Alex Thompson / EduPlatform - with
placeholder-shaped company names and unsourced round metrics ('Secured $2M
Series A', '300% improvement in page load speeds', '99.8% uptime'). They
rendered on the LIVE homepage, /clients, /about-us and /use-cases, because
this data file overrides the curated single testimonial in hugo.toml.

Someone had already curated hugo.toml down to the one real testimonial
(Bruno Wozniak / PubNative, corroborated by a live LinkedIn profile and the
Review schema). The data file quietly overrode that curation in the visible
render. Same defect class the schema purges of 2026-08-14 and #475 removed
from structured data - this was the visible-copy half nobody had swept.

Removed all four. Kept Bruno's verbatim quote and attribution, dropped his
 block: three round percentages that appear nowhere in his quote
and trace to no source. Restore path is in the file header.

Also: fractional-cto-roi-calculator presented five full-name founders with
direct quotes under 'Real Founder Stories ... from JetThoughts clients',
with no anonymisation disclaimer - and said 'three stories' while showing
five. Its sibling infrastructure-spending post already carries the honest
form ('names changed, numbers accurate'). Relabelled as composites with the
count fixed. NOTE: 'Sarah Chen' appears both here and in the synthetic
testimonials, which is why I did not simply assert these are real
engagements - see the handback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* OKF: session wrap-up - testimonial canon rule, estimation lesson, two coverage gaps

Four durable captures from the 2026-08-20 session that were not already
logged as they happened:

- claims-canon gains a testimonial rule. The finding worth keeping is not
  'four fake testimonials existed' but the MECHANISM: hugo.toml had been
  curated to the one real testimonial, and data/testimonials.yaml silently
  outranked it because the partial reads the data file first. Cleaning a
  config is not cleaning the page - check which source wins.
- Query before estimating. A panel guessed a click rate GA could answer,
  and a kill-criterion override shipped on the guess at ~5x off, which
  would have made the campaign unkillable. Records the GA-vs-LinkedIn
  division of labour so it stops drifting back onto Paul.
- The visual suite does not cover the testimonial carousel: four live pages
  changed, zero of 53 screenshots moved.
- Fresh agent worktrees need bun install v1.3.13 (bf2e2cec)

+ cssnano@8.0.6
+ postcss@8.5.26
+ postcss-import@17.0.0
+ postcss-nested@8.0.1
+ surge@0.43.1
+ caniuse-lite@1.0.30001809

51 packages installed [518.00ms] before bin/dev.

Not re-logged: the exhibit two-layer trap, the fallback-font em correction,
the ratchet-reads-built-HTML change and the analytics read were all written
to .okf/log.md as they happened. The 4-eyes rule another session added to
CLAUDE.md (#482) already covers 'self-review is not the second pair of
eyes', so this session's identical finding is corroboration, not a new rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
pftg added a commit that referenced this pull request Aug 20, 2026
* Course/blog: dense tables scroll inside themselves on phones (C3.1)

W2's scroll gate flagged this in August and the fix was frozen 'until this
wave'. Reproduced before fixing, and it was worse than recorded: on
fractional-cto-sow-reference a table rendered 507px wide inside a 354px
column (recorded as 25px), with overflow-x visible on the parent - no
scroll container anywhere. first-paying-customer-operating-kit overflowed
51px, pre-existing since W1 #428.

Mobile-only media query in single-post.css, which both single.html and
course/single.html already load, so one rule covers blog and course and
every sibling reference table at once. display:block is what makes a
table scrollable; scoping it under 767px keeps the desktop auto-layout
the wide reference tables depend on.

Verified at a true 390x844 device render: all four tables now cap at the
354px column and scroll internally, document scrollWidth == viewport on
both named pages (was overflowing). Desktop re-checked at 1280:
display:table, overflow-x:visible, full 684px column - untouched.
bin/qtest --changed green (34 runs, 53 screenshots, 0 failures).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Purge fabricated testimonials from four live pages; label invented case studies

Found by following C0.1's ratchet output: 25 of its 40 violations traced to
client copy syndicated across every services page. Pulling that thread
surfaced something much worse than a banned adjective.

**data/testimonials.yaml carried four synthetic testimonials** - Sarah Chen
/ TechStart Solutions, David Rodriguez / EcomMega, Maria Gonzalez /
HealthTech Innovations, Alex Thompson / EduPlatform - with
placeholder-shaped company names and unsourced round metrics ('Secured $2M
Series A', '300% improvement in page load speeds', '99.8% uptime'). They
rendered on the LIVE homepage, /clients, /about-us and /use-cases, because
this data file overrides the curated single testimonial in hugo.toml.

Someone had already curated hugo.toml down to the one real testimonial
(Bruno Wozniak / PubNative, corroborated by a live LinkedIn profile and the
Review schema). The data file quietly overrode that curation in the visible
render. Same defect class the schema purges of 2026-08-14 and #475 removed
from structured data - this was the visible-copy half nobody had swept.

Removed all four. Kept Bruno's verbatim quote and attribution, dropped his
 block: three round percentages that appear nowhere in his quote
and trace to no source. Restore path is in the file header.

Also: fractional-cto-roi-calculator presented five full-name founders with
direct quotes under 'Real Founder Stories ... from JetThoughts clients',
with no anonymisation disclaimer - and said 'three stories' while showing
five. Its sibling infrastructure-spending post already carries the honest
form ('names changed, numbers accurate'). Relabelled as composites with the
count fixed. NOTE: 'Sarah Chen' appears both here and in the synthetic
testimonials, which is why I did not simply assert these are real
engagements - see the handback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* OKF: session wrap-up - testimonial canon rule, estimation lesson, two coverage gaps

Four durable captures from the 2026-08-20 session that were not already
logged as they happened:

- claims-canon gains a testimonial rule. The finding worth keeping is not
  'four fake testimonials existed' but the MECHANISM: hugo.toml had been
  curated to the one real testimonial, and data/testimonials.yaml silently
  outranked it because the partial reads the data file first. Cleaning a
  config is not cleaning the page - check which source wins.
- Query before estimating. A panel guessed a click rate GA could answer,
  and a kill-criterion override shipped on the guess at ~5x off, which
  would have made the campaign unkillable. Records the GA-vs-LinkedIn
  division of labour so it stops drifting back onto Paul.
- The visual suite does not cover the testimonial carousel: four live pages
  changed, zero of 53 screenshots moved.
- Fresh agent worktrees need bun install v1.3.13 (bf2e2cec)

+ cssnano@8.0.6
+ postcss@8.5.26
+ postcss-import@17.0.0
+ postcss-nested@8.0.1
+ surge@0.43.1
+ caniuse-lite@1.0.30001809

51 packages installed [518.00ms] before bin/dev.

Not re-logged: the exhibit two-layer trap, the fallback-font em correction,
the ratchet-reads-built-HTML change and the analytics read were all written
to .okf/log.md as they happened. The 4-eyes rule another session added to
CLAUDE.md (#482) already covers 'self-review is not the second pair of
eyes', so this session's identical finding is corroboration, not a new rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Remove the fabricated founder stories (Paul: 'she is not real')

Sarah Chen is confirmed invented. She appeared in both the synthetic
testimonials purged in #481 and, with a surname and a direct quote, in a
live post - so the whole batch goes.

fractional-cto-roi-calculator: removed the five-founder section entirely
(Sarah Chen, Marcus Thompson, Jennifer Martinez, David Park, Emma
Rodriguez) along with BOTH of its false claims - the 'Real Founder
Stories ... from JetThoughts clients' heading and the closing 'these
aren't hypothetical scenarios - they're real situations from JetThoughts
clients in the past 24 months'. The five underlying patterns are worth
keeping, so they stay as an unattributed list that states plainly we have
no completed case study of our own to publish yet.

infrastructure-spending-evaluation: corrected in the same pass. Its
'real stories from our clients (names changed, numbers accurate)' form had
looked like the honest convention - I nearly left it on that basis
earlier today. With the fabrication next door confirmed, an unverifiable
'numbers accurate' claim is the same defect in better clothes.

Rule recorded in claims-canon: a disclaimer that asserts MORE than you can
verify is not a fix. 'Names changed, numbers accurate' claims real
provenance. If nobody can produce the client, write 'illustrative
composite'.

Repo-wide sweep: zero surviving instances of the invented personas or the
real-client claims outside the audit trail in data/testimonials.yaml.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <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