Skip to content

Latest commit

 

History

History
107 lines (70 loc) · 10.9 KB

CONTRIBUTING.md

File metadata and controls

107 lines (70 loc) · 10.9 KB

Contributing to the OSCAL Project

This page is for potential contributors to the OSCAL project's oscal-deep-diff. It provides basic information on the OSCAL project, describes the main ways people can make contributions, explains how to report issues with OSCAL, and lists pointers to additional sources of information.

Project approach

The approach we’re taking with OSCAL is agile. We’re adopting the philosophy of implementing the 20% of the functionality that solves 80% of the problem. We’re trying to focus on the core capabilities that are needed to provide the greatest amount of benefit. Because we’re working on a small set of capabilities, that allows us to make very fast progress. We’re building the features that we believe solve the biggest problems, so we’re providing the most value.

We track our current work items using GitHub project cards. Our active project is typically the lowest numbered open project within the previously referenced page.

Contribution options

The OSCAL project is producing several types of deliverables, including the following:

  • Constraints for defining how OSCAL documents can be compared
  • Documentation to define how the project can be used in a CLI or web project
  • Comparison Algorithms that allow for more detailed comparisons between documents

Contributions are welcome in any of these areas. For information on the project's current needs and priorities, see the project's GitHub issue tracker (discussed below). Please refer to the guide on how to contribute to open source for general information on contributing to an open source project.

Issue reporting and handling

All requests for changes and enhancements to OSCAL are initiated through the project's GitHub issue tracker. To initiate a request, please create a new issue. The following issue templates exist for creating a new issue:

  • User Story: Use to describe a new feature or capability to be added to OSCAL.
  • Defect Report: Use to report a problem with an existing OSCAL feature or capability.
  • Question: Use to ask a question about OSCAL.

The core OSCAL project team regularly reviews the open issues, prioritizes their handling, and updates the issue statuses and comments as needed.

Communications mechanisms

There are two mailing lists for the project:

Contributing to the OSCAL-deep-diff repository

The OSCAL project uses a typical GitHub fork and pull request workflow. To establish a development environment for contributing to the OSCAL project, you must do the following:

  1. Fork the oscal-deep-diff repository to your personal workspace. Please refer to the Github guide on forking a repository for more details.
  2. Create a feature branch from the master branch for making changes. You can create a branch in your personal repository directly on GitHub or create the branch using a Git client. For example, the git branch working command can be used to create a branch named working.
  3. You will need to make your modifications by adding, removing, and changing the content in the branch, then staging your changes using the git add and git rm commands.
  4. Once you have staged your changes, you will need to commit them. When committing, you will need to include a commit message. The commit message should describe the nature of your changes (e.g., added new feature X which supports Y). You can also reference an issue from the OSCAL repository by using the hash symbol. For example, to reference issue #34, you would include the text "#34". The full command would be: git commit -m "added new feature X which supports Y addressing issue #34".
  5. Next, you must push your changes to your personal repo. You can do this with the command: git push.
  6. Finally, you can create a pull request.

Repository structure

This repository consists of the following directories and files pertaining to the oscal-deep-diff sub-project:

  • .github/: Contains GitHub issue and pull request templates for the OSCAL project.
  • .vscode/: Contains editor-specific settings and run configurations.
  • bin/: Contains node executable entry-points for oscal-deep-diff CLI.
  • examples/: Contains example projects using this library.
  • meta/: Contains miscellaneous files
  • src/: Houses the source code for this project.
  • CODE_OF_CONDUCT.md: This file contains a code of conduct for OSCAL project contributors.
  • CONTRIBUTING.md: This file is for potential contributors to the OSCAL project. It provides basic information on the OSCAL project, describes the main ways people can make contributions, explains how to report issues with OSCAL, and lists pointers to additional sources of information. It also has instructions on establishing a development environment for contributing to the OSCAL project and using GitHub project cards to track development sprints.
  • DEP_LICENSES.md: This file contains a summary of external licenses that this project depends on.
  • LICENSE.md: This file contains license and copyright information for the files in the OSCAL GitHub repository.
  • package.json: Configures the project npm package.
  • package-lock.json: Contains a snapshot of the npm dependencies for the project.
  • TESTING.md: This file explains how the project is tested.
  • tsconfig.json: Configures the typescript compiler settings for building the project.

Contributing to a Development Sprint

The NIST OSCAL team is using the GitHub project cards feature to track development sprints as part of the core OSCAL work stream. A typical development sprint lasts roughly a month, with some sprints lasting slightly less or more to work around major holidays or events attended by the core project team. The active sprint is typically the lowest numbered open project within the previously referenced page.

User Stories

Each development sprint consists of a set of user stories, that represent features, actions, or enhancements that are intended to be developed during the sprint. Each user story is based on a template and describes the basic problem or need to be addressed, a set of detailed goals to accomplish, any dependencies that must be addressed to start or complete the user story, and the criteria for acceptance of the contribution.

The goals in a user story will be bulleted, indicating that each goal can be worked on in parallel, or numbered, indicating that each goal must be worked on sequentially. Each goal will be assigned to one or more individuals to accomplish.

Note: A user story that is not part of a specific development sprint can still be worked on at any time by any OSCAL contributor. When a user story is not assigned to sprint, its status will not be tracked as part of our sprint management efforts, but when completed will still be considered as a possible contribution to the OSCAL project.

Reporting User Story Status

When working on a goal that is part of a user story you will want to provide a periodic report on any progress that has been made until that goal has been completed. This status must be reported as a comment to the associated user story issue. For a user story that is part of an OSCAL development sprint, status reports will typically be made by close of business the day before the weekly OSCAL status meeting (typically held on Thursdays). Each OSCAL contributor will enter their own status update weekly indicating an estimated completion percentage against each goal to which they are assigned. Progress on goals will be tracked by the NIST OSCAL team and will be used to update the project cards for the current sprint.

When reporting status, please use the following comment template:

MM/DD/YYY - Sprint XX Progress Report

Goal: <goal text>
Progress: <a short comment on progress made since the last report>
% Complete: <a rough estimated percentage of the work completed>
Open Issues: <a list of issues encountered while addressing the goal>

When describing any open issues encountered use an "@mention" of the individual who needs to respond to the issue. This will ensure that the individual is updated with this status. Please also raise any active, unresolved issues on the weekly status calls.

Project Status

The project cards for each sprint will be in one of the following states:

  • "To do" - The user story has been assigned to the sprint, but work has not started.
  • "In progress" - Work has started on the user story, but development of the issue has not completed.
  • "Under review" - All goals for the user story have been completed and one or more pull requests have been submitted for all associated work. The NIST team will review the pull requests to ensure that all goals and acceptance criteria have been met.
  • "Done" - Once the contributed work has been reviewed and the pull request has been merged, the user story will be marked as "Done".

Note: A pull request must be submitted for all goals before an issue will be moved to the "under review" status. If any goals or acceptance criteria have not been met, then the user story will be commented on to provide feedback, and the issue will be returned to the "In progress" state.