docs(video-generation): Update docs for video generation feature - #774
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThis PR comprehensively documents the new Video Generation (Veo 3.1) feature across the entire documentation suite, including configuration, CLI usage, API references, examples, testing guides, and troubleshooting sections. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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 |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Fix all issues with AI agents
In @docs/cli-reference.md:
- Around line 69-79: The Video Generation options table is missing the --image
flag used in the examples; add a new row in the "Video Generation (Veo 3.1)"
flags table documenting `--image` (type: string, default: none, description:
Path to an input image to base the generated video on, e.g., ./input.png),
ensuring it appears alongside the other flags (`--outputMode`, `--videoOutput`,
`--videoResolution`, `--videoLength`, `--videoAspectRatio`, `--videoAudio`) so
examples referencing --image are documented and unambiguous.
In @docs/configuration.md:
- Around line 197-213: The Video Generation (Veo 3.1) block is unclear and
mis-nested: make it a top-level peer section (match the heading level used by
other provider sections like "Evaluation & Analytics Controls" and "Conversation
Memory & Redis") and clarify credential options by labeling two explicit
alternatives—Option 1: Service account file (keep GOOGLE_APPLICATION_CREDENTIALS
and include GOOGLE_VERTEX_PROJECT / GOOGLE_VERTEX_LOCATION used by Vertex);
Option 2: Environment variables (use GOOGLE_CLOUD_PROJECT /
GOOGLE_CLOUD_LOCATION as an alternative mapping to the same project/location
configuration). Update the comments to state these are alternatives (not
required together) and explicitly note that GOOGLE_VERTEX_* are the
Vertex-specific vars while GOOGLE_CLOUD_* are equivalent environment variable
names, so users may use either approach.
In @docs/features/multimodal-chat.md:
- Around line 15-29: The example calls readFile and writeFile but omits their
imports, causing copy-paste failure; add the appropriate imports at the top
(e.g., import readFile and writeFile from fs/promises or the environment's file
API) so the calls to readFile("./product.jpg") and writeFile("output.mp4",
result.video.data) compile; ensure the example still shows neurolink.generate
usage and keeps provider/model/output options unchanged.
In @docs/reference/provider-feature-compatibility.md:
- Around line 36-46: The score totals are inconsistent because the new "Video
Gen" column is included for Vertex AI (showing 20/20) but not counted for other
providers (still 19/19); update the table so every provider uses the same
denominator—either add the Video Gen column value for all providers (mark as
❌/⚠️/✅ as appropriate) and adjust all totals to out of 20, or keep totals at 19
and annotate Video Gen as provider-specific in the legend; specifically edit the
"Video Gen" column entries and the bold totals (e.g., the row showing "Vertex AI
| ... | **20/20**" and rows showing "**19/19**") and add a clarifying note in
the legend/methodology referencing "Video Gen" and scoring rules.
In @docs/testing.md:
- Around line 345-380: The mock currently calls actual.generate(options) but
`actual` is the imported module from vi.importActual("@juspay/neurolink"), not a
NeuroLink instance, so calling actual.generate will fail; fix by either removing
the fallback and returning a default mock response for non-video modes inside
MockNeuroLink.generate, or if you need real behavior instantiate the real class
(e.g., new actual.NeuroLink(...)) and call its generate method instead; update
the mock returned by vi.mock to reference MockNeuroLink.generate and avoid
calling actual.generate directly.
In @docs/tutorials.md:
- Around line 89-93: The "Video Generation Options (Veo 3.1)" section in
docs/cli-guide.md is missing the --image flag; update that section to include
the --image CLI flag (same name used in examples and in
docs/features/video-generation.md) with a short description, mark it as required
for image-based video generation, and show its expected value (path to an image
file) so the section matches examples and other docs and improves
discoverability.
🧹 Nitpick comments (16)
docs/cli-reference.md (1)
278-309: Specify provider and model in the first example for clarity.The first "Basic video generation" example (lines 283-287) doesn't specify
--provideror--model, relying on defaults. However, video generation is a specialized feature that requires Vertex AI and Veo 3.1. New users might not realize this and could encounter errors if their default provider isn't Vertex AI.📝 Recommended enhancement
# Basic video generation npx @juspay/neurolink generate "Product showcase with smooth camera movement" \ --image ./product.jpg \ + --provider vertex \ + --model veo-3.1 \ --outputMode video \ --videoOutput ./output.mp4Alternatively, add a comment above the example:
# Basic video generation (requires Vertex AI with Veo 3.1) npx @juspay/neurolink generate "Product showcase with smooth camera movement" \ --image ./product.jpg \ --outputMode video \ --videoOutput ./output.mp4docs/cli/commands.md (2)
61-69: Add context about video generation requirements.Similar to the issue in cli-reference.md, this section doesn't clarify that:
- The
--imageflag (documented earlier in the file) is required for video generation- Video generation requires Vertex AI provider and Veo 3.1 model
📝 Recommended addition
**Video Generation (Veo 3.1):** + +> **Note:** Requires `--image` flag, `--provider vertex`, and `--model veo-3.1`. See [Video Generation Guide](../features/video-generation.md) for setup. - `--outputMode` – output mode: `text` (default) or `video`. - `--videoOutput`, `-vo` – path to save generated video file.
61-69: Consider consistency in default value notation.Minor formatting inconsistency: Some flags show explicit defaults in the description (e.g., "default
720p", "defaulttrue"), while the "Default" column in the table format used elsewhere in the file typically contains this information.For consistency with the rest of the document, consider using the table format used for the main
generatecommand flags (lines 44-59). However, this is a stylistic choice and the current format is also acceptable.docs/tutorials.md (2)
54-84: Document image format and size limitations.The SDK example shows using an image input, but doesn't mention important limitations that are documented in the troubleshooting guide (line 68):
- Supported formats: PNG, JPEG, or WebP only
- Maximum file size: 20MB
- Aspect ratio compatibility requirements
Consider adding a comment or note about these limitations to prevent common user errors.
📝 Suggested addition
Add a comment before the example:
### SDK Video Generation ```javascript import { NeuroLink } from "@juspay/neurolink"; import { readFile, writeFile } from "fs/promises"; const neurolink = new NeuroLink(); +// Note: Image must be PNG, JPEG, or WebP format, under 20MB // Generate video from image + text prompt const result = await neurolink.generate({
86-105: Add note about automatic provider selection for video generation.The troubleshooting guide (line 69) mentions that "provider auto-switches to
vertexwhenoutput.mode: "video"", but this important behavior isn't documented in the tutorial. Users might be confused why the--provider vertexflag is shown in the full example if it's automatic.Consider adding a note explaining this behavior, or clarifying that the
--providerflag is optional for video generation.📝 Suggested addition
### CLI Video Generation ```bash +# Note: Provider automatically switches to 'vertex' for video generation # Basic video generation npx @juspay/neurolink generate "Product showcase video" \ --image ./product.jpg \ --outputMode video \ --videoOutput ./output.mp4docs/cli-guide.md (1)
127-135: Add default value for --videoAspectRatio.All other video generation options document their default values, but
--videoAspectRatio(line 133) does not. Consider adding a default (likely16:9for landscape, which is more common) or explicitly state that this parameter is required.Comparison with other options:
- Line 131:
--videoResolutionhas default720p- Line 132:
--videoLengthhas default6- Line 134:
--videoAudiohas defaulttrue- Line 133:
--videoAspectRatio- no default specified📝 Suggested fix
-- `--videoAspectRatio <ratio>` - Aspect ratio: '9:16' (portrait) or '16:9' (landscape) +- `--videoAspectRatio <ratio>` - Aspect ratio: '9:16' (portrait) or '16:9' (landscape, default)Or if required:
-- `--videoAspectRatio <ratio>` - Aspect ratio: '9:16' (portrait) or '16:9' (landscape) +- `--videoAspectRatio <ratio>` - Aspect ratio: '9:16' (portrait) or '16:9' (landscape) [required]docs/use-cases.md (2)
91-91: Replace console.log with proper logging.The PR checklist indicates that "logger used instead of console.log" is required. While this is example/documentation code, users often copy examples directly into production. Consider replacing this with a comment suggesting proper logging or use a logger library in the example.
📝 Suggested improvement
- console.log(`Video generated: ${videoResult.video.metadata?.duration}s`); + // Use your application's logger in production + logger.info(`Video generated: ${videoResult.video.metadata?.duration}s`);
69-92: Add error handling to the example.The video generation example lacks error handling, which could mislead users implementing this feature. Video generation can fail due to various reasons (quota limits, invalid input, timeouts, etc.), as documented in the error-handling.md file.
🛡️ Add error handling
+try { const videoResult = await neurolink.generate({ input: { text: `Smooth camera movement showcasing ${product.name} with elegant rotation revealing product details`, images: [await readFile(product.heroImagePath)], }, provider: "vertex", model: "veo-3.1", output: { mode: "video", video: { resolution: "1080p", length: 8, aspectRatio: product.platform === "instagram" ? "9:16" : "16:9", audio: true, }, }, enableAnalytics: true, + timeout: 180, // 3 minutes for video generation }); if (videoResult.video) { await writeFile(`${product.id}-showcase.mp4`, videoResult.video.data); logger.info(`Video generated: ${videoResult.video.metadata?.duration}s`); } +} catch (error) { + if (error.code === 'VIDEO_POLL_TIMEOUT') { + logger.error('Video generation timed out. Try reducing video length.'); + } else if (error.code === 'VIDEO_QUOTA_EXCEEDED') { + logger.error('Vertex AI quota exceeded. Check billing and quotas.'); + } else { + logger.error('Video generation failed:', error.message); + } +}docs/error-handling.md (1)
83-100: Consider using a proper logger in the error handling example.The PR checklist indicates "logger used instead of console.log" is satisfied, but this example uses
console.errorthroughout (lines 84-86, 88-90, 92-94, 96, 98). Whileconsole.erroris appropriate for documentation examples, consider using a logger to align with the project's logging standards and provide a better pattern for users.📝 Logger-based error handling
} catch (error) { if (error.code === "PROVIDER_NOT_CONFIGURED") { - console.error( + logger.error( "Vertex AI credentials not configured. Set GOOGLE_APPLICATION_CREDENTIALS.", ); } else if (error.code === "VIDEO_POLL_TIMEOUT") { - console.error( + logger.error( "Video generation timed out. Try again or reduce video length.", ); } else if (error.code === "VIDEO_INVALID_INPUT") { - console.error( + logger.error( "Invalid image format. Ensure PNG, JPEG, or WebP under 20MB.", ); } else if (error.code === "VIDEO_QUOTA_EXCEEDED") { - console.error("Vertex AI quota exceeded. Check your billing and quotas."); + logger.error("Vertex AI quota exceeded. Check your billing and quotas."); } else { - console.error("Video generation failed:", error.message); + logger.error("Video generation failed:", error.message); } }docs/framework-integration.md (5)
1343-1343: Replace console.error with proper logging.The PR checklist indicates logger usage instead of console methods. Consider using a logger in the example to demonstrate best practices.
📝 Use logger
- console.error("Video generation error:", error); + // Use appropriate logging in production + logger.error("Video generation error:", error);
1344-1346: Type-safe error message access.Accessing
error.messagewithout verifying the error is an Error instance could fail if the caught value is not an Error object.🔒 Safe error handling
return NextResponse.json( - { error: error.message || "Video generation failed" }, + { error: error instanceof Error ? error.message : "Video generation failed" }, { status: 500 }, );
1398-1398: Type-safe error message access.Directly accessing
err.messagewithout type checking can throw if the caught value is not an Error object.🔒 Safe error handling
- setError(err.message); + setError(err instanceof Error ? err.message : "Video generation failed");
1495-1495: Replace console.error with proper logging.The PR checklist indicates logger usage instead of console methods. Consider using a logger for consistency with project standards.
📝 Use logger
- console.error("Video generation error:", error); + // Use appropriate logging in production + logger.error("Video generation error:", error);
1496-1496: Type-safe error message access.Directly accessing
error.messagewithout type checking can fail if the error is not an Error instance.🔒 Safe error handling
- res.status(500).json({ error: error.message }); + res.status(500).json({ + error: error instanceof Error ? error.message : "Video generation failed" + });README.md (1)
44-57: Feature list expansion is comprehensive and well-organized.The expanded bullet list provides clear descriptions and links for all major features including Video Generation, making it easy for users to discover capabilities.
Note: Static analysis suggests "custom trained models" (line 52) could be hyphenated as "custom-trained models" for grammatical precision, but this is optional.
docs/sdk/api-reference.md (1)
212-221: Video result structure is comprehensive.The
videofield inGenerateResultprovides:
- Raw video data as Buffer
- Media type for format identification
- Useful metadata (duration, dimensions, model)
Minor observation:
heightis marked as optional indimensions(line 218), which seems unusual since videos typically have both width and height. This might be intentional for some edge case, but worth verifying.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
README.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/configuration.mddocs/dynamic-models.mddocs/error-handling.mddocs/factory-pattern-architecture.mddocs/features/multimodal-chat.mddocs/framework-integration.mddocs/getting-started/provider-setup.mddocs/index.mddocs/performance-optimization.mddocs/provider-comparison.mddocs/reference/provider-feature-compatibility.mddocs/sdk/api-reference.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials.mddocs/use-cases.md
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-09-17T17:55:15.261Z
Learnt from: RajuSudhar
Repo: juspay/neurolink PR: 173
File: src/lib/index.ts:16-16
Timestamp: 2025-09-17T17:55:15.261Z
Learning: In src/lib/types/providers.ts, ProviderConfig was renamed to AIModelProviderConfig to deduplicate type names, as there was an existing ProviderConfig type that better suited the "ProviderConfig" name. This was an intentional breaking change for better type organization.
Applied to files:
docs/reference/provider-feature-compatibility.mddocs/provider-comparison.md
📚 Learning: 2025-09-02T13:50:42.770Z
Learnt from: YasmeenOgo
Repo: juspay/neurolink PR: 145
File: src/lib/core/types.ts:0-0
Timestamp: 2025-09-02T13:50:42.770Z
Learning: The APIVersions enum in src/lib/core/types.ts now contains comprehensive API version constants for all major AI providers: Azure OpenAI (latest, stable, legacy), OpenAI (current, beta), Google AI (current, beta), and Anthropic (current). This centralization helps avoid API version drift across the codebase.
Applied to files:
docs/reference/provider-feature-compatibility.mdREADME.mddocs/provider-comparison.md
📚 Learning: 2026-01-03T21:49:09.952Z
Learnt from: CR
Repo: juspay/neurolink PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T21:49:09.952Z
Learning: Applies to src/lib/providers/googleAiStudio.ts : Gemini models (AI Studio and Vertex) cannot use tools and JSON schema output simultaneously - design workflows to use either tools OR structured JSON output, not both
Applied to files:
docs/reference/provider-feature-compatibility.mddocs/sdk/api-reference.md
📚 Learning: 2026-01-03T21:49:09.952Z
Learnt from: CR
Repo: juspay/neurolink PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T21:49:09.952Z
Learning: Applies to src/lib/**/*.ts : thinkingLevel option supports "minimal", "low", "medium" (default), and "high" values for extended thinking on supported models (Anthropic Claude, Gemini 2.5+, Gemini 3)
Applied to files:
docs/getting-started/provider-setup.md
🪛 LanguageTool
README.md
[grammar] ~52-~52: Use a hyphen to join words.
Context: ...er Integration** – Deploy and use custom trained models on AWS infrastructure. → ...
(QB_NEW_EN_HYPHEN)
docs/index.md
[grammar] ~52-~52: Use a hyphen to join words.
Context: ...er Integration** – Deploy and use custom trained models on AWS infrastructure. → ...
(QB_NEW_EN_HYPHEN)
🔇 Additional comments (23)
docs/reference/provider-feature-compatibility.md (1)
34-35: Table header updated correctly for Video Gen column.The new "Video Gen" column is properly integrated into the feature matrix header structure.
docs/dynamic-models.md (1)
14-14: LGTM! Clear and concise documentation of video generation capability.The addition accurately documents the new Veo 3.1 video generation feature and fits naturally within the dynamic model system overview.
docs/factory-pattern-architecture.md (1)
538-764: Documentation contains significant inaccuracies that do not match the actual implementation.The documented architecture and class structure do not align with the codebase:
- Class name mismatch: Documentation shows
VideoGenerationHandlerclass, but the actual implementation usesgenerateVideoWithVertex()function- Error class mismatch: Documentation references
VideoGenerationError, but implementation providesVideoError- Type name mismatches: Documentation uses
VideoGenerationOptionsandVideoResult, but implementation definesVideoOutputOptionsandVideoGenerationResult- File path mismatch: Documentation indicates
src/lib/handlers/videoHandler.ts, but actual implementation is insrc/lib/adapters/video/vertexVideoHandler.ts- Architecture mismatch: Documentation shows a class-based architecture with
VideoGenerationHandlerintegrated intoVertexAIProvider, but the actual implementation uses standalone functionsThe error codes (VIDEO_GENERATION_FAILED, VIDEO_POLL_TIMEOUT, VIDEO_INVALID_INPUT) and polling constants do exist and match documentation, but the core architectural patterns shown in the code examples are incorrect and will mislead developers.
Likely an incorrect or invalid review comment.
docs/provider-comparison.md (1)
15-15: LGTM! Clear provider capability indication.The new "Video Gen" row clearly shows Veo 3.1 support for Vertex AI while marking other providers as unsupported. The table formatting is consistent with existing rows.
docs/getting-started/provider-setup.md (1)
478-482: Video Generation Guide file exists. The referenced../features/video-generation.mdis present in the repository atdocs/features/video-generation.md.docs/features/multimodal-chat.md (2)
22-22: [Your rewritten review comment text here]
[Exactly ONE classification tag]
11-31: No issues found. The example correctly usesresult.video.datato access the video buffer, which matches the documented API structure and is consistently used throughout all examples in the codebase.docs/configuration.md (1)
212-212: Verify the Video Generation Guide link exists.Same issue as in cli-reference.md - the link to
features/video-generation.mdshould be verified.This verification was already requested for cli-reference.md. The same shell script can verify both references.
docs/troubleshooting.md (1)
62-72: LGTM - Comprehensive troubleshooting coverage.The troubleshooting section provides clear error codes and actionable solutions for common video generation issues. The table format makes it easy to scan for specific problems.
Good practices observed:
- Mentions both
GOOGLE_VERTEX_PROJECTandGOOGLE_CLOUD_PROJECTas alternatives (line 70)- Documents automatic provider switching behavior (line 69)
- Includes specific technical limits: PNG/JPEG/WebP, 20MB size, 1-2 minute generation time (lines 67-68)
docs/tutorials.md (2)
107-107: The Video Generation Guide (docs/features/video-generation.md) exists in the repository. The reference on line 107 is valid and will not result in broken links.
43-50: This review comment is inaccurate.GOOGLE_VERTEX_LOCATIONis already documented in the troubleshooting guide at line 33 under "Model not available in region," which explicitly mentions updatingGOOGLE_VERTEX_LOCATIONwhen models are unavailable in a region. Additionally, API reference documentation (docs/getting-started/api-reference.md:1459) clarifies thatGOOGLE_VERTEX_LOCATIONis optional with a default value ofus-east5, so the variable is appropriately documented as part of the prerequisites.Likely an incorrect or invalid review comment.
docs/framework-integration.md (1)
1284-1565: No duplication found. The "Video Generation Integration" section appears only once in the document at line 1284. The AI-generated summary's claim of duplicate sections is incorrect.Likely an incorrect or invalid review comment.
README.md (1)
40-40: Video Generation feature addition looks good.The new Video Generation with Veo entry is well-documented with clear description and guide link.
docs/index.md (2)
40-40: Video Generation feature addition looks good.The new Video Generation with Veo entry is properly documented with clear description and guide link appropriate for the internal documentation structure.
44-57: Feature list expansion is comprehensive and well-structured.The expanded bullet list effectively documents all major features with proper relative paths for the docs directory structure.
docs/performance-optimization.md (2)
537-802: No action required — this section appears only once in the file.The search confirms only a single occurrence of the "## 🎥 Video Generation Performance Optimization" header at line 537. There is no duplication in the document. The AI-generated summary's claim of duplicate content is incorrect.
Likely an incorrect or invalid review comment.
811-811: No action needed — the Video Generation Guide link appears only once in the file at line 811. No duplication exists.docs/testing.md (3)
242-311: SDK test structure looks comprehensive.The TypeScript test examples cover key scenarios:
- Basic video generation from image
- Error handling for invalid input
- Audio support validation
The tests use appropriate assertions for Buffer data, media types, and metadata. The error test correctly validates that video generation without an image input throws
VIDEO_INVALID_INPUT.
313-343: CLI test examples are well-structured.The bash tests demonstrate:
- Basic video generation with file validation
ffprobeusage to verify valid video format- Configuration options (resolution, length, aspect ratio, audio)
- Error handling verification using grep
The use of
ffprobefor format validation is a solid approach for integration testing.
382-429: Integration test structure is well-designed.The bash script provides a complete end-to-end testing example:
- Proper environment setup for Vertex AI
- Basic video generation test with file existence validation
- HD video test with
ffproberesolution verification- Cleanup to remove test artifacts
- Error handling with
set -eThe 3-minute timeout (line 403) is appropriate given video generation typically takes longer than text generation.
docs/sdk/api-reference.md (3)
154-154: GenerateOptions extension is well-designed.The
outputconfiguration cleanly separates:
formatfor structured output (existing feature)modeto distinguish text vs. video generationvideooptions only when mode is "video"This design avoids confusion between different output types and keeps the API surface intuitive.
Also applies to: 171-177
296-331: Video generation example is clear and complete.The example demonstrates:
- Loading an image as input
- Configuring video options (resolution, duration, aspect ratio, audio)
- Saving the generated video
- Accessing metadata
The note about Vertex AI requirements and the reference to the feature guide provide helpful context for users. The example is consistent with the testing documentation.
182-189: VideoOutputOptions interface definition is correct but documentation has incomplete scope.The interface properly constrains options to Veo 3.1's supported values:
- Resolution limited to 720p/1080p ✓
- Length constrained to 4, 6, or 8 seconds ✓
- Aspect ratios for portrait/landscape ✓
- Audio toggle with sensible default ✓
Validation logic is comprehensive and working correctly.
However: The current documentation doesn't mention workflow-specific constraints. Per Google's Veo 3.1 docs, reference-image-to-video workflows may have restrictions (e.g., 8 seconds only, limited aspect ratios in some variants). If this feature is planned, update the documentation to clarify which options apply to which workflows.
f41140e to
17230f1
Compare
|
@coderabbitai Response for your nitpick comments:
|
|
Tip For best results, initiate chat on the files or code changes. @Rahul-2903-juspay, thank you for the clarification!
I appreciate you taking the time to explain the design decisions. The documentation looks comprehensive and well-structured! 🎉 |
6f8113a to
7679d47
Compare
|
@coderabbitai Check if this addresses issue #773 and all your previous comments are resolved |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 56961 🏁 Script executed: Length of output: 3088
✅ Issue
|
7679d47 to
03ee2d9
Compare
03ee2d9 to
ebec022
Compare
|
🎉 This PR is included in version 8.38.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Pull Request
Description
This PR adds proper usage and integration documentation for video generation throughout all services in neurolink.
Related Issues
Addresses #773
Type of Change
Motivation and Context
Adds proper documentation for new video generation feature
Breaking Changes
Testing
Test Coverage
Code Quality
Commit Message Format
Does your commit follow semantic commit conventions?
type(scope): descriptionDeployment Notes
Reviewer Checklist
For reviewers:
Pre-submission Checklist
Before submitting, ensure you have:
pnpm testpnpm buildpnpm run validate:alland all checks passSummary by CodeRabbit
New Features
Documentation
✏️ Tip: You can customize this high-level summary in your review settings.