movingparticle@caja-negra RODRIGO POLO EC, GYE ~/reto-2/DESIGN_DOC --:--:-- EN

movingparticle@caja-negra:~$ cat ./ARCHITECTURE.txt

FRONTIER Bogotá 2026 · Reto 2 · hito 12:00.
Un servicio lleva 10 años en producción y nadie sabe cómo funciona. Vamos a descubrir su comportamiento observándolo y construir una réplica que responda exactamente igual — errores incluidos — sin llamarlo nunca en ejecución.

01 // qué

Reemplazar un sistema sin código ni documentación por una réplica determinista, byte a byte, frente a casos que no conocemos.

02 // cómo

Probing guiado por hipótesis para inferir la regla real, y un servidor HTTP nativo en memoria que emula comandos, estados y errores.

03 // prueba

Comparación diferencial oráculo vs. réplica, batería adversarial y paridad exacta de status y cuerpo.

fidelidad status+body active learning node esm · 0 deps reset atómico sin overfitting
system design · arquitectura

Arquitectura

Producción en Cloudflare Workers con un Durable Object (estado único global). El mismo motor (src/engine.mjs) corre en un servidor Node local. Integridad con ISO 7064 Mod 97-10.

Entrypoint público: https://caja-negra-reemplazo.parsec-ai-labs.workers.dev

EVALUADOR                         persona · 100 tests ocultos
    |
    |  HTTPS + Bearer · JSON · 5s
    v
+------------- WORKER (Cloudflare) -------------+
|  GET /health      -> 200 {"ok":true}          |
|  POST /__reset    -> 200 {"ok":true}          |
|  POST /msg        -> auth -> engine -> X-Req  |
|  /*               -> 404 E404                 |
+----------------------+------------------------+
                       |  ruta conocida + auth
                       v
DURABLE OBJECT  global-caja-negra · estado unico
    |
    v
MOTOR  checksum ISO 7064 · cuentas · operaciones

C4 · nivel 1 — contexto

flowchart TD Judge["Evaluador / Juez"]:::person subgraph SYS["Reemplazo autonomo"] EP["Worker HTTP /health /__reset /msg"]:::system end Oracle["Servicio original"]:::external Judge -->|"HTTPS + Bearer, JSON en 5s"| SYS SYS -.->|"comparacion offline"| Oracle classDef person fill:#102016,stroke:#39ff14,color:#d7f5c8; classDef system fill:#0c1610,stroke:#7ee7ff,color:#d7f5c8; classDef external fill:#141008,stroke:#ffb000,color:#ffe7b8;
síncronosolo desarrollo

C4 · nivel 2 — contenedores

flowchart TB subgraph PROD["WORKER + DURABLE OBJECT"] Router["Worker fetch
CORS ruteo auth timing-safe"] Health["GET /health"] Reset["POST /__reset"] DO[("Durable Object
global-caja-negra")] Engine["BankingEngine
engine.mjs"] Check["checksum.mjs
ISO 7064 Mod 97-10"] Sec["security.mjs
8 KiB saneo token"] Router --> Health Router --> Reset Router -->|"POST /msg"| DO Sec -.-> Router DO --> Engine Engine --> Check end subgraph LOCAL["Servidor local Node (tests)"] SNode["server.mjs node:http"] SNode --> Engine end subgraph DISC["HARNESS offline"] Fuzzer["Prober"] Oracle2["Oraculo"] Comparator["Comparador"] SpecLog["experimentos.jsonl + SPEC.md"] Fuzzer --> Oracle2 Oracle2 --> Comparator Engine -.-> Comparator Comparator --> SpecLog end Judge2["Evaluador"]:::person Judge2 -->|"Bearer"| Router classDef person fill:#102016,stroke:#39ff14,color:#d7f5c8;

Worker

Entrypoint de producción: CORS, ruteo, auth timing-safe y límite de cuerpo 8 KiB (E101). Rutas desconocidas → 404 E404.

Durable Object

Instancia única global-caja-negra: garantiza un solo estado entre requests, aislado por POST /__reset.

Motor + checksum

Máquina de estados determinista. Control con ISO 7064 Mod 97-10; precedencia de errores y reversión de ANULA.

Runtime de un test

POST /__reset → estado 0 → POST /msg (1 a 12 requests) → validación → transición → cuerpo exacto. Más de 5 s es fallo.

Despliegue

Worker + Durable Object en el edge de Cloudflare. Un único estado lógico; verificado en vivo (20/20 ejemplos).

teclas 1234 5678 saltan sección