Skip to content

Conversation

@sangeethailango
Copy link
Member

@sangeethailango sangeethailango commented Jan 6, 2026

Description

  • Added getting_started_checklist, tips, explored_features in the WorkspaceMember table for the new product tour.
  • Added is_password_reset_required in the User table.
  • Added notification_view_mode in the Profile table.

Summary by CodeRabbit

  • Chores
    • Extended system infrastructure with new data fields for storing onboarding progress, tips, and feature exploration data.

✏️ Tip: You can customize this high-level summary in your review settings.

Summary by CodeRabbit

  • New Features
    • Introduced getting started checklist to help workspace members onboard
    • Added tips system to guide users through features
    • Enabled tracking of explored features
    • Added notification view preferences with full and compact display options
    • Implemented password reset requirement tracking for accounts

✏️ Tip: You can customize this high-level summary in your review settings.

@sangeethailango sangeethailango added 🔄migrations Contains Migration changes requires approval labels Jan 6, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 6, 2026

📝 Walkthrough

Walkthrough

Three database models receive new JSON and Boolean field additions: WorkspaceMember gains getting_started_checklist, tips, and explored_features fields; User gains is_password_reset_required; Profile gains notification_view_mode with FULL/Compact choices. A corresponding Django migration applies these schema changes.

Changes

Cohort / File(s) Summary
WorkspaceMember Model Enhancements
apps/api/plane/db/models/workspace.py
Added three JSONField attributes to WorkspaceMember: getting_started_checklist, tips, and explored_features, each with empty dict defaults.
User & Profile Model Enhancements
apps/api/plane/db/models/user.py
Added is_password_reset_required BooleanField to User model. Introduced NotificationViewMode enum with FULL/Compact choices in Profile class and added notification_view_mode field using this enum.
Database Migration
apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py
Django schema migration applying field additions across three models: Profile, User, and WorkspaceMember. Contains five new field declarations with appropriate types and defaults.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 Whiskers twitch with glee,
New fields bloom like clover seed,
Checklist, tips, and features three—
Data gardens planted free,
Schema grows precisely, indeed! 🌱

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title directly summarizes the main change: adding three fields (getting_started_checklist, tips, explored_features) to the WorkspaceMember table via migration, which matches the core content of the changeset.
Description check ✅ Passed The PR description covers the main changes but lacks details on Type of Change, Test Scenarios, and References sections from the template.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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

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

@sangeethailango sangeethailango changed the title migration: added getting_started_checklist and tips field for product tour migration: added getting_started_checklist, tips, trial on workspace member table Jan 7, 2026
@sangeethailango sangeethailango changed the title migration: added getting_started_checklist, tips, trial on workspace member table migration: added getting_started_checklist, tips, trial fields on the workspace member table Jan 7, 2026
@sangeethailango sangeethailango changed the title migration: added getting_started_checklist, tips, trial fields on the workspace member table migration: added getting_started_checklist, tips, explored_feature fields on the workspace member table Jan 7, 2026
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: 1

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f94b9a6 and 427a894.

📒 Files selected for processing (2)
  • apps/api/plane/db/migrations/0114_workspacemember_explored_features_and_more.py
  • apps/api/plane/db/models/workspace.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/api/plane/db/models/workspace.py
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: dheeru0198
Repo: makeplane/plane PR: 8339
File: apps/api/plane/db/migrations/0113_webhook_version.py:7-14
Timestamp: 2025-12-29T08:58:46.563Z
Learning: In the Plane codebase, when adding product tour or onboarding fields via migrations, it's intentional to set existing records to `True` (completed) while having the model default to `False` for new records. This ensures existing users don't see tours they don't need.
📚 Learning: 2025-12-23T14:18:32.899Z
Learnt from: dheeru0198
Repo: makeplane/plane PR: 8339
File: apps/api/plane/db/models/api.py:35-35
Timestamp: 2025-12-23T14:18:32.899Z
Learning: Django REST Framework rate limit strings are flexible: only the first character of the time unit matters. Acceptable formats include: "60/s", "60/sec", "60/second" (all equivalent), "60/m", "60/min", "60/minute" (all equivalent), "60/h", "60/hr", "60/hour" (all equivalent), and "60/d", "60/day" (all equivalent). Abbreviations like "min" are valid and do not need to be changed to "minute". Apply this guidance to any Python files in the project that configure DRF throttling rules.

Applied to files:

  • apps/api/plane/db/migrations/0114_workspacemember_explored_features_and_more.py
🧬 Code graph analysis (1)
apps/api/plane/db/migrations/0114_workspacemember_explored_features_and_more.py (1)
apps/api/plane/utils/exporters/schemas/base.py (1)
  • JSONField (127-140)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Build packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (1)
apps/api/plane/db/migrations/0114_workspacemember_explored_features_and_more.py (1)

6-28: LGTM! Migration structure is correct.

The migration is well-formed with appropriate field types and defaults. The use of default=dict for JSONField is correct in Django migrations.

@sangeethailango sangeethailango changed the title migration: added getting_started_checklist, tips, explored_feature fields on the workspace member table [WEB-5890] migration: added getting_started_checklist, tips, explored_feature fields on the workspace member table Jan 13, 2026
@makeplane
Copy link

makeplane bot commented Jan 13, 2026

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

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: 0

🧹 Nitpick comments (1)
apps/api/plane/db/models/user.py (1)

228-230: Consider reducing max_length for tighter storage.

The field only stores "full" or "compact" (max 7 characters), but max_length=255 is specified. A smaller value like max_length=20 would be more precise while still allowing headroom for future values.

This is a minor optimization and not blocking.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 427a894 and ef64d1a.

📒 Files selected for processing (2)
  • apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py
  • apps/api/plane/db/models/user.py
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: dheeru0198
Repo: makeplane/plane PR: 8339
File: apps/api/plane/db/migrations/0113_webhook_version.py:7-14
Timestamp: 2025-12-29T08:58:46.563Z
Learning: In the Plane codebase, when adding product tour or onboarding fields via migrations, it's intentional to set existing records to `True` (completed) while having the model default to `False` for new records. This ensures existing users don't see tours they don't need.
📚 Learning: 2025-12-29T08:58:46.563Z
Learnt from: dheeru0198
Repo: makeplane/plane PR: 8339
File: apps/api/plane/db/migrations/0113_webhook_version.py:7-14
Timestamp: 2025-12-29T08:58:46.563Z
Learning: In the Plane codebase, when adding product tour or onboarding fields via migrations, it's intentional to set existing records to `True` (completed) while having the model default to `False` for new records. This ensures existing users don't see tours they don't need.

Applied to files:

  • apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py
📚 Learning: 2025-12-23T14:18:32.899Z
Learnt from: dheeru0198
Repo: makeplane/plane PR: 8339
File: apps/api/plane/db/models/api.py:35-35
Timestamp: 2025-12-23T14:18:32.899Z
Learning: Django REST Framework rate limit strings are flexible: only the first character of the time unit matters. Acceptable formats include: "60/s", "60/sec", "60/second" (all equivalent), "60/m", "60/min", "60/minute" (all equivalent), "60/h", "60/hr", "60/hour" (all equivalent), and "60/d", "60/day" (all equivalent). Abbreviations like "min" are valid and do not need to be changed to "minute". Apply this guidance to any Python files in the project that configure DRF throttling rules.

Applied to files:

  • apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py
  • apps/api/plane/db/models/user.py
🧬 Code graph analysis (1)
apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py (1)
apps/api/plane/utils/exporters/schemas/base.py (2)
  • BooleanField (97-105)
  • JSONField (127-140)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (5)
apps/api/plane/db/models/user.py (2)

87-87: LGTM!

The field follows the existing naming convention and is logically placed with other is_* boolean fields.


195-198: LGTM!

Clean implementation using Django's TextChoices pattern. Inner class placement within Profile is appropriate.

apps/api/plane/db/migrations/0116_workspacemember_explored_features_and_more.py (3)

6-10: LGTM!

Migration structure and dependencies are correctly defined.


23-37: Verify if existing workspace members should have pre-populated tour data.

Based on learnings from the Plane codebase, when adding product tour or onboarding fields, existing records are typically set to a "completed" state so existing users don't see tours they don't need.

The current migration adds these fields with default=dict, meaning both new and existing workspace members will have empty dictionaries. If existing members should skip the tour, consider adding a RunPython data migration to pre-populate these fields for existing records.

Please confirm whether existing workspace members should:

  1. See the new product tour (current behavior with empty dict), or
  2. Skip the tour (would require a data migration to populate completed state)

13-22: LGTM!

The notification_view_mode and is_password_reset_required field additions are correctly defined with appropriate defaults.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔄migrations Contains Migration changes ready to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants