# Oppia's code owners and checks to be carried out by developers
At Oppia, we constantly try to improve the code quality and the experience for both the developers and the end users. This requires many optimizations and checks to make sure that things don't break down or cause any degradation to the users' experience. This is why we have a group of code-owners for specific folders and files who keep a check on the changes to make sure all goes smoothly.
Also, the developers who are making the changes to any files must bear in mind the checks they need to perform on their changes making sure it conforms to the rules the folder/file is bound to.
The following is a list of the code-owners and the checks the code-owner looks for in the corresponding folders/files.
## **@prasanna08**
**Answer classification team.**
Files
|
Checks carried out
|
/core/controllers/classifier*.py
|
Ensure that Signature verification algorithm is in sync with signature generation algorithm at Oppia-ml. This code should not break and end to end tests (synchronization between Oppia and Oppia-ml) must be carried out manually by the developer if the code is to be changed.
|
/core/domain/classifier*.py
|
Most of the functionality has automated tests but ensure that logic for fetching new jobs (used by Oppia-ml to poll for jobs) and logic for when to submit a new job should stay intact.
|
/core/storage/classifier/
|
This module is mostly covered by automated tests.
|
/core/templates/domain/classifier/
|
These are domain files used by prediction services to store the prediction result. They are supported by automated tests.
|
/extensions/classifiers/
|
These files (are most crucial and) use the trained model stored by Oppia-ml on Oppia.
- Hence, data format used by these files should be in sync with those submitted by Oppia-ml.
- If the code is changed then end to end tests must be carried out to ensure that Oppia and Oppia-ml are in synch.
- In addition to end to end tests, developer must also verify that the prediction output by these services are same as one that would be generated by Oppia-ml, if it were to do prediction. This is important because Oppia-ml uses libraries for training whereas these files are hand coded and their accuracy should match to the one generated by libraries.
|
## **@DubeySandeep**
**Audio and Translation team.**
Files
|
Checks carried out
|
/core/controllers/collection*.py
|
Check that code is accompanied with the relevant tests; code aligns with coding patterns.
|
/core/domain/collection*.py
|
Check that code is accompanied with the relevant tests; code aligns with coding patterns.
|
/core/storage/collection/
|
No existing changes are expected.
|
/core/templates/domain/collection/
|
Check that code is accompanied with the relevant tests; code aligns with coding patterns.
|
/core/templates/pages/collection_editor/
|
Ensure that collection editors have a positive UX experience. Check that code aligns with existing code patterns.
|
/core/templates/pages/collection_player/
|
Ensure that collection editors have a positive UX experience. Check that code aligns with existing code patterns.
|
**Interaction Project.**
Files
|
Checks carried out
|
/core/controllers/creator_dashboard*.py
|
Review changes from the creator UX perspective. Make sure code is functionally correct, readable, and formatted correctly. Code must be tested using unit tests.
|
/core/templates/domain/creator_dashboard/
|
/core/templates/pages/creator_dashboard/
|
/core/templates/domain/learner_dashboard/
|
Review changes from the learner UX perspective. Make sure code is functionally correct, readable, and formatted correctly. Code must be tested using unit tests.
|
/core/templates/pages/learner_dashboard/
|
/core/templates/pages/email_dashboard/
|
Changes to UI should be tested. Make sure the UX for users is good.
|
/core/templates/pages/notifications_dashboard/
|
Changes to UI should be tested. Make sure the UX for users is good.
|
**Suggestion project**
Files
|
Checks carried out
|
/core/storage/exploration/
|
Any changes here should have corresponding changes in exp_domain and everywhere else where explorations are used.
|
/core/templates/domain/state/
|
- Changes here should not break explorations or questions. Can be verified in their respective editors.
- Corresponding tests should be added.
|
/core/templates/domain/state_card/
|
/core/templates/pages/exploration_editor/preview_tab/
|
- Make sure the code changes here are functionally correct with appropriate tests and that the UI changes here are intuitive.
- Any additional fields that are being added to the models should have the changes reflected in the respective domain and service files.
|
/core/templates/pages/exploration_player/
|
/core/templates/pages/state_editor/
|
/core/templates/components/state/
|
**Question project.**
/core/controllers/topic_*.py
|
Any backend changes here should be functionally correct, have the corresponding tests and shouldn't break any existing functionality.
The corresponding class in topic_domain and the functions related to it in topic_services should be updated for any new field added to it.
|
/core/domain/topic*.py
|
/core/storage/topic/
|
/core/templates/domain/topic/
|
Same as above, any new field added to topic should be reflected in one of the ObjectFactories.
UI changes should be intuitive and shouldn't break existing functionality.
|
/core/templates/domain/topic_viewer
|
/core/templates/pages/topic_editor/
|
/core/templates/pages/topic_viewer/
|
**Topics and skills dashboard project.**
Files
|
Checks carried out
|
/core/templates/components/alerts/
|
- All variables are declared before use
- No multiple declarations of same variable are present
- Subsequent variable usage has the same type
- No new properties are added to a declared variable
- Loop variables are declared
- If scope is used in link function, proper typings are added to custom-scope-defs.d.ts
- Each file contains a single component (we have a lint check for this too)
- Existing functionality does not break
|
/core/templates/components/attribution_guide/
|
/core/templates/components/background/
|
/core/templates/components/embed_modal/
|
/core/templates/components/loading/
|
/core/templates/components/profile_link/
|
/core/templates/components/promo/
|
/core/templates/components/share/
|
/core/templates/components/social_buttons/
|
/core/templates/components/summary_tile/
|
**Global stylesheet.**
/core/domain/stats*.py
|
As owner of the Statistics tab, Brian should review all code that goes in here.
|
/core/storage/statistics/
|
As owner of the Statistics tab, Brian should review all code that goes in here.
|
/core/templates/domain/statistics/
|
As owner of the Statistics tab, Brian should review all code that goes in here.
|
/core/templates/pages/exploration_editor/improvements_tab/
|
As owner of all aspects of the Improvements tab, Brian should review all code that goes in here.
|
/core/templates/pages/exploration_editor/statistics_tab/
|
As owner of the Statistics tab, Brian should review all code that goes in here.
|
/extensions/actions/
|
This is a part of Playthroughs functionality, which Brian owns.
|
/extensions/answer_summarizers/
|
This is a part of Statistics display functionality, which Brian owns.
|
/extensions/issues/
|
This is a part of Playthroughs functionality, which Brian owns.
|
/extensions/visualizations/
|
This is a part of Statistics display functionality, which Brian owns.
|
**Infrastructure**
/core/domain/html*.py
|
These files typically cover HTML sanitization which needs to be handled carefully from a security perspective.
|
/core/templates/pages/about/
|
This page is how Oppia presents itself to the world, so I would like to keep abreast of any changes that are made to the text.
|
/core/templates/pages/privacy/
|
Any changes to this are sensitive and should be approved by a data privacy lead (Ben or Sean) before being merged.
|
/core/templates/pages/terms/
|
Any changes to this are sensitive and should be approved by a data privacy lead (Ben or Sean) before being merged.
|
/core/templates/pages/tests/
|
Miscellaneous test files; in general, no changes are expected here.
|
/export/
|
In general, no changes are expected here.
|
**Restricted pages.**
/core/controllers/admin*.py
|
In general, no changes are expected here.
|
/core/templates/pages/admin/
|
In general, no changes are expected here.
|
/core/templates/pages/moderator/
|
In general, no changes are expected here.
|
/.github/CODEOWNERS
|
This file defines the code-owner responsibilities for the entire Oppia codebase, and I would like to make sure that each file/folder is assigned to someone who has enough knowledge/understanding of the code in it so that they can review it well.
|
## **@bansalnitish**
**Rich text editor team.**
Files
|
Checks carried out
|
/core/templates/pages/contact-page/
|
Check that UX for the users is positive. Changes should be compatible with mobile.
|
/core/templates/pages/donate-page/
|
/core/templates/pages/error-pages/
|
/core/templates/pages/get-started-page/
|
/core/templates/pages/landing-page/
|
/core/templates/pages/maintenance-page/
|
/core/templates/pages/preferences-page/
|
/core/templates/pages/signup-page/
|
/core/templates/pages/splash-page/
|
/core/templates/pages/teach-page/
|
/core/templates/pages/thanks-page/
|
**Speed Improvement team.**
**Generally:** Ensure that the modifications to these files don't affect Oppia performance and speed.
/app.yaml
|
Ensure that:
- cache timeouts are not changed
- new handlers have correct cache timeouts values
|
/manifest.json (+@seanlip)
|
(seanlip) Ensure that no new libraries are added unnecessarily, and that third-party libraries have a proper license.
|
/core/templates/pages/footer_js_libs.html
|
This file shouldn't be modified at all for now.
|
/core/templates/pages/header_css_libs.html
|
This file shouldn't be modified at all for now.
|
/core/templates/pages/header_js_libs.html
|
This file shouldn't be modified at all for now.
|
webpack.common.config.ts
|
Changes that are common for dev and prod should be done in webpack.common.config.ts.
All the changes should account for the speed of the webpack build.
|
webpack.dev.config.ts
|
webpack.prod.config.ts
|
# Temporary codeowner transfer process
If you will be unavailable for more than 24 hours, please transfer your ownership with a delegate, follow the process detailed below:
1. Create an issue using the "Temporary codeowner transfer" template on Github. [Note down the ISSUE_NUMBER.]
2. Do the changes in CODOWNER file and add a top level comment: `TODO(#ISSUE_NUMBER): Revert ownership to @USERNAME after YYYY-MM-DD.`
3. Create a PR with the title: `Fix part of #