From 0f952f1094d0e40710b3599fb71a17d29f530bed Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:07:26 +0000 Subject: [PATCH 1/7] Add .github/SECURITY.md file --- .github/SECURITY.md | 36 ++++++++++++++++++++++++ .github/report-vulnerability-button.png | Bin 0 -> 38386 bytes 2 files changed, 36 insertions(+) create mode 100644 .github/SECURITY.md create mode 100644 .github/report-vulnerability-button.png diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..77bd1bf --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,36 @@ +# Reporting security issues + +This project's developers and community are committed to addressing security +bugs promptly and effectively. We appreciate your efforts to disclose your +findings responsibly, and will make every effort to acknowledge your +contributions. + +Please **do not** use GitHub issues to report security vulnerabilities; GitHub +issues are public, and doing so could allow someone to exploit the information +before the problem can be addressed. Instead, please use the *Report a +vulnerability* interface from the *Security* tab at the top of this GitHub +repository page. + +
+Location of the report button on the repository page +
+ +Please report security issues in third-party modules to the person or team +maintaining the module rather than this project's stewards, unless you believe +that some action needs to be taken specifically with this project in order to +guard against the effects of a security vulnerability in third-party software. + +## Responses to security reports + +The project stewards at Google Quantum AI will send a response indicating the +next steps in handling your report. After the initial reply to your report, the +project stewards will keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. + +## Additional points of contact + +Please contact the project stewards at Google Quantum AI via email at +quantum-oss-maintainers@google.com if you have questions or other concerns. If +for any reason you are uncomfortable reaching out to the project stewards, +please email opensource@google.com instead. diff --git a/.github/report-vulnerability-button.png b/.github/report-vulnerability-button.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaabdce374ef1b208e8deb26e8f5bebbc7c7909 GIT binary patch literal 38386 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 VZc;;~8qa_~X$b}Ka?wwI{~z4a2xI^N literal 0 HcmV?d00001 From ad256bf0a7ae0a873dbd7304d41cc43860032403 Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:07:53 +0000 Subject: [PATCH 2/7] Update CONTRIBUTING.md --- CONTRIBUTING.md | 53 +++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bc23aae..8da0653 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,33 +1,48 @@ # How to contribute -We'd love to accept your patches and contributions to this project. +We'd love to accept your patches and contributions to this project. We do have +some guidelines to follow, covered in this document, but don't be concerned +about getting everything right the first time! Create a pull request (discussed +below) and we'll nudge you in the right direction. ## Before you begin ### Sign our Contributor License Agreement -Contributions to this project must be accompanied by a -[Contributor License Agreement](https://cla.developers.google.com/about) (CLA). -You (or your employer) retain the copyright to your contribution; this simply -gives us permission to use and redistribute your contributions as part of the -project. - -If you or your current employer have already signed the Google CLA (even if it -was for a different project), you probably don't need to do it again. - -Visit to see your current agreements or to -sign a new one. +Contributions to this project must be accompanied by a [Contributor License +Agreement](https://cla.developers.google.com/about) (CLA). You (or your +employer) retain the copyright to your contribution; the CLA simply gives us +permission to use and redistribute your contributions as part of the project. +Please visit https://cla.developers.google.com/ to see your current agreements +on file or to sign a new one. You generally only need to submit a Google CLA +once, so if you've already submitted one (even if it was for a different +project), you probably don't need to do it again. + +> [!WARNING] +> Please note carefully clauses [#5](https://cla.developers.google.com/about/google-corporate#:~:text=You%20represent%20that%20each%20of%20Your%20Contributions%20is%20Your%20original%20creation) +> and [#7](https://cla.developers.google.com/about/google-corporate#:~:text=Should%20You%20wish%20to%20submit%20work%20that%20is%20not%20Your%20original%20creation%2C%20You%20may%20submit%20it%20to%20Google%20separately) +> in the CLA. Any code that you contribute to this project must be **your** +> original creation. Code generated by artificial intelligence tools **does +> not** qualify as your original creation. ### Review our community guidelines -This project follows -[Google's Open Source Community Guidelines](https://opensource.google/conduct/). +We have a [code of conduct](CODE_OF_CONDUCT.md) to make the project an open and +welcoming community environment. Please make sure to read and abide by the code +of conduct. ## Contribution process -### Code reviews - All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. \ No newline at end of file +use the tools provided by GitHub for [pull +requests](https://docs.github.com/articles/about-pull-requests) for this +purpose. The preferred manner for submitting pull requests is to +[fork](https://docs.github.com/articles/fork-a-repo) the repository, create a +new [git branch](https://docs.github.com/articles/about-branches) in this fork +to do your work, and when ready, create a pull request from your branch to the +main project repository. + +We follow the [Google coding style](https://google.github.io/styleguide/) for +the programming languages used in this project, with only a few deviations. The +[`.editorconfig`](.editorconfig) file in this repository defines the settings +we use. From b68e9b2b97bbeed650566a37f993da59b757f1f1 Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:07:59 +0000 Subject: [PATCH 3/7] Add CoC --- CODE_OF_CONDUCT.md | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..34ac21b --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,91 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of +experience, education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +This Code of Conduct also applies outside the project spaces when the Project +Stewards have a reasonable belief that an individual's behavior may have a +negative impact on the project or its community. + +## Conflict Resolution + +We do not believe that all conflict is bad; healthy debate and disagreement +often yield positive results. However, it is never okay to be disrespectful or +to engage in behavior that violates the project’s Code of Conduct. + +If you see someone violating the Code of Conduct, you are encouraged to address +the behavior directly with those involved. Many issues can be resolved quickly +and easily, and this gives people more control over the outcome of their +dispute. If you are unable to resolve the matter for any reason, or if the +behavior is threatening or harassing, report it. We are dedicated to providing +an environment where participants feel welcome and safe. + +Reports should be directed to quantumai-oss-maintainers@googlegroups.com, +the project stewards at Google Quantum AI. They will then work with a committee +consisting of representatives from the Open Source Programs Office and the +Google Open Source Strategy team. If for any reason you are uncomfortable +reaching out to the Project Stewards, please email opensource@google.com. + +We will investigate every complaint, but you may not receive a direct response. +We will use our discretion in determining when and how to follow up on reported +incidents, which may range from not taking action to permanent expulsion from +the project and project-sponsored spaces. We will notify the accused of the +report and provide them an opportunity to discuss it before any action is taken. +The identity of the reporter will be omitted from the details of the report +supplied to the accused. In potentially harmful situations, such as ongoing +harassment or threats to anyone's safety, we may take action without notice. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html From a6e9d57db1c4bc2a76a785fcfaa8a6c8ba4e0ada Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:08:24 +0000 Subject: [PATCH 4/7] Add SUPPORT.md --- SUPPORT.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 SUPPORT.md diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..b21b871 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,21 @@ +# Support + +Thank you for your interest in this project! If you are experiencing problems +or have questions, the following are some suggestions for how to get help. + +> [!NOTE] +> Before participating in our community, please read our [code of +> conduct](CODE_OF_CONDUCT.md). By interacting with this repository, +> organization, or community, you agree to abide by its terms. + +## Report an issue or request a feature + +To report an issue or request a feature, please first search this project's +issue tracker on GitHub to check if there is already an open issue identical or +similar to your bug report/feature request. If there is none, go ahead and file +a new issue in the issue tracker. + +## Contact the maintainers + +For any questions or concerns not addressed here, please email +quantum-oss-maintainers@google.com. From e5b548cfb08ba33516782857e50a377e064de9ba Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:14:44 +0000 Subject: [PATCH 5/7] Add .editorconfig file --- .editorconfig | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..916c94b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,53 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Common editor configurations for this project. +# +# EditorConfig is a file format for specifying some common style parameters. +# Many IDEs & editors read .editorconfig files, either natively or via plugins. +# We mostly follow Google's style guides (https://google.github.io/styleguide/) +# with only a few deviations for line length and indentation in some files. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +root = true + +[*] +charset = utf-8 +indent_style = space +insert_final_newline = true +spelling_language = en-US +trim_trailing_whitespace = true +max_line_length = 120 + +[{BUILD,*.BUILD,*.bzl,*.bazel,.bazelrc}] +indent_size = 4 + +[{*.cc,*.h}] +indent_size = 4 + +[{*.js,*.ts}] +indent_size = 4 + +[*.json] +indent_size = 2 + +[*.py] +indent_size = 4 + +[*.sh] +indent_size = 4 + +[{*.yaml,*.yml}] +indent_size = 2 From c51479e9adc77a0b203f284bd492a5a3c89b1230 Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:14:49 +0000 Subject: [PATCH 6/7] Add .markdownlintrc file --- .markdownlintrc | 160 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 .markdownlintrc diff --git a/.markdownlintrc b/.markdownlintrc new file mode 100644 index 0000000..91a0483 --- /dev/null +++ b/.markdownlintrc @@ -0,0 +1,160 @@ +{ // -*- jsonc -*- + // Copyright 2025 Google LLC + // + // Licensed under the Apache License, Version 2.0 (the "License"); + // you may not use this file except in compliance with the License. + // You may obtain a copy of the License at + // + // https://www.apache.org/licenses/LICENSE-2.0 + // + // Unless required by applicable law or agreed to in writing, software + // distributed under the License is distributed on an "AS IS" BASIS, + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + // See the License for the specific language governing permissions and + // limitations under the License. + + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Markdownlint linter configuration for this project. + // + // Note: there are multiple programs programs named "markdownlint". We use + // https://github.com/igorshubovych/markdownlint-cli/, which is the one you + // get with "brew install markdownlint" on MacOS. + // + // These settings try to stay close to the Google Markdown Style as + // described at https://google.github.io/styleguide/docguide/style.html + // with very few differences. + // + // For a list of possible configuration options, see the following page: + // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + // (Beware that the above looks similar but is NOT the same as the page + // https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md.) + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json", + + // Require ATX-style headings. + // https://google.github.io/styleguide/docguide/style.html#atx-style-headings + "headings": { + "style": "atx" + }, + + // Google style does not require that the first line of a file is a heading + // for the title; it only states that the first heading should be a level 1. + // https://google.github.io/styleguide/docguide/style.html#document-layout + "first-line-heading": false, + + // The Google style does not define what to do about trailing punctuation in + // headings. The markdownlint default disallows exclamation points, which + // seems likely to be more annoying than useful – I have definitely seen + // people use exclamation points in headings in README files on GitHub. + // This setting removes exclamation point from the banned characters. + "no-trailing-punctuation": { + "punctuation": ".,;:。,;:" + }, + + // No trailing spaces. + // https://google.github.io/styleguide/docguide/style.html#trailing-whitespace + "whitespace": { + "br_spaces": 0 + }, + + // Google style is 80 characters. + // Google style exempts some constructs from the line-length limit: + // https://google.github.io/styleguide/docguide/style.html#exceptions + "line-length": { + "line_length": 120, + "code_block_line_length": 120, + "heading_line_length": 120, + "code_blocks": false, + "headings": false, + "tables": false + }, + + // Google Markdown style specifies 2 spaces after item numbers, 3 spaces + // after bullets, so that the text itself is consistently indented 4 spaces. + // https://google.github.io/styleguide/docguide/style.html#nested-list-spacing + "list-marker-space": { + "ol_multi": 2, + "ol_single": 2, + "ul_multi": 3, + "ul_single": 3 + }, + + "ul-indent": { + "indent": 4 + }, + + // Bare URLs are allowed in GitHub-flavored Markdown and in Google’s style. + "no-bare-urls": false, + + // Basic Markdown allows raw HTML. Both GitHub & PyPI support subsets of + // HTML, though it's unclear what subset PyPI supports. Google's style guide + // recommends against using raw HTML, but does allow it. (C.f. the bottom of + // https://google.github.io/styleguide/docguide/style.html) Google's in-house + // documentation system allows many inline and block-level tags, but strips + // others that can pose security risks (e.g., and standalone ). + // The list below tries to capture the intersection of what GitHub allows + // (c.f. https://github.com/github/markup/issues/245#issuecomment-682231577), + // what PyPI seems to allow, what Google allows, and what seems likely to be + // most useful in situations where someone needs to reach for HTML. + "html": { + "allowed_elements": [ + "a", + "abbr", + "b", + "blockquote", + "br", + "caption", + "cite", + "code", + "dd", + "del", + "details", + "dfn", + "div", + "dl", + "dt", + "em", + "figcaption", + "figure", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "hr", + "i", + "img", + "ins", + "kbd", + "li", + "mark", + "ol", + "p", + "picture", + "pre", + "q", + "s", + "samp", + "small", + "span", + "strong", + "sub", + "summary", + "sup", + "table", + "tbody", + "td", + "tfoot", + "th", + "thead", + "time", + "tr", + "tt", + "ul", + "var", + "wbr" + ] + } +} From cf13f30717f1446deb573bc89136277f106eaf87 Mon Sep 17 00:00:00 2001 From: mhucka Date: Thu, 24 Apr 2025 03:14:56 +0000 Subject: [PATCH 7/7] Add .yamllint.yaml file --- .yamllint.yaml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .yamllint.yaml diff --git a/.yamllint.yaml b/.yamllint.yaml new file mode 100644 index 0000000..7b914bc --- /dev/null +++ b/.yamllint.yaml @@ -0,0 +1,27 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Yamllint configuration to match project settings like line length. +# See https://yamllint.readthedocs.io/ for info about configuration options. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +rules: + line-length: + max: 120 + # When the last item on a line can't be broken (e.g., a URL as a value), + # it's rarely useful to flag it. The next 2 settings save developer time by + # not requiring comment directives to disable warnings at every occurrence. + allow-non-breakable-words: true + allow-non-breakable-inline-mappings: true