Skip to content
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
e831098
migrations and model changes
Ishankoradia Jul 22, 2026
356d84a
access page - people, roles, groups
Ishankoradia Jul 23, 2026
c6b3d54
moved current ownership (per resource)
Ishankoradia Jul 23, 2026
b118699
share modal for dashboard
Ishankoradia Jul 23, 2026
a63039e
bump typing-extensions to >=4.14 (anthropic 0.116 needs PEP 728 Typed…
siddhant3030 Jul 23, 2026
149c7f6
chart sharing: register chart rtype + can_share_charts permission
siddhant3030 Jul 23, 2026
73d4928
report sharing
siddhant3030 Jul 23, 2026
4435758
resource sharing enforcement (dashboards): access resolver + decorato…
siddhant3030 Jul 27, 2026
6d39ff8
rename access_resolver -> resource_access, clearer function names
siddhant3030 Jul 27, 2026
e6e38f1
updates
Ishankoradia Jul 28, 2026
3e1f864
Merge pull request #1439 from DalgoT4D/feature/resource-sharing-enfor…
Ishankoradia Aug 5, 2026
b47d539
Merge remote-tracking branch 'origin/main' into feature/resource-shar…
Ishankoradia Aug 11, 2026
4dc23cf
updates
Ishankoradia Aug 11, 2026
288dcab
updates
Ishankoradia Aug 12, 2026
e4c730a
updates
Ishankoradia Aug 12, 2026
ff6d0d6
updates
Ishankoradia Aug 13, 2026
78d4d97
updates
Ishankoradia Aug 13, 2026
dc61593
updates
Ishankoradia Aug 15, 2026
a52a57e
updates
Ishankoradia Aug 16, 2026
ecc3a69
Merge remote-tracking branch 'origin/main' into feature/resource-shar…
Ishankoradia Aug 16, 2026
0a032ee
updates
Ishankoradia Aug 16, 2026
51c9df8
testing suites
Ishankoradia Aug 16, 2026
8bfdb42
Merge remote-tracking branch 'origin/main' into feature/resource-shar…
Ishankoradia Aug 16, 2026
0437035
updates
Ishankoradia Aug 16, 2026
cbb0ba2
updates
Ishankoradia Aug 16, 2026
3b4f32f
updates
Ishankoradia Aug 16, 2026
bcabc29
updates
Ishankoradia Aug 18, 2026
cd6770f
Merge remote-tracking branch 'origin/main' into feature/resource-shar…
Ishankoradia Aug 18, 2026
580f03e
updates
Ishankoradia Aug 18, 2026
2373d55
updates
Ishankoradia Aug 18, 2026
8db655f
notificaitons rehaul and refactor
Ishankoradia Aug 19, 2026
bd2b062
updates
Ishankoradia Aug 19, 2026
0d93f24
fixes
Ishankoradia Aug 19, 2026
cd3f696
updates
Ishankoradia Aug 20, 2026
c36b336
updates
Ishankoradia Aug 20, 2026
ebc16d1
updates
Ishankoradia Aug 21, 2026
975e66d
updates
Ishankoradia Aug 21, 2026
e3eb5a2
uipdates
Ishankoradia Aug 24, 2026
dcb04a3
updates - some first set of linear issues - feedback
Ishankoradia Aug 26, 2026
6780d33
more fixes from the feedback
Ishankoradia Aug 26, 2026
9656786
updates
Ishankoradia Aug 26, 2026
0ca6a11
alert recipeint changes
Ishankoradia Aug 26, 2026
7a49ec4
updates
Ishankoradia Aug 27, 2026
dc54427
edge for owner dashboard
Ishankoradia Aug 27, 2026
95fb922
fixes
Ishankoradia Aug 28, 2026
44f0e69
updates
Ishankoradia Aug 28, 2026
fab4c27
Merge branch 'main' into feature/resource-sharing-v2
Ishankoradia Aug 31, 2026
d2c78b7
updates
Ishankoradia Sep 1, 2026
ff0897b
Merge remote-tracking branch 'origin/feature/resource-sharing-v2' int…
Ishankoradia Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .claude/skills/coding-standards/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,18 @@ All imports at the top of the file.
# ✗ BAD
def send_reset_link(email: str) -> None:
from django.conf import settings
from ddpui.utils import awsses
awsses.send_signup_email(email, settings.FRONTEND_URL + "/reset")
from ddpui.core.notifications.triggers import user as user_notifications
user_notifications.send_password_reset(email, settings.FRONTEND_URL + "/reset")
```

```python
# ✓ GOOD
from django.conf import settings
from ddpui.utils import awsses
from ddpui.core.notifications.triggers import user as user_notifications


def send_reset_link(email: str) -> None:
awsses.send_signup_email(email, settings.FRONTEND_URL + "/reset")
user_notifications.send_password_reset(email, settings.FRONTEND_URL + "/reset")
```

Only break this rule for a genuine circular import or an optional/slow dependency you don't want at module load — and comment why.
85 changes: 85 additions & 0 deletions .claude/skills/docstrings/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
name: docstrings
description: Docstring style — skip the docstring when the function name already explains what it does; when you do write one, keep it to a single line focused on the non-obvious WHY. Never write multi-line Args / Returns / Raises blocks. Apply when authoring new functions or classes, reviewing a diff, or judging whether an existing docstring should stay.
---

# docstrings

## 1. Skip the docstring when the name says it

If a reader can predict what the function does from its name + signature, don't paraphrase it in prose. Delete the docstring.

```python
# ✗ BAD
def get_user_by_email(email: str) -> User:
"""Get a user by email."""
return User.objects.get(email=email)
```

```python
# ✓ GOOD
def get_user_by_email(email: str) -> User:
return User.objects.get(email=email)
```

Same rule applies to classes, methods, and test functions.

## 2. When you do write one, keep it to a single line

A docstring earns its place by answering *what would surprise a reader*: a hidden invariant, a subtle side effect, a workaround for a specific bug, a constraint the caller must respect. Not what the code does — the reader can see that.

```python
# ✗ BAD — 4 lines of what the code already says
def normalize_email(email: str) -> str:
"""Normalize an email address.

Lowercases the address and strips whitespace, then returns
the cleaned string.
"""
return email.strip().lower()
```

```python
# ✓ GOOD — name says it, no docstring
def normalize_email(email: str) -> str:
return email.strip().lower()
```

```python
# ✓ GOOD — the WHY isn't obvious from the name
def _resolve_pending_emails(org, orguser, emails, invite_role_uuid, group_name=None) -> dict[str, int]:
"""Emails that already belong to an active orguser are ignored — the caller resolves them via orguser_ids."""
...
```

## 3. Never write Args / Returns / Raises blocks

Types live in the signature. If a parameter needs a prose explanation, rename it — don't document around a bad name.

```python
# ✗ BAD
def notify_share_recipients(sender, rtype, resource, classified):
"""Fire share notifications.

Args:
sender: The user sharing the resource.
rtype: The resource type as a string.
resource: The resource object.
classified: Dict with "new" and "upgrade" keys mapping level → orguser ids.

Returns:
None.
"""
...
```

```python
# ✓ GOOD — one line, focused on the invariant a reader can't infer
def notify_share_recipients(sender, rtype, resource, classified):
"""Fires one create_notification per (class, level) bucket. Notification failure is logged but never fails the API call."""
...
```

## Reviewing existing docstrings

When editing a file, apply the same rules to what's already there — delete a docstring whose name-and-signature already say the same thing. Trim multi-line ones down to the single line that carries the WHY, or delete them if there's no non-obvious WHY.
Loading
Loading