EMAIL channel works correctly. The 5 EXPIRED from supervisor test
were emails successfully sent but unacked (terminal channel).
URGENT bypasses quiet hours (22h-7h UTC) and EMAIL sends fine.
No code fix needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Seed 10 tagged cases (D1-D10), triggered via admin route in digest
mode: 10 AgentAction EXECUTED, 25 NotificationDelivery across 4
channels (ERP_IN_APP/PWA_PUSH/TELEGRAM/EMAIL). Escalation chain
validated. All test data cleaned up (81 rows deleted, 0 remaining).
Override function kept for future test runs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Override function in supervisorTick: routes all reminders to
SUPERVISOR_TEST_TARGET_USER_ID when both env vars are set
- Seed script creates 10 tagged cases (D1-D10), one per detector
- Cleanup script deletes all tagged data + agent artifacts
- Tag: TEST-SUPERVISOR-280526
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Opus 4.7 API rejects the temperature parameter. Conditionally skip it
for opus models. Add E2E test script for weekly report M2B pipeline.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- ERRATUM-TG-BOTNAME-S109
- New: scripts/send-telegram-erratum-S109.ts
- Targets the 10 users who received an onboarding announcement today
- Uses shared email transporter (erp-bot@) and sendTelegramMessage helper
- Dry-run by default, --apply to execute
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move 9 flat onboarding templates to library/ as Handlebars partials and create 8 role-based
templates that compose relevant partials per role. Server auto-resolves templateSlug from user
role for ONBOARDING category, with explicit override support. Script simplified to 1 email per user.
19 Vitest tests (15 updated + 4 new: T-ANN-16..19).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- seed-beta-users.ts: 7 users (1 per ERP role), bcrypt 12, idempotent by email
- seed-beta-demo-data.ts: 2 clients + 2 suppliers + 3 products ACTIVE (smeta LOCKED + 10 pricings)
- ADM_GENERAL absent from Role enum → mapped to USER
- All ДЕМО_ prefixed for visual identification
- Login test 7/7 PASS, re-run safe (password NOT overwritten)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix update hook: recompute actuals when PAID entry amount/code changes
(not just on status transitions). 15/15 tests pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PO confirm: require expectedDeliveryDate for direct POs, auto-create
lots+LotLines when confirming PO without any lots
- createLotsForPO: no longer skips items without requirementId, creates
PurchaseLotLine records for each lot
- generateFromTender: pre-fill expectedDeliveryDate from offerDeliveryDays
- Frontend: disable confirm button without delivery date set
- Planning: diamond size d=7 for PDL forecasts (visually distinct from
7×7 reception squares), fix empty status filter Validation error
- Backfill script: po-delivery-backfill.ts (2 POs fixed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two-pass backfill: cas 1 (non-consumed, origQty=qty) and cas 2
(consumed, origQty=qty+SUM(POLine.consumedQuantity) for active POs).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4-step migration: backfill originalQuantity, link POLines to PRs via lotLines,
create retro PRs for orphan POLines, merge residual PRs.
Dry-run by default, --apply for real execution. Idempotent.
Local DB results: 54 PRs backfilled, 4 retro PRs created, 4 residuals merged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added 8 specific service tags (LASER_CUTTING, TUBE_BENDING_SVC, etc.)
- Added PIPE_CUT to category_tag_mappings (was missing)
- Updated all 14 category mappings with both generic + specific tags
- Updated fallback categoryToTag in tenders.service.ts
- SQL migration script: scripts/fix-supplier-tags.sql
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>