test: lock README state-truthfulness claims to code (promise audit, lane 2) - #62
Conversation
…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.
There was a problem hiding this comment.
nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
📝 WalkthroughWalkthroughThe 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. ChangesPromise audit coverage
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (1)
shared/promise-audit.test.mjs
| 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'`); | ||
| }); |
There was a problem hiding this comment.
🎯 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.
| 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})`); | ||
| }); |
There was a problem hiding this comment.
🎯 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.
There was a problem hiding this comment.
💡 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".
| 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"); |
There was a problem hiding this comment.
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 👍 / 👎.
| 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"); |
There was a problem hiding this comment.
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 👍 / 👎.
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,/packagesis 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.mjsgrows from 9 to 17 pins, all verified against current code before being locked:keyword_volume_observationsmigration) without a live providerAudit evidence (the spot-check itself)
npm run audit:live-promiseagainst 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)/,/demo,/methodology,/packages,/support,/terms,/privacy,/llms.txt,/sitemap.xml,/robots.txtVerification
npm run checkgreen (all suites incl. promise-audit 17/17 and live-promise spot-check 4/4, plus build)Summary by CodeRabbit
Documentation
Tests