Repository navigation
C3.1 table overflow + purge of fabricated testimonials on four live pages - #481
Merged
Merged
Conversation
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>
Contributor
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 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. Comment |
…se 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>
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>
This was referenced Aug 20, 2026
pftg
added a commit
that referenced
this pull request
Aug 20, 2026
… x Rails cluster (R1, R4, R5) (#488) * test: catch up stale macos baselines after master copy purges careers/_overview, nav/use_cases, and mobile/about_us baselines still showed pre-purge copy (World-Class Training, the 32-clients ratings line, old mission text) from before the de-cliche/testimonial PRs (#477/#479/#481). Current renders match master's intentional content; diffs inspected image-by-image before accepting. Linux legs were updated by those PRs' CI runs - only the host-only macos set was stale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * content(refresh): YJIT guide rewritten as Ruby 4.0 YJIT vs ZJIT, fabrications purged August refresh slot (20.09 §5). Premise audit redirected the slot: the plan's named candidate (Kamal/Traefik SSL post) had decayed to 4 impressions/pos 20, while ruby-3-4-yjit-performance-guide holds 6,310 impressions at pos 9.5 AND carried fabricated claims - invented Shopify internal metrics ($2.4M savings), fabricated GitHub results, two fake JetThoughts client case studies, and a fictional Ruby 3.5/3.6/4.0 roadmap. Full in-place rewrite: every claim now cites a primary source (ruby-lang 4.0 notes, railsatscale ZJIT launch, speed.ruby-lang.org, Rails 7.2 announcement, official YJIT docs). Review loop: 3-critic panel + cold-eyes gate. critic-tech verdict NEEDS-FIXES -> fixed: the initializer claim was mechanically false (initializers run for rake tasks too - rewritten as the explicit trap), ISEQs not methods, 4.1 goal is surpass-not-parity, hedged the prebuilt- binary claim. critic-slop: PASS 8/10, SEO clean (title 40, desc 152, 5 internal links verified, 6 citations). critic-editor: minor edits, all applied; diagram redrawn around the CPU-vs-I/O decision. cold-eyes: PUBLISH-READY after fixing desc flag-count and a fabricated reader quote. Moved flat file content/blog/2025/*.md into a page bundle (slug unchanged, URL stable) for local cover + pre-rendered mermaid (18px labels = 12.7px at 390w, clears the 9px floor). New stitch cover. check-post-visuals FLOOR ratcheted 78->72 per the script's own report. Gates: hugo-build green, qtest green, zero console errors/404s. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * content(ai-rails): RubyLLM getting-started + fibers-for-LLM-streaming posts (20.09 §12 R1, R4) Two new Rails-technical posts from the RubyLLM x Rails queue Paul directed today. R1 owns 'rubyllm rails' (chat/persistence/tools/ streaming with the real 1.16.0 API, every claim verified against rubyllm.com + gem source). R4 owns the fibers-vs-threads arithmetic for LLM streaming (Puma 3-thread default vs 30-60s SSE streams, Falcon/ async, semaphore rate limiting, honest ActionController::Live thread caveat) and bridges the falcon cluster. Review loop per post: 3-critic panel + cold-eyes. critic-tech caught 2 majors, both fixed: an unsourced author-stance attribution in R1 (contradicted by the project's own README tagline) and R4's overreach that Live streams cost only a fiber under Falcon (Live spawns its pool thread unconditionally - now stated honestly). critic-slop: PASS 8/10 both; cross-post exhibit dedup applied (job snippet lives in R1, R4 links it). critic-editor: minor edits, applied. cold-eyes: PUBLISH- READY both (one universal-claim fix in R1). Covers from the 6-slot template; mermaid pre-rendered (R1 272px, R4 675px wide - labels clear the 9px mobile floor); scroll gate walked desktop+mobile; hugo-build green; check-post-visuals at floor. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * content(ai-rails): multi-agent RubyLLM pipeline post (20.09 §12 R5) + cluster polish R5 is the practitioner centerpiece of today's cluster: our production talent-matching pipeline - eight agents on a 21-line RubyLLM::Agent base class, a 16-line reduce Workflow, reflector-driven stop loop, bounded-integer scoring summed in Ruby, and the commit-documented Aug 16 outage (with_connection held across multi-second LLM calls under fiber fan-out starved a pool of 10 against 15 fibers). All architecture facts sourced from the real codebase; gem API cross-checked against ruby_llm 1.16. Review loop: critic-tech caught a real BLOCKER - temperature {} blocks are a silent no-op in ruby_llm 1.16 (only model accepts a block); the published sketch now declares temperature statically. (Side finding: the production app's own temperature block is likely a no-op too - flagged to Paul.) Also fixed: the 'gem rejects out-of-range integers' claim (no client-side validation exists; the fetch/clamp is the real enforcement). critic-slop: PASS 8.5/10, the strongest of the four. critic-editor: minor edits, applied. cold-eyes: PUBLISH-READY after one universal-claim trim. Cluster-wide polish across all four of today's posts: 'genuinely' intensifier sweep, 'earns' metaphor thinned, verbatim phrase dedup, cover alt fixed to describe the actual cover. Gates: hugo-build green, visuals ratchet at floor, scroll gate walked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * okf(content): same-day-cluster voice tells + ruby_llm temperature-block gotcha Four posts in one batch exposed cluster-level fingerprints per-post review can't see (shared intensifier, shared metaphor family, verbatim phrase reuse, meta-narration templates, cloned CTA tails) - added the cross-batch sweep to voice-rules. Logged the ruby_llm 1.16 finding that only model accepts a block (temperature {} is a silent no-op). Validated: okf:validate --strict conformant. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(plan): 20.09 §12 execution status - R1/R4/R5 shipped, R3 rescope verdict, R2 caution Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(plan): 20.09 §12 - add R7 (agent evals) and R8 (agent debugging) from Paul's directive Both grounded in first-hand production material surfaced today (agent_logs audit trail, VCR matching trap, invariant-test pattern). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(plan): groomed note - Ollama import needs a light banned-phrase refresh Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * content: re-anchor version framing to Rails 8 (Paul: don't lead with Rails 7) YJIT post now opens its default-check section with 'Every Rails 8 app has YJIT on out of the box' (7.2 kept only as the cited change-point); fibers post opens the thread arithmetic with the Rails 8.1 default ('3 threads per worker'), verified against the current rails/rails puma template (threads ENV.fetch RAILS_MAX_THREADS, 3). R1/R5 were already version-neutral. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(pipeline): add batch-mode prompt for N-post sprints Encodes the three practices the 2026-08-20 4-post batch validated on top of the per-post pipeline: live-GSC premise audit before topic pick, real-code mining for first-hand material (with sanitization rule), and the same-day-cluster sweep after the last post. Paste-ready prompt so future sprints don't reconstruct the orchestration from memory. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * agents: blog-batch-orchestrator + blog-post-coordinator for N-post loops Outer loop (orchestrator): groomed-queue picks with live-GSC premise audit, WIP=1 dispatch of one coordinator per post, cluster sweep with its own 4-eyes pass, plan/OKF sync, one PR, CI watch with flake-rerun. Inner loop (coordinator): writer packet -> resumable 3-critic panel -> cold-eyes 9-check gate -> ship gates -> commit, bounded at 2 fix rounds per gate with SHIPPED/RESCOPE/BLOCKED reporting. blog-pipeline.md batch section now names the agent form ('Spawn blog-batch-orchestrator, N=4') with the paste prompt as the registry-free fallback. 4-eyes: agent-def reviewer verdict FIX-FIRST -> all 5 findings applied (worktree-or-nothing for any second committing coordinator, critic pass on the sweep diff before the polish commit, dev-server port added to the dispatch contract, founder-persona note, bounded-iteration cap). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things: the oldest open queue defect, and a live claims exposure found by following C0.1's ratchet output.
1. C3.1 — dense tables scroll inside themselves on phones
W2's scroll gate flagged this in August; the fix was frozen "until this wave" because it needs shared CSS.
Reproduced first, and it was worse than recorded. On
fractional-cto-sow-referencea table rendered 507px wide inside a 354px column (recorded as 25px of overflow), withoverflow-x: visibleon the parent — no scroll container anywhere. So the whole page dragged sideways on a phone, costing the reader the text column, not just the table.first-paying-customer-operating-kitconfirmed too (51px, pre-existing since W1 #428).One mobile-scoped media query in
single-post.css, which bothsingle.htmlandcourse/single.htmlalready load — one rule covers blog, course, and every sibling reference table.display: blockis what makes a table scrollable and is the real risk; scoping it under 767px keeps the desktop auto-layout the wide tables depend on.Verified at a true 390×844 device render: all four tables cap at the column and scroll internally,
document.scrollWidth == viewporton both pages. Desktop re-checked at 1280:display: table,overflow-x: visible, full 684px column, untouched.2. Fabricated testimonials, live on four pages
C0.1's new ratchet reported 40 pre-existing violations, 25 of them one string syndicated across every services page. Pulling that thread found something well past a banned adjective.
data/testimonials.yamlcarried 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.The mechanism is the interesting part: someone had already curated
hugo.tomldown to the single real testimonial (Bruno Wozniak / PubNative — corroborated by a live LinkedIn profile, and the entry that feeds the Review schema). Butpartials/page/testimonials.htmlprefers the data file and only falls back to site params, so the data file silently overrode that curation in the visible render. Structured data was clean; the visible copy was not. Same defect class the schema purges of 2026-08-14 and #475 removed — this was the half nobody had swept.Removed all four. Kept Bruno's verbatim quote and attribution; dropped his
resultsblock, three round percentages that appear nowhere in his quote and trace to no source. Restore path is documented in the file header.Also relabelled:
fractional-cto-roi-calculatorpresented 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 siblinginfrastructure-spending-evaluationalready carries the honest form ("names changed, numbers accurate"). Relabelled as composites, count fixed.Test plan
bin/qtest --changedgreenbin/test(macOS leg) — 34 runs, 87 assertions, 53 screenshots, 0 failuresbin/dteston an ARM Mac is QEMU-emulated Chrome and plants sub-pixel drift that then fails CI (.okf/build/test-gates.md)🤖 Generated with Claude Code