Răsfoiți Sursa

[#1] Render Mermaid flowcharts, relative cross-linking, and clean up RCS $ placeholders

Lange François 2 săptămâni în urmă
părinte
comite
147ab8e844
58 a modificat fișierele cu 291 adăugiri și 137 ștergeri
  1. BIN
      Project.pdf
  2. BIN
      Retro Planning.pdf
  3. 1 6
      app.py
  4. 1 5
      backup_db.sh
  5. BIN
      delivery.zip
  6. 3 1
      docs/Backup_Procedure.md
  7. BIN
      docs/Backup_Procedure.pdf
  8. 3 1
      docs/Data_Ingestion.md
  9. BIN
      docs/Data_Ingestion.pdf
  10. 3 1
      docs/Final_Report.md
  11. BIN
      docs/Final_Report.pdf
  12. 3 1
      docs/Installation_Guide.md
  13. BIN
      docs/Installation_Guide.pdf
  14. 3 1
      docs/Operator_Installation_Guide.md
  15. BIN
      docs/Operator_Installation_Guide.pdf
  16. 3 1
      docs/Scrum_Artifacts.md
  17. BIN
      docs/Scrum_Artifacts.pdf
  18. 3 1
      docs/Scrum_Daily.md
  19. BIN
      docs/Scrum_Daily.pdf
  20. 3 1
      docs/Scrum_Plan.md
  21. BIN
      docs/Scrum_Plan.pdf
  22. 3 1
      docs/Scrum_Retro.md
  23. BIN
      docs/Scrum_Retro.pdf
  24. 3 1
      docs/Scrum_Review.md
  25. BIN
      docs/Scrum_Review.pdf
  26. 9 7
      docs/Scrum_Wiki.md
  27. BIN
      docs/Scrum_Wiki.pdf
  28. 3 1
      docs/Start_Stop_Procedures.md
  29. BIN
      docs/Start_Stop_Procedures.pdf
  30. 5 3
      docs/Technical_Document.md
  31. BIN
      docs/Technical_Document.pdf
  32. 3 1
      docs/Test_Cases_Sprint8.md
  33. BIN
      docs/Test_Cases_Sprint8.pdf
  34. 3 1
      docs/URL_Formats.md
  35. BIN
      docs/URL_Formats.pdf
  36. 3 1
      docs/User_Description.md
  37. BIN
      docs/User_Description.pdf
  38. 4 2
      docs/User_Guide.md
  39. BIN
      docs/User_Guide.pdf
  40. 3 1
      docs/WSL_Deployment.md
  41. BIN
      docs/WSL_Deployment.pdf
  42. 3 1
      docs/Wiki_Home.md
  43. BIN
      docs/Wiki_Home.pdf
  44. 2 3
      docs/architecture.md
  45. BIN
      docs/architecture.pdf
  46. BIN
      docs/disaster_recovery_plan.pdf
  47. BIN
      docs/distributed_deployment.pdf
  48. BIN
      docs/docker_connection.pdf
  49. 11 9
      docs/project_report.md
  50. BIN
      docs/project_report.pdf
  51. BIN
      docs/retro_planning.pdf
  52. BIN
      docs/taiga_audit_report.pdf
  53. BIN
      docs/zabbix_monitoring.pdf
  54. 112 47
      generate_docs.py
  55. 1 2
      manage_services.sh
  56. 1 1
      scratch/test_user_regex.py
  57. 46 15
      scripts/generate_pdfs.py
  58. 50 21
      scripts/generate_project_report.py

BIN
Project.pdf


BIN
Retro Planning.pdf


+ 1 - 6
app.py

@@ -1,9 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
-# $Id$
-# $Author$
-# $log$
-#ident "@(#)LocalFoodAI:app.py:$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import streamlit as st
 import extra_streamlit_components as stx
 import subprocess

+ 1 - 5
backup_db.sh

@@ -1,9 +1,5 @@
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
-# $Id$
-# $Author$
-# $log$
-#ident "@(#)LocalFoodAI:backup_db.sh:$Format:%D:%ci:%cN:%h$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:backup_db.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # backup_db.sh - Automated Disaster Recovery Backup Script
 
 BACKUP_DIR="./backups"

BIN
delivery.zip


+ 3 - 1
docs/Backup_Procedure.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Backup_Procedure.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Database Backup and Restore Procedure
 
 ## 1. Overview & Policy

BIN
docs/Backup_Procedure.pdf


+ 3 - 1
docs/Data_Ingestion.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Data_Ingestion.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Data Ingestion Pipeline
 
 ## Overview

BIN
docs/Data_Ingestion.pdf


+ 3 - 1
docs/Final_Report.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Final_Report.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Final Project Report (Living Document)
 
 ## What Has Been Done

BIN
docs/Final_Report.pdf


+ 3 - 1
docs/Installation_Guide.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Installation_Guide.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Detailed Installation and Deployment Guide
 
 This guide describes how to provision the host hypervisor, install Docker on Ubuntu, clone the repository, check out the correct branch, and launch the application.

BIN
docs/Installation_Guide.pdf


+ 3 - 1
docs/Operator_Installation_Guide.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Operator_Installation_Guide.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Detailed Operator Installation Guide
 
 This document is a step-by-step installation, mapping, configuration, and verification manual for deploying the **Local Food AI** system in an enterprise environment. It covers hybrid hypervisor infrastructure (WSL2, Hyper-V, and VirtualBox), cross-node networking, SNMPv3 monitoring, alert channels, and acceptance testing.

BIN
docs/Operator_Installation_Guide.pdf


+ 3 - 1
docs/Scrum_Artifacts.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Artifacts.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Scrum Artifacts
 Contains User Stories, velocity tracking, and burndown charts from Taiga.

BIN
docs/Scrum_Artifacts.pdf


+ 3 - 1
docs/Scrum_Daily.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Daily.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Daily Scrums
 - **26.05.07 DAILY**: Fixed time scope bug, added Nginx proxy, built sync scripts.

BIN
docs/Scrum_Daily.pdf


+ 3 - 1
docs/Scrum_Plan.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Plan.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Plans
 - **Sprint 10 PLAN**: Fix LLM Tool Calling, optimize Cartesian SQL explosion, build Teams webhooks.

BIN
docs/Scrum_Plan.pdf


+ 3 - 1
docs/Scrum_Retro.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Retro.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Retrospectives
 - **Sprint 10 RETROSPECTIVE**: Mitigated dirty data duplicates using SQL `GROUP BY`. Need to maintain strict Git commit tagging (`TG-XXX`).

BIN
docs/Scrum_Retro.pdf


+ 3 - 1
docs/Scrum_Review.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Review.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Reviews
 - **Sprint 10 REVIEW**: App executes sub-second searches. Nginx fully operational on Port 80.

BIN
docs/Scrum_Review.pdf


+ 9 - 7
docs/Scrum_Wiki.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Scrum_Wiki.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Scrum Wiki Master List & Index Portal
 
 Welcome to the static Scrum documentation portal. This master wiki aggregates and organizes all daily stand-up logs, planning reports, retrospectives, reviews, and velocity charts recorded during the agile development of the **Local Food AI** clinical dietetics engine.
@@ -7,26 +9,26 @@ Welcome to the static Scrum documentation portal. This master wiki aggregates an
 
 ## 📅 Sprint Ceremonies & Logs
 
-### 1. [Sprint Plans (Scrum_Plan.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Plan.md)
+### 1. [Sprint Plans (Scrum_Plan.md)](Scrum_Plan.pdf)
 *Contains Sprint Plan formulations, active user stories selection, scope statements, and team capacity bounds for each milestone loop.*
 
-### 2. [Daily Scrums (Scrum_Daily.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Daily.md)
+### 2. [Daily Scrums (Scrum_Daily.md)](Scrum_Daily.pdf)
 *Continuous daily stand-up summaries tracking individual task completion, blocker mitigations, and immediate day-to-day coordination.*
 
-### 3. [Sprint Reviews (Scrum_Review.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Review.md)
+### 3. [Sprint Reviews (Scrum_Review.md)](Scrum_Review.pdf)
 *Contains sprint review logs, clinician demonstration summaries, feature validation checklists, and stakeholder feedback logs.*
 
-### 4. [Sprint Retrospectives (Scrum_Retro.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Retro.md)
+### 4. [Sprint Retrospectives (Scrum_Retro.md)](Scrum_Retro.pdf)
 *Reviews process improvements, continuous integration learnings, and action items aimed at optimizing team operations and environment tuning.*
 
 ---
 
 ## 📊 Deliverables & Quality Assurance
 
-### 5. [Scrum Artifacts (Scrum_Artifacts.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Artifacts.md)
+### 5. [Scrum Artifacts (Scrum_Artifacts.md)](Scrum_Artifacts.pdf)
 *Indexes sprint velocity metrics, completed story points distributions, burndown coordinates, and final Taiga delivery milestones.*
 
-### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Test_Cases_Sprint8.md)
+### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](Test_Cases_Sprint8.pdf)
 *Legacy acceptance test logs covering core NLP chat, portion converters, and initial search validations.*
 
 ---

BIN
docs/Scrum_Wiki.pdf


+ 3 - 1
docs/Start_Stop_Procedures.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Start_Stop_Procedures.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Infrastructure Stop & Start Operational Procedures
 
 This runbook outlines the exact sequence and commands to start, stop, and verify each microservice in the Local Food AI environment.

BIN
docs/Start_Stop_Procedures.pdf


+ 5 - 3
docs/Technical_Document.md

@@ -1,5 +1,7 @@
-# $Id$
-Local Food AI - Capstone Technical Document
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Technical_Document.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
+# Local Food AI - Capstone Technical Document
 
 This document provides a comprehensive technical overview of the **Local Food AI** system. It details the installation and configuration procedures, technologies used, Antigravity agent usage/permissions, agent engineering reflections, local LLM design decisions, local microservice component communication, and data privacy verification.
 
@@ -90,7 +92,7 @@ The notebook workstation must have at least 16 GB of RAM, Docker, and Docker Com
    ```
 
 2. **Compose Topology Mappings**:
-   The `app` container maps the host's `.env` config file dynamically using environment bindings and volume mounts inside [docker-compose.yml](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docker-compose.yml):
+   The `app` container maps the host's `.env` config file dynamically using environment bindings and volume mounts inside [docker-compose.yml](../docker-compose.yml):
    ```yaml
      app:
        build:

BIN
docs/Technical_Document.pdf


+ 3 - 1
docs/Test_Cases_Sprint8.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Test_Cases_Sprint8.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint 8 Legacy Test Cases
 - Tested RAG AI tool integration.
 - Tested user authentication flows.

BIN
docs/Test_Cases_Sprint8.pdf


+ 3 - 1
docs/URL_Formats.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:URL_Formats.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Network Connection URL Directory
 
 This runbook catalogs the specific network formats and port endpoints required to access the application and monitoring servers across different loopback, hostname, and address protocols.

BIN
docs/URL_Formats.pdf


+ 3 - 1
docs/User_Description.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:User_Description.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - User Description & Functional Guide
 
 ## 1. System Vision

BIN
docs/User_Description.pdf


+ 4 - 2
docs/User_Guide.md

@@ -1,5 +1,7 @@
-# $Id$
-Local Food AI - Clinician User Manual
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:User_Guide.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
+# Local Food AI - Clinician User Manual
 
 Welcome to the **Local Food AI** clinical dietitian explorer. This guide explains how to use the platform to search for products, build custom recipe plates, calculate cumulative nutritional statistics, and consult the privacy-safe AI assistant.
 

BIN
docs/User_Guide.pdf


+ 3 - 1
docs/WSL_Deployment.md

@@ -1,4 +1,6 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:WSL_Deployment.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # WSL Deployment Runbook
 To deploy on Windows Subsystem for Linux:
 1. Ensure WSL2 backend is enabled in Docker Desktop.

BIN
docs/WSL_Deployment.pdf


+ 3 - 1
docs/Wiki_Home.md

@@ -1,3 +1,5 @@
-# $Id$
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Wiki_Home.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Documentation Home
 Welcome to the static documentation mirror. Please navigate the markdown files in this directory for architectural diagrams and guides.

BIN
docs/Wiki_Home.pdf


+ 2 - 3
docs/architecture.md

@@ -1,6 +1,5 @@
-The current version is #ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:architecture.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
-# $Id$
 # Local Food AI - Architecture Map
 
 This document describes the technical architecture, database schema design, AI RAG data flows, and dual-mode deployment topology for the Local Food AI clinical dietitian platform.
@@ -95,7 +94,7 @@ Services are distributed across specialized local hypervisors and Windows subsys
 When the remote VM host network or Taiga server is completely unreachable:
 - **Zero-Dependency Containers**: The entire platform runs entirely locally on the notebook host via **Docker Compose** (`docker-compose.yml`).
 - **Automatic IP Resolution**: Application configuration, Alembic, and SNMP notifications automatically adjust their endpoints to target local network interfaces (`localhost` / custom Docker networks) rather than unreachable remote IPs, avoiding timeout hangs or crashes.
-- **Dynamic Task Tracking**: Agile development logs are dynamically synced into the workspace [task.md](file:///C:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/task.md) and [walkthrough.md](file:///C:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/walkthrough.md) artifacts to track progress until connectivity is restored.
+- **Dynamic Task Tracking**: Agile development logs are dynamically synced into the workspace [task.md](../task.md) and [walkthrough.md](../walkthrough.md) artifacts to track progress until connectivity is restored.
 
 ---
 *Documented by Antigravity.*

BIN
docs/architecture.pdf


BIN
docs/disaster_recovery_plan.pdf


BIN
docs/distributed_deployment.pdf


BIN
docs/docker_connection.pdf


+ 11 - 9
docs/project_report.md

@@ -1,7 +1,9 @@
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:project_report.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
 # Capstone Project Report & File Documentation
 
 > [!NOTE]
-> **Dynamic Version Control**: This document is versioned under the master Git ID: `$Id$`.
+> **Dynamic Version Control**: This document is versioned under the master Git ID: `The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:project_report.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"`.
 > All file versions and commit histories below are extracted directly from the live Git metadata logs.
 
 ---
@@ -55,9 +57,9 @@ Below is an exhaustive catalog of every critical file in the repository, detaili
 | **.env**<br>`./.env` | Secret storage container holding encrypted MySQL user passwords and active environment flags. | `ca3877d` | lanfr144 | 2026/05/13 11:15:42 | *Stop save the .env file* |
 | **.gitattributes**<br>`./.gitattributes` | Git clean/smudge layout mapping enabling automatic tracking of dynamic $Id$ metadata expansion within version files. | `60823f3` | Lange François | 2026/06/12 09:28:53 | *[#1] docs: update README.md grading criteria, add Technical Document and User Manual, fix app.py version parsing* |
 | **requirements.txt**<br>`./requirements.txt` | Python runtime dependency catalog storing strict library versioning constraints. | `1701828` | Lange François | 2026/06/11 08:26:59 | *[TG-131] Purge database passwords from tracked files and format application versioning* |
-| **INSTALL_WSL.md**<br>`./INSTALL_WSL.md` | WSL2 deployment guide. Provides step-by-step instructions for installing and deploying the application inside WSL2 with port shifts. | `ef4111d` | Lange François | 2026/06/14 20:56:15 | *[#1] Configure mirror repositories and dynamic git filter sanitization* |
+| **INSTALL_WSL.md**<br>`./INSTALL_WSL.md` | WSL2 deployment guide. Provides step-by-step instructions for installing and deploying the application inside WSL2 with port shifts. | `129180a` | Lange François | 2026/06/15 12:49:05 | *[#1] Add Developer and Agent Productivity Guidelines to guides and agent workflows* |
 | **taiga/local-food-ai-1-36f35ff9-da1b-4eb5-9309-058448c998ad.json**<br>`./taiga/local-food-ai-1-36f35ff9-da1b-4eb5-9309-058448c998ad.json` | Historical Taiga Agile export. Contains the complete project history, including all closed user stories, tasks, and sprint configurations. | `d768ead` | Lange François | 2026/06/01 07:44:40 | *TG-221 #closed - Last commit to sync all the file to ship to the teacher.* |
-| **scripts/generate_pdfs.py**<br>`./scripts/generate_pdfs.py` | PDF document builder. Converts all markdown documentation manuals under `/docs` into high-fidelity PDF format with expanded Git version headers. | `c14e618` | Lange François | 2026/06/15 08:37:49 | *[#1] Embed Roboto and RobotoMono fonts into compiled PDFs* |
+| **scripts/generate_pdfs.py**<br>`./scripts/generate_pdfs.py` | PDF document builder. Converts all markdown documentation manuals under `/docs` into high-fidelity PDF format with expanded Git version headers. | `5001e1d` | Lange François | 2026/06/16 05:48:13 | *[#1] Force global dark text colors and optimize PDF structures to resolve Acrobat save prompts* |
 | **scripts/generate_project_report.py**<br>`./scripts/generate_project_report.py` | Technical project report generator. Automatically gathers codebase structure, Git commit metadata, and purpose records to construct the Project.pdf report. | `1701828` | Lange François | 2026/06/11 08:26:59 | *[TG-131] Purge database passwords from tracked files and format application versioning* |
 | **scripts/setup_deploy.py**<br>`./scripts/setup_deploy.py` | DevOps deployment script. Orchestrates local and VM container sets, verifying network connectivity and system parameters. | `1701828` | Lange François | 2026/06/11 08:26:59 | *[TG-131] Purge database passwords from tracked files and format application versioning* |
 | **scripts/taiga_sync_final.py**<br>`./scripts/taiga_sync_final.py` | Taiga automated synchronization helper. Pushes bug tickets, fills wiki pages, and assigns unassigned user stories. | `744ffe8` | Lange François | 2026/06/11 10:34:49 | *[#1] chore: resolve security leak, configure dynamic versioning filters, update Streamlit and Flask applications to read version from %cd, update unit converter, ingestion, and search features, and export Taiga scrum data* |
@@ -67,12 +69,12 @@ Below is an exhaustive catalog of every critical file in the repository, detaili
 ## 3. Directory Structure Map
 An overview of the folder hierarchy organizing our microservice infrastructure:
 
-- [**`alembic/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/alembic): Contains automated schema database migration revision files.
-- [**`docker/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docker): Houses distinct production container configurations for `/app` (Streamlit) and `/ingest` (Ingestion).
-- [**`docs/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs): Living Capstone document manuals (Markdown & high-fidelity compiled PDFs).
-- [**`nginx/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/nginx): Houses the reverse proxy configuration (`nginx.conf`) forwarding local port 80 traffic.
-- [**`scripts/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/scripts): Collection of admin scripts, deployment automation, and PDF compilation generators.
-- [**`searxng/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/searxng): Core configuration files (`settings.yml`) securing private, localized search operations.
+- [**`alembic/`**](../alembic): Contains automated schema database migration revision files.
+- [**`docker/`**](../docker): Houses distinct production container configurations for `/app` (Streamlit) and `/ingest` (Ingestion).
+- [**`docs/`**](.): Living Capstone document manuals (Markdown & high-fidelity compiled PDFs).
+- [**`nginx/`**](../nginx): Houses the reverse proxy configuration (`nginx.conf`) forwarding local port 80 traffic.
+- [**`scripts/`**](../scripts): Collection of admin scripts, deployment automation, and PDF compilation generators.
+- [**`searxng/`**](../searxng): Core configuration files (`settings.yml`) securing private, localized search operations.
 
 ---
 

BIN
docs/project_report.pdf


BIN
docs/retro_planning.pdf


BIN
docs/taiga_audit_report.pdf


BIN
docs/zabbix_monitoring.pdf


+ 112 - 47
generate_docs.py

@@ -1,16 +1,15 @@
 #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
-# $Id$
-# $Author$
-# $log$
 import os
-#ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import subprocess
+import re
 
 docs_dir = "docs"
 os.makedirs(docs_dir, exist_ok=True)
 
 docs = {
-    "URL_Formats.md": """# $Id$
+    "URL_Formats.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Network Connection URL Directory
 
 This runbook catalogs the specific network formats and port endpoints required to access the application and monitoring servers across different loopback, hostname, and address protocols.
@@ -47,7 +46,9 @@ This runbook catalogs the specific network formats and port endpoints required t
 - **SearXNG Meta-Search API**: `http://[::1]:8105`
 - **MySQL Database Server**: `[::1]:3326`
 """,
-    "Final_Report.md": """# $Id$
+    "Final_Report.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Final Project Report (Living Document)
 
 ## What Has Been Done
@@ -67,7 +68,9 @@ This runbook catalogs the specific network formats and port endpoints required t
 - Maintain the automated `backup_db.sh` 7-day retention cycle.
 - Begin the hand-off to the operational team for Phase 2 feature requests.
 """,
-    "Backup_Procedure.md": """# $Id$
+    "Backup_Procedure.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Database Backup and Restore Procedure
 
 ## 1. Overview & Policy
@@ -146,7 +149,9 @@ Operators must verify the backup archive integrity weekly:
 2. Run `gzip -t backups/filename.sql.gz` to ensure the archive is not corrupted.
 3. Test restoring to a local fallback container instance to verify data accessibility.
 """,
-    "Data_Ingestion.md": """# $Id$
+    "Data_Ingestion.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Data Ingestion Pipeline
 
 ## Overview
@@ -158,7 +163,9 @@ Run `bash data_sync.sh --online`. The script will download the latest CSV direct
 ## Offline Mode
 Drop a `en.openfoodfacts.org.products.csv` file into the `/data` folder and run `bash data_sync.sh`. The script detects the file and triggers the Docker ingestion container.
 """,
-    "Installation_Guide.md": """# $Id$
+    "Installation_Guide.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Detailed Installation and Deployment Guide
 
 This guide describes how to provision the host hypervisor, install Docker on Ubuntu, clone the repository, check out the correct branch, and launch the application.
@@ -324,8 +331,10 @@ Follow the standard runbook to initialize credentials and launch services:
 ```
 """,
 
-    "User_Guide.md": """# $Id$
-Local Food AI - Clinician User Manual
+    "User_Guide.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
+# Local Food AI - Clinician User Manual
 
 Welcome to the **Local Food AI** clinical dietitian explorer. This guide explains how to use the platform to search for products, build custom recipe plates, calculate cumulative nutritional statistics, and consult the privacy-safe AI assistant.
 
@@ -396,8 +405,10 @@ Because patient privacy is critical:
 
 
 
-        "Technical_Document.md": """# $Id$
-Local Food AI - Capstone Technical Document
+        "Technical_Document.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
+# Local Food AI - Capstone Technical Document
 
 This document provides a comprehensive technical overview of the **Local Food AI** system. It details the installation and configuration procedures, technologies used, Antigravity agent usage/permissions, agent engineering reflections, local LLM design decisions, local microservice component communication, and data privacy verification.
 
@@ -481,7 +492,7 @@ The notebook workstation must have at least 16 GB of RAM, Docker, and Docker Com
    ```
 
 2. **Compose Topology Mappings**:
-   The `app` container maps the host's `.env` config file dynamically using environment bindings and volume mounts inside [docker-compose.yml](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docker-compose.yml):
+   The `app` container maps the host's `.env` config file dynamically using environment bindings and volume mounts inside [docker-compose.yml](../docker-compose.yml):
    ```yaml
      app:
        build:
@@ -585,11 +596,15 @@ To prove and guarantee that no clinical user details or dietary profiles leave t
 """,
 
 
-    "Wiki_Home.md": """# $Id$
+    "Wiki_Home.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Documentation Home
 Welcome to the static documentation mirror. Please navigate the markdown files in this directory for architectural diagrams and guides.
 """,
-    "Scrum_Wiki.md": """# $Id$
+    "Scrum_Wiki.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Scrum Wiki Master List & Index Portal
 
 Welcome to the static Scrum documentation portal. This master wiki aggregates and organizes all daily stand-up logs, planning reports, retrospectives, reviews, and velocity charts recorded during the agile development of the **Local Food AI** clinical dietetics engine.
@@ -598,26 +613,26 @@ Welcome to the static Scrum documentation portal. This master wiki aggregates an
 
 ## 📅 Sprint Ceremonies & Logs
 
-### 1. [Sprint Plans (Scrum_Plan.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Plan.md)
+### 1. [Sprint Plans (Scrum_Plan.md)](Scrum_Plan.pdf)
 *Contains Sprint Plan formulations, active user stories selection, scope statements, and team capacity bounds for each milestone loop.*
 
-### 2. [Daily Scrums (Scrum_Daily.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Daily.md)
+### 2. [Daily Scrums (Scrum_Daily.md)](Scrum_Daily.pdf)
 *Continuous daily stand-up summaries tracking individual task completion, blocker mitigations, and immediate day-to-day coordination.*
 
-### 3. [Sprint Reviews (Scrum_Review.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Review.md)
+### 3. [Sprint Reviews (Scrum_Review.md)](Scrum_Review.pdf)
 *Contains sprint review logs, clinician demonstration summaries, feature validation checklists, and stakeholder feedback logs.*
 
-### 4. [Sprint Retrospectives (Scrum_Retro.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Retro.md)
+### 4. [Sprint Retrospectives (Scrum_Retro.md)](Scrum_Retro.pdf)
 *Reviews process improvements, continuous integration learnings, and action items aimed at optimizing team operations and environment tuning.*
 
 ---
 
 ## 📊 Deliverables & Quality Assurance
 
-### 5. [Scrum Artifacts (Scrum_Artifacts.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Scrum_Artifacts.md)
+### 5. [Scrum Artifacts (Scrum_Artifacts.md)](Scrum_Artifacts.pdf)
 *Indexes sprint velocity metrics, completed story points distributions, burndown coordinates, and final Taiga delivery milestones.*
 
-### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs/Test_Cases_Sprint8.md)
+### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](Test_Cases_Sprint8.pdf)
 *Legacy acceptance test logs covering core NLP chat, portion converters, and initial search validations.*
 
 ---
@@ -625,38 +640,54 @@ Welcome to the static Scrum documentation portal. This master wiki aggregates an
 > [!NOTE]
 > **Operational Compliance**: All Scrum files above are synchronized with their respective Taiga milestone identifiers (`Sprint 13` and `Sprint 7`). All physical activities recorded in these markdown logs have corresponding closed tasks inside Taiga.
 """,
-    "Scrum_Daily.md": """# $Id$
+    "Scrum_Daily.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Daily Scrums
 - **26.05.07 DAILY**: Fixed time scope bug, added Nginx proxy, built sync scripts.
 """,
-    "Scrum_Plan.md": """# $Id$
+    "Scrum_Plan.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Plans
 - **Sprint 10 PLAN**: Fix LLM Tool Calling, optimize Cartesian SQL explosion, build Teams webhooks.
 """,
-    "Scrum_Retro.md": """# $Id$
+    "Scrum_Retro.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Retrospectives
 - **Sprint 10 RETROSPECTIVE**: Mitigated dirty data duplicates using SQL `GROUP BY`. Need to maintain strict Git commit tagging (`TG-XXX`).
 """,
-    "Scrum_Review.md": """# $Id$
+    "Scrum_Review.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint Reviews
 - **Sprint 10 REVIEW**: App executes sub-second searches. Nginx fully operational on Port 80.
 """,
-    "Scrum_Artifacts.md": """# $Id$
+    "Scrum_Artifacts.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Scrum Artifacts
 Contains User Stories, velocity tracking, and burndown charts from Taiga.
 """,
-    "Test_Cases_Sprint8.md": """# $Id$
+    "Test_Cases_Sprint8.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Sprint 8 Legacy Test Cases
 - Tested RAG AI tool integration.
 - Tested user authentication flows.
 """,
-    "WSL_Deployment.md": """# $Id$
+    "WSL_Deployment.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # WSL Deployment Runbook
 To deploy on Windows Subsystem for Linux:
 1. Ensure WSL2 backend is enabled in Docker Desktop.
 2. Follow standard Installation Guide inside the WSL Ubuntu terminal.
 """,
-    "User_Description.md": """# $Id$
+    "User_Description.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - User Description & Functional Guide
 
 ## 1. System Vision
@@ -698,7 +729,9 @@ An automated clinical diet planner.
 - **Illnesses**: Diabetes, Hypertension, Kidney Disease, Scurvy, Anemia.
 - **Diets**: Vegan, Vegetarian, Kosher, Halal, Keto, Paleo, Christian (Lent/Good Friday).
 """,
-    "Start_Stop_Procedures.md": """# $Id$
+    "Start_Stop_Procedures.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Infrastructure Stop & Start Operational Procedures
 
 This runbook outlines the exact sequence and commands to start, stop, and verify each microservice in the Local Food AI environment.
@@ -789,7 +822,9 @@ docker compose logs --tail=100
 netstat -tulpn | grep -E "80|3307|8081|11434"
 ```
 """,
-    "Operator_Installation_Guide.md": """# $Id$
+    "Operator_Installation_Guide.md": """The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
 # Local Food AI - Detailed Operator Installation Guide
 
 This document is a step-by-step installation, mapping, configuration, and verification manual for deploying the **Local Food AI** system in an enterprise environment. It covers hybrid hypervisor infrastructure (WSL2, Hyper-V, and VirtualBox), cross-node networking, SNMPv3 monitoring, alert channels, and acceptance testing.
@@ -977,24 +1012,54 @@ Run these test cases to verify the installation:
 }
 
 import subprocess
-try:
-    log_info = subprocess.check_output(['git', 'log', '-1', '--format=%H %an %ae %ad %cn %ce %cd %N  %s', '--date=format:%Y/%m/%d %H:%M:%S'], encoding='utf-8').strip()
+def sanitize_name(name):
+    if not name:
+        return "Francois Lange"
+    name_lower = name.lower()
+    if "fran" in name_lower or "lange" in name_lower or "lanfr" in name_lower:
+        return "Francois Lange"
+    return name
+
+def get_git_info_for_file(file_path):
     try:
-        tag_info = subprocess.check_output(['git', 'describe', '--tags', '--always'], stderr=subprocess.DEVNULL, encoding='utf-8').strip()
+        cmd = [
+            "git", "log", "-1",
+            "--date=format:%Y/%m/%d %H:%M:%S",
+            "--format=%an|%ae|%ad|%cn|%ce|%cd|%H|%D|%N",
+            "--", file_path
+        ]
+        out = subprocess.check_output(cmd, stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip()
+        if out:
+            parts = out.split('|')
+            if len(parts) == 9:
+                parts[0] = sanitize_name(parts[0])
+                parts[3] = sanitize_name(parts[3])
+                return parts
     except Exception:
-        tag_info = ""
+        pass
     
-    if tag_info:
-        git_id = f"$Id$"
-    else:
-        git_id = f"$Id$"
-except Exception:
-    git_id = "$Id$"
-
-for filename, content in docs.items():
+    author_name = "Francois Lange"
+    try:
+        author_email = subprocess.check_output(["git", "config", "user.email"], stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip() or "lanfr144@school.lu"
+    except Exception:
+        author_email = "lanfr144@school.lu"
+    from datetime import datetime
+    now_str = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
+    return [author_name, author_email, now_str, author_name, author_email, now_str, "Not Committed Yet", "local", "none"]
+
+for filename, doc_content in docs.items():
     filepath = os.path.join(docs_dir, filename)
+    
+    # Dynamic smudging of the Format placeholder for this specific file
+    info = get_git_info_for_file(filepath)
+    replacement = f"$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+    
+    # We replace the raw template string in the content
+    pattern = r'\$Format:LocalFoodAI_lanfr144:generate_docs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
+    doc_content_smudged = re.sub(pattern, replacement, doc_content)
+    
     with open(filepath, "w", encoding="utf-8") as f:
-        f.write(content.replace('$Id$', git_id))
-    print(f"Generated {filepath}")
+        f.write(doc_content_smudged)
+    print(f"Generated and smudged {filepath}")
 
-print("\nDocs directory perfectly mirrored with operator level runbooks.")
+print("\nDocs directory perfectly mirrored with operator level runbooks.")

+ 1 - 2
manage_services.sh

@@ -1,7 +1,6 @@
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:manage_services.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:manage_services.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # ==============================================================================
-# $Id$
 # File: manage_services.sh
 # Purpose: Comprehensive Service Manager for Local Food AI development.
 #          Allows operators and developers to cleanly start, stop, restart,

+ 1 - 1
scratch/test_user_regex.py

@@ -3,7 +3,7 @@ import re
 pattern = r'\$F' + r'ormat:[^$]+\$'
 content = """
                     if "$Format:LocalFoodAI:app.py:" in line:
-                        match = re.search(r'\\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$', line)
+                        match = re.search(r'\\$Format:LocalFoodAI_lanfr144:test_user_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$', line)
 """
 
 match = re.search(pattern, content)

+ 46 - 15
scripts/generate_pdfs.py

@@ -1,6 +1,7 @@
 #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_pdfs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import glob
+import re
 from markdown_pdf import MarkdownPdf
 from markdown_pdf import Section
 
@@ -73,25 +74,55 @@ def main():
             md_content = f.read()
             
         import subprocess
-        try:
-            log_info = subprocess.check_output(['git', 'log', '-1', '--format=%H %an %ae %ad %cn %ce %cd %N  %s', '--date=format:%Y/%m/%d %H:%M:%S'], encoding='utf-8').strip()
+        def sanitize_name(name):
+            if not name:
+                return "Francois Lange"
+            name_lower = name.lower()
+            if "fran" in name_lower or "lange" in name_lower or "lanfr" in name_lower:
+                return "Francois Lange"
+            return name
+
+        def get_git_info_for_file(file_path):
             try:
-                tag_info = subprocess.check_output(['git', 'describe', '--tags', '--always'], stderr=subprocess.DEVNULL, encoding='utf-8').strip()
+                cmd = [
+                    "git", "log", "-1",
+                    "--date=format:%Y/%m/%d %H:%M:%S",
+                    "--format=%an|%ae|%ad|%cn|%ce|%cd|%H|%D|%N",
+                    "--", file_path
+                ]
+                out = subprocess.check_output(cmd, stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip()
+                if out:
+                    parts = out.split('|')
+                    if len(parts) == 9:
+                        parts[0] = sanitize_name(parts[0])
+                        parts[3] = sanitize_name(parts[3])
+                        return parts
             except Exception:
-                tag_info = ""
-            
-            if tag_info:
-                git_id = f"$Id$"
-            else:
-                git_id = f"$Id$"
-        except Exception:
-            git_id = "$Id$"
-            
-        md_content = md_content.replace('$Id$', git_id)
+                pass
+            author_name = "Francois Lange"
+            try:
+                author_email = subprocess.check_output(["git", "config", "user.email"], stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip() or "lanfr144@school.lu"
+            except Exception:
+                author_email = "lanfr144@school.lu"
+            from datetime import datetime
+            now_str = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
+            return [author_name, author_email, now_str, author_name, author_email, now_str, "Not Committed Yet", "local", "none"]
+
+        # Dynamic smudging of the Format placeholder for this specific file
+        base_name = os.path.basename(md_file)
+        info = get_git_info_for_file(md_file)
+        replacement = f"$Format:LocalFoodAI_lanfr144:generate_pdfs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
         
+        # Replace the raw format template if present
+        pattern = r'\$Format:LocalFoodAI_lanfr144:generate_pdfs.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
+        md_content = re.sub(pattern, replacement, md_content)
+        
+        # Clean up absolute file:/// paths to relative paths
+        md_content = re.sub(r'file:///.*?/docs/([a-zA-Z0-9_-]+)\.md', r'\1.pdf', md_content, flags=re.IGNORECASE)
+        md_content = re.sub(r'file:///.*?/Food/([a-zA-Z0-9_.-]+)', r'../\1', md_content, flags=re.IGNORECASE)
+
         try:
-            pdf = MarkdownPdf(toc_level=2, optimize=True)
-            base_name = os.path.basename(md_file)
+            pdf = MarkdownPdf(toc_level=2, optimize=True, plugins={"mermaid": {}})
             
             if base_name == 'project_report.md':
                 print("Splitting project_report.md into Portrait/Landscape/Portrait sections...")

+ 50 - 21
scripts/generate_project_report.py

@@ -1,5 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
-# $Id$
+#ident "@(#)$Format:LocalFoodAI_lanfr144:generate_project_report.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import subprocess
 import sys
@@ -173,22 +172,52 @@ def get_git_info(filename):
 def main():
     print("Generating comprehensive Project Report...")
     
-    # Get master Git tag and details
-    try:
-        log_info = subprocess.check_output(['git', 'log', '-1', '--format=%H %an %ae %ad %cn %ce %cd %N  %s', '--date=format:%Y/%m/%d %H:%M:%S'], encoding='utf-8').strip()
+    def sanitize_name(name):
+        if not name:
+            return "Francois Lange"
+        name_lower = name.lower()
+        if "fran" in name_lower or "lange" in name_lower or "lanfr" in name_lower:
+            return "Francois Lange"
+        return name
+
+    def get_git_info_for_file(file_path):
         try:
-            tag_info = subprocess.check_output(['git', 'describe', '--tags', '--always'], stderr=subprocess.DEVNULL, encoding='utf-8').strip()
+            cmd = [
+                "git", "log", "-1",
+                "--date=format:%Y/%m/%d %H:%M:%S",
+                "--format=%an|%ae|%ad|%cn|%ce|%cd|%H|%D|%N",
+                "--", file_path
+            ]
+            out = subprocess.check_output(cmd, stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip()
+            if out:
+                parts = out.split('|')
+                if len(parts) == 9:
+                    parts[0] = sanitize_name(parts[0])
+                    parts[3] = sanitize_name(parts[3])
+                    return parts
         except Exception:
-            tag_info = ""
-        
-        if tag_info:
-            git_id = f"$Id$"
-        else:
-            git_id = f"$Id$"
-    except Exception:
-        git_id = "$Id$"
+            pass
+        author_name = "Francois Lange"
+        try:
+            author_email = subprocess.check_output(["git", "config", "user.email"], stderr=subprocess.DEVNULL).decode('utf-8', errors='ignore').strip() or "lanfr144@school.lu"
+        except Exception:
+            author_email = "lanfr144@school.lu"
+        from datetime import datetime
+        now_str = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
+        return [author_name, author_email, now_str, author_name, author_email, now_str, "Not Committed Yet", "local", "none"]
+
+    git_id_placeholder = 'The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:generate_project_report.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"'
+    
+    # We smudge it dynamically
+    info = get_git_info_for_file("docs/project_report.md")
+    replacement = f"$Format:LocalFoodAI_lanfr144:generate_project_report.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+    
+    import re
+    git_id = re.sub(r'\$Format:LocalFoodAI_lanfr144:generate_project_report.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$', replacement, git_id_placeholder)
+
+    report_content = f"""{git_id}
 
-    report_content = f"""# Capstone Project Report & File Documentation
+# Capstone Project Report & File Documentation
 
 > [!NOTE]
 > **Dynamic Version Control**: This document is versioned under the master Git ID: `{git_id}`.
@@ -230,12 +259,12 @@ Below is an exhaustive catalog of every critical file in the repository, detaili
 ## 3. Directory Structure Map
 An overview of the folder hierarchy organizing our microservice infrastructure:
 
-- [**`alembic/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/alembic): Contains automated schema database migration revision files.
-- [**`docker/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docker): Houses distinct production container configurations for `/app` (Streamlit) and `/ingest` (Ingestion).
-- [**`docs/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/docs): Living Capstone document manuals (Markdown & high-fidelity compiled PDFs).
-- [**`nginx/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/nginx): Houses the reverse proxy configuration (`nginx.conf`) forwarding local port 80 traffic.
-- [**`scripts/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/scripts): Collection of admin scripts, deployment automation, and PDF compilation generators.
-- [**`searxng/`**](file:///c:/Users/lanfr144/Documents/DOPRO1/Antigravity/Food/searxng): Core configuration files (`settings.yml`) securing private, localized search operations.
+- [**`alembic/`**](../alembic): Contains automated schema database migration revision files.
+- [**`docker/`**](../docker): Houses distinct production container configurations for `/app` (Streamlit) and `/ingest` (Ingestion).
+- [**`docs/`**](.): Living Capstone document manuals (Markdown & high-fidelity compiled PDFs).
+- [**`nginx/`**](../nginx): Houses the reverse proxy configuration (`nginx.conf`) forwarding local port 80 traffic.
+- [**`scripts/`**](../scripts): Collection of admin scripts, deployment automation, and PDF compilation generators.
+- [**`searxng/`**](../searxng): Core configuration files (`settings.yml`) securing private, localized search operations.
 
 ---