Skip to content

Releases: sauryah/dms-o2

v1.9.3 — Enterprise Redesign, Session Lifecycle Security Patch & Toolset Custom Sorters

Choose a tag to compare

@sauryah sauryah released this 24 Jul 11:28

🚀 Overview

Release v1.9.3 represents a major milestone in visual quality, user experience (UX) consistency, and critical security hardening for DMS. It brings modern enterprise-
grade SaaS design systems to both the Users Manager and the Die Inventory suites while patching a critical security vulnerability where bulk-revoked active sessions
remained authenticated in the Redis validation cache.
──────

🎨 Key Features & Visual Redesigns

1. Users Suite Redesign & UX Hardening

• Segmented Navigation: Overhauled administrative page headers into custom Segmented Tab controls with smooth under-bar spring transitions.
• Directory Search & Filtering: Added high-performance inline filtering to search users by Username, Full Name, or Email and filter by Role and Account Status.
• Audit Trail Timelines: Upgraded the simple user log display into a vertical timeline audit trail mapping detailed metadata (IP Address, Action, timestamp, and device
user-agents).
• OS/Browser Badging: Integrated user-agent parsing to automatically badge devices with OS and Browser tags for easy security reviews.
• Permissions Matrix: Rendered granular tool authorizations in an intuitive indented visual hierarchy tree.

2. Die Inventory Redesign & Hardening

• Three View Layouts: Replaced monolithic lists with view modes including Grid Card Mode, Specs Catalog Table, and Physical Rack Layout Grid showing cabinet coordinate
allocations.
• Collapsible Filter Panel: Added a vertical collapsible panel supporting status, die type, rack, and dimensions queries.
• Hotkeys Listener: Enabled search input activation via the keyboard hotkey / for rapid workflows.
• Import Dropzone: Replaced standard file uploads with an interactive drag-and-drop uploader dropzone, displaying progress bars and detailed spreadsheet formatting errors
in a tabular format.
• Details & Edit Workspaces: Redesigned detail pages into dual-column grids displaying status ratios, CAD models, and timeline audit logs, and placed forms in slide-out
drawers.

3. Toolset Custom Sorters

• Size sorting: Added an interactive sorting selector to the Toolset Detail View. Users can toggle the ordering of dies inside a set between Default API Order, Largest
First, or Smallest First.
──────

🔒 Critical Bug Fixes & Security Patches

• Active Sessions Cache Eviction: Fixed a critical security vulnerability where executing Bulk Terminate or Clear All active sessions from the admin panel bypassed
individual model deletion routines, leaving authentication token validation keys alive in Redis. They are now explicitly purged from Redis during bulk evictions.
• Stringified Requests Payload: Patched a frontend fetch failure where bulk terminate payloads were sent as raw JavaScript objects instead of JSON strings.
──────

🔧 Technical Changelog

• Backend Changes (backend):
• Refactored destroy_bulk and destroy_all actions in UserSessionViewSet (profile.py).
• Added new automated unit tests validating database and Redis cache consistency (test_auth.py).
• Frontend Changes (frontend):
• Fixed mutation payload parameters (ActiveSessionsList.tsx).
• Implemented size sort state hook, comparison helpers, and sorting buttons in set detail views (InventorySubViews.tsx).
• Bumped project version to 1.9.3 (package.json).

──────

🧪 Verification & Stability Status

• Frontend compilation: Passed (npm run build exited with code 0).
• Frontend tests: 53 / 53 Vitest unit tests passed successfully.
• Backend tests: 151 / 151 Django backend tests passed successfully.

v1.9.2 — Frontend Resilience, SSE Proxy Fix & 3D Wire Drawing Workbench

Choose a tag to compare

@sauryah sauryah released this 23 Jul 05:14

🚀 DMS v1.9.2 Release Notes

We are excited to release **DMS v1.9.2**, featuring automatic dynamic import chunk recovery, real-time SSE stream proxy stabilization, and a 3D WebGL von

Mises Stress Heatmap & Interactive Theory Engine in the Wire Drawing Workbench.

---

## 🌟 What's New & Key Highlights

### 🛡️ 1. Dynamic Import Auto-Recovery & Update Boundary
- **Automatic Stale-Chunk Recovery (`lazyWithRetry.ts`)**: Resolves `TypeError: Failed to fetch dynamically imported module` errors when users navigate

the app during or after a deployment. If a chunk file hash is missing, the application automatically reloads once to fetch the latest index.html manifest.
- Update Fallback UI (ErrorBoundary.tsx): Upgraded the root React Error Boundary to detect dynamic import failures and present a user-friendly
"New Update Available" screen with a one-click page reload action.

### ⚡ 2. Realtime SSE Proxy Stabilization
- **Vite Dev Server Proxy Routing**: Added `/api/events` proxy rule in `vite.config.js` to route Server-Sent Events (SSE) directly to the Go API

microservice (http://127.0.0.1:8080).
- Suppressed Console Noise (useRealtimeSync.ts): Refactored EventSource error handlers to eliminate infinite console error loops when the backend
SSE server drops or restarts, replacing them with exponential backoff retries (up to 5 attempts) and clean status warnings.

### 🔬 3. 3D von Mises Stress Heatmap & Interactive Theory Engine
- **3D WebGL Stress Visualizer (`StressHeatmap3D.tsx`)**:
  - **Interactive 3D Orbit Controls**: Click & drag to rotate, pitch, zoom, and reset isometric angles.
  * **von Mises Stress Spectrum**: Color-coded stress map (Blue elastic $\rightarrow$ Emerald yield $\rightarrow$ Amber/Pink peak stress $\ge 0.

9\sigma_y$) across the wire reduction cone.
* Flow Stream Particles: Animated micro-particles illustrating wire acceleration ($v_2 = v_1 \cdot (1 + E)$).
* Shear Alerts: Automatic high-stress warning alerts if pass area reduction exceeds $24%$.
- Interactive Theory Workbench (TheoryPanel.tsx):
* CAD Die Geometry Inspector: Interactive SVG cutaway diagram covering Entrance Bell, Approach Angle ($2\alpha$), Bearing Land ($L_b$), and Back
Relief ($\gamma$) with optimal specs and misconfiguration risks.
* Live Deformation Simulator: Dual sliders for $d_1$ and $d_2$ calculating Area Reduction %, Elongation %, Capstan Speed Ratio, True Strain
($\varepsilon$), and Draw Stress Ratio in real-time.
* Math Models & Physics: Formulas for Siebel's drawing force equation ($\sigma_d$), volume conservation, and optimum die angle
($\alpha_{\text{opt}}$).
* Engineering Trade-off Matrix: Side-by-side comparisons for Carbide vs PCD, Copper vs Steel, and Dry Soap vs Wet Emulsion.

### 🔒 4. Access Control Improvements
- **Navbar Tools Authorization**: Filtered the tools dropdown in `Navbar.tsx` based on user permissions to ensure modules are accessible only to

authorized roles.

---

## 🧪 Verification & Quality Assurance

- **Vitest Suite**: 16/16 tests passed (`100% green`).
- **Production Build**: Verified clean minified build via `vite build`.

v1.9.1 - Search Precision & Dimension Relevance Patch

Choose a tag to compare

@sauryah sauryah released this 22 Jul 10:46

[1.9.1] - 2026-07-22

### 🎯 Search Precision & Relevance
- **Eliminated Size Substring False Positives**: Replaced string `contains` checks on numeric dimension fields (`CurrentSize`, `CurrentWidth`,

CurrentThickness) with exact and prefix matching. Searching for 25 or 2.5 now accurately matches size 25.0 or 25.4 without matching 1.25, 0. 25, or 12.5.
- Accurate Search Result Count Reporting: Resolved the issue where searching returned exact results but displayed "1000 results found". The search
response total now strictly reflects the post-filtered count of relevant matching items (len(filtered)).
- Unit Suffix Normalization: Added automatic unit suffix trimming (2.5mm -> 2.5) to match exact size dimensions with maximum relevancy score
(100).
- Enforced Relevancy Threshold on Digit Queries: Enforced a strict score > 50 threshold on digit queries across both Meilisearch and direct SQL
search execution paths.
- Parameterized SQL Prefix Matching: Updated buildWhereClauses in the PostgreSQL query builder to use prefix wildcards (cleanQ%) on numeric
dimension columns when query is numeric.

### 🧹 Code Quality & Analysis
- **Database Iterator Safety**: Added `rows.Err()` checks following row iteration loops in `GetStats` and `scanDies` inside `database.go` to satisfy

sqlrowserr static analysis rules.
- Unit Test Suite: Added test coverage in handlers_test.go verifying dimension matching rules, normalized unit searches, and score filtering.

v1.9.0: Enterprise Observability, S3 Backup Streaming & Benchmark Suite

Choose a tag to compare

@sauryah sauryah released this 19 Jul 22:16

🚀 Enterprise Upgrades & Observability (v1.9.0)

📊 Observability

  • Structured Logging — Standardized JSON logging across Django (JsonFormatter) and Go (slog).
  • Error Monitoring & Tracing — Integrated Sentry and OpenTelemetry hooks.
  • Health Checks
    • Django /api/v1/health/ validates Database, Redis, and Meilisearch connectivity.
    • Go /api/go/health verifies Redis connectivity and synchronization status.
  • Prometheus Metrics — Added /metrics endpoints for application monitoring.

🛡️ Infrastructure

  • S3 / MinIO Backups — Implemented configurable database backup streaming to S3-compatible object storage.

⚡ Developer Experience

  • Pre-commit Hooks — Added automated linting and formatting with Ruff and ESLint.
  • Redis Test Isolation — Dedicated Redis DB 15 for tests to prevent development cache interference.
  • Meilisearch Test Reliability — Improved test stability by configuring filterable attributes and waiting for indexing tasks to complete.

🧪 Performance Testing

  • Load Testing — Added an automated benchmarking suite covering authentication, search, dashboard statistics, imports, and SSE endpoints.
    • 932 requests/sec
    • 200+ concurrent users
    • 0 errors

✅ Verification

Component Status
Django Test Suite 129 / 129 Passed
Go API Test Suite 6 / 6 Packages Passed
Security Audit 10 / 10 – No Critical Vulnerabilities

v1.7.6: Service Layer Extraction, Contextvars Migration, and Security Hardening

Choose a tag to compare

@sauryah sauryah released this 17 Jul 10:03

v1.7.6: Service Layer Extraction, Contextvars Migration, and Security Hardening
Release Date: July 17, 2026
Tag: v1.7.6 (https://github.com/sauryah/dms-o2/releases/tag/v1.7.6) · Commits: aca891c7af7db9 · Files Changed: 19 (+991 / -712)
Highlights

🔒 Security — Meilisearch Filter Injection Fix & Production Secret Validation Meilisearch Filter Injection Prevention - Added escapeMeiliFilterValue() in the Go API to escape backslashes, single quotes, and control characters before embedding user input into Meilisearch filter expressions. - QueryMeilisearchAndPostgres now accepts a *SearchParams struct instead of raw strings, ensuring all user-supplied filter values pass through the sanitizer. Production Secret Validation - Startup validation in settings.py now raises ImproperlyConfigured if DJANGO_DEBUG=False and any of SECRET_KEY, MEILI_MASTER_KEY, INTERNAL_API_SECRET, or POSTGRES_PASSWORD match known weak defaults or are shorter than 16 characters. - Added INTERNAL_API_SECRET to the Go API container environment and .env.example to ensure both services share a matching secret. !CAUTION If you are upgrading from v1.7.5, ensure INTERNAL_API_SECRET is set in your .env file. The Go API will fail to verify tokens with Django if this secret is missing or mismatched.
🏗️ Architecture — Service Layer Extraction & Contextvars Migration Context Variables Replace Thread-Locals - Replaced threading.local() in users/context.py with a contextvars-based _ThreadLocalsProxy for async-safe request context (current_user, current_ip, pending_sync_die_ids, pending_broadcast_keys). - Updated users/middleware.py, dies/signals.py, dies/services/import_service.py, and dies/services/search_service.py to import from users.context. - The legacy _thread_locals proxy still works for backward compatibility — new code should use get_current_user() and get_current_ip() helpers. Service Layer Extraction Service Location Responsibility RecutService backend/dies/services/recut_service.py Die recut business logic (size validation, audit logging) WearPredictionService backend/dies/services/wear_prediction_service.py Wear prediction calculations and threshold evaluation SessionService backend/users/services/session_service.py Session lookup, timeout validation, last-seen updates - dies/views.py reduced by ~285 lines — view methods now delegate to services in 3–5 lines each. - users/authentication.py reduced from ~150 lines to ~46 lines — CustomJWTAuthentication.authenticate() calls SessionService static methods. Go API SearchParams Refactoring - Introduced a SearchParams struct with ParseFromURL(r *http.Request) method, replacing 15+ inline r.URL.Query().Get() calls. - Pre-computed die scores using a scoredDie slice avoid the double scoreDie() call per sort element, cutting the search hot path computation roughly in half.
⚡ Frontend — Realtime Sync Hook & Selective Invalidation useRealtimeSync Custom Hook - Extracted SSE event handling from App.tsx (~120 lines) into frontend/src/hooks/useRealtimeSync.ts. - Implemented selective query invalidation via an EVENT_QUERY_KEYS map: Event Type Queries Invalidated die_update ['dies'], ['search'], ['stats'] set_update ['sets'], ['machines'] machine_update ['machines'], ['categories'] backup_update ['backups'] - Previously, every event called queryClient.invalidateQueries() with no arguments, forcing all caches to refetch. Now only relevant caches are invalidated.
🐳 DevOps — Docker Compose Hardening Production WSGI Server - Replaced python manage.py runserver with gunicorn dms.wsgi:application --bind 0.0.0.0:8000 --workers 3 --reload in docker-compose.yml. YAML Anchors for Shared Environment - Introduced x-common-env YAML anchor to deduplicate environment variables across migrate, django, and worker services. - Added INTERNAL_API_SECRET to the anchor so all services receive the shared secret. Backup Health Check - Added pgrep -x crond health check to the backup container with a 30-second interval.
Bug Fixes Fix File Description Go build compilation error handlers.go:500 Fixed undefined variable references (sizeMin, sizeMax, etc.) after SearchParams refactoring — replaced bare names with params.SizeMin, params.SizeMax, etc. TypeScript type mismatch useRealtimeSync.ts Fixed callback type signatures — onShowToast and onAddNotification now accept optional "info" | "success" | "error" union types instead of bare string. Tests Added Test File Coverage Mocked RecutService unit tests backend/dies/tests/test_recut_service.py Round die recut, flat die recut, permission checks, note validation, size regression detection E2E Wire Drawing Calculator frontend/tests/e2e/wire-drawing-calculator.spec.js Playwright smoke test — validates page load and form rendering Files Changed (19)
Backend (12 files) - backend/users/authentication.py — Simplified to use SessionService - backend/users/context.py — New: contextvars-based request context - backend/users/middleware.py — Updated to use contextvars - backend/users/services/session_service.py — New: extracted session logic - backend/dies/services/recut_service.py — New: extracted recut business logic - backend/dies/services/wear_prediction_service.py — New: extracted wear prediction - backend/dies/services/search_service.py — Updated to use None checks - backend/dies/services/import_service.py — Updated context imports - backend/dies/signals.py — Updated to use users.context - backend/dies/views.py — Simplified to delegate to services - backend/dms/settings.py — Added production secret validation - backend/dies/tests/test_recut_service.py — New: mocked unit tests
Go API (2 files) - go-api/internal/handlers/handlers.go — SearchParams struct, pre-computed scores, filter injection fix - go-api/internal/handlers/handlers_test.go — Updated mock signatures
Frontend (3 files) - frontend/src/App.tsx — Removed SSE handler, uses useRealtimeSync hook - frontend/src/hooks/useRealtimeSync.ts — New: extracted SSE + selective invalidation - frontend/tests/e2e/wire-drawing-calculator.spec.js — New: E2E smoke test
DevOps & Config (3 files) - docker-compose.yml — YAML anchors, gunicorn, backup healthcheck, INTERNAL_API_SECRET in go-api - .env.example — Added INTERNAL_API_SECRET placeholder - go-api/internal/handlers/handlers_test.go — Updated for SearchParams
Upgrade Notes !IMPORTANT 1. Copy the new INTERNAL_API_SECRET entry from .env.example into your .env file and generate a secure value: python -c "import secrets; print(secrets.token_hex(32))" 2. Run docker compose up -d --build to rebuild all images with the new environment variables. 3. The _thread_locals import in users.context is deprecated — migrate to get_current_user() / get_current_ip() in new code.

v1.7.5: Unified Audit Timeline, Batch Search Indexing, and Security Updates

Choose a tag to compare

@sauryah sauryah released this 17 Jul 05:01

This release introduces significant performance optimizations, security hardening, and structural enhancements to the Die
Management System (DMS). Key highlights include a unified chronological audit trail with visual difference highlights, concurrent
user session eviction alerts, and a 100x speedup in search index synchronization.

🚀 Key Features & Enhancements

📜 Unified Audit Timeline & Visual Diffs (v1.7.3)

• Unified Feed: Merged DieHistory and MachineHistory records into a single chronologicaltimeline feed (/api/v1/history/unified/).
• Transaction Grouping: Grouped consecutive field edits performed by the same user on the exact same entity within a 5-second
window into single, cohesive transaction cards to prevent log flooding.
• Visual Diff Highlights: Implemented color-coded diff displays:
• Additions are highlighted in green (Added: ).
• Deletions are highlighted in red (Cleared (was: )).
• Modifications show old values crossed out with a blue arrow pointing to the new state.
• CSV Export: The CSV download adaptively structures output based on which view tab is active (Timeline, Extrusion Dies, or
Machines).

👥 Collapsible Inline User Activity Logs (v1.7.4)

• Added a new inline Logs drawer for each account within the User Manager console.
• Allows root administrators to view logins, failed login attempts, logouts, and session expirations for specific users inside the
table structure.

🛡️ Restricted Preventive Wear Prediction (v1.7.5)

• Frontend Guards: Restricted rendering of the WearPredictionSection (incorporating Horizontal wear gauges and remaining useful
life indicators) on the Die Detail page.
• Backend Security: Enforced permission rules blocking non-root users from fetching the /wear-prediction/ REST API unless
explicitly granted the die-wear tool permission by ROOT.
──────

⚡ Performance Optimizations

🔍 100x Search Sync Speedup (v1.7.4)

• Refactored the core search outbox processor (process_outbox_task) to perform bulk syncing to Meilisearch in batches of 100
documents, eliminating Celery task congestion and HTTP request bottlenecks during bulk spreadsheet uploads.
• Implemented bulk database updates (bulk_update) for task statuses to reduce SQL transaction overhead.
• Graceful fallback loops automatically preserve index integrity if batch updates fail.
──────

🔧 Bug Fixes & Refactoring

• Concurrent Session Eviction Banners (v1.7.2):
• Cached eviction details (IP, time, and device metadata) when pruning old sessions during logins.
• Hardened TokenRefreshView to block session hijacking and return a structured session_evicted code.
• Intercepted eviction codes in frontend useApi to display a detailed warning alert to the evicted user.
• Wire Drawing Calculator Toggle (v1.7.2): Added a column visibility toggle to hide/show calculation detail columns (Area Before,
Area After, and Ratio) on demand.
──────

📦 Deployment & Technical Reference

• Tag: v1.7.5
• Target Commit: 1f4ce76
• Backend Django Tests: 123 passing tests (100% success rate)
• Frontend Vitest Suites: 15 passing tests (100% success rate)***

───────────────────────────────

v1.7.1: Granular Access Control, Wire Drawing Theory Hub, and Unified Monolithic Docker Deployment

Choose a tag to compare

@sauryah sauryah released this 16 Jul 09:32

🚀 Overview

Version v1.7.1 introduces robust security enhancements with granular, tool-specific authorization settings, expands the engineering tools suite with
an interactive Theory & Fundamentals panel, and dramatically simplifies host management by consolidating the application stack into a single,
unified monolithic container image.
──────

🔑 Key Features & Improvements

1. Granular User Tool Authorization

Previously, user tool authorization was a binary toggle (is_authorized_for_tools). In v1.7.1, we've introduced fine-grained tool access control:

• Backend Models: Extended the User model in models.py with an authorized_tools JSONField to store specific allowed tool IDs per user.
• Frontend Routing: Implemented route-level guards in ProtectedRoute inside App.tsx and updated AuthContext.tsx to prevent unauthorized access to
specific modules (e.g., sizing-calculator, wire-drawing-calculator).
• Admin Dashboard UI: Upgraded the UserManager console in UserManager.tsx with a multi-checkbox tool selector, allowing ROOT admins to grant/revoke
access to individual tools dynamically.

2. Wire Drawing Physics & Theory Hub

To bridge the gap between engineering theory and interactive calculations:

• Developed TheoryPanel.tsx, an interactive component under the Wire Drawing Calculator.
• Divided into three comprehensive knowledge tabs:
1. Mathematical Formulas: Explains mathematical representations of Cross-Sectional Area (A), Area Reduction (AR/r), Elongation Ratio (E/e), and
True Strain (ε).
2. Deformation Physics: Explains the physical phenomena of Work Hardening (accumulation of dislocations), the Constant Volume Principle (AᵢₙVᵢₙ
= AₒᵤₜVₒᵤₜ), and drawing forces/friction.
3. Best Practices & Limits: Highlights reduction limits (e.g., 15–25% for copper/aluminum vs. 10–18% for steel), elongation consistency rating
targets, semi-die angle effects, and the Delta parameter calculation (Δ).

3. Unified Monolithic Deployment Pipeline

To simplify hosting topologies and reduce Docker container overhead:

• Multi-Stage Build: Crafted a new monolithic Dockerfile that builds React assets (via Node.js) and the Go Search API (via Go), bundling them with
Django WSGI backend, Celery, and Nginx in a single production container.
• Process Management: Configured supervisord.conf to manage Gunicorn, Celery workers, Nginx, and Go-API microservices.
• Simplified Compose: Created docker-compose.unified.yml to deploy the unified monolithic app container alongside Postgres, Redis, and Meilisearch
databases.
• CI/CD Integration: Streamlined the GitHub workflow docker-publish.yml to build and publish a single consolidated dms-app image rather than
individual microservice images.

4. UI Fixes & Docker Corrections

• Results Table Units: Added physical measurement units to table headers (e.g., Area Bef (mm²), Area Aft (mm²)) in ResultsTable.tsx.
• Area Reduction Warnings: Introduced a dedicated reductionBadge coloring system to separate area reduction indicators from elongation rules.
• Dockerignore Inclusions: Added !entrypoint.sh to .dockerignore to ensure the entrypoint.sh startup script is successfully packaged into the Docker
container.
──────

📝 Changelog (v1.7.1)

Added

• Granular User Tool Authorization:
• Implemented backend role-based and tool-specific permissions using a new authorized_tools JSONField in the User model.
• Developed granular frontend tool access controls, enabling or disabling access to specific tools (sizing-calculator, wire-drawing-calculator,
die-wear, draw-optimizer) based on authorization state.
• Enhanced the user management console (UserManager) with checkbox interfaces to allow administrators to assign specific tools to non-root users.
• Enforced route-level guards in frontend routing (ProtectedRoute) to check user permissions before rendering pages.
• Wire Drawing Fundamentals & Theory Panel:
• Integrated an interactive educational "Theory & Fundamentals of Wire Drawing" panel in the Wire Drawing Calculator.
• Divided panel into three tabs: Mathematical Formulas (Area, Area Reduction, Elongation, and True Strain), Deformation Physics (Strain
Hardening, Constant Volume, Force & Friction), and Best Practices/Limits (Pass Reduction Limits, Elongation Consistency, Semi-die Angle, and
Delta Parameter).

Changed

• Unified Monolithic Deployment Structure:
• Introduced a multi-stage Docker build that compiles the React frontend and Go Search API, bundling them together with the Django WSGI backend,
Celery worker, and Nginx reverse proxy into a single monolithic production image.
• Created a simplified docker-compose.unified.yml setup which orchestrates the monolithic app container alongside PostgreSQL, Redis, and
Meilisearch, significantly lowering hosting configuration complexity.
• Configured Supervisord to manage Gunicorn, Celery, Go API, and Nginx processes in the unified container.
• Updated the GitHub publish workflow (docker-publish.yml) to build and push a single unified image dms-app (and app on GHCR) rather than
separate microservice images.

Fixed

• Results Table Usability:
• Added physical measurement units (mm²) to area column headers (Area Bef (mm²), Area Aft (mm²)) in the results table.
• Implemented a dedicated color-coded reductionBadge warning style for Area Reduction percentage to properly indicate compliance states distinct
from elongation percentage.
• Docker Build Exclusions:
• Adjusted .dockerignore rules to explicitly exclude entrypoint.sh from being ignored (via !entrypoint.sh), resolving container initialization
failures.

Release v1.7.0: Wire Drawing Elongation Calculator Integration

Choose a tag to compare

@sauryah sauryah released this 16 Jul 06:48

📝 Release description / notes

## What's Changed
We are excited to announce the release of **v1.7.0**, which integrates the comprehensive **Wire Drawing Elongation

Calculator** directly into our engineering tools suite!

### 🚀 Key Features & Additions
* **Precision Elongation Analysis**: Perform multi-pass sequence calculations for wire drawing, tracking area reductions,

elongation percentages, and reduction ratios dynamically.
* Rich Data Visualizations: Interactive bar charts utilizing recharts to display Area Reduction per Pass and
Elongation per Pass with color-coded warning/tolerance zones.
* Spreadsheet-style Results Grid: Custom interactive table with inline cell editing, dynamic die pass insertion, and
live Undo/Redo (Ctrl+Z / Ctrl+Shift+Z) hotkey history management.
* Smart Die Suggester: Generates optimized intermediate die sequence progressions based on user-defined target
elongation limits.
* Tolerance & Consistency Audits: Target checking metrics (count of passes within limits) paired with a stars-rated
Pass Consistency algorithm.
* Multi-Format Exports: One-click exports to Excel (XLSX), CSV, and PDF reports (powered by xlsx, jspdf,
and jspdf-autotable), plus clipboard copying and print optimization.
* Template Storage: Save and load custom die schedules locally in browser storage for session persistence.
* Global Access Shortcuts: Added dropdown menus in the main navigation, mobile menus, a new card in the Engineering
Tools Suite hub, and immediate shortcut actions via the global Command Palette (Ctrl+K).

### 📦 Dependency Updates
* Added packages: `recharts`, `@tanstack/react-table`, `framer-motion`, `jspdf`, `jspdf-autotable`, `xlsx`, `react-hot-

toast, and react-to-print`.

### 📖 Previous Changes (v1.6.0)
* Updated documentation support addresses and removed formatting issues in `README.md` and `DOCKER.md`.

---
**Full Changelog**: https://github.com/sauryah/dms-o2/compare/v1.5.0...v1.7.0

v1.6.0 - Enterprise Documentation & Production Docker Distribution

Choose a tag to compare

@sauryah sauryah released this 12 Jul 11:34

This release overhauls the repository's documentation and licensing presentation to match enterprise-grade open-
source projects, and fully completes the Docker Distribution System for DMS-O2. You can now deploy the entire
stack anywhere with no source code required.

---

## 📦 What's New in v1.6.0

### 🐳 Distributable Docker Images
You can now run DMS-O2 via pre-built images hosted on **GitHub Container Registry (GHCR)** and **Docker Hub**:
- **Backend (Django & Celery)**: `ghcr.io/sauryah/dms-o2/backend:latest`
- **Frontend (React & Nginx)**: `ghcr.io/sauryah/dms-o2/frontend:latest`
- **Go API (Search & SSE)**: `ghcr.io/sauryah/dms-o2/go-api:latest`

All images are built for both **linux/amd64** and **linux/arm64** multi-platform compatibility.

### 🛠️ Multi-OS Deployment Support (`DOCKER.md`)
The deployment documentation has been overhauled to include step-by-step setup guides, including automated commands

to fetch settings and spin up containers for:
- Linux & macOS (Bash/Zsh)
- Windows (PowerShell)
- Windows (Command Prompt / cmd.exe)

### 📄 Enterprise Licensing & Compliance
Clear licensing structures have been added to help enterprise legal and compliance departments approve DMS-O2

deployments:
- Dual Licensing Presentation: Added clear headers explaining open-source (AGPL-3.0) and commercial licensing
options.
- Brand & Intellectual Property: Created COPYRIGHT.md and TRADEMARK.md detailing codebase ownership,
dependency licenses, and branding rules.
- Commercial Guide: Created LICENSE-COMMERCIAL.md explaining commercial offering use cases (white-labeling,
SaaS, corporate AGPL bans).

---

## 📝 Detailed Changelog

### Documentation Restructuring
- Redesigned `README.md` with clean status badges and streamlined navigation.
- Created `SECURITY.md` defining private vulnerability disclosure policies.
- Updated `SUPPORT.md` with community and commercial help resources.
- Configured a formal Contributor License Agreement (CLA) in `CONTRIBUTING.md` enabling dual-licensing of

contributions.
- Corrected all contact emails to sauryah@zohomail.in.
- Resolved all markdownlint formatting, indentation, and anchor link warnings.

### Build Systems
- Added comprehensive `.dockerignore` files for all services to keep Docker build contexts light.
- Corrected dependency layer caching in the Go API `Dockerfile`.

---

## ⚡ Quick Start (No Source Code Required)

To spin up the release, run the commands for your shell:

### Linux & macOS (Bash/Zsh)
```bash
mkdir dms && cd dms
curl -LO https://raw.githubusercontent.com/sauryah/dms-o2/main/docker-compose.ghcr.yml
curl -LO https://raw.githubusercontent.com/sauryah/dms-o2/main/.env.example
cp .env.example .env
docker compose -f docker-compose.ghcr.yml up -d

Windows (PowerShell)

New-Item -ItemType Directory -Path dms; Set-Location dms
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/sauryah/dms-o2/main/docker-compose.ghcr.yml" -OutFile

"docker-compose.ghcr.yml"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/sauryah/dms-o2/main/.env.example" -OutFile ".env.example"
Copy-Item .env.example .env
docker compose -f docker-compose.ghcr.yml up -d

v1.5.0 - Docker Distribution Support & Multi-OS Deployment

Choose a tag to compare

@sauryah sauryah released this 12 Jul 10:25

This release completes the Docker Distribution System for DMS-O2, making it possible to deploy the entire stack anywhere
with no source code required. It also introduces comprehensive multi-OS support and fixes key documentation validation issues.

---

## 📦 What's New in v1.5.0

### 🐳 Distributable Docker Images
You can now run DMS-O2 via pre-built images hosted on **GitHub Container Registry (GHCR)** and **Docker Hub**:
- **Backend (Django & Celery)**: `ghcr.io/sauryah/dms-o2/backend:latest`
- **Frontend (React & Nginx)**: `ghcr.io/sauryah/dms-o2/frontend:latest`
- **Go API (Search & SSE)**: `ghcr.io/sauryah/dms-o2/go-api:latest`

### 🛠️ Multi-OS Deployment Support (`DOCKER.md`)
The deployment documentation has been overhauled to include step-by-step setup guides, including automated commands to fetch

settings and spin up containers for:
- Linux & macOS (Bash/Zsh)
- Windows (PowerShell)
- Windows (Command Prompt / cmd.exe)

### 🤖 CI/CD Build & Publish Pipeline
A GitHub Actions workflow (`docker-publish.yml`) is now configured to automatically build and publish multi-arch images

(supporting both linux/amd64 and linux/arm64) whenever a release tag starting with v* is pushed.

---

## 📝 Detailed Changelog

### Documentation & Setup
- Added a **Docker Quick Deploy** section to `README.md` for fast copy-pasting.
- Created `DOCKER.md` containing full configurations, system parameters, data backup/restore commands, and troubleshooting

guides.
- Fixed several markdown lint validation errors (such as link fragment mismatching in Table of Contents).

### Infrastructure & Code Fixes
- Added `.dockerignore` files for root directory, backend, frontend, and go-api services to prevent large build contexts.
- Updated `go-api/Dockerfile` to copy `go.sum` alongside `go.mod` before downloading modules, ensuring correct cache

invalidation and checksum validation.

---

## ⚡ Quick Start (No Source Code Required)

To spin up the release, run the commands for your shell:

### Linux & macOS (Bash/Zsh)
```bash
mkdir dms && cd dms
curl -LO https://raw.githubusercontent.com/sauryah/dms-o2/main/docker-compose.ghcr.yml
curl -LO https://raw.githubusercontent.com/sauryah/dms-o2/main/.env.example
cp .env.example .env
docker compose -f docker-compose.ghcr.yml up -d

Windows (PowerShell)

New-Item -ItemType Directory -Path dms; Set-Location dms
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/sauryah/dms-o2/main/docker-compose.ghcr.yml" -OutFile "docker-compose.

ghcr.yml"
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/sauryah/dms-o2/main/.env.example" -OutFile ".env.example"
Copy-Item .env.example .env
docker compose -f docker-compose.ghcr.yml up -d