Build [v1.9.18]

This commit is contained in:
Daniel Bedeleanu
2026-04-13 23:43:52 +03:00
parent 1fff658d3c
commit fcb187974e
13 changed files with 222 additions and 113 deletions

View File

@@ -1,55 +1,41 @@
# CURRENT AI WORKING SESSION — HANDOVER
**Active AI:** Gemini (Antigravity)
**Last Updated:** 2026-04-12
**Current Version:** v1.6.0 (BoxMaster)
**Last Updated:** 2026-04-13
**Current Version:** v1.9.18 (CORS Sync)
**Branch:** dev
---
## STATUS: 🟢 STABLE — ADVANCED BOX MANAGEMENT & AI MODES COMPLETE (v1.6.0)
## STATUS: 🟢 STABLE — GENERIC CORS & CONFIG CENTRALIZATION COMPLETE
**CRITICAL FOR NEXT AI:** The "Box/Container Management" feature is **FINISHED**. Do NOT attempt to re-implement or look for a plan. The core logic is already in `frontend/app/page.tsx` (`onOCRMatch` and `BoxManager`), `backend/models.py`, and `frontend/lib/labels.ts`.
**CRITICAL FOR NEXT AI:** The CORS system has been upgraded to support `EXTRA_ALLOWED_ORIGINS` in `inventory.env`. The backend automatically expands these into full URLs (http/https across all ports).
---
## WHAT WAS DONE THIS SESSION
### 1. Box Management Architecture (Backend)
- **Database Schema** — Added `box_label` column to the `items` table.
- **Audit Integrity** — Updated `AuditLog` snapshots to capture `box_label` at the time of each transaction, ensuring immutable historical traceability even if items are moved.
- **API Support** — Exposed `box_label` in Pydantic schemas and item routers.
### 1. Generic CORS (External Access)
- **Variable**: Introduced `EXTRA_ALLOWED_ORIGINS` in `inventory.env`.
- **Backend Expansion**: Updated `backend/main.py` to automatically generate allowed origins (plain/SSL) for any IP or FQDN provided in this comma-separated list.
- **Tailscale Ready**: Pre-configured with `100.78.182.27` as requested by the user.
### 2. Intelligent Scanner Routing (Frontend)
- **Box Match Priority** — Rewrote the scanner's `onOCRMatch` logic to prioritize box labels.
- **Multi-Item Support** — Developed a "Box Contents" interstitial modal that handles containers with multiple distinct item types.
- **Token Matching** — Implemented a local fuzzy token-matching engine for generic box text recognition without AI costs.
### 2. Configuration Centralization
- **inventory.env Updates**: Added placeholders for `GEMINI_API_KEY` and security tokens to encourage usage of a single configuration file for both local and Docker deployments.
- **Port Consistency**: Cleaned up `config/backend.env.example` to reflect the actual ports used (8916-8919).
### 3. Dependency-Free Label System
- **Native Generation** — Built a zero-dependency SVG engine for Code 128 Barcodes and QR Codes (`lib/labels.ts`).
- **Box Manager Dashboard** — Added a dedicated UI to view all existing boxes and trigger label generation.
- **Hybrid Printing** — Implemented CSS `@media print` for professional desktop printers and "Save as PNG" rasterization for portable Bluetooth printers on mobile.
### 3. Startup & Discovery
- **Dynamic Access Banner**: Enhanced `start_server.sh` to detect `EXTRA_ALLOWED_ORIGINS` and display the corresponding Tailscale/VPN URLs at startup.
### 4. UI/UX: Targeted Field Scanning
- **Camera Capture** — Added a dedicated scan button in Edit modals that redirects OCR results directly to the "Box Label" field without performing general item matches.
### 5. Multi-Mode AI Discovery
- **Contextual Prompts** — Implemented a dual-mode toggle (Item/Box) in the AI Onboarding screen.
- **Box Extraction** — Created a specialized prompt for Gemini 2.0 Flash to extract container names while filtering out technical noise from product labels.
### 6. Operational Rigor: Step 0 Rule
- **Mandatory Documentation** — Updated `AI_RULES.md` to force documentation verification before any `save-version` (git commit) operation.
- **Master Branch Sync** — Confirmed `scripts/save_version.py` logic to keep `master` branch in sync with the latest releases automatically.
### 4. Verification
- **Test Script**: Verified the CORS expansion logic with `scratch/verify_cors.py` (deleted after use).
---
## WHAT THE NEXT AI MUST DO
1. **Database Encryption** — Consider implementing SQLite encryption at rest (SQLCipher) if requested.
2. **Persistent JWT** If requested, move the `JWT_SECRET_KEY` to a `.env` file for session persistence across server restarts.
3. **Advanced Filtering** — Extend the Box Manager to allow bulk movements between boxes.
3. **LDAP Probe** — The "Test Connection" button may show "Partial Success" (handshake rejected) due to anonymous bind restrictions; login itself works fine.
4. **Monitoring** — If the rate limiter triggers too frequently for legitimate users, adjust the `slowapi` limit in `backend/routers/users.py`.
1. **Docker Sync**: If the user experiences issues with the API key in Docker, suggest rebuilding the image or ensuring `inventory.env` is correctly mounted.
2. **Reverse Proxy**: If a more complex FQDN setup is needed, consider updating `config/Caddyfile` to handle wildcard subdomains if `EXTRA_ALLOWED_ORIGINS` list becomes too long.
---
@@ -57,21 +43,16 @@
**Active database:** `<project_root>/data/inventory.db`
**LDAP config:** `config/ldap_config.json`
**Network config:** `config/network_config.env`
**Network config:** `inventory.env` (Now the Primary SSOT for networking)
**Proxy config:** `config/Caddyfile`
**Production Bundle:** `aInventory-PROD-v1.8.0.zip` (ConfigSync Final)
> [!IMPORTANT]
> **Git Access Fix**: The `xcode-select` breakage is bypassed by using the direct binary path: `/Library/Developer/CommandLineTools/usr/bin/git` (stored in `.git_path`). **DO NOT change this path.** Operations now work correctly via this direct link.
**How to start:**
```bash
./start_server.sh
```
- Frontend: `https://192.168.84.113:8909`
- Backend: `https://192.168.84.113:8908`
- Local URL: `https://localhost:8919`
- LAN URL: `https://192.168.84.113:8919`
- Tailscale URL: `https://100.78.182.27:8919` (Now allowed in CORS)
**Environment variables set by start_server.sh:**
- `ALLOWED_ORIGINS` — auto-detected
- `DATA_DIR` — absolute path
- `JWT_SECRET_KEY` — ephemeral (regenerates on restart)
---
✓ Done.