diff --git a/README.md b/README.md index e585ad8..c5eedd1 100644 --- a/README.md +++ b/README.md @@ -162,18 +162,24 @@ Any `.xlsx`/`.csv` landing under `raw/` invokes the classifier. ## Local development - pyenv Python 3.12. `ruff check` + `ruff format --check` before pushing (hook-enforced). -- Tests: `python -m pytest tests/ -q` (60 tests — classifier smoke test against a real - export + offline `cdk.assertions` synth checks + Block Kit builders). No AWS needed. -- Smoke-test the classifier against a **real export** before declaring any - classification change done: `~/Downloads/_documents/Sheet1-1.xlsx`. -- `cdk synth` must pass in CI before merge (**Docker required** — Lambda deps are - bundled for ARM64). +- Tests: `python -m pytest tests/ -q` (~158 tests — classifier rule ladder + handler + transforms + Haiku fallback, Block Kit builders, the signature-verified Slack + interactions endpoint, slack-post orchestration, and offline `cdk.assertions` synth + checks). No AWS needed — external boundaries are monkeypatched. **Tests run in CI** + (`ci.yaml` sets `run-tests: true`); coverage is reported via `pytest-cov` + (`tests/requirements.txt`, ~94%, non-gating). +- The classification quality gate (deterministic "Other" share) runs in CI against a + committed synthetic fixture `tests/fixtures/sample_export.csv`. Additionally, + smoke-test against the **real export** before declaring any classification change + done: `~/Downloads/_documents/Sheet1-1.xlsx` (skips automatically when absent). +- `cdk synth` must pass in CI before merge (**Docker + QEMU** — Lambda deps are + bundled for ARM64; `ci.yaml` sets `enable-qemu: true`). ## Deployment CI/CD via the org reusable workflows (no manual prod deploys in steady state): -- **CI** (`.github/workflows/ci.yaml`) → `ci-python-sam.yaml@main`: ruff + `cdk synth`. Runs on PRs into `main`. +- **CI** (`.github/workflows/ci.yaml`) → `ci-python-sam.yaml@main`: ruff + `pytest` + `cdk synth` (QEMU-enabled). Runs on PRs into `main`. - **Deploy** (`.github/workflows/deploy.yaml`) → `cd-cdk.yaml@main`: OIDC assume-role, `cdk deploy --all`, single-flight concurrency. Runs on push to `main`. Stack name/region/account: `apm-wo-analysis-{pipeline,grafana}` / us-east-1 / 328440206208.