Skip to content

Conversation

@yangxiaolang
Copy link
Collaborator

@yangxiaolang yangxiaolang commented Sep 1, 2025

Summary by CodeRabbit

  • Documentation

    • Added a comprehensive “How to Install and use Featureform” guide, including concepts, architecture, deployment steps, configuration, access methods, quickstart, examples, and troubleshooting.
  • Style

    • Updated global background color for improved readability.
    • Adjusted post list text sizing and added a wrapper class for more consistent styling.
    • Refined checkbox alignment and reduced label text emphasis for cleaner layout.
    • Tweaked Home Banner: smaller heading, lighter description emphasis, and updated image rendering.
    • Enhanced card titles’ presentation with styled headings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 1, 2025

Walkthrough

Adds a new Featureform solutions doc. Updates global styles and adds a post list wrapper class. Tweaks Checkbox alignment and label styles. Modifies HomeBanner to use site data, adjusts heading styles, and replaces the logo image with a direct image. Changes HomeContent Card titles to JSX nodes.

Changes

Cohort / File(s) Summary of changes
Documentation
docs/en/solutions/How_to_Install_and_use_Featureform.md
Adds a new, comprehensive installation and usage guide for Featureform, including concepts, architecture, deployment, configuration, quickstart, examples, and troubleshooting.
UI styling & list wrapper
styles/index.css, theme/components/PostList/index.tsx
Sets body background to rgb(247, 249, 252); adds .post-list .rp-text-2xl { font-size: 16px; }. Wraps PostList root in <div class="post-list"> to enable targeted styling.
Checkbox alignment
theme/components/Checkbox/index.tsx
Removes unused import. Changes label container from items-center to items-start. Adds !mt-1 and flex-shrink-0 to input. Removes font-medium from label text.
Home banner presentation
theme/components/HomeBanner/index.tsx
Imports useSite, reads siteData, logs pageData, siteData. Downgrades heading emphasis. Removes description emphasis. Replaces logo block with direct <img src={pageData.siteData.base + '180.png'} width=180>.
Card title prop as React node
theme/components/HomeContent/index.tsx
Passes Card titles as JSX (wrapped div with styling) instead of strings; public Card title type updated to React.ReactNode per summary.

Sequence Diagram(s)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • zlcnju
  • black89757

Poem

A nibble of docs, a sprinkle of style,
I hop through components, align them with a smile.
Titles grow richer, banners find their base,
Lists don new coats—such a tidy place.
Thump-thump, approve—then off I race! 🐇✨

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/filter-card-style

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/en/solutions/How_to_Install_and_use_Featureform.md (1)

1-773: Fix lint and formatting in docs/en/solutions/How_to_Install_and_use_Featureform.md

  • Add language identifiers to all code fences (e.g., bash, yaml, ```python).
  • Remove trailing colons from intermediate headings (e.g., “Error when executing apply:”).
  • Replace all “*” list markers with “-” for consistency.
  • Ensure list items are indented at most 2 spaces.
🧹 Nitpick comments (11)
styles/index.css (2)

57-59: Prefer theme var for background to preserve dark mode/theming

Hard-coding rgb may clash with theme. Use the theme bg variable with a fallback.

-body {
-  background-color: rgb(247, 249, 252);
-}
+body {
+  background-color: var(--rp-c-bg, rgb(247, 249, 252));
+}

61-63: Scope looks good; use rem and keep trailing semicolon for consistency

Minor polish: use rem to respect root scaling and add a trailing semicolon.

-.post-list .rp-text-2xl {
-  font-size: 16px
-}
+.post-list .rp-text-2xl {
+  font-size: 1rem; /* 16px */
+}
theme/components/HomeBanner/index.tsx (1)

1-1: Remove debug log and unused useSite hook; update import path
In theme/components/HomeBanner/index.tsx, replace the mixed import and drop the debug statements:

-import { useI18n, usePageData, useSite } from "@rspress/runtime";
+import { useI18n, usePageData } from "@rspress/core/runtime";-  const siteData = useSite();
-  console.log(pageData, siteData);
+  // removed debug log and unused useSite
docs/en/solutions/How_to_Install_and_use_Featureform.md (8)

122-126: Tighten phrasing: “API interfaces” → “APIs”; “HTTP API interfaces” → “HTTP APIs”.

Reduces tautology and improves clarity.

Apply this diff:

-   - Provides gRPC API interfaces
+   - Provides gRPC APIs
-   - Provides HTTP API interfaces to access metadata services
+   - Provides HTTP APIs to access metadata services
-   - Converts Metadata Service's gRPC interfaces to HTTP interfaces
+   - Converts Metadata Service's gRPC APIs to HTTP APIs

Also applies to: 164-167


179-191: Add languages to fenced code blocks (markdownlint MD040).

Annotate blocks as text/bash/yaml/python for proper rendering and linting.

Apply representative diffs (repeat for all unlabeled fences):

-```
+```text
 User → Dashboard
           ↓
    Ingress Controller (Nginx)
@@
-```
+```

-```
+```text
 Applying Run: amazed_volhard
@@
-```
+```

-```
+```text
 Features: [array([25.])] , Label: [False]
@@
-```
+```

-```
+```text
 Customer Result:
 [319.0]
-```
+```

-```
+```text
 "UNKNOWN:Error received from peer  {grpc_message:"resource SOURCE_VARIANT xxxx (xxx) has changed. Please use a new variant.", grpc_status:13}"
-```
+```

-```
+```text
 "UNKNOWN:Error received from peer  {grpc_message:"resource not found. LABEL_VARIANT xxxx (xxx) err: Key Not Found: LABEL_VARIANT__xxxxx__xxxx", grpc_status:5}"
-```
+```

-```
+```text
 transformation failed to complete: job failed while running .....
-```
+```

-```
+```text
 ....create table error: unknown command `HEXISTS` .....
-```
+```

-```
+```text
 Featureform cannot connect to the provider during health check: (REDIS_ONLINE - client_initialization) dial tcp ......
-```
+```

-```
+```text
 Featureform cannot connect to the provider during health check: (POSTGRES_OFFLINE - ping) dial tcp:
-```
+```

-```
+```text
 Featureform cannot connect to the provider during health check: (POSTGRES_OFFLINE - ping) pq: pg_hba.conf rejects connection ....
-```
+```

Also applies to: 594-616, 665-674, 704-707, 719-725, 727-733, 735-741, 743-749, 751-757, 759-765, 767-773


718-718: Remove trailing colons from headings (markdownlint MD026).

Keeps headings clean and linter-happy.

Apply this diff pattern on each heading:

-### 1. Error when executing apply:
+### 1. Error when executing apply

Also applies to: 726-726, 734-734, 742-742, 750-750, 758-758, 766-766


300-302: Normalize list indentation/style (markdownlint MD007/MD004).

Use “- ” consistently and 2-space continuation under list items.

I can push a formatting patch across these ranges if you want me to run markdownlint and auto-fix.

Also applies to: 402-406, 413-417, 723-724, 731-732, 739-740, 747-748, 755-756, 763-764


344-349: Access guidance: add NodePort example for non-LB clusters.

A one-liner showing how to get NodePort improves UX.

Apply this diff:

 This `Service` type is `LoadBalancer`. If there is no `LoadBalancer` controller in the environment to provide external IP, you can access it through `node IP` plus its `NodePort`.
+```bash
+# Example: find NodePort
+kubectl -n <ns> get svc application-name-ingress-nginx-controller -o jsonpath='{.spec.ports[?(@.port==80)].nodePort}{"\n"}'
+```

455-463: Variant guidance: add a concrete variant pattern to avoid collisions.

Readers benefit from a deterministic scheme (e.g., date or git short SHA).

Apply this diff:

 - **FEATUREFORM_VARIANT**: Since Featureform adopts an immutable API without providing delete and update interfaces, to re-execute, modify this value to a new one, then re-execute `source setup-env.sh`, otherwise errors may occur
+ - **FEATUREFORM_VARIANT**: Featureform APIs are immutable. To re-run safely, set a new variant (e.g., `demo-$(date +%Y%m%d%H%M)` or `demo-<git-short-sha>`) and `source setup-env.sh` again.

344-360: Call out SDK TLS limitation and production alternative.

You note client cert verification on ingress blocks SDK. Add a production-safe note (mutual TLS or internal LB).

Proposed addition after Line 358:

+In production, prefer one of:
+- Terminate TLS at an internal LoadBalancer and restrict access by network policy.
+- Expose a dedicated SDK endpoint with mTLS disabled but OAuth/OpenID auth enabled.
+- Use a private ingress with IP allowlists.

100-116: Link stability: prefer reference-style links for external docs.

Helps centralize URLs and avoid drift.

I can convert these to reference links at the bottom if you’d like.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between c0d8dc2 and add19b8.

⛔ Files ignored due to path filters (1)
  • docs/public/180.png is excluded by !**/*.png
📒 Files selected for processing (6)
  • docs/en/solutions/How_to_Install_and_use_Featureform.md (1 hunks)
  • styles/index.css (1 hunks)
  • theme/components/Checkbox/index.tsx (4 hunks)
  • theme/components/HomeBanner/index.tsx (3 hunks)
  • theme/components/HomeContent/index.tsx (2 hunks)
  • theme/components/PostList/index.tsx (2 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/en/solutions/How_to_Install_and_use_Featureform.md

[grammar] ~47-~47: There might be a mistake here.
Context: ...key or index for the data. For example: - Customer: User ID, Customer ID, etc. ...

(QB_NEW_EN)


[grammar] ~56-~56: There might be a mistake here.
Context: ... Values**: Input data for model training - Label Values: Target values that the m...

(QB_NEW_EN)


[style] ~65-~65: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ictions - Labels are the targets we want to predict - Training Sets organize fe...

(REP_WANT_TO_VB)


[grammar] ~104-~104: There might be a mistake here.
Context: ...effectively: ### Official Documentation - Main Documentation: [https://docs.feat...

(QB_NEW_EN)


[grammar] ~105-~105: There might be a mistake here.
Context: ...tation**: https://docs.featureform.com/ - Comprehensive introduction to Featurefor...

(QB_NEW_EN)


[grammar] ~106-~106: There might be a mistake here.
Context: ...eatureform's core concepts and workflows - Includes architecture design, deployment...

(QB_NEW_EN)


[grammar] ~107-~107: There might be a mistake here.
Context: ...n, deployment guides, and best practices - Provides common use cases and example co...

(QB_NEW_EN)


[grammar] ~110-~110: There might be a mistake here.
Context: ...ses and example code ### SDK References - Python SDK: [https://sdk.featureform.c...

(QB_NEW_EN)


[grammar] ~111-~111: There might be a mistake here.
Context: ...hon SDK**: https://sdk.featureform.com/ - Complete Python API reference documentat...

(QB_NEW_EN)


[grammar] ~112-~112: There might be a mistake here.
Context: ...plete Python API reference documentation - Supports local mode and hosted instances...

(QB_NEW_EN)


[grammar] ~113-~113: There might be a mistake here.
Context: ...Supports local mode and hosted instances - Includes detailed descriptions of all op...

(QB_NEW_EN)


[grammar] ~122-~122: There might be a mistake here.
Context: ...nts: ### Core Services 1. API Server - Provides gRPC API interfaces - Acts a...

(QB_NEW_EN)


[style] ~123-~123: This phrase is redundant (‘I’ stands for ‘interfaces’). Use simply “APIs”.
Context: ...s 1. API Server - Provides gRPC API interfaces - Acts as a gRPC gateway, forwarding...

(ACRONYM_TAUTOLOGY)


[grammar] ~123-~123: There might be a mistake here.
Context: ...rver** - Provides gRPC API interfaces - Acts as a gRPC gateway, forwarding reque...

(QB_NEW_EN)


[grammar] ~124-~124: There might be a mistake here.
Context: ...s to Metadata Service and Feature Server - Provides unified resource management and...

(QB_NEW_EN)


[grammar] ~127-~127: There might be a mistake here.
Context: ... interfaces externally 2. Coordinator - Monitors task changes in etcd - Coord...

(QB_NEW_EN)


[grammar] ~128-~128: There might be a mistake here.
Context: ...tor** - Monitors task changes in etcd - Coordinates task scheduling and executio...

(QB_NEW_EN)


[grammar] ~129-~129: There might be a mistake here.
Context: ...oordinates task scheduling and execution - Manages various Runners to execute speci...

(QB_NEW_EN)


[grammar] ~132-~132: There might be a mistake here.
Context: ...cute specific tasks 3. Feature Server - Provides feature services (online featur...

(QB_NEW_EN)


[grammar] ~133-~133: There might be a mistake here.
Context: ...feature queries, batch feature services) - Provides training data services (trainin...

(QB_NEW_EN)


[grammar] ~134-~134: There might be a mistake here.
Context: ... (training set data, column information) - Provides vector search functionality (su...

(QB_NEW_EN)


[grammar] ~144-~144: There might be a mistake here.
Context: ...n resources ### Data Storage 1. etcd - Stores configuration information and clu...

(QB_NEW_EN)


[grammar] ~145-~145: There might be a mistake here.
Context: ...figuration information and cluster state - Provides distributed locks and coordinat...

(QB_NEW_EN)


[grammar] ~148-~148: There might be a mistake here.
Context: ... coordination services 2. Meilisearch - Provides search functionality for featur...

(QB_NEW_EN)


[grammar] ~149-~149: There might be a mistake here.
Context: ... functionality for features and metadata - Supports full-text search and fuzzy matc...

(QB_NEW_EN)


[grammar] ~150-~150: There might be a mistake here.
Context: ...orts full-text search and fuzzy matching - Data source: Metadata Service automatica...

(QB_NEW_EN)


[grammar] ~155-~155: There might be a mistake here.
Context: ...oring and Observability 1. Prometheus - Collects system metrics and performance ...

(QB_NEW_EN)


[grammar] ~159-~159: There might be a mistake here.
Context: ...ry support for Dashboard 2. Dashboard - Provides web interface for viewing syste...

(QB_NEW_EN)


[grammar] ~160-~160: There might be a mistake here.
Context: ... web interface for viewing system status - Displays feature statistics, performance...

(QB_NEW_EN)


[grammar] ~161-~161: There might be a mistake here.
Context: ...rmance metrics, and resource information - Pure frontend page, only provides read-o...

(QB_NEW_EN)


[grammar] ~164-~164: There might be a mistake here.
Context: ...g functionality 3. Metadata Dashboard - Provides HTTP API interfaces to access m...

(QB_NEW_EN)


[style] ~165-~165: This phrase is redundant (‘I’ stands for ‘interfaces’). Use simply “APIs”.
Context: ...Metadata Dashboard** - Provides HTTP API interfaces to access metadata services - Conver...

(ACRONYM_TAUTOLOGY)


[grammar] ~165-~165: There might be a mistake here.
Context: ...I interfaces to access metadata services - Converts Metadata Service's gRPC interfa...

(QB_NEW_EN)


[grammar] ~166-~166: There might be a mistake here.
Context: ...etadata services - Converts Metadata Service's gRPC interfaces to HTTP interfaces -...

(QB_NEW_EN)


[grammar] ~166-~166: There might be a mistake here.
Context: ...ice's gRPC interfaces to HTTP interfaces - Provides resource queries, search, and l...

(QB_NEW_EN)


[grammar] ~167-~167: There might be a mistake here.
Context: ...ent functionality for Dashboard frontend - Supports source data preview and file st...

(QB_NEW_EN)


[grammar] ~172-~172: There might be a mistake here.
Context: ... Access 1. Ingress Controller (Nginx) - Manages external traffic routing and loa...

(QB_NEW_EN)


[grammar] ~299-~299: There might be a mistake here.
Context: ...o obtain the Image Repository Address: - In the Administrator view, check the `...

(QB_NEW_EN)


[grammar] ~348-~348: There might be a mistake here.
Context: ...ancer` controller in the environment to provide external IP, you can access it through ...

(QB_NEW_EN)


[grammar] ~358-~358: There might be a mistake here.
Context: ...API access addresses, since ingress has enabled client certificate verification mechani...

(QB_NEW_EN)


[grammar] ~376-~376: There might be a mistake here.
Context: ...s environment variables used by the demo - [load-data.py](/featureform/quickstart/lo...

(QB_NEW_EN)


[grammar] ~377-~377: There might be a mistake here.
Context: ...ing to PostgreSQL and executing data.sql - [data.sql](/featureform/quickstart/data.s...

(QB_NEW_EN)


[grammar] ~378-~378: There might be a mistake here.
Context: ... database dump file containing demo data - [definitions.py](/featureform/quickstart/...

(QB_NEW_EN)


[grammar] ~379-~379: There might be a mistake here.
Context: ...) - Featureform resource definition file - [training.py](/featureform/quickstart/tra...

(QB_NEW_EN)


[grammar] ~380-~380: There might be a mistake here.
Context: ...uickstart/training.py) - Training script - [serving.py](/featureform/quickstart/serv...

(QB_NEW_EN)


[grammar] ~381-~381: There might be a mistake here.
Context: .../quickstart/serving.py) - Serving script - [requirements.txt](/featureform/quickstar...

(QB_NEW_EN)


[grammar] ~412-~412: There might be a mistake here.
Context: ...encies Python Version Requirements: - Supports Python 3.7 - 3.10 ```bash pip ...

(QB_NEW_EN)


[grammar] ~471-~471: There might be a mistake here.
Context: ...thon load-data.py ``` This script will: - Connect to the PostgreSQL database - Cre...

(QB_NEW_EN)


[grammar] ~621-~621: There might be a mistake here.
Context: ...emonstrates Featureform's core concepts:** - Providers: Data source connectors (Pos...

(QB_NEW_EN)


[grammar] ~622-~622: There might be a mistake here.
Context: ...ta source connectors (PostgreSQL, Redis) - Entities: Business objects (Customer) ...

(QB_NEW_EN)


[grammar] ~623-~623: There might be a mistake here.
Context: ...Entities*: Business objects (Customer) - Features: Inputs for machine learning ...

(QB_NEW_EN)


[grammar] ~624-~624: There might be a mistake here.
Context: ...chine learning models (avg_transactions) - Labels: Training targets for models (f...

(QB_NEW_EN)


[grammar] ~625-~625: There might be a mistake here.
Context: ...Training targets for models (fraudulent) - Training Sets: Combinations of feature...

(QB_NEW_EN)


[grammar] ~626-~626: There might be a mistake here.
Context: ...s**: Combinations of features and labels - Variants: Support for multi-version ma...

(QB_NEW_EN)


[grammar] ~658-~658: There might be a mistake here.
Context: ...eak ``` Script Function Description: - Connect to Featureform service - Get the...

(QB_NEW_EN)


[grammar] ~698-~698: There might be a mistake here.
Context: ...at) ``` Script Function Description: - Connect to Featureform service - Query t...

(QB_NEW_EN)


[grammar] ~709-~709: There might be a mistake here.
Context: ...19.0] ``` Real Application Scenarios: - When new customers make transactions, qu...

(QB_NEW_EN)


[grammar] ~747-~747: There might be a mistake here.
Context: ...`` - Cause: Redis is incorrectly using Sentinel access address - *Solution...

(QB_NEW_EN)


[grammar] ~748-~748: There might be a mistake here.
Context: ...ntinel access address - Solution: Replace Redis instance or update Redis access a...

(QB_NEW_EN)


[grammar] ~748-~748: There might be a mistake here.
Context: ...Solution: Replace Redis instance or update Redis access address ### 5. After appl...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
docs/en/solutions/How_to_Install_and_use_Featureform.md

179-179: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


300-300: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


402-402: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


402-402: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


413-413: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


594-594: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


665-665: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


704-704: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


718-718: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


719-719: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


723-723: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


724-724: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


726-726: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


727-727: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


731-731: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


732-732: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


734-734: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


735-735: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


739-739: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


740-740: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


742-742: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


743-743: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


747-747: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


748-748: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


750-750: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


751-751: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


755-755: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


756-756: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


758-758: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


759-759: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


763-763: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


764-764: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


766-766: Trailing punctuation in heading
Punctuation: ':'

(MD026, no-trailing-punctuation)


767-767: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


771-771: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


772-772: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

🔇 Additional comments (4)
theme/components/PostList/index.tsx (1)

30-30: LGTM: dedicated wrapper class

The scoped wrapper enables targeted styling without leaking globally.

theme/components/HomeContent/index.tsx (1)

159-160: Provide @rspress/core/theme version
Please share which version of @rspress/core/theme you’re using (e.g. the entry from your package.json) so we can confirm that Card.title is typed as React.ReactNode. Until then, we can’t be sure the prop will accept a JSX element without type or runtime errors.

theme/components/Checkbox/index.tsx (1)

31-33: LGTM: top-aligning checkbox + label

Improves alignment for multi-line labels.

docs/en/solutions/How_to_Install_and_use_Featureform.md (1)

1-8: Use the correct front-matter key for product versions
Rename ProductsVersion: to the theme’s expected key (e.g. productsVersion or productVersions) to match other docs—confirm with the site generator’s front-matter spec.

Comment on lines +199 to +203
Use the violet command to publish to the platform repository:
```bash
violet push --platform-address=platform-access-address --platform-username=platform-admin --platform-password=platform-admin-password featureform.amd64.v0.12.1-1.tgz
```

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Don’t put credentials on the command line; prefer env vars or an interactive prompt.

CLI args leak via shell history and process lists. Use env and a prompt for the password.

Apply this diff:

-```bash
-violet push --platform-address=platform-access-address --platform-username=platform-admin --platform-password=platform-admin-password featureform.amd64.v0.12.1-1.tgz
-```
+```bash
+export ALAUDA_ADDR="platform-access-address"
+export ALAUDA_USER="platform-admin"
+read -s -p "Platform password: " ALAUDA_PASS; echo
+violet push --platform-address="$ALAUDA_ADDR" --platform-username="$ALAUDA_USER" --platform-password="$ALAUDA_PASS" featureform.amd64.v0.12.1-1.tgz
+unset ALAUDA_PASS
+```
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_Install_and_use_Featureform.md around lines 199-203,
the example command passes platform credentials on the command line (which can
leak via shell history/process lists); update the docs to show using environment
variables and an interactive password prompt instead: set address and username
into exported env vars, read the password securely into a temporary env var via
a silent prompt, run the violet push command referencing those env vars, then
unset the password variable to avoid leaving credentials in the environment.

Comment on lines +248 to +252
1. The path specified in spec.local.path must exist and be set to 777 permissions, for example:
```bash
mkdir -p /var/lib/etcd-1
chmod 777 /var/lib/etcd-1
```
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid suggesting chmod 777 on host paths; use least-privilege perms and ownership.

777 is a security risk and can break compliance. Recommend 750 (or 700) and set ownership to the etcd run user (e.g., 1001 for Bitnami).

Apply this diff:

     ```bash
     mkdir -p /var/lib/etcd-1
-    chmod 777 /var/lib/etcd-1
+    chmod 750 /var/lib/etcd-1
+    # Optional: align ownership with the etcd container user/group (adjust UID/GID as needed)
+    chown -R 1001:1001 /var/lib/etcd-1
     ```
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_Install_and_use_Featureform.md around lines 248-252,
avoid recommending chmod 777 on host paths; change the guidance to use
least-privilege permissions (e.g., chmod 750 or 700) and set ownership to the
etcd run user/group—update the example to create the directory, set restrictive
permissions, and add an optional chown to the etcd container UID/GID (e.g.,
1001:1001) so the host path is secure and accessible by the container user.

Comment on lines +402 to +409
* Create `Redis` in `standalone` mode:

1. When creating a `Redis` instance, select `Redis Sentinel` for `Architecture`.

2. After setting all parameters, switch to `YAML` mode, change `spec.arch` to `standalone`, then click the `Create` button.

3. After creation, switch to the `Alauda Container Platform` view and look for the `Service` named `rfr-<Redis instance name>-read-write`, which is the access address for this Redis instance.

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Clarify Redis “Sentinel” vs “standalone” steps (they contradict).

Step 1 says select Sentinel; Step 2 immediately changes to standalone. This confuses readers.

Apply this rewrite:

-  * Create `Redis` in `standalone` mode:
-    1. When creating a `Redis` instance, select `Redis Sentinel` for `Architecture`.
-    2. After setting all parameters, switch to `YAML` mode, change `spec.arch` to `standalone`, then click the `Create` button.
+  * Create `Redis` in `standalone` mode:
+    1. If the UI offers an `Architecture` selector, choose `standalone`.
+       If it does not, create the instance and then switch to `YAML` mode to set:
+       `spec.arch: standalone`.
+    2. Save/apply the change to recreate the instance as standalone.
     3. After creation, switch to the `Alauda Container Platform` view and look for the `Service` named `rfr-<Redis instance name>-read-write`, which is the access address for this Redis instance.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* Create `Redis` in `standalone` mode:
1. When creating a `Redis` instance, select `Redis Sentinel` for `Architecture`.
2. After setting all parameters, switch to `YAML` mode, change `spec.arch` to `standalone`, then click the `Create` button.
3. After creation, switch to the `Alauda Container Platform` view and look for the `Service` named `rfr-<Redis instance name>-read-write`, which is the access address for this Redis instance.
* Create `Redis` in `standalone` mode:
1. If the UI offers an `Architecture` selector, choose `standalone`.
If it does not, create the instance and then switch to `YAML` mode to set:
`spec.arch: standalone`.
2. Save/apply the change to recreate the instance as standalone.
3. After creation, switch to the `Alauda Container Platform` view and look for the `Service` named `rfr-<Redis instance name>-read-write`, which is the access address for this Redis instance.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

402-402: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


402-402: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

Comment on lines +411 to +415

**Python Version Requirements:**
- Supports Python 3.7 - 3.10

```bash
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Re-verify Python version support (3.7–3.10 may be stale).

Upstream SDK support may have moved (EOL for 3.7; possible 3.11/3.12 support).


🌐 Web query:

What Python versions are currently supported by the Featureform Python SDK?

💡 Result:

The Featureform Python SDK supports Python 3.9 through 3.12. [1][2]

Sources:

  • PyPI package metadata showing "Python 3.9-3.12". [1]
  • Featureform SDK installation docs (requirements list). [2]

Update Python version requirements to match SDK (3.9–3.12). Change the entry in docs/en/solutions/How_to_Install_and_use_Featureform.md (lines 411–415) from “3.7 – 3.10” to “3.9 – 3.12.”

🧰 Tools
🪛 LanguageTool

[grammar] ~412-~412: There might be a mistake here.
Context: ...encies Python Version Requirements: - Supports Python 3.7 - 3.10 ```bash pip ...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)

413-413: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

🤖 Prompt for AI Agents
In docs/en/solutions/How_to_Install_and_use_Featureform.md around lines 411 to
415, update the "Python Version Requirements" entry from "Supports Python 3.7 -
3.10" to "Supports Python 3.9 - 3.12" so the docs match the SDK; edit the text
on those lines to replace the version range accordingly and ensure any
surrounding wording/formatting remains intact.

Comment on lines +586 to +589
# Connect to Featureform server and apply all definitions
client = ff.Client(host=os.getenv("FEATUREFORM_HOST", "localhost:7878"), insecure=True)
client.apply()
```
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Default to secure client; gate “insecure” by env for local only.

Avoid documenting insecure=True as default. Make it opt-in via env.

Apply this diff:

-# Connect to Featureform server and apply all definitions
-client = ff.Client(host=os.getenv("FEATUREFORM_HOST", "localhost:7878"), insecure=True)
+# Connect to Featureform server and apply all definitions
+# Set FF_INSECURE=true only for local/dev if the server lacks TLS.
+client = ff.Client(
+    host=os.getenv("FEATUREFORM_HOST", "localhost:7878"),
+    insecure=os.getenv("FF_INSECURE", "false").lower() == "true"
+)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Connect to Featureform server and apply all definitions
client = ff.Client(host=os.getenv("FEATUREFORM_HOST", "localhost:7878"), insecure=True)
client.apply()
```
# Connect to Featureform server and apply all definitions
# Set FF_INSECURE=true only for local/dev if the server lacks TLS.
client = ff.Client(
host=os.getenv("FEATUREFORM_HOST", "localhost:7878"),
insecure=os.getenv("FF_INSECURE", "false").lower() == "true"
)
client.apply()
🤖 Prompt for AI Agents
In docs/en/solutions/How_to_Install_and_use_Featureform.md around lines 586 to
589, the example currently enables an insecure client by default; change the
example to create a secure client by default and make insecure mode opt‑in via
an environment variable (e.g. FEATUREFORM_INSECURE) so local use can opt into
insecure transport. Update the snippet to read the env var, parse it as a
boolean (treat "1","true","yes" as true), pass insecure only when that env var
is true, and add a short comment noting insecure mode is for local/dev only.

Comment on lines +64 to 66
text-l
${disabled ? "text-gray-500" : "text-black-700"}
transition-colors duration-200
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix invalid Tailwind classes

  • text-l is not a valid Tailwind size (use text-base or text-lg).
  • text-black-700 is invalid; use text-gray-700 or text-neutral-700.
-              text-l
-              ${disabled ? "text-gray-500" : "text-black-700"}
+              text-base
+              ${disabled ? "text-gray-500" : "text-gray-700"}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
text-l
${disabled ? "text-gray-500" : "text-black-700"}
transition-colors duration-200
text-base
${disabled ? "text-gray-500" : "text-gray-700"}
transition-colors duration-200
🤖 Prompt for AI Agents
In theme/components/Checkbox/index.tsx around lines 64 to 66, the class string
uses invalid Tailwind utilities ("text-l" and "text-black-700"); replace
"text-l" with a valid size (e.g., "text-base" or "text-lg") and replace
"text-black-700" with a valid color (e.g., "text-gray-700" or
"text-neutral-700"), keeping the disabled conditional logic intact so the final
class concatenation still yields the disabled color when appropriate.

</p>
</div>
{/* <img width={240} src={logo}></img> */}
<img width={180} src={`${pageData.siteData.base}180.png`}></img>
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Harden base path join and add alt text

Avoid double/missing slashes and add alt for accessibility.

-      <img width={180} src={`${pageData.siteData.base}180.png`}></img>
+      <img
+        width={180}
+        alt="Knowledge logo"
+        src={`${pageData.siteData.base.replace(/\\/?$/, "/")}180.png`}
+      />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<img width={180} src={`${pageData.siteData.base}180.png`}></img>
<img
width={180}
alt="Knowledge logo"
src={`${pageData.siteData.base.replace(/\/?$/, "/")}180.png`}
/>
🤖 Prompt for AI Agents
In theme/components/HomeBanner/index.tsx around line 36, the img src is built by
naive string concatenation which can produce double or missing slashes
(src={`${pageData.siteData.base}180.png`}) and the img lacks an alt attribute;
update the src construction to robustly join the base path and filename (e.g.,
trim trailing slash from base or ensure exactly one slash between base and
"180.png", or use a URL/utility join function) and add a descriptive alt
attribute for accessibility (e.g., alt="Site logo" or appropriate text); also
make the img element self-closing and preserve the width prop.

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.

2 participants