# Contributing

Thank you for your interest in contributing to Perspective!

## Guidelines

When submitting or commenting on an Issue, please respect the following
guidelines. Github Issues are Perspective's project record of bugs and feature
development, e.g. for publishing a release's Changelog, and as such it is
important to keep them informative and on-topic. As such, please understand that
we may remove or reclassify comments, Issues or PRs which violate the
guidelines.

Please note that due to the we may close your Issue or Pull Request for one of
the reasons listed here or in the associated contribution template. If you find
your contribution closed with a link to this document or a contribution
template, please make sure you've followed the instructions closely before
re-submitting.

- Be respectful and civil!
- Use the provided Issue and Pull Request templates. If the templates don't fit
  your need, please open a
  [discussion](https://github.com/perspective-dev/perspective/discussions)
  instead.
- Don't ask for issues to be assigned to you if you're a first-time contributor.
  If you need help picking an issue to work on, please open a
  [discussion](https://github.com/perspective-dev/perspective/discussions).
- Don't add comments asking when a feature will be delivered or a reported issue
  fixed. The Issue will link any in-progress draft PRs or Milestones (if known).

When submitting a Pull Request (PR), please respect the following coding
guidelines:

- Don't open a PR without an associated
  [Open Issue](https://github.com/perspective-dev/perspective/issues) which has
  been tagged by a project maintainer.
- Make sure your PR passes _build_, _test_ and _lint_ steps _completely_ before
  opening a PR. Make _sure_ you've run these locally, even if you think your
  change will not impact this step!
- Sign commits (e.g. with `-s`) in accordance with the DCO policy detailed
  below, _before_ opening a PR.
- Please make sure PRs include the following _not optional_ components:
    - Tests asserting behavior of any new or modified features.
    - Docs for any new or modified public APIs.
    - [Benchmarks](https://perspective-dev.github.io/docs/development/#benchmark)
      for any performance-critical changes.

- Keep PRs clean, simple and to-the-point:
    - Squash "WIP", "Reverting ..", etc., commits.
    - No merge commits (`git merge master`), prefer `rebase` to resolve
      conflicts with the `master` branch.
    - Try to organize commits as functional components (as opposed to
      timeline-of-development).

## DCO

> [!IMPORTANT]
>
> Signed commits are required for all PRs.

The Perspective project requires contributors to affirm their contributions via
a [Developer Certificate of Origin](https://developercertificate.org), which
certifies that developers are authorized to make their contribution, either on
their own behalf or on behalf of their employer.

In practice, this means that all commits to Perspective must be signed (e.g.
with `-s`/`-S`). Pull requests with any unsigned commits, or where the signer
does not match the commit author, can not be merged by Perspective's committers.
We ask that you check that you have a signed all your commits before making a
pull request. A [DCO enforcement bot](https://github.com/apps/dco) will
automatically scan and flag any pull requests that lack a valid sign-off.

If you have any general questions about contributing to Perspective, please feel
free to open a discussion on
[github](https://github.com/perspective-dev/perspective/discussions)

## AI Assistance Notice

This section was forked from
[`ghostty`](https://github.com/ghostty-org/ghostty),
[MIT License](https://github.com/ghostty-org/ghostty/blob/main/LICENSE)
([File](https://github.com/ghostty-org/ghostty/pull/8289/files))
([PR](https://github.com/ghostty-org/ghostty/pull/8289)). Thanks @mitchellh!

> [!IMPORTANT]
>
> If you are using **any kind of AI assistance** to contribute to Perspective,
> it must be disclosed in the pull request.

If you are using any kind of AI assistance while contributing to Perspective,
**this must be disclosed in the pull request**, along with the extent to which
AI assistance was used (e.g. docs only vs. code generation). If PR responses are
being generated by an AI, disclose that as well. As a small exception, trivial
tab-completion doesn't need to be disclosed, so long as it is limited to single
keywords or short phrases.

An example disclosure:

> This PR was written primarily by Claude Code.

Or a more detailed disclosure:

> I consulted ChatGPT to understand the codebase but the solution was fully
> authored manually by myself.

Failure to disclose this is first and foremost rude to the human operators on
the other end of the pull request, but it also makes it difficult to determine
how much scrutiny to apply to the contribution.

In a perfect world, AI assistance would produce equal or higher quality work
than any human. That isn't the world we live in today, and in most cases it's
generating slop. I say this despite being a fan of and using them successfully
myself (with heavy supervision)!

Please be respectful to maintainers and disclose AI assistance.

## Final Pull Request Checklist

Before opening a Pull Request, be sure:

- Includes a thorough Description which clearly states what problems the PR
  solves.
- Description contains a link to the Github Issue, and any relevent Discussions,
  this PR applies to.
- Include new tests that fail without this PR but passes with it.
- Include any relevent Documentation changes related to this change.
- Verify all commits have been _signed_ in accordance with the DCO policy.
- Disclosed AI tooling assistance.
- Reviewed PR commit history to remove unnecessary changes.
- Make sure your PR passes _build_, _test_ and _lint_ steps _completely_.
