Fix: JetThoughts was founded 2008-09-01, not 2011 - #456
Conversation
The site carried 2011 as the founding year, which also made every derived
tenure claim three years short. Corrected to 2008-09-01 and, more importantly,
made the hardcoded copies derive from the single source so it cannot drift
again.
There were two separate defects. The canonical value in
config/_default/hugo.toml was wrong, AND most tenure claims bypassed it with
hardcoded strings - so fixing the param alone would have left "since 2011" on
the homepage, the rescue page, three blog posts and two course pages.
Now derived from site.Params.foundingYear / foundingDate:
- home.html services intro and the hero counter (rendered 15, now 18)
- vibe-code-rescue hero chip and Why-JetThoughts paragraph
- organization-data.html + enhanced-organization-schema.html foundingDate,
now the full ISO date 2008-09-01 rather than a bare year
- comprehensive-service-schema.html "Years of Experience" (was hardcoded
"13+", which matched neither 2011 nor 2008)
Literal fixes where Hugo cannot interpolate into body prose: content/_index.md
(3), about-us, and the blog/course first-person claims.
Ratchets updated so the old year cannot return: marketing_copy_test bans
"since 2011" / "founded in 2011"; course_banned_strings gains the same two and
its existing tenure entries had their reasons corrected - those bans ("since
2005", "20 years") stay valid under a 2008 canon, only their stated reason was
stale.
Two judgement calls worth reviewing:
1. Paul's personal experience read "15+ years" in about-us and authors.yaml.
Founding an already-seasoned career in 2008 makes that internally
contradictory, so both now read 18+. If the real figure is higher, correct
it - I picked the conservative floor implied by the founding date.
2. NOT changed: "on PyPI since 2011" in a course SVG (a Python package, not
us), and "15+ years of industry experience" for fractional CTOs in
services/fractional-cto - that is staff experience, independent of when the
company was founded. The ratchet deliberately does not ban "15+ years" for
the same reason: it cannot tell company tenure from staff experience.
Verified in a production build: foundingDate 2008-09-01, "18+ years", "18+
Years Industry Experience", service schema value "18+", homepage counter
data-count="18", "since 2008" x3.
Gates: hugo-build 8/8; test:unit 277 runs 0 failures; hugo_pipeline_test 11
runs 0 failures; qtest 53 screenshots no failures - though note the visible
changes here (15->18, 2011->2008) are 2-character edits far under the 2%
screenshot tolerance, so the visual gate could not have caught them either
way. The production-build check above is the real verification.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…h kits serena's regex sweep found what grep missed - the wrong year and the wrong review count were not just on the site, they were baked into the doctrine files that instruct future work. Anyone following PRODUCT.md or the 2607 kits would have re-introduced both. Canon corrected: - PRODUCT.md: founded 2008-09-01, tenure derives from site.Params.foundingYear. Its Evidence-on-Hand list also carried "4.8/5 rating from 32 clients" as an approved claim - now "4.8/5 on Clutch" with an explicit rule not to state a review count, because 32 was unsourced and the real figure is 9. - docs/business/vision-mission.md: same two corrections. - 2607 warm-intro-referral-kit: the tenure instruction itself said 'Tenure claim is "since 2011" (from foundingYear = 2011 - verifiable)'. It was neither verifiable nor correct. - 2607 offer-one-pager (the source the rescue landing page was written from), customer-profile-four-forces, objection-followup-bank. - 2605 pilot-outreach-campaign-kit claims whitelist. Site content serena caught that my greps had not: - use-cases/startup-mvp-prototyping-development (13+ x2) - services/talent-recruiting-training (13+) - two blog posts asserting JT has "15+ years of Rails expertise" Deliberately NOT changed, because they are different claims: - "32 clients" in warm-intro-referral-kit and assumptions-register means TOTAL CLIENTS SERVED, not Clutch reviews - a company of 18 years plausibly has 32 clients. The site's old "4.8/5 by 32 clients" conflated the two, which is how an unsourced number looked sourced. Flagging rather than editing: the 32-clients-served figure has no in-repo source either. - "on PyPI since 2011" (a Python package), the 15+ years hire-pool and salary-table references, and fractional-CTO staff experience. - Historical review records (40.21, 40.24, archives, .impeccable critiques) and 20.09 §11 / .okf/log.md, which document the defect and should keep saying what was true at the time. Gates: hugo-build 8/8; test:unit 277 runs 0 failures; marketing_copy_test green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 71 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (35)
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 |
…stamp maintain pass for the 2008 founding-date correction. The bundle had no concept stating the founding date, tenure rule, or rating claims - and this session proved that absence was the defect. The canon lived scattered across PRODUCT.md, docs/business/vision-mission.md and five 2607/2605 outreach docs, each free to drift, which is exactly how "since 2011" survived for years alongside a "13+ years" that matched neither year. New concept content/claims-canon.md, modelled on course-canon.md: the canonical table (founding 2008-09-01, derive tenure, 4.8/5 on Clutch with no review count, 95% retention, 5-year relationships, 8+ years developers), the rules behind them, where they are ratcheted mechanically, and the list of docs that repeat the canon so the next correction sweeps the instruction layer too. Records the "32 clients" ambiguity explicitly - false as a review count, but plausible-and-unsourced as total clients served. Conflating the two is how an unsourced number passed as sourced. Also migrates build/hugo-build.md off the v0.1 `timestamp` field I added on 2026-08-13 to the v0.2 `generated` family, with an honest actor - I edited that concept twice this session, so the stamp is mine, not a back-stamp. /okf:validate .okf --strict - conformant, zero errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… sweep found Paul's experience: first professional role 2004, so 22+ years - distinct from company tenure (2008/18 years). about-us and authors.yaml corrected; the "18+ years delivering startup MVPs" in the about-us description stays, because that one IS the company. Review counts, audited across every public platform. The real total is 11, not 32, on any reading: Clutch 4.8 (9) · GoodFirms 5.0 (1) · Google 5.0 (1) · Techreviewer aggregates Clutch is the one worth citing - deepest single source, public sub-scores. Recorded in the claims canon. Clutch also independently lists "Year founded: 2008", so the review platform had our founding date right while we did not. THE GATE HAD A HOLE. A lighthouse/snapshot sweep found "Take You to the Next Level" live in the careers <h1> - a phrase marketing_copy_test bans and reported clean on. The template wraps prose, so the phrase straddled a line break and line-by-line matching never saw it. Worse, `scrub` then ate the evidence: "Level?</span" contains a slash, and stripping slash-tokens wholesale deleted the word with the tag. Fixed both: scrub now strips Hugo expressions and HTML tags BEFORE path tokens, and a new wrapped_hits pass matches against the whitespace-collapsed file so a phrase split across lines is still caught. Verified by watching it go RED on the careers h1 before the copy was changed. A test was also ENFORCING the banned phrase: testimonial_shortcode_test pinned the literal string "Looking for a Team to Take You to the Next". Two gates cannot disagree about the same string. Its own comment says the intent is "the page renders successfully", so it now asserts the shape - exactly one non-empty h1 - per the repo rule about not testing configuration. Three more defects from the same sweep: - Nested <main>: careers.html carried role="main" inside baseof's <main>, two landmarks on one page. Removed. This was almost certainly the Agentic Browsing score of 50 - every other page scores 100. - "John Doe" hardcoded as the testimonial image title while the frontmatter attributes the quote to a real person; now reads from .Params.testimonial.name. - Careers h1 rewritten off the cliche. Lighthouse (mobile, live site) after: home SEO 100 / BP 100 / a11y 94 · vibe-code-rescue 100/100/93 · about-us 100/100/93 · careers 100/100/91. Zero console errors on every page. Careers agentic-browsing re-checks after deploy. Gates: hugo-build 8/8; test:unit 277 runs 0 failures; qtest 53 screenshots no failures; marketing_copy_test RED->GREEN on the wrapped phrase. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Each channel gets its own voice; all channels share the anti-slop core. One house voice flattened across four channels is how the site ended up sounding like a whitepaper below a hero that sounded like a person. 90.11 gains section 1b: a register table for website / blog / course / LinkedIn with each one's signature move, then the explicit list of what never varies - banned words, banned structural patterns, the who/show/practitioner tests, sourced numbers. A shorter register is not a licence to slop; marketing copy is where tells hide best because nobody reads a 20-word card closely enough to spot a rule of three inside it. Also records the enforcement asymmetry honestly: word-level bans are mechanised, the structural patterns where this guide says the real tells live are still review-only, and review under-counts - a test found ~18 more than a careful read, and a wrapped phrase hid from the gate entirely until the matcher was fixed. Treat any review-only rule as advisory until it has a test. .okf/content/voice-rules.md mirrors the model and links the claims canon. /okf:validate .okf --strict - conformant. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
JetThoughts was founded 2008-09-01. The site carried 2011, which also made every derived tenure claim three years short.
Two separate defects
config/_default/hugo.tomlhad afoundingYearparam commented "Single source for tenure claims" — but it was wrong, and most claims bypassed it with hardcoded strings. Fixing the param alone would have left "since 2011" on the homepage, the rescue page, three blog posts, and two course pages.So the fix corrects the value and makes the copies derive from it.
Now derived, not hardcoded
data-count="15"foundingDate"2011"2008-09-01(full ISO date)"13+"Literal fixes where Hugo can't interpolate into body prose:
content/_index.md(×3), about-us, and the first-person JT claims in blog/course content.What serena caught that grep didn't
This is the part worth reviewing. A regex sweep across all file types found the wrong year and the wrong review count baked into doctrine files that instruct future work — anyone following them would have re-introduced both:
PRODUCT.md— canon said "founded 2011 (tenure claim is 'since 2011')", and its Evidence-on-Hand list approved "4.8/5 rating from 32 clients"docs/business/vision-mission.md— same two errors2607/warm-intro-referral-kit.md— the tenure instruction read 'Tenure claim is "since 2011" (fromfoundingYear = 2011- verifiable)'. Neither verifiable nor correct.2607/offer-one-pager.md— the source document the rescue landing page was written from2605/50.02-pilot-outreach-campaign-kit.md— the claims whitelistuse-cases/startup-mvp-prototyping-development(13+ ×2),services/talent-recruiting-training(13+), and two blog posts claiming JT has "15+ years of Rails expertise"Deliberately NOT changed
"32 clients" means two different things. In
warm-intro-referral-kitandassumptions-registerit means total clients served — plausible for an 18-year-old firm — not Clutch reviews. The site's old "4.8/5 by 32 clients" conflated the two, which is precisely how an unsourced number looked sourced. I corrected the review-count usages and left the client-count ones.Also unchanged: "on PyPI since 2011" (a Python package, not us), "15+ years" hire-pool and salary-table references, fractional-CTO staff experience (independent of company age), and historical review records / archives /
.okf/log.md, which should keep saying what was true at the time.Ratchets
marketing_copy_testbanssince 2011/founded in 2011.course_banned_stringsgains the same two; its existing tenure bans ("since 2005", "20 years") stay valid under a 2008 canon — only their stated reasons were stale.Deliberately not banning
15+ years: it can't distinguish company tenure from staff experience, and it false-positived onservices/fractional-ctoimmediately. A ban that can't tell those apart is noise.Judgement call → RESOLVED
Paul's personal experience read "15+ years", which contradicted founding an already-seasoned career in 2008. I first set it to 18+ as the conservative floor; Paul confirmed his first professional role was 2004, so it is now 22+. See the scope-grew section below.
Verification
Production build confirms:
foundingDate: 2008-09-01,18+ years,18+ Years Industry Experience, service schema"18+", homepagedata-count="18",since 2008×3.bin/hugo-build— 8/8 validatorsbin/rake test:unit— 277 runs, 0 failureshugo_pipeline_test— 11 runs, 0 failuresbin/qtest --changed— 53 screenshots, no failures15→18,2011→2008) are two-character edits, far under the 2% screenshot tolerance — the visual gate could not have caught them either way. The production-build check is the real verification.🤖 Generated with Claude Code
Scope grew after review — four more findings
Founder experience ≠ company tenure
Paul's first professional role was 2004, so 22+ years — distinct from company tenure (2008 / 18 years).
about-usandauthors.yamlcorrected. The "18+ years delivering startup MVPs" in the about-us description stays: that one is the company.Real review counts, audited
Real total: 11 across three platforms — "32" is unsupported on any reading. Clutch is the one worth citing (deepest source, public sub-scores: Quality 4.9 · Schedule 4.9 · Cost 4.7 · Refer 5.0). Recorded in the claims canon.
Notably, Clutch independently lists "Year founded: 2008" — the review platform had our founding date right while we did not.
The ratchet had a hole
A Lighthouse/snapshot sweep found "Take You to the Next Level" live in the careers
<h1>— a phrasemarketing_copy_testbans and reported clean on.Two compounding bugs. The template wraps prose, so the phrase straddled a line break and line-by-line matching never saw it. Then
scrubate the evidence:Level?</spancontains a slash, and stripping slash-tokens wholesale deleted the word along with the tag.Fixed both —
scrubnow strips Hugo expressions and HTML tags before path tokens, and a newwrapped_hitspass matches the whitespace-collapsed file. Verified by watching it go RED on the careers h1 before the copy changed.A test was enforcing the banned phrase.
testimonial_shortcode_testpinned the literal string"Looking for a Team to Take You to the Next". Two gates cannot disagree about the same string. Its own comment says the intent is "the page renders successfully", so it now asserts shape — exactly one non-emptyh1.Three more defects from the same sweep
<main>—careers.htmlcarriedrole="main"inside baseof's<main>. Two landmarks on one page, and almost certainly the Agentic Browsing score of 50 when every other page scores 100."John Doe"hardcoded as testimonial image title while frontmatter attributes the quote to a real person. Now reads from.Params.testimonial.name.h1rewritten off the cliché.Channel voice model
90.11 §1b— each channel gets its own register (website / blog / course / LinkedIn), all share the anti-slop core. Records the enforcement asymmetry honestly: word-level bans are mechanised, structural patterns are review-only, and review under-counts.Lighthouse, live site, mobile
//services/vibe-code-rescue//about-us//careers/Zero console errors on every page. Careers agentic score re-checks after deploy.