# OPTIMUS RESEARCH CENTER — INFORME DE CERTIFICACIÓN ORC-35
## COMPATIBILIDAD FUNCIONAL FINAL CON ESQUEMA HISTÓRICO DE 19 TABLAS (v1.1.0)

- **Fecha UTC:** `2026-10-28T02:04:00Z`
- **Directorio de Evidencias ORC-35:** `C:\Users\intel\AppData\Local\OptimusAudits\ORC35_20261027`
- **Candidato Evaluado (`v1.1.0`):** `C:\Users\intel\AppData\Local\OptimusAudits\ORC31_20261027\candidate_v1_1`
- **Base SQLite de Ensayo con Esquema Histórico (19 Tablas):** `C:\Users\intel\AppData\Local\OptimusAudits\ORC35_20261027\historical_schema_trial.db`
- **Instalación Principal Protegida (Inalterada):** `C:\xampp\htdocs\centro de investigacion`

---

## 1. Creación de Base SQLite de Ensayo con el Esquema Histórico (Instrucciones 1 y 2)

Se construyó desde cero la base externa [`historical_schema_trial.db`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/historical_schema_trial.db) ejecutando exclusivamente las sentencias estructurales DDL (`CREATE TABLE` y `CREATE INDEX`) de los **51 objetos** originales (`19` tablas y `32` índices), sin copiar un solo registro de usuarios, conversaciones, organizaciones, sesiones, proyectos ni experimentos de producción:

- **Esquema Inicial Registrado:** [`01_ESQUEMA_INICIAL.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/01_ESQUEMA_INICIAL.json)
- **SHA-256 Inicial (Esquema Vacío, 0 filas en las 19 tablas):** `9EF69B1AEACD0496A2E55F6A232E6630870A6E5EF38B5C3EB441912AB45749EA`
- **Tablas Presentes (`19 / 19`, todas con `row_count = 0` al inicio):**
  - **12 tablas compartidas con `v1.1.0`:** `ai_models`, `algorithms`, `audit_logs`, `commercial_opportunities`, `coordination_tasks`, `experiment_runs`, `experiments`, `hypotheses`, `inter_lab_collaborations`, `research_projects`, `scientific_artifacts`, `scientific_evidence`.
  - **7 tablas históricas adicionales preservadas:** `client_feedback`, `client_sessions`, `client_users`, `commercial_usage_logs`, `conversations`, `messages`, `organizations`.
- **Verificación de las 6 Columnas Históricas Adicionales (`not_null = False`, permiten `NULL`):**
  - En `coordination_tasks` (`17` columnas en total):
    - `organization_id` (`INTEGER`, nullable, posición 14)
    - `client_id` (`INTEGER`, nullable, posición 15)
    - `idempotency_key` (`VARCHAR(128)`, nullable, posición 16)
  - En `research_projects` (`12` columnas en total):
    - `organization_id` (`INTEGER`, nullable, posición 9)
    - `client_id` (`INTEGER`, nullable, posición 10)
    - `public_id` (`VARCHAR(64)`, nullable, posición 11)
- **Integridad Inicial:** `PRAGMA integrity_check = ok`, `PRAGMA foreign_key_check = []` (`0` violaciones).

---

## 2. Verificación de Rutas SQLite Efectivas Antes de Ejecutar Servicios (Instrucción 3)

Antes de ejecutar `init_db()` o cualquier servicio de `candidate_v1_1`, se verificó en tres niveles que el candidato apunta exclusivamente a la base de ensayo externa (ver [`04_EVIDENCIA_OPERACIONES_SERVICIOS.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/04_EVIDENCIA_OPERACIONES_SERVICIOS.json)):

| Nivel de Verificación | Ruta Efectiva Resuelta | Estado |
| :--- | :--- | :--- |
| **`settings.db_path`** | `C:\Users\intel\AppData\Local\OptimusAudits\ORC35_20261027\historical_schema_trial.db` | **AISLADA (`PASS`)** |
| **SQLAlchemy `engine.url.database`** | `C:\Users\intel\AppData\Local\OptimusAudits\ORC35_20261027\historical_schema_trial.db` | **AISLADA (`PASS`)** |
| **SQLite `PRAGMA database_list` (`main`)** | `C:\Users\intel\AppData\Local\OptimusAudits\ORC35_20261027\historical_schema_trial.db` | **AISLADA (`PASS`)** |
| **Base de Producción Protegida** | `C:\xampp\htdocs\centro de investigacion\storage\db\research_center.db` | **NO TOCADA (`PASS`)** |
| **Provenance de Módulos (`app.*`)** | `C:\Users\intel\AppData\Local\OptimusAudits\ORC31_20261027\candidate_v1_1` | **100% CANDIDATO (`PASS`)** |

---

## 3. Operaciones Reales Ejecutadas Mediante Servicios y Endpoints (Instrucción 4)

Todas las operaciones requeridas fueron ejecutadas a través de los servicios reales (`AlgorithmLabService`, `AILabService`, `ScientificCoordinator`, `InterLabCoordinator`, `ScientificMemory`, `ReportGenerator`) y endpoints FastAPI (`TestClient(fastapi_app)`), registrando su evidencia completa en [`04_EVIDENCIA_OPERACIONES_SERVICIOS.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/04_EVIDENCIA_OPERACIONES_SERVICIOS.json):

1. **Crear proyecto en Laboratorio de Algoritmos (`POST /api/v1/algorithms/projects`):**
   - Proyecto creado con `id = 1`, `lab_type = "ALGORITHM"`, `domain = "OPTIMIZATION"`, `status = "ACTIVE"`.
2. **Ejecutar optimización en Laboratorio de Algoritmos y guardar resultados (`AlgorithmLabService.run_optimization_experiment`):**
   - Experimento `experiment_id = 1` (`status = "COMPLETED"`) sobre superficie `rastrigin` (`dim = 5`, `seed = 42`) evaluando `genetic_algorithm`, `simulated_annealing` y `differential_evolution`.
   - Mejor candidato: `genetic_algorithm` (`best_fitness = -7.364163`), reporte `REP-EXP-1-20261028020357` (`report_sha256 = efa6b8f66e4b73a6b364505339069d0e700a64f42b5de3e0e398328bbfa4bd8d`).
3. **Crear proyecto en Laboratorio de IA (`POST /api/v1/ai/projects`):**
   - Proyecto creado con `id = 2`, `lab_type = "AI"`, `domain = "GENERAL"`, `status = "ACTIVE"`.
4. **Ejecutar entrenamiento en Laboratorio de IA y guardar resultados (`AILabService.train_and_evaluate_model`):**
   - Experimento `experiment_id = 2`, modelo `model_id = 1` (`orc35_historical_schema_mlp`, arquitectura `SimplePyTorchMLP`, `hidden_dim = 32`, `epochs = 25`).
   - Exactitud de candidato: `0.84` vs baseline `LogisticRegression_Baseline`: `0.6533` (`delta = +0.1867`, veredicto `IMPROVEMENT`, `data_leakage_prevented = True`, `artifact_sha256 = 9c6c40d8a73d11abc47918af90c351bad45e3269c4d07a3c5ba3f6406b301dfa`).
5. **Crear y procesar una tarea de coordinación (`ScientificCoordinator.submit_task` + `process_next_task`):**
   - Tarea `task_id = 1` (`task_type = "ALGORITHM_BENCHMARK"`, problema `sphere`, `dim = 4`) reclamada atómicamente y procesada de `PENDING -> RUNNING -> COMPLETED` en `0.0892 s`.
   - Generó el experimento `experiment_id = 3` (`top_candidate = "DifferentialEvolution"`, `top_fitness = -0.011958`) y evidencia científica con hash `b57c2e360f9baae41b57985bfeda8e8e784730324b3633ac4a3c251790162f7c`.
6. **Recuperar los registros experimentales (`ScientificMemory`, `ReportGenerator`, `GET /api/v1/coordinator/experiments`):**
   - Recuperados los experimentos persistidos, corridas (`experiment_runs`), modelos (`ai_models`), artefactos (`scientific_artifacts`), evidencias (`scientific_evidence`) y reportes verificados por hash SHA-256.
7. **Comprobar colaboración entre laboratorios (`InterLabCoordinator.propose_technique` + `submit_evaluation`):**
   - Propuesta `collaboration_id = 1` (`DifferentialEvolutionTuner` de `ALGORITHM_LAB` hacia `AI_LAB`, vinculada al experimento origen `origin_experiment_id = 1`).
   - Evaluada empíricamente en `AI_LAB` mediante el experimento `evaluation_experiment_id = 4` (`orc35_collab_tuned_mlp`, `hidden_dim = 64`, `epochs = 30`), alcanzando `accuracy = 0.8667` vs baseline `0.6533` (`delta = +0.2134`) con estado final `ACCEPTED`.
8. **Comprobar que las 6 columnas históricas permanecen intactas y disponibles:**
   - Las inserciones realizadas por `v1.1.0` dejan `NULL` limpio en las 6 columnas históricas sin error.
   - Adicionalmente, al poblar valores históricos en `research_projects` (`organization_id = 701, client_id = 801, public_id = 'hist-pub-proj-001'`) y en `coordination_tasks` (`organization_id = 701, client_id = 801, idempotency_key = 'hist-idem-key-001'`) y actualizar ambos registros mediante el ORM SQLAlchemy de `v1.1.0`, se comprobó que **SQLAlchemy actualiza únicamente las columnas mapeadas y preserva intactos los valores de las 6 columnas históricas** (`preserved_after_orm_update = True`).

---

## 4. Comparación Estructural Antes vs Después (Instrucciones 5 y 6)

El análisis diferencial completo se encuentra en [`02_ESQUEMA_FINAL.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/02_ESQUEMA_FINAL.json) y [`03_COMPARACION_ESTRUCTURAL.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/03_COMPARACION_ESTRUCTURAL.json):

- **Tablas antes / después:** `19` antes / `19` después (`dropped_tables = []`, `added_tables = []`).
- **Tablas reconstruidas o alteradas (`CREATE TABLE` o `rootpage`):** `0` (`rebuilt_or_altered_tables = []`, `rootpage_changes = {}`). `Base.metadata.create_all(bind=engine)` en `init_db()` opera con `checkfirst=True`, detecta que las 12 tablas de laboratorio ya existen y **no ejecuta ningún `DROP`, `ALTER` ni reconstrucción de tabla**.
- **Definiciones de columnas antes / después:** `100 %` idénticas en las 19 tablas (`column_definition_changes = {}`). Las 6 columnas históricas (`coordination_tasks.organization_id`, `coordination_tasks.client_id`, `coordination_tasks.idempotency_key`, `research_projects.organization_id`, `research_projects.client_id`, `research_projects.public_id`) y las 7 tablas históricas adicionales permanecen `100 %` intactas.
- **Índices antes / después:** `32` antes / `32` después (`dropped_indexes = []`, `added_indexes = []`).
- **Conteo de filas en `historical_schema_trial.db` (Antes -> Después):**
  - `research_projects`: `0 -> 2`
  - `experiments`: `0 -> 4`
  - `experiment_runs`: `0 -> 9`
  - `ai_models`: `0 -> 2`
  - `coordination_tasks`: `0 -> 1`
  - `inter_lab_collaborations`: `0 -> 1`
  - `scientific_artifacts`: `0 -> 2`
  - `scientific_evidence`: `0 -> 5`
  - Las 7 tablas históricas de clientes/conversaciones (`client_feedback`, `client_sessions`, `client_users`, `commercial_usage_logs`, `conversations`, `messages`, `organizations`): `0 -> 0` (intactas, sin escrituras ni lecturas).
- **Integridad Final:** `PRAGMA integrity_check = ok`, `PRAGMA foreign_key_check = []`.

---

## 5. Verificación de Hashes de Producción y Candidato Antes y Después (Instrucción 7)

Registrado en [`05_HASHES_ANTES_Y_DESPUES.json`](file:///C:/Users/intel/AppData/Local/OptimusAudits/ORC35_20261027/05_HASHES_ANTES_Y_DESPUES.json):

- **Base SQLite de Producción (`C:\xampp\htdocs\centro de investigacion\storage\db\research_center.db`):**
  - **SHA-256 Antes:** `E4A5A8DAE3B9BF9C24DF50ABC243CB4969F4CF4B29CC98F1013091CF01F9CDE9`
  - **SHA-256 Después:** `E4A5A8DAE3B9BF9C24DF50ABC243CB4969F4CF4B29CC98F1013091CF01F9CDE9`
  - **Timestamp `mtime_ns` Antes y Después:** `1793024776000000000` (idéntico, archivo no abierto ni tocado).
- **Código Fuente de Producción (`64` archivos `.py` en `C:\xampp\htdocs\centro de investigacion`):** `100 %` sin cambios (`production_code_unchanged = True`).
- **Código Fuente del Candidato (`67` archivos `.py` en `candidate_v1_1`):** `100 %` sin cambios (`candidate_code_unchanged = True`).
- **Fallos detectados durante el ensayo:** `0` (`Ninguno`).

---

## 6. Procedimiento de Rollback para Promoción Controlada Futura

En el momento en que el creador autorice expresamente la promoción controlada de `v1.1.0`:
1. **Respaldo Atómico Previo:** Detener el servicio con `scripts\safe_stop.py`, generar respaldo completo del árbol de código de `C:\xampp\htdocs\centro de investigacion` y respaldo íntegro de `storage\db\research_center.db` verificando su SHA-256 (`E4A5A8DAE3B9BF9C24DF50ABC243CB4969F4CF4B29CC98F1013091CF01F9CDE9`).
2. **Promoción sin tocar la base SQLite:** Desplegar únicamente los archivos de código de `optimus_research_center_portable_v1.1.0.zip` (que por diseño excluye `.db` y `.env`), conservando intacta `storage\db\research_center.db` con sus 19 tablas y 6 columnas históricas.
3. **Rollback Inmediato si se requiere:**
   - Ejecutar `.\.venv\Scripts\python.exe scripts\safe_stop.py`.
   - Restaurar los archivos `.py` y `storage\db\research_center.db.bak` desde el directorio de respaldo previo.
   - Purgar `__pycache__` y verificar mediante `Get-FileHash` que `research_center.db` y los módulos coinciden exactamente con los hashes previos.

---

## 7. Resultado Exigido

```text
ORC35_HISTORICAL_SCHEMA_COMPATIBILITY=PASS
ORIGINAL_19_TABLES_PRESERVED=TRUE
HISTORICAL_6_COLUMNS_PRESERVED=TRUE
LABORATORIES_FUNCTIONAL_TEST=PASS
PRODUCTION_UNCHANGED=TRUE
READY_FOR_CONTROLLED_PROMOTION=TRUE
```

