From 42b80b4987acc0e52204ca7fc6cc4f3320c16c0c Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 14:44:33 -0500 Subject: [PATCH 1/9] Tweaks. --- READMES/{testing.md => automated-tests.md} | 4 +- READMES/devops/deploy-oob.md | 24 +---- READMES/postmortems.md | 23 +++++ READMES/project-conventions.md | 106 +++++++++++++++++++-- 4 files changed, 128 insertions(+), 29 deletions(-) rename READMES/{testing.md => automated-tests.md} (99%) create mode 100644 READMES/postmortems.md diff --git a/READMES/testing.md b/READMES/automated-tests.md similarity index 99% rename from READMES/testing.md rename to READMES/automated-tests.md index a889c9ccc2..0e4685ffcc 100644 --- a/READMES/testing.md +++ b/READMES/automated-tests.md @@ -1,4 +1,4 @@ -# Testing +# Automated Tests The CMS codebase is tested several times in the development lifecycle: @@ -169,7 +169,7 @@ eliminate these issues, we opted instead to generate a _baseline_ and fail only builds that introduced new code issues. A PHPStan baseline is simply a list of existing errors. We maintain the -baseline in our codebase (see [phpstan-baseline.neon](../phpstan-baseline.neon) +baseline in our codebase (see [phpstan-baseline.neon](../phpstan-baseline.neon)) to prevent these historical errors from interfering with our CI/CD processes. This does have drawbacks, though; it can be confusing to have the same code in diff --git a/READMES/devops/deploy-oob.md b/READMES/devops/deploy-oob.md index 4ec6a89e28..5e8c94cd77 100644 --- a/READMES/devops/deploy-oob.md +++ b/READMES/devops/deploy-oob.md @@ -66,7 +66,7 @@ If the PO is not already aware, we should inform them of: ### Preparation -Verify that the `testing/cms-post-deploy-tests-staging` job containing the fix commit has completed successfully and that the combined status for the commit in GitHub is passing. +Verify that the `testing/cms-post-deploy-tests-staging` job containing the fix commit has completed successfully and that the combined status for the commit in GitHub is passing. This can be verified from the [commits listing page](https://github.com/department-of-veterans-affairs/va.gov-cms/commits/main) or with an HTTPS API URL like [this](https://api.github.com/repos/department-of-veterans-affairs/va.gov-cms/commits/bbb7e0e809e17766a5df478c95fb1266d1a654b1/status). @@ -91,7 +91,7 @@ First, notify the Sitewide team, Helpdesk, and Editors of an Out-of-Band deploym Notify all Drupal engineers in `@cms-engineers-group` (product teams & CMS Team) in `#sitewide-program` and request that they hold off on merging anything until further notice, as that can delay the testing pipeline. ```slack -:alert: @cms-engineers-group We are preparing for an Out-of-Band deployment. Please hold off on merging anything until further notice, so as not to delay testing and rollout. +:alert: @cms-engineers-group We are preparing for an Out-of-Band deployment. Please hold off on merging anything until further notice, so as not to delay testing and rollout. ``` We want to notify the CMS team to minimize surprise and alarm (if they unexpectedly see an unscheduled deployment happen) and for general situational awareness. @@ -133,23 +133,9 @@ Helpdesk should notify editors and other stakeholders that the issue has been re Notify all Drupal engineers `@cms-engineers-group` (product teams & CMS Team) in `#sitewide-program` and let them know they are clear to resume merging code as needed. ```slack -@cms-engineers-group The Out-of-Band deployment is complete. You may resume merging as needed. +@cms-engineers-group The Out-of-Band deployment is complete. You may resume merging as needed. ``` -### Postmortem - -Chances are that any situation serious enough to require an out-of-band deploy will warrant a postmortem. - -To create the postmortem, follow the procedure [here](https://github.com/department-of-veterans-affairs/va.gov-team-sensitive/tree/master/Postmortems). Note that this involves a pull request and review process. Don't just create it in `master` :slightly_smiling_face: - -Remember that the purpose of a postmortem is to determine the root causes – the deficits in processes and tools – that made this situation possible, and reduce the likelihood of it happening again. It is not to assign blame, express guilt, etc. -#### Communicating Impact - -Take extra care in how you report the impact. Use actual, quantifiable figures, statistics, and graphs if you have them. Be sure to communicate the normal, background figures for comparison: the background error rate, the number of users total and the users who _weren't_ affected by the issue, etc. It's difficult to understand or convey actual impact without an understanding of the normal situation. - -If you can't readily access this information: -- acknowledge that problem in the postmortem document -- open and prioritize tickets to address -- list these among your followup actions in the postmortem document +### Postmortem -Ultimately, someone reading your postmortem should be able to come away with a good understanding of the severity of the issue and its impacts on direct users of the CMS, stakeholders within the system, and the Veteran community. +Chances are that any situation serious enough to require an out-of-band deploy will warrant a postmortem. See [Postmortems](../postmortems.md) for more information about that process. diff --git a/READMES/postmortems.md b/READMES/postmortems.md new file mode 100644 index 0000000000..222fa3bc1f --- /dev/null +++ b/READMES/postmortems.md @@ -0,0 +1,23 @@ +# Postmortems + +Chances are that any situation serious enough to require an [out-of-band deploy](./devops/deploy-oob.md) will warrant a postmortem. + +To create the postmortem, follow the procedure [here](https://github.com/department-of-veterans-affairs/va.gov-team-sensitive/tree/master/Postmortems). Note that this involves a pull request and review process. Don't just create it in `master` :slightly_smiling_face: + +Remember that the purpose of a postmortem is to determine the root causes – the deficits in processes and tools – that made this situation possible, and reduce the likelihood of it happening again. It is not to assign blame, express guilt, etc. + +## Communicating Impact + +Take extra care in how you report the impact. Use actual, quantifiable figures, statistics, and graphs if you have them. Be sure to communicate the normal, background figures for comparison: the background error rate, the number of users total and the users who _weren't_ affected by the issue, etc. It's difficult to understand or convey actual impact without an understanding of the normal situation. + +If you can't readily access this information: + +- acknowledge that problem in the postmortem document +- open and prioritize tickets to address +- list these among your followup actions in the postmortem document + +Ultimately, someone reading your postmortem should be able to come away with a good understanding of the severity of the issue and its impacts on direct users of the CMS, stakeholders within the system, and the Veteran community. + +---- + +[Table of Contents](../README.md) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 1b23a8237d..09e261f0c8 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -1,13 +1,103 @@ # Project Conventions -## Naming Conventions: -* Modules: `vagov_modulename` -* Content types: `vagov_contentype` -* Fields: `field_[contenttypename]_fieldname` - -## Theme-ing Conventions -* [BEM (Block End Modifier)](https://getbem.com/introduction/) syntax when possible -* CSS custom properties instead of Sass variables +## Naming + +* Modules: `va_gov_`, e.g. `va_gov_content_release`, `va_gov_user`. +* Content Types: ``, e.g. `page`, `campaign_landing_page`. +* Fields: `field_`, e.g. `field_administration`, `field_alert_dismissable`. +* Services: `.`, e.g. `va_gov_content_release.reporter`, `va_gov_benefits.entity_event_subscriber`. + +## Tickets + +* The title should be clear and descriptive. Keep in mind that this ticket may contain useful information for years, so make it easy to search for and find. +* The description should contain as much detail as possible. It is great to link to a Slack thread, but it is better to summarize the salient points of the thread, copy and paste comments, *et cetera*, to make the ticket the source of truth. +* Acceptance Criteria + * Must be **SMART**: + * **Specific**: List the specific conditions that must be met for the ticket to be considered complete. + * **Measurable**: Criteria should be quantifiable to avoid ambiguity. + * **Achievable**: Ensure that the criteria are realistic and attainable. + * **Relevant**: Criteria should be directly related to the ticket's goal. + * **Time-Bound**: If applicable, include deadlines or time constraints. + * If you don't know the acceptance criteria, or cannot satisfy the above conditions, open a discovery ticket to investigate the problem so that you can draft a meaningful ticket that will be more successful at addressing it. + * `Defect` and `Critical Defect` tickets often come in with no other Acceptance Criteria than something along the lines of "this problem is fixed." These should always be something like "A solution has been identified and implemented as part of this ticket or a followup ticket has been opened to implement the solution." This should allow for reasonable estimation while acknowledging the massive risk inherent in such a ticket. +* A User Story is very helpful for ensuring that we preserve a focus on improving the user experience. +* Prefer opening multiple small tickets to a single large ticket. + * Smaller tickets are easier to write, easier to test, easier to debug, easier to review, easier to close, and easier to report. + * The overhead is negligible. +* Use the `Defect` label to identify tickets for issues actively and meaningfully impacting the user experience. +* Use the `Critical Defect` label to identify tickets for issues impacting the user experience to such a degree that they need to be resolved within the current sprint. + * This will generally also be `Unplanned Work`. + * This may involve a [Postmortem](./postmortems.md), if only an informal, internal one, if there was a substantial disruption to user experience and there was a "teachable moment". +* Use the `Incident` label to identify tickets for issues impacting the user experience to such a degree that they need to be resolved *immediately*. + * This will almost always also be `Unplanned Work`. + * This will often involve a [Postmortem](./postmortems.md) unless the underlying issue was out of the team's control, e.g. an upstream failure causing a service disruption. + * This will often be opened *after* the work is done, as engineers are too busy fighting a fire to draft an informed and well-written ticket. +* Ticket status should reflect the status of the work on `main`. + * In other words, do not close a ticket for a defect that has been resolved in an integration branch. Mark it with a `Done` label. +* If work can be done on a PR targeting `main`, do it there, *not* on a PR targeting an integration branch. + +## Development + +* Prefer implementing event subscribers to hook implementations. +* Do not add new code to `va_gov_backend`. +* If significantly changing code in `va_gov_backend`, prefer relocating it to a new or existing module. +* Avoid mingling multiple concerns into a PR. Keep changes small and easily testable and reversible. +* Practice clean coding principles: + * Create new custom modules when appropriate. + * Keep functions, class methods, and classes small, concise, single-purpose, and reusable. + * Write unit tests for functions and methods. + * Use meaningful variable and function names. + * Provide clear comments and documentation in code. + * Prefer self-documenting code to comments about implementation details (which may drift out of sync). + * Use dependency injection wherever possible; do not instantiate services through `\Drupal::` or `\Drupal::service()` calls. + * Prefer modern object-oriented alternatives like event subscribers and other object-oriented APIs to legacy hook implementations. + * Refactor when appropriate. You are empowered to improve the design of existing code. + +### Theming + +* Prefer [BEM (Block, Element, Modifier)](https://getbem.com/introduction/) syntax when possible. +* Prefer CSS custom properties instead of Sass variables. + +### Contrib Modules + +* If your work depends on a contrib module behaving in a specific way, add automated tests to assure consistency across updates moving forward. +* If functionality for which your team is responsible breaks as a result of a bug added by an update to a contrib module, add automated tests to guard against regressions. + +## Automated Testing + +* Prefer unit testing for basic functionality of classes, methods, and functions. +* Prefer "existing site base" tests for complex functionality interacting with or dependent upon hooks and/or Drupal Core functionality. +* Prefer Cypress tests for complex UI functionality, forms, etc. + +## Pull Requests + +* PRs should normally have a single associated ticket. + * If there is no ticket for the work you are doing: + * Consider whether you should really be doing it. + * Consider whether this work is substantial enough that it should qualify as `Unplanned Work`. + * Clear it with the tech lead of your team, and escalate to the PM, DM, and PO. + * Open a ticket. + * If you are opening a PR that will close multiple tickets: + * Consider whether this is necessary or advisable. + * Consider what repercussions this may have if an issue forces a revert of the entire PR. +* Keep PRs in Draft until they are ready to be reviewed and merged. + * Do not rely on labels, title prefixes, etc. Only Draft mode mechanically prevents a premature merge. +* Write QA Steps that demonstrate that the PR addresses the Acceptance Criteria of the related ticket. +* If these QA Steps are automatable (and most should be), then consider adding a Cypress test. + +## Code Review + +* As a reviewer, use [conventional comments](https://conventionalcomments.org/) to signal your intent, e.g. **Nitpick**, **Suggestion (non-binding)**, **Request**, etc. +* Do not make unsolicited comments on PRs that do not belong to a member of your team unless you feel it poses a clear and present danger. + * If you have a suggestion for an alternative approach, or a concern about the ticket or the approach, escalate it to your PM/DM/PO. +* Do not review PRs that do not belong to a member of your team unless your review has been requested. + * If your review has been requested as a result of code ownership, but the code in question is owned by multiple teams, consider whether your review is necessary or valuable in this context. + * For example, `config/sync` is massive, messy, and ownership is shared between multiple teams. It is good to be aware of changes to configuration, but it is not necessarily appropriate for you to review those changes formally. +* Do not make changes to PRs that do not belong to a member of your team without their consent and approval. + * Instead, make suggestions, justify them, and allow the owner to approve or reject them. +* Do not merge new changes into PRs that do not belong to a member of your team (excluding Dependabot, etc) without their consent and approval. +* Do not merge a PR that does not belong to a member of your team without their consent and approval. +* Do not review PRs that are in "Draft" status unless you have been specifically requested. ---- From 915bd256a55c4558bfc9ac7614940f14c9a1d7cb Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 15:00:41 -0500 Subject: [PATCH 2/9] Further tweaks. --- READMES/project-conventions.md | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 09e261f0c8..3b2e14da85 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -62,12 +62,23 @@ * If your work depends on a contrib module behaving in a specific way, add automated tests to assure consistency across updates moving forward. * If functionality for which your team is responsible breaks as a result of a bug added by an update to a contrib module, add automated tests to guard against regressions. +* Ensure that contrib modules are explicitly listed as dependencies by custom modules that rely on them. ## Automated Testing -* Prefer unit testing for basic functionality of classes, methods, and functions. -* Prefer "existing site base" tests for complex functionality interacting with or dependent upon hooks and/or Drupal Core functionality. +* Prefer PHPUnit unit testing for basic functionality of classes, methods, and functions. +* Prefer PHPUnit "existing site base" (functional) tests for complex functionality interacting with or dependent upon hooks and/or Drupal Core functionality. +* Add new PHPUnit tests in `tests/phpunit//(unit|functional)/`, e.g. `tests/phpunit/va_gov_magichead/functional/Field/MaxDepthTest.php`. * Prefer Cypress tests for complex UI functionality, forms, etc. +* Add new Cypress tests in: + * `tests/cypress/integration/features/content_type` for general functionality of a specific content type. + * `tests/cypress/integration/features/` for team-specific tests + * This is intended to protect against unexpected changes to tests that support your team's mission +* Add new Cypress step definitions in: + * `tests/cypress/integration/step_definitions/common` for general purpose step definitions + * `tests/cypress/integration/step_definitions/` for team-specific step definitions + * This is intended to protect against unexpected changes to tests that support your team's mission + * `tests/cypress/integration/step_definitions/` for step definitions only relevant to a specific subject or concept ## Pull Requests @@ -92,13 +103,19 @@ * If you have a suggestion for an alternative approach, or a concern about the ticket or the approach, escalate it to your PM/DM/PO. * Do not review PRs that do not belong to a member of your team unless your review has been requested. * If your review has been requested as a result of code ownership, but the code in question is owned by multiple teams, consider whether your review is necessary or valuable in this context. - * For example, `config/sync` is massive, messy, and ownership is shared between multiple teams. It is good to be aware of changes to configuration, but it is not necessarily appropriate for you to review those changes formally. + * For example, `config/sync` is massive, messy, and ownership is shared between multiple teams. It is good to be aware of changes to configuration, but it is not necessarily appropriate for *you* to review those changes formally. * Do not make changes to PRs that do not belong to a member of your team without their consent and approval. * Instead, make suggestions, justify them, and allow the owner to approve or reject them. * Do not merge new changes into PRs that do not belong to a member of your team (excluding Dependabot, etc) without their consent and approval. * Do not merge a PR that does not belong to a member of your team without their consent and approval. * Do not review PRs that are in "Draft" status unless you have been specifically requested. +## Communication + +* Prefer communication in the open. Ask questions in the open. + * If the documentation does not contain the answer to a procedural question, add documentation containing the answer. + * If the documentation *does* contain the answer, consider revising/improving it to improve searchability/relevance/readability/anything else. + ---- [Table of Contents](../README.md) From 5d917974edddc2f937d38af6c81a87031dfa1c75 Mon Sep 17 00:00:00 2001 From: Nate Douglas Date: Wed, 13 Dec 2023 15:29:35 -0500 Subject: [PATCH 3/9] Update READMES/project-conventions.md --- READMES/project-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 3b2e14da85..d964d6c28e 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -9,7 +9,7 @@ ## Tickets -* The title should be clear and descriptive. Keep in mind that this ticket may contain useful information for years, so make it easy to search for and find. +* The title should be clear and descriptive. Keep in mind that this ticket may contain useful information for years, so make it searchable. * The description should contain as much detail as possible. It is great to link to a Slack thread, but it is better to summarize the salient points of the thread, copy and paste comments, *et cetera*, to make the ticket the source of truth. * Acceptance Criteria * Must be **SMART**: From f1ca30b2b5d345a25a6993ec750feb0d3922cd66 Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 15:29:47 -0500 Subject: [PATCH 4/9] A bit more. --- READMES/project-conventions.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index d964d6c28e..414fe0885a 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -95,6 +95,9 @@ * Do not rely on labels, title prefixes, etc. Only Draft mode mechanically prevents a premature merge. * Write QA Steps that demonstrate that the PR addresses the Acceptance Criteria of the related ticket. * If these QA Steps are automatable (and most should be), then consider adding a Cypress test. +* Do not merge a PR with unresolved comments. +* Do not resolve a comment unless you opened it. +* Resolve a comment promptly when it has received a satisfactory response. ## Code Review From 8150b9f03d9e0f5054a8209794d3b70b72ecf6a4 Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 15:56:12 -0500 Subject: [PATCH 5/9] Notes on security. --- READMES/project-conventions.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 414fe0885a..53fd08d183 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -53,6 +53,18 @@ * Prefer modern object-oriented alternatives like event subscribers and other object-oriented APIs to legacy hook implementations. * Refactor when appropriate. You are empowered to improve the design of existing code. +### Security + +* We follow a [Zero Trust Security Model](https://en.wikipedia.org/wiki/Zero_trust_security_model). + * Strictly define roles and permissions in Drupal, ensuring users have only the access they need, following the Principle of Least Privilege. + * Limit the number of administrative accounts and use them only when necessary. + * Regularly update Drupal core and modules to their latest secure versions. + * Assess the severity of vulnerabilities regardless of whether: + * the vulnerability needs to be exploited by a user + * the vulnerability needs to be exploited by a user with a specific role + * the vulnerability needs to be exploited from within the VA network + * the vulnerability needs to be exploited from the command line + ### Theming * Prefer [BEM (Block, Element, Modifier)](https://getbem.com/introduction/) syntax when possible. From af2dd2843de3eaebd3da13031b682dae76c1262d Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 15:57:15 -0500 Subject: [PATCH 6/9] Tweaks to security notes. --- READMES/project-conventions.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 53fd08d183..1fe160b71e 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -59,11 +59,11 @@ * Strictly define roles and permissions in Drupal, ensuring users have only the access they need, following the Principle of Least Privilege. * Limit the number of administrative accounts and use them only when necessary. * Regularly update Drupal core and modules to their latest secure versions. - * Assess the severity of vulnerabilities regardless of whether: - * the vulnerability needs to be exploited by a user - * the vulnerability needs to be exploited by a user with a specific role - * the vulnerability needs to be exploited from within the VA network - * the vulnerability needs to be exploited from the command line + * Assess the severity of vulnerabilities regardless of whether it needs to be exploited: + * by a user + * by a user with a specific role + * from within the VA network + * from the command line ### Theming From 3bd863a021a7717e690b95d8819b20c72247b63b Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 16:32:25 -0500 Subject: [PATCH 7/9] More information about reviewing and code ownership. --- READMES/images/ownership-badge-2.png | Bin 0 -> 23015 bytes READMES/images/ownership-badge-none.png | Bin 0 -> 20451 bytes READMES/images/ownership-badge.png | Bin 0 -> 24879 bytes READMES/project-conventions.md | 8 +++++++- 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 READMES/images/ownership-badge-2.png create mode 100644 READMES/images/ownership-badge-none.png create mode 100644 READMES/images/ownership-badge.png diff --git a/READMES/images/ownership-badge-2.png b/READMES/images/ownership-badge-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d47977906a2a9f5436066c594d4e360f0e20677c GIT binary patch literal 23015 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%0D}CA*{whEZ=ELbkviSts|F#kw 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 Lv=r}OxrY4@${#S$ literal 0 HcmV?d00001 diff --git a/READMES/images/ownership-badge-none.png b/READMES/images/ownership-badge-none.png new file mode 100644 index 0000000000000000000000000000000000000000..7b128762e851bbbee80cbadbc5ee648dd94bf8ee GIT binary patch literal 20451 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 CnYqRQ literal 0 HcmV?d00001 diff --git a/READMES/images/ownership-badge.png b/READMES/images/ownership-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..baae5f0787516ffe771f98167ee96fef17e6557d GIT binary patch literal 24879 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

D-Qo++2f^(LtvBtHXuNq-dk~)v!V&$< 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 literal 0 HcmV?d00001 diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 1fe160b71e..6a75929efc 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -118,7 +118,13 @@ * If you have a suggestion for an alternative approach, or a concern about the ticket or the approach, escalate it to your PM/DM/PO. * Do not review PRs that do not belong to a member of your team unless your review has been requested. * If your review has been requested as a result of code ownership, but the code in question is owned by multiple teams, consider whether your review is necessary or valuable in this context. - * For example, `config/sync` is massive, messy, and ownership is shared between multiple teams. It is good to be aware of changes to configuration, but it is not necessarily appropriate for *you* to review those changes formally. + * If in doubt of when and what to review, consult the badges on individual files: + * If you are on a team that has sole ownership of a particular file, treat the review request as explicit. + * ![Owned by my team](./images/ownership-badge.png) + * If the file is owned only by another team, don't review the file (or PR) unless you see a problem. + * ![Owned only by another team](./images/ownership-badge-2.png) + * If the file is owned by multiple teams, including yours, don't review the file (or PR) unless you see a problem. + * ![Owned by multiple teams](./images/ownership-badge-none.png) * Do not make changes to PRs that do not belong to a member of your team without their consent and approval. * Instead, make suggestions, justify them, and allow the owner to approve or reject them. * Do not merge new changes into PRs that do not belong to a member of your team (excluding Dependabot, etc) without their consent and approval. From c021938290ae7fdb62035d5ebfd1184d17ad4008 Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Wed, 13 Dec 2023 16:34:52 -0500 Subject: [PATCH 8/9] Adds link in Code Ownership doc. --- READMES/codeowners.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/READMES/codeowners.md b/READMES/codeowners.md index 9f75f6e365..edf01cda22 100644 --- a/READMES/codeowners.md +++ b/READMES/codeowners.md @@ -27,3 +27,9 @@ The important ideas are: 6. Viewing the CODEOWNERS file in GitHub should provide debugging information. As with everything else in this project, CODEOWNERS is subject to continual refinement and development. Please raise issues and suggest improvements where appropriate. + +For specifics about when and what you should review, see [Project Conventions](./project-conventions.md#code-review) + +---- + +[Table of Contents](../README.md) From f2bfcd19343b0d77ca3c118a61a3564a68c5fb6d Mon Sep 17 00:00:00 2001 From: Nathan Douglas Date: Thu, 14 Dec 2023 08:18:03 -0500 Subject: [PATCH 9/9] Respond to a comment from John. --- READMES/project-conventions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/READMES/project-conventions.md b/READMES/project-conventions.md index 6a75929efc..6dc90db178 100644 --- a/READMES/project-conventions.md +++ b/READMES/project-conventions.md @@ -24,6 +24,7 @@ * Prefer opening multiple small tickets to a single large ticket. * Smaller tickets are easier to write, easier to test, easier to debug, easier to review, easier to close, and easier to report. * The overhead is negligible. + * Use epics, GitHub Projects, or links between tickets to make it easier to track down related tickets. * Use the `Defect` label to identify tickets for issues actively and meaningfully impacting the user experience. * Use the `Critical Defect` label to identify tickets for issues impacting the user experience to such a degree that they need to be resolved within the current sprint. * This will generally also be `Unplanned Work`.