Skip to content

test: lock README state-truthfulness claims to code (promise audit, lane 2) - #62

Merged
nish3451 merged 1 commit into
mainfrom
seo-fix-kit/promise-audit-state-claims
Aug 8, 2026
Merged

nish3451 merged 1 commit into
mainfrom
seo-fix-kit/promise-audit-state-claims

Conversation

@nish3451

@nish3451 nish3451 commented Aug 8, 2026

Copy link
Copy Markdown
Owner

What

Lane-2 promise audit, final lock. The first half (README "What is live in this repo" numeric caps + routes locked to code) is merged via #60, and the repeatable live spot-check of /demo, /methodology, /packages is merged via #61. This PR closes the last gap: the state-truthfulness claims (what is not live, how limits are computed) were only manually spot-checked once in #60, so they could silently drift.

What changed

shared/promise-audit.test.mjs grows from 9 to 17 pins, all verified against current code before being locked:

  • "roughly 1,000 pages/day" large-crawl rate = 15-minute cron × default 1 batch × 10 URLs (96 × 10 = ~960/day)
  • keyword volume imports keep a storage path (keyword_volume_observations migration) without a live provider
  • Proof Monitoring stays config-gated while Repair Sprint / Repair Agent / Agency Workspace checkouts stay paused (≥3)
  • AI Answer Readiness keeps its no-live-sampling disclaimer
  • growth opportunities stay draft-only with no auto-publish or ranking promises
  • non-founder audits require a verified host; apex and www fold into one site
  • the shared beta password stays a founder override only
  • repair proof receipts keep publishing and ranking disclaimers

Audit evidence (the spot-check itself)

  • npm run audit:live-promise against https://seofixkit.com: all 3 pages pass (proof loop, stated limits, package ladder incl. $99.00 one-time, Dodo as final price source, config-gated monitoring, roadmap markers)
  • All public pages return 200: /, /demo, /methodology, /packages, /support, /terms, /privacy, /llms.txt, /sitemap.xml, /robots.txt
  • Homepage is the locked private-beta access page (waitlist + one-use email access link)
  • No README claim required copy or behavior changes — all claims verified truthful

Verification

  • npm run check green (all suites incl. promise-audit 17/17 and live-promise spot-check 4/4, plus build)

Summary by CodeRabbit

  • Documentation

    • Clarified supported large-crawl throughput and keyword-volume storage without requiring a live provider.
    • Documented offer checkout states, AI readiness limitations, draft-only growth opportunities, and repair-proof disclaimers.
    • Clarified verification of site claims and founder-only beta password overrides.
  • Tests

    • Added coverage to ensure documented capabilities, limitations, and configuration scenarios remain accurate.

…ane 2)

Completes the lane-2 promise audit's repeatable lock: the numeric caps,
routes, and public-page copy were already pinned, but the claims describing
what is NOT live or how limits are computed were only manually spot-checked
once in the merged audit. These eight pins keep those README 'What is live in
this repo' claims honest:

- 'roughly 1,000 pages/day' large-crawl rate matches the 15-minute cron and
  the default one-batch/ten-URL worker caps (96 ticks x 10 = ~960/day)
- keyword volume imports keep a storage path (keyword_volume_observations)
  without a live provider
- Proof Monitoring stays config-gated while Repair Sprint, Repair Agent, and
  Agency Workspace checkouts stay paused
- AI Answer Readiness keeps its no-live-sampling disclaimer
- growth opportunities stay draft-only with no auto-publish or ranking promises
- non-founder audits require a verified host; apex and www fold into one site
- the shared beta password stays a founder override only
- repair proof receipts keep publishing and ranking disclaimers

Live spot-check of /demo, /methodology, and /packages on seofixkit.com still
passes; npm run check is green.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The promise-audit suite now loads source files and validates documented limits for crawling, keyword storage, checkout, AI readiness, growth opportunities, host verification, authentication, and repair-proof claims.

Changes

Promise audit coverage

Layer / File(s) Summary
Source loading fixtures
shared/promise-audit.test.mjs
The test imports readdirSync and adds source fixtures for the audited product areas.
Promise and policy assertions
shared/promise-audit.test.mjs
Tests verify crawl throughput, keyword-volume storage, checkout gating, AI and growth limitations, verified hosts, founder-only access, and repair-proof disclaimers.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the automated tests that lock README state-truthfulness claims to the current code.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch seo-fix-kit/promise-audit-state-claims

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@shared/promise-audit.test.mjs`:
- Around line 166-175: Update the test around the pausedCheckouts assertion to
validate each named offer record—Repair Sprint, Repair Agent, and Agency
Workspace—has checkoutState: "paused" in offersSource. Replace the aggregate
count-only check with targeted assertions while preserving the existing README
and Proof Monitoring checks.
- Around line 145-153: The test named “README large-crawl daily rate matches the
scheduled worker defaults” must also verify that worker/index.js’s scheduled
handler invokes runDueLargeRenderedCrawlWorkers. Load the worker source and add
an assertion targeting that invocation while preserving the existing cron and
default-rate checks.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a99239e7-0a3f-4c6f-9b22-de16049cd71a

📥 Commits

Reviewing files that changed from the base of the PR and between 99a810f and 02475f0.

📒 Files selected for processing (1)
  • shared/promise-audit.test.mjs

Comment on lines +145 to +153
test("README large-crawl daily rate matches the scheduled worker defaults", () => {
assert.match(liveSection, /roughly 1,000 pages\/day/i);
assert.match(wranglerJsonc, /"\*\/15 \* \* \* \*"/, "scheduled worker runs every 15 minutes");
assert.match(largeCrawlsSource, /SEOFIXKIT_LARGE_CRAWL_WORKER_BATCHES \|\| 1/, "default is one batch per tick");
assert.match(largeCrawlsSource, /SEOFIXKIT_LARGE_CRAWL_WORKER_URLS \|\| 10/, "default is ten URLs per batch");
const ticksPerDay = (24 * 60) / 15;
const pagesPerDay = ticksPerDay * 1 * 10;
assert.ok(pagesPerDay >= 900 && pagesPerDay <= 1000, `default caps render ${pagesPerDay} pages/day, matching 'roughly 1,000'`);
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Verify that the scheduler still invokes the large-crawl worker.

This test checks the cron expression and local defaults. It does not check that worker/index.js still calls runDueLargeRenderedCrawlWorkers. The test will pass if that scheduled invocation is removed, even though the documented daily rate is no longer achievable.

Load worker/index.js and assert the scheduled handler invokes the worker.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shared/promise-audit.test.mjs` around lines 145 - 153, The test named “README
large-crawl daily rate matches the scheduled worker defaults” must also verify
that worker/index.js’s scheduled handler invokes
runDueLargeRenderedCrawlWorkers. Load the worker source and add an assertion
targeting that invocation while preserving the existing cron and default-rate
checks.

Comment on lines +166 to +175
test("README offer-catalog claim matches config-gated monitoring and paused checkouts", () => {
assert.match(liveSection, /Proof Monitoring has a config-gated Dodo subscription checkout path/i);
assert.match(
liveSection,
/Repair Sprint checkout, Repair Agent checkout, and paid Agency Workspace checkout are not live yet/i
);
assert.match(offersSource, /statusLabel: "Config gated"/, "Proof Monitoring is labeled config-gated");
const pausedCheckouts = (offersSource.match(/checkoutState: "paused"/g) || []).length;
assert.ok(pausedCheckouts >= 3, `at least three non-live checkouts (found ${pausedCheckouts})`);
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Pin the named paused checkout paths.

The README names Repair Sprint, Repair Agent, and Agency Workspace. A count of three paused entries can still pass after one named checkout becomes live if three unrelated offers remain paused.

Assert checkoutState: "paused" for each named offer record.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shared/promise-audit.test.mjs` around lines 166 - 175, Update the test around
the pausedCheckouts assertion to validate each named offer record—Repair Sprint,
Repair Agent, and Agency Workspace—has checkoutState: "paused" in offersSource.
Replace the aggregate count-only check with targeted assertions while preserving
the existing README and Proof Monitoring checks.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 02475f0092

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +147 to +149
assert.match(wranglerJsonc, /"\*\/15 \* \* \* \*"/, "scheduled worker runs every 15 minutes");
assert.match(largeCrawlsSource, /SEOFIXKIT_LARGE_CRAWL_WORKER_BATCHES \|\| 1/, "default is one batch per tick");
assert.match(largeCrawlsSource, /SEOFIXKIT_LARGE_CRAWL_WORKER_URLS \|\| 10/, "default is ten URLs per batch");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Account for the worker enable gate

In environments that rely on repository defaults, worker/index.js calls runDueLargeRenderedCrawlWorkers only when SEOFIXKIT_LARGE_CRAWL_WORKERS_ENABLED is explicitly true, but wrangler.jsonc does not define that variable. This test nevertheless calculates 960 pages/day from the cron and batch limits, so it passes while the default scheduled throughput is actually zero; assert the enablement configuration as part of this pin or describe the README rate as conditional.

AGENTS.md reference: AGENTS.md:L7-L7

Useful? React with 👍 / 👎.

Comment on lines +195 to +197
assert.match(accessSource, /verifySiteClaimDns/, "DNS TXT verification exists");
assert.match(accessSource, /verifySiteClaimHttpsFile/, "HTTPS file verification exists");
assert.match(authSource, /A claim on the apex domain also covers www/, "apex and www fold into one site");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exercise verified-host authorization

If either audit route stops calling auditAuthorizationStatus, this test still passes because it only confirms that verification helper names and an apex/www comment remain somewhere in the source. That leaves the README's non-founder ownership requirement unprotected against an authorization bypass; invoke the authorization or route behavior and assert that an unverified non-founder host is rejected while a verified apex/www sibling is accepted.

AGENTS.md reference: AGENTS.md:L7-L7

Useful? React with 👍 / 👎.

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