diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000..56ff482
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @procore-oss/procore-sift
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 0000000..b8cf937
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,64 @@
+name: 🐞 Bug
+description: File a bug/issue
+title: "[bug]
"
+labels: [bug, needs-triage]
+body:
+- type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+- type: checkboxes
+ attributes:
+ label: Is this a regression?
+ description: Did this behavior work before?
+ options:
+ - label: Yes, this used to work before
+ required: false
+- type: textarea
+ attributes:
+ label: Current Behavior
+ description: A concise description of what you're experiencing.
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Expected Behavior
+ description: A concise description of what you expected to happen.
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Steps To Reproduce
+ description: Steps to reproduce the behavior.
+ placeholder: |
+ 1.
+ 2.
+ 3.
+ 4.
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Environment
+ description: |
+ examples:
+ - **OS**: OSX 13.3.1
+ - **Browser Name and Version**: Chrome Version 112.0.5615.49 (Official Build) (arm64)
+ value: |
+ - OS:
+ - Browser Name and version:
+ render: markdown
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Anything else?
+ description: |
+ Links? References? Anything that will give us more context about the issue you are encountering!
+
+ Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..3ba13e0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1 @@
+blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml
new file mode 100644
index 0000000..5e098c7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/docs.yml
@@ -0,0 +1,18 @@
+name: 📚 Documentation or README.md issue report
+description: File a bug/issue for docs or README.md
+title: "[bug] "
+labels: [docs, needs-triage]
+body:
+ - type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+ - type: textarea
+ attributes:
+ label: Docs/README.md Part to update
+ description: A concise description of what you think should be updated
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 0000000..e51081f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,36 @@
+name: 🚀🆕 Feature Request
+description: Suggest an idea or possible new feature for this project
+title: "[Feature Request] "
+labels: [feature, needs-triage]
+body:
+- type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+- type: textarea
+ attributes:
+ label: Is your feature request related to a problem? Please describe
+ description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Describe the feature you'd like to see implemented
+ description: A clear and concise description of what you want to happen
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Describe alternatives you've considered
+ description: A clear and concise description of any alternative solutions or features you've considered
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Additional context
+ description: Add any other context or additional information about the problem here
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/question-support.yml b/.github/ISSUE_TEMPLATE/question-support.yml
new file mode 100644
index 0000000..c37ec1d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question-support.yml
@@ -0,0 +1,18 @@
+name: ❓ Question or Support Request
+description: Questions and requests for support
+title: "[Question/Support] "
+labels: [question, support, needs-triage]
+body:
+- type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+- type: textarea
+ attributes:
+ label: Describe your question or ask for support
+ description: A concise description of what you would like support with
+ validations:
+ required: true
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..83a1789
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,17 @@
+
+Checklist:
+
+* [ ] I have updated the necessary documentation
+* [ ] I have updated the changelog, if necessary (CHANGELOG.md)
+* [ ] I have signed off all my commits as required by [DCO](../CONTRIBUTING.md)
+* [ ] My build is green
+
+
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
new file mode 100644
index 0000000..7c2088a
--- /dev/null
+++ b/.github/dependabot.yaml
@@ -0,0 +1,7 @@
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ timezone: "America/Chicago"
diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 0000000..bf8194f
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,9 @@
+repo:
+ - changed-files:
+ - any-glob-to-any-file:
+ - .github/**/*
+ - README.md
+ - .gitignore
+ - .gitattributes
+ - .gitmodules/**/*
+ - LICENSE
diff --git a/.github/workflows/auto-assign-author.yml b/.github/workflows/auto-assign-author.yml
new file mode 100644
index 0000000..36d29f0
--- /dev/null
+++ b/.github/workflows/auto-assign-author.yml
@@ -0,0 +1,15 @@
+name: "Auto Author Assign"
+on:
+ pull_request:
+ types: [opened, reopened, synchronize]
+
+permissions:
+ pull-requests: write
+
+jobs:
+ assign:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: toshimaru/auto-author-assign@4d585cc37690897bd9015942ed6e766aa7cdb97f # v3.0.1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 0000000..af653be
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,15 @@
+name: "Pull Request Labeler"
+on:
+ pull_request_target:
+
+permissions:
+ contents: read
+ pull-requests: write
+
+jobs:
+ labeler:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 0000000..016f28d
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,40 @@
+name: "Close stale issues and PR"
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: "30 1 * * *" # https://crontab.guru/#30_1_*_*_* (everyday at 0130)
+
+permissions:
+ issues: write
+ pull-requests: write
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
+ with:
+ operations-per-run: 200
+ ascending: true
+ delete-branch: true
+ stale-issue-message: >
+ This issue is stale because it has been open 10 days with no activity.
+ Replace the `no-issue-activity` label with a `work-in-progress` label or comment or
+ this will be closed in 5 days.
+ close-issue-message: >
+ This issue was closed because it has been stalled for 5 days with no activity.
+ days-before-issue-stale: 10
+ days-before-issue-close: 5
+ stale-issue-label: "no-issue-activity"
+ exempt-issue-labels: "awaiting-approval,work-in-progress"
+ stale-pr-message: >
+ This PR is stale because it has been open 20 days with no activity.
+ Replace the `no-pr-activity` label with a `work-in-progress` label or comment or
+ this will be closed in 5 days.
+ close-pr-message: >
+ This PR was closed because it has been stalled for 5 days with no activity.
+ days-before-pr-stale: 20
+ days-before-pr-close: 5
+ stale-pr-label: "no-pr-activity"
+ exempt-pr-labels: "awaiting-approval,work-in-progress,dependencies"
+ exempt-pr-assignees: "snyk-github"
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..61bdf70
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to make participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, 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.
+
+## Enforcement
+
+Instances of abusive, harassing or otherwise unacceptable behavior may be
+reported by contacting the project team at . All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality concerning the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..605c8d9
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,23 @@
+# **Contributing**
+
+When contributing to this repository, please first discuss the change you wish to make via issue,
+email, or any other method with the owners of this repository before making a change.
+
+Please note we have a [code of conduct](CODE_OF_CONDUCT.md); please follow it in all your interactions with the project.
+
+## Pull Request Process
+
+1. Ensure any install or build dependencies are removed before the end of the layer when doing a
+ build.
+2. Update the README.md with details of changes to the interface; this includes new environment variables, exposed ports, valid file locations and container parameters.
+3. Increase the version numbers in any examples files and the README.md to the new version that this
+ Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
+4. You may merge the Pull Request once you have the sign-off of two other developers, or if you
+ do not have permission to do that, you may request the second reviewer to merge it for you.
+
+## Issue Report Process
+
+1. Go to the project's issues.
+2. Select the template that better fits your issue.
+3. Read the instructions carefully and write within the template guidelines.
+4. Submit it and wait for support.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8afa34c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2026 Procore Technologies, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/MIT-LICENSE b/MIT-LICENSE
deleted file mode 100644
index fd116ba..0000000
--- a/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 2016 Adam Hess
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..831fb81
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,9 @@
+# **Reporting Security Issues**
+
+The project's team and community take security issues seriously.
+
+We appreciate your efforts to disclose your findings responsibly and will make every effort to acknowledge your contributions.
+
+To report a security issue, go to the project's issues and create a new issue using the ⚠️ Security Report 'issue template'.
+
+We'll endeavor to respond quickly and keep you updated throughout the process.