food-market/docs/quality-status.md
nns 019c57ae3b
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
feat(s25): autonomous continuous quality monitoring (8/8)
Hourly smoke watchdog + auto-fix loop + dashboard + multi-tenant guard
+ perf regression + cleanup job + README badge.

1. ~/quality-watchdog.sh (cron 5 * * * *) — 8 checks (~60s):
   /health/ready, signup→login→/api/me, GET products, Playwright UI
   smoke (3.1 product CRUD), /metrics format, /hubs/notifications
   negotiate with token, multi-tenant isolation, perf p95.
2. Auto-fix loop: 2× consecutive red → ~/.fm-watchdog/incident-*.txt
   + queue/0000-incident-* to bump it ahead of Server-Claude's
   sprint queue. fm-watchdog.sh sees prefix 0000- as next.
3. scripts/quality-dashboard.py — renders docs/quality-status.md
   (current emoji, 8-step table, perf baseline, 7-day history,
   24-run sparkline) + injects README badge 🟢/🟡/🔴.
4. Multi-tenant smoke: signup 2 orgs `quality-{epoch}-A/B`, create
   product in A, verify B sees 404/403 + total=0.
5. Perf regression: p95 over 10 reqs for /api/me, products,
   sales/retail/stats. Baseline = median of last 10 samples
   (robust to noise). >50% from baseline → alert. First 5 runs
   always green (warm-up).
6. HousekeepingJobs.PruneQualityTestOrgsAsync (cron 30 2 * * * UTC):
   finds orgs `quality-%` older than 24h, dynamically scans
   information_schema for tables with OrganizationId, iteratively
   DELETEs with FK-violation retry (up to 10 passes), then cleans
   AspNetUser*/OpenIddict* by email pattern `quality-%@test-fm.local`,
   finally users + organizations.
7. README badge: <!-- quality-badge --> marker updated each run.

Validated: stage deploy ✓, Hangfire job registered ✓, dry-run SQL on
24 stage candidates → 0 remaining ✓, 3 cron-triggered runs all 8/8
green (12:42/12:45/12:48 +05) ✓.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 12:50:35 +05:00

61 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Quality status
_Обновлено: 2026-06-08T07:48:24+00:00 · auto-gen из `~/quality-watchdog.sh`_
## 🟢 Текущий статус
**Последний прогон:** `2026-06-08T12:48:01+05:00`
**Зелёных шагов:** 8/8
**Красных шагов:** 0
## Шаги smoke-suite
| Шаг | Статус | Последнее изменение | Consecutive fail |
|---|---|---|---|
| /health/ready | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| signup→login→/api/me | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| GET /api/catalog/products | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| Playwright UI (product CRUD) | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| /metrics (Prometheus) | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| /hubs/notifications/negotiate | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| Multi-tenant isolation | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
| Performance p95 vs baseline | 🟢 | `2026-06-08T12:48:01+05:00` | 0 |
## Performance baseline (p95, ms)
| Endpoint | p95 (ms) |
|---|---|
| `/api/catalog/products/page/1/pageSize/10` | 233 |
| `/api/me` | 259 |
| `/api/sales/retail/stats/days/7` | 228 |
_Регрессия = текущий p95 >50% от baseline. Baseline обновляется только когда регрессии нет (берёт min)._
## История за 7 дней
**Прогонов:** 14
**С красным:** 7
**Green-ratio:** 50%
### Прогоны с красным шагом
| Время | Красные шаги |
|---|---|
| `2026-06-08T12:16:05+05:00` | multi_tenant |
| `2026-06-08T12:16:52+05:00` | multi_tenant |
| `2026-06-08T12:18:01+05:00` | multi_tenant |
| `2026-06-08T12:18:35+05:00` | multi_tenant |
| `2026-06-08T12:22:49+05:00` | health, auth_me, products, metrics, signalr, multi_tenant, perf |
| `2026-06-08T12:23:00+05:00` | health, auth_me, products, metrics, signalr, multi_tenant, perf |
| `2026-06-08T12:23:18+05:00` | perf |
## Последние 24 прогона
`🔴🔴🔴🔴🟢🟢🔴🔴🔴🟢🟢🟢🟢🟢`
---
Скрипт: `~/quality-watchdog.sh` (cron `0 * * * *`).
Источник: `~/.fm-watchdog/quality-history.jsonl`.
Sprint 25 — autonomous continuous quality monitoring.