Changelog
Product-facing notes for Tadbeer (تدبير), curated from main git history. Dates are UTC unless noted. Pull request numbers appear when a merge commit recorded them.
This page is curated (not regenerated on every docs image build) so Dokploy deploys keep the narrative intact.
2026-09-09 — Windows .NET cashier (Tadbeer V5)
Added
- Responsive POS redesign for sell, invoices, buyer display, devices, settings, and lock screens (
254f6e3,d41e256,f665346,05119e4). - USB/serial printers and HID scanner binding (
c2f8ebc). - Category cards, 80mm QR receipts, invoices tab, cart quantity controls, product photos (
05119e4,7837a92). - In-app update check against public GitHub Releases (
fd480ef).
Fixed
- Secure lock screen and full refund flows (
4d246eb). - Release packaging, printer pick without PowerShell, buyer display pinned to the secondary monitor (
0c0450d,9b2d13b,6492771,edcc1b0). - Offline auto-sync, stock quantities, cart serialization, auth refresh on 401, friendlier sync errors (
1278abc,6a493eb,b4a9ffa,5433773,afae201). - POS sales no longer fail on missing serial ledgers, invalid audit actions, or missing cash/card methods (
6ba2d7b,3b1ddb9,8080d49).
Changed
- Windows cashier release line advanced to 4.5 / V5 station UI (
9b9dc27,254f6e3).
2026-09-05 — Shop readiness P1–P4 (Syria POS)
Added
- P1 / Flutter harden: Windows Credential Manager (DPAPI) for JWT, device secret, and PIN; App Installer in-app updates (
c0e4060). - P1 / shop polish: Arabic RTL sync-conflict UI; weighted kg prompt so weight SKUs are never sold as qty 1 (
240b8bd). - .NET Windows cashier:
apps/windows_cashier.NET 8 WPF till (auth, station bind, PIN, SQLite catalog/outbox, cash change-due, ESC/POS hooks) plus OV/EV signing pipeline docs (fa966f3, mergeaa844f7). - P2 / hardware: Bluetooth RFCOMM ESC/POS via paired COM ports; second-monitor customer/pole display with Arabic lines (
037a33a, merge1cfbc34). - P3 / platform hygiene: committed OpenAPI TypeScript clients + drift gate; additive RFC 7807 problem details; UTF-8 BOM on report CSV exports for Arabic Excel (#188,
e3a8d7d). - P4 / fleet ops: Intune / Assigned Access starter and OV SignTool owner checklist (
270879e, mergeb61dfd3).
Fixed
- Campaign cost estimates use SYP per-message units (no USD stub) (
1e1820b). - R3 vertical reports included in portal warehouse and chart allowlists (
eac0bb8).
Docs
- COGS dry-run / historical cleanup tooling, station go-live, and HTTPS App Installer feed runbooks (
5ef83d2). - Signing guidance prefers OV over EV for Syria entities; Flutter packaging notes aligned (
0ca36e9).
2026-09-04 — Messaging, CRM, reports, security, go-live
Added
- Messaging Phase A: WhatsApp Cloud API templates + webhook verify, pluggable SMS, SMTP adapter, consent tables; loyalty/2FA OTP tries WhatsApp then SMS; Syria
09→+963normalize (f19fed0, mergeeb562e7). - Phase A4 campaign UI: owner campaigns/templates, audience filters with consent/Syria gates, worker drain for scheduled sends (#176,
4492e20). - Phase C CRM: segments + owner automations (thank-you, low-stock, near-expiry, warranty) with Arabic portal UI (#183,
c220df1). - Phase B go-live: ManualCardTerminal as explicit Syria PIN-pad path; register↔warehouse binding; COGS reversal ops notes (#182,
ed5e806). - Reports R2: POS Z-closing history API + portal page; party/GL/sales warehouse–register filters (#180,
5270663). - Reports R3: pharmacy near-expiry/FEFO, watch serial/warranty, perfume tester/size profitability (
6e8a0b2).
Fixed
- Reports R1: Arabic product/variant/warehouse/party names;
account_name_aron GL/TB/P&L/BS; DD/MM dates; warehouse filters on inventory reports (#175,9d13b01). - Migrations / boot: renumber duplicate campaigns
000067→000068(06c6817); security hardening →000069(8eb6c7d); POS closings →000070(2042026). - View migrate:
DROP+CREATEreport_journal_linessoaccount_name_arcan land (Postgres cannot mid-list replace view columns) (107fa5b).
Security
- Auth secret hardening, shorter impersonation TTL, session revoke on password change, fail-closed WhatsApp/Stripe webhooks, refuse insecure JWT/CORS defaults when
APP_ENV=production(#174,f166551). - Refresh-token reuse kills session family; TOTP secrets encrypted at rest;
must_change_passwordenforced; cashier issue requiresdevice_secret; hashed invitations; per-account login limits (acfcb75). - Pre-prod note: seeded platform admin (
admin@tadbeer.test) remains exempt from forced password change so staging stays usable. Do not treat default seed credentials as production-ready — rotate secrets and disable seed before public go-live.
2026-09-01 — Docs locale and API image
Docs
- Full Arabic docs locale; Turkish docs locale removed (#171,
d229f94). - Tutorial videos page shows “coming soon” instead of broken placeholders (
b2700aa).
Fixed
- API Docker image uses Alpine runtime instead of unavailable
gcr.iodistroless (#172,67d906f).
2026-08-29 — Portal access and live defect sweep
Added
- Owners can select which portal pages each member may open (
7142f1a,1792c28).
Fixed
- Live DataTable row-click, cinema showtimes, kitchen display, and credit-note settlement defects (PR 143,
5b6e9a7, mergea944017). - Dokploy portal rebuilds pick up fresh Vite bundles (
164d553,ea48a03).
2026-08-28 — Syria Arabic default, clothes till P1–P3, verticals
Added
- Clothes till P1: product variants (size/color), barcode scan, hard oversell block, size exchange via outbox (
5a3b3e7, mergedeef3ed). - Clothes till P2: cash over-tender with change-due (مبلغ الباقي), Arabic 80mm ESC/POS (CP1256 + raster), offline returns (#138,
bd6f60f). - Clothes till P3: mid-shift X-report, second-process customer display, offline loyalty outbox, product images on grid, Windows autostart packaging (
f4b8bfe, merge80ec06a). - Verticals: Syria pharmacy (FEFO + Rx), luxury watches (serial + warranty), perfume (size/testers/gift receipt) (
9901201, mergec5c5d4a). - Loyalty Taste Skill landing + compose wiring (
1ce2e11); jewelry weight×metal book pricing (0f4ab10).
Changed
- Tadbeer is Syria-only with Arabic as the default locale (cashier + loyalty first launch RTL) (
6123f5a, mergef156496). - COGS posts at cost; Arabic owner accounting labels (
83d2a72). - Flutter Windows cashier works fully offline after first login (
4b9cf98).
Fixed
- Remaining till/ERP bugs across POS, portal, and API (#142, merge
d372c27). - Syria verticals migration renumbered to
000063to avoid clash (a05db9f); portal verticals build (expiryDate / quick actions) (c1a9720).
2026-08-24 — 2026-08-25 — Station readiness and owner onboarding
Added
- Windows cashier readiness for HBA-Q2 stations: barcodes/categories/tax in Drift, POS-only shell, offline PIN lock, register/warehouse binding, credit-note returns, server Z-closings, CI test-signed installer (#86,
24ca98f). - Station update channel, PCI-safe MSR loyalty confirm, register disable/force-logout, portal dashboards; loyalty landing earn/redeem (#87,
8fe9da8). - PIN-gated cart edits and real credit-note refunds (#123,
f70b558). - Owner onboarding: multi-VAT, CSV catalog import, idempotent Walk-in customer (#122,
054b30f). - Production OTP SMS fallback, in-POS loyalty, warehouse stock on till (#89,
0728168). - Accessible RTL portal management redesign (
47a1e84).
Fixed
- Client-side isolation guards for POS/ERP; API isolation for sync, POS, loyalty, REST (#88,
f3c69ad,0af77f4). - Name/contract mismatches that silently dropped data (#121, merge
994f664). - POS registers creatable by cashier/owner/accountant; warehouse list fallback (#124, merge
90b5dff). - Duplicate tax_rates migration renumbered
000049→000050(#125, merge49ad5f5). - Per-business industry homes and vertical primary flows (#90, #91).
2026-08-21 — 2026-08-23 — Docs site, portal, accounting
Added
- Public docs container for docs.roundworld.sy with VitePress EN site (
a4a2771,2052ae6). - Mall industries, restaurant floor, and vertical APIs for Idlib-oriented launch (
3f9dd6d). - Camera barcode scanning; HTML print documents for Arabic RTL; required business onboarding wizard (
f6eefcb,24b2005,83d31f5). - Humanized audit logs and S3 platform backup cron (
a2aafe8). - Members CRUD with invites; restaurant menu; receipt verification; unified settings (late Aug portal series).
Fixed
- Auto-migrate on boot and HRM table grants (
25c5fb3). - UI/UX audit findings across shell, dashboard, and modules; Latin digits for numeric fields (
5e33f90,f7c1aff,f6d0ef2).
Changed
- Tajawal as default Arabic font; mall fields allowed on business create (
4f6f9f2,f99c87c).
Earlier milestones (2026-05 → 2026-08-13)
Added
- Monorepo foundation: Go API with posting engine, offline sync, webhooks, backups; Vue admin + portal; Flutter mobile (
e6037ac,9f08ce4,73b942e). - Syria (and historically Turkey) e-invoicing providers (
70776f5); non-Syria adapters later removed (3125aea). - ZKTeco attendance poller and payroll MVP (
75c4e95). - Flutter Windows cashier POS station (first ship) (
14e3908). - Loyalty shopper / member apps with phone OTP and virtual card (
30a68a7,be65bc6). - OpenAPI entity schemas from
entities.yaml; invoice issue via posting + sync (a470575,91a7476).
Fixed
- Tenant RLS via
tadbeer_approle; force RLS on business-scoped tables (7932307,bdcb669). - Observability stack (Grafana/Loki/Prometheus/Vector) readability and scrape hardening (August 2026 ops series).
Docs
How this page is maintained
Entries are curated from conventional commits and merge messages on main. Prefer owner language (Syria POS, Arabic portal, campaigns) over internal agent chatter. SHAs and PR numbers come from git — open an issue if something meaningful is missing.