Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ body:
id: what-happened
attributes:
label: What happened
description: What you observed, and what you expected instead.
description: What you saw, and what you expected instead.
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: The shortest path from a clean checkout to the wrong behaviour.
description: How to get from a clean checkout to the wrong behaviour.
placeholder: |
1. ...
2. ...
Expand All @@ -24,12 +24,12 @@ body:
id: environment
attributes:
label: Environment
description: OS, shell, runner type, tool versionswhatever is relevant.
description: OS, shell, runner type, tool versions, whatever is relevant here.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant output
description: Paste the decisive lines, not the whole log. Redact secrets and tenant identifiers.
description: The lines that matter rather than the whole log. Please redact secrets and tenant identifiers.
render: shell
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ body:
id: problem
attributes:
label: The problem
description: What are you unable to do today, and in what real situation did it come up?
description: What can't you do today, and in what situation did it come up?
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed change
description: What should exist. Concrete beats abstract.
description: What should exist, described as concretely as you can.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: What you tried or rejected, and why it did not fit.
description: What you tried or ruled out, and why it didn't fit.
8 changes: 4 additions & 4 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
## What this changes

<!-- One or two sentences. What behaviour is different after this PR? -->
<!-- One or two sentences. What is different after this PR? -->

## Why

<!-- The problem this solves. Link the issue if there is one: Fixes #123 -->

## How it was verified

<!-- Commands run, workflows executed, output observed. "It should work" is not verification. -->
<!-- Commands you ran, workflows you triggered, output you saw. -->

## Checklist

- [ ] The change is scoped to one problem
- [ ] Docs/README updated if behaviour or usage changed
- [ ] No credentials, tenant ids, subscription ids, or internal hostnames in the diff
- [ ] Docs or README updated if behaviour or usage changed
- [ ] No credentials, tenant ids, subscription ids or internal hostnames in the diff
143 changes: 121 additions & 22 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,132 @@
# Code of Conduct
# Contributor Covenant Code of Conduct

## Our pledge
## Our Pledge

This project is open to anyone. Participants are expected to make it a
harassment-free experience for everyone, regardless of age, body size, visible or
invisible 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.
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

## Standards
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

Behaviour that keeps this project healthy:
## Our Standards

- being direct about technical disagreement without being personal
- accepting review feedback and giving it with reasons attached
- assuming the other person read the docs and still got stuck
Examples of behavior that contributes to a positive environment for our
community include:

Behaviour that is not acceptable:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community

- harassment, insults, or personal attacks, public or private
- publishing others' private information without explicit permission
- sustained disruption of discussions or review threads
Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders 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, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Report unacceptable behaviour to `gabriel.harnagea06@gmail.com`. Reports are
reviewed and handled in confidence. The maintainer may remove comments, commits,
issues, and pull requests that violate this Code of Conduct, and may block
repeat offenders.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
gabriel.harnagea06@gmail.com. All complaints will be reviewed and investigated
promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of
actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the
community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].

This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org),
version 2.1.
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
46 changes: 26 additions & 20 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,44 @@
# Contributing

Thanks for taking the time. This repository bootstraps AI coding-agent
configuration on a machine or a repo, so a broken change costs someone their
working setup. That shapes the rules below.
This repository bootstraps AI coding-agent configuration on a machine or a repo.
A broken change here costs someone their working setup, which is why the rules
below are stricter than the size of the code would suggest.

## Ground rules

- **Idempotence is the contract.** Every script must be safe to re-run. Never
overwrite an existing file or an existing settings key that holds a different
value — skip it and report what was skipped and why.
- **No silent installs.** Do not download or install binaries on the user's
behalf. Detect, report, and let the user decide.
- **No secrets.** No API keys, tokens, tenant ids, or internal hostnames, not
even as placeholders that look real.
Every script has to be safe to re-run. If a file or a settings key already exists
with a different value, leave it alone and report what was skipped and why.

Don't download or install binaries on the user's behalf. Detect what is missing,
say so, and let them decide.

Keep secrets out of the repository. That includes API keys, tokens, tenant ids
and internal hostnames, and it also includes placeholders that look real enough
to be copied by mistake.

## Making a change

1. Fork the repository and branch off `main`.
2. Keep the change scoped to one problem. Two unrelated fixes are two pull requests.
3. Run the script you touched on a clean machine or a throwaway profile, then run
it a second time to prove it is idempotent.
4. Update `README.md` when behaviour or usage changes.
5. Open a pull request and fill in the template, including what you actually ran.
it again to check that the second run is a no-op.
4. Update `README.md` if behaviour or usage changed.
5. Open a pull request and fill in the template, including what you ran.

## PowerShell style

- `Set-StrictMode -Version Latest` and `$ErrorActionPreference = 'Stop'` at the top
- Approved verbs for function names (`Get-`, `Set-`, `Test-`, `Install-`)
- Full parameter names in scripts — no positional guessing, no aliases
- Prefer `Test-Path` guards over `try`/`catch` for expected conditions
- The pull-request CI runs PSScriptAnalyzer; warnings and errors block the merge
- approved verbs for function names (`Get-`, `Set-`, `Test-`, `Install-`)
- full parameter names in scripts, no positional arguments and no aliases
- `Test-Path` guards for conditions you expect, `try`/`catch` for the ones you don't
- PSScriptAnalyzer runs on every pull request; warnings and errors block the merge

`PSAvoidUsingWriteHost` is switched off in `PSScriptAnalyzerSettings.psd1`. These
scripts are an installer and a statusline renderer, so what they print to the
console is the point.

## Adding a provider

Providers live under `providers/<name>/` and each ships its own `install.ps1`.
A new provider should follow the layout of an existing one, stay idempotent, and
be selectable through `.\init.ps1 -Provider <name>`.
Providers live under `providers/<name>/` and ship their own `install.ps1`. Follow
the layout of one that already exists, keep it re-runnable, and make it selectable
through `.\init.ps1 -Provider <name>`.
31 changes: 16 additions & 15 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,30 @@

## Supported versions

This project is maintained on the `main` branch. Fixes land there; there are no
long-lived release branches to back-port to.
Everything is maintained on `main`. There are no release branches, so fixes go
there and nowhere else.

## Reporting a vulnerability

Do not open a public issue for a security problem.
Please don't open a public issue for a security problem.

Use GitHub's private reporting instead: **Security Report a vulnerability** on
this repository. If private reporting is unavailable to you, email
Use GitHub private reporting instead: **Security > Report a vulnerability** on
this repository. If that isn't available to you, write to
`gabriel.harnagea06@gmail.com` with `SECURITY` in the subject.

Please include:
Useful things to include:

- what the issue is and where it lives (file, line, or command)
- how to reproduce it, ideally with a minimal example
- what an attacker gains, and any preconditions they need
- what the issue is and where it lives, ideally down to the file or the command
- how to reproduce it, with a minimal example if you have one
- what an attacker gets out of it, and what they need in place first

You can expect an acknowledgement within 7 days and a status update within 30.
Please give me a reasonable window to ship a fix before disclosing publicly.
I'll try to acknowledge within 7 days and give you a status update within 30.
This is a personal project maintained by one person, so please leave some room
for a fix before going public.

## Scope

Configuration and workflow examples in this repository are meant to be read and
adapted, not run blindly against production. Reports about hardcoded credentials,
privilege escalation through a workflow, or an example that is unsafe by default
are in scope and welcome.
The configuration and workflow examples here are written to be read and adapted.
Running them as-is against a production system isn't the intended use. Reports
about hardcoded credentials, privilege escalation through a workflow, or an
example that is unsafe by default are all welcome.