00e350cac9
fix(products): DETTE-STD-9 shared pricing predicate + DETTE-STD-8-A audit logs (SPEC-STD-9-DETTES)
...
DETTE-STD-9: shared lineRequiresPricing predicate in src/shared/pricing-line-types.ts
consumed by products.service.ts (badge L51) and orders.service.ts (createStandard
L240 + preview L583) to prevent badge/canCreate divergence.
DETTE-STD-8-A: PRODUCT_DELETE audit in $transaction with snapshot (id/code/name/
smetaId/counts) captured BEFORE cascade. PRODUCT_ARCHIVE audit best-effort.
userId passed from route handlers.
E2E fix: Popconfirm selector scoped via .ant-popover:visible + .first() for
duplicate toast messages (T-STD8-02/03).
13/13 Vitest, 23/23 Playwright products green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-05 02:18:56 +04:00
0e4f28d4b8
feat(products): SPEC-STD-8 product deletion — ADMIN-only cascade + $transaction + 409 guard
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-05 01:10:07 +04:00
73f9be47bf
feat(std-6): promotion UI + 5 E2E tests + display:none bug fix (SPEC-STD-6-UI-PROMOTION)
...
PromoteSmetaDrawer 3-step UI (info→compare→result), findSimilarSmetas
Jaccard ≥80%, comparison table with override "Б" for MATERIAL lines,
non-MATERIAL read-only + Alert banner. Fix AntD Form.Items unmount on
conditional rendering (display:none pattern preserves values).
5 E2E Playwright tests (T-PROM-01..05). 18/18 std-6 green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-05 00:00:38 +04:00
6ff8a63887
feat(orders): Segmented UI + catalog thumbnails in CreateOrderDrawer (SPEC-STD-5)
...
Replace Select→Segmented for order type (Импорт Excel / Товар из каталога).
Product Select shows 28x28 thumbnails, code+name, and base price ₽/ед.
Fix critical notification modal blocking E2E tests (dismissCriticalModal in loginAs).
Fix std-6 strict mode violation (scope getByText to psm-lines-table).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-03 09:58:03 +04:00
cdcb11c387
test(smeta): add 8 file persistence assertions + CLAUDE.md session 170
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-02 12:53:27 +04:00
a767aec689
feat(work-log): admin recompute endpoint + convention actualLabor (SPEC-RECOMPUTE-ACTUALLABOR-ROBUSTE)
...
POST /work-logs/recompute/:orderId (ADMIN-only, idempotent) repairs
ghost actualLabor after SQL-direct deletion of VERIFIED WorkLogs.
Convention documented in CLAUDE.md. 3 test-gardes (T-TRUD3-19/20/18a).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-02 00:59:33 +04:00
e088a9edfd
fix(work-log): verify 400 + summary VERIFIED-only + HOURLY % cost-based (TRUD-4B-2-FIX)
...
FIX A: verifyWorkLog sends {} body (Fastify FST_ERR_CTP_EMPTY_JSON_BODY).
Batch verify collects per-line errors with unified recap message.
FIX B: summary progressPercent + Факт now use VERIFIED-only data.
PENDING shown separately (в ожидании: X ₽). New fields: quantityVerified,
costPending, baremeUnitPrice per operation.
FIX C: HOURLY progressPercent uses cost-based formula (costVerified/baremeTotal)
instead of qty-based (hours/smetaQty units mismatch).
FEATURE D: operation cards show total target (X шт / X ч / X м²) with
verified progress in matching unit.
23/23 Vitest green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-30 12:04:28 +04:00
2e9e1c9e1f
feat(work-log): SPEC-TRUD-4B-2 blocking ceiling + full UI (SAISIE-DECOMPTE-ET-VERIFICATION)
...
Phase 0: excessJustification field on WorkLog, anti-sur-décompte now BLOCKING
(reject 400 with CEILING_EXCEEDED/BUDGET_EXCEEDED if no justification), route
returns structured error with ceilingCheck/hourlyBudgetCheck for frontend.
22 Vitest (6 new: blocking reject, accept with justification, HOURLY cost,
no-store when OK). DB pushed erp_local+erp_test.
Phase 1-3: LaborTab.tsx rewritten — entry form (op/worker/date/qty selects,
live cost calc, remaining ceiling display, dynamic justification field),
verification queue (multi-select PENDING + batch verify, reject modal),
summary KPIs (progress per operation, excess alerts), barème detail preserved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-29 17:11:42 +04:00
30488ff007
feat(work-log): native work accounting system (SPEC-TRUD-3-DECOMPTE)
...
Worker model + WorkLog with 3 payment modes (PIECE/HOURLY/AREA),
anti-sur-décompte ceiling alerts (non-bloquant), production
verification workflow (PENDING→VERIFIED→actualLabor recompute),
9 REST endpoints, 18 Vitest tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-26 17:06:26 +04:00
c5d4da87d9
fix(labor-bareme): PIECE default classification — hourly reserved for 4 non-normable ops (SPEC-TRUD-2-CLASSEMENT)
...
Default classification changed from HOURLY+needsReview to PIECE normée.
HOURLY = only 4 configurable patterns (Погрузочно-разгрузочные, Упаковочные, Наклейка, Мехобработка).
PIECE formula: smetaTotal × 50% (not unitPrice × qty — unitPrice may be hourly estimation rate).
PIECE_RATE branch merged into default (same formula, workerCategory=SLESAR preserved).
needsReview reserved for true unknowns (currently none).
Fixes orderId=11 from 359% to expected ~50%.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-26 16:41:27 +04:00
304d5cf050
fix(labor-bareme): 3 corrections cascade réel (SPEC-TRUD-2-CORRECTION)
...
- #1 : Skip zero-value lines (К-во узлов template rows → 0₽ noise)
- #2 : Hourly pattern detection (configurable list, qty/60 conversion)
- #3 : Exclude aggregate Сварочно-сборочные when labor nodes exist
- needsReview flag for unclassified default lines
- LaborConfig extended: hourlyPatterns + aggregateExcludePatterns
- 25 Vitest (6 new: T-TRUD2-20..25)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-26 13:23:40 +04:00
ee55c031ae
fix(smeta): tabular format parser + Anthropic model ID update (claude-sonnet-4-6)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-26 11:37:33 +04:00
fca75994b5
feat(labor-bareme): barème travail auto-généré au lancement commande (SPEC-TRUD-2)
...
6 enums + 2 modèles Prisma (LaborConfig singleton, OrderLaborOperation).
Cascade NODE_PRICE→PAINT_RATE→DEFAULT 50%, snapshot config, cost guard,
override MANUAL, split LABOR_NODE. 7 routes REST. Câblé orders.service.ts
IN_PRODUCTION L942-944. 19 Vitest.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-11 16:25:05 +04:00
02d96070f4
feat(smeta): add per-node welding cost parser (SPEC-TRUD-1-PARSER-POUZLOVOY)
...
Parse ПОУЗЛОВОЙ РАСЧЕТ СЕБЕСТОИМОСТИ ТРУДОЗАТРАТ section from smeta Excel.
SmetaLaborNode model (23 fields), state machine parser, image extractor,
proximity photo matching. Non-regressive: smetas without section unaffected.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-11 15:49:47 +04:00
2b527e6c9f
feat(supplier-channels): supplier notification dispatch with channel resolution (SPEC-MAX-3A)
...
SupplierNotificationService resolves preferred channel (MAX/Telegram/email fallback),
dispatches anodin notifications via MaxOutboundMessage queue or existing senders.
Hooked into tender send() + addAndSendToSupplier() + PO sendPOEmail(). Idempotent
via SupplierNotificationLog unique constraint. 11 Vitest tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-10 20:29:34 +04:00
b09e3bda21
feat(max-relay): SPEC-MAX-2B ERP relay endpoints for MAX messenger
...
3 relay endpoints guarded by X-Relay-Secret (constant-time comparison):
- GET /max-relay/outbound — pending messages for relay to poll
- POST /max-relay/outbound/:id/ack — idempotent ack (SENT/FAILED)
- POST /max-relay/inbound — persist + auto-dispatch pairing codes via linkChatToSupplier (Spec 1)
Admin test endpoint POST /max-relay/test-enqueue (normal ERP auth ADMIN).
2 Prisma models: MaxOutboundMessage (PENDING/SENT/FAILED), MaxInboundMessage (processed flag).
16 Vitest tests (guard secret, idempotence ack, pairing dispatch, error resilience).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-10 14:42:38 +04:00
d8b990f9d2
feat(supplier-channels): SPEC-MAX-1 opt-in mapping canal fournisseur↔messager
...
Appariement fournisseur↔messager par code jetable (XXXX-XXX, 14j, usage unique).
Rattachement idempotent: même chatId+supplier=no-op, chatId lié à autre supplier=CONFLICT (jamais de double rattachement silencieux — test reine T-SC-06).
Backend: SupplierChannelLink + ChannelPairingCode modèles Prisma, MessagingChannel + PairingStatus enums, Supplier.preferredChannel, SupplierChannelsService (generateCode, linkChatToSupplier, setPreferredChannel, deactivateLink, revokeCode, expireStaleCodes), 7 REST endpoints /api/v1/supplier-channels, 16 Vitest. Frontend: SupplierChannelsSection (preferred channel, active links, pending codes, generate modal RU/FR), intégré SuppliersTab drawer.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-10 14:02:22 +04:00
906be42187
feat(kpi): 2G discharge rate — weighted automation KPI
...
ActionCatalog model (16 action types seeded, level N0-N3, value
FORTE/MOYENNE/FAIBLE). DischargeKpiService calculates weighted rate:
Σ(AI actions × level_weight × value_weight) / Σ(all × value_weight).
Dashboard endpoint GET /admin/agent/kpi/discharge with decomposition
by module and value class. Priority targets highlight high-value N0/N1
actions (roadmap guidance). Warning about ERP-only scope displayed.
6/6 Vitest green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 17:13:30 +04:00
c8d427012a
feat(learning): 2F apprentissage par observation — leçons métier
...
AgentLesson model (PROPOSED→CONFIRMED→PROMOTED/PERSONAL/REJECTED).
LearningService: event evaluation, surprise detection via KB retrieval,
budget 2 questions/day/user, validation 2 levels (actor + admin),
bridge PROMOTED→KB article ingestion, PERSONAL→UserMemory.
Routes admin /learning/lessons (list/confirm/reject/promote/evaluate).
9/9 Vitest green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-02 14:12:10 +04:00
e90fc9663e
feat(supervisor): 2E proactivity level 1 — registers + kill-switch
...
DetectorConfig model classifies 10 detectors into 4 registers:
PLANCHER (D10, incoupable), ANOMALIE (D3), IMPORTANT (coupable),
BRUIT_DE_FOND (passive, never dispatched). AugustSilenceState
model for kill-switch: CALM (silences IMPORTANT, PLANCHER passes)
and TOTAL (2h max, silences everything). Filter integrated into
supervisorTick. Admin endpoints for silence + detector config.
7/7 Vitest green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-01 18:50:03 +04:00
2a5a8846e5
fix(copilot): move directExecution from UserMemory to ChatPreference model
...
UserMemory is conversational memory (facts about the user), not an
application settings store. The direct-execution toggle now lives in
a dedicated ChatPreference model (1:1 per user, default false).
Prevents collision with future 2B conversational memory wiring.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-29 17:40:13 +04:00
6f9a99344a
feat(engagement): SPEC-BLOC-1H — 25 E2E tests engagement + docs + rapport final BLOC-1
...
25 nouveaux tests Playwright (6 decisions + 5 reminders + 5 agenda + 4 router-admin + 5 pwa-cross).
3 bugs backend corriges (Prisma relation logs→log, CalendarConfig field mapping, seed options).
Documentation: MANUAL-VALIDATION-BLOC-1.md, cleanup-demo-engagement.sh, BLOC-1-RAPPORT-FINAL.md.
47/47 engagement E2E green, 0 regressions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-28 09:36:43 +04:00
7d99ca7f35
feat(engagement): SPEC-BLOC-1E — Multi-channel Outbound Router + frontend Engagement modules
...
RouterService multi-canal (ERP_IN_APP SSE, PWA_PUSH stub, TELEGRAM, EMAIL) avec quiet hours,
aggregation, escalation watchdog, ACK tokens HMAC. Frontend: Agenda, Decisions, Reminders pages.
52 Vitest, 0 erreurs TS.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-27 16:08:41 +04:00
a44d36e769
feat(engagement): SPEC-E2E-TASKS-1C — 22 Playwright E2E tests for Tasks module
...
- 5 test groups: Navigation (4), CRUD Modal (5), List Filters (5), Kanban (5), Detail Drawer (3)
- Seed: 6 tasks (4 admin, 1 commercial, 1 acheteur private)
- Fix backend search bug: OR conditions for q and privacy were merged into a single OR,
causing search to match all tasks. Changed to AND of separate OR groups.
- Playwright project 'engagement' added to config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 22:58:45 +04:00
31b8a11440
feat(engagement): SPEC-BLOC-1A — Foundation Prisma Engagement Layer
...
11 models (Task, Decision, Reminder, UserMemory, AgendaCalendarConfig,
EngagementAutoRule, NotificationDelivery + link/log/dependency tables),
17 enums, 10 Zod schemas for typed UserMemory categories, 8 auto-rule
seeds, auth hook for AgendaCalendarConfig on register, backfill script
for existing users, 12 Vitest tests green. Schema pushed to erp_local
and erp_test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 00:21:02 +04:00
1d93efbf9d
feat(copilot): SPEC-M3 — Copilot Août in-app chat module
...
Backend: AgentChatService SSE streaming (Claude Sonnet 4.6, 10 rounds),
10 read tools RBAC + 4 action tools, PendingAction confirmation flow,
RateLimiter (5/min 30/day), CostTracker daily budget, kill switch,
mock mode. Frontend: ChatProvider + ChatDrawer 480px + 7 components.
41 Vitest + 8 E2E Playwright. Fix pre-existing agent-august TS errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-25 19:15:12 +04:00
35793b7909
feat(agent-august): M0A - Prisma models + pgvector foundations
...
- Models: AgentAction, AgentAuditLog, AgentEngagement, KnowledgeArticle, KnowledgeChunk
- Enums: AgentActionType, AgentActionStatus, KnowledgeArticleStatus
- pgvector extension + HNSW vectorial index (cosine ops, 512 dims for voyage-3-lite)
- GIN tsvector index (russian + simple) for hybrid fulltext retrieval
- Auto-trigger to maintain content_tsv on insert/update
- New env vars: AGENT_*, VOYAGE_AI_*
- E2E seed truncation list updated with 5 new tables
Tests: +5 Vitest (T-M0A-01..05)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 21:14:58 +04:00
31a473857b
fix(advisor-digest): correct sender + weekly cron + idempotence (ADVISOR-DIGEST-FIX-S109)
...
- Switch sender from purchase@ to erp-bot@ (via SMTP_FROM env var + per-call from override)
- Remove setTimeout(run, 60_000) boot trigger (root cause of multi-send on restart)
- Add SystemJob Prisma model for idempotent recurring job tracking (6-day min interval)
- New env flag ADVISOR_DIGEST_ENABLED (default true)
- E2E seed: system_jobs added to truncation list
- +5 new Vitest (sender, env disable, DB disable, idempotence, happy path), 7 total
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 15:56:55 +04:00
b5c39f38a4
fix(admin): email edit in user form + reset password modal (USER-EDIT-FIX-S109)
...
DEFECT-1: email field was missing from edit modal form — added to schema,
service (with unicity check + audit), and frontend form.
DEFECT-2: reset password modal showed undefined — fixed API return type
(temporaryPassword) and added Typography.Text copyable display.
4 Vitest + 2 Playwright E2E tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 14:08:38 +04:00
3c83004e0a
feat(announcements): UserAnnouncement model + dual-channel send + 8 onboarding templates (USER-ANNOUNCEMENT-S108)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 10:20:29 +04:00
49135e262d
chore(e2e): add bug_reports to seed-test truncation list
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-19 01:06:15 +04:00
27841a9174
feat(frontend): AI Builder detail page — 6 tabs, SSE, approve/reject/revert (FRONTEND-BUILDER-3B)
...
Full detail page /ai-builder/:id with FeatureHeader, SseConsole, useFeatureSSEAction hook,
6 contextual tabs (Spec/Code/Staging/Tests/Review/Revert), ApproveDrawer, RejectModal,
and complete revert workflow UI. 12 E2E tests, 190/190 total.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 12:38:30 +04:00
a0704edfa3
feat(frontend): AI Builder page + create drawer + E2E tests (FRONTEND-BUILDER-3A)
...
- BuilderPage: paginated table, status/type filters, KPI cards, QuotaBadge
- CreateFeatureDrawer: title + description form with Zod-mirror validation
- BuilderDetailPage: placeholder for FRONTEND-BUILDER-3B
- Sidebar: AI-Конструктор entry, ADMIN-only (ThunderboltOutlined)
- Routes: /ai-builder (list) + /ai-builder/:id (detail)
- 8 Playwright E2E tests (builder.spec.ts)
- STOP conditions adapted: 14 statuses, AWAITING_DESIGN_REVIEW, no type in create
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 10:57:30 +04:00
bf160c1dff
fix(e2e): stabilize 5 flaky tests + smoke race condition (170/170)
...
T-STD3B-04: extend timeouts for STANDARD order creation workflow
T-CRIT-23: relax strict unread count assertion (parallel test noise)
T-CASH-10: add waits between sequential AntD Select dropdowns
T-PT-03: retry-verified AntD Select category selection
T-ADV-05: abort SSE stream on newConversation to prevent state race
Smoke T05: wait for table rows before counting (async data load)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-18 02:39:14 +04:00
df96ae1509
ai-const-2a: prisma models + enums + db push
...
4 models (AIConstructorFeature, FeatureHistory, Revert, BuilderQuota),
3 enums (FeatureStatus 13 values, FeatureType 3, RevertItemAction 4).
User.id is String — all FK use String. E2E truncation list updated.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-17 21:28:59 +04:00
2cdcce4cf8
ai-const-1c: 4 E2E tests + seed advisor suggestions (170/170)
...
Serial tests: list PENDING, drawer tabs, reject with notes, approve.
Seed: 1 conversation + 2 messages + 3 suggestions (2 PENDING, 1 APPROVED).
Playwright project help-suggestions added.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-17 21:28:59 +04:00
6d6867430b
ai-const-1b: E2E tests + mock mode + React batching fix (166/166)
...
6 Playwright tests (advisor.spec.ts): icon, drawer tabs, empty state,
SSE mock response + tool call, new chat reset, quota indicator.
ADVISOR_MOCK_MODE backend returns deterministic SSE events with delays.
Fix React 18 batching bug in AdvisorProvider (capture values at event
time, not updater execution time).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 20:49:06 +04:00
ec15ea7bad
ai-const-1a: prisma models (4) + db push + SDK update 0.96.0
...
AIAdvisorConversation, AIAdvisorMessage, AIAdvisorArticleSuggestion,
AIAdvisorQuota models + User relations + E2E truncation list.
@anthropic-ai/sdk 0.80.0 -> 0.96.0.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 20:49:05 +04:00
e808b0b181
fix(e2e): MATERIAL-only pending count + robust PR modal selectors (160/160 green)
...
Filter PENDING_APPROVAL pricing count by MATERIAL lineType only (SERVICE pricings
should not block standard order creation). Fix purchases spec: scoped dialog selector
to avoid CriticalNotificationModal collision, fill+evaluate click pattern for order
dropdown. Resilient STANDARD filter count in products spec.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 20:49:04 +04:00
1acadd82f1
feat: standard products catalogue + critical notifications + cancel cascade (STD-1A→CRIT-NOTIF-3)
...
Sessions 89-101: Product model + catalogue UI + pricing workflow + standard order auto-PO,
critical notification system (backend configs + frontend modal/banner + auto-ack + 11 E2E),
cancel order cascade (DRAFT PO cancel, CONFIRMED PO manual intervention, resolveIntervention),
notification audit 7 fixes across 11 modules, 20 Vitest cancel tests, 160/160 E2E green.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:04 +03:00
d8a0237df3
test(e2e): add 8 planning/gantt tests + data-testid + extend seed (PLAYWRIGHT-P1.1G)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
4a0a9dd49e
test(e2e): add 10 documents-hub tests + data-testid + extend seed (PLAYWRIGHT-P1.1F)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
df00ba3a37
test(e2e): add 10 finance forecast tests + data-testid + extend seed (PLAYWRIGHT-P1.1E-ter)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
3888594199
test(e2e): add 10 cashflow-tab tests + data-testid + extend seed (PLAYWRIGHT-P1.1E-bis)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
63498160d1
test(e2e): add 8 dashboard+profitability tests + data-testid + extend seed (PLAYWRIGHT-P1.1E)
...
Bloc A: Dashboard activity feed (3 tests - feed items, click nav, loading)
Bloc B: ProfitabilityTab (5 tests - KPIs, filter, drawer, close, export)
Seed: +2 FinancialTracking +6 AuditLog entries
Cross-spec total: 75/75
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
b9f9027735
test(e2e): add 5 import-ai-ui tests + data-testid (PLAYWRIGHT-P1.1D-ter)
...
Bloc A: Modal Import EstimatesTab (3 tests - open/reset/width)
Bloc B: Dragger SmetaRevisionTab (2 tests - visible/hidden+acceptAllSafe)
Cross-spec total: 67/67
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
3011c7fe8f
test(e2e): add 10 smeta-revision tests + data-testid + extend seed (PLAYWRIGHT-P1.1D-bis)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
35025b7dcf
test(e2e): add 10 estimates tests + data-testid + extend seed to 5 smetas (PLAYWRIGHT-P1.1D)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:03 +03:00
0bc9531f5e
test(e2e): add 12 budget+indirect tests + data-testid + extend seed (PLAYWRIGHT-P1.1C)
...
Bloc A Budget (6 tests): KPI dashboard, detail drawer, fin/tech validation,
reject+reset workflow, reject-requires-comment guard.
Bloc B Indirect (6 tests): table+create button, status filter, create drawer
form fields, live budget alert, create PR happy path, detail drawer.
Seed extended with 2 expense codes, 1 monthly budget, 1 supplier tag.
9 data-testid added to BudgetTab + IndirectPurchasesTab.
purchases.spec.ts PR counts relaxed to >=4 for cross-spec resilience.
Total E2E: 42 tests (10 smoke + 8 orders + 12 purchases + 12 budget).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:02 +03:00
edcc8e44e8
test(e2e): add 12 purchases tests + data-testid + extend seed to 4 PRs (PLAYWRIGHT-P1.1B)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-15 15:22:02 +03:00