<picture>
  <source srcset="branding/hero.svg" type="image/svg+xml">
  <img alt="it-seems-fine-linter hero" src="branding/hero.png" width="100%">
</picture>

# It Seems Fine Linter
Detect vibes-based engineering and score the risk. Turns vague language into a measurable risk score for CI. Fail a PR with a single numeric risk score.

**Type:** CLI (Node.js)

![CI](https://github.com/PetriLahdelma/it-seems-fine-linter/actions/workflows/ci.yml/badge.svg) ![Release](https://img.shields.io/github/v/release/PetriLahdelma/it-seems-fine-linter) ![License](https://img.shields.io/github/license/PetriLahdelma/it-seems-fine-linter) ![Stars](https://img.shields.io/github/stars/PetriLahdelma/it-seems-fine-linter)

> [!IMPORTANT]
> Run this on trusted branches only. Strict mode can fail CI when the score crosses your threshold.

## Highlights
- Scores risky language into a numeric CI signal.
- Strict mode gates builds with explicit thresholds.
- JSON output for dashboards and trend tracking.


## Output
![Output Preview](branding/screenshots/output-demo.svg)

Example artifacts live in `examples/`.

Need help? Start with `docs/troubleshooting.md`.

```text
Vibe Risk Score: 44
Threshold: 25 (strict)
2 match(es)
- examples/input/sample.ts: it seems fine (sev 3)
Exit 2 when score >= threshold
```


## Quickstart
```bash
npx it-seems-fine-linter --paths src
```

Try a curated pack: `it-seems-fine-linter --paths src --config phrase-packs/shipping-risk.json`.


## CI in 60s
```yaml
- name: Run linter
  run: npx it-seems-fine-linter --paths src --strict --threshold 25
```

## Demo
![Demo](branding/demos/demo.gif)

```bash
it-seems-fine-linter --paths src --strict
```


## Compatibility
- Node.js: 20 (CI on ubuntu-latest).
- OS: Linux in CI; macOS/Windows are expected to work but unverified.
- External deps: none.

## Guarantees & Non-Goals
**Guarantees**
- Deterministic scoring for the same files and phrase config.
- Scans only comments and PR metadata (no runtime execution).

**Non-Goals**
- Not a security scanner or full static analyzer.
- Does not interpret runtime behavior.

## Docs
- [Requirements](docs/requirements.md)
- [Usage](docs/usage.md)
- [Configuration](docs/configuration.md)
- [Phrase Packs](docs/phrase-packs.md)
- [JSON Output](docs/json-output.md)
- [Troubleshooting](docs/troubleshooting.md)
- [Guarantees & Non-Goals](docs/guarantees.md)
- [Constraints](docs/constraints.md)

More: [docs/README.md](docs/README.md)

## Examples
See `examples/README.md` for inputs and expected outputs.

## Used By
Open a PR to add your org.


## Contributing
See `CONTRIBUTING.md`.

## License

MIT
