Apache Superset PR Contribution Recipe
Also apply the shared OSS contribution quality protocol in
../../../references/contribution-quality.md.
Project-specific instructions below override the shared protocol when they
conflict.
Issues and PRs both live on GitHub. Before making any code changes: sync
with upstream, create the branch (or use the existing PR branch); then implement.
Applies to both new PRs and updates to existing PRs.
Project facts
- Local checkout:
/Users/dejain/nvidia/oss/worktrees/apache/superset
- Upstream repo:
apache/superset
- Default branch:
master
- Fork/head owner:
deepujain
- Python >= 3.11; React/TypeScript frontend
- Dev setup: see
Makefile, Developer Portal development-setup guide
- Pre-push gate:
pre-commit run on staged files (see AGENTS.md)
- Contribution docs: https://superset.apache.org/developer_portal/
- Queue target: 5 healthy open PRs unless policy sets lower (see
references/queue-policy.md)
Shared execution guardrails
- Think before coding. Read issue comments, linked PRs, and overlapping open
PRs before editing. Maintainer direction in linked threads is binding.
- Simplicity first. Smallest change that fixes the reported problem.
- Surgical changes. Touch only files that trace to the issue or review.
- Pre-commit before push. Stage changes, run
pre-commit run, re-stage
auto-fixes, then commit. Do not push with known hook failures on your files.
- Merge-ready means more than pushed code. Current with
apache/master, CI
green or explained, actionable reviews addressed, validation recorded in PR
body.
- Security findings: read
SECURITY.md before claiming vulnerabilities; align
with the published role/capability matrix.
- No tool attribution in commits, PR titles, or comments.
Closed-loop PR quality loop
- Prove the issue shape (failing test, repro, or concrete broken behavior).
- Match existing patterns in the touched module (backend, plugin, docs).
- Pre-answer likely CI/review flags (types, tests, screenshots for UI).
- Self-review with
git diff --check before commit.
- After push, re-read live CI and reviews; fix or retrigger as needed.
New PR vs update to existing PR
| Context |
What to do |
| New PR |
Pick issue (§1), sync and branch from master (§2), implement, validate (§4), commit/push, open PR (§6). |
| Update existing PR |
Work on the existing PR head branch; rebase on apache/master, fix, validate, push (--force-with-lease if rebased). |
1. Pick an issue (GitHub)
- Issue tracker: https://github.com/apache/superset/issues
- Prefer well-scoped bugs with reproduction, clear expected behavior, and a
narrow fix surface.
#bug and 🦾 ai-candidate labels are hints, not guarantees.
- Mandatory — no duplicate work: For every candidate before branching:
- Read issue body and comments for linked PRs.
- Search open PRs by issue number, title phrases, error text, and paths:
gh search prs --repo apache/superset '<terms>' --state open
- Skip if another open PR already targets the same fix.
- If a closed PR exists, read why before repeating the approach.
- Large features need
#SIP approval; do not open ready feature PRs without it.
- Note the issue number for
Fixes #NNNNN in the PR body when applicable.
2. Sync with upstream, create branch
cd /Users/dejain/nvidia/oss/worktrees/apache/superset
git fetch apache
git checkout master
git pull apache master
git checkout -b fix-NNNNN-short-description
Remotes (one-time): apache = upstream, origin = git@github.com:deepujain/superset.git.
3. Implement
- Read
AGENTS.md for active refactors (TS types, @superset-ui/core, Playwright,
Python type hints, UUID preference).
- Backend:
superset/; frontend: superset-frontend/; plugins under
superset-frontend/plugins/.
- Add/update tests: pytest for Python; Jest + RTL for frontend components.
- Docs: update
docs/ for user-facing changes; UPDATING.md for breaking changes.
- UI changes: capture before/after screenshots for the PR body.
4. Validate (hard gate before commit)
git add <files>
pre-commit run
# re-stage auto-fixes, fix mypy/ruff/eslint failures manually
pytest tests/path/to/test_file.py -xvs # when backend behavior changes
cd superset-frontend && npm test -- --testPathPattern=<pattern> # frontend
# For package TypeScript changes, build declarations before the root type check.
npm run plugins:build && npm run type
If the full environment is unavailable, run the narrowest check possible and
state limits explicitly in the PR body. Do not claim full validation without evidence.
5. Commit and push
- Author: Deepak Jain
<deepujain@gmail.com> — always --author on commit/amend.
- Message: Conventional prefix + summary, e.g.
docs: point Release Notes links at GitHub releases
- Commit:
git commit --no-verify --author="Deepak Jain <deepujain@gmail.com>" -m 'docs: ...'
- Push to origin (fork), not apache.
- After rebase:
git push --force-with-lease origin <branch>
6. Open the PR
- Compare URL:
https://github.com/apache/superset/compare/master...deepujain:superset:<branch>?expand=1
- Title: conventional prefix, e.g.
docs: point Release Notes links at GitHub releases
- Body: fill PR template — SUMMARY, TESTING INSTRUCTIONS, ADDITIONAL INFORMATION;
check boxes;
Fixes #NNNNN when applicable.
- Do not commit local PR-body scratch files.
7. After push: CI and rebase
- Keep PRs current:
git fetch apache && git rebase apache/master, then force-with-lease push.
- CI includes pre-commit, Python unit tests, frontend checks, and label/size gates.
- If CI fails on your head, fix and push; empty commit only when safe to retrigger.
8. Open-PR sweep format
At the start of every sweep, reconcile departed PRs (merged/closed since last run).
| PR |
Requested Action |
CI / Failures |
Review Comments |
Stale / Merge State |
Action Taken |
Final State |
Lessons Learned / Skill Updates:
| Evidence |
Lesson |
Skill Update |
Validation / Publish |
Canonical author PR list:
https://github.com/apache/superset/pulls/deepujain
Sweep replenishment
On every sweep (manual or scheduled):
- Maintain all open authored PRs.
- Learn — bounded scan of merged/closed peer PRs and bot/review feedback.
- Replenish — if below queue target (5), screen issues independently and
publish qualified, non-overlapping PRs until target or verified blockers.
Replenishment invariants match the shared contribution queue playbook: one
blocked PR does not stop other slots; record a source-backed disqualifier for
each unfilled slot.
Live reconnaissance commands
gh pr list --repo apache/superset --author deepujain --state open \
--json number,title,url,headRefName,isDraft,mergeable,reviewDecision,statusCheckRollup
gh issue list --repo apache/superset --state open --limit 50
gh search prs --repo apache/superset '<issue-or-keyword>' --state open
Refresh references/bootstrap-report.md and
references/queue-policy.md when policy or queue state changes.
1---2name: superset-pr-contribution3description: Pick a GitHub issue, implement the fix, and prepare branch/commit/PR on apache/superset from fork deepujain/superset. Also sweeps existing/open Superset PRs when the user shares a PR URL or author PR-list URL: inspect CI, reviewer/bot comments, rebase on apache/master, run pre-commit and focused tests, push follow-up commits, and leave PR status comments. Use when the user wants to contribute to Superset, pick a Superset issue, do a Superset PR, sweep open Superset PRs, bootstrap superset, or says "sweep" when the active repo/thread context identifies Superset.4---56# Apache Superset PR Contribution Recipe78Also apply the shared OSS contribution quality protocol in9[../../../references/contribution-quality.md](../../../references/contribution-quality.md).10Project-specific instructions below override the shared protocol when they11conflict.1213**Issues and PRs both live on GitHub.** Before making any code changes: sync14with upstream, create the branch (or use the existing PR branch); then implement.15Applies to both new PRs and updates to existing PRs.1617## Project facts1819- Local checkout: `/Users/dejain/nvidia/oss/worktrees/apache/superset`20- Upstream repo: `apache/superset`21- Default branch: `master`22- Fork/head owner: `deepujain`23- Python >= 3.11; React/TypeScript frontend24- Dev setup: see `Makefile`, Developer Portal development-setup guide25- Pre-push gate: `pre-commit run` on staged files (see `AGENTS.md`)26- Contribution docs: https://superset.apache.org/developer_portal/27- Queue target: 5 healthy open PRs unless policy sets lower (see28 [references/queue-policy.md](references/queue-policy.md))2930## Shared execution guardrails3132- **Think before coding.** Read issue comments, linked PRs, and overlapping open33 PRs before editing. Maintainer direction in linked threads is binding.34- **Simplicity first.** Smallest change that fixes the reported problem.35- **Surgical changes.** Touch only files that trace to the issue or review.36- **Pre-commit before push.** Stage changes, run `pre-commit run`, re-stage37 auto-fixes, then commit. Do not push with known hook failures on your files.38- **Merge-ready means more than pushed code.** Current with `apache/master`, CI39 green or explained, actionable reviews addressed, validation recorded in PR40 body.41- **Security findings:** read `SECURITY.md` before claiming vulnerabilities; align42 with the published role/capability matrix.43- **No tool attribution** in commits, PR titles, or comments.4445## Closed-loop PR quality loop46471. Prove the issue shape (failing test, repro, or concrete broken behavior).482. Match existing patterns in the touched module (backend, plugin, docs).493. Pre-answer likely CI/review flags (types, tests, screenshots for UI).504. Self-review with `git diff --check` before commit.515. After push, re-read live CI and reviews; fix or retrigger as needed.5253## New PR vs update to existing PR5455| Context | What to do |56| --- | --- |57| **New PR** | Pick issue (§1), sync and branch from `master` (§2), implement, validate (§4), commit/push, open PR (§6). |58| **Update existing PR** | Work on the **existing PR head branch**; rebase on `apache/master`, fix, validate, push (`--force-with-lease` if rebased). |5960## 1. Pick an issue (GitHub)6162- **Issue tracker:** https://github.com/apache/superset/issues63- Prefer **well-scoped** bugs with reproduction, clear expected behavior, and a64 narrow fix surface. `#bug` and `🦾 ai-candidate` labels are hints, not guarantees.65- **Mandatory — no duplicate work:** For every candidate before branching:66 1. Read issue body and comments for linked PRs.67 2. Search open PRs by issue number, title phrases, error text, and paths:68 `gh search prs --repo apache/superset '<terms>' --state open`69 3. Skip if another open PR already targets the same fix.70 4. If a **closed** PR exists, read why before repeating the approach.71- Large features need `#SIP` approval; do not open ready feature PRs without it.72- Note the **issue number** for `Fixes #NNNNN` in the PR body when applicable.7374## 2. Sync with upstream, create branch7576```bash77cd /Users/dejain/nvidia/oss/worktrees/apache/superset78git fetch apache79git checkout master80git pull apache master81git checkout -b fix-NNNNN-short-description82```8384**Remotes (one-time):** `apache` = upstream, `origin` = `git@github.com:deepujain/superset.git`.8586## 3. Implement8788- Read `AGENTS.md` for active refactors (TS types, `@superset-ui/core`, Playwright,89 Python type hints, UUID preference).90- Backend: `superset/`; frontend: `superset-frontend/`; plugins under91 `superset-frontend/plugins/`.92- Add/update tests: pytest for Python; Jest + RTL for frontend components.93- Docs: update `docs/` for user-facing changes; `UPDATING.md` for breaking changes.94- UI changes: capture before/after screenshots for the PR body.9596## 4. Validate (hard gate before commit)9798```bash99git add <files>100pre-commit run101# re-stage auto-fixes, fix mypy/ruff/eslint failures manually102pytest tests/path/to/test_file.py -xvs # when backend behavior changes103cd superset-frontend && npm test -- --testPathPattern=<pattern> # frontend104# For package TypeScript changes, build declarations before the root type check.105npm run plugins:build && npm run type106```107108If the full environment is unavailable, run the narrowest check possible and109state limits explicitly in the PR body. Do not claim full validation without evidence.110111## 5. Commit and push112113- **Author:** Deepak Jain `<deepujain@gmail.com>` — always `--author` on commit/amend.114- **Message:** Conventional prefix + summary, e.g. `docs: point Release Notes links at GitHub releases`115- **Commit:**116 `git commit --no-verify --author="Deepak Jain <deepujain@gmail.com>" -m 'docs: ...'`117- Push to **origin** (fork), not apache.118- After rebase: `git push --force-with-lease origin <branch>`119120## 6. Open the PR121122- **Compare URL:**123 `https://github.com/apache/superset/compare/master...deepujain:superset:<branch>?expand=1`124- **Title:** conventional prefix, e.g. `docs: point Release Notes links at GitHub releases`125- **Body:** fill PR template — SUMMARY, TESTING INSTRUCTIONS, ADDITIONAL INFORMATION;126 check boxes; `Fixes #NNNNN` when applicable.127- Do not commit local PR-body scratch files.128129## 7. After push: CI and rebase130131- Keep PRs current: `git fetch apache && git rebase apache/master`, then force-with-lease push.132- CI includes pre-commit, Python unit tests, frontend checks, and label/size gates.133- If CI fails on your head, fix and push; empty commit only when safe to retrigger.134135## 8. Open-PR sweep format136137At the start of every sweep, reconcile departed PRs (merged/closed since last run).138139| PR | Requested Action | CI / Failures | Review Comments | Stale / Merge State | Action Taken | Final State |140| --- | --- | --- | --- | --- | --- | --- |141142**Lessons Learned / Skill Updates:**143144| Evidence | Lesson | Skill Update | Validation / Publish |145| --- | --- | --- | --- |146147Canonical author PR list:148https://github.com/apache/superset/pulls/deepujain149150## Sweep replenishment151152On every sweep (manual or scheduled):1531541. **Maintain** all open authored PRs.1552. **Learn** — bounded scan of merged/closed peer PRs and bot/review feedback.1563. **Replenish** — if below queue target (5), screen issues independently and157 publish qualified, non-overlapping PRs until target or verified blockers.158159Replenishment invariants match the shared contribution queue playbook: one160blocked PR does not stop other slots; record a source-backed disqualifier for161each unfilled slot.162163## Live reconnaissance commands164165```bash166gh pr list --repo apache/superset --author deepujain --state open \167 --json number,title,url,headRefName,isDraft,mergeable,reviewDecision,statusCheckRollup168gh issue list --repo apache/superset --state open --limit 50169gh search prs --repo apache/superset '<issue-or-keyword>' --state open170```171172Refresh [references/bootstrap-report.md](references/bootstrap-report.md) and173[references/queue-policy.md](references/queue-policy.md) when policy or queue state changes.