Per-repo values for the portfolio QUALITY-AND-METRICS-STANDARD.md.
Delivery plan and milestones live in OPENJOBRADAR-ROADMAP.md; this
ledger records only measured values.
| Metric | Value | Source | As of |
|---|---|---|---|
| Branch coverage | 96% (floor 85%, ratchet to be added with first release) | make test / CI |
2026-08-23 |
| Lint | ruff, full select set, clean | make lint / CI |
2026-08-23 |
| Typecheck | mypy on src/, clean |
make typecheck / CI |
2026-08-23 |
| Tests | 347 Python passing (unit + property via Hypothesis) + 35 web (Vitest) | pytest / vitest | 2026-08-23 |
| Config-schema validation | fail-closed, aggregate errors; v1→v2 migration covered | tests/test_loader.py |
2026-08-22 |
| Location-policy verdicts | 8 named rules; never raises on arbitrary input (property-tested) | tests/test_location_policy.py, ADR-0012 |
2026-08-23 |
| Hard-filter findings | 5 rule families; all findings collected; never raises on arbitrary input | tests/test_hard_filters.py, ADR-0013 |
2026-08-23 |
| Values screening | opt-in packs, neutral default; registry integrity + never-raise property-tested | tests/test_values_presets.py, ADR-0014 |
2026-08-23 |
| De-personalization | structural purge gate always on; strong local tokens enforced when .purge-tokens.local present |
tests/test_purge_gate.py, roadmap M1.6 |
2026-08-23 |
| Stranger parity | ≥3 synthetic profiles through full policy stack; per-user divergence asserted | tests/test_stranger_parity.py, roadmap M1.6 |
2026-08-23 |
| Scoring contract | 6 archetype rubrics validated (weights=1, bands descending); prompt fences sanitize untrusted input; activation gate refuses without golden evidence | tests/test_scoring_*.py, ADR-0015 |
2026-08-23 |
| Tenant isolation | adversarial model-based fuzz (2 tenants × interleaved ops) + hostile-identity probes; merge-gated | tests/test_repository_isolation.py, ADR-0016 |
2026-08-23 |
| Per-user services | settings (layered + optimistic versioning), budget caps pre-invocation, vault masked reads | tests/test_tenancy_services.py, ADR-0016 |
2026-08-23 |
| Threat model | initial STRIDE dispositions; KMS cipher + authZ middleware + DPIA tracked open | docs/THREAT-MODEL.md, M2.7 |
2026-08-23 |
| Control plane | plan caps structural (Free ≤$0.50/mo); webhooks idempotent; downgrade→dry-run invariant tested | tests/test_control_plane.py, ADR-0017 |
2026-08-23 |
| Due-work scheduling | yield-adaptive cadence (property-tested bounds/monotonicity); fair-share dispatch never starves a light user nor lets a lower lane preempt a committed higher one (unit + Hypothesis) | tests/test_scheduling.py, tests/test_dispatch_fairness.py, ADR-0018 |
2026-08-23 |
| Notify decision | threshold ladder verdict monotonic in score (property-tested); dry-run/channel axes orthogonal to verdict; quiet hours defer never drop | tests/test_notify_decision.py, ADR-0019 |
2026-08-23 |
| Source-yield tracking | capped 72-outcome per-org ledger; tier recommendation neutral below minimum sample (property-tested tier is always one of three); isolated per user | tests/test_source_yield.py, ADR-0020 |
2026-08-23 |
| M4 tenant soak (exit criterion, 1/2) | 200 synthetic tenants, heterogeneous configs, dispatched (tenant,org) pairs exactly match scheduled — no cross-talk; p95 latency half open (needs real poll infra) | tests/test_m4_tenant_soak.py, roadmap M4 exit |
2026-08-23 |
| Infra (CDK) | all three stacks synthesize clean (cdk synth, no AWS credentials — verified with credentials fully unset); 29 Jest assertions (table schema/GSI/encryption/PITR/removal policy; Cognito password/MFA/PKCE-client config; API route/authorizer/IAM/CORS); zero account-ID literals verified against synthesized output for every stack |
infra/test/*.test.ts, ADR-0021/0022/0024 |
2026-08-23 |
| DynamoDB store adapter | same isolation adversarial suite (model-based fuzz + hostile probes) reruns against a moto-mocked table, not just InMemoryStore; float⇄Decimal roundtrip verified |
tests/test_dynamo_store*.py, ADR-0023 |
2026-08-23 |
| First live API route | GET /me behind Cognito JWT authorizer synthesizes clean (6 Jest assertions: route/authorizer wiring, IAM grant, CORS per env, no account-ID literal); handler tested end to end against moto-mocked DynamoDB (5 Python tests: provision, idempotent, isolated per user, malformed-claims fails closed) |
infra/test/api-stack.test.ts, tests/test_lambda_handler_me.py, ADR-0024 |
2026-08-23 |
| Poll → score → notify pipeline | 2 ATS adapters (25 tests) against live-recorded public fixtures, one real double-HTML-encoding bug found and fixed; full pipeline (6 tests) proven against a real profile + real fixture data, plus a live (non-mocked) smoke run against GitLab's current board (204 postings, 166 scored) | tests/test_poll_adapters.py, tests/test_pipeline.py, ADR-0025 |
2026-08-23 |
| Watchlist service | CRUD isolated per tenant (8 tests); overwrite-by-slug semantics; count matches list length | tests/test_watchlist.py, ADR-0026 |
2026-08-23 |
| Scheduled poll bridge | End-to-end: watchlist entry → due-work scheduled → fair-share dispatched → pipeline runs → cadence resets on a hit / backs off on all-already-seen, across two real cycles; removed org unschedules instead of crashing (5 tests, 100% coverage) | tests/test_scheduled_poll.py, ADR-0027 |
2026-08-23 |
| Alert rendering + SES delivery | 10 tests; real send verified against moto-mocked SES; verdict/channel/dry-run/quiet-hours gating each independently proven never to send |
tests/test_notify_delivery.py, ADR-0028 |
2026-08-23 |
| Bedrock scorer | 23 tests; exact prompt-sent assertion; every response-malformation mode independently proven to fail closed (wrong type, out-of-range, missing rationale, prose-wrapped/fenced JSON, hallucinated facet dropped as noise, malformed outer envelope) | tests/test_scoring_bedrock.py, ADR-0029 |
2026-08-23 |
| Web app (PKCE sign-in) | 35 Vitest tests; generateCodeChallenge matches RFC 7636 Appendix B's own test vector exactly; full round-trip (begin → callback → token exchange) proven, including CSRF-state mismatch, replay-after-completion, and Cognito error-callback cases |
web/test/*.test.ts, ADR-0030 |
2026-08-23 |
| DORA | Not yet meaningful (pre-release) | — | 2026-08-22 |
Ratchet policy: the coverage floor only moves up. Baseline file lands alongside the first tagged release (roadmap M0/M9 exit criteria).