Explorar o código

[#1] Fix PDF corruption via renormalization and add Uninstall Guide for WSL and Windows

Lange François hai 2 semanas
pai
achega
60960e76fc
Modificáronse 100 ficheiros con 246 adicións e 74 borrados
  1. 1 1
      .agents/workflows/pre_flight_check.md
  2. 1 1
      .agents/workflows/taiga-commit.md
  3. 11 4
      .gitattributes
  4. 1 1
      .gitignore
  5. 1 1
      PROJECT_CONTEXT.md
  6. BIN=BIN
      Project.pdf
  7. BIN=BIN
      Retro Planning.pdf
  8. 1 1
      add_logging.py
  9. 1 1
      alembic/env.py
  10. 1 1
      alembic/versions/701a919f4025_initial_schema.py
  11. 1 1
      check_users.py
  12. 2 2
      configure_zabbix_alerts.py
  13. 1 1
      configure_zabbix_email.py
  14. 1 1
      dags/openfoodfacts_ingestion.py
  15. 1 1
      data_sync.sh
  16. BIN=BIN
      delivery.zip
  17. 1 1
      deploy.sh
  18. 1 1
      docker-compose-wsl.yml
  19. 1 1
      docker-compose.yml
  20. 1 1
      docker-compose_skip.yml
  21. 1 1
      docker/app/Dockerfile
  22. 1 1
      docker/ingest/Dockerfile
  23. 1 1
      docker/mysql/Dockerfile
  24. 1 1
      docker/zabbix/docker-compose.yml
  25. BIN=BIN
      docs/Backup_Procedure.pdf
  26. BIN=BIN
      docs/Data_Ingestion.pdf
  27. BIN=BIN
      docs/Final_Report.pdf
  28. BIN=BIN
      docs/Installation_Guide.pdf
  29. BIN=BIN
      docs/Operator_Installation_Guide.pdf
  30. BIN=BIN
      docs/Scrum_Artifacts.pdf
  31. BIN=BIN
      docs/Scrum_Daily.pdf
  32. BIN=BIN
      docs/Scrum_Plan.pdf
  33. BIN=BIN
      docs/Scrum_Retro.pdf
  34. BIN=BIN
      docs/Scrum_Review.pdf
  35. 3 0
      docs/Scrum_Wiki.md
  36. BIN=BIN
      docs/Scrum_Wiki.pdf
  37. BIN=BIN
      docs/Start_Stop_Procedures.pdf
  38. BIN=BIN
      docs/Technical_Document.pdf
  39. BIN=BIN
      docs/Test_Cases_Sprint8.pdf
  40. BIN=BIN
      docs/URL_Formats.pdf
  41. 79 0
      docs/Uninstall_Guide.md
  42. BIN=BIN
      docs/Uninstall_Guide.pdf
  43. BIN=BIN
      docs/User_Description.pdf
  44. BIN=BIN
      docs/User_Guide.pdf
  45. BIN=BIN
      docs/WSL_Deployment.pdf
  46. BIN=BIN
      docs/Wiki_Home.pdf
  47. BIN=BIN
      docs/architecture.pdf
  48. 1 1
      docs/disaster_recovery_plan.md
  49. BIN=BIN
      docs/disaster_recovery_plan.pdf
  50. 1 1
      docs/distributed_deployment.md
  51. BIN=BIN
      docs/distributed_deployment.pdf
  52. 1 1
      docs/docker_connection.md
  53. BIN=BIN
      docs/docker_connection.pdf
  54. BIN=BIN
      docs/fonts/Roboto-Bold.ttf
  55. BIN=BIN
      docs/fonts/Roboto-Regular.ttf
  56. BIN=BIN
      docs/fonts/RobotoMono-Regular.ttf
  57. BIN=BIN
      docs/project_report.pdf
  58. 1 1
      docs/retro_planning.md
  59. BIN=BIN
      docs/retro_planning.pdf
  60. 1 1
      docs/taiga_audit_report.md
  61. BIN=BIN
      docs/taiga_audit_report.pdf
  62. 1 1
      docs/zabbix_monitoring.md
  63. BIN=BIN
      docs/zabbix_monitoring.pdf
  64. 1 1
      download_csv.sh
  65. BIN=BIN
      e9fa96c9-18ae-4afb-861a-68faea1fde08.png
  66. 83 0
      generate_docs.py
  67. 1 1
      ingest_csv.py
  68. 1 1
      init.sql
  69. 1 1
      local_tools/apply_port_offset.py
  70. 1 1
      local_tools/archive_scratch.py
  71. 1 1
      local_tools/close_and_export_taiga.py
  72. 1 1
      local_tools/setup_filters.bat
  73. 1 1
      local_tools/setup_filters.sh
  74. 1 1
      master_trigger.sh
  75. 1 1
      myloginpath.py
  76. 1 1
      proper_reset.sh
  77. 1 1
      requirements.txt
  78. 1 1
      reset.sh
  79. 1 1
      rotate_passwords.py
  80. 1 1
      scratch/test_dr.sh
  81. 1 1
      scratch/test_filter.py
  82. 3 3
      scratch/test_new_regex.py
  83. 5 5
      scratch/test_regex.py
  84. 1 1
      scratch/test_regex_2.py
  85. 1 1
      scripts/create_delivery_zip.py
  86. 1 1
      scripts/deploy_to_server.py
  87. 1 1
      scripts/manage_models.sh
  88. 1 1
      scripts/setup_deploy.py
  89. 2 2
      scripts/taiga_sync_final.py
  90. 1 1
      scripts/zip_project.py
  91. 1 1
      searxng/settings.yml
  92. 1 1
      setup_app.sh
  93. 1 1
      skills/code-review/SKILL.md
  94. 1 1
      skills/doc-writer/SKILL.md
  95. 1 1
      skills/expert-coach/SKILL.md
  96. 1 1
      skills/git-commit/SKILL.md
  97. 1 1
      skills/refactor-coach/SKILL.md
  98. 1 1
      skills/sql-optimizer/SKILL.md
  99. 1 1
      skills/test-generator/SKILL.md
  100. 2 2
      snmp_notifier.py

+ 1 - 1
.agents/workflows/pre_flight_check.md

@@ -1,4 +1,4 @@
-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:pre_flight_check.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 description: Hardware limits pre-flight check before builds
 description: Hardware limits pre-flight check before builds

+ 1 - 1
.agents/workflows/taiga-commit.md

@@ -1,4 +1,4 @@
-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:taiga-commit.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Taiga Commit Workflow
 # Taiga Commit Workflow
 Description: Garantit que chaque commit contient l'ID Taiga pour la mise à jour automatique.
 Description: Garantit que chaque commit contient l'ID Taiga pour la mise à jour automatique.

+ 11 - 4
.gitattributes

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:.gitattributes:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 * text=auto
 * text=auto
 # # 1. Forcer le format de date requis YYYY/MM/DD HH:MM:SS
 # # 1. Forcer le format de date requis YYYY/MM/DD HH:MM:SS
 # git config log.date "format:%Y/%m/%d %H:%M:%S"
 # git config log.date "format:%Y/%m/%d %H:%M:%S"
@@ -7,14 +7,14 @@
 # git config filter.ident-dynamic.smudge '
 # git config filter.ident-dynamic.smudge '
 #   proj=$(basename "$(git rev-parse --show-toplevel)");
 #   proj=$(basename "$(git rev-parse --show-toplevel)");
 #   file="%f";
 #   file="%f";
-#   perl -pe "s|\\\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$|\\\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$proj:\$file:\$1\\\$|g" | \
+#   perl -pe "s|\\\$Format:LocalFoodAI_lanfr144:.gitattributes:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$|\\\$Format:LocalFoodAI_lanfr144:.gitattributes:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$proj:\$file:\$1\\\$|g" | \
 #   git archive --subst-vars | cat
 #   git archive --subst-vars | cat
 # '
 # '
 # 
 # 
 # # 3. Configurer le filtre "Clean" (Nettoyage avant le commit pour éviter les conflits)
 # # 3. Configurer le filtre "Clean" (Nettoyage avant le commit pour éviter les conflits)
 # # The LEFT PART OF THE PIPE MUST BE "$Format:PROJECT_NAME:FILE_NAME"
 # # The LEFT PART OF THE PIPE MUST BE "$Format:PROJECT_NAME:FILE_NAME"
 # git config filter.ident-dynamic.clean '
 # git config filter.ident-dynamic.clean '
-#   perl -pe "s|\\\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$|\\\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$1\\\$|g"
+#   perl -pe "s|\\\$Format:LocalFoodAI_lanfr144:.gitattributes:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$|\\\$Format:LocalFoodAI_lanfr144:.gitattributes:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$1\\\$|g"
 # '
 # '
 # 
 # 
 # 1. Protection du script de filtre pour Unix/WSL
 # 1. Protection du script de filtre pour Unix/WSL
@@ -36,4 +36,11 @@ local_tools/git-ident-filter.py filter=ident-dynamic eol=lf
 .env.example filter=ident-dynamic
 .env.example filter=ident-dynamic
 *.sql filter=ident-dynamic
 *.sql filter=ident-dynamic
 .gitignore filter=ident-dynamic
 .gitignore filter=ident-dynamic
-Dockerfile filter=ident-dynamic
+Dockerfile filter=ident-dynamic
+
+# Binary files definition (prevents line ending normalization and text corruption)
+*.pdf binary
+*.zip binary
+*.png binary
+*.docx binary
+*.ttf binary

+ 1 - 1
.gitignore

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:DEVOP1:.gitignore:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:.gitignore:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 *.agent-backup
 *.agent-backup
 *.csv
 *.csv
 *.db
 *.db

+ 1 - 1
PROJECT_CONTEXT.md

@@ -1,4 +1,4 @@
-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:PROJECT_CONTEXT.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Project Context: Local Food AI
 # Project Context: Local Food AI
 
 

BIN=BIN
Project.pdf


BIN=BIN
Retro Planning.pdf


+ 1 - 1
add_logging.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:add_logging.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 
 
 files_to_update = ['scripts/setup_deploy.py', 'docker-compose.yml', 'docker/zabbix/docker-compose.yml']
 files_to_update = ['scripts/setup_deploy.py', 'docker-compose.yml', 'docker/zabbix/docker-compose.yml']

+ 1 - 1
alembic/env.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:env.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 from logging.config import fileConfig
 from logging.config import fileConfig
 
 
 from sqlalchemy import engine_from_config
 from sqlalchemy import engine_from_config

+ 1 - 1
alembic/versions/701a919f4025_initial_schema.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:701a919f4025_initial_schema.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 """initial_schema
 """initial_schema
 
 
 Revision ID: 701a919f4025
 Revision ID: 701a919f4025

+ 1 - 1
check_users.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:check_users.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import myloginpath
 import myloginpath
 import pymysql
 import pymysql
 import bcrypt
 import bcrypt

+ 2 - 2
configure_zabbix_alerts.py

@@ -1,6 +1,6 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:configure_zabbix_alerts.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import json
 import json
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:configure_zabbix_alerts.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import urllib.request
 import urllib.request
 import os
 import os
 
 

+ 1 - 1
configure_zabbix_email.py

@@ -1 +1 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:configure_zabbix_email.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"

+ 1 - 1
dags/openfoodfacts_ingestion.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:openfoodfacts_ingestion.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 from airflow import DAG
 from airflow import DAG
 from airflow.operators.python import PythonOperator
 from airflow.operators.python import PythonOperator
 from airflow.providers.docker.operators.docker import DockerOperator
 from airflow.providers.docker.operators.docker import DockerOperator

+ 1 - 1
data_sync.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:data_sync.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # data_sync.sh - Automated Data Freshness Pipeline
 # data_sync.sh - Automated Data Freshness Pipeline
 
 
 LOG_DIR="./logs"
 LOG_DIR="./logs"

BIN=BIN
delivery.zip


+ 1 - 1
deploy.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:deploy.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:deploy.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # -----------------------------------------------------------------------------
 # -----------------------------------------------------------------------------
 # Naked Environment Deployment Script for Ubuntu 24.04
 # Naked Environment Deployment Script for Ubuntu 24.04
 # Run this script to seamlessly fully provision the server for the AI Web App.
 # Run this script to seamlessly fully provision the server for the AI Web App.

+ 1 - 1
docker-compose-wsl.yml

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:docker-compose-wsl.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 services:
 services:
   mysql:
   mysql:
     build:
     build:

+ 1 - 1
docker-compose.yml

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:docker-compose.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 services:
 services:
   mysql:
   mysql:
     build:
     build:

+ 1 - 1
docker-compose_skip.yml

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:docker-compose_skip.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 services:
 services:
   mysql:
   mysql:
     build:
     build:

+ 1 - 1
docker/app/Dockerfile

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:Dockerfile:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # Dockerfile for Streamlit UI
 # Dockerfile for Streamlit UI
 FROM python:3.11-slim
 FROM python:3.11-slim
 
 

+ 1 - 1
docker/ingest/Dockerfile

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:Dockerfile:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # Dockerfile for ingestion service
 # Dockerfile for ingestion service
 FROM python:3.11-slim
 FROM python:3.11-slim
 
 

+ 1 - 1
docker/mysql/Dockerfile

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:Dockerfile:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 FROM mysql:8.0
 FROM mysql:8.0
 
 
 # Minimal MySQL Dockerfile – no custom config or init scripts
 # Minimal MySQL Dockerfile – no custom config or init scripts

+ 1 - 1
docker/zabbix/docker-compose.yml

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:docker-compose.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 version: '3.5'
 version: '3.5'
 services:
 services:
   zabbix-server:
   zabbix-server:

BIN=BIN
docs/Backup_Procedure.pdf


BIN=BIN
docs/Data_Ingestion.pdf


BIN=BIN
docs/Final_Report.pdf


BIN=BIN
docs/Installation_Guide.pdf


BIN=BIN
docs/Operator_Installation_Guide.pdf


BIN=BIN
docs/Scrum_Artifacts.pdf


BIN=BIN
docs/Scrum_Daily.pdf


BIN=BIN
docs/Scrum_Plan.pdf


BIN=BIN
docs/Scrum_Retro.pdf


BIN=BIN
docs/Scrum_Review.pdf


+ 3 - 0
docs/Scrum_Wiki.md

@@ -31,6 +31,9 @@ Welcome to the static Scrum documentation portal. This master wiki aggregates an
 ### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](Test_Cases_Sprint8.pdf)
 ### 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.*
 *Legacy acceptance test logs covering core NLP chat, portion converters, and initial search validations.*
 
 
+### 7. [Uninstallation Guide (Uninstall_Guide.md)](Uninstall_Guide.pdf)
+*Provides structured procedures to completely remove and tear down all system components from Windows and Linux/WSL environments.*
+
 ---
 ---
 
 
 > [!NOTE]
 > [!NOTE]

BIN=BIN
docs/Scrum_Wiki.pdf


BIN=BIN
docs/Start_Stop_Procedures.pdf


BIN=BIN
docs/Technical_Document.pdf


BIN=BIN
docs/Test_Cases_Sprint8.pdf


BIN=BIN
docs/URL_Formats.pdf


+ 79 - 0
docs/Uninstall_Guide.md

@@ -0,0 +1,79 @@
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:Uninstall_Guide.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+
+
+# Local Food AI - Uninstallation & Teardown Guide
+
+This document outlines the standard uninstallation procedures to completely remove the **Local Food AI** stack components from both Windows hosts and Linux/WSL deployment environments.
+
+---
+
+## 1. Linux & WSL Client Uninstallation
+
+To cleanly purge the containerized services, databases, virtual environments, and log files:
+
+### Step 1.1: Stop & Remove Docker Containers & Volumes
+Bring down the Docker Compose stack and permanently delete all associated network interfaces and database volumes:
+```bash
+# Navigate to the project directory
+cd /dossier/du/projet/Food
+
+# Stop services and remove containers, networks, and volumes
+./manage_services.sh stop
+docker compose down -v
+```
+*Note: The `-v` flag is critical as it completely purges the MySQL persistent data directories.*
+
+### Step 1.2: Remove Local Project Docker Images
+Clean up the built application images from the local Docker cache:
+```bash
+docker rmi food-app food-ingest
+```
+
+### Step 1.3: Clean Up Virtual Environments, Logs & Backups
+Delete local administrator logs, backup directories, and Python virtual environment libraries:
+```bash
+rm -rf .venv/
+rm -rf backups/
+rm -rf logs/
+rm -rf data/
+```
+
+### Step 1.4: Purge Docker CE (Optional)
+If you wish to completely uninstall Docker CE from the Ubuntu/WSL environment:
+```bash
+sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
+sudo rm -rf /var/lib/docker
+sudo rm -rf /var/lib/containerd
+```
+
+---
+
+## 2. Windows Host Uninstallation
+
+To remove all hypervisor and subsystem configurations from the Windows client:
+
+### Step 2.1: Unregister and Delete the WSL Subsystem Environment
+To completely wipe the WSL2 Ubuntu environment and its entire virtual hard disk (VHD):
+1. Open a PowerShell terminal as Administrator.
+2. Execute the unregister command:
+```powershell
+wsl --unregister Dopro1
+```
+*Warning: This action is irreversible. All configurations, tools, and code inside the WSL `Dopro1` container will be permanently deleted.*
+
+### Step 2.2: Remove VirtualBox Virtual Machines (if applicable)
+If you deployed Ollama or Zabbix nodes on dedicated VirtualBox VMs:
+1. Open PowerShell or Command Prompt.
+2. Run the VBoxManage tool to remove the VMs:
+```cmd
+VBoxManage unregistervm "Ollama_Server" --delete
+VBoxManage unregistervm "Zabbix_Server" --delete
+```
+
+### Step 2.3: Disable Windows Virtualization Features (Optional)
+To disable WSL and Virtual Machine Platform features on the Windows host:
+```powershell
+Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
+Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
+```
+*Note: A system reboot is required to complete this step.*

BIN=BIN
docs/Uninstall_Guide.pdf


BIN=BIN
docs/User_Description.pdf


BIN=BIN
docs/User_Guide.pdf


BIN=BIN
docs/WSL_Deployment.pdf


BIN=BIN
docs/Wiki_Home.pdf


BIN=BIN
docs/architecture.pdf


+ 1 - 1
docs/disaster_recovery_plan.md

@@ -1,4 +1,4 @@
-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:disaster_recovery_plan.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Disaster Recovery & Backup Plan
 # Disaster Recovery & Backup Plan
 
 

BIN=BIN
docs/disaster_recovery_plan.pdf


+ 1 - 1
docs/distributed_deployment.md

@@ -1,4 +1,4 @@
-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:distributed_deployment.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Distributed Deployment Guide
 # Distributed Deployment Guide
 
 

BIN=BIN
docs/distributed_deployment.pdf


+ 1 - 1
docs/docker_connection.md

@@ -1,5 +1,5 @@
 # Docker Connection & Health Check Guide
 # Docker Connection & Health Check Guide
-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:docker_connection.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 This document explains how to interact with the various Docker containers that power the Local Food AI system.
 This document explains how to interact with the various Docker containers that power the Local Food AI system.
 
 

BIN=BIN
docs/docker_connection.pdf


BIN=BIN
docs/fonts/Roboto-Bold.ttf


BIN=BIN
docs/fonts/Roboto-Regular.ttf


BIN=BIN
docs/fonts/RobotoMono-Regular.ttf


BIN=BIN
docs/project_report.pdf


+ 1 - 1
docs/retro_planning.md

@@ -1,4 +1,4 @@
-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:retro_planning.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Local Food AI: Retro Planning
 # Local Food AI: Retro Planning
 
 

BIN=BIN
docs/retro_planning.pdf


+ 1 - 1
docs/taiga_audit_report.md

@@ -1,4 +1,4 @@
-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:taiga_audit_report.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Taiga Agile Audit Report
 # Taiga Agile Audit Report
 
 

BIN=BIN
docs/taiga_audit_report.pdf


+ 1 - 1
docs/zabbix_monitoring.md

@@ -1,4 +1,4 @@
-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:zabbix_monitoring.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Zabbix Telemetry & Monitoring Guide
 # Zabbix Telemetry & Monitoring Guide
 
 

BIN=BIN
docs/zabbix_monitoring.pdf


+ 1 - 1
download_csv.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:download_csv.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # download latest OpenFoodFacts CSVs if not present or if newer version exists
 # download latest OpenFoodFacts CSVs if not present or if newer version exists
 DATA_DIR="$(dirname "$0")/data"
 DATA_DIR="$(dirname "$0")/data"
 mkdir -p "$DATA_DIR"
 mkdir -p "$DATA_DIR"

BIN=BIN
e9fa96c9-18ae-4afb-861a-68faea1fde08.png


+ 83 - 0
generate_docs.py

@@ -635,6 +635,9 @@ Welcome to the static Scrum documentation portal. This master wiki aggregates an
 ### 6. [Sprint 8 Test Cases (Test_Cases_Sprint8.md)](Test_Cases_Sprint8.pdf)
 ### 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.*
 *Legacy acceptance test logs covering core NLP chat, portion converters, and initial search validations.*
 
 
+### 7. [Uninstallation Guide (Uninstall_Guide.md)](Uninstall_Guide.pdf)
+*Provides structured procedures to completely remove and tear down all system components from Windows and Linux/WSL environments.*
+
 ---
 ---
 
 
 > [!NOTE]
 > [!NOTE]
@@ -1008,6 +1011,86 @@ Run these test cases to verify the installation:
 | **TC-OP-03** | Ask Chat: 'Can I eat sushi?' | llama3.2:3b retrieves database context and flags raw fish as forbidden for pregnancy. | `[ ]` |
 | **TC-OP-03** | Ask Chat: 'Can I eat sushi?' | llama3.2:3b retrieves database context and flags raw fish as forbidden for pregnancy. | `[ ]` |
 | **TC-OP-04** | Trigger manual db backup | Timestamped compressed .sql.gz created inside backups/ folder. | `[ ]` |
 | **TC-OP-04** | Trigger manual db backup | Timestamped compressed .sql.gz created inside backups/ folder. | `[ ]` |
 | **TC-OP-05** | Terminate Ollama Container | Zabbix PROBLEM active alert generated on dashboard in < 30 seconds. | `[ ]` |
 | **TC-OP-05** | Terminate Ollama Container | Zabbix PROBLEM active alert generated on dashboard in < 30 seconds. | `[ ]` |
+""",
+    "Uninstall_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 - Uninstallation & Teardown Guide
+
+This document outlines the standard uninstallation procedures to completely remove the **Local Food AI** stack components from both Windows hosts and Linux/WSL deployment environments.
+
+---
+
+## 1. Linux & WSL Client Uninstallation
+
+To cleanly purge the containerized services, databases, virtual environments, and log files:
+
+### Step 1.1: Stop & Remove Docker Containers & Volumes
+Bring down the Docker Compose stack and permanently delete all associated network interfaces and database volumes:
+```bash
+# Navigate to the project directory
+cd /dossier/du/projet/Food
+
+# Stop services and remove containers, networks, and volumes
+./manage_services.sh stop
+docker compose down -v
+```
+*Note: The `-v` flag is critical as it completely purges the MySQL persistent data directories.*
+
+### Step 1.2: Remove Local Project Docker Images
+Clean up the built application images from the local Docker cache:
+```bash
+docker rmi food-app food-ingest
+```
+
+### Step 1.3: Clean Up Virtual Environments, Logs & Backups
+Delete local administrator logs, backup directories, and Python virtual environment libraries:
+```bash
+rm -rf .venv/
+rm -rf backups/
+rm -rf logs/
+rm -rf data/
+```
+
+### Step 1.4: Purge Docker CE (Optional)
+If you wish to completely uninstall Docker CE from the Ubuntu/WSL environment:
+```bash
+sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
+sudo rm -rf /var/lib/docker
+sudo rm -rf /var/lib/containerd
+```
+
+---
+
+## 2. Windows Host Uninstallation
+
+To remove all hypervisor and subsystem configurations from the Windows client:
+
+### Step 2.1: Unregister and Delete the WSL Subsystem Environment
+To completely wipe the WSL2 Ubuntu environment and its entire virtual hard disk (VHD):
+1. Open a PowerShell terminal as Administrator.
+2. Execute the unregister command:
+```powershell
+wsl --unregister Dopro1
+```
+*Warning: This action is irreversible. All configurations, tools, and code inside the WSL `Dopro1` container will be permanently deleted.*
+
+### Step 2.2: Remove VirtualBox Virtual Machines (if applicable)
+If you deployed Ollama or Zabbix nodes on dedicated VirtualBox VMs:
+1. Open PowerShell or Command Prompt.
+2. Run the VBoxManage tool to remove the VMs:
+```cmd
+VBoxManage unregistervm "Ollama_Server" --delete
+VBoxManage unregistervm "Zabbix_Server" --delete
+```
+
+### Step 2.3: Disable Windows Virtualization Features (Optional)
+To disable WSL and Virtual Machine Platform features on the Windows host:
+```powershell
+Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
+Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
+```
+*Note: A system reboot is required to complete this step.*
 """
 """
 }
 }
 
 

+ 1 - 1
ingest_csv.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
-#ident "@(#)$Format:LocalFoodAI:ingest_csv.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:ingest_csv.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import pandas as pd
 import pandas as pd
 import myloginpath
 import myloginpath
 import urllib.parse
 import urllib.parse

+ 1 - 1
init.sql

@@ -1,4 +1,4 @@
---ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+--ident "@(#)$Format:LocalFoodAI_lanfr144:init.sql:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 -- Create databases
 -- Create databases
 CREATE DATABASE IF NOT EXISTS food_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
 CREATE DATABASE IF NOT EXISTS food_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
 CREATE DATABASE IF NOT EXISTS zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
 CREATE DATABASE IF NOT EXISTS zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

+ 1 - 1
local_tools/apply_port_offset.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:apply_port_offset.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import socket
 import socket
 import sys
 import sys

+ 1 - 1
local_tools/archive_scratch.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:archive_scratch.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import shutil
 import shutil
 
 

+ 1 - 1
local_tools/close_and_export_taiga.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:close_and_export_taiga.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import requests
 import requests
 import json
 import json

+ 1 - 1
local_tools/setup_filters.bat

@@ -1,4 +1,4 @@
-::ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+::ident "@(#)$Format:LocalFoodAI_lanfr144:setup_filters.bat:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 @echo off
 @echo off
 :: Configuration des filtres avec des chemins relatifs portables (Git s'execute toujours a la racine du depot)
 :: Configuration des filtres avec des chemins relatifs portables (Git s'execute toujours a la racine du depot)
 @git config filter.ident-dynamic.clean "python local_tools/git-ident-filter.py clean"
 @git config filter.ident-dynamic.clean "python local_tools/git-ident-filter.py clean"

+ 1 - 1
local_tools/setup_filters.sh

@@ -1,5 +1,5 @@
 #!/bin/sh
 #!/bin/sh
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:setup_filters.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 git config filter.ident-dynamic.clean "python3 local_tools/git-ident-filter.py clean"
 git config filter.ident-dynamic.clean "python3 local_tools/git-ident-filter.py clean"
 git config filter.ident-dynamic.smudge "python3 local_tools/git-ident-filter.py smudge %f"
 git config filter.ident-dynamic.smudge "python3 local_tools/git-ident-filter.py smudge %f"
 git config log.date "format:%Y/%m/%d %H:%M:%S"
 git config log.date "format:%Y/%m/%d %H:%M:%S"

+ 1 - 1
master_trigger.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:master_trigger.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:master_trigger.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # Natively reload all database logic without interactive blocks
 # Natively reload all database logic without interactive blocks
 echo "Executing autonomous WSL reload..."
 echo "Executing autonomous WSL reload..."
 pip3 install --break-system-packages pymysql pandas sqlalchemy sqlalchemy-utils cryptography openpyxl
 pip3 install --break-system-packages pymysql pandas sqlalchemy sqlalchemy-utils cryptography openpyxl

+ 1 - 1
myloginpath.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:myloginpath.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 
 
 def parse(login_path: str):
 def parse(login_path: str):

+ 1 - 1
proper_reset.sh

@@ -1,2 +1,2 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:proper_reset.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 mysql -e "SET GLOBAL log_bin_trust_function_creators = 1; DROP DATABASE IF EXISTS zabbix; CREATE DATABASE zabbix character set utf8mb4 collate utf8mb4_bin; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%'; FLUSH PRIVILEGES;"
 mysql -e "SET GLOBAL log_bin_trust_function_creators = 1; DROP DATABASE IF EXISTS zabbix; CREATE DATABASE zabbix character set utf8mb4 collate utf8mb4_bin; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%'; FLUSH PRIVILEGES;"

+ 1 - 1
requirements.txt

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:requirements.txt:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 pandas
 pandas
 pymysql
 pymysql
 myloginpath
 myloginpath

+ 1 - 1
reset.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:reset.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 cd /home/francois/food_project
 cd /home/francois/food_project
 docker-compose stop mysql
 docker-compose stop mysql
 docker run -d --name mysql_temp_reset -v food_project_mysql_data:/var/lib/mysql mysql:8.0 --skip-grant-tables
 docker run -d --name mysql_temp_reset -v food_project_mysql_data:/var/lib/mysql mysql:8.0 --skip-grant-tables

+ 1 - 1
rotate_passwords.py

@@ -1 +1 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:rotate_passwords.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"

+ 1 - 1
scratch/test_dr.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:test_dr.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # test_dr.sh - Automated Disaster Recovery validation script
 # test_dr.sh - Automated Disaster Recovery validation script
 
 
 # 1. Find the latest backup
 # 1. Find the latest backup

+ 1 - 1
scratch/test_filter.py

@@ -1,6 +1,6 @@
 import subprocess
 import subprocess
 
 
-test_input = '#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"\n'
+test_input = '#ident "@(#)$Format:LocalFoodAI_lanfr144:test_filter.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"\n'
 
 
 # Test smudge
 # Test smudge
 p = subprocess.Popen(
 p = subprocess.Popen(

+ 3 - 3
scratch/test_new_regex.py

@@ -4,12 +4,12 @@ import re
 clean_pattern = r'\$Format' + r':([^%:\r\n]+):([^%:\r\n]+):[^\r\n$]*?\$'
 clean_pattern = r'\$Format' + r':([^%:\r\n]+):([^%:\r\n]+):[^\r\n$]*?\$'
 
 
 def clean_content(content):
 def clean_content(content):
-    return re.sub(clean_pattern, r'$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$', content)
+    return re.sub(clean_pattern, r'$Format:LocalFoodAI_lanfr144:test_new_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$', content)
 
 
 # Test cases
 # Test cases
 test_app_py_lines = """
 test_app_py_lines = """
-#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 "@(#)LocalFoodAI:app.py:$Format:LocalFoodAI_lanfr144:test_new_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:test_new_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 """
 """
 
 
 print("1. Testing clean on smudged headers:")
 print("1. Testing clean on smudged headers:")

+ 5 - 5
scratch/test_regex.py

@@ -1,8 +1,8 @@
 import re
 import re
 
 
-pattern = r'\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$)?[^$]*?\$'
-repl = r'$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
-content = '#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"\n'
+pattern = r'\$Format:LocalFoodAI_lanfr144:test_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$)?[^$]*?\$'
+repl = r'$Format:LocalFoodAI_lanfr144:test_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
+content = '#ident "@(#)$Format:LocalFoodAI_lanfr144:test_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"\n'
 
 
 print("Testing clean pattern...")
 print("Testing clean pattern...")
 try:
 try:
@@ -11,8 +11,8 @@ try:
 except Exception as e:
 except Exception as e:
     print("Clean pattern failed:", e)
     print("Clean pattern failed:", e)
 
 
-smudge_pattern = r'\$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
-replacement = "$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+smudge_pattern = r'\$Format:LocalFoodAI_lanfr144:test_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$'
+replacement = "$Format:LocalFoodAI_lanfr144:test_regex.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 print("Testing smudge pattern...")
 print("Testing smudge pattern...")
 try:
 try:
     res = re.sub(smudge_pattern, replacement, content)
     res = re.sub(smudge_pattern, replacement, content)

+ 1 - 1
scratch/test_regex_2.py

@@ -2,7 +2,7 @@ import re
 
 
 pattern = r'\$Format' + r':[^:]+:[^:]+:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N\$'
 pattern = r'\$Format' + r':[^:]+:[^:]+:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N\$'
 repl = 'REPLACED'
 repl = 'REPLACED'
-content = 'test $Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$ test'
+content = 'test $Format:LocalFoodAI_lanfr144:test_regex_2.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$ test'
 
 
 print("Pattern:", pattern)
 print("Pattern:", pattern)
 print("Content:", content)
 print("Content:", content)

+ 1 - 1
scripts/create_delivery_zip.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:create_delivery_zip.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import zipfile
 import zipfile
 import pathspec
 import pathspec

+ 1 - 1
scripts/deploy_to_server.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:deploy_to_server.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import sys
 import sys
 import paramiko
 import paramiko

+ 1 - 1
scripts/manage_models.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:manage_models.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:manage_models.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 # Load LLM_MODEL from .env
 # Load LLM_MODEL from .env
 ENV_FILE=".env"
 ENV_FILE=".env"

+ 1 - 1
scripts/setup_deploy.py

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:setup_deploy.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import sys
 import sys
 import getpass
 import getpass

+ 2 - 2
scripts/taiga_sync_final.py

@@ -1,6 +1,6 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:taiga_sync_final.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import requests
 import requests
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:taiga_sync_final.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import urllib3
 import urllib3
 import os
 import os
 import re
 import re

+ 1 - 1
scripts/zip_project.py

@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:zip_project.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 # Alias for create_delivery_zip.py
 # Alias for create_delivery_zip.py
 import os
 import os
 import sys
 import sys

+ 1 - 1
searxng/settings.yml

@@ -1,4 +1,4 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:settings.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 use_default_settings: true
 use_default_settings: true
 
 
 search:
 search:

+ 1 - 1
setup_app.sh

@@ -1,5 +1,5 @@
 #!/bin/bash
 #!/bin/bash
-#ident "@(#)$Format:LocalFoodAI:setup_app.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$""
+#ident "@(#)$Format:LocalFoodAI_lanfr144:setup_app.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$""
 # ==============================================================================
 # ==============================================================================
 # Local Food AI - WSL Application Setup Script
 # Local Food AI - WSL Application Setup Script
 # Run inside the WSL Ubuntu environment
 # Run inside the WSL Ubuntu environment

+ 1 - 1
skills/code-review/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/code-review/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: code-review
 name: code-review

+ 1 - 1
skills/doc-writer/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/doc-writer/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: doc-writer
 name: doc-writer

+ 1 - 1
skills/expert-coach/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/expert-coach/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: expert-coach
 name: expert-coach

+ 1 - 1
skills/git-commit/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/git-commit/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: git-commit
 name: git-commit

+ 1 - 1
skills/refactor-coach/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/refactor-coach/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: refactor-coach
 name: refactor-coach

+ 1 - 1
skills/sql-optimizer/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/sql-optimizer/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: sql-optimizer
 name: sql-optimizer

+ 1 - 1
skills/test-generator/SKILL.md

@@ -1,4 +1,4 @@
-The current version is #ident "@(#)$Format:DEVOP1:skills/test-generator/SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+The current version is #ident "@(#)$Format:LocalFoodAI_lanfr144:SKILL.md:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 
 
 ---
 ---
 name: test-generator
 name: test-generator

+ 2 - 2
snmp_notifier.py

@@ -1,7 +1,7 @@
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:snmp_notifier.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import os
 import os
 import socket
 import socket
-#ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
+#ident "@(#)$Format:LocalFoodAI_lanfr144:snmp_notifier.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
 import socket
 import socket
 
 
 class SNMPNotifier:
 class SNMPNotifier:

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio