Skip to content

Access control, warnings that count, an installer that can update (3.5.0) - #9

Merged
tmoody1973 merged 1 commit into
mainfrom
access-control-and-coherence
Aug 22, 2026
Merged

Access control, warnings that count, an installer that can update (3.5.0)#9
tmoody1973 merged 1 commit into
mainfrom
access-control-and-coherence

Conversation

@tmoody1973

Copy link
Copy Markdown
Owner

3.4.0 made the engine honest about what it found. This is about what it was never looking at.

1. There was no authentication check. At all.

Thirty-one checks across eight categories, and not one looked at access control. I grepped every check module for auth, authoriz, permission, rbac, session: three hits, all stray words inside recommendation prose.

The same afternoon, an independent review of a live application found:

isOwner() is called in exactly two places; every other route relies on a check that proves someone is signed in, not who. POST /api/mail/drafts/[id]/send is reachable by any signed-in non-owner. isOwner() also returns true when OWNER_EMAIL is unset.

This audit had graded that repository "A, strong evidence of controls."

New Access Control category:

  • auth-1 is there an authentication mechanism, and which one
  • auth-2 do request handlers consult an identity, or serve anyone who reaches the URL. Reported as a text match: mentioning a guard is not being guarded
  • auth-3 does a permission check grant access when its own environment variable is unset

auth-3 needed real work. My first regex looked for if (!process.env.X) return true and found nothing, because real code reads the variable into a local first. It now learns the env-derived local names per file, then looks for the fail-open branch on them. On the live repo above it returns:

auth-3 fail critical  src/lib/owner.ts: if (!owner) return true;
auth-2 fail high      18 of 25 request handler(s) never mention an auth check

That repository went from A, 90 to D, 83.

2. Fifty-five points of findings were displayed but never scored

Eight checks reported as warn with a severity badge, three of them MEDIUM, and Category.score only subtracted on fail. A repository could show three MEDIUM findings and score 100 in those categories. A warning now costs half of the same finding failing.

3. The toolkit could not deliver its own corrections

/add-clean-code printed "already installed" and exited 0 without comparing anything. The going-live rule was wrong in 3.1.0 and corrected in 3.2.1 after a reviewer said "wait until launch day is too late". Anyone who installed before that correction still has the wrong rule, permanently.

The managed block now carries a version. A re-run diffs it and exits 3; --update replaces only what is between the markers; --check reports without touching anything. Verified: user content above the block survives.

The 3.2.1 edit also left a dangling reference ("Before that day", "On that day", after the first bullet stopped naming a day). Fixed.

4 and 5. The skills

boy-scout-cleanup claimed "behavior-preserving" while /refactor, its sibling with identical risk, carried the discipline that makes the claim meaningful. A tester's mutation test found three of four real behavior changes passing a green suite. It now requires an undo to exist, requires proving the suite covers the behavior being touched, and requires saying which evidence was used.

All five prompt-only skills were run once against a real repository by an independent tester. Every one returned "partly works". Each finding is fixed: the scaffold that invented a stack silently and failed on first run, the handoff whose empty template sections invited fiction, the review that promised to run the coach and never mentioned it, the review that never said where its output goes.

Verified

  • 68 tests (was 59)
  • validator passes, self-audit gate exits 0
  • installer matrix: fresh, idempotent, stale-detect, update, check, user content preserved
  • em dashes gone from every skill, command and template
  • CI green on this PR

…te (3.5.0)

The engine was made honest in 3.4.0. This is about what it never looked
at.

Access Control is a new category. The tool shipped three versions with
no authentication check at all, and the same afternoon an independent
review of a live app found a send endpoint reachable by any signed-in
user and an owner guard returning true when its env var was unset. The
audit had graded that repo 'A, strong evidence of controls'. auth-3 now
quotes the exact line and the grade is D.

Warnings cost points. Eight checks printed a severity badge and
subtracted nothing: 55 points shown but not counted.

The installer can deliver a correction. It printed 'already installed'
and exited 0 without comparing anything, so the going-live rule fixed in
3.2.1 could never reach anyone who installed before it.

boy-scout-cleanup gets the verification discipline its sibling /refactor
already had. All five prompt-only skills fixed from independent testing.

68 tests.
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@tmoody1973, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 8 minutes

Limit details: You’ve used the included review currently available.

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?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2f5c2a55-180b-497e-b4db-12bd5fa5be01

📥 Commits

Reviewing files that changed from the base of the PR and between 492440d and dcf9889.

📒 Files selected for processing (19)
  • .claude-plugin/marketplace.json
  • .claude-plugin/plugin.json
  • CHANGELOG.md
  • README.md
  • commands/code-smells.md
  • scripts/add-clean-code.sh
  • skills/boy-scout-cleanup/SKILL.md
  • skills/clean-code-review/SKILL.md
  • skills/clean-code-scaffold/SKILL.md
  • skills/developer-handoff/SKILL.md
  • skills/prod-readiness-coach/SKILL.md
  • skills/prod-readiness-coach/scripts/audit/checks_access.py
  • skills/prod-readiness-coach/scripts/audit/model.py
  • skills/prod-readiness-coach/scripts/audit/repo.py
  • skills/prod-readiness-coach/scripts/audit/runner.py
  • skills/prod-readiness-coach/scripts/prod_audit.py
  • skills/prod-readiness-coach/tests/test_prod_audit.py
  • skills/product-readiness-review/SKILL.md
  • templates/CLAUDE.md

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.

@tmoody1973
tmoody1973 merged commit 75c1a85 into main Aug 22, 2026
3 checks passed
@tmoody1973
tmoody1973 deleted the access-control-and-coherence branch August 22, 2026 22:49
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