nns
5b87b5d599
docs: README counts up to date (240 endpoints, 58 controllers, 13 jobs)
Auto-tag / Create date-tag (push) Waiting to run
2026-06-09 03:39:35 +05:00
nns
4534f8e36c
docs: update README sprint-history до Sprint 28
Auto-tag / Create date-tag (push) Waiting to run
2026-06-09 03:37:39 +05:00
nns
019c57ae3b
feat(s25): autonomous continuous quality monitoring (8/8)
...
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
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
nns
72d0a71307
docs(s24): docs cross-check + auto-gen + onboarding + test gap-fill (8/8 ✓)
...
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
1. Docs cross-check — обновил performance-baseline.md (Sprint 18/20/23
фиксы), secrets.md (16 новых env-vars из Sprint 20+ — Authentication
Google/Microsoft, Monitoring, Cleanup, Hangfire:Cron, Telegram,
Maintenance, App, Storage, PUBLIC_GA_ID/YM_ID).
2. Auto-gen api-reference — ApiReferenceDocsJob (Hangfire weekly вс
05:30 UTC) + Python-эквивалент `/tmp/gen-api-ref.py` для commit
actual snapshot. docs/api-reference.md = 195 endpoints, 57 controllers.
3. Coverage gap-fill — Sprint18To23FeaturesTests.cs (16 Facts):
- bulk-update + cross-tenant isolation
- UserPresets CRUD
- inline-edit price PATCH
- CSV import 2 строки транзакцией
- OrgExport create + list isolation
- 1C-CSV import с русскими заголовками
- audit-log export CSV streaming + BOM check
- MoySklad sync-status stub
- SSO providers + 503 unconfigured + 400 unknown provider
- bug-001 NUL byte → 400
- bug-004 tiny price → 400
- export CSV BOM
Покрывает все новые контроллеры Sprint 18-23 + regression-protect
для критичных багов.
4. Contract tests — deploy/swagger-diff.sh: pull /swagger/v1/swagger.json
с двух URL, diff endpoints+schemas через python3. Exit 0/1/2 для
blue-green safety gate. Multi-path auto-detect.
5. docs/error-codes.md — каталог HTTP-кодов API (200-503) + humanizeError
pattern для фронта + retry-policy таблица.
6. docs/glossary.md — 50+ доменных терминов (Tenant/Organization/Stock/
StockMovement/RetailSale/Counterparty/Owner/Employee/Role/Permission/
advisory lock/Serializable/…) с ссылками на code-сущности.
7. docs/ONBOARDING.md — first 3 days для нового разработчика
(install → запуск → структура → первый PR + FAQ).
8. README.md — обновил под текущее состояние: React 19, Sprint-history
1-24, ссылки на ключевые docs, корректный 5-min quick start.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 02:15:56 +05:00
nns
1989db32bb
test(s16): regression suite 35 flows + visual 60 snapshots + nightly + CI badges
...
Sprint 16 — постоянный regression-контур: flows + visual + nightly +
CI workflow + README badges.
Ключевые цифры:
- 35 flow-тестов: 35/35 ✓ за ~30 секунд (workers=2 локально).
- 60 visual snapshot'ов (15 страниц × 2 темы × 2 viewport'a):
60/60 ✓ за ~4 минуты с retries=1.
- Полный регресс прогон: ~5 минут (цель была < 15).
Что сделано:
1. tests/regression/ — Playwright + factories + 8 spec-файлов.
OrgFactory builder создаёт org через API за O(N) HTTP вызовов
(signup → token → refs → products → counterparties → posted supplies).
Каждый flow независим, использует свой fresh-org.
2. tests/regression/visual/ — 15 страниц × 2 темы × 2 viewport'a.
Маски на динамический контент (артикулы с Date.now, KPI'ы,
delta-стрелки) чтобы 0.2% threshold не флакал. snapshotPathTemplate
c {projectName} — desktop+mobile не затирают друг друга.
3. tests/regression/factories/OrgFactory.ts — builder с .withProducts
.withCounterparties .withSupplies. Retry signup'a на 429.
4. .forgejo/workflows/regression.yml — on workflow_run после
Docker API/Web; cache на pnpm-store + Playwright-browsers;
артефакты при failure; Telegram-уведомление в обоих случаях.
5. ~/nightly-verify.sh + cron `0 4 * * *`: health → redeploy если
нужно → smoke flows; в воскресенье полный flows+visual. Логи с
ротацией 14 дней. Telegram на провал (~/.fm-watchdog/telegram-*).
6. scripts/generate-badges.sh — coverage из cobertura.xml в SVG через
shields.io (offline fallback). 4 CI-status badge + coverage badge в
README; CI step «Update coverage badge» авто-коммитит обновлённый
SVG на push в main.
Локальное число flake'ов: 1/60 visual на retry=1 (product-new light) —
случайная гонка маски, retry'ит и проходит.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 16:14:11 +05:00
nns
fd2f5ae4f3
Phase 0: project scaffolding and end-to-end auth
...
- .NET 8 LTS solution with 7 projects (domain/application/infrastructure/api/shared/pos.core/pos[WPF])
- Central package management (Directory.Packages.props), .editorconfig, global.json pin to 8.0.417
- PostgreSQL 14 dev DB via existing brew service; food_market database created
- ASP.NET Identity + OpenIddict 5 (password + refresh token flows) with ephemeral dev keys
- EF Core 8 + Npgsql; multi-tenant query filter via reflection over ITenantEntity
- Initial migration: 13 tables (Identity + OpenIddict + organizations)
- AuthorizationController implements /connect/token; seeders create demo org + admin
- Protected /api/me endpoint returns current user + org claims
- React 19 + Vite 8 + Tailwind v4 SPA with TanStack Query, React Router 7
- Login flow with dev-admin placeholder, bearer interceptor + refresh token fallback
- docs/architecture.md, CLAUDE.md, README.md
Verified end-to-end: health check, password grant issues JWT with org_id,
web app builds successfully (310 kB gzipped).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 13:59:13 +05:00