Skip to content

Conversation

@rudransh-shrivastava
Copy link
Collaborator

Resolves #2569

Proposed change

  • add leaders field.

Checklist

  • I've read and followed the contributing guidelines.
  • I've run make check-test locally; all checks and tests passed.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 11, 2025

Summary by CodeRabbit

  • New Features

    • Added a new leaders field to Chapter and Project endpoints, displaying associated leader information as a list.
  • Tests

    • Updated tests to verify the new leaders field is properly populated and returned via the API.

Walkthrough

Added a new leaders: list[str] field and corresponding static resolver resolve_leaders(obj) to ChapterDetail and ProjectDetail; tests updated to include leaders_raw on mock ORM objects and to assert the serialized leaders values.

Changes

Cohort / File(s) Summary
Schema: Chapter & Project
backend/apps/api/rest/v0/chapter.py, backend/apps/api/rest/v0/project.py
Added leaders: list[str] field to ChapterDetail and ProjectDetail. Added @staticmethod def resolve_leaders(obj) returning obj.leaders_raw.
Tests: Chapter & Project
backend/tests/apps/api/rest/v0/chapter_test.py, backend/tests/apps/api/rest/v0/project_test.py
Mock ORM objects now set leaders_raw (e.g., ["Alice","Bob"] in tests). Tests updated to assert serialized chapter.leaders and project.leaders match leaders_raw.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Changes are small and homogeneous across two schema classes and their tests.
  • Pay attention to: correct typing/serialization for the new field and that leaders_raw is present on ORM mocks.

Suggested reviewers

  • kasya
  • arkid15r

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: extending the chapter and project API endpoints with a new leaders field.
Description check ✅ Passed The description is related to the changeset, indicating the addition of a leaders field and referencing the linked issue #2569.
Linked Issues check ✅ Passed The PR successfully implements the requested feature by adding leaders field to both chapter and project endpoints with proper resolvers.
Out of Scope Changes check ✅ Passed All changes are directly related to adding the leaders field to chapter and project endpoints as specified in issue #2569, with no out-of-scope modifications.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4904574 and 2dec113.

📒 Files selected for processing (2)
  • backend/tests/apps/api/rest/v0/chapter_test.py (1 hunks)
  • backend/tests/apps/api/rest/v0/project_test.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • backend/tests/apps/api/rest/v0/project_test.py
  • backend/tests/apps/api/rest/v0/chapter_test.py
⏰ 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: CodeQL (javascript-typescript)

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.

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 (2)
backend/tests/apps/api/rest/v0/chapter_test.py (1)

35-35: Consider testing with populated leaders.

The test only verifies the empty list case. Add a test case with actual leader names to ensure the resolver correctly maps leaders_raw to the leaders field.

Example test data:

{
    ...
    "leaders_raw": ["Alice Smith", "Bob Jones"],
}

Then assert:

assert chapter.leaders == ["Alice Smith", "Bob Jones"]
backend/tests/apps/api/rest/v0/project_test.py (1)

35-35: Consider testing with populated leaders.

Similar to the chapter test, consider adding a test case with actual leader names to ensure the resolver correctly maps leaders_raw to the leaders field.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4d33977 and 4904574.

📒 Files selected for processing (4)
  • backend/apps/api/rest/v0/chapter.py (1 hunks)
  • backend/apps/api/rest/v0/project.py (1 hunks)
  • backend/tests/apps/api/rest/v0/chapter_test.py (1 hunks)
  • backend/tests/apps/api/rest/v0/project_test.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
backend/tests/apps/api/rest/v0/project_test.py (1)
backend/apps/api/rest/v0/project.py (1)
  • ProjectDetail (39-48)
backend/apps/api/rest/v0/chapter.py (2)
backend/apps/owasp/api/internal/nodes/common.py (1)
  • leaders (19-21)
backend/apps/api/rest/v0/project.py (1)
  • resolve_leaders (46-48)
backend/apps/api/rest/v0/project.py (2)
backend/apps/owasp/api/internal/nodes/common.py (1)
  • leaders (19-21)
backend/apps/api/rest/v0/chapter.py (1)
  • resolve_leaders (45-47)
backend/tests/apps/api/rest/v0/chapter_test.py (2)
backend/apps/api/rest/v0/chapter.py (1)
  • ChapterDetail (37-47)
backend/apps/owasp/api/internal/nodes/common.py (1)
  • leaders (19-21)
⏰ 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). (4)
  • GitHub Check: Run backend tests
  • GitHub Check: Run frontend e2e tests
  • GitHub Check: Run frontend unit tests
  • GitHub Check: CodeQL (javascript-typescript)
🔇 Additional comments (4)
backend/tests/apps/api/rest/v0/chapter_test.py (1)

42-42: LGTM!

The assertion correctly validates that the leaders field is populated from leaders_raw.

backend/tests/apps/api/rest/v0/project_test.py (1)

42-42: LGTM!

The assertion correctly validates that the leaders field is populated from leaders_raw.

backend/apps/api/rest/v0/chapter.py (1)

41-47: No issues found. The leaders_raw attribute exists.

The ChapterDetail.resolve_leaders() method safely accesses obj.leaders_raw because the Chapter model inherits this attribute from its base class RepositoryBasedEntityModel. The attribute is defined as a models.JSONField in backend/apps/owasp/models/common.py (line 56), and multiple tests and management commands confirm it is properly accessible at runtime.

backend/apps/api/rest/v0/project.py (1)

43-48: The code is correct—no changes needed.

The ProjectDetail.resolve_leaders() method correctly accesses obj.leaders_raw, which is a valid model field inherited from RepositoryBasedEntityModel. The Project class inherits from RepositoryBasedEntityModel, where leaders_raw is defined as a models.JSONField() at line 56 of backend/apps/owasp/models/common.py. The resolver will not raise an AttributeError at runtime.

Likely an incorrect or invalid review comment.

@sonarqubecloud
Copy link

@staticmethod
def resolve_leaders(obj):
"""Resolve leaders."""
return obj.leaders_raw
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@arkid15r Should I use EntityMember instead of leaders_raw?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Yes, we need to migrate to the EntityMember data

// please ignore the next comments -- I need to check something w/ coderabbit

Copy link
Collaborator

Choose a reason for hiding this comment

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

@coderabbitai suggest 10 good first issues for backend and frontend parts of OWASP Nest. They should be relevant and easy to implement (1-3 points). Create just a single issue with the suggestions -- don't create issues for each suggestion.

Copy link
Contributor

Choose a reason for hiding this comment

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Find TODO comments in the codebase
echo "=== TODO Comments ==="
rg -n "TODO|FIXME|XXX" --type py --type ts --type tsx -C2 | head -100

echo ""
echo "=== Backend API Structure ==="
# Check for API endpoints without tests
fd -e py . backend/apps/api/rest/v0/ -x basename

echo ""
echo "=== Frontend Components Without Tests ==="
# Check frontend structure
fd -t d . frontend/src/components | head -20

echo ""
echo "=== Missing Docstrings in Backend ==="
# Look for functions without docstrings
rg -n "^\s*def [a-z_]+\(" backend/apps --type py -A1 | grep -v '"""' | head -50

echo ""
echo "=== Test Files ==="
# Check test coverage structure
fd test backend/tests/apps/api/rest/v0/ -x basename

Length of output: 2510


🏁 Script executed:

#!/bin/bash

echo "=== Backend Models Structure ==="
# Check models for potential improvements
fd -e py . backend/apps/owasp/models/ -x basename

echo ""
echo "=== GraphQL Queries ==="
fd -e py . backend/apps/owasp/graphql/queries/ -x basename

echo ""
echo "=== Frontend Pages ==="
fd -t f . frontend/src/app -e tsx -e ts | head -20

echo ""
echo "=== Check for inconsistent error handling ==="
rg -n "except.*:" backend/apps --type py | head -30

echo ""
echo "=== Check for print statements (should use logging) ==="
rg -n "print\(" backend/ --type py | head -20

Length of output: 6699


🏁 Script executed:

#!/bin/bash

echo "=== API Endpoints ==="
rg -n "@router\.(get|post|put|delete|patch)" backend/apps/api/rest/v0/ --type py

echo ""
echo "=== Missing type hints ==="
rg -n "def [a-z_]+\([^)]*\):" backend/apps/api/rest/v0/ --type py | grep -v " -> " | head -20

echo ""
echo "=== Frontend TypeScript files without proper typing ==="
rg -n ": any" frontend/src --type tsx --type ts | head -20

echo ""
echo "=== Check for hardcoded strings that should be constants ==="
rg -n "HTTPStatus\." backend/apps/api/rest/v0/ --type py | head -20

Length of output: 3842



---

🏁 Script executed:

#!/bin/bash

Create a GitHub issue with 10 good first issue suggestions

gh issue create
--title "Good First Issues: 10 Beginner-Friendly Tasks for Backend & Frontend"
--body "This issue contains a curated list of 10 good first issues for new contributors to OWASP Nest. Each task is estimated at 1-3 story points and is designed to be beginner-friendly while providing value to the project.

Backend Issues (5)

1. Add Return Type Hints to API Resolver Methods

Estimated effort: 1 point
Files: `backend/apps/api/rest/v0/chapter.py`, `project.py`, `committee.py`

Several static resolver methods in API schemas are missing return type hints. For example:

  • `resolve_key(obj)` should be `resolve_key(obj) -> str`
  • `resolve_leaders(obj)` should be `resolve_leaders(obj) -> list[str]`

This improves code clarity and helps with IDE autocomplete.


2. Replace print() with Proper Logging in Management Commands

Estimated effort: 2 points
Files: Various management commands in `backend/apps/owasp/management/commands/`

Multiple management commands use `print()` statements instead of proper logging:

  • `owasp_scrape_projects.py`
  • `owasp_scrape_chapters.py`
  • `owasp_scrape_committees.py`
  • `owasp_enrich_projects.py`
  • `slack_sync_messages.py`

Replace these with appropriate logger calls (`logger.info()`, `logger.debug()`, etc.).


3. Add Docstrings to Sitemap View Methods

Estimated effort: 2 points
Files: `backend/apps/sitemap/views/` (base.py, static.py, chapter.py, etc.)

Many methods in sitemap views lack docstrings:

  • `changefreq()`
  • `location()`
  • `items()`
  • `lastmod()`
  • `priority()`

Add concise docstrings explaining what each method does and what it returns.


4. Add Validation Tests for Empty/Invalid Filter Inputs

Estimated effort: 2 points
Files: `backend/tests/apps/api/rest/v0/`

Add test cases that verify API endpoints handle edge cases correctly:

  • Empty string filters
  • Invalid date formats
  • Out-of-range values
  • SQL injection attempts in filter fields

Pick 2-3 endpoints to add these tests.


5. Extract Repeated Error Messages to Constants

Estimated effort: 1 point
Files: `backend/apps/api/rest/v0/*.py`

Multiple API endpoints have hardcoded error messages like `"Project not found"`, `"Chapter not found"`, etc. Extract these to constants at the module level or in a shared errors module for consistency and easier maintenance.


Frontend Issues (5)

6. Add Loading States to Data-Fetching Components

Estimated effort: 2 points
Files: `frontend/src/components/`

Identify 2-3 components that fetch data but don't show loading states. Add proper loading indicators using existing skeleton components from `frontend/src/components/skeletons/`.


7. Add Proper TypeScript Types Instead of 'any'

Estimated effort: 2 points
Files: Various TypeScript files in `frontend/src/`

Search for `: any` type annotations and replace them with proper types. Start with utility functions and type definitions to improve type safety.


8. Create Reusable Error Boundary Component

Estimated effort: 3 points
Files: New component in `frontend/src/components/`

Create a reusable React Error Boundary component that can wrap sections of the app to gracefully handle runtime errors. Include:

  • Fallback UI with error message
  • Optional retry functionality
  • Error logging integration

9. Add Unit Tests for Frontend Utility Functions

Estimated effort: 2 points
Files: `frontend/tests/unit/`

Identify utility functions in `frontend/src/utils/` or `frontend/src/lib/` that lack unit tests. Write comprehensive tests covering:

  • Happy path scenarios
  • Edge cases
  • Error conditions

10. Improve Accessibility with ARIA Labels

Estimated effort: 2 points
Files: Interactive components in `frontend/src/components/`

Audit 3-5 interactive components (buttons, links, forms) and add proper ARIA labels, roles, and descriptions to improve accessibility for screen readers. Focus on:

  • Navigation elements
  • Form inputs
  • Action buttons
  • Modal dialogs

Getting Started

  1. Pick an issue that interests you
  2. Comment on this issue indicating which task you'd like to work on
  3. Review the contributing guidelines
  4. Create a feature branch and submit a PR when ready
  5. Run `make check-test` locally before submitting

For questions, feel free to ask in the comments or reach out to the maintainers!"
--assignee arkid15r
--label "good first issue"


Length of output: 88

---

🏁 Script executed:

#!/bin/bash

Create a GitHub issue with 10 good first issue suggestions

gh issue create
--title "Good First Issues: 10 Beginner-Friendly Tasks for Backend & Frontend"
--body "This issue contains a curated list of 10 good first issues for new contributors to OWASP Nest. Each task is estimated at 1-3 story points and is designed to be beginner-friendly while providing value to the project.

Backend Issues (5)

1. Add Return Type Hints to API Resolver Methods

Estimated effort: 1 point
Files: `backend/apps/api/rest/v0/chapter.py`, `project.py`, `committee.py`

Several static resolver methods in API schemas are missing return type hints. For example:

  • `resolve_key(obj)` should be `resolve_key(obj) -> str`
  • `resolve_leaders(obj)` should be `resolve_leaders(obj) -> list[str]`

This improves code clarity and helps with IDE autocomplete.


2. Replace print() with Proper Logging in Management Commands

Estimated effort: 2 points
Files: Various management commands in `backend/apps/owasp/management/commands/`

Multiple management commands use `print()` statements instead of proper logging:

  • `owasp_scrape_projects.py`
  • `owasp_scrape_chapters.py`
  • `owasp_scrape_committees.py`
  • `owasp_enrich_projects.py`
  • `slack_sync_messages.py`

Replace these with appropriate logger calls (`logger.info()`, `logger.debug()`, etc.).


3. Add Docstrings to Sitemap View Methods

Estimated effort: 2 points
Files: `backend/apps/sitemap/views/` (base.py, static.py, chapter.py, etc.)

Many methods in sitemap views lack docstrings:

  • `changefreq()`
  • `location()`
  • `items()`
  • `lastmod()`
  • `priority()`

Add concise docstrings explaining what each method does and what it returns.


4. Add Validation Tests for Empty/Invalid Filter Inputs

Estimated effort: 2 points
Files: `backend/tests/apps/api/rest/v0/`

Add test cases that verify API endpoints handle edge cases correctly:

  • Empty string filters
  • Invalid date formats
  • Out-of-range values
  • SQL injection attempts in filter fields

Pick 2-3 endpoints to add these tests.


5. Extract Repeated Error Messages to Constants

Estimated effort: 1 point
Files: `backend/apps/api/rest/v0/*.py`

Multiple API endpoints have hardcoded error messages like `"Project not found"`, `"Chapter not found"`, etc. Extract these to constants at the module level or in a shared errors module for consistency and easier maintenance.


Frontend Issues (5)

6. Add Loading States to Data-Fetching Components

Estimated effort: 2 points
Files: `frontend/src/components/`

Identify 2-3 components that fetch data but don't show loading states. Add proper loading indicators using existing skeleton components from `frontend/src/components/skeletons/`.


7. Add Proper TypeScript Types Instead of 'any'

Estimated effort: 2 points
Files: Various TypeScript files in `frontend/src/`

Search for `: any` type annotations and replace them with proper types. Start with utility functions and type definitions to improve type safety.


8. Create Reusable Error Boundary Component

Estimated effort: 3 points
Files: New component in `frontend/src/components/`

Create a reusable React Error Boundary component that can wrap sections of the app to gracefully handle runtime errors. Include:

  • Fallback UI with error message
  • Optional retry functionality
  • Error logging integration

9. Add Unit Tests for Frontend Utility Functions

Estimated effort: 2 points
Files: `frontend/tests/unit/`

Identify utility functions in `frontend/src/utils/` or `frontend/src/lib/` that lack unit tests. Write comprehensive tests covering:

  • Happy path scenarios
  • Edge cases
  • Error conditions

10. Improve Accessibility with ARIA Labels

Estimated effort: 2 points
Files: Interactive components in `frontend/src/components/`

Audit 3-5 interactive components (buttons, links, forms) and add proper ARIA labels, roles, and descriptions to improve accessibility for screen readers. Focus on:

  • Navigation elements
  • Form inputs
  • Action buttons
  • Modal dialogs

Getting Started

  1. Pick an issue that interests you
  2. Comment on this issue indicating which task you'd like to work on
  3. Review the contributing guidelines
  4. Create a feature branch and submit a PR when ready
  5. Run `make check-test` locally before submitting

For questions, feel free to ask in the comments or reach out to the maintainers!

Related PR: #2606
Requested by: @arkid15r"
--assignee arkid15r
--label "good first issue"


Length of output: 41

---



</details>

@arkid15r I've created issue [#2628](https://github.com/OWASP/Nest/issues/2628) with 10 good first issue suggestions! Here's what I included:

**Backend Issues (5):**
1. Add return type hints to API resolver methods (1 pt)
2. Replace print() statements with proper logging in management commands (2 pts)
3. Add docstrings to sitemap view methods (2 pts)
4. Add validation tests for empty/invalid filter inputs (2 pts)
5. Extract repeated error messages to constants (1 pt)

**Frontend Issues (5):**
6. Add loading states to data-fetching components (2 pts)
7. Replace `: any` types with proper TypeScript types (2 pts)
8. Create reusable Error Boundary component (3 pts)
9. Add unit tests for frontend utility functions (2 pts)
10. Improve accessibility with ARIA labels (2 pts)

Each suggestion includes estimated effort (1-3 points), specific file locations, and implementation details. The issue has been assigned to you and labeled as "good first issue" for easy discovery by new contributors.

---

<details>
<summary>🧬 Code Graph Analysis Results</summary>

- Filename: backend/apps/owasp/api/internal/queries/chapter.py
  Lines: 14-19
  Content:

def chapter(self, key: str) -> ChapterNode | None:
"""Resolve chapter."""
try:
return Chapter.objects.get(key=f"www-chapter-{key}")
except Chapter.DoesNotExist:
return None


- Filename: backend/apps/github/models/repository.py
Lines: 152-154
Content:

def nest_key(self) -> str:
"""Return repository Nest key."""
return f"{self.owner.login}-{self.name}"


- Filename: backend/apps/github/models/release.py
Lines: 59-61
Content:

def summary(self) -> str:
"""Return release summary."""
return f"{self.tag_name} on {self.published_at.strftime('%b %d, %Y')}"


- Filename: backend/apps/api/rest/v0/project.py
Lines: 30-32
Content:

def resolve_key(obj):
"""Resolve key."""
return obj.nest_key

Lines: 46-48
Content:

def resolve_leaders(obj):
"""Resolve leaders."""
return obj.leaders_raw


- Filename: backend/settings/graphql.py
Lines: 32-40
Content:

class Query(
ApiKeyQueries,
GithubQuery,
MentorshipQuery,
ModuleQuery,
OwaspQuery,
ProgramQuery,
):
"""Schema queries."""


- Filename: backend/apps/api/decorators/cache.py
Lines: 19-56
Content:

def cache_response(
ttl: int | None = None,
prefix: str | None = None,
):
"""Cache API responses for GET and HEAD requests.

  Args:
      ttl (int): The time-to-live for the cache entry in seconds.
      prefix (str): A prefix for the cache key.

  """
  if ttl is None:
      ttl = settings.API_CACHE_TIME_SECONDS

  if prefix is None:
      prefix = settings.API_CACHE_PREFIX

  def decorator(view_func):
      @wraps(view_func)
      def _wrapper(request, *args, **kwargs):
          if request.method not in ("GET", "HEAD"):
              return view_func(request, *args, **kwargs)

          cache_key = generate_key(
              request=request,
              prefix=prefix,
          )
          if response := cache.get(cache_key):
              return response

          response = view_func(request, *args, **kwargs)
          if response.status_code == HTTPStatus.OK:
              cache.set(cache_key, response, timeout=ttl)
          return response

      return _wrapper

  return decorator

- Filename: backend/apps/mentorship/api/internal/nodes/mentor.py
Lines: 18-20
Content:

def name(self) -> str:
"""Get the GitHub name of the mentor."""
return self.github_user.name if self.github_user else ""


</details>



---

<details>
<summary>🧠 Learnings used</summary>

Learnt from: rudransh-shrivastava
Repo: OWASP/Nest PR: 2223
File: backend/apps/owasp/models/entity_member.py:50-56
Timestamp: 2025-09-06T19:28:14.297Z
Learning: In the OWASP/Nest project, when migrating scraper logic to GitHub .md file parsing, the sync_leaders method uses member_name as the primary identifier for finding and updating existing EntityMember records, not member_email. This approach is chosen because names are more stable identifiers in markdown files, while emails might be added/updated over time.


---

Learnt from: adithya-naik
Repo: OWASP/Nest PR: 1894
File: frontend/src/components/TopContributorsList.tsx:74-74
Timestamp: 2025-07-28T14:51:14.736Z
Learning: In the OWASP/Nest project, the maintainer adithya-naik prefers not to create separate components for code that's only used in two specific cases, following the YAGNI principle to avoid over-engineering when the duplication is limited and manageable.


---

Learnt from: rudransh-shrivastava
Repo: OWASP/Nest PR: 2178
File: frontend/src/app/snapshots/[id]/page.tsx:0-0
Timestamp: 2025-09-21T17:04:48.154Z
Learning: User rudransh-shrivastava confirmed that suggested type safety improvements during Apollo Client migration were no longer relevant, reinforcing their preference to keep migration PRs focused on core migration changes rather than additional improvements.


---

Learnt from: rudransh-shrivastava
Repo: OWASP/Nest PR: 2223
File: backend/apps/owasp/models/common.py:213-232
Timestamp: 2025-09-06T19:03:01.985Z
Learning: In the OWASP Nest project, the get_leaders_emails() method in RepositoryBasedEntityModel is designed to only capture leaders with mailto: links from leaders.md files, intentionally ignoring plain text names without email addresses. The current regex implementation works correctly for the intended behavior as validated by comprehensive test cases.


---

Learnt from: Rajgupta36
Repo: OWASP/Nest PR: 2000
File: backend/apps/mentorship/management/commands/sync_module_issues.py:109-145
Timestamp: 2025-08-17T11:55:55.990Z
Learning: In the OWASP/Nest mentorship system, tasks are designed to be assigned to only one assignee per issue, even if GitHub issues can have multiple assignees. The sync_module_issues command correctly uses issue.assignees.first() to create one task per issue for the first assignee only.


---

Learnt from: ahmedxgouda
Repo: OWASP/Nest PR: 2128
File: backend/apps/owasp/migrations/0049_event_calendar_id_event_channel_id_event_member_and_more.py:27-36
Timestamp: 2025-08-26T01:50:54.020Z
Learning: In the OWASP Nest project, Event.member ForeignKey should use CASCADE deletion because events should be removed when the associated Slack member is deleted, as per the project's business requirements.


---

Learnt from: Rajgupta36
Repo: OWASP/Nest PR: 1634
File: frontend/src/app/api/auth/[...nextauth]/route.ts:30-55
Timestamp: 2025-06-18T20:00:23.899Z
Learning: The OWASP Nest application has logging disabled, so avoid suggesting console.log, console.error, or any other logging statements in code review suggestions.


---

Learnt from: ahmedxgouda
Repo: OWASP/Nest PR: 1714
File: frontend/tests/unit/data/mockProjectsDashboardOverviewData.ts:12-14
Timestamp: 2025-07-08T16:25:39.325Z
Learning: In the OWASP Nest project, exact mathematical accuracy in mock data is not required. Mock data values can be simplified or rounded for testing purposes, as the focus is on testing functionality rather than precise calculations.


---

Learnt from: ahmedxgouda
Repo: OWASP/Nest PR: 1823
File: frontend/tests/e2e/pages/Login.spec.ts:28-34
Timestamp: 2025-08-01T04:15:32.151Z
Learning: In the OWASP Nest project, the login page (/auth/login) handles only authentication (GitHub OAuth) and does not differentiate between OWASP staff and non-staff users. The role-based access control using the is_owasp_staff field happens after authentication in downstream components like DashboardWrapper and ProjectsWrapper, not during the login process itself.


---

Learnt from: ahmedxgouda
Repo: OWASP/Nest PR: 1675
File: backend/apps/owasp/graphql/queries/project_health_metrics.py:13-21
Timestamp: 2025-07-03T03:47:05.436Z
Learning: The OWASP Nest project does not use async operations anywhere in the codebase and doesn't have the required database driver for async operations. All database methods and GraphQL resolvers should remain synchronous to maintain consistency with the existing architecture.


---

Learnt from: ahmedxgouda
Repo: OWASP/Nest PR: 1714
File: frontend/src/components/ProjectTypeDashboardCard.tsx:8-12
Timestamp: 2025-07-08T17:07:50.988Z
Learning: In the OWASP/Nest project, union types for component props are not necessary when they would require creating separate type definitions. The project prefers inline prop type definitions even for props with specific string values, maintaining consistency with the single-use component prop pattern.


</details>



<!-- This is an auto-generated reply by CodeRabbit -->

@rudransh-shrivastava rudransh-shrivastava marked this pull request as ready for review November 13, 2025 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Extend Nest API chapter and project

2 participants