Upgrade the AI code review post: cut the second audience, add the cover - #642
Merged
Merged
Conversation
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 |
…he duplicate UPGRADE IN PLACE per 20.09 S2. Same URL, rewritten around something we can prove instead of numbers we could not. WHAT WAS THERE. The post opened on "70% faster review cycles", "catching 85% more potential issues" and "82% of developers use AI tools weekly". None of the three traces to either source it listed - the Sources block was added by the batch-cite sweep without anyone checking that the body's headline figures came from it. It also had one H2 and eight orphaned H3s, so the heading hierarchy skipped a level throughout. WHAT IT RESTS ON NOW. Building `jetthoughts/ruby_llm-team`, a code-review workflow reported a SQL injection, listed it, and wrote "approve" on the line directly above. Same response, structured output contradicting its own verdict. The fix was to delete the verdict field and compute it in Ruby: any specialist reporting findings means changes are requested. Both the workflow and the comment we left ourselves are public in examples/code_review/workflow.rb, so a reader can check the whole claim. Framed for the founder rather than the Ruby developer, per the row: the question is whether you can trust what the AI reviewer told you, and the four closing questions need no code to ask. The general rule is stated language-agnostically, because nothing about the failure is Ruby-specific. Constraints honoured: the library is described as public, never as published or adopted, because it is neither on RubyGems nor used by anyone. No invented incident - this came from building a library and says so. A "what we are not claiming" section states plainly that this is one team's finding and not a rate. DUPLICATE RESOLVED. `...-workflows-2025` deleted and its URL added as an alias on the survivor, so the old path redirects. Neither URL had any GSC data in 90 days, so there was no equity to weigh - the survivor was chosen for the cleaner slug without a stale year in it. Added a diagram contrasting the two designs. Verified in the browser at mobile width: 9.3 screens, longest prose run 924 chars, no overflow, alias redirect emitted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
Ten findings from building jetthoughts/ruby_llm-team, each carrying the file or commit that proves it so the fabrication ratchet has something to check against. §14 of the content plan carries four candidate rows, already deduped against the seven-post RubyLLM cluster. Most of the material would have cannibalised multi-agent-llm-rails-rubyllm, evaluating-rubyllm-agents-rails or debugging-rubyllm-agents-rails, so only what survived that audit is listed — and S2 is marked upgrade-in-place rather than a new slot, which is the row this branch is drafting.
The post welded a first-hand incident to a founder checklist that already ships as dev-shop-ai-code-review-what-to-ask. It had to generalise to cross that seam, which is where the AI-tells lived. 934 -> 563 words. - Fixed two false claims about our own fix: it was a schema deletion AND a prompt instruction, and the model was one free-tier default, not models. - Dropped an unprovable attribution. No artifact preserves the failing response; workflow.rb has one commit and arrived already fixed. - Proof link 404d: blob/main on a repo whose only branch is master. - Added the missing cover; rewrote the diagram's text, which was carrying the exact aphorisms cut from the prose. No ratchet reads inside an SVG. - cover-images.md named two gitignored reference files. Points at tracked ones now. - 20.09 §13p scheduled 09-09 as a §5 swap displacing §13l. Gates: hugo-build green, test:links 0 errors, visual gate PASS at 1280x800 and 390x844. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
Three bolds, each a conclusion and one per paragraph, so approve stays the loudest mark. Identifiers get backticks. A long paragraph splits in two. A one-line callout now sits directly after the ruby fence - 2604's findings-2026-04-30 flagged that a mid-scroll viewport of pure code leaves a non-technical reader no escape hatch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
Measured: the free-model qualifier carried 9.5x the rendered bold ink of approve, same weight and colour, and the two shared a viewport - so a scanner took away the hedge, not the finding. Unbolded; it is a qualifier and does not need to shout. The remaining bold is now isolated on its own line, 3,000px from approve, so the two can no longer compete. Also trimmed a clause that restated the callout two lines below it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
Two findings from gating this post. The longest-unbroken-run metric cannot be moved by splitting a paragraph - a one-line paragraph is still prose, so a split adds to the run instead of breaking it. Measured: 720px/23 lines mobile and 609px/16 desktop, identical across the split. Only a non-prose element moves it, which means the metric can push a writer into adding furniture to satisfy a gate. The measurement that did discriminate was rendered bold ink - client-rect area, not a count of <strong>. One bold per paragraph was satisfied while the page's loudest mark was a hedge carrying 9.5x the ink of the hook. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
The URL survived the upgrade; the content did not. Thesis, evidence and nearly every sentence are new, and the incident is from 2026 - a JAN 16 2025 byline sitting in the same fold as a 2026 cover badge misstated the currency to both the reader and search. created_at keeps the original date as the historical record. Side effect worth knowing: this moves the post to blog index page 1, which is exactly the content churn the blog/index screenshot mask fails to absorb. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
13q (09-30) forged handoff: an agent emitted the fixed relay header itself and fabricated an approval from a coworker that never ran. Fix verified in shipped code. The row requires stating the nonce is 32 bits rather than implying a crypto boundary. 13r (10-07) the simplification comparison, opening on the concession that plain Ruby is shorter. Every line count in the README table is unverified and must be re-derived before writing, not quoted. Both carry the positioning-drift flag: fifth and sixth consecutive AI-tooling posts, stated so the mix is a choice rather than an accident. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
pftg
force-pushed
the
blog/upgrade-ai-code-review-trust
branch
from
August 28, 2026 19:01
b474633 to
c834544
Compare
pftg
added a commit
that referenced
this pull request
Aug 28, 2026
#642 and #643 are in. The typography audit is closed: the surface measures good and 2604 built it, so the only live finding was the dek reading smaller than the body it introduces - not actioned, because the real ask turned out to be content formatting rather than CSS. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
pftg
added a commit
that referenced
this pull request
Aug 28, 2026
* Delete the mobile fence rule that never applied
.blog pre code { font-size: 14.5px } sat inside a max-width:768px block, but
the global rule at style.css:539 sorts later and media queries add no
specificity - mobile has always rendered 15.5px. 2604 chose 14.5px to reduce
horizontal-scroll feel; re-measured at 390x844, fences wrap and scroll is
contained, so the concern does not reproduce. Ratified, not restored, and the
supersession is recorded where the decision was made.
Gate: blog/index fails on origin/master BEFORE this change - control run with
the change reverted gives the same difference level 0.0015653935 twice. The
diff is the featured-post title and thumbnail, which the .blog-post /
.post-feature masks do not cover, so the test breaks on content churn. Not
caused by this commit; not papered over by re-recording.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
* Point STATUS at what actually merged
#642 and #643 are in. The typography audit is closed: the surface measures
good and 2604 built it, so the only live finding was the dek reading smaller
than the body it introduces - not actioned, because the real ask turned out to
be content formatting rather than CSS.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg
---------
Co-authored-by: Claude Opus 5 (1M context) <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.
Paul: "a lot of AI slops and hard to read voice, no cover image."
Root cause was structural, not voice
The post welded a first-hand engineering incident to a founder checklist that already ships as
dev-shop-ai-code-review-what-to-ask(08-26). To cross that seam it had to generalise, and the bridge was the slop. A four-lens panel (ICP, voice, AI-tells, cold reader) proposed four different local fixes and all pointed at the same seam. The ICP reader said it outright: "my four questions are a guest paragraph inside somebody else's engineering post."Cutting the second audience took it 934 -> 563 words. The AI-tells left with the section.
Commits
30250d34bCut the second audience, add the coverCut: the "Why this is not a Ruby problem" section, the four-questions table (the sibling owns it), the padded Sources block, and the trailing link paragraph - the post ended on three consecutive link solicitations.
Factual corrections, each verified at the primary source:
workflow.rbsaysREVIEW_MODEL = 'nvidia/nemotron-3-super-120b-a12b:free'review.mdis the post-fix runAlso: the proof link 404'd (
blob/mainon a repo whose only branch ismaster), the cover image was missing, and the diagram SVG was carrying the exact aphorisms cut from the prose - no ratchet reads inside an SVG.ddd7f113fMark up the post so it can be scannedVoice guide section 2: three bolds, each a conclusion, one per paragraph so
approvestays loudest. Identifiers backticked. A callout after the ruby fence, per 2604's finding that a mid-scroll viewport of pure code leaves a non-technical reader no escape hatch.Evidence
bin/hugo-buildgreen;bin/rake test:links0 errors across 32,048 unique linksapproveflush at the left margin. Shortened to 31 chars; now holds one lineAlso in this branch
docs/workflows/cover-images.mdnamed two gitignored reference files; points at tracked ones now20.09section 13p scheduled 09-09 as a section 5 durable-news swap displacing 13l (RubyLLM 2.0 loop decomposition).okf/- three durable learnings incl. a newshell-editing-gotchasconceptOpen, needs a call
Cover badge reads "AI Code Review 2026", byline reads "JAN 16, 2025" - same fold. Publishing-policy question on an upgrade-in-place, not decided here.
🤖 Generated with Claude Code
https://claude.ai/code/session_016PUkwFTsiv7EB2DYKogbpg