Skip to content

Commit 7a72834

Browse files
authored
Merge pull request #1 from totalaudiopromo/feat/professional-release
feat: production-grade release
2 parents 1505cbf + d5b3b99 commit 7a72834

55 files changed

Lines changed: 5312 additions & 831 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
node-version: [20, 22]
15+
steps:
16+
- uses: actions/checkout@v4
17+
- uses: pnpm/action-setup@v4
18+
with:
19+
version: 9
20+
- uses: actions/setup-node@v4
21+
with:
22+
node-version: ${{ matrix.node-version }}
23+
cache: pnpm
24+
- run: pnpm install --frozen-lockfile
25+
- run: pnpm typecheck
26+
- run: pnpm test
27+
- run: pnpm build

‎.github/workflows/publish.yml‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Publish to npm
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: read
13+
id-token: write
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: pnpm/action-setup@v4
17+
with:
18+
version: 9
19+
- uses: actions/setup-node@v4
20+
with:
21+
node-version: '20'
22+
registry-url: 'https://registry.npmjs.org'
23+
cache: 'pnpm'
24+
- run: pnpm install --frozen-lockfile
25+
- run: pnpm typecheck
26+
- run: pnpm test
27+
- run: pnpm build
28+
- run: npm publish --provenance --access public
29+
env:
30+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

‎.gitignore‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,14 @@ dist/
55
.env
66
.env.local
77
sink.config.ts
8+
sink.config.js
9+
sink.config.json
10+
NEXT_SESSION.md
11+
package-lock.json
12+
/contacts.csv
13+
contacts-clean.csv
14+
scrubbed.csv
15+
clean.csv
16+
video/node_modules/
17+
video/out/
18+
.DS_Store

‎.npmignore‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
src/
2+
test/
3+
video/
4+
.github/
5+
.env*
6+
*.tape
7+
*.tsbuildinfo
8+
sink.config.*
9+
NEXT_SESSION.md
10+
CONTRIBUTING.md
11+
CHANGELOG.md
12+
.prettierrc
13+
eslint.config.js
14+
vitest.config.ts
15+
tsconfig.json
16+
.DS_Store

‎.prettierrc‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"semi": false,
3+
"singleQuote": true,
4+
"trailingComma": "all",
5+
"printWidth": 100,
6+
"tabWidth": 2
7+
}

‎CHANGELOG.md‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.1.0] - 2026-03-07
9+
10+
### Added
11+
12+
- Three-phase pipeline: scrub (validate), rinse (dedup), soak (enrich)
13+
- `wash` command for full pipeline execution
14+
- `scrub` command with RFC 5322 validation, UK domain typo correction, disposable detection, MX verification, role-based flagging, catch-all detection, and optional SMTP verification
15+
- `rinse` command with exact email, fuzzy name (Jaro-Winkler), domain cluster, and cross-field deduplication strategies
16+
- `soak` command with Anthropic (Claude Haiku) and OpenAI (GPT-4o-mini) enrichment providers
17+
- `spot` command for single email checks
18+
- `inspect` command for data quality scoring
19+
- `drain` command for format conversion (CSV, JSON, JSONL)
20+
- `tui` command for full terminal dashboard (Ink)
21+
- Interactive mode when run with no arguments
22+
- Resilient CSV parser with flexible header matching
23+
- Configurable via `sink.config.ts`
24+
- Programmatic API (`runPipeline`, `loadConfig`)
25+
- `--quiet` flag to suppress all output except errors
26+
- `--dry-run` flag for previewing without writing files
27+
- `--json` flag for machine-readable output
28+
- 39 unit tests

‎CONTRIBUTING.md‎

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Contributing to sink-cli
2+
3+
Thanks for your interest in contributing. This guide covers what you need to get started.
4+
5+
## Dev Setup
6+
7+
```bash
8+
git clone https://github.com/totalaudiopromo/sink-cli.git
9+
cd sink-cli
10+
pnpm install
11+
pnpm build
12+
```
13+
14+
## Scripts
15+
16+
| Command | What it does |
17+
|---------|-------------|
18+
| `pnpm build` | Compile TypeScript to `dist/` |
19+
| `pnpm dev` | Watch mode |
20+
| `pnpm test` | Run all tests (Vitest) |
21+
| `pnpm test:watch` | Tests in watch mode |
22+
| `pnpm typecheck` | Type-check without emitting |
23+
24+
## Running locally
25+
26+
After building, you can run the CLI directly:
27+
28+
```bash
29+
node dist/cli.js scrub test/fixtures/sample.csv --dry-run
30+
```
31+
32+
## Tests
33+
34+
Tests live in `test/` and mirror `src/` structure. Run them before pushing:
35+
36+
```bash
37+
pnpm test
38+
```
39+
40+
All tests should pass. If you're adding a new feature, add tests for it. If you're fixing a bug, add a test that reproduces it.
41+
42+
## Code Style
43+
44+
- TypeScript strict mode
45+
- UK spelling in user-facing text (colour, normalise, licence)
46+
- No emojis in code or output
47+
- Commits use `feat:` / `fix:` / `docs:` / `test:` / `chore:` prefixes
48+
49+
## Pull Requests
50+
51+
1. Fork the repo and create a branch from `main`
52+
2. Make your changes
53+
3. Run `pnpm typecheck && pnpm test` -- both must pass
54+
4. Open a PR with a clear description of what changed and why
55+
56+
Keep PRs focused. One feature or fix per PR is ideal.
57+
58+
## Project Structure
59+
60+
```
61+
src/
62+
cli.ts CLI entry point (Commander)
63+
pipeline.ts Pipeline orchestrator
64+
config.ts Config loader
65+
types.ts Shared types
66+
phases/
67+
scrub/ Email validation, parsing, typo correction
68+
rinse/ Deduplication strategies
69+
soak/ AI enrichment providers
70+
output/ CSV/JSON/JSONL formatters
71+
ui/ Terminal UI (format helpers, TUI, interactive)
72+
utils/ MX cache, helpers
73+
test/
74+
fixtures/ Sample CSV files
75+
scrub/ Scrub phase tests
76+
rinse/ Rinse phase tests
77+
soak/ Provider tests
78+
pipeline.test.ts Integration tests
79+
```
80+
81+
## Questions?
82+
83+
Open an issue. We're happy to help.

0 commit comments

Comments
 (0)