Triage Procedure

This document lists the procedure for how to triage Space Station 14 repository Issues and PRs, as well as definitions for the label categories.

Triage is the process of assigning appropriate labels for an Issue or PR, making it easier for reviewers, contributors and other staff to correctly prioritize items, convey progress and find things that are suitable for their area of expertise. When when not distinguishing between Issue and PR, the term “item” is used.

Who can Triage?

Triage permissions are assigned to trusted contributors and staff on the project; being a maintainer is not a requirement to be able to Triage, though someone with Triage access should have codebase knowledge to the extent that they can perform Triage correctly. Performing Triage does not require going as in-depth as a Code Review would, and should largely be possible by reading the PR description and skimming the code.

For a non-maintainer to be given Triage permissions, a thread should be opened up in the main private staff channel where staff are given 24 hours to provide input. If there is dissent by the end of the 24 hour period, staff should discuss and attempt to reach a resolution shortly thereafter. If there is no dissent, the candidate is to be given the “Triager” role on Discord and Triage permissions on Github.

Maintainers have Triage permissions by default. Game Admins can be given Triage permissions without a thread at a Maintainer’s or Project Manager’s discretion.

Abuse of the Triage permissions (intentionally assigning incorrect labels, closing PRs/issues against policy or otherwise abusing the permissions) may result in the permissions being removed and other actions taken, at the discretion of a Project Manager.

Triage Procedures

New Issue / PR Triage

Github automatically assigns the S: Untriaged label to any Issue or PR that is submitted. Triage should be performed on any such new item. Read through the item and assign appropriate labels based on its content.

When performing a triage, the goal is to add all relevant labels to the item. Triagers add tags that are subjective and need to be evaluated based on the issue or PR’s contents.

For a triage to be completed, the item must have at least one label from all the following label categories:

NameTag PrefixDescription
AreaA:Describes which area of the project an item is related to. An item may be related to multiple areas; it must always have at least one. An example would be a guidebook entry on an undocumented Science feature, which would fit within both the Guidebook and Science area. If an item doesn’t seem to fit in any area, report it to a maintainer to see if a new label needs to be made, and otherwise assign it to A: General Interactions.
DifficultyD:How hard the Issue or PR is to resolve. This is not mandatory for PRs. DB: Beginner Friendly should be tagged on any sufficiently-simple Issue that has clear instructions on how to perform the fix.
PriorityP:How urgent the Issue or PR is to be resolved. These labels are covered in a section below.
StatusS:The status of the PR. All Issues and PRs start with the tag S: Untriaged, and S: Needs Review is added once the Issue or PR is triaged. S: Requires Content PR, S: Needs Content PR Merged, and their engine equivalents, can be optionally added to Issues when a PR is required to close the Issue.
TypeT:Contextful tags about the sort of work covered by the Issue or PR, such as T: Bugfix or T: New Feature.

Once a triage is completed, remove the S: Untriaged label and attach S: Needs Review for PRs. If the PR was opened by a Maintainer, it should also receive the S: Approved label, as they count as the first approver.

During triaging, a Triager may optionally assign Issues to any of the available Issue Types Github provides:

TypeDefinition
BugSomething unexpected in the game, like a bug, a problematic feature or an exploit.
FeatureA feature request, such as a request to alter or add new content.
TaskA piece of work, such as a list of to-dos to complete a design document or a reminder to perform a chore.

Priority Labelling

Priority labels are used to indicate how important an item is to the project. These range from P0 (critical) to P3 (standard). Every triaged item should have one.

NamePrefixDescription
CriticalP0Reserved only for Issues affecting one or more live servers that render the game unplayable (e.g., round cannot progress, frequent server crashes, widespread inability to perform core gameplay actions, high-impact exploits that render core gameplay mechanics moot). PRs may only be tagged P0 if they fix a P0 Issue. P0 PRs should target the Stable branch, except when a good reason is given otherwise.
HighP1Reserved for non-critical but high-impact bugs, exploits, bugfixes, and admin tooling. These should be prioritized over all other PRs but are not emergencies. The goal is to keep the number of open P1 PRs as low as possible. Do not assign P1 to new content.
RaisedP2A non-critical, non-high-impact Issue or PR that is notable for some reason, and therefore worthy of Maintainer attention ahead of Standard Issues and PRs. Examples include content PRs that implement part or all of a design document, large-scale refactors deemed beneficial to the project, Issues used to organize work on an ongoing project, bugs and exploits that are common and have a moderate impact on the game, or high-impact bugs that are only reproducable in rare circumstances.
StandardP3The default for any non-urgent Issue or PR.

Any Issue or PR can have their Priority placed in a category outside the above descriptions by reasonable Staff consensus. In addition, the Project Lead’s word is final on if an Issue is P0 or not.

Within the above limits, any single Maintainer can adjust the priority of an unassigned item. If an item is assigned to a Maintainer, then the item should not be reprioritised without consulting them first. In case of unresolvable dispute about the priority of an item, Lead Maintainers have final say.

If the reason for a change is not completely obvious, a comment should be left explaining it, as a change with no explanation is more likely to itself be changed again later by another Maintainer acting in good faith.

Re-Triaging Old Issues and PRs

If an item have not been interacted with for a long time (more than one month), it may be relevant to re-triage. There are no labels to indicate an old item requires re-triage.

The goal of a re-triage is to determine if any of the labels need to change; this could be because the item is no longer necessary, has already been completed or is no longer frozen, as examples.

Triagers may tag an Issue or PR as S: Stale if, during a re-triage, it is determined that an Issue has likely become irrelevant or out-of-date, a draft PR has been open for a long while without any progress being made, or a PR has been inactive for a long time after being supersceded or having had changes requested.

Non-Maintainer Triagers must not tag a PR as S: Derelict. This tag is to be added by Maintainers only, usually when closing derelict PRs.

Closing Issues

Any Triager may close Issues if they are no-longer relevant.

When closing an issue, triage best practice involves adding a comment that contains one or more of the following:

  • a link to the PR that resolved it,
  • an in-game screenshot or video showing the issue is no longer relevant,
  • a note why the issue should not be addressed due to being an intended mechanic (in this last case, mark the Issue with Issue: Intended Feature).

Never Closing PRs

Non-Maintainer Triagers must never close Pull Requests. This is always a Maintainer responsibility.

Other SS14 Github Label Categories

Some other types of label exist which do not usually fall within the triage process. These include:

CategoryShorthandDescription
BranchBranchIf an item is intended for a non-master branch. Most commonly used for hotfixes.
ChangesChangesIndicates an item should be handled by someone with knowledge in a certain area. Automatically generated by Github.
FunFunLabels used to decorate funny Issues and PRs. Should be used sparingly.
IntentIntentFlags if an Issue or PR is intended to be processed using an alternate review/merge policy. Used for hotfixes or test merges.
IssueIssueReserved for Issues only, and used to denote the state of a bug report, such as requiring replication or being potentially fixed. Not necessary for simple bug reports.
SizesizeHow large the PR is codewise. Automatically generated by Github.

Non-Triager Labels

Some labels should not be used/removed by non-Maintainer Triagers, as they are either automatically applied or are to be used at Maintainer/PM discretion only.

LabelReason
All Changes tagsApplied automatically.*
All Fun tagsOnly at Maintainer/PM discretion.
All Size tagsApplied automatically.*
S: ApprovedOnly Maintainers can approve items. Applied automatically.
S: Awaiting ChangesApplied automatically.
S: Conceptual ApprovalCan only be applied by a Maintainer, following Review Procedure.
S: Undergoing Maintainer DiscussionMaintainer Discussions are at Maintainers’ discretion.
S: Art ApprovalCan only be applied by an Art Lead following their approval. If the Art Lead has forgotten to apply it, Triagers may apply this label.
S: ConcernOnly applied by a Maintainer with concern about a particular PR.
S: DO NOT MERGEOnly applied by a Maintainer to PRs when that must be blocked from merging due to integration problems, extreme controversy, or other good reasons.

* May still be applied in certain cases, if the automatic labelling is not working/not implemented.

Subpages