Validation Matrix¶
La Directa cross-project boundaries¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Repo activo | C:\APV\openclawai |
PASS |
| Repo frontend | C:\APV\vps-woocommerce-ladirecta |
PASS no tocado |
| Boundary documental | docs/tenants/ladirecta/ecommerce/PROJECT-BOUNDARIES.md |
PASS creado |
| Contrato de datos frontend | docs/tenants/ladirecta/ecommerce/FRONTEND-DATA-CONTRACT.md |
PASS creado |
| Protocolo de handoff | docs/tenants/ladirecta/ecommerce/CROSS-PROJECT-HANDOFF-PROTOCOL.md |
PASS creado |
| Matriz ownership | docs/tenants/ladirecta/ecommerce/DATA-OWNERSHIP-MATRIX.md |
PASS creado |
| Navegacion documental | README ecommerce, README handovers, mkdocs.yml |
PASS |
| Runtime bloqueado | SQL write, sync, scheduler, WooCommerce write API, VPS 1735349, WordPress, DNS, firewall |
PASS no ejecutados |
| Secretos | diff documental y docs nuevos sin credenciales | PASS |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
La Directa ecommerce data and observability response¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS inicial con cambios documentales previos detectados; HEAD 4212e7ca9672a1fe2f280ace8bfd469be4899cfe |
| Repo activo | C:\APV\openclawai |
PASS |
| Repo externo La Directa | lectura solo referencia de handoffs en C:\APV\vps-woocommerce-ladirecta\docs\handovers\openclaw\ |
PASS sin modificaciones ejecutadas |
| Documentacion OpenClaw auditada | PROJECT-STATE, ROADMAP, RISK-REGISTER, VALIDATION-MATRIX, OBSERVABILITY-PLAN, tenant La Directa, Business Observer, SOURCE-001/002/003, WooCommerce API, Grafana/Alertmanager |
PASS |
| Reporte principal | docs/tenants/ladirecta/ecommerce/OPENCLAW-DATA-AND-OBSERVABILITY-RESPONSE.md |
PASS creado |
| Handoff pegable | docs/tenants/ladirecta/ecommerce/HANDOFF-BACK-TO-WOOCOMMERCE-FRONT.md |
PASS creado |
| Navegacion | docs/tenants/ladirecta/README.md, docs/tenants/ladirecta/handovers/README.md, mkdocs.yml |
PASS actualizado |
| Restricciones runtime | SQL write, WooCommerce API, sync, scheduler, cron, pipeline, VPS WooCommerce, WordPress, DNS, firewall | PASS no ejecutados |
| Secretos | revision de diff y patrones sensibles | PASS esperado sin secretos nuevos |
| Limpieza diff | git diff --check |
PASS requerido al cierre |
Business Observer - staging DDL executed¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD 170d6520dfff967155d7c1879d03e7246ff9bb02, diff limpio al iniciar |
| MkDocs strict preflight | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Host remoto | ssh -o BatchMode=yes openclaw-vps hostname |
PASS srv977009 |
| Container staging real | docker ps remoto |
PASS openclaw-business-observer-postgres-staging running healthy, postgres:16.14-alpine |
| Network staging | docker inspect |
PASS openclaw-bo-staging-internal |
| Volume staging | docker inspect |
PASS openclaw_bo_postgres_staging_data |
| Host port binding staging | docker inspect .HostConfig.PortBindings |
PASS {} |
| Sandbox guardrail | docker ps openclaw-postgres-sandbox |
PASS running healthy |
| Backup baseline | test -f, sha256sum |
PASS presente, sha256 402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4 |
| Restore drill previo | documento PDF-004E y recursos temporales |
PASS publicado, cleanup completo, temporales ausentes |
| SQL candidates | revision estatica | PASS presentes, CANDIDATE / NOT EXECUTED antes de esta tarea, sin placeholders ni secretos |
| Pre-DDL catalogo | transaccion READ ONLY en postgres |
PASS DB staging/prod ausentes, roles staging 0 |
| DDL 001 | 001-create-database-and-roles.candidate.sql contra postgres |
PASS |
| DDL 002 | 002-create-schema-and-permissions.candidate.sql contra DB staging |
PASS |
| Validacion candidate | 003-validation-readonly-after-ddl.candidate.sql |
PASS transaction_read_only=on, schema exists, roles 4, login roles 0, tables 0 |
| DB staging post-DDL | pg_database |
PASS openclaw_business_observer_staging=true, owner openclaw_bo_staging_owner |
| DB prod guardrail | pg_database |
PASS openclaw_business_observer_prod=false |
| Schema post-DDL | pg_namespace |
PASS business_observer=true, owner openclaw_bo_staging_owner |
| Roles post-DDL | pg_roles |
PASS cuatro roles NOLOGIN, sin superuser, createdb ni createrole |
| Permisos minimos | DB/schema/default ACL | PASS PUBLIC sin ACL, writer SELECT/INSERT/UPDATE, reader/reporting SELECT, sin CREATE en schema |
| Tablas inesperadas | information_schema.tables |
PASS business_schema_table_count=0 |
| Confirmacion de alcance | comandos ejecutados y evidencias | PASS sin SOURCE-003, sin sync/scheduler, sin tocar La Directa, SGC, produccion ni sandbox |
| Rollback | candidate versionado | PASS existe y no fue ejecutado |
Business Observer - staging DDL candidate preflight prepared¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD d7cdadd552d2709c106b2a7831898dc43751ae89, diff limpio al iniciar |
| Container staging real | docker inspect remoto read-only |
PASS openclaw-business-observer-postgres-staging running healthy |
| Host port binding staging | docker inspect .HostConfig.PortBindings |
PASS {} |
| Backup baseline | test -f remoto sin leer dump |
PASS present |
| Restore drill | documento PDF-004E |
PASS pg_restore_exit_code=0, cleanup completo |
| Sandbox guardrail | docker inspect openclaw-postgres-sandbox |
PASS running healthy |
| Catalogo read-only | BEGIN TRANSACTION READ ONLY |
PASS transaction_read_only=on |
| DB staging objetivo | pg_database |
PASS openclaw_business_observer_staging=false |
| Schema objetivo | information_schema.schemata |
PASS business_observer=false |
| Roles staging objetivo | pg_roles |
PASS 0 matches |
| SQL candidate | revision de paquete versionado | PASS roles NOLOGIN, sin passwords, sin connection strings, sin tablas |
| DDL/DML execution | alcance PDF-004F | PASS no ejecutado |
| GO/NO-GO | decision documental | GO PDF-004G solo con autorizacion explicita; NO-GO produccion/sync/sandbox |
Business Observer - staging Postgres restore drill executed¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD 8f0313d77d8bb64715d3fc98219edff44a44173c, diff limpio al iniciar |
| MkDocs strict preflight | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Host remoto | ssh -o BatchMode=yes openclaw-vps "hostname" |
PASS srv977009 |
| Recursos VPS | uptime, df -h /, free -h |
PASS host estable, / con 68G disponible, memoria available 5.9Gi |
| Container staging real | docker inspect |
PASS openclaw-business-observer-postgres-staging running healthy |
| Host port binding staging | docker inspect .HostConfig.PortBindings |
PASS {} |
| Sandbox guardrail | docker inspect openclaw-postgres-sandbox |
PASS running healthy |
| Backup source | stat, sha256sum |
PASS 1032 bytes, sha256 402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4 |
| Legibilidad backup | pg_restore --list |
PASS total_lines=15 metadata_lines=15 toc_entries=0 |
| Colisiones temporales | container, volume, network, secret dir, work dir | PASS ninguna colision |
| Secret temporal | stat sin leer contenido |
PASS root:root 600 fuera de Git |
| Red temporal | docker network inspect |
PASS internal=true |
| Volumen temporal | docker volume inspect |
PASS presente durante drill |
| Container temporal | docker inspect |
PASS running healthy, HostConfig.PortBindings = {} |
| Guardrails post-creacion | staging principal y sandbox | PASS ambos running healthy |
| Restore real | pg_restore --exit-on-error -U postgres -d postgres en contenedor temporal |
PASS exit_code=0, stdout/stderr 0 bytes |
| Validacion temporal | psql en contenedor temporal |
PASS current_database=postgres, server_version=16.14, DB count 3, business DB/schema ausentes, roles negocio 0 |
| Catalogo staging principal | psql en transaccion READ ONLY |
PASS transaction_read_only=on, business DB/schema ausentes, roles negocio 0 |
| Consistencia bootstrap | contraste toc_entries=0 vs validacion temporal |
PASS baseline sin objetos de negocio |
| Cleanup temporal | docker stop/rm, docker volume rm, docker network rm, borrado de secret/work dir |
PASS completo |
| Recursos temporales remanentes | inspect y filesystem | PASS container, volume, network, secret dir y work dir ausentes |
| Health final staging | docker inspect |
PASS running healthy, PortBindings {} |
| Health final sandbox | docker inspect |
PASS running healthy |
| Confirmacion de no cambios | alcance de la tarea | PASS sin DDL, sin DML, sin scripts SOURCE-003, sin sync/scheduler |
| Dumps en Git | revision de archivos tocados | PASS ningun dump ni backup agregado al repo |
| Secretos trackeados | busqueda simple en diff | PASS sin secretos reales nuevos |
| Limpieza diff final | git diff --check |
PASS esperado |
| MkDocs strict final | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado |
Business Observer - staging Postgres backup baseline executed¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD ffc2b86ac75ef7ea2d5830226b3094e85b87794c, diff limpio al iniciar |
| MkDocs strict preflight | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Host remoto | ssh -o BatchMode=yes openclaw-vps "hostname" |
PASS srv977009 |
| Recursos VPS | uptime, df -h /, free -h |
PASS host estable, / con 68G disponible, memoria available 5.8Gi |
| Container staging real | docker ps, docker inspect |
PASS openclaw-business-observer-postgres-staging running healthy |
| Host port binding | docker inspect .HostConfig.PortBindings |
PASS {} |
| Volume staging | docker volume inspect openclaw_bo_postgres_staging_data |
PASS presente |
| Network staging | docker network inspect openclaw-bo-staging-internal |
PASS internal=true |
| Sandbox guardrail | docker inspect openclaw-postgres-sandbox |
PASS running healthy |
| Secret file runtime | stat del secret file |
PASS root:root 600, sin leer contenido |
| Catalogo pre-backup | psql en transaccion READ ONLY |
PASS DB/schema/roles de negocio ausentes |
| Backup fuera de Git | /opt/backups/openclaw/business-observer-staging/postgres/baseline/20260619T170037Z/ |
PASS directorio root:root 700 |
| Backup logico | docker exec -u postgres ... pg_dump -Fc -d postgres > backup_file |
PASS archivo openclaw-bo-staging-postgres-baseline-20260619T170037Z.dump creado |
| Permisos backup | stat |
PASS backup root:root 600, checksum root:root 600 |
| Tamano backup | stat -c %s |
PASS 1032 bytes |
| Checksum backup | sha256sum |
PASS 402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4 |
| Legibilidad backup | pg_restore --list |
PASS total_lines=15 metadata_lines=15 toc_entries=0 |
| Catalogo post-backup | psql en transaccion READ ONLY |
PASS transaction_read_only=on, DB/schema/roles de negocio ausentes |
| Health final staging | docker inspect |
PASS running healthy, PortBindings {} |
| Health final sandbox | docker inspect |
PASS running healthy |
| Confirmacion de no cambios | alcance de la tarea | PASS sin DDL, sin DML, sin scripts SOURCE-003, sin leer secretos |
| Dumps en Git | git status, revision de archivos tocados |
PASS ningun dump ni backup agregado al repo |
| Secretos trackeados | busqueda simple en diff | PASS sin secretos reales nuevos |
| Limpieza diff final | git diff --check |
PASS esperado |
| MkDocs strict final | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado |
Business Observer - staging Postgres real target read-only preflight¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD 04feb71ce2d1523e613bbf1ca678493648c95585, diff limpio al iniciar |
| Host remoto | ssh -o BatchMode=yes openclaw-vps "hostname" |
PASS srv977009 |
| Container staging real | docker ps --filter name=openclaw-business-observer-postgres-staging |
PASS openclaw-business-observer-postgres-staging Up ... (healthy) |
| Inspect container | docker inspect sobre state, health, networks, mounts y HostConfig.PortBindings |
PASS running, healthy, red openclaw-bo-staging-internal, volumen openclaw_bo_postgres_staging_data, PortBindings {} |
| Volume staging | docker volume inspect openclaw_bo_postgres_staging_data |
PASS volumen dedicado presente |
| Network staging | docker network inspect openclaw-bo-staging-internal |
PASS red internal=true con solo el contenedor staging |
| Secret file runtime | stat del secret file |
PASS ruta correcta, root:root, 600, sin leer contenido |
| Sandbox guardrail | docker ps --filter name=openclaw-postgres-sandbox |
PASS healthy e intocado |
Acceso psql sin secretos |
docker exec -u postgres ... psql -X -d postgres |
PASS por socket interno, sin password inline ni lectura del secret file |
| Transaccion read-only | BEGIN READ ONLY; SHOW transaction_read_only; |
PASS on |
| Fingerprint no sensible real | hostname + container + network + volume + bootstrap catalog + version | PASS srv977009|openclaw-business-observer-postgres-staging|openclaw-bo-staging-internal|openclaw_bo_postgres_staging_data|no-host-port-binding|postgres|postgres|PostgreSQL 16.14 |
| DB bootstrap visible | current_database() |
PASS postgres |
| Usuario bootstrap visible | current_user |
PASS postgres |
| DBs visibles del cluster | pg_database |
PASS postgres, template0, template1 |
DB openclaw_business_observer_staging |
pg_database |
PASS ABSENT |
DB openclaw_business_observer_prod |
pg_database |
PASS ABSENT |
Schema business_observer |
information_schema.schemata en postgres |
PASS ABSENT |
| Roles staging objetivo | pg_roles |
PASS openclaw_bo_staging_owner, writer, reader, reporting_ro ausentes |
| Conflictos de naming | conteos %business_observer% y openclaw_bo_staging% |
PASS 0 matches en DBs y roles |
| Confirmacion de no cambios | alcance de la tarea | PASS sin DDL, sin DML, sin leer secretos, sin tocar sandbox |
| Secretos trackeados | busqueda simple en diff | PASS sin secretos reales nuevos |
| Limpieza diff final | git diff --check |
PASS esperado |
| MkDocs strict final | ..\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado |
Business Observer - staging Postgres stack provisioned¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD 7b07c6e4b7d856224f8ea1bc992c7762fc5d39c2, diff limpio al iniciar |
| MkDocs strict preflight | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Preflight VPS read-only | hostname, uptime, df -h /, free -h, docker ps, docker network ls, docker volume ls, colisiones, ss -ltn |
PASS sin colisiones y con sandbox intacto |
| Secretos runtime | /opt/secrets/openclaw/business-observer-staging/postgres_bootstrap_password |
PASS creado fuera de Git con 600 root:root |
| Runtime env | /opt/stacks/business-observer-staging/.env.business-observer-staging |
PASS creado con variables no secretas y 600 root:root |
| Compose activo | /opt/stacks/business-observer-staging/docker-compose.yml |
PASS provisionado desde candidate y alineado con --env-file |
| Docker compose config | docker compose --env-file .env.business-observer-staging config --quiet |
PASS |
| Container staging | openclaw-business-observer-postgres-staging |
PASS running healthy |
| Network staging | openclaw-bo-staging-internal |
PASS creada |
| Volume staging | openclaw_bo_postgres_staging_data |
PASS creado |
| Host port binding | docker inspect .HostConfig.PortBindings, ss -ltn |
PASS {} y sin listener 5432 en host |
| Sandbox guardrail | openclaw-postgres-sandbox |
PASS sigue healthy e intocado |
| Logs sensibles | docker logs --tail 50 con patron password|secret |
PASS CLEAN_NO_SECRET_PATTERN |
| Bootstrap DB visible | psql en contenedor |
PASS postgres |
| Version PostgreSQL | current_setting('server_version') |
PASS 16.14 |
| DB business observer staging | pg_database |
PASS ABSENT |
Schema business_observer |
information_schema.schemata |
PASS ABSENT |
| Roles staging de negocio | pg_roles |
PASS ABSENT |
| Secretos trackeados | busqueda simple en diff | PASS sin secretos reales nuevos |
| Limpieza diff final | git diff --check |
PASS esperado |
| MkDocs strict final | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado |
Business Observer - staging Postgres stack preflight plan prepared¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD ba941b6562de20e8a65c830aef2c6b2fa8573b73 |
| Lectura de documentos base | PDF-003B, PDF-003C, PDF-003D, PDF-003E, PDF-003F-B, infra Docker existente |
PASS |
| Preflight VPS read-only | hostname, uptime, df -h /, free -h, docker version, docker ps, docker network ls, docker volume ls, ss -ltnp, rutas /opt/stacks/* |
PASS sin cambios runtime y sin secretos |
| Sandbox guardrail | deteccion Docker | PASS openclaw-postgres-sandbox existe y no se usara como staging real |
| Staging container propuesto | openclaw-business-observer-postgres-staging |
PASS ausente, sin colision |
| Staging volume propuesto | openclaw_bo_postgres_staging_data |
PASS ausente, sin colision |
| Staging network propuesta | openclaw-bo-staging-internal |
PASS ausente, sin colision |
| Staging path propuesto | /opt/stacks/business-observer-staging |
PASS ausente, sin colision |
| Puertos host | ss -ltnp |
PASS no se requiere publicar 5432; candidate no publica puertos |
| Compose candidate | infra/business-observer/staging/postgres/docker-compose.business-observer-staging.candidate.yml |
PASS creado, CANDIDATE / NOT EXECUTED / NO SECRETS, imagen postgres:16.14-alpine, volumen dedicado, red interna, healthcheck y secret file externo |
| Env example | infra/business-observer/staging/postgres/.env.business-observer-staging.example |
PASS creado como template NO SECRETS con placeholders |
| Runbook PDF-004A | production/PDF-004A-STAGING-POSTGRES-STACK-PREFLIGHT-PLAN.md |
PASS creado con decision, preflight, rutas, naming, secretos fuera de Git, GO/NO-GO, rollback/cleanup candidate y bloqueos |
| Confirmacion de no cambios runtime | alcance de la tarea | PASS sin contenedor, volumen, red, DB, roles, schema, tablas, SQL ni docker compose up |
| YAML candidate | PyYAML sobre compose candidate | PASS YAML_OK infra\business-observer\staging\postgres\docker-compose.business-observer-staging.candidate.yml |
| Secretos trackeados | busqueda en archivos tocados y diff | PASS sin secretos reales; solo menciones documentales, placeholders y POSTGRES_PASSWORD_FILE con secret file externo |
| Limpieza diff | git diff --check |
PASS con warnings esperados LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS; el path alternativo ..\\.venv-portal\\Scripts\\mkdocs.exe no existe en esta workstation |
Business Observer - staging fingerprint read-only evidence blocked¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --check |
PASS ## main...origin/main, HEAD 3656f5ae185520bfa5e038467d9e383102fbf940, git diff --check limpio al iniciar |
| Lectura de documentos base | PDF-003F-A, PDF-003D, PDF-003E, PDF-002, state/roadmap global y tenant, production/README, mkdocs.yml |
PASS |
| Evidencia local de target real | busqueda simple fuera de docs |
PASS hallazgo NO EVIDENCE; no aparece target staging real reutilizable |
| Evidencia local de acceso read-only seguro | pg_service.conf, variables PG*, placeholders locales |
PASS hallazgo NO EVIDENCE; no aparece acceso reutilizable sin secretos |
| Guardrail sandbox | contraste con PDF-003D, PDF-003F-A y busqueda local |
PASS openclaw-postgres-sandbox no se reutiliza como staging real |
| Documento PDF-003F-B nuevo | production/PDF-003F-B-STAGING-FINGERPRINT-READONLY-EVIDENCE.md |
PASS creado con estado BLOCKED / READ-ONLY EVIDENCE / NO DDL / NO SECRETS, fingerprint no sensible no verificable, evidencia read-only bloqueada, estado DB/schema/roles, backup/restore, observabilidad y dictamen NO-GO |
| Confirmacion de no cambios DB | contenido del documento y alcance de la tarea | PASS NO POSTGRES TOUCH, NO SQL, ZERO DATABASE CHANGES CONFIRMED |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003F-B |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i \"password|passwd|secret|token|apikey|api_key|connection string|connstring|postgres://|jdbc:|172\\.|10\\.|192\\.168\\.|Bearer \" |
PASS sin secretos nuevos; solo menciones documentales de exclusiones, placeholders y guardrails |
| Limpieza diff final | git diff --check |
PASS esperado si no aparecen errores de whitespace |
| MkDocs strict final | ..\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado tras actualizar navegacion y estados |
Business Observer - staging target non-sensitive intake recorded¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git diff --name-status |
PASS ## main...origin/main, HEAD fa437a748eb7a1694335d1505f111450575bd133, diff limitado a mkdocs.yml y PDF-003F-A antes del cierre documental |
| Lectura de documentos base | PDF-003F, PDF-003E, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003F-A nuevo | production/PDF-003F-A-STAGING-TARGET-NON-SENSITIVE-INTAKE.md |
PASS creado con objetivo, target recomendado, identidad logica no sensible, roles logicos, politica de backup, restore drill, observabilidad minima, exclusiones de secretos y proximos safe points |
| Exclusiones sensibles | secciones 11, 13, conclusion y diff documental |
PASS sin passwords, sin connection strings, sin tokens, sin LOGIN reales sensibles, sin IPs privadas sensibles y sin rutas internas sensibles |
| Guardrail de staging real | decision documental | PASS deja explicito que openclaw-postgres-sandbox no es staging real |
| Gate siguiente | secciones de interpretacion y proximos safe points | PASS PDF-003F-B queda como siguiente paso para fingerprint no sensible y evidencia read-only segura; PDF-004 sigue NO-GO |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003F-A |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|connection string|connstring|postgres://|jdbc:|172\\.|10\\.|192\\.168\\.|[A-Za-z]:\\\\Users\\\\|Bearer " |
PASS sin secretos nuevos; solo menciones documentales de exclusiones y politicas |
| Limpieza diff | git diff --check |
PASS esperado si no aparecen errores de whitespace |
| MkDocs strict | ..\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado tras actualizar navegacion y estados |
Business Observer - staging target operational handoff prepared¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD fdae53fcd446cb7ce33ae918aa8d8f213ee680ea, ultimo commit docs: prepare business observer staging backup restore runbook |
| Lectura de documentos base | PDF-002, PDF-003, PDF-003B, PDF-003C, PDF-003D, PDF-003E, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003F nuevo | production/PDF-003F-BLOCKER-STAGING-TARGET-OPERATIONAL-HANDOFF.md |
PASS creado con estado HANDOFF / NO RUNTIME CHANGE, motivo del bloqueo, informacion fuera de Git, formulario seguro, exclusiones de secretos, checklist, criterios GO/NO-GO, relacion con PDF-002 a PDF-003E y proximos safe points |
| Exclusion de datos sensibles | secciones de handoff y checklist | PASS sin host real sensible, sin LOGIN real sensible, sin passwords, sin connection strings y sin tokens |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003F |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|connection string|connstring" |
PASS sin secretos nuevos; solo menciones documentales de exclusiones y politicas |
| Limpieza diff | git diff --check |
PASS esperado si no aparecen errores de whitespace |
| MkDocs strict | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS esperado tras actualizar navegacion |
Business Observer - staging backup restore runbook candidate published¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD f615b777576b9f9d89254548b28d484fb556feac, ultimo commit docs: record business observer staging target decision |
| Lectura de documentos base | PRODUCTION-DATA-FOUNDATION-INTAKE-001, PDF-003B, PDF-003C, PDF-003D, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003E nuevo | production/PDF-003E-STAGING-BACKUP-RESTORE-RUNBOOK-CANDIDATE.md |
PASS creado con objetivo, alcance, exclusiones, prerequisitos, politica de backup, restore drill, placeholders seguros, checklist, observabilidad minima, GO/NO-GO y riesgos |
| Marcado de seguridad del documento | encabezado y conclusiones | PASS RUNBOOK CANDIDATE / NOT EXECUTED, STAGING-VPS ONLY, NO SECRETS, REQUIRES EXPLICIT AUTHORIZATION |
| Comandos candidatos seguros | seccion de placeholders | PASS sin host real, sin user real LOGIN, sin password y sin connection string real |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003E |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|connection string|connstring" |
PASS sin secretos nuevos; solo menciones documentales de politicas y placeholders |
| Limpieza diff | git diff --check |
PASS solo warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
Business Observer - staging target provisioning decision recorded¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 3a3bd0f674b5cf73b367fea91185f8fcac991827, ultimo commit docs: define business observer staging prerequisites |
| Lectura de documentos base | PRODUCTION-DATA-FOUNDATION-INTAKE-001, PDF-002, PDF-003, PDF-003B, PDF-003C, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003D nuevo | production/PDF-003D-STAGING-TARGET-PROVISIONING-DECISION-RECORD.md |
PASS creado con estado DECISION RECORD / NO RUNTIME CHANGE, problema actual, decision recomendada, naming, componentes fuera/dentro de Git, prerequisitos, criterios GO/NO-GO, riesgos y proximos safe points |
| Decision de target | decision documental | PASS staging real separado del sandbox, openclaw-postgres-sandbox no aceptado como staging real y prod-vps futura separada |
| Politica de Git | secretos y datos operativos sensibles | PASS publicado que endpoint real, host/puerto no publico, credenciales, passwords, connection strings y roles LOGIN reales quedan fuera de Git |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003D |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|connection string|connstring" |
PASS sin secretos nuevos; solo menciones documentales de politicas |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | ..\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
Business Observer - staging prerequisites backup restore access defined¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD c8120e31915dd1af0ec048d4e6c12684e3a875ae, ultimo commit docs: define business observer staging target |
| Lectura de documentos base | PRODUCTION-DATA-FOUNDATION-INTAKE-001, PDF-002, PDF-003, PDF-003B, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003C nuevo | production/PDF-003C-STAGING-PREREQUISITES-BACKUP-RESTORE-ACCESS.md |
PASS creado con objetivo, motivo de PDF-004 NO-GO, target requerido no provisionado, informacion fuera de Git, fingerprint, acceso, backup, restore drill, observabilidad, rollback, checklist GO/NO-GO y proximos safe points |
| Politica minima de acceso | owner/admin, writer, reader, reporting_ro |
PASS documentada con application superuser = not allowed y writer without DELETE by default |
| Backup y restore obligatorios | baseline documental | PASS documentados con evidencia minima esperada, retencion minima y criterio PASS/FAIL |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003C |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo menciones documentales de politicas |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | ..\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
Business Observer - staging target definition completed¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD a2b1aa44bda1075fb536e2b8db60a4ce41f23331, ultimo commit docs: preflight business observer staging ddl |
| Lectura de documentos base | PRODUCTION-DATA-FOUNDATION-INTAKE-001, PDF-002, PDF-003, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Documento PDF-003B nuevo | production/PDF-003B-STAGING-TARGET-DEFINITION.md |
PASS creado con problema detectado, decision recomendada, opciones evaluadas, target sugerido, prerequisitos, fingerprint, acceso, backup/restore, observabilidad, rollback, checklist GO y motivo de PDF-004 NO-GO |
| Recomendacion de target | decision documental | PASS NO USAR openclaw-postgres-sandbox COMO STAGING REAL; target recomendado staging-vps real separado del sandbox |
| Opciones evaluadas | cuatro opciones pedidas | PASS documentadas y dictaminadas |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada para PDF-003B |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo menciones documentales de politicas |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
Business Observer - staging DDL preflight read-only completed¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 7838b1061b4c9f290a501eb6924b94507d2339d2, ultimo commit docs: prepare business observer staging ddl candidate |
| Lectura de documentos base | PDF-002, SQL candidate, intake foundation, PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, production/README |
PASS |
| Acceso SSH seguro | ssh -o BatchMode=yes openclaw-vps "hostname && whoami && uptime" |
PASS srv977009, usuario root |
| Topologia PostgreSQL visible | docker ps, docker inspect, auditoria de topologia |
PASS solo openclaw-postgres-sandbox, IP interna 172.24.0.3, PortBindings {} |
Cliente psql remoto |
docker exec openclaw-postgres-sandbox psql --version |
PASS psql (PostgreSQL) 16.14 |
| Acceso de catalogo read-only | docker exec openclaw-postgres-sandbox psql -U openclaw_admin -d openclaw_sandbox |
PASS sin imprimir secretos |
| Fingerprint observable | hostname + contenedor + inspect + current_setting('server_version') |
PASS srv977009|openclaw-postgres-sandbox|172.24.0.3:5432|no-host-port-binding|openclaw_sandbox|openclaw_admin|PostgreSQL 16.14 |
| DB staging objetivo | pg_database |
PASS openclaw_business_observer_staging = false |
| DB prod futura objetivo | pg_database |
PASS openclaw_business_observer_prod = false |
Schema business_observer |
information_schema.schemata |
PASS false en el cluster visible; en staging real N/A porque la DB no existe |
| Roles staging objetivo | pg_roles |
PASS todos ausentes |
| Conflictos de naming DB | pg_database where datname ilike 'openclaw%business%observer%' |
PASS ninguno |
| Conflictos de naming roles | pg_roles where rolname ilike 'openclaw%bo%staging%' |
PASS ninguno |
Privilegios PUBLIC sobre DBs visibles |
aclexplode(datacl) |
PASS observados CONNECT/TEMPORARY en openclaw_sandbox y postgres; hallazgo no conforme para target futuro |
Privilegios PUBLIC sobre schemas visibles |
aclexplode(nspacl) |
PASS schema public con USAGE; business_observer ausente |
| Extensiones instaladas | pg_extension |
PASS solo plpgsql instalada |
| Extensiones disponibles relevantes | pg_available_extensions |
PASS pgcrypto y uuid-ossp disponibles, no instaladas |
| Backups/restore especificos de staging BO | docs production/*, state, roadmap |
PASS hallazgo AUSENTE / NO CERRADO |
| Entorno apto para llamarse staging | evidencia runtime + docs | PASS hallazgo NO; sigue candidate-only / sandbox-visible |
| Documento PDF-003 nuevo | production/PDF-003-STAGING-DDL-PREFLIGHT-READONLY.md |
PASS creado con fingerprint, estado DB/roles/schema, conflictos, riesgos, checklist y confirmacion de cero cambios |
| Navegacion MkDocs | production/README.md, mkdocs.yml |
PASS entrada nueva agregada |
Business Observer - staging DDL candidate preparado¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 45aaa51a2ff85462a485b841863f0e28c2794dff, ultimo commit docs: plan business observer production data foundation |
| Lectura de documentos base | intake PRODUCTION-DATA-FOUNDATION-INTAKE-001, cierre SOURCE-003-BUILD-MART-LOCAL-DEV-CLOSURE-001, design/sql/, PROJECT-STATE, ROADMAP, tenant state/roadmap, production/README |
PASS |
| Documento PDF-002 nuevo | production/PDF-002-STAGING-DB-ROLES-SCHEMAS-DDL-CANDIDATE.md |
PASS creado con naming, roles, schema, permisos minimos, ownership, extensiones, prerequisitos, fingerprint PDF-003, rollback conceptual y riesgos |
| SQL candidate PDF-002 nuevo | production/sql/PDF-002-staging-db-roles-schemas-candidate.sql |
PASS creado y marcado CANDIDATE / NOT EXECUTED, STAGING-VPS ONLY, NO PASSWORDS, REQUIRES EXPLICIT AUTHORIZATION |
| Naming staging recomendado | openclaw_business_observer_staging |
PASS documentado |
| Naming prod futuro separado | openclaw_business_observer_prod |
PASS documentado |
| Schema recomendado | business_observer |
PASS documentado |
| Roles staging candidatos | owner, writer, reader, reporting_ro |
PASS documentados con nombres y responsabilidades |
| Passwords en SQL | candidate PDF-002 |
PASS no se incluyen passwords |
| Privilegios peligrosos | candidate PDF-002 |
PASS sin SUPERUSER, sin CREATEDB, sin CREATEROLE, sin grants amplios a PUBLIC |
| Navegacion MkDocs | mkdocs.yml |
PASS entrada nueva agregada para PDF-002 |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo menciones documentales a NO PASSWORDS y politicas |
| Limpieza diff | git diff --check |
PASS solo warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
Business Observer - production data foundation intake opened¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 33d28a11b66ce071a2a60b3f7662e4a358ee29f4, ultimo commit docs: close source 003 mart local dev |
| Lectura de documentos base | PROJECT-STATE, ROADMAP, VALIDATION-MATRIX, tenant state/roadmap, SOURCE-003-BUILD-MART-LOCAL-DEV-CLOSURE-001, source-authority/, design/, CROSS-PROJECT-OPERATIONS.md |
PASS |
| Documento intake nuevo | production/PRODUCTION-DATA-FOUNDATION-INTAKE-001.md |
PASS creado con objetivo, alcance, ambientes, matriz de fuentes, roles, secretos, backups, restore, rollback, idempotencia, observabilidad, gates y fases |
| Cobertura de ambientes | local-dev, staging-vps, prod-vps futuro |
PASS documentada |
| Criterio para llamar produccion | intake nuevo | PASS requiere backups, restore, monitoreo e idempotencia |
| Fuentes SGC incluidas | SOURCE-001, SOURCE-002, SOURCE-003 y futuras |
PASS documentadas por fases |
| Modelo esperado en VPS | RAW/CORE/MART |
PASS documentado |
| Sync diaria | intake nuevo + roadmap/state | PASS sigue BLOCKED hasta cierre de staging |
| Navegacion MkDocs | mkdocs.yml |
PASS entrada nueva agregada |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo referencias documentales a politicas y validaciones |
| Limpieza diff | git diff --check |
PASS solo warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | ..\\venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SOURCE-003 - mart local-dev closure complete¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 36b23814021a02f3a5f3aa06aacf654ca45104c5, ultimo commit docs: add source 003 mart rollback candidate |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
| Evidencia previa requerida | docs FIRST-PERSISTENCE, POST-WRITE-REVIEW, IDEMPOTENCY-EXECUTION, ROLLBACK-CANDIDATE |
PASS publicada y consistente |
| Fingerprint DB | query read-only actual | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
fingerprint + query read-only actual | PASS no observado |
| RAW total rows | query read-only actual | PASS 1886 |
| RAW batch rows | query read-only actual | PASS 1886 |
| CORE total rows | query read-only actual | PASS 1886 |
| CORE batch rows | query read-only actual | PASS 1886 |
| MART row counts finales | query read-only actual | PASS 1/25/173/180 |
| Batch autorizado en MART | query read-only actual | PASS 1/25/173/180 |
| Filas fuera del batch autorizado | query read-only actual | PASS 0/0/0/0 |
| Duplicados por grain | query read-only actual | PASS 0/0/0/0 |
| Rollback candidate publicado | doc + SQL candidate | PASS PUBLICADO / NOT EXECUTED |
build-mart --execute |
control de tarea | PASS NO EJECUTADO |
| Escrituras DB | control de tarea | PASS ninguna escritura ejecutada |
| Produccion y sync diaria | importer read-only + docs vigentes | PASS siguen bloqueados |
SOURCE-003 - mart rollback candidate not executed local-dev¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD d9b302ce7ad71b590a53f9ee8392e117d24dcc17, ultimo commit docs: validate source 003 mart idempotency execution |
| Lectura de evidencia previa | docs FIRST-PERSISTENCE, POST-WRITE-REVIEW, IDEMPOTENCY-EXECUTION |
PASS estado vigente consolidado RAW=1886, CORE=1886, MART=1/25/173/180, batch autorizado 1827f887-9499-4579-b4f3-234d54f41f7f |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
| SQL candidate versionado | 008_source_003_build_mart_rollback_candidate.sql |
PASS marcado CANDIDATE / NOT EXECUTED, LOCAL-DEV ONLY, REQUIRES EXPLICIT AUTHORIZATION |
| Alcance del rollback candidate | revision del SQL | PASS solo batch autorizado sobre MART sku/customer/seller/daily, sin tocar RAW ni CORE |
| Orden de borrado | revision del SQL | PASS sku -> customer -> seller -> daily |
| Prechecks del candidate | revision del SQL | PASS exige MART = 1/25/173/180, filas fuera del batch 0/0/0/0 y duplicados por grain 0/0/0/0 |
| Post-checks del candidate | revision del SQL | PASS exige MART = 0/0/0/0, RAW = 1886, CORE = 1886 |
| Rollback real | control de tarea | PASS NO EJECUTADO |
build-mart --execute |
control de tarea | PASS NO EJECUTADO |
| Escrituras DB | control de tarea | PASS ninguna escritura ejecutada |
SOURCE-003 - mart real idempotency execution local-dev¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 3f491d80f9d633aaf8ed835c54e1a4fcf2d06dab, ultimo commit docs: preflight source 003 mart idempotency |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS como evidencia post-write: devuelve FAIL esperado porque la MART ya existe con 1/25/173/180 |
| Fingerprint DB | query read-only | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers + fingerprint | PASS no observado |
| RAW total rows preflight | query read-only | PASS 1886 |
| RAW batch rows preflight | query read-only | PASS 1886 |
| CORE total rows preflight | query read-only | PASS 1886 |
| CORE batch rows preflight | query read-only | PASS 1886 |
| MART row counts preflight | query read-only | PASS 1/25/173/180 |
| Duplicados por grain preflight | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
| Filas fuera del batch autorizado preflight | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
build-mart --execute con doble gate correcto |
python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886 |
PASS result=BLOCKED, db_write_attempted=false, transaction_committed=false, data_persisted=false |
| Comando ejecutado una sola vez | control de tarea | PASS sin segunda ejecucion |
| Motivo runtime exacto | payload final problems |
PASS MART daily row_count 1 != 0, seller 25 != 0, customer 173 != 0, sku 180 != 0 |
| RAW y CORE post-ejecucion | query read-only | PASS 1886/1886 |
| MART post-ejecucion | query read-only | PASS 1/25/173/180 |
| Duplicados por grain post-ejecucion | query read-only sobre MART | PASS 0/0/0/0 |
| Filas fuera del batch autorizado post-ejecucion | query read-only sobre MART | PASS 0/0/0/0 |
| Produccion y sync diaria | gates + auditoria final | PASS siguen bloqueados |
SOURCE-003 - mart idempotency preflight read-only¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 8fab80e6af932ec3d6f32df3c8f109f251ce1f2d, ultimo commit docs: review source 003 mart first persistence |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS como evidencia post-write: devuelve FAIL esperado porque la MART ya existe con 1/25/173/180 |
build-mart --execute |
validacion de repo solicitada | PASS NO EJECUTADO por prohibicion explicita; revision de codigo confirma BLOCKED sin doble gate correcto |
build-mart --execute --confirm-local-dev-write WRONG_TOKEN |
validacion de repo solicitada | PASS NO EJECUTADO por prohibicion explicita; revision de codigo confirma BLOCKED por token incorrecto |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 |
validacion de repo solicitada | PASS NO EJECUTADO por prohibicion explicita; revision de codigo confirma BLOCKED por falta de --commit-local-dev-write |
| Fingerprint DB | query read-only | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers + fingerprint | PASS no observado |
| RAW total rows | query read-only | PASS 1886 |
| RAW batch rows | query read-only | PASS 1886 |
| CORE total rows | query read-only | PASS 1886 |
| CORE batch rows | query read-only | PASS 1886 |
| MART row counts | query read-only | PASS 1/25/173/180 |
| Filas del batch autorizado en MART | query read-only sobre las cuatro MART | PASS 1/25/173/180 |
| Filas MART fuera del batch autorizado | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
| Duplicados batch/grain | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
| Estimates actuales desde CORE | build-mart read-only |
PASS 1/25/173/180 |
| Condicion de bloqueo esperada | revision de codigo + estado DB actual | PASS MART inicial no esta vacia: daily=1 seller=25 customer=173 sku=180 |
Abort antes de INSERT |
revision de codigo | PASS el check ocurre antes de los INSERT MART |
SOURCE-003 - mart post-write review read-only¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD, git log -1 --pretty=%s |
PASS ## main...origin/main, HEAD 10cbf63e165428847ad954a0bd0b7e891924750d, ultimo commit docs: record source 003 mart first persistence |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS como evidencia post-write: devuelve FAIL esperado porque la MART ya existe con 1/25/173/180 |
build-mart --execute |
validacion de repo solicitada | PASS NO EJECUTADO por prohibicion explicita de la tarea |
| Fingerprint DB | query read-only | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers + fingerprint | PASS no observado |
| RAW total rows | query read-only | PASS 1886 |
| RAW batch rows | query read-only | PASS 1886 |
| CORE total rows | query read-only | PASS 1886 |
| CORE batch rows | query read-only | PASS 1886 |
| MART row counts | query read-only | PASS 1/25/173/180 |
| Filas MART fuera del batch autorizado | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
| Duplicados batch/grain | query read-only sobre las cuatro MART | PASS 0/0/0/0 |
Grain daily |
batch/day |
PASS 1 |
Grain seller |
batch/day/seller |
PASS 25 |
Grain customer |
batch/day/customer |
PASS 173 |
Grain sku |
batch/day/sku |
PASS 180 |
| MART vs CORE units | comparacion read-only con tolerancia 0.0001 |
PASS diff 0.0000 en daily/seller/customer/sku |
| MART vs CORE net sales | comparacion read-only con tolerancia 0.0001 |
PASS diff 0.0000 en daily/seller/customer/sku |
| MART vs CORE gross sales | comparacion read-only con tolerancia 0.0001 |
PASS diff 0.0000 en daily/seller/customer/sku |
| MART vs CORE CMV | comparacion read-only con tolerancia 0.0001 |
PASS diff 0.0000 en daily/seller/customer/sku |
| MART vs CORE contribution | comparacion read-only con tolerancia 0.0001 |
PASS diff 0.0000 en daily/seller/customer/sku |
| MART daily vs CORE document count | comparacion read-only | PASS 428 = 428 |
SOURCE-003 - first real mart persistence local-dev¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 4ee4cb42ce0ab3b8c8c750ee4b324116153ef8b9 |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, read_only=true, db_write=false |
| Fingerprint DB | dry-run + post-write read-only | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers + dry-run | PASS no observado |
| RAW rows preflight | query read-only | PASS 1886 |
| CORE batch rows preflight | query read-only | PASS 1886 |
| MART row counts preflight | query read-only | PASS 0/0/0/0 |
| Estimates preflight | dry-run + aggregates read-only | PASS 1/25/173/180 |
| Missing keys seller/customer/sku | dry-run | PASS 0/0/0 |
| Constraints MART | pg_constraint read-only |
PASS 43/43; dos nombres largos aparecen truncados por PostgreSQL pero el total requerido esta presente |
| Indices MART requeridos | pg_indexes read-only |
PASS 12/12 |
| Duplicados de salida por grain preflight | aggregates candidatos read-only | PASS 0/0/0/0 |
| Filas preexistentes del batch en MART | query read-only por sync_batch_id |
PASS 0/0/0/0 |
build-mart --execute con doble gate correcto |
python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886 |
PASS result=PASS, execution_status=COMMITTED |
| Comando ejecutado una sola vez | control de tarea | PASS sin segunda persistencia |
BEFORE |
payload commit_local_dev.before |
PASS RAW=1886, CORE=1886, MART=0/0/0/0 |
INSIDE_TX |
payload commit_local_dev.inside_tx |
PASS daily=1, seller=25, customer=173, sku=180 |
AFTER_COMMIT |
payload commit_local_dev.after_commit |
PASS RAW=1886, CORE=1886, MART=1/25/173/180 |
| Salida estructurada | payload final | PASS transaction_committed=true, data_persisted=true, rollback_rehearsal=false, rollback_executed=false |
| RAW y CORE post-write | query read-only | PASS 1886/1886 |
| MART post-write | query read-only | PASS 1/25/173/180 |
| Duplicados batch/grain post-write | query read-only sobre MART | PASS 0/0/0/0 |
| Filas fuera del batch autorizado | query read-only sobre MART | PASS 0/0/0/0 |
| Produccion y sync diaria | gates + roadmap actual | PASS siguen bloqueados |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo tokens de gate documentados |
SOURCE-003 - final go/no-go mart persistence audit¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD a274bc02e62d82175a13c55915718dff8d4cbaff |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, read_only=true, db_write=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; faltan ambos gates |
build-mart --execute --confirm-local-dev-write WRONG_TOKEN |
gate principal incorrecto | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 |
token real sin commit flag | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write WRONG_TOKEN |
gate commit incorrecto | PASS BLOCKED |
| Fingerprint DB | build-mart dry-run read-only |
PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers + dry-run | PASS no observado |
| RAW rows | build-mart dry-run + query read-only |
PASS 1886 |
| CORE batch rows | build-mart dry-run + query read-only |
PASS 1886 |
| MART row counts | build-mart dry-run + query read-only |
PASS 0/0/0/0 |
| Estimates actuales | build-mart dry-run |
PASS 1/25/173/180 |
| Missing keys seller/customer/sku | build-mart dry-run |
PASS 0/0/0 |
| Filas preexistentes del batch en MART | query read-only por sync_batch_id |
PASS 0/0/0/0 |
| Duplicados de salida por grain | query read-only sobre aggregates candidatos | PASS 0/0/0/0 |
| Constraints MART requeridos | pg_constraint read-only |
PASS 43/43 |
| Indices MART requeridos | pg_indexes read-only |
PASS 12/12 |
| Rehearsal post-commit-gate publicado | documento oficial previo | PASS publicado |
| Produccion y sync diaria | gates + roadmap actual | PASS siguen bloqueados |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo tokens de gate documentados |
SOURCE-003 - post-commit-gate rollback rehearsal¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 4032fb837cd75e7602b9ce5bf9b70b459d34964e |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write_attempted=false, data_persisted=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; faltan gates |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 |
token real sin rollback ni commit | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write WRONG_TOKEN |
commit flag incorrecto | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsal --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886 |
mutual exclusion | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsal |
rehearsal autorizado | PASS result=PASS, execution_status=ROLLED_BACK |
BEFORE |
rehearsal autorizado | PASS RAW=1886, CORE=1886, MART=0/0/0/0 |
INSIDE_TX |
rehearsal autorizado | PASS inserts y conteos 1/25/173/180 |
AFTER_ROLLBACK |
rehearsal autorizado | PASS RAW=1886, CORE=1886, MART=0/0/0/0 |
| Salida estructurada | payload final | PASS db_write_attempted=true, data_persisted=false, rollback_rehearsal=true, transaction_committed=false |
| Estado DB preservado | objetivo openclaw_business_observer_dev.business_observer |
PASS RAW = 1886, CORE = 1886, MART = 0/0/0/0 |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | & .\\.venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo aparecen tokens de gate documentados |
SOURCE-003 - build-mart commit gate mode¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 72a5f2d9ac44035142f7992e1113c1304b1cbd7f |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
| Help importer | python scripts/source_003_importer.py --help |
PASS build-mart, --confirm-local-dev-write, --commit-local-dev-write, --rollback-rehearsal visibles |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write=false, data_persisted=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; faltan gates |
build-mart --execute --confirm-local-dev-write WRONG_TOKEN |
gate token principal | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 |
token real sin commit flag | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write WRONG_TOKEN |
gate commit incorrecto | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsal --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886 |
mutual exclusion | PASS BLOCKED |
| Estado DB preservado | objetivo openclaw_business_observer_dev.business_observer |
PASS RAW = 1886, CORE = 1886, MART = 0/0/0/0 |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos |
SOURCE-003 - build-mart rollback rehearsal mode¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD b26b4ca5bb4b91c09a3938dcf1c7324df14793d5 |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write_attempted=false, data_persisted=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; falta token |
build-mart --execute --confirm-local-dev-write WRONG_TOKEN |
gate token | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 |
token real sin rehearsal | PASS BLOCKED |
build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsal |
rehearsal real | PASS result=PASS, execution_status=ROLLED_BACK |
BEFORE |
rehearsal real | PASS RAW=1886, CORE=1886, MART=0/0/0/0 |
INSIDE_TX |
rehearsal real | PASS inserts y conteos 1/25/173/180 |
AFTER_ROLLBACK |
rehearsal real | PASS RAW=1886, CORE=1886, MART=0/0/0/0 |
| Salida estructurada | payload final | PASS db_write_attempted=true, data_persisted=false, rollback_rehearsal=true |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos |
SOURCE-003 - build-mart write path implementation¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD f967841c4e39a4f12ef410a4768ea1862847bcaa |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
| Help importer | python scripts/source_003_importer.py --help |
PASS build-mart y --confirm-local-dev-write visibles |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write=false, data_written=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; sin tocar DB |
build-mart --execute --confirm-local-dev-write WRONG_TOKEN |
gate duro de confirmacion extra | PASS BLOCKED; sin tocar DB |
| Gate duro implementado | token SOURCE003_MART_LOCAL_DEV_1886 |
PASS requerido para write real futuro |
| Write path preparado | scripts/source_003_importer.py |
PASS transaccion unica, fingerprint obligatorio, abort postgres-sandbox, inserts daily -> seller -> customer -> sku, rollback total |
| Estado DB preservado | objetivo openclaw_business_observer_dev.business_observer |
PASS RAW = 1886, CORE = 1886, MART = 0/0/0/0 |
| Estimates esperadas | build-mart read-only | PASS 1/25/173/180 |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos |
SOURCE-003 - build-mart write path gate design¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD e935dbf96e3440cbe0a31734030a54d1871385d2 |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write=false, data_written=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; sin tocar DB |
| Nuevo gate documental | SOURCE-003-BUILD-MART-WRITE-PATH-GATE-001.md |
PASS creado |
| SQL candidato | 007_source_003_build_mart_write_path_candidate.sql |
PASS creado como CANDIDATE / NOT EXECUTED |
| Fingerprint DB documentado | gate + preflight previo | PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
gate documentado | PASS abort obligatorio documentado |
| Revalidacion intra-transaccion | gate documentado | PASS incluye RAW = 1886, CORE = 1886, MART = 0/0/0/0, estimates 1/25/173/180 |
| Abort por MART no vacia | gate documentado | PASS por batch/grain en daily/seller/customer/sku |
| Idempotencia por batch/grain | gate documentado | PASS definida |
| Orden de inserts | gate documentado + SQL candidato | PASS daily -> seller -> customer -> sku |
| Produccion y sync diaria | gate documentado | PASS siguen BLOCKED |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos |
SOURCE-003 - build-mart execute preflight read-only¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 8275d4fcd59befc97c253bb53d7877773e927596 |
py_compile importer |
python -m py_compile scripts/source_003_importer.py |
PASS |
| Help importer | python scripts/source_003_importer.py --help |
PASS build-mart visible |
build-mart default |
python scripts/source_003_importer.py build-mart |
PASS DRY_RUN, db_write=false, data_written=false |
build-mart --execute |
python scripts/source_003_importer.py build-mart --execute |
PASS BLOCKED; sin tocar DB |
| Fingerprint DB | SELECT via importer helper |
PASS ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit |
postgres-sandbox |
markers y DB audit | PASS no observado |
| RAW final rows | SELECT count(*) FROM business_observer.raw_source_003_sales_items |
PASS 1886 |
| CORE rows | SELECT count(*) FROM business_observer.core_source_003_sales_items |
PASS 1886 |
| MART daily rows | SELECT count(*) FROM business_observer.mart_source_003_sales_daily |
PASS 0 |
| MART seller rows | SELECT count(*) FROM business_observer.mart_source_003_sales_by_seller |
PASS 0 |
| MART customer rows | SELECT count(*) FROM business_observer.mart_source_003_sales_by_customer |
PASS 0 |
| MART sku rows | SELECT count(*) FROM business_observer.mart_source_003_sales_by_sku |
PASS 0 |
| Estimates actuales | GROUP BY read-only sobre CORE batch autorizado |
PASS daily=1, seller=25, customer=173, sku=180 |
| Claves faltantes en agregados | seller_code, customer_code, sku vacios |
PASS 0/0/0 |
| Duplicados de salida por grain | chequeos read-only contra grains unicos de las cuatro MART | PASS 0 en daily/seller/customer/sku |
| Filas MART del mismo batch | SELECT count(*) por tabla y sync_batch_id |
PASS 0 en las cuatro tablas |
| Constraints e indices MART | pg_constraint, pg_indexes |
PASS PK/UK/checks esperados presentes |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos |
SAFE-POINT-049 - La Directa phase 1 observability closure¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 0bf7b843d91251979b5d1a192596800159dfd542 |
| Prometheus ready | ssh openclaw-vps "docker exec obs-prometheus wget -qO- http://127.0.0.1:9090/-/ready" |
PASS Prometheus Server is Ready. |
| Home success/status | probe_success y probe_http_status_code con job="blackbox-http" e instance="https://ladirecta.com.ar/" |
PASS 1, 200 |
| Tienda success/status | probe_success y probe_http_status_code con job="blackbox-http" e instance="https://ladirecta.com.ar/tienda/" |
PASS 1, 200 |
| Carrito success/status | probe_success y probe_http_status_code con job="blackbox-http" e instance="https://ladirecta.com.ar/carrito/" |
PASS 1, 200 |
| Mi cuenta success/status | probe_success y probe_http_status_code con job="blackbox-http" e instance="https://ladirecta.com.ar/mi-cuenta/" |
PASS 1, 200 |
.ar success/status redirect-aware |
probe_success y probe_http_status_code con job="blackbox-http-redirect-aware" e instance="https://ladirecta.ar/" |
PASS 1, 301 |
| Alertas criticas Fase 1 | ALERTS{alertname=~"EcommerceLaDirectaArRedirectBroken\|EcommerceLaDirectaStoreDown\|EcommerceLaDirectaCartDown\|EcommerceLaDirectaMyAccountDown",alertstate="firing"} |
PASS vector vacio |
| Prometheus y Alertmanager publicos | ssh openclaw-vps "ss -ltn '( sport = :9090 or sport = :9093 )'" |
PASS sin listeners host |
| Grafana health | curl.exe https://monitor.ladirecta.com.ar/api/health |
PASS database: ok, version 13.0.1+security-01, commit 9bbe672d |
| Dashboard provisionado segun evidencia | repo + provisioning + SAFE-POINT-048C |
PASS o4-ladirecta-web-availability.json presente y documentado |
| Executive Overview no promovido | candidate dashboard en 10-executive-board |
PASS sigue candidate / not deployed |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
SAFE-POINT-048C - La Directa web availability dashboard runtime¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 41d3aec17ffee27c5cbadba54987f06d64f563b5 |
| Safe point Git VPS OpenClaw | ssh openclaw-vps "cd /opt/openclawai && git status -sb && git rev-parse HEAD" |
PASS ## main...origin/main, HEAD 41d3aec17ffee27c5cbadba54987f06d64f563b5 |
| Candidate JSON | python + json.loads sobre o4-ladirecta-web-availability.candidate.json |
PASS |
| Metricas base existentes | obs-prometheus label __name__ |
PASS probe_success, probe_http_status_code, probe_duration_seconds, probe_ssl_earliest_cert_expiry, ALERTS |
| Home status runtime | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/"} |
PASS 200 |
.ar status runtime |
probe_http_status_code{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} |
PASS 301 |
| Tienda status runtime | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/tienda/"} |
PASS 200 |
| Carrito status runtime | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/carrito/"} |
PASS 200 |
| Mi cuenta status runtime | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/mi-cuenta/"} |
PASS 200 |
| Uptime 24h dashboard | query provisionada | PASS 99.86111111111111 |
| SSL days remaining dashboard | query provisionada | PASS 87.05838585648272 dias |
| Alertas activas dashboard | count(ALERTS{tenant="ladirecta",alertstate="firing"}) or on() vector(0) |
PASS 0 |
| Labels sin PII | sample probe_http_status_code |
PASS solo __name__, control_tower_domain, instance, job, service, tenant |
| Patron Grafana repo | grafana/provisioning/dashboards/dashboards.yml + grafana/dashboards/04-openclaw/ |
PASS 04 - OpenClaw provisionado por archivos |
| Mount runtime Grafana | docker inspect obs-grafana |
PASS bind mounts en /opt/stacks/observability/grafana/{provisioning,dashboards} |
| Backup runtime | /opt/stacks/observability/backups/20260618-091136-safe-point-048c |
PASS snapshot inicial del arbol grafana relevante |
| Rollback runtime | /opt/stacks/observability/backups/20260618-091339-safe-point-048c-rollback |
PASS o2-service-availability.json, dashboards.yml, ROLLBACK.txt, SHA256SUMS.txt |
| Dashboard provisionado | infra/observability/grafana/dashboards/04-openclaw/o4-ladirecta-web-availability.json |
PASS |
Duplicados de uid y title |
dashboards provisionados repo | PASS sin duplicados |
| Sync runtime dashboard | repo VPS -> stack runtime | PASS solo o4-ladirecta-web-availability.json |
| Reload Grafana | servicio obs-grafana |
PASS no requerido |
| Grafana health interno | obs-grafana /api/health |
PASS database: ok |
| Dashboard visible en Grafana | API /api/search?query=La%20Directa%20Web%20Availability |
PASS dashboard visible en folder 04 - OpenClaw |
| Executive Overview candidato | o4-ladirecta-executive-overview-phase1.candidate.json |
PASS sigue candidate / not deployed |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
SAFE-POINT-048B - La Directa web availability dashboard preflight¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD bae5e7efa8dcd0a9c912fdf66f2fbf52840e3326 |
| JSON dashboard | python + json.loads sobre o4-ladirecta-web-availability.candidate.json |
PASS |
| Prometheus ready | ssh openclaw-vps "docker exec obs-prometheus wget -qO- http://127.0.0.1:9090/-/ready" |
PASS Prometheus Server is Ready. |
| Home success/status/duration | probe_success, probe_http_status_code, probe_duration_seconds con job="blackbox-http" y instance="https://ladirecta.com.ar/" |
PASS 1, 200, 0.661119301 |
| Tienda success/status/duration | probe_success, probe_http_status_code, probe_duration_seconds con job="blackbox-http" y instance="https://ladirecta.com.ar/tienda/" |
PASS 1, 200, 0.684760184 |
| Carrito success/status/duration | probe_success, probe_http_status_code, probe_duration_seconds con job="blackbox-http" y instance="https://ladirecta.com.ar/carrito/" |
PASS 1, 200, 0.770431739 |
| Mi cuenta success/status/duration | probe_success, probe_http_status_code, probe_duration_seconds con job="blackbox-http" y instance="https://ladirecta.com.ar/mi-cuenta/" |
PASS 1, 200, 0.674534506 |
.ar success/status/duration |
probe_success, probe_http_status_code, probe_duration_seconds con job="blackbox-http-redirect-aware" y instance="https://ladirecta.ar/" |
PASS 1, 301, 0.358368648 |
.ar bajo job viejo |
probe_success y probe_http_status_code con job="blackbox-http" y instance="https://ladirecta.ar/" |
PASS existen 1 y 200; confirma que el redirect real no debe evaluarse con este job |
| Uptime 24h original | query candidata previa | FAIL devolvia 6 series y duplicaba .ar |
| Uptime 24h corregido | query candidata actual | PASS 99.86805555555556 |
| SSL days remaining original | query candidata previa | FAIL devolvia 5 series incluyendo .ar bajo blackbox-http |
| SSL days remaining corregido | query candidata actual | PASS 87.6724343865751 dias |
| Alertas activas original | count(ALERTS{tenant="ladirecta",alertstate="firing"}) |
FAIL vector vacio |
| Alertas activas corregido | count(ALERTS{tenant="ladirecta",alertstate="firing"}) or on() vector(0) |
PASS 0 |
| Labels observados | series probe_* validadas |
PASS solo instance, job, tenant, service, control_tower_domain, deployment_status, probe_design; sin PII ni alta cardinalidad |
| Dashboard candidato corregido | infra/observability/grafana/candidates/04-openclaw/o4-ladirecta-web-availability.candidate.json |
PASS .ar queda solo en blackbox-http-redirect-aware para redirect y panels compuestos usan series reales estables |
SAFE-POINT-048A - La Directa web availability dashboard candidate¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD be6ba9ce21c5f4ce6f7dca4029bf53b19eaf729f |
| Target redirect-aware runtime | infra/observability/prometheus/targets/blackbox-http-redirect-aware-targets.json |
PASS https://ladirecta.ar/ presente con probe_design=redirect-aware |
| Dashboard candidato ajustado | infra/observability/grafana/candidates/04-openclaw/o4-ladirecta-web-availability.candidate.json |
PASS .ar usa blackbox-http-redirect-aware; home, tienda, carrito y mi-cuenta usan blackbox-http |
| JSON dashboard | ConvertFrom-Json sobre o4-ladirecta-web-availability.candidate.json |
PASS |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
SAFE-POINT-047 - La Directa selective phase 1 alerts¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 4d6ff012f3ae0d29964acd6f1af86aa301968003 |
| Safe point Git VPS OpenClaw | ssh openclaw-vps "cd /opt/openclawai && git status -sb && git rev-parse HEAD" |
PASS ## main...origin/main, HEAD 4d6ff012f3ae0d29964acd6f1af86aa301968003 |
| Precondicion tienda success | probe_success{job="blackbox-http",instance="https://ladirecta.com.ar/tienda/"} |
PASS 1 antes y despues del cambio |
| Precondicion tienda status | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/tienda/"} |
PASS 200 antes y despues del cambio |
| Precondicion carrito success | probe_success{job="blackbox-http",instance="https://ladirecta.com.ar/carrito/"} |
PASS 1 antes y despues del cambio |
| Precondicion carrito status | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/carrito/"} |
PASS 200 antes y despues del cambio |
| Precondicion mi cuenta success | probe_success{job="blackbox-http",instance="https://ladirecta.com.ar/mi-cuenta/"} |
PASS 1 antes y despues del cambio |
| Precondicion mi cuenta status | probe_http_status_code{job="blackbox-http",instance="https://ladirecta.com.ar/mi-cuenta/"} |
PASS 200 antes y despues del cambio |
| Precondicion redirect broken | ALERTS{alertname="EcommerceLaDirectaArRedirectBroken",alertstate="firing"} |
PASS vacio antes y despues del cambio |
| Rule file activo | infra/observability/prometheus/rules/service-alerts.yml |
PASS solo se agregan EcommerceLaDirectaStoreDown, EcommerceLaDirectaCartDown y EcommerceLaDirectaMyAccountDown |
| Backup runtime | /opt/stacks/observability/backups/20260617-175110-safe-point-047 |
PASS prometheus.yml, rules/service-alerts.yml, SHA256SUMS.txt |
promtool check rules |
service-alerts.yml runtime |
PASS |
promtool check config |
/etc/prometheus/prometheus.yml runtime |
PASS |
| Sync runtime rules | repo VPS -> stack runtime | PASS solo service-alerts.yml |
| Reload Prometheus | POST /-/reload en obs-prometheus |
PASS |
| Prometheus ready | obs-prometheus /-/ready |
PASS Prometheus Server is Ready. |
| Reglas cargadas | /api/v1/rules |
PASS visibles EcommerceLaDirectaStoreDown, EcommerceLaDirectaCartDown, EcommerceLaDirectaMyAccountDown |
| Estado alertas nuevas | ALERTS{alertname=~"EcommerceLaDirecta(StoreDown|CartDown|MyAccountDown)"} |
PASS vacio o no firing al cierre |
| Probes criticos posteriores | probe_success y probe_http_status_code en tienda, carrito, mi-cuenta |
PASS 1/200 en los tres targets |
| Redirect broken posterior | ALERTS{alertname="EcommerceLaDirectaArRedirectBroken",alertstate="firing"} |
PASS vacio |
| Prometheus y Alertmanager publicos | ss -ltn '( sport = :9090 or sport = :9093 )' |
PASS sin listeners host |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
| Limpieza diff | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SAFE-POINT-046 - La Directa phase 1 promotion audit¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD fa3092d30e2320992c9b8b6df938afb06ba3cbcc |
| Reglas activas La Directa | infra/observability/prometheus/rules/service-alerts.yml |
PASS cobertura activa detectada para home, .ar, redirect, latencia y SSL |
| Targets runtime La Directa | infra/observability/prometheus/targets/blackbox-http-targets.json |
PASS home, .ar, tienda, carrito y mi-cuenta presentes |
| Target redirect-aware | infra/observability/prometheus/targets/blackbox-http-redirect-aware-targets.json |
PASS https://ladirecta.ar/ presente |
| Dashboard candidato web availability | infra/observability/grafana/candidates/04-openclaw/o4-ladirecta-web-availability.candidate.json |
PASS usa metricas reales; requiere ajuste redirect-aware |
| Dashboard candidato executive overview | infra/observability/grafana/candidates/10-executive-board/o4-ladirecta-executive-overview-phase1.candidate.json |
PASS usa metricas reales; duplicado funcional del dashboard activo |
| Dashboard activo La Directa | infra/observability/grafana/dashboards/10-executive-board/o97-ecommerce-ladirecta.json |
PASS confirmado como cobertura ejecutiva ya provisionada |
| Diff limpio | git diff --check |
PASS |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
SAFE-POINT-045B - La Directa redirect broken alert activa¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD ee8944709b189dd22da70b826252720a87a1efb0 |
| Safe point Git VPS OpenClaw | ssh openclaw-vps "cd /opt/openclawai && git status -sb && git rev-parse HEAD" |
PASS ## main...origin/main, HEAD ee8944709b189dd22da70b826252720a87a1efb0 |
| Precondicion redirect-aware success | probe_success{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} |
PASS 1 antes y despues del cambio |
| Precondicion redirect-aware status | probe_http_status_code{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} |
PASS 301 antes y despues del cambio |
| Rule file activo | infra/observability/prometheus/rules/service-alerts.yml |
PASS solo se agrega EcommerceLaDirectaArRedirectBroken |
| Backup runtime | /opt/stacks/observability/backups/20260617-172434-safe-point-045b |
PASS prometheus.yml, rules/service-alerts.yml, SHA256SUMS.txt |
promtool check rules |
service-alerts.yml runtime |
PASS |
promtool check config |
/etc/prometheus/prometheus.yml runtime |
PASS |
| Sync runtime rules | repo VPS -> stack runtime | PASS solo service-alerts.yml |
| Reload Prometheus | POST /-/reload en obs-prometheus |
PASS |
| Prometheus ready | obs-prometheus /-/ready |
PASS Prometheus Server is Ready. |
| Regla cargada | /api/v1/rules |
PASS EcommerceLaDirectaArRedirectBroken visible |
| Estado alerta | ALERTS{alertname="EcommerceLaDirectaArRedirectBroken"} |
PASS vacio o no firing al cierre |
| Targets previos La Directa | probe_success{job="blackbox-http",tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 1 en los 5 targets previos |
| Status previos La Directa | probe_http_status_code{job="blackbox-http",tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 200 en los 5 targets previos |
| Prometheus y Alertmanager publicos | ss -ltn '( sport = :9090 or sport = :9093 )' |
PASS sin listeners host |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas; sin secretos nuevos |
| Limpieza diff | git diff --check |
PASS sin errores de whitespace |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SAFE-POINT-045A - La Directa redirect-aware runtime probe¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 598730b73aee6a75d4ff95e8cbee4db3e7485ba4 |
| Safe point Git VPS OpenClaw | ssh openclaw-vps "cd /opt/openclawai && git status -sb && git rev-parse HEAD" |
PASS ## main...origin/main, HEAD 598730b73aee6a75d4ff95e8cbee4db3e7485ba4 |
| Mount runtime Prometheus | docker inspect obs-prometheus |
PASS bind mounts en /opt/stacks/observability/prometheus/{prometheus.yml,targets,rules} |
| Mount runtime Blackbox | docker inspect obs-blackbox-exporter |
PASS bind mount en /opt/stacks/observability/blackbox/blackbox.yml |
| Backup runtime | /opt/stacks/observability/backups/20260617-170718-safe-point-045a |
PASS prometheus.yml, blackbox.yml, blackbox-http-targets.json, SHA256SUMS.txt |
| Modulo runtime versionado | infra/observability/blackbox/blackbox.yml |
PASS modulo http_redirect_3xx_ladirecta_ar_no_follow agregado |
| Job runtime versionado | infra/observability/prometheus/prometheus.yml |
PASS job blackbox-http-redirect-aware agregado |
| Target runtime versionado | infra/observability/prometheus/targets/blackbox-http-redirect-aware-targets.json |
PASS target dedicado creado |
blackbox_exporter --config.check |
blackbox.yml temporal en VPS |
PASS |
promtool check config |
prometheus.yml temporal + targets + rules |
PASS |
| Reload Blackbox | docker restart obs-blackbox-exporter |
PASS |
| Reload Prometheus | POST /-/reload en obs-prometheus |
PASS |
| Blackbox health | obs-blackbox-exporter /-/healthy |
PASS Healthy |
| Prometheus ready | obs-prometheus /-/ready |
PASS Prometheus Server is Ready. |
| Target activo nuevo | /api/v1/targets?state=active |
PASS https://ladirecta.ar/ visible en job blackbox-http-redirect-aware con health up |
| Probe redirect-aware success | probe_success{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} |
PASS 1 |
| Probe redirect-aware status | probe_http_status_code{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} |
PASS 301 |
| Targets previos La Directa | probe_success{job="blackbox-http",tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 1 en los 5 targets |
| Status previos La Directa | probe_http_status_code{job="blackbox-http",tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 200 en los 5 targets |
Alerta .ar runtime |
ALERTS{alertname="EcommerceLaDirectaArRedirectBroken"} |
PASS resultado vacio; sigue candidate / not deployed |
Alerta .ar runtime |
infra/observability/prometheus/rules/ |
PASS sin cambios; sigue candidate / not deployed |
| Prometheus y Alertmanager publicos | ss -ltn '( sport = :9090 or sport = :9093 )' |
PASS sin listeners host |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS solo menciones documentales esperadas y la propia fila de validacion; sin secretos nuevos |
| Limpieza diff | git diff --check |
PASS solo warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SAFE-POINT-044 - La Directa redirect-aware probe design¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git inicial | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD cdfe967dbddef68e6060ac4cd3b06603e30ddf33 |
| Config runtime Blackbox | infra/observability/blackbox/blackbox.yml |
PASS solo existen http_2xx y https_insecure_2xx; no hay modulo redirect-aware activo |
| Config runtime Prometheus | infra/observability/prometheus/prometheus.yml |
PASS solo existen jobs blackbox-http y blackbox-https-insecure; no hay job redirect-aware activo |
| Version Blackbox exporter | infra/observability/docker-compose.yml |
PASS quay.io/prometheus/blackbox-exporter:v0.28.0 |
Redirect HTTPS .ar |
curl.exe -fsS -I https://ladirecta.ar/ |
PASS 301 Moved Permanently, Location: https://ladirecta.com.ar/ |
Redirect HTTP .ar |
curl.exe -fsS -I http://ladirecta.ar/ |
PASS 301 Moved Permanently, Location: https://ladirecta.com.ar/ |
Redirect HTTP .com.ar |
curl.exe -fsS -I http://ladirecta.com.ar/ |
PASS 301 Moved Permanently, Location: https://ladirecta.com.ar/ |
| Storefront HTTPS final | curl.exe -fsS -I https://ladirecta.com.ar/ |
PASS 200 OK |
| Modulo Blackbox candidato | infra/observability/blackbox/candidates/ladirecta-redirect-aware-modules.candidate.yml |
PASS creado, no desplegado |
| Target file candidato | infra/observability/prometheus/candidates/blackbox-http-redirect-aware-targets.candidate.json |
PASS creado, no desplegado |
| Job Prometheus candidato | infra/observability/prometheus/candidates/blackbox-http-redirect-aware-job.candidate.yml |
PASS creado, no desplegado |
Regla candidata .ar |
infra/observability/prometheus/candidates/ladirecta-phase1-alerts.candidate.yml |
PASS ajustada al job blackbox-http-redirect-aware |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo menciones documentales esperadas |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SAFE-POINT-043 - La Directa Fase 1 dashboards alerts candidates¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git inicial | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 5d6a854b6162793799b8ce1b0289d9b9c4bb447b |
| Patron Grafana | grafana/provisioning/dashboards/dashboards.yml + grafana/dashboards/ |
PASS candidatos ubicados fuera de carpetas provisionadas |
| Patron Prometheus | prometheus.yml + prometheus/rules/ |
PASS candidatos ubicados fuera de rules/*.yml cargadas |
| Dashboard candidato web availability | infra/observability/grafana/candidates/04-openclaw/o4-ladirecta-web-availability.candidate.json |
PASS creado |
| Dashboard candidato executive overview | infra/observability/grafana/candidates/10-executive-board/o4-ladirecta-executive-overview-phase1.candidate.json |
PASS creado |
| Alertas candidatas | infra/observability/prometheus/candidates/ladirecta-phase1-alerts.candidate.yml |
PASS creado |
| Secretos trackeados | git diff --no-ext-diff | rg -n -i "password|passwd|secret|token|apikey|api_key|smtp" |
PASS sin secretos nuevos; solo menciones documentales esperadas |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
SAFE-POINT-042 - La Directa Fase 1 runtime targets¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git local | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD df4cca4efd8867e761b19aaab63ba2ac64d1ddf2 |
| Safe point Git VPS OpenClaw | ssh openclaw-vps "cd /opt/openclawai && git status -sb && git rev-parse HEAD" |
PASS ## main...origin/main, HEAD df4cca4efd8867e761b19aaab63ba2ac64d1ddf2 |
| Mecanismo Prometheus | prometheus.yml, docker-compose.yml, docker inspect obs-prometheus |
PASS file_sd sobre /etc/prometheus/targets/blackbox-http-targets.json, mount real desde /opt/stacks/observability/prometheus/targets, --web.enable-lifecycle activo |
| Runtime target file previo | /opt/stacks/observability/prometheus/targets/blackbox-http-targets.json |
PASS detectado desfasado, con solo ladirecta.com.ar y ladirecta.ar |
| Backup runtime target file | blackbox-http-targets.json.safe-point-042.bak |
PASS |
| Sync runtime target file | repo VPS -> stack runtime | PASS |
| Reload Prometheus | POST /-/reload en obs-prometheus |
PASS |
| Prometheus ready | docker exec obs-prometheus wget -qO- http://127.0.0.1:9090/-/ready |
PASS Prometheus Server is Ready. |
| Alertmanager ready | docker exec obs-alertmanager wget -qO- http://127.0.0.1:9093/-/ready |
PASS OK |
| Targets activos internos | /api/v1/targets?state=active |
PASS tienda, carrito y mi-cuenta visibles en job="blackbox-http" |
probe_success nuevos targets |
query Prometheus interna | PASS tienda=1, carrito=1, mi-cuenta=1 |
probe_http_status_code nuevos targets |
query Prometheus interna | PASS tienda=200, carrito=200, mi-cuenta=200 |
probe_duration_seconds nuevos targets |
query Prometheus interna | PASS presente para tienda, carrito y mi-cuenta |
ladirecta.com.ar preservado |
probe_success{instance="https://ladirecta.com.ar/"} |
PASS 1 |
ladirecta.ar preservado |
probe_success{instance="https://ladirecta.ar/"} |
PASS 1; curl -I publica 301 esperado |
| Home principal publico | curl -I https://ladirecta.com.ar/ desde VPS OpenClaw |
PASS 200 OK |
| Dominio alterno publico | curl -I https://ladirecta.ar/ desde VPS OpenClaw |
PASS 301 Moved Permanently a https://ladirecta.com.ar/ |
| Tienda publica | curl -I https://ladirecta.com.ar/tienda/ desde VPS OpenClaw |
PASS 200 OK |
| Carrito publico | curl -I https://ladirecta.com.ar/carrito/ desde VPS OpenClaw |
PASS 200 OK |
| Mi cuenta publica | curl -I https://ladirecta.com.ar/mi-cuenta/ desde VPS OpenClaw |
PASS 200 OK |
| Prometheus publico | ss -ltn '( sport = :9090 or sport = :9093 )' |
PASS sin listeners host |
| Alertmanager publico | ss -ltn '( sport = :9090 or sport = :9093 )' |
PASS sin listeners host |
SAFE-POINT-041 - La Directa Fase 1 public critical pages¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git inicial | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 8f64ea76962e116685c6304b50e268172ba1daed |
| Repo activo | C:\APV\openclawai |
PASS |
| Repo relacionado solo lectura | C:\APV\vps-woocommerce-ladirecta |
PASS sin modificaciones |
| Config Blackbox actual | blackbox.yml, prometheus.yml, blackbox-http-targets.json |
PASS patron existente claro |
| Home principal | curl.exe -I https://ladirecta.com.ar/ |
PASS 200 |
| Dominio alterno | curl.exe -I https://ladirecta.ar/ |
PASS 301 a https://ladirecta.com.ar/ |
| Tienda publica | curl.exe -I https://ladirecta.com.ar/tienda/ |
PASS 200 |
| Carrito publico | curl.exe -I https://ladirecta.com.ar/carrito/ |
PASS 200 |
| Mi cuenta publica | curl.exe -I https://ladirecta.com.ar/mi-cuenta/ |
PASS 200 |
| Finalizar compra publico | curl.exe -I https://ladirecta.com.ar/finalizar-compra/ |
PASS 302 a https://ladirecta.com.ar/carrito/; queda candidato |
| Secretos trackeados | git diff --no-ext-diff \| rg -n -i "password\|passwd\|secret\|token\|apikey\|api_key\|smtp" |
PASS sin secretos nuevos; solo menciones documentales esperadas |
| MkDocs strict | .venv-portal\\Scripts\\mkdocs.exe build --strict |
PASS |
| Limpieza diff | git diff --check |
PASS con warnings LF -> CRLF de Windows, sin errores de whitespace |
SAFE-POINT - Estrategia integral observabilidad WooCommerce La Directa¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git | git status -sb, git rev-parse HEAD |
PASS al iniciar ## main...origin/main, HEAD 39f0bf82f65ba4b435f88f02a9969c26c1320560 |
| Repo activo | C:\APV\openclawai |
PASS |
| Repo relacionado solo lectura | C:\APV\vps-woocommerce-ladirecta |
PASS sin modificaciones |
| Auditoria OpenClaw | docs de OBSERVABILITY, SAFE-POINT-034/035/040, catalogos O4 |
PASS |
| Auditoria La Directa | docs de observabilidad, backup, restore y SMTP ya referenciados | PASS sin tocar repo relacionado |
| Contrato consumidor/productor | docs observability/* |
PASS |
| Regla no DB productiva | contrato y catalogos | PASS documentado |
| Separacion de fases | Fase 1 a 4 |
PASS documentado |
| Intake integral | WOOCOMMERCE-OBSERVABILITY-STRATEGY-INTAKE.md |
PASS creado |
| Roadmap tenant | docs/tenants/ladirecta/observability/ROADMAP.md |
PASS creado |
| Secretos trackeados | busqueda sobre archivos tocados | PASS sin secretos nuevos; solo referencias documentales a ubicaciones/politicas |
SAFE-POINT-039C - Diagnostico SMTP Hostinger y drill Alertmanager¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git cierre documental | git status -sb, git rev-parse HEAD |
PASS ## main...origin/main, HEAD 65427e11d12bd0940b987f18d91df6603bb7844d |
| Runtime observability | /opt/stacks/observability |
PASS |
.env runtime |
variables SMTP no secretas | PASS smtp.hostinger.com:587, operaciones@ladirecta.com.ar |
| Secreto SMTP runtime | /opt/stacks/observability/secrets/alertmanager_smtp_password |
PASS no vacio, 600 root:root, contenido no impreso |
| SMTP directo | Python smtplib desde VPS, STARTTLS |
PASS sent=1 |
docker compose config |
/opt/stacks/observability |
PASS |
| Deploy observability | docker compose up -d |
PASS |
| Prometheus health interno | obs-prometheus /-/ready |
PASS |
| Alertmanager health interno | obs-alertmanager /-/ready |
PASS OK |
| Grafana health interno | obs-grafana /api/health |
PASS database: ok, version 13.0.1+security-01 |
| Prometheus config | promtool check config |
PASS |
| Alertmanager config | amtool check-config /tmp/alertmanager.yml |
PASS |
| Prometheus publico | Docker bindings + TCP externo 46.202.151.32:9090 |
PASS sin PortBindings, CLOSED_OR_TIMEOUT |
| Alertmanager publico | Docker bindings + TCP externo 46.202.151.32:9093 |
PASS sin PortBindings, CLOSED_OR_TIMEOUT |
| Drill alerta sintetica | SafePoint039CSMTPDrill via API interna |
PASS disparo y resolucion |
| Limpieza drill | Alertmanager API | PASS active_remaining=0 |
| Metricas email | Alertmanager /metrics |
PASS alertmanager_notifications_total{integration="email"} 1, fallos email 0 |
| Recepcion email | Confirmacion humana Gmail | PASS From visible operaciones@ladirecta.com.ar, Subject visible [WARNING][La Directa] SAFE-POINT-039C drill controlado SMTP La Directa |
| Canal alertas La Directa | SMTP runtime + ladirecta-email |
PASS operativo |
SAFE-POINT-039B - Precarga segura SMTP runtime¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Acceso SSH por alias | ssh -o BatchMode=yes openclaw-vps "hostname && whoami && id && uptime" |
PASS srv977009, usuario root |
| Runtime observability | /opt/stacks/observability |
PASS |
.env runtime SMTP |
variables no secretas en VPS | PASS creado fuera de Git |
| Secreto SMTP runtime | /opt/stacks/observability/secrets/alertmanager_smtp_password |
PASS no vacio, permisos 600 root:root |
docker compose config |
/opt/stacks/observability |
PASS |
| Deploy observability | docker compose up -d |
PASS obs-alertmanager recreado |
| Config SMTP generada | obs-alertmanager:/tmp/alertmanager.yml |
PASS no vacia, modo 600, receiver ladirecta-email presente |
| Alertmanager health interno | obs-alertmanager /-/ready |
PASS OK |
| Prometheus health interno | obs-prometheus /-/ready |
PASS |
| Blackbox health interno | obs-blackbox-exporter /-/healthy |
PASS |
| Grafana health interno | obs-grafana /api/health |
PASS database: ok |
| Test real email | Alertmanager SMTP | BLOCKED 535 5.7.8 authentication failed |
| Resolucion alerta sintetica | Alertmanager API | PASS |
SAFE-POINT-038 - Entrega email alertas La Directa¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git | git status -sb, git rev-parse HEAD |
PASS 703320e9ad4296f528bdef9110177dd08845a54c |
| Alertmanager fallback | alertmanager.yml |
PASS local-null preservado |
| Receiver La Directa | entrypoint.sh |
PASS ladirecta-email preparado |
| Inyeccion env SMTP | docker-compose.yml |
PASS variables no secretas declaradas |
| Template sin secretos | .env.example |
PASS sin password/token |
| YAML local | Compose, Alertmanager, Prometheus y reglas | PASS parse local |
docker compose config local |
Estacion Windows | SKIP docker no disponible |
promtool local |
Estacion Windows | SKIP no disponible |
amtool local |
Estacion Windows | SKIP no disponible |
docker compose config OpenClaw |
/opt/stacks/observability runtime actual |
PASS |
amtool check-config generado |
Config SAFE-POINT-038 con credenciales dummy | PASS |
promtool check config OpenClaw |
obs-prometheus |
PASS |
promtool check rules OpenClaw |
obs-prometheus |
PASS |
amtool check-config OpenClaw |
obs-alertmanager fallback actual |
PASS |
| Alertmanager health interno | obs-alertmanager /-/ready |
PASS OK |
| Alertmanager publico | 46.202.151.32:9093 |
PASS timeout/no publico |
| Prometheus publico | 46.202.151.32:9090 |
PASS timeout/no publico |
| Secreto runtime | /opt/stacks/observability/secrets/alertmanager_smtp_password |
PENDING missing-or-empty |
| Test real email | Alertmanager SMTP | SKIP pendiente de secreto SMTP y confirmacion humana |
SAFE-POINT-037 - Auditoria entrega alertas La Directa¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git | git status -sb, git rev-parse HEAD |
PASS 82fdd2ba988bd75320ffe69501fa0acf7567672a |
| Alertmanager config | infra/observability/alertmanager/alertmanager.yml |
PASS receiver local-null |
| Alertmanager entrypoint | infra/observability/alertmanager/entrypoint.sh |
PASS SMTP opcional solo con secreto runtime |
| Rutas La Directa | critical, warning, default |
PASS enrutan a local-null versionado |
| Reglas La Directa | service-alerts.yml |
PASS 5 alertas detectadas |
| JSON targets Blackbox | blackbox-http-targets.json |
PASS |
| JSON dashboard La Directa | o97-ecommerce-ladirecta.json |
PASS |
| YAML local | Alertmanager, Prometheus, reglas, Compose | PASS |
amtool local |
PATH local | SKIP no disponible |
promtool local |
PATH local | SKIP no disponible |
docker local |
PATH local | SKIP no disponible |
| Alertmanager API local | obs-alertmanager |
SKIP no accesible desde esta estacion sin Docker |
| Prometheus publico | http://46.202.151.32:9090/-/ready |
PASS no accesible por timeout |
| Alertmanager publico | http://46.202.151.32:9093/-/ready |
PASS no accesible por timeout |
| Secretos trackeados | patrones token/webhook/password | PASS sin hallazgos obvios |
| Limpieza diff | git diff --check |
PASS |
SAFE-POINT-036 - Monitor domains for Grafana access¶
| Validacion | Alcance | Resultado |
|---|---|---|
| Safe point Git | git status -sb, git rev-parse HEAD |
PASS |
| DNS Grafana historico | grafana.alpuntodeventa.com.ar |
PASS 46.202.151.32 |
DNS monitor .com.ar |
monitor.ladirecta.com.ar |
PASS 46.202.151.32 |
DNS monitor .ar |
monitor.ladirecta.ar |
PASS 46.202.151.32 |
| Grafana historico login | https://grafana.alpuntodeventa.com.ar/login |
PASS 200 OK revalidado 2026-06-16 |
| Grafana historico health | /api/health |
PASS database: ok, version 13.0.1+security-01, commit 9bbe672d |
| NPM upstream interno | http://grafana:3000/login desde NPM |
PASS 200 OK |
| NPM config | docker exec nginx-proxy-manager nginx -t |
PASS |
Monitor .com.ar login |
https://monitor.ladirecta.com.ar/login |
PASS 200 OK revalidado 2026-06-16 |
Monitor .com.ar health |
https://monitor.ladirecta.com.ar/api/health |
PASS database: ok, commit 9bbe672d |
Monitor .ar login |
https://monitor.ladirecta.ar/login |
PASS 200 OK revalidado 2026-06-16 |
Monitor .ar health |
https://monitor.ladirecta.ar/api/health |
PASS database: ok, commit 9bbe672d |
| Prometheus publico | http://46.202.151.32:9090/-/ready |
PASS no accesible por timeout revalidado 2026-06-16 |
| Alertmanager publico | http://46.202.151.32:9093/-/ready |
PASS no accesible por timeout revalidado 2026-06-16 |
SAFE-POINT-034 - La Directa Blackbox Monitoring¶
| Validacion | Alcance | Resultado |
|---|---|---|
| JSON targets Blackbox | infra/observability/prometheus/targets/blackbox-http-targets.json |
PASS |
| JSON dashboard Grafana | infra/observability/grafana/dashboards/04-openclaw/o2-service-availability.json |
PASS |
| YAML reglas Prometheus | infra/observability/prometheus/rules/service-alerts.yml |
PASS |
promtool check config |
/etc/prometheus/prometheus.yml en obs-prometheus |
PASS |
promtool check rules |
/etc/prometheus/rules/*.yml en obs-prometheus |
PASS |
| Confirmacion de targets | rg "ladirecta.com.ar|ladirecta.ar|EcommerceLaDirecta" |
PASS |
| Limpieza diff | git diff --check |
PASS con warnings LF/CRLF de Windows |
| Deploy O4 | /opt/stacks/observability |
PASS |
| Probe La Directa .com.ar | probe_success{instance="https://ladirecta.com.ar/"} |
PASS 1 |
| Probe La Directa .ar | probe_success{instance="https://ladirecta.ar/"} |
PASS 1 |
| Servicios O4 | Prometheus, Grafana, Blackbox, Alertmanager | PASS |
SAFE-POINT-035 - Dashboard y alertas visibles La Directa¶
| Validacion | Alcance | Resultado |
|---|---|---|
| JSON dashboard Grafana | infra/observability/grafana/dashboards/10-executive-board/o97-ecommerce-ladirecta.json |
PASS |
| YAML reglas Prometheus | infra/observability/prometheus/rules/service-alerts.yml |
PASS |
| Confirmacion de targets | rg "ladirecta.com.ar|ladirecta.ar|EcommerceLaDirecta" infra docs |
PASS |
| Limpieza diff | git diff --check |
PASS con warnings LF/CRLF de Windows |
promtool check config |
/etc/prometheus/prometheus.yml en obs-prometheus |
PASS |
promtool check rules |
/etc/prometheus/rules/*.yml en obs-prometheus |
PASS |
| Deploy O4 | /opt/stacks/observability |
PASS |
| Prometheus ready | http://127.0.0.1:9090/-/ready en obs-prometheus |
PASS |
| Grafana health | /api/health interno |
PASS database: ok |
| Blackbox health | /-/healthy interno |
PASS |
| Alertmanager ready | /-/ready interno |
PASS |
| Query La Directa | probe_success{tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 1 para ambos endpoints |
| Uptime 24h La Directa | 100 * avg_over_time(probe_success{tenant="ladirecta",service="ecommerce-ladirecta"}[24h]) |
PASS 100 para ambos endpoints |
| Latencia La Directa | probe_duration_seconds{tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS aprox. 1.04s y 0.69s |
| SSL days remaining | (probe_ssl_earliest_cert_expiry{tenant="ladirecta",service="ecommerce-ladirecta"} - time()) / 86400 |
PASS aprox. 89.77 dias |
| HTTP status code | probe_http_status_code{tenant="ladirecta",service="ecommerce-ladirecta"} |
PASS 200 para ambos endpoints |
| Alertas firing La Directa | ALERTS{tenant="ladirecta",alertstate="firing"} |
PASS sin alertas activas |