Repository navigation
feat(marketing): add six local tools and update build tooling - #281
Conversation
🤖 CodeAnt AI — Review Status
|
Thanks for using CodeAnt! 🎉We're free for open-source projects. if you're enjoying it, help us grow by sharing. Share on X · |
|
@coderabbitai review |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (23)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe marketing site adds a ChangesFree Tools
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
actor User
participant CrawlerChecker
participant ToolForm
participant testRobots
User->>CrawlerChecker: Enter robots.txt and page URL
CrawlerChecker->>ToolForm: Submit supplied inputs
ToolForm->>testRobots: Check rules for crawler tokens
testRobots-->>ToolForm: Return statuses and matching-line evidence
ToolForm-->>User: Display the current result
Merge Risk: ⚪ Minimal · up to The generator requires a page URL to test its rules before offering a download. No identified issue needs resolution before merge. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 24 functions across 19 files. (4 skipped: 4 unsupported.)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
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 |
🏁 CodeAnt Quality Gate ResultsCommit: ✅ Overall Status: PASSEDQuality Gate Details
|
CodeAnt Nitpicks5 code suggestions1. A compressed image under this byte limit can still have enormous pixel dimensions; rendering it can use hundreds of megabytes and freeze or crash the browser.Performance · 2. Valid crawler-specific names such as
|
| sample={() => { | ||
| setBefore(xml(['', 'old-guide'])); | ||
| setAfter(xml(['', 'new-guide'])); | ||
| }} |
There was a problem hiding this comment.
Suggestion: If a file read is pending when the example is loaded, its callback can finish later and replace the example with the older file contents.
Assessment: 🟠 Major · 🔁 Occurrence: Rarely · 🏷️ Race condition
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** frontend/components/marketing/tools/sitemap-tool.tsx
**Line:** 72:75
**Comment:**
*Race Condition: If a file read is pending when the example is loaded, its callback can finish later and replace the example with the older file contents.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
CodeAnt PR Risk: Medium Risk
Assessed commit: |
|
|



Adds a public
/toolshub and six browser-only utilities for crawler rules, robots.txt generation, page directives, structured data, sitemap comparison, and social previews. Inputs stay local, reports state their limits, and crawler tools reuse the existing public catalog and robots parser.Adds navigation and sitemap discovery, bounded inputs, safe exports and workflow coverage. Pending sitemap uploads cannot overwrite a loaded example; parser boundaries preserve crawler scope and reject malformed sitemap namespaces. Docker packaging includes the crawler catalog. This is additive; no existing behavior is retired.
Aligns root/frontend manifests, the lockfile and all Docker pnpm install stages on 12.9.1, and includes the project Sonar editor connection. A one-line pnpm patch makes Astro 7.3.5's Windows cleanup fallback compatible with Node 26. The fix is still an open upstream PR, so the documented removal condition is upgrading to a release that includes it. Every Docker dependency stage receives the patch for frozen installs.
Disposable bootstrap/seed test databases close their pool before normal deletion and always close the administrative connection. Forced database deletion previously raced a closing PostgreSQL socket and failed an otherwise-passing API suite with an unhandled error; test assertions and gates remain intact.
Testing
pnpm --dir frontend install --frozen-lockfile --ignore-scripts— exit 0 with pnpm 12.9.1..\scripts\check.ps1 -All— exit 0: backend, frontend, contract and API static checks, plus all production builds. Marketing uses its normal output directory after stale local dev processes were stopped.docker build --target native --file Dockerfile --tag citeladder-native-build-check:local .— exit 0: migration-image native stage, including the frozen production install and runtime deploy, receives the patch and uses pnpm 12.9.1.frontend/,pnpm exec vp test run --config ../.git/ship-tool-tests.config.mts components/marketing/tools/tools.test.tsx lib/free-tools/tools.test.ts— exit 0, 14 tests passed. The temporary config extends the checked-in Vite config withenvDir: false; inherited provider credentials were removed from the test process.pnpm --dir frontend/services/api test test/dev-seed.test.ts test/bootstrap-sequence.test.ts— exit 0, 8 tests passed against a newly created, isolated PostgreSQL 16 container. Dotenv was disabled and provider credentials cleared; the container was removed afterward.frontend/,pnpm exec vp check --fix services/api/test/disposable-database.tsandpnpm --filter @citeladder/api typecheck— exit 0 for the fixture follow-up.git diff --checkandgit diff --cached --check— exit 0. Commit hooks run staged formatting/lint.CI owns the full native suites, E2E and clean-clone Compose smoke; these are not reproduced locally. No live providers or deployments were invoked.
SonarCloud S5332 on the standard sitemap XML namespace is classified FALSE_POSITIVE in SonarCloud: this identifier is compared as text and never fetched. Its required HTTP namespace remains intact; no source suppression or weakened quality gate was added.