All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project aims to follow Semantic Versioning once it reaches a stable release.
Breaking changes are marked with ⚠️ and include migration guides.
For major updates with breaking changes, see the Deployment Guide - Updates for step-by-step migration instructions.
Added favicon.ico static asset and route to reduce repeated favicon 404 errors in production logs.
Added a developer debugging guide with debugging techniques, tools, common issues, API debugging, database troubleshooting, authentication debugging, cache checks, and performance profiling.
Expanded REST API documentation with request/response examples, error response samples, and Python/JavaScript usage examples for authentication, API requests, pagination, and filtering.
admin / TenantRole.ADMIN to coordinator / TenantRole.COORDINATOR (data migration 0009_tenant_role_coordinator).
can_admin → can_manage_organizationIsTenantAdmin → IsTenantGovernanceMemberIsAdminOrOwner → IsTenantMemberAuthorizedForAuditLog_ADMIN_ROLES → _TENANT_GOVERNANCE_ROLESMigration Guide: Run python manage.py migrate to apply data migration. Update any custom code referencing old role names.
meta field with pagination and filtering information/api/v0/) — Will be removed in v1.0.0. Migrate to /api/v1/ endpoints.
djangorestframework-simplejwt — login, token refresh, and user profile endpoints at /api/v1/auth/django-cors-headers — configured for local frontend dev servers (localhost:3000, localhost:5173)drf-spectacular — schema at /api/v1/schema/, Swagger UI at /api/v1/docs/, Redoc at /api/v1/redoc//auth/login/ (JWT obtain with user/tenant info), /auth/refresh/, /auth/me/ (GET/PATCH), /auth/change-password//api/v1/reports/ (stock valuation, movement history, low-stock, overstock, purchase summary, sales summary) with ?export=csv and ?export=pdf support/api/v1/dashboard/ (summary, stock-by-location, movement-trends, order-status) returning chart-ready data/api/v1/tenants/current/ (GET/PATCH), /api/v1/tenants/members/ (list/detail/update/delete) with RBAC enforcement/api/v1/import/ — multipart file upload for CSV/Excel bulk importsdjangorestframework-simplejwt>=5.4, django-cors-headers>=4.6, drf-spectacular>=0.28?export=pdf, powered by ReportLab with styled table layouts, alternating row colours, and auto-generated timestamps/admin/inventory/import/), with file validation, row-level error reporting, and all-or-nothing transactionsTenantScopedSnippetViewSet base classreportlab>=4.0 (PDF generation), openpyxl>=3.1 (Excel parsing)tenants/):
Tenant model with name, slug, active flag, branding fields (site name, primary colour, logo), and subscription metadata (plan, status, user/product limits)TenantMembership model linking users to tenants with role-based access (owner, admin, manager, viewer)TenantMiddleware that resolves the active tenant per request via user membership, X-Tenant header, or ?tenant= query parameterset_current_tenant / get_current_tenant / clear_current_tenant)TenantAwareManager with auto-scoping get_queryset() and unscoped() escape hatch for cross-tenant operationsTenantAwareQuerySet with .for_tenant() helperget_membership(), has_role(), can_manage(), can_admin(), is_owner()IsTenantMember, IsTenantManager, IsTenantAdmin, IsTenantOwner, TenantReadOnlyOrManagertenant_branding template context processortenant FK added to TimeStampedModel — all 13 domain models across inventory, procurement, and sales are now tenant-scopedTenant (with inline memberships) and TenantMembershipapi/):
/api/v1/ built with Django REST FrameworkStockService for atomic updates/low_stock/ endpointreports/):
InventoryReportService — stock valuation (weighted average & latest cost), low-stock/overstock analysis, movement history with filteringOrderReportService — purchase and sales order summaries grouped by day/week/month, with totals and status breakdowns?export=csv query parameterprocurement/):
Supplier model (Wagtail Snippet) with contacts, lead times, and payment termsPurchaseOrder model with status workflow (draft → confirmed → received → cancelled)PurchaseOrderLine model for order line items (product, quantity, unit cost)GoodsReceivedNote model — auto-creates receive StockMovements on processingProcurementService with confirm_order, cancel_order, and receive_goods operationssales/):
Customer model (Wagtail Snippet) with contact detailsSalesOrder model with status workflow (draft → confirmed → fulfilled → cancelled)SalesOrderLine model for order line items (product, quantity, unit price)Dispatch model — auto-creates issue StockMovements on processingSalesService with confirm_order, cancel_order, and process_dispatch operationsStep 1: Backup Your Database
# PostgreSQL
pg_dump your_database > backup.sql
# SQLite
cp db.sqlite3 db.sqlite3.backup
Step 2: Update Dependencies
pip install --upgrade -r requirements.txt
Step 3: Run Migrations
python manage.py migrate
Step 4: Update API Integration
/api/v1/ endpoints instead of /api/v0/Step 5: Test Thoroughly
pytest
python manage.py runserver
Step 6: Deploy to Production
Issue: JWT tokens expire after 24 hours
Issue: CORS errors when integrating frontend
| Version | Release Date | Status | Notes |
|---|---|---|---|
| Unreleased | TBD | In Development | Latest features and fixes |
| 0.1.0 | 2026-03-10 | Stable | Initial release |
We welcome contributions! See Contributing Guide for:
This project is licensed under the MIT License. See LICENSE for details.
This changelog follows the Keep a Changelog format and Semantic Versioning.
Semantic Versioning: MAJOR.MINOR.PATCH