Saltar a contenido

Production

Espacio documental para la etapa Business Observer Production Data Foundation.

Documento rector actual:

  • PRODUCTION-DATA-FOUNDATION-INTAKE-001.md
  • PDF-013AD-CROSS-REPO-WOOCOMMERCE-PRODUCTION-DRY-RUN-EXECUTION-CLOSED-CHECKPOINT.md
  • PDF-013AC-CROSS-REPO-WOOCOMMERCE-PRODUCTION-DRY-RUN-EXECUTION-PLAN-CHECKPOINT.md
  • PDF-013AB-CROSS-REPO-WOOCOMMERCE-PRODUCTION-DRY-RUN-AUTHORIZATION-PLAN-CHECKPOINT.md
  • PDF-013AA-CROSS-REPO-WOOCOMMERCE-PRODUCTION-AUTHENTICATED-RENDER-CHECKPOINT.md
  • PDF-013Z-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PRIVATE-PAGE-ACCESS-VALIDATION-CHECKPOINT.md
  • PDF-013Y-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PRIVATE-PAGE-CREATE-CHECKPOINT.md
  • PDF-013X-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PRIVATE-PAGE-PLAN-CHECKPOINT.md
  • PDF-013W-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PLUGIN-ACTIVATION-CHECKPOINT.md
  • PDF-013V-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PLUGIN-AVAILABILITY-CHECKPOINT.md
  • PDF-013U-CROSS-REPO-WOOCOMMERCE-PRODUCTION-PROMOTION-PLAN-CHECKPOINT.md
  • PDF-013T-CROSS-REPO-WOOCOMMERCE-RATE-LIMIT-LOGGING-HARDENING-CHECKPOINT.md
  • PDF-013S-CROSS-REPO-WOOCOMMERCE-STAGING-TO-PROD-SECURITY-REVIEW-CHECKPOINT.md
  • PDF-013R-CROSS-REPO-WOOCOMMERCE-STAGING-PROMOTION-READINESS-CHECKPOINT.md
  • PDF-013Q-CROSS-REPO-WOOCOMMERCE-STAGING-HARDENING-CHECKPOINT.md
  • PDF-013P-CROSS-REPO-WOOCOMMERCE-STAGING-DRY-RUN-CHECKPOINT.md
  • PDF-013O-CROSS-REPO-WOOCOMMERCE-STAGING-PRIVATE-PAGE-CHECKPOINT.md
  • PDF-013N-CROSS-REPO-WOOCOMMERCE-STAGING-PLUGIN-ACTIVATION-CHECKPOINT.md
  • PDF-013M-CROSS-REPO-WOOCOMMERCE-STAGING-PLUGIN-AVAILABILITY-CHECKPOINT.md
  • PDF-013L-CROSS-REPO-WOOCOMMERCE-STAGING-WORDPRESS-READINESS-CHECKPOINT.md
  • PDF-013K-CROSS-REPO-WOOCOMMERCE-SAME-VPS-STAGING-BASE-CHECKPOINT.md
  • PDF-013J-CROSS-REPO-WOOCOMMERCE-STAGING-PREP-PLAN-CHECKPOINT.md
  • PDF-013I-CROSS-REPO-WOOCOMMERCE-RESTORE-POINTS-CHECKPOINT.md
  • PDF-013H-CROSS-REPO-WOOCOMMERCE-SAME-VPS-RESTORE-READINESS-CHECKPOINT.md
  • PDF-013G-CROSS-REPO-WOOCOMMERCE-SAME-VPS-CONTROLLED-STAGING-STRATEGY.md
  • PDF-013F-CROSS-REPO-WOOCOMMERCE-LOCAL-STAGING-TOOLING-CHECKPOINT.md
  • PDF-013E-CROSS-REPO-WOOCOMMERCE-STAGING-READY-PLAN-CHECKPOINT.md
  • PDF-013D-CROSS-REPO-WOOCOMMERCE-INTAKE-CHECKPOINT.md
  • PDF-013C-FORM-PLUGIN-INTAKE-CONTRACT.md
  • PDF-013B-PROD-REQUEST-INTAKE-SYNTHETIC-WRITE.md
  • PDF-013A-MVP-REQUEST-INTAKE-PRODUCTION-PATH.md
  • PDF-012P-PROD-OUTBOX-GUARDED-SINGLE-SEND.md
  • PDF-012O-PROD-SYNTHETIC-BLOCKED-SEED.md
  • PDF-012N-PROD-POST-DDL-READINESS.md
  • PDF-012M-PROD-DDL-PROMOTION.md
  • PDF-002-STAGING-DB-ROLES-SCHEMAS-DDL-CANDIDATE.md
  • PDF-003-STAGING-DDL-PREFLIGHT-READONLY.md
  • PDF-003B-STAGING-TARGET-DEFINITION.md
  • PDF-003C-STAGING-PREREQUISITES-BACKUP-RESTORE-ACCESS.md
  • PDF-003D-STAGING-TARGET-PROVISIONING-DECISION-RECORD.md
  • PDF-003E-STAGING-BACKUP-RESTORE-RUNBOOK-CANDIDATE.md
  • PDF-003F-BLOCKER-STAGING-TARGET-OPERATIONAL-HANDOFF.md
  • PDF-003F-A-STAGING-TARGET-NON-SENSITIVE-INTAKE.md
  • PDF-003F-B-STAGING-FINGERPRINT-READONLY-EVIDENCE.md
  • PDF-004A-STAGING-POSTGRES-STACK-PREFLIGHT-PLAN.md
  • PDF-004B-STAGING-POSTGRES-STACK-PROVISIONING.md
  • PDF-004C-STAGING-POSTGRES-REAL-TARGET-READONLY-PREFLIGHT.md
  • PDF-004D-STAGING-POSTGRES-BACKUP-BASELINE-EXECUTION.md
  • PDF-004E-STAGING-POSTGRES-RESTORE-DRILL.md
  • PDF-004F-DDL-BUSINESS-OBSERVER-STAGING-CANDIDATE-PREFLIGHT.md
  • PDF-004G-DDL-BUSINESS-OBSERVER-STAGING-EXECUTION.md
  • PDF-005A-SOURCE-003-STAGING-INITIAL-LOAD-CANDIDATE-PREFLIGHT.md
  • PDF-005B-SOURCE-003-STAGING-TARGET-TABLES-DDL-CANDIDATE.md
  • PDF-005C-SOURCE-003-STAGING-TARGET-TABLES-DDL-EXECUTION.md
  • PDF-006A-SOURCE-003-STAGING-INITIAL-LOAD-CANDIDATE.md
  • PDF-006B-SOURCE-003-STAGING-SNAPSHOT-PREFLIGHT.md
  • PDF-006C-SOURCE-003-STAGING-INITIAL-LOAD-EXECUTION-PACKAGE.md
  • PDF-006D-SOURCE-003-STAGING-INITIAL-LOAD-EXECUTION.md
  • PDF-007A-SOURCE-003-PRODUCTION-CONTROLLED-PREPARATION.md
  • PDF-007B2-SOURCE-003-PRODUCTION-DEDICATED-POSTGRES-PROVISIONING.md
  • PDF-007D-SOURCE-003-PRODUCTION-INITIAL-LOAD-EXECUTION.md
  • PDF-008A-SOURCE-002-PRODUCTS-WOOCOMMERCE-READY-CANDIDATE.md
  • PDF-008B-SOURCE-002-PRODUCTS-FULL-USE-CASE-PREFLIGHT.md
  • PDF-008C-SOURCE-002-PRODUCTS-RUNTIME-PREFLIGHT-SNAPSHOT.md
  • PDF-008D-SOURCE-002-PRODUCTS-DDL-LOAD-CANDIDATE.md
  • PDF-008E-SOURCE-002-PRODUCTS-PRODUCTION-DDL-EXECUTION.md
  • PDF-008G-SOURCE-002-PRODUCTS-PRODUCTION-INITIAL-LOAD-EXECUTION.md
  • PDF-008H-SOURCE-002-PRODUCTS-OFFICIAL-LOAD-SCRIPTS-FORMALIZATION.md
  • PDF-008I-B-SOURCE-002-OFFICIAL-LOAD-SCRIPTS-HOTFIX.md
  • PDF-008I-D-SOURCE-002-OFFICIAL-RAW-COPY-BACKUP-PARAM-HOTFIX.md
  • PDF-008I-F-SOURCE-002-DERIVED-SNAPSHOT-DATE-HOTFIX.md
  • PDF-008I-G-SOURCE-002-PRODUCTS-CONTROLLED-RELOAD-REHEARSAL.md
  • PDF-009A-WOOCOMMERCE-PRODUCTS-MAPPING-API-CANDIDATE.md
  • PDF-009B-1-WOOCOMMERCE-PRODUCT-API-EXTENSION-DESIGN.md
  • PDF-009B-WOOCOMMERCE-READ-ONLY-PREFLIGHT.md
  • PDF-009C-SOURCE-002-WOOCOMMERCE-COMPARISON-DRY-RUN.md
  • PDF-009D-WOOCOMMERCE-PRODUCT-LIFECYCLE-STOCK-SYNC-POLICY.md
  • PDF-009E-WOOCOMMERCE-PRODUCT-RULES-PRE-WRITE-CANDIDATE.md
  • PDF-009F-WOOCOMMERCE-FINAL-PAYLOAD-DRY-RUN.md
  • PDF-009G-WOOCOMMERCE-CATEGORIES-IMAGES-ATTRIBUTES-MAPPING-CANDIDATE.md
  • PDF-009H-FRONTEND-FACETS-PRODUCT-DISPLAY-CONTRACT.md
  • PDF-009I-WOOCOMMERCE-MARCA-MEDIA-LIBRARY-DISCOVERY.md
  • PDF-009J-WOOCOMMERCE-MARCA-GLOBAL-ATTRIBUTE-CONTROLLED-WRITE.md
  • PDF-009K-WOOCOMMERCE-MARCA-TERMS-CONTROLLED-WRITE.md
  • PDF-009L-WOOCOMMERCE-CATEGORIES-CONTROLLED-WRITE.md
  • PDF-009M-WOOCOMMERCE-PRODUCT-DRAFT-PILOT-WRITE.md
  • PDF-010A-B2B-PRICE-LISTS-CUSTOMER-SYNC-CONTRACT.md
  • PDF-010B-B2B-PRICE-LIST-AUTHORITY-READ-ONLY-VALIDATION.md
  • PDF-010C-SOURCE-001-PRICE-LIST-CATALOG-READ-ONLY-VALIDATION.md
  • PDF-010D-SOURCE-001-VCLIENTES-READ-ONLY-SNAPSHOT.md
  • PDF-010E-B2B-CUSTOMER-PRICE-DRY-RUN.md
  • PDF-010F-B2B-COMMERCIAL-PRICE-RULES-SERVER-SIDE-PRICING-DESIGN.md
  • PDF-010G-B2B-COMMERCIAL-PRICE-RULES-APPROVAL.md
  • PDF-010H-B2B-RUNTIME-DRY-RUN-DESIGN.md
  • PDF-010I-B2B-PRICING-ENGINE-LOCAL-PROTOTYPE.md
  • PDF-010J-B2B-CUSTOMER-MAPPING-CART-CHECKOUT-DRY-RUN.md
  • PDF-010K-B2B-PERSISTENCE-CONTRACT-DDL-CANDIDATE.md
  • PDF-010L-B2B-DDL-EXECUTION-PREFLIGHT.md
  • PDF-010M-B2B-POSTGRESQL-REAL-READ-ONLY-PREFLIGHT.md
  • PDF-010N-B2B-CONTROLLED-DDL-EXECUTION.md
  • PDF-010O-B2B-POSTGRESQL-PERMISSIONS-DDL-RETRY-PLAN.md
  • PDF-010P-B2B-DDL-RETRY-CANDIDATE.md
  • PDF-010Q-B2B-CONTROLLED-DDL-RETRY-EXECUTION.md
  • PDF-010R-POSTGRESQL-ADMIN-OWNER-CREDENTIAL-RECOVERY.md
  • PDF-010S-POSTGRESQL-ADMIN-OWNER-ENABLEMENT-EVIDENCE.md
  • PDF-010T-B2B-CONTROLLED-DDL-EXECUTION-WITH-ADMIN-OWNER.md
  • PDF-010U-B2B-BACKUP-STRATEGY-DDL-RETRY-PLAN.md
  • PDF-010V-B2B-LOCAL-DEV-DDL-EXECUTION.md
  • PDF-010W-B2B-SCHEMA-ONLY-BACKUP-LOCAL-DEV-PLAN.md
  • PDF-010X-B2B-LOCAL-DEV-DDL-EXECUTION.md
  • PDF-010Y-B2B-BACKUP-PERMISSIONS-PLAN.md
  • PDF-010Z-B2B-BACKUP-PERMISSIONS-LOCAL-DEV.md
  • PDF-011A-B2B-OWNER-BACKUP-PERMISSIONS-LOCAL-DEV.md
  • PDF-011B-B2B-LOCAL-DEV-DDL-EXECUTION.md
  • PDF-011C-B2B-LOCAL-DEV-SEED-DATA-PLAN.md
  • PDF-011D-B2B-LOCAL-DEV-SEED-EXECUTION.md
  • PDF-011E-B2B-FUNCTIONAL-READ-ONLY-VALIDATION.md
  • PDF-011F-LADIRECTA-CUSTOMER-ACTIVATION-AND-NEW-CUSTOMER-REQUEST-MODEL.md
  • PDF-011G-CUSTOMER-ACTIVATION-DDL-CANDIDATE.md
  • PDF-011H-CUSTOMER-ACTIVATION-DDL-PREFLIGHT.md
  • PDF-011I-CUSTOMER-ACTIVATION-LOCAL-DEV-DDL-EXECUTION.md
  • PDF-011J-CUSTOMER-ACTIVATION-DRY-RUN.md
  • PDF-011K-CUSTOMER-ACTIVATION-WRITER-CONTRACT.md
  • PDF-011L-CUSTOMER-REQUEST-WRITER-LOCAL-DEV.md
  • PDF-011M-SGC-READ-ONLY-CUSTOMER-REQUEST-REVIEW.md
  • PDF-011N-LADIRECTA-BILLING-NOTIFICATION-SECRETS-DRY-RUN.md
  • PDF-011O-LADIRECTA-SMTP-SECRET-PREFLIGHT.md
  • PDF-011P-LADIRECTA-SMTP-SECRET-READY-CHECK.md
  • PDF-011Q-LADIRECTA-SMTP-CONNECTION-PREFLIGHT.md
  • PDF-011R-LADIRECTA-SMTP-SINGLE-SEND-CONTROLLED-TEST.md
  • PDF-011S-SMTP-SINGLE-SEND-FINAL-REVIEW.md
  • PDF-011T-SMTP-SINGLE-SEND-REAL-CONTROLLED-TEST.md
  • PDF-012A-MVP-BILLING-NOTIFICATION.md
  • PDF-012B-BILLING-NOTIFICATION-REAL-SINGLE-SEND.md
  • PDF-012C-MVP-NOTIFICATION-OUTBOX-LOCAL-DEV.md
  • PDF-012D-REQUEST-TO-OUTBOX-DRY-RUN-LOCAL-DEV.md
  • PDF-012E-OUTBOX-WORKER-DRY-RUN-LOCAL-DEV.md
  • PDF-012F-OUTBOX-SINGLE-SEND-REAL-LOCAL-DEV.md
  • PDF-012G-OUTBOX-WORKER-READINESS.md
  • PDF-012H-OUTBOX-WORKER-MANUAL-CONTROLLED-SEND-LOCAL-DEV.md
  • PDF-012I-OUTBOX-WORKER-IDEMPOTENCY-HARDENING.md
  • PDF-012J-WORKER-GLOBAL-GUARD-INTEGRATION.md
  • PDF-012K-WORKER-GUARDED-SINGLE-SEND-LOCAL-DEV.md
  • PDF-012L-PROMOTION-PREFLIGHT-VPS-PROD.md
  • IMPORT-RUNTIME-STANDARD-SAFE-BATCHED-IMPORTS.md

SQL candidatos de esta etapa:

  • sql/PDF-002-staging-db-roles-schemas-candidate.sql
  • infra/business-observer/staging/postgres/ddl/PDF-004F/
  • infra/business-observer/staging/postgres/load/PDF-006C/
  • infra/business-observer/production/postgres/ddl/PDF-007A/
  • infra/business-observer/production/postgres/load/PDF-007A/
  • infra/business-observer/production/postgres/products/PDF-008A/
  • infra/business-observer/production/postgres/products/PDF-008D/
  • infra/business-observer/production/postgres/products/PDF-008H/
  • infra/business-observer/production/woocommerce/products/PDF-009A/
  • infra/business-observer/production/postgres/docker-compose.business-observer-prod.candidate.yml

Estado vigente:

  • PDF-013AD registra el cierre publicado WooCommerce La Directa PDF-013U-Y PRODUCTION DRY-RUN EXECUTION / SYNTHETIC PAYLOAD / NO EXTERNAL SEND: unico POST sintetico ejecutado y cerrado, HTTP 200, resultado DRY_RUN_READY_BLOCKED / PENDING_SGC_REVIEW / READY_BLOCKED, emails_sent=false, send_blocked_by_default=true, rollback confirmado, home/tienda 200, private endpoint 404, feature flag efectiva final false. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013AC; rama WooCommerce release/intake-pdf013; HEAD WooCommerce registrado 5b4d09f40bb8c5b01896b34c3b8efb14cb42065f; commit publicado en origin 5b4d09f docs: record pdf-013u-y production dry-run execution. OpenClaw parte desde HEAD 6aa59e9a46ea0eb644703b8c37547181200430c7. Estado VERDE DOCUMENTAL / PDF-013U-Y EJECUTADO Y CERRADO / RUNTIME PRODUCTIVO VUELTO A ESTADO CERRADO. No repetir POST sin nuevo gate explicito. No se imprimieron nonce, cookies ni auth headers; no se usaron datos reales, SGC, WooCommerce API, SMTP ni emails reales. Desde OpenClaw no se toco produccion, VPS WooCommerce, Docker, runtime, staging, SQL, push ni deploy.

  • PDF-013AC registra el avance WooCommerce La Directa PDF-013U-Y PRODUCTION DRY-RUN EXECUTION / SYNTHETIC PAYLOAD / NO EXTERNAL SEND: WooCommerce dejo preparado el plan de ejecucion futura del dry-run productivo con payload sintetico, nonce efimero, feature flag temporal reversible, rollback inmediato y evidencia sanitizada. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013AB; rama WooCommerce release/intake-pdf013; HEAD WooCommerce registrado b25cea2cef8b3d23ef6454cf52b8a9c4be43db1e; commit registrado b25cea2 docs: add pdf-013u-y production dry-run execution plan. OpenClaw parte desde HEAD a9f065fefef1eefcff24bfec5fcdbebad5e6de4f. Estado VERDE DOCUMENTAL / NO-GO RUNTIME / PDF-013U-Y NO EJECUTADO. Validadores WooCommerce registrados: PDF-013U_Y_PRODUCTION_DRY_RUN_EXECUTION_PLAN_VALIDATION_PASS y PDF-013U_X_PRODUCTION_DRY_RUN_AUTHORIZATION_PLAN_VALIDATION_PASS. No se ejecuto produccion, endpoint, POST, nonce, feature flag, rollback real, WooCommerce API, SGC, SMTP, emails, SQL, Docker, staging, VPS, push ni deploy. No se usaron datos reales. Cualquier ejecucion futura requiere autorizacion separada, nueva y explicita.

  • PDF-013AB registra el avance WooCommerce La Directa PDF-013U-X Production Dry-Run Authorization Plan / No Post: WooCommerce dejo planificada la autorizacion futura del primer dry-run productivo controlado. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013AA; rama WooCommerce release/intake-pdf013; HEAD WooCommerce validado add289e91acf0768bdb410ab48e8e9b7cbe829cc; commit nuevo add289e docs: add pdf-013u-x production dry-run authorization plan. Estado final recomendado WooCommerce VERDE documental. OpenClaw parte desde HEAD c7ba47b95b0ace9f9da46ada9119ae0c14770a5a. No se ejecuto produccion, no se ejecuto endpoint, no se ejecuto POST, no se capturo nonce, no se habilito feature flag productiva, no se uso WooCommerce API, SGC, SMTP real ni emails. No se toco VPS WooCommerce; SSH WooCommerce VPS queda pendiente/no validado. Los untracked WooCommerce artifacts/ y tools/visual-factory/ quedan fuera de alcance. PDF-013U-Y no queda autorizado y requiere autorizacion separada, nueva y explicita.

  • PDF-013AA registra el resultado WooCommerce La Directa PDF-013U-W Production Private Page Authenticated Render / No Form Post: WooCommerce valido el render autenticado controlado de la pagina privada productiva para usuario autorizado. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013Z; rama WooCommerce release/intake-pdf013; HEAD remoto a561776f0d7d2766ef2b2a2124e354d81b7e8e13; commit nuevo a561776 test: validate pdf-013u-w production authenticated render. Estado final recomendado WooCommerce VERDE. Plugin produccion private-intake-form active, 0.2.0-candidate. Page ID 32, slug private-intake-candidate, status private y shortcode presente. Render OK, estructura formulario presente, 14/14 campos esperados y submit presente. Feature flag productiva efectiva false. Endpoint produccion no ejecutado, POST productivo no ejecutado, nonce no capturado/no impreso/no guardado, cookies/auth headers no impresos ni guardados y HTML completo no impreso ni guardado con nonce. Publico no autenticado sigue sin acceso: HEAD y GET a /private-intake-candidate/ devuelven 404. Sin link publico/menu; home/tienda sin link al slug. Home/tienda 200 OK. No-side-effects visibles: usuarios 1 -> 1, customers 0 -> 0 y paginas con slug 1 -> 1. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-X PRODUCTION DRY-RUN AUTHORIZATION PLAN / NO POST.

  • PDF-013Z registra el resultado WooCommerce La Directa PDF-013U-V Production Private Page Access Validation / No Form Post: WooCommerce valido que la pagina privada productiva no queda expuesta publicamente. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013Y; rama WooCommerce release/intake-pdf013; HEAD remoto 8cadbea567ebe2e03ad37272454682997e774707; commit nuevo 8cadbea test: validate pdf-013u-v production private page access. Estado final recomendado WooCommerce VERDE. Page ID 32, titulo La Directa Private Intake, slug private-intake-candidate, status private y shortcode [ladirecta_private_intake_form]. Plugin production active private-intake-form,active,0.2.0-candidate. Feature flag productiva efectiva false. Publico no autenticado no accede: HEAD y GET a /private-intake-candidate/ devuelven 404. Formulario no visible publicamente. Sin link publico, menu, navegacion ni sitemap expuesto. Endpoint produccion no ejecutado, POST productivo no ejecutado, nonce produccion no capturado y render autenticado con nonce no ejecutado. Produccion home/tienda 200 OK. No-side-effects visibles: usuarios 1 -> 1, customers 0 -> 0 y pagina slug count 1 -> 1. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-W PRODUCTION PRIVATE PAGE AUTHENTICATED RENDER / NO FORM POST.

  • PDF-013Y registra el resultado WooCommerce La Directa PDF-013U-U Production Private Page Create / Endpoint Blocked / No Form Post: WooCommerce creo la pagina privada productiva del intake. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013X; rama WooCommerce release/intake-pdf013; HEAD remoto 34fbd31737a5c7db90cc2018e0e0c1cb8c014ca8; commit nuevo 34fbd31 ops: create pdf-013u-u production private page. Estado final recomendado WooCommerce VERDE. Page ID 32, titulo La Directa Private Intake, slug private-intake-candidate, status private y shortcode [ladirecta_private_intake_form]. Plugin production active private-intake-form,active,0.2.0-candidate. Feature flag productiva efectiva false. Endpoint produccion no ejecutado, POST productivo no ejecutado y nonce produccion no capturado. Sin link publico agregado; /private-intake-candidate/ publico no autenticado devolvio 404. Produccion home/tienda 200 OK. Reversa pre-page-create: /var/backups/ladirecta/pdf-013u-u-20260629-014903. No-side-effects visibles: usuarios 1 -> 1, customers 0 -> 0, sin cambios Nginx/wp-config y sin reload/restart. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-V PRODUCTION PRIVATE PAGE ACCESS VALIDATION / NO FORM POST.

  • PDF-013X registra el resultado WooCommerce La Directa PDF-013U-T Production Private Page Plan / No Form Post: WooCommerce dejo aprobado el plan de creacion de pagina privada productiva futura. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013W; rama WooCommerce release/intake-pdf013; HEAD remoto a59ca6425a8d6ecf3e73ddb54b7cab066628f0dc; commit nuevo a59ca64 docs: add pdf-013u-t production private page plan. Estado final recomendado WooCommerce VERDE. Produccion no modificada. Pagina productiva no creada, endpoint produccion no ejecutado, nonce produccion no capturado y feature flag productiva bloqueada. Plugin production active 0.2.0-candidate; home/tienda 200 OK. Plan futuro: titulo La Directa Private Intake, slug private-intake-candidate, status private, shortcode [ladirecta_private_intake_form] y autor admin operativo existente. Perimetro manage_woocommerce/manage_options, sin link publico, sin difusion, sin datos reales y endpoint bloqueado. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-U PRODUCTION PRIVATE PAGE CREATE / ENDPOINT BLOCKED / NO FORM POST.

  • PDF-013W registra el resultado WooCommerce La Directa PDF-013U-S Production Plugin Activation / Endpoint Blocked: WooCommerce activo el plugin private-intake-form en produccion, version 0.2.0-candidate, con WP-CLI confirmando estado ACTIVE. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013V; rama WooCommerce release/intake-pdf013; HEAD remoto 6ea98dbce91a877f854c268369eeda2020ce6b59; commit nuevo 6ea98db ops: activate pdf-013u-s production plugin with endpoint blocked. Estado final recomendado WooCommerce VERDE. Endpoint produccion bloqueado por feature flag; feature flag efectiva en produccion false. Produccion home/tienda 200 OK. Pagina productiva no creada, nonce produccion no capturado y POST productivo no ejecutado. No-side-effects visibles: usuarios WordPress 1, usuarios customer 0 y sin pagina intake. Reversa pre-activation creada: /var/backups/ladirecta/pdf-013u-s-20260629-005111. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-T PRODUCTION PRIVATE PAGE PLAN / NO FORM POST.

  • PDF-013V registra el resultado WooCommerce La Directa PDF-013U-R Production Plugin Availability / No Activation: WooCommerce dejo el plugin private-intake-form copiado a produccion, detectado por WordPress produccion y INACTIVE. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013U; rama WooCommerce release/intake-pdf013; HEAD remoto df269775799916c80edf44183cc908abc3f081c5; commit nuevo df26977 ops: add pdf-013u-r production plugin availability. Estado final recomendado WooCommerce VERDE. Produccion home/tienda 200 OK. Reversa file-only creada: /var/backups/ladirecta/pdf-013u-r-20260629-003257. Endpoint produccion no ejecutado, nonce produccion no capturado y pagina productiva no creada. No hubo prod runtime ni activacion, SQL writes, WooCommerce API, SGC, SMTP real ni emails. Proximo paso recomendado: PDF-013U-S PRODUCTION PLUGIN ACTIVATION / ENDPOINT BLOCKED.

  • PDF-013U registra el resultado WooCommerce La Directa PDF-013U-Q Production Promotion Plan / No Prod Change: WooCommerce dejo documentado el plan exacto de promocion productiva sin ejecutar cambios en produccion. Gate maestro PDF-013C; checkpoint anterior OpenClaw PDF-013T; rama WooCommerce release/intake-pdf013; HEAD remoto ef6b0b6a1b131fbe46894efa2fffb9952f4bc62b; commit nuevo ef6b0b6 docs: add pdf-013u-q production promotion plan. Estado final recomendado WooCommerce VERDE. Produccion no modificada, plugin no copiado a produccion, plugin no activado en produccion y endpoint produccion no ejecutado. No hubo WooCommerce API, SGC, SMTP real ni emails. GO solo para plan documental sin cambios; NO-GO para produccion runtime/write. Proximo paso recomendado: PDF-013U-R PRODUCTION PLUGIN AVAILABILITY / NO ACTIVATION.

  • PDF-013T registra el resultado WooCommerce La Directa PDF-013U-P Rate Limit and Logging Hardening: rate limit real implementado con transients, rate limit por IP/request context hasheado por hora y por identidad CUIT/email hasheada por dia, 429 RATE_LIMITED validado en staging en tercer intento, logging sanitizado implementado sin logging persistente sensible por defecto, feature flag productiva bloqueada por defecto, respuesta positiva minimizada y JS sin payload normalizado en DOM. Dry-run staging sigue bloqueado con DRY_RUN_READY_BLOCKED, PENDING_SGC_REVIEW, READY_BLOCKED, send_blocked_by_default=true, writes_executed=false y emails_sent=false. No-side-effects confirmados: usuarios 2 -> 2 y customers 0 -> 0. Produccion read-only 200 OK en home y tienda. No hubo WooCommerce API, SGC, SMTP real ni emails. No se imprimieron ni versionaron secretos. Produccion runtime/write sigue NO-GO. Proximo paso recomendado: PDF-013U-Q PRODUCTION PROMOTION PLAN / NO PROD CHANGE.

  • PDF-013S registra el resultado WooCommerce La Directa PDF-013U-O Staging to Prod Diff and Security Review: staging hardening PASS, estado final recomendado AMARILLO, GO solo para plan documental de promocion y NO-GO para produccion runtime/write. Produccion no fue modificada, endpoint produccion no fue ejecutado y no hubo WooCommerce API, SGC, SMTP real ni emails. Security review: REST route con permission callback, capability manage_woocommerce/manage_options, nonce REST, entorno privado/flag, dry-run sin WooCommerce API/SGC/SMTP, outbox READY_BLOCKED y validacion y sanitizacion OK. Hallazgos: rate limit solo candidate, falta enforcement real, falta logging persistente sanitizado y respuesta positiva expone payload/candidate completo. Bloqueantes: rate limit real, logging sanitizado, feature flag default bloqueado, decision endpoint productivo, perimetro adicional, rollback productivo, plan sin writes externos y minimizacion de respuesta. Proximo paso recomendado: PDF-013U-P RATE LIMIT AND LOGGING HARDENING.

  • PDF-013R registra el resultado WooCommerce La Directa PDF-013U-N Staging Promotion Readiness / No Prod Write: staging hardening PASS, estado final recomendado AMARILLO, GO para plan documental de promocion y NO-GO para produccion runtime/write. Produccion no fue modificada, endpoint produccion no fue ejecutado y no hubo WooCommerce API, SGC, SMTP real ni emails. Bloqueantes: security review del plugin, rate limit real con enforcement, logging sanitizado, rollback productivo, feature flag default bloqueado, decision explicita sobre endpoint productivo, perimetro Basic Auth/admin-only/allowlist y plan sin SGC/WooCommerce API writes ni SMTP real. Proximo paso recomendado: PDF-013U-O STAGING TO PROD DIFF AND SECURITY REVIEW.

  • PDF-013Q registra el resultado WooCommerce La Directa PDF-013U-M Staging Dry-Run Hardening and Negative Cases: casos positivos persona juridica B2B sintetica y comercio/persona fisica sintetica con HTTP 200, DRY_RUN_READY_BLOCKED, PENDING_SGC_REVIEW, READY_BLOCKED, send_blocked_by_default=true, writes_executed=false y emails_sent=false. Casos negativos confirmados: sin nonce 403 rest_forbidden, nonce invalido 403 rest_forbidden, sin capability 401 rest_forbidden, CUIT/email/telefono invalidos, requerido faltante, honeypot, challenge, payload vacio, JSON malformado y GET sin ruta. No-side-effects confirmados: usuarios staging 2 -> 2, usuarios customer 0 -> 0, sin creacion de usuario WooCommerce, sin cliente real, sin WooCommerce API, sin SGC, sin SMTP real ni emails. Nonce usado efimeramente; nonce/cookies/auth headers no guardados. Produccion read-only sigue 200 OK; staging protegido sigue 401 Unauthorized, Basic Auth, noindex y no-store. No se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-N STAGING PROMOTION READINESS / NO PROD WRITE.

  • PDF-013P registra el resultado WooCommerce La Directa PDF-013U-L Staging Nonce Capture and Dry-Run Request: nonce capturado efimeramente, nonce/cookies/auth headers no guardados y dry-run POST ejecutado solo contra staging. Resultado sanitizado HTTP 200, DRY_RUN_READY_BLOCKED, request_status=PENDING_SGC_REVIEW, outbox READY_BLOCKED, send_blocked_by_default=true, writes_executed=false y emails_sent=false. Casos negativos: sin nonce 401, nonce invalido 403 y payload invalido 422 VALIDATION_ERROR. Produccion read-only sigue 200 OK; staging protegido sigue 401 Unauthorized, Basic Auth, noindex y no-store. No hubo WooCommerce API, SGC, SMTP real ni emails externos; no se imprimieron ni versionaron secretos. Proximo paso recomendado: PDF-013U-M STAGING DRY-RUN HARDENING AND NEGATIVE CASES.

  • PDF-013O registra el resultado WooCommerce La Directa PDF-013U-K Staging Private Page and Nonce Readiness: pagina privada staging creada con Page ID 32, slug private-intake-candidate, status private y shortcode [ladirecta_private_intake_form]. Plugin private-intake-form activo en staging. Staging protegido responde 401 Unauthorized y conserva noindex/no-store; produccion read-only sigue 200 OK en home y tienda. Usuario staging no creado, endpoint intake no ejecutado, nonce no capturado y POST no enviado. No hubo WooCommerce API, SGC, SMTP real ni emails; no se imprimieron ni versionaron secretos; no se creo .env real ni config/private-staging.env. Proximo paso recomendado: PDF-013U-L STAGING NONCE CAPTURE AND DRY-RUN REQUEST / NO EXTERNAL SEND.

  • PDF-013N registra el resultado WooCommerce La Directa PDF-013U-J Staging Plugin Activation / No Endpoint Post: plugin private-intake-form activo en staging como La Directa Private Intake Form Candidate, version 0.2.0-candidate, status Active y wp plugin is-active private-intake-form exit 0. Endpoint intake no ejecutado, nonce no capturado y sin pagina/formulario/ usuario creado.

  • PDF-013J registra el resultado WooCommerce La Directa PDF-013U-F Same VPS Internal Staging Prep Plan: restore point PDF-013U-E como prerequisito cumplido y plan exacto de staging interno privado sobre el mismo VPS, con directorio /var/www/ladirecta-staging/public, DB ladirecta_staging, usuario ladirecta_staging_user y server block /etc/nginx/sites-available/ladirecta-staging. No hubo staging real, cambios funcionales de produccion, SQL/write/reload/restart/restore, plugin activation, endpoint intake, WooCommerce API writes, SGC writes, SMTP, emails, sync, scheduler, cron ni pipelines.

  • PDF-013I registra el resultado WooCommerce La Directa PDF-013U-E Same VPS Restore Points: restore points reales creados y validados en /var/backups/ladirecta/pdf-013u-e-20260626-205755, backup DB, backup wp-content, backup Nginx, manifest sanitizado e integridad verificada. No hubo restore, staging real, cambios funcionales de produccion, reload/restart de servicios, SQL write, WooCommerce API, SGC, SMTP, emails, sync, scheduler, cron ni pipelines.

  • PDF-013H registra el resultado read-only de WooCommerce La Directa PDF-013U-D Same VPS Restore Readiness: restore readiness AMARILLO y same VPS internal staging VIABLE CON BLOQUEANTES. El HEAD remoto Woo relacionado es cd6fceca185ff09b54c012441ee14c984a522456, con commit nuevo cd6fcec docs: add pdf-013u-d same vps restore readiness; validadores Woo PASS. El VPS WooCommerce fue inspeccionado read-only, sin backup real, restore, SQL, staging real, WordPress runtime, plugin activation, endpoint intake, produccion, WooCommerce API, SGC, SMTP, emails, sync, scheduler, cron ni pipelines. Proximo paso recomendado: PDF-013U-E SAME VPS RESTORE POINTS AND ROLLBACK PLAN / BACKUP AUTHORIZED.

  • PDF-013C define el contrato ejecutable del formulario/plugin futuro de La Directa para solicitudes de alta ecommerce. Incluye campos, validaciones, payload schema, endpoint interno candidate, idempotencia REQUEST_INTAKE:<normalized_cuit>:<email_hash>:<date_bucket>, rate-limit por CUIT/email/IP, seguridad con captcha/honeypot/logs sanitizados, outbox BILLING_CUSTOMER_REQUEST en READY_BLOCKED, event log NOTIFICATION_CREATED y handoff para C:\APV\vps-woocommerce-ladirecta. Genera candidates sanitizados en tmp/pdf-013c/. No se enviaron emails reales, no se conecto SMTP para envio, no se ejecuto SQL write en prod, no se escribio en SGC, no se toco WooCommerce API, no se usaron datos reales, no se abrio endpoint publico, no se creo plugin real y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-013A prepara el camino productivo minimo para solicitud de alta ecommerce: contrato de request, audit, notification outbox READY_BLOCKED y event log, con idempotencia candidate REQUEST_INTAKE:<normalized_cuit>:<email_hash>:<date_bucket> y seed sintetico PDF-013A:REQUEST_INTAKE:TEST001. Genera payloads sanitizados en tmp/pdf-013a/ y valida rate-limit, allowlist, bloqueo por defecto y hash deterministico. No se enviaron emails reales, no se conecto SMTP para envio, no se ejecuto SQL write en prod, no se escribio en SGC, no se toco WooCommerce API, no se usaron datos reales y no se activo worker, runtime, sync, scheduler, cron ni pipelines.

  • PDF-012P ejecuta el gate productivo manual controlado sobre la notification sintetica de PDF-012O PDF-012O:BILLING_CUSTOMER_REQUEST:TEST001. El flujo autorizado envia exactamente 1 email real interno a facturacion@ladirecta.com.ar, cambia READY_BLOCKED -> SENT solo despues de SMTP OK, registra SEND_APPROVED_MANUAL, SEND_ATTEMPTED, SEND_SUCCEEDED y bloquea el retry antes de SMTP como ALREADY_SENT_GLOBAL_BLOCKED. No se envian emails a clientes/proveedores/listas, no se usa CC/BCC/adjuntos, no se imprimen secrets/passwords, no se escribe en SGC, no se toca WooCommerce API, no se usan datos reales y no se activa runtime, sync, scheduler, cron ni pipelines.

  • PDF-012L ejecuta preflight read-only para promocion del flujo worker guarded/outbox hacia VPS/prod. Local/dev gestion_de_negocios_core tiene los 4 objetos requeridos (ecommerce_customer_requests, ecommerce_customer_request_audit, ecommerce_notification_outbox, ecommerce_notification_event_log) con RLS habilitado. VPS/prod openclaw_business_observer_prod tiene schema business_observer, owner openclaw_bo_prod_owner y secrets esperados presentes sin valores, pero los 4 objetos de requests/outbox estan ausentes. Estado: OBJECT_DRIFT_DETECTED / NO-GO. Se requiere snapshot VPS y estrategia de backup antes de cualquier DDL/write prod. No se enviaron emails reales, no se conecto SMTP para envio, no se imprimieron secrets/passwords, no se ejecuto SQL write ni DDL en VPS/prod, no se escribio en SGC, no se toco WooCommerce API y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012K ejecuta el worker manual real con guard global integrado sobre PostgreSQL local/dev gestion_de_negocios_core.business_observer, usando la notification sintetica limpia PDF-012K:BILLING_CUSTOMER_REQUEST:TEST001. El primer intento envia exactamente 1 email real interno a facturacion@ladirecta.com.ar, registra aprobacion manual, intento y exito, cambia READY_BLOCKED -> SENT solo despues de SMTP OK y el retry queda bloqueado antes de SMTP como ALREADY_SENT_GLOBAL_BLOCKED. No se enviaron emails a clientes/proveedores/ listas, no se uso CC/BCC/adjuntos, no se imprimieron secrets/passwords, no se escribio en SGC, no se toco WooCommerce API, no se usaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012J integra el guard global del worker real/manual antes de fallback y antes de cualquier SMTP real. Crea/reusa notifications sinteticas PDF-012J:*, detecta exitos historicos SEND_SUCCEEDED de PDF-012H y PDF-012F, bloquea con ALREADY_SENT_GLOBAL_BLOCKED y FALLBACK_BLOCKED_BEFORE_SMTP, y registra SEND_ELIGIBLE_BUT_BLOCKED para la notification nueva sintetica cuando no hay exito compatible. No se enviaron emails reales nuevos, no se conecto SMTP para envio, no se escribio en SGC, no se toco WooCommerce API, no se usaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines. Produccion sigue bloqueada hasta nuevo GO.

  • PDF-012I endurece la idempotencia global posterior al NO-GO de PDF-012H. Ejecuta solo dry-run local/dev, crea/reusa PDF-012I:BILLING_CUSTOMER_REQUEST:TEST001 en READY_BLOCKED y registra bloqueos ALREADY_SENT_GLOBAL_BLOCKED para primary/retry antes de cualquier SMTP o fallback. No se enviaron emails reales nuevos, no se conecto SMTP para envio, no se escribio en SGC, no se toco WooCommerce API, no se usaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines. Produccion sigue bloqueada hasta nuevo GO.

  • PDF-012H ejecuta el worker real de outbox en modo manual controlado sobre PostgreSQL local/dev y SMTP real, pero cierra NO-GO_VALIDATION_FAILED: se enviaron 2 emails reales internos a facturacion@ladirecta.com.ar por una desviacion de idempotencia global durante el reintento. La primera notification fue PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001 (id=1) y la segunda fue fallback PDF-012H:BILLING_CUSTOMER_REQUEST:TEST001 (id=7). No se enviaron emails a clientes, proveedores ni listas; no se uso CC/BCC/adjuntos; no se imprimieron secrets/passwords; no se escribio en SGC; no se toco WooCommerce API; no se usaron datos reales; no se toco VPS/prod con datos; y no se activo runtime, sync, scheduler, cron ni pipelines. El validador preserva el NO-GO como PDF-012H_NO_GO_CONFIRMED, con global_success_event_count=2, expected_single_send=1 y production_blocked=true.

  • PDF-012G prepara el readiness operativo del worker de outbox para produccion controlada, sin activarlo automaticamente. Define worker manual/controlado, allowlist interna facturacion@ladirecta.com.ar y operaciones@ladirecta.com.ar, tipo permitido BILLING_CUSTOMER_REQUEST, rate-limit, idempotencia, estados operativos, retry policy, error handling y observabilidad minima. Genera snapshot sanitizado en tmp/pdf-012g/ con conteos de pendientes, bloqueadas, enviadas, fallidas, ultimo evento y ultimo error sanitizado. No se enviaron emails reales, no se ejecuto --confirm-send, no se conecto SMTP para envio, no se activo worker persistente, scheduler, cron, runtime automatico ni pipeline, no se toco WooCommerce API, no se escribio en SGC, no se usaron datos reales, no se tocaron datos VPS/prod y no hubo SQL write local/dev en esta preparacion.

  • PDF-012F ejecuta exactamente un envio real SMTP desde la outbox local/dev usando la notification sintetica PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001, destinatario permitido facturacion@ladirecta.com.ar, sin CC/BCC/adjuntos y sin datos reales de clientes. El estado cambia de READY_BLOCKED a SENT solo despues del SMTP OK, se registran eventos sanitizados SEND_ATTEMPTED y SEND_SUCCEEDED, y el reintento queda bloqueado como ALREADY_SENT_BLOCKED sin segundo envio. SQL write local/dev limitado a business_observer.ecommerce_notification_event_log y business_observer.ecommerce_notification_outbox. No se imprimieron secrets/passwords/connection strings, no se escribio en SGC, no se toco WooCommerce API, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012A prepara el primer MVP funcional de notificacion interna para solicitud de alta ecommerce: payload candidate sintetico/sanitizado con razon social, CUIT, email, WhatsApp, domicilio fiscal, domicilio pedido, rubro, comentario y estado PENDING_SGC_REVIEW; email interno candidate a facturacion@ladirecta.com.ar; sin CC/BCC/adjuntos; y script de envio bloqueado por defecto, habilitable solo con autorizacion explicita posterior y --confirm-send. No se envio email real, no se imprimieron secrets ni passwords, no se ejecuto SQL write, no se escribio en SGC, no se toco WooCommerce API, no se tocaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012C crea y valida en PostgreSQL local/dev gestion_de_negocios_core.business_observer una base minima de notification outbox para futuras altas ecommerce: tablas ecommerce_notification_outbox y ecommerce_notification_event_log, idempotencia por PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001, destinatario permitido facturacion@ladirecta.com.ar, template versionado billing_customer_request_v1, estado READY_BLOCKED y send_blocked_by_default=true. Se genero backup schema-only local/dev fuera de Git y se inserto unicamente una notification candidate sintetica con un evento NOTIFICATION_CREATED. No se enviaron emails reales, no se ejecuto --confirm-send, no se toco WooCommerce API, no se escribio en SGC, no se usaron datos reales de clientes, no se imprimieron secrets/passwords, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012D conecta una solicitud ecommerce sintetica con la outbox local/dev: business_observer.ecommerce_customer_requests, business_observer.ecommerce_customer_request_audit, business_observer.ecommerce_notification_outbox y business_observer.ecommerce_notification_event_log, con idempotencia por PDF-012D:REQUEST:TEST001 y PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001, rate-limit local/conceptual, status=READY_BLOCKED y send_blocked_by_default=true. No se enviaron emails reales, no se conecto SMTP para envio, no se toco WooCommerce API, no se escribio en SGC, no se usaron datos reales, no se imprimieron secrets/passwords, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-012E ejecuta un worker dry-run local/dev sobre la notification PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001: lee READY_BLOCKED, confirma recipient permitido facturacion@ladirecta.com.ar, idempotencia, rate-limit conceptual y send_blocked_by_default=true, y registra una decision SEND_ELIGIBLE_BUT_BLOCKED en business_observer.ecommerce_notification_event_log con event_type=SEND_BLOCKED y event_payload_sanitized.semantic_event=WORKER_DRY_RUN_EVALUATED. La notification permanece READY_BLOCKED. No se enviaron emails reales, no se conecto SMTP para envio, no se toco WooCommerce API, no se escribio en SGC, no se usaron datos reales, no se imprimieron secrets/passwords, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011T ejecuta un unico envio real SMTP autorizado a operaciones@ladirecta.com.ar con asunto Prueba tecnica SMTP La Directa - PDF-011R, usando send_pdf_011r_smtp_single_test.py --confirm-send exactamente una vez. El resultado fue SENT_SINGLE_EMAIL, con email_sent=true, single_send=true y recipient_allowed=true. La evidencia sanitizada quedo en tmp/pdf-011t/, sin password, secret, connection string ni datos reales de clientes. No se envio a clientes, proveedores ni listas; no se uso CC/BCC/adjuntos; no se ejecuto SQL write; no se escribio en SGC; no se toco WooCommerce API; no se tocaron datos reales ni VPS/prod con datos; y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011S documenta la revision final operativa del gate single-send SMTP preparado por PDF-011R, sin enviar email real y sin ejecutar --confirm-send. Confirma destinatario permitido operaciones@ladirecta.com.ar, asunto permitido Prueba tecnica SMTP La Directa - PDF-011R, cuerpo de prueba tecnica unica, limites de un unico email sin CC/BCC/adjuntos/listas/clientes reales/ proveedores reales/datos reales de solicitudes, bloqueo por defecto y evidencia esperada para un gate posterior. No se ejecutaron MAIL FROM, RCPT TO ni DATA, no se imprimieron secrets/passwords/connection strings, no se ejecuto SQL write, no se escribio en SGC, no se toco WooCommerce API, no se tocaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011R prepara un gate para un unico envio SMTP real de prueba a operaciones@ladirecta.com.ar, con envio bloqueado por defecto y habilitable solo con autorizacion final separada mediante --confirm-send. Genera payload candidate sanitizado en tmp/pdf-011r/, no permite CC/BCC ni adjuntos, no usa datos reales de clientes, no imprime secrets, passwords, usuario SMTP ni connection strings, no se envio email real, no se ejecuto SQL write, no se escribio en PostgreSQL ni SGC, no se toco WooCommerce API, no se tocaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011Q prueba conexion tecnica SMTP Hostinger de La Directa desde local/dev, partiendo de PDF-011P = SECRET_READY, sin enviar email real y sin ejecutar comandos SMTP de envio. Usa la ruta local real verificada C:\APV\openclawai\.venv-portal\secrets\ladirecta-hostinger-email.env; la ruta declarada C:\APV\openclawai.venv-portal\secrets\ladirecta-hostinger-email.env queda documentada como no existente en esta estacion. El preflight abre conexion, negocia SSL/TLS o STARTTLS segun LADIRECTA_EMAIL_SMTP_SECURE, autentica, cierra conexion y genera output sanitizado en tmp/pdf-011q/. No se imprimieron secrets, passwords, usuario ni connection strings. No se ejecuto MAIL FROM, RCPT TO, DATA, sendmail ni send_message. SGC permanece read-only, no se ejecuto SQL write, no se escribio en PostgreSQL ni SGC, no se toco WooCommerce API, no se tocaron datos reales, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011P verifica si el secret privado SMTP Hostinger de La Directa ya fue completado localmente: C:\APV\openclawai\.venv-portal\secrets\ladirecta-hostinger-email.env. El archivo real no existe en este gate y queda PENDING_SECRET; la ruta esta ignorada por Git y no aparece en git status. SMTP queda PENDING_SMTP_CONFIG. El ready check genera output sanitizado en tmp/pdf-011p/ con nombres de variables y estados PRESENT/MISSING, sin imprimir valores. No se envio email real, no se conecto SMTP, no se ejecuto SQL write, no se escribio en PostgreSQL ni SGC, no se toco WooCommerce API, no se modifico .env, no se imprimieron secrets y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011O valida en local la ruta real del secret SMTP Hostinger para La Directa: C:\APV\openclawai\.venv-portal\secrets\ladirecta-hostinger-email.env. El archivo real no existe en este gate y queda PENDING_SECRET; el template local ignorado por Git queda en C:\APV\openclawai\.venv-portal\secrets\ladirecta-hostinger-email.env.template. SMTP queda PENDING_SMTP_CONFIG porque no hay host/port/secure confirmados desde Hostinger. El preflight genera output sanitizado en tmp/pdf-011o/ con nombres de variables esperadas/presentes y estados OK/MISSING/PENDING, sin imprimir valores. No se envio email real, no se conecto SMTP, no se ejecuto SQL write, no se escribio en PostgreSQL ni SGC, no se toco WooCommerce API, no se modifico .env, no se imprimieron secrets y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011N valida el estado de secrets/email de La Directa sin imprimir valores y prepara un email candidate de aviso a facturacion para solicitudes de alta ecommerce. El secret esperado C:\APV\openclawai.venv-portal\secrets\ladirecta-hostinger-email.env no existe en este gate, por lo que queda PENDING_SECRET; SMTP queda PENDING_SMTP_CONFIG porque no hay host/port confirmados. Se genera output local ignorado por Git en tmp/pdf-011n/ con payload sanitizado, domicilio fiscal, domicilio pedido y estado PENDING_SGC_REVIEW. El email candidate queda a facturacion@ladirecta.com.ar en modo DRY_RUN_NOT_SENT. No se envio email real, no se conecto SMTP, no se ejecuto SQL write, no se escribio en SGC, no se toco WooCommerce API, no se modifico .env, no se imprimieron secrets y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011M ajusta el modelo de revision de solicitudes ecommerce y deja explicito que SGC es autoridad comercial y fuente read-only para OpenClaw, WooCommerce, el plugin La Directa y cualquier flujo automatizado ecommerce. OpenClaw registra solicitudes en PostgreSQL, genera email/tarea para facturacion, lee SGC en la proxima sincronizacion y solo vincula codigo_cliente / sgc_customer_id cuando detecta un alta o cambio manual ya realizado en SGC por personal autorizado. Define estados candidate PENDING_SGC_REVIEW, NEEDS_MORE_INFO, APPROVED_FOR_MANUAL_SGC_ENTRY, REJECTED, SGC_MANUALLY_CREATED_PENDING_SYNC, SGC_SYNCED y ACTIVATION_READY. Quedan prohibidos writes directos hacia SGC, SQL write contra SGC, API write hacia SGC y automatizacion de modificacion de clientes SGC.

  • PDF-011L ejecuta el writer local/dev controlado para insertar una solicitud sintetica de alta ecommerce en PostgreSQL local/dev gestion_de_negocios_core con usuario openclaw_bo_admin, usando la credencial repo-local ignorada por Git sin imprimir valores. Se insertaron unicamente 1 request con seed PDF-011L en business_observer.ecommerce_customer_requests y 1 auditoria asociada en business_observer.ecommerce_customer_request_audit. La solicitud quedo PENDING_SGC_REVIEW, con email sintetico test-pdf011l@example.invalid, razon social CLIENTE TEST PDF011L SRL y auditoria REQUEST_CREATED. Queda cleanup candidate con --confirm. No se enviaron emails reales, no se toco WooCommerce API, no se tocaron datos reales, no se toco VPS/prod con datos, no se imprimieron secrets y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011K prepara el contrato local/dev del writer controlado para solicitudes de alta ecommerce, sin ejecutar SQL write. Genera payload candidate en tmp/pdf-011k/ ignorado por Git para business_observer.ecommerce_customer_requests, audit candidate para business_observer.ecommerce_customer_request_audit, email candidate sin envio a facturacion@ladirecta.com.ar y cleanup candidate para un gate futuro. Cubre contacto nuevo sin codigo SGC PENDING_SGC_REVIEW, cliente existente SGC ACTIVATION_READY_CANDIDATE, codigo/CUIT invalido VALIDATION_BLOCKED y email duplicado EMAIL_ALREADY_USED_CANDIDATE. Mantiene domicilio fiscal y domicilio pedido sanitizados. Hostinger queda PENDING_SECRET / PENDING_SMTP_CONFIG si el secret no existe, sin imprimir valores. No se ejecuto SQL write, no se enviaron emails reales, no se toco WooCommerce API, no se crearon usuarios, no se modifico .env, no se imprimieron secrets, no se tocaron datos, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011J simula en local/dev el onboarding ecommerce de La Directa sin writes: cliente existente SGC queda como candidate ACTIVATION_READY, contacto nuevo sin codigo SGC genera payload candidate PENDING_SGC_REVIEW para business_observer.ecommerce_customer_requests, email candidate sin envio a facturacion@ladirecta.com.ar, caso codigo/CUIT invalido queda VALIDATION_BLOCKED con mensaje generico y email ya usado queda EMAIL_ALREADY_USED_CANDIDATE. El script usa transaccion READ ONLY, confirma las cuatro tablas de activacion creadas por PDF-011I y verifica secret Hostinger sin imprimir valores. PDF-011J = GO DRY-RUN LOCAL DEV. No se ejecuto SQL write, no se enviaron emails reales, no se toco WooCommerce API, no se crearon usuarios, no se modifico .env, no se imprimieron secrets, no se tocaron datos, no se toco VPS/prod con datos y no se activo runtime, sync, scheduler, cron ni pipelines.

  • PDF-011I ejecuta el DDL candidate PDF-011G en PostgreSQL local/dev gestion_de_negocios_core con usuario openclaw_bo_admin, usando la credencial repo-local ignorada por Git sin imprimir valores. Se genero backup schema-only fuera de Git en C:\APV\backups\openclawai\PDF-011I\business_observer_schema_pre_pdf011i_20260624-113325.dump con 28676 bytes. Se ejecuto unicamente PDF-011G-CUSTOMER-ACTIVATION-DDL-CANDIDATE.sql con ON_ERROR_STOP=1 y transaccion unica. Se crearon business_observer.clientes_ecommerce, business_observer.ecommerce_customer_requests, business_observer.ecommerce_customer_request_audit y business_observer.customer_activation_audit; post-checks confirmaron owner openclaw_bo_admin, RLS habilitado, indices, constraints, grants y columnas domicilio fiscal/pedido esperadas, sin duplicados fuera del schema. PDF-011I = GO. PDF-011H = preflight historico: su validacion viva falla despues del DDL porque los objetos ya existen; esto es esperado, no representa drift negativo y no debe revalidarse con expectativa de objetos ausentes. La evidencia valida post-DDL es PDF-011I y sus post-checks propios. No se toco VPS/prod con SQL, WooCommerce API, .env, secrets, emails reales, datos de negocio, runtime, sync, scheduler, cron ni pipelines.

  • PDF-011H valida en PostgreSQL local/dev, en modo read-only, que el DDL candidate PDF-011G esta listo para un gate separado de ejecucion controlada: DB gestion_de_negocios_core, usuario openclaw_bo_admin, schema business_observer owned por openclaw_bo_admin, permisos CREATE, roles openclaw_bo_admin/openclaw_bo_writer/openclaw_bo_reader, objetos clientes_ecommerce, ecommerce_customer_requests, ecommerce_customer_request_audit y customer_activation_audit ausentes, backup schema-only PDF-011A valido y DDL sin DROP DATABASE, TRUNCATE ni DML. No se ejecuto SQL write, no se crearon tablas, no se tocaron datos, WooCommerce API, emails reales, .env, secrets, VPS/prod con datos, runtime, sync, scheduler, cron ni pipelines.

  • PDF-011G disena el DDL candidate para persistir clientes ecommerce derivados desde SGC, solicitudes de alta de contactos nuevos sin codigo SGC, auditoria de solicitudes, auditoria de activaciones y domicilios fiscal / pedido. Incluye constraints candidate para activation_status, onboarding_status, request_status, quality_status, CUIT normalizado, emails lower-case, WhatsApp normalizado, unique por tenant + codigo_cliente, unique por tenant + cuit_normalizado activo y unique email_real activo. Hostinger queda PENDING_SECRET / PENDING_SMTP_CONFIG; no se invento SMTP, no se imprimieron valores y no se envio email real. No se ejecuto SQL write, no se crearon tablas, no se toco PostgreSQL, WooCommerce API, datos, VPS/prod con datos, runtime, sync, scheduler, cron ni pipelines.

  • PDF-011F documenta el contrato de onboarding B2B La Directa para clientes existentes SGC y contactos nuevos sin codigo SGC. Define solicitud PENDING_SGC_REVIEW, email candidate a facturacion, campos de domicilio fiscal/pedido, tablas/capas candidate y auditoria. El secreto Hostinger queda PENDING_SECRET en ruta privada fuera del repo; no se imprimieron valores. No se ejecuto SQL write, no se enviaron emails reales, no se toco WooCommerce API, no se crearon usuarios, no se tocaron datos, VPS/prod, runtime, sync, scheduler, cron ni pipelines.
  • PDF-011E valida en modo read-only local/dev que las tablas B2B reales seeded por PDF-011D responden precios efectivos por cliente sintetico, lista y SKU. La credencial local repo-ignorada existe y no imprimio valores. Se consultaron solo SELECT sobre b2b_customer_mapping, b2b_product_price, b2b_pricing_decision_log y v_b2b_customer_effective_price. Resultado: seed_mappings=2, seed_prices=6, manual_decision_logs=0, effective_l1=3, effective_l5=3, caso L1 + 2442 B2B_PRICE_OK, caso L5 + 2442 B2B_PRICE_OK y SKU sin seed con 0 filas efectivas / BLOCKED_PRICE_MISSING candidate. No se ejecuto SQL write, no se tocaron datos, VPS/prod, WooCommerce API, .env, secrets, runtime, sync, scheduler, cron ni pipelines.
  • PDF-011D ejecuta el seed B2B minimo y controlado en PostgreSQL local/dev gestion_de_negocios_core con usuario openclaw_bo_admin, usando la credencial repo-local ignorada por Git sin imprimir valores. Preflight confirmo objetos B2B presentes y seed previo 0. Se insertaron solo 2 mappings sinteticos y 6 precios sinteticos para SKUs 2442, 2443, 2444 en listas L1/L5; b2b_pricing_decision_log quedo con 0 inserts manuales. La vista v_b2b_customer_effective_price devolvio effective_l1=3 y effective_l5=3, sin duplicados inesperados. Quedo cleanup candidate acotado por source_hash; no se uso VPS/prod, no se toco WooCommerce API, .env, secrets, datos personales reales, runtime, sync, scheduler, cron ni pipelines.
  • PDF-011C prepara el plan y scripts candidate para un seed B2B minimo en PostgreSQL local/dev sobre las tablas creadas en PDF-011B. El diseno usa clientes sinteticos para listas L1 y L5, SKUs piloto PDF-009M con SKU obligatorio 2442, payload JSON/SQL candidate bajo tmp/pdf-011c/ ignorado por Git y cleanup candidate por source_hash LIKE 'pdf011c_seed_%'. No se ejecuto SQL write, no se cargaron datos, no se tocaron VPS/prod, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-011B ejecuta el DDL B2B corregido PDF-010P en PostgreSQL local/dev gestion_de_negocios_core con usuario openclaw_bo_admin, usando como evidencia previa el backup schema-only valido de PDF-011A C:\APV\backups\openclawai\PDF-011A\business_observer_schema_only_post_owner_grants.dump de 13895 bytes. Preflight read-only confirmo schema owner openclaw_bo_admin, permisos CREATE, roles openclaw_bo_* y objetos B2B ausentes. Se ejecuto unicamente PDF-010P-B2B-PERSISTENCE-DDL-RETRY-CANDIDATE.sql con ON_ERROR_STOP=1 y transaccion unica. Se crearon business_observer.b2b_customer_mapping, business_observer.b2b_product_price, business_observer.b2b_pricing_decision_log y business_observer.v_b2b_customer_effective_price; post-checks confirmaron 24 constraints, indices esperados, owner openclaw_bo_admin, RLS activo, grants para openclaw_bo_admin/writer/reader y duplicados 0. No se cargaron datos B2B y no se tocaron VPS/prod, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-011A ejecuta el gate local/dev con owner/admin real postgres para resolver el bloqueo de backup de PDF-010Z. Se usaron variables APV_LOCAL_POSTGRES_ADMIN_* desde .env ignorado por Git, sin imprimir valores, contra gestion_de_negocios_core. Se ejecutaron solo GRANT USAGE, GRANT SELECT ON ALL TABLES y GRANT SELECT ON ALL SEQUENCES en business_observer para openclaw_bo_admin; el backup pg_dump -Fc -s -n business_observer quedo valido en C:\APV\backups\openclawai\PDF-011A\business_observer_schema_only_post_owner_grants.dump con 13895 bytes. No se ejecuto DDL B2B, no se crearon objetos B2B y no se tocaron datos, VPS/prod, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010Z documenta el gate local/dev de permisos minimos para backup posterior a publicar PDF-010Y. Local, origin y VPS quedaron alineados en 3f134c5e23500d54063ec4d1f64e06c5274f87f0, con HTTP local/publico 200. La credencial admin/owner local existe, esta ignorada por Git y no imprimio valores. El preflight read-only paso como openclaw_bo_admin, con DB gestion_de_negocios_core, schema business_observer, roles openclaw_bo_* presentes, tabla source_003_sales_items existente y objetos B2B ausentes. Se intento solo el SQL write autorizado: GRANT USAGE sobre schema, GRANT SELECT ON ALL TABLES y GRANT SELECT ON ALL SEQUENCES en business_observer; el gate quedo NO-GO GRANT/BACKUP FAILED porque source_003_sales_items pertenece a postgres y openclaw_bo_admin no pudo concederse SELECT. El backup pg_dump -Fc -s -n business_observer fallo y quedo en 0 bytes fuera de Git en C:\APV\backups\openclawai\PDF-010Z\. No se ejecuto DDL B2B, no se crearon tablas/vista B2B, no se tocaron datos, VPS/prod, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010Y documenta el plan para resolver el bloqueo de backup local/dev detectado en PDF-010X: pg_dump -Fc -s -n business_observer fallo con permission denied for table source_003_sales_items y dump de 0 bytes. Evalua tres opciones: credencial admin/backup real, permiso minimo a openclaw_bo_admin sobre objetos existentes de business_observer, o excepcion local/dev basada solo en rollback. La recomendacion unica para local/dev es Opcion B si governance autoriza SQL admin minimo en gate separado; para VPS/prod exige snapshot o backup full con rol adecuado. No se ejecuto DDL, SQL write, GRANT, permisos, datos, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010X documenta el gate local/dev posterior a desplegar PDF-010W en el Knowledge Portal. Local, origin y VPS quedaron alineados en db0698b9dd021261d9aa24329725f2c49a0411cf; HTTP local VPS y publico devolvieron 200. La credencial admin/owner local existe bajo .venv-portal/secrets/, esta ignorada por Git y no imprimio valores. El preflight read-only paso como openclaw_bo_admin, owner de business_observer, con CREATE sobre DB/schema, roles openclaw_bo_* presentes y objetos B2B ausentes. El backup schema-only pg_dump -Fc -s -n business_observer fallo antes del DDL por permission denied for table source_003_sales_items; quedo un artefacto fallido de 0 bytes fuera de Git en C:\APV\backups\openclawai\PDF-010X\. Estado: NO-GO BACKUP FAILED / SIN DDL B2B. No se ejecuto PDF-010P, no se crearon objetos B2B, no se aplicaron grants/RLS, no se ejecuto rollback y no se tocaron VPS/prod con SQL, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010W aprueba para local/dev una estrategia de backup schema-only con pg_dump -Fc -s -n business_observer despues del NO-GO BACKUP FAILED de PDF-010V. La evidencia revisada confirma que el backup data+schema fallo por permission denied for table source_003_sales_items, el dump quedo en 0 bytes, PDF-010P no se ejecuto y los objetos B2B siguen ausentes. La decision aplica solo a local/dev porque el DDL B2B crea objetos nuevos y no modifica source_003_sales_items ni datos existentes; el rollback candidate de PDF-010P cubre la eliminacion de objetos B2B nuevos. Para VPS/prod se mantiene exigencia de snapshot externo o backup full con rol adecuado. No se ejecuto DDL, no se ejecuto SQL write, no se tocaron datos, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010V documenta el gate local/dev posterior a publicar PDF-010U para ejecutar el DDL B2B corregido PDF-010P. Local, origin y VPS quedaron alineados en f9c4a4f7cd57050476e8cafd59a00fa936c429a5; la credencial admin/owner local real existe bajo .venv-portal/secrets/, esta ignorada por Git y no imprimio valores. El preflight read-only paso como openclaw_bo_admin, owner de business_observer, con CREATE sobre DB/schema, roles openclaw_bo_* presentes y objetos B2B ausentes. El backup acotado pg_dump -Fc -n business_observer fallo antes del DDL por permission denied for table source_003_sales_items al intentar bloquear business_observer.source_003_sales_items; quedo un artefacto fallido de 0 bytes fuera de Git en C:\APV\backups\openclawai\PDF-010V\. Estado: NO-GO BACKUP FAILED / SIN DDL B2B. No se ejecuto PDF-010P, no se crearon objetos B2B, no se aplicaron grants/RLS, no se ejecuto rollback y no se tocaron VPS/prod, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010U documenta la estrategia de backup posterior al NO-GO BACKUP FAILED de PDF-010T. La decision aprobada para local/dev es usar backup acotado al schema business_observer con pg_dump -Fc -n business_observer, porque PDF-010P solo toca ese schema y los objetos B2B siguen ausentes. Para VPS/prod se exige backup full DB con rol backup/admin aprobado o snapshot externo antes de DDL productivo. Estado: GO BACKUP STRATEGY APPROVED FOR LOCAL DEV / SIN DDL / SIN SQL WRITE.
  • PDF-010T documenta el gate controlado con credencial admin/owner local para ejecutar el DDL B2B corregido PDF-010P. Safe point 8aeb04a confirmado, validadores previos PASS, secret repo-local .venv-portal/secrets/postgres-target-admin-owner.env existente e ignorado por Git, openclaw_bo_admin confirmado como usuario actual, owner de business_observer y con CREATE sobre DB/schema; roles openclaw_bo_* presentes y objetos B2B ausentes. psql/pg_dump 15.15 confirmados. El gate quedo NO-GO BACKUP FAILED antes del DDL porque pg_dump -Fc fallo con permission denied for schema cobranzas al intentar bloquear cobranzas.bank_entity. Quedo un artefacto fallido de 0 bytes fuera de Git en C:\APV\backups\openclawai\PDF-010T\; no es backup valido. No se ejecuto PDF-010P, no se crearon objetos B2B, no se aplicaron grants/RLS, no se ejecuto rollback y no se tocaron WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010S documenta la evidencia read-only de habilitacion admin/owner PostgreSQL posterior a PDF-010R: secrets reales bajo .venv-portal/secrets/ existen, estan ignorados por Git y no aparecen en git status. Local gestion_de_negocios_core conecta como openclaw_bo_admin, con LOGIN, CREATE sobre DB/schema y ownership de business_observer; VPS openclaw_business_observer_prod conecta desde el contenedor como openclaw_bo_prod_owner, con LOGIN, CREATE sobre DB y schema, y ownership de business_observer. Los objetos B2B siguen ausentes en este check. No se imprimieron secretos, no se commitearon secrets, no se ejecuto DDL B2B, no se tocaron datos de negocio, WooCommerce API, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010R documenta la recuperacion segura de credencial PostgreSQL admin/owner para el DDL B2B corregido PDF-010P. Confirma que el diseno B2B y el DDL ya estan listos, pero el bloqueo real sigue siendo credencial/permisos: openclaw_writer conecta al target gestion_de_negocios_core y puede leer, pero no tiene CREATE sobre business_observer, no es superuser y no es miembro de openclaw_bo_admin. .env local esta ignorado por Git y contiene APV_DESTINATION_POSTGRES_* y APV_LOCAL_POSTGRES_ADMIN_* sin imprimir valores; el VPS fue revisado sin secretos y no aporto credencial admin/owner target. Resultado: NO-GO CREDENTIAL; recomendacion unica: usar usuario postgres real del target u owner DB/schema aprobado en el proximo gate, o grant minimo candidate separado sin ejecutarlo. No se ejecuto DDL, SQL write, grants, backup, .env, WooCommerce API, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010Q documenta el gate de reintento controlado del DDL B2B corregido PDF-010P. Safe point 673320c confirmado, variables PostgreSQL detectadas sin imprimir valores y pg_dump/psql encontrados por ruta absoluta local, pero openclaw_writer no esta autorizado para DDL sobre business_observer. Resultado: NO-GO PRE-DDL; no hubo backup nuevo, no se ejecuto DDL, no se aplicaron grants/RLS, no se crearon objetos B2B y no hubo SQL write. La recuperacion segura confirmo .env local ignorado por Git con credenciales destino completas, VPS sin credencial admin/owner real del gate y APV_LOCAL_POSTGRES_ADMIN_* descartado porque no apunta al schema target.
  • PDF-010N documenta el gate controlado de DDL B2B con backup real y SQL write acotado: safe point 28249bc confirmado, validadores previos PASS, preflight read-only final GO, backup pg_dump -Fc creado fuera de Git y ejecucion del DDL candidate PDF-010K intentada con ON_ERROR_STOP=1 y transaccion unica. Resultado NO-GO: PostgreSQL rechazo el primer statement por permission denied for database gestion_de_negocios_core; no se crearon tablas/vista B2B, no se aplicaron grants/RLS y no se ejecuto rollback candidate. Bloqueo vigente: permisos del rol ejecutor y roles business_observer_* ausentes frente a roles reales openclaw_bo_*.
  • PDF-010O documenta el preflight read-only de permisos y el plan de reintento: DB/schema son propiedad de postgres, el usuario observado openclaw_writer no tiene CREATE sobre DB ni schema, no es miembro de openclaw_bo_*, los roles reales openclaw_bo_* existen y los roles business_observer_* no existen. Recomendacion: ajustar el DDL a roles reales openclaw_bo_* y ejecutarlo en gate posterior con usuario admin/owner aprobado. Estado: NO-GO PARA REINTENTO INMEDIATO.
  • PDF-010P prepara el DDL retry candidate local posterior a PDF-010O: trata business_observer como schema preexistente, cambia grants a roles reales openclaw_bo_admin, openclaw_bo_writer y openclaw_bo_reader, mantiene los objetos B2B de PDF-010K y alinea rollback. No ejecuta DDL, no ejecuta SQL write y queda NO-GO PARA EJECUCION hasta backup nuevo y autorizacion explicita.
  • PDF-010M prepara el preflight real read-only contra PostgreSQL/OpenClaw para validar DB, usuario, version, schema business_observer, roles, objetos B2B, permisos, extensiones visibles, backup/restore y rollback antes de cualquier DDL. En esta sesion quedo GO operativo para preflight read-only: DB gestion_de_negocios_core, usuario openclaw_writer, PostgreSQL 15.15, schema existente, roles canonicos openclaw_bo_* presentes y objetos B2B ausentes sin drift previo. No se imprimieron secretos y no se ejecuto SQL write ni DDL; el DDL sigue NO-GO hasta gate posterior separado.
  • PDF-010L prepara el preflight para la ejecucion controlada futura del DDL B2B en PostgreSQL/OpenClaw. Documenta safe point PDF-010K publicado, fuentes DDL/rollback candidate, checks read-only de DB/schema/roles/tablas/ permisos, backup/restore, rollback plan y criterios GO/NO-GO. Incluye validador estatico y generador de consultas read-only sin conexion por defecto. No ejecuta SQL write, no toca PostgreSQL real, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010K disena el contrato persistente B2B real como DDL candidate para PostgreSQL/OpenClaw, sin ejecutar SQL: tablas business_observer.b2b_customer_mapping, business_observer.b2b_product_price, business_observer.b2b_pricing_decision_log y vista business_observer.v_b2b_customer_effective_price. Incluye rollback candidate, RLS/permisos candidate para roles reader/writer/admin y validador estatico. No se toco PostgreSQL real, WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010J extiende el prototipo B2B con store local/simulado de mapping wc_customer_id -> sgc_customer_id, simulacion de catalogo, carrito, checkout y payload candidate de orden. Recalcula precios server-side por linea, bloquea mapping ausente/ambiguo, clientes suspendidos/de baja, listas invalidas, precios faltantes e inconsistencias de orden. Tests y dry-run local pasan sin tocar WooCommerce API, PostgreSQL, .env, runtime, sync, scheduler, cron ni pipelines.
  • PDF-010I implementa un prototipo tecnico local del motor de precios B2B, con Python puro y tests, usando solo snapshots locales ignorados por Git. Visitante no logueado usa PrecioListaFinal; cliente activo con mapping usa PrecioL{Lista_Precio}; suspendidos/de baja quedan BLOCKED_CUSTOMER_STATUS; cliente sin mapping queda BLOCKED_CUSTOMER_MAPPING; lista fuera de 1..9 queda BLOCKED_PRICE_LIST; y SKU sin precio o con precio <= 0 queda BLOCKED_PRICE_MISSING. Tests locales y dry-run no sensible pasan. No se toco WooCommerce API, PostgreSQL, .env, runtime, sync, scheduler, cron, pipelines, push ni deploy.
  • PDF-010H documenta el diseno y dry-run del runtime B2B antes de cualquier implementacion: matching wc_customer_id -> sgc_customer_id con metadata WooCommerce como fuente candidate principal, email/CUIT/WhatsApp solo como senales no automaticas, catalogo con visitante usando regular_price, cliente logueado usando Lista_Precio 1..9 -> PrecioL1..PrecioL9, carrito recalculado server-side y checkout/orden con validacion final y metadata por linea. Simula visitante, clientes Lista_Precio 1 y 5, clientes suspendidos/de baja y SKUs 3995/4010 como BLOCKED_PRICE_MISSING. No se toco WooCommerce API, PostgreSQL con writes, runtime, sync, scheduler, cron, pipelines, push ni deploy.
  • PDF-010G documenta la aprobacion comercial explicita de reglas B2B: Lista_Precio 1..9 -> PrecioL1..PrecioL9 pasa de PENDING_BUSINESS_CONFIRMATION a APPROVED, PrecioListaFinal queda aprobado como fuente del regular_price publico/default para visitante no logueado, y PrecioL1 no queda aprobado como default publico. Cliente logueado debe usar la lista asignada, carrito y checkout deben recalcular server-side, y la orden debe guardar lista/precio aplicado por linea. No se tocaron WooCommerce API, PostgreSQL, SQL, sync, clientes, productos, precios, deploy, push ni runtime.
  • PDF-010F documenta el cierre de diseno comercial candidate para precios B2B server-side: confirma que Lista_Precio 1..9 -> PrecioL1..PrecioL9 queda SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION, mantiene regular_price vigente respaldado por PrecioListaFinal, deja L1 como default publico en PENDING_VALIDATE, y disena el flujo futuro para cliente logueado wc_customer_id -> sgc_customer_id -> price_list_code -> sku + lista -> precio, con recalculo server-side en carrito y checkout y evidencia minima en orden. Define bloqueos BLOCKED_PRICE_LIST, BLOCKED_CUSTOMER_STATUS, BLOCKED_PRICE_MISSING y BLOCKED_CUSTOMER_MAPPING, mas riesgos de cache, precio visual vs carrito, seguridad comercial, performance y duplicados CUIT/WhatsApp/email. No se tocaron WooCommerce API, PostgreSQL con writes, secretos, sync, scheduler, cron, pipelines, push ni deploy.
  • PDF-010E documenta un dry-run B2B offline cliente -> lista de precio -> SKU -> precio usando solo snapshots locales sanitizados: SOURCE-001 confirma Lista_Precio 1..9 y SOURCE-002 confirma PrecioListaFinal y PrecioL1..PrecioL9. La matriz simula clientes activos y bloqueados, detecta SKUs 3995 y 4010 con precio 0.000 como BLOCKED_PRICE_MISSING, mantiene Lista_Precio -> L1..L9 como SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION y conserva L1 default publico como PENDING_VALIDATE. No se tocaron WooCommerce API, PostgreSQL, .env, sync, scheduler, cron, pipelines, push ni deploy.
  • PDF-010D ejecuta snapshot runtime read-only autorizado contra ecommerce.dbo.VCLIENTES, solo con consultas SELECT, sin imprimir secretos ni connection strings. Observa 11448 clientes, estados reales CLIENTE ACTIVO (5986), CLIENTE DE BAJA (5371) y CLIENTE SUSPENDIDO (91), y cierra el catalogo real de Lista_Precio como 1..9 sin vacios ni nulos. Genera snapshot local sanitizado ignorado por Git con sha256 5b7eb3bdbc6cc58c14247446c089fe8416eee1d2a296d261b03dca6da8166017. La correspondencia tecnica 1 -> L1 ... 9 -> L9 queda soportada por catalogo runtime, pero pendiente de confirmacion comercial antes de activar precios B2B o tocar WooCommerce.
  • PDF-010C valida en modo read-only el catalogo real requerido para Lista_Precio desde SOURCE-001 Clientes: confirma safe point 72a2961, verifica que no existe snapshots/source-001/ ni export alternativo local, marca SOURCE_001_RUNTIME_SAMPLE_MISSING, mantiene Lista_Precio -> L1..L9 como PENDING_VALIDATE, preserva PrecioListaFinal como regular_price vigente y deja bloqueada toda creacion de clientes WooCommerce o activacion de precios B2B hasta obtener snapshot o autorizacion read-only separada. No ejecuta API, SQL, PostgreSQL writes, sync, cron, push ni deploy.
  • PDF-010B valida en modo read-only la autoridad real de precios B2B y la lista asignada por cliente antes de sincronizar: confirma safe point 24ad2aa, inventaria campos PrecioListaFinal, PrecioL1..L9, PrecioNetoL1..L9, IVAPrecioL1..L9 y MargenL1..L9, mantiene L1 como PENDING_VALIDATE, confirma en SOURCE-001 el campo Lista_Precio como lista_precio/price_list_code_raw, y define modelos candidate de precios y clientes B2B. No ejecuta API, SQL, PostgreSQL writes, sync, cron, push ni deploy.
  • PDF-010A documenta el contrato B2B para listas de precio por cliente y sync de clientes SGC -> PostgreSQL/OpenClaw -> WooCommerce: inventaria PrecioL1..PrecioL9, IVAPrecioL1..L9, PrecioNetoL1..L9 y MargenL1..L9; marca PENDING_VALIDATE que L1 sea precio publico default porque la evidencia vigente usa PrecioListaFinal como regular_price; define tablas conceptuales para precios por sku + price_list_code y mapping de cliente SGC/Woo; y fija que WooCommerce no debe ser fuente maestra de listas multiples. No ejecuta API, PostgreSQL, SQL, sync, cron, push ni deploy.
  • PDF-009M documenta el primer piloto write controlado de productos WooCommerce en estado draft y catalog_visibility=hidden: se publico y desplego previamente PDF-009L, se valido .env ignorado por Git y variables WooCommerce presentes sin imprimir valores, se confirmaron 28 categorias, Marca / pa_marca (attribute_id=1) y 48 terminos, y se crearon 10 productos draft (2442, 2443, 2444, 2847, 2446, 2814, 2815, 2816, 3514, 0269) con GET posterior por SKU. No hubo publish, categorias nuevas, marcas nuevas, imagenes, Media Library, PostgreSQL writes, sync masivo ni scheduler/cron/pipelines.
  • PDF-007D documenta la carga inicial productiva controlada SOURCE-003 como VERDE en PostgreSQL productivo dedicado.
  • PDF-008A prepara SOURCE-002 Productos como candidate WooCommerce-ready, sin carga real, sin SQL ejecutado y sin tocar WooCommerce ni La Directa.
  • PDF-008B amplia SOURCE-002 Productos a full use-case preflight: WooCommerce, stock actual, snapshot diario, faltantes, activos/inactivos, precios, costos, margen, proveedor, logistica, ventas SOURCE-003, alertas y reposicion; preflight runtime y snapshot quedan bloqueados hasta mecanismo seguro/autorizacion separada.
  • PDF-008C ejecuta preflight runtime read-only SOURCE-002 con lectura segura autorizada de .env, registra conteos no sensibles (314 productos, 81 columnas, 0 SKUs duplicados) y snapshot fuera de Git con SHA256.
  • PDF-008D prepara el paquete DDL/load candidate desde el snapshot PDF-008C, con modelo raw/core/catalog/inventory/economic/mart, scripts .candidate.sql bloqueados por defecto y sin ejecutar carga, COPY, DML, PostgreSQL write ni WooCommerce.
  • PDF-008E documenta la ejecucion real verde del DDL productivo SOURCE-002 Productos, con backup pre-DDL validado, siete tablas creadas vacias, owner/grants esperados, SOURCE-003 intacto, carga de productos NO, WooCommerce NO TOCADO y sync/scheduler/cron/pipelines NO-GO.
  • PDF-008G documenta la ejecucion real verde de la carga inicial productiva SOURCE-002 Productos: snapshot 314 filas, 81 columnas, 314 SKUs unicos, batch 7dddfc3b-2026-48f0-8002-000000000008, RAW/CORE/catalog/ inventory/economic 314, mart stock alerts 100, stock > 0 212, stock = 0 100, con precio/costo 312, sin precio/costo 2, post-checks PASS, SOURCE-003 intacto, WooCommerce NO TOCADO y sync/scheduler/cron/pipelines NO-GO.
  • Warning vigente PDF-008G: los scripts oficiales de load PDF-008D siguen bloqueados por diseno con RAISE EXCEPTION; antes de sync, cron, scheduler, recarga o proceso repetible se debe formalizar el SQL operativo temporal de PDF-008F dentro de scripts oficiales versionados.
  • PDF-008H formaliza ese camino repetible en scripts oficiales candidate versionados, sin ejecutar SQL ni carga. PDF-008D queda como referencia historica y tecnica, no como camino operativo recomendado para recarga.
  • PDF-008I quedo AMARILLO CONTROLADO / NO-GO PARA RELOAD: preflight oficial PASS, backup pre-rehearsal creado, SOURCE-002 y SOURCE-003 intactos, pero RAW aborto por guarda incondicional antes de writes.
  • PDF-008I-B formaliza el hotfix de scripts oficiales PDF-008H: reemplaza guardas incondicionales por confirmaciones explicitas, agrega control del backup SHA256 esperado y corrige la regla precio/costo para tratar NULL OR 0 como sin precio/costo. No ejecuta recarga, SQL, COPY, DML ni rollback.
  • PDF-008I-C quedo AMARILLO CONTROLADO / NO-GO PARA RELOAD: preflight oficial PASS, backup pre-rehearsal retry validado, SOURCE-002 y SOURCE-003 intactos, pero RAW aborto en \copy antes de writes.
  • PDF-008I-D corrige el \copy RAW con path literal controlado /tmp/pdf008f-source002-products.jsonl y parametriza el SHA del backup pre-rehearsal esperado para que cada rehearsal valide su backup propio. No ejecuta recarga, SQL, COPY, DML ni rollback.
  • PDF-008I-E quedo AMARILLO CONTROLADO / NO-GO: RAW retry PASS, CORE retry PASS, pero derived aborto antes de COMMIT porque daily snapshot usaba fecha hardcodeada y el post-check contaba snapshots diarios por batch sin filtrar fecha.
  • PDF-008I-F corrige inventory_snapshot_date: agrega pdf008h_inventory_snapshot_date obligatoria, usa esa fecha en inventory_source_002_daily_snapshot y valida 314 filas por fecha explicita y batch. No ejecuta rehearsal, SQL, COPY, DML ni rollback.
  • PDF-008I-G documenta el retry verde del rehearsal controlado SOURCE-002 Productos: preflight PASS, RAW COPY 314 y upsert 314, CORE 314, derived PASS con catalog/inventory/economic 314, MARTS DELETE 100 e INSERT 0 100, post-checks PASS, SOURCE-002 314/314/314/314/314/314/100 y SOURCE-003 intacto. WooCommerce API no fue tocada y sync/scheduler/cron/pipelines siguen NO-GO.
  • PDF-009A prepara el mapping/API candidate de productos hacia WooCommerce La Directa, sin llamar API real y sin writes. Documenta mapping PostgreSQL -> WooCommerce, reglas funcionales, gaps, dry-run, idempotencia, wc_product_id futuro, create/update, logs seguros, rollback logico, rate limits, paginacion y errores. Crea paquete candidate en infra/business-observer/production/woocommerce/products/PDF-009A/.
  • PDF-009B-1 define la estrategia de extension previa a PDF-009B para decidir que datos de SOURCE-002 van por campos nativos WooCommerce, cuales quedan en meta_data, cuales deben permanecer solo en PostgreSQL, que no debe exponerse y por que hoy no hace falta plugin, register_rest_field, register_meta ni endpoint custom.
  • PDF-009B documenta el preflight real read-only de credenciales y acceso WooCommerce: .env ignorado por Git, variables requeridas presentes sin valores, GET minimo HTTP 200 con JSON valido y autenticacion OK, products per_page=5 HTTP 200 con 0 productos como condicion inicial esperada, SKUs 0135 y 0128 HTTP 200 con matched_count=0 tambien esperados por catalogo WooCommerce La Directa limpio antes de la primera carga, sin problema de API/autenticacion detectado, sin writes, sin PostgreSQL, sin secretos, sin push, sin deploy y sin sync/scheduler/cron/pipelines. Estado: VERDE TECNICO / AMARILLO FUNCIONAL ESPERADO.
  • PDF-009C documenta el dry-run read-only de comparacion SOURCE-002 contra WooCommerce: muestra local segura de 10 SKUs desde snapshot CSV validado por SHA256, GET products per_page=5 HTTP 200 con 0 productos, lookups por SKU HTTP 200 con matched_count=0 para toda la muestra, matriz conceptual CREATE/BLOCKED sin writes, y matriz de arquitectura que confirma Woo native para catalogo vendible, meta_data privada minima y PostgreSQL only para costos, proveedor, descuentos, margenes y listas multiples. Estado: DRY-RUN READ-ONLY / VERDE TECNICO / WOOCOMMERCE VACIO ESPERADO / NO WRITES.
  • PDF-009D documenta la politica futura de ciclo de vida de productos y sincronizacion frecuente de stock entre PostgreSQL/OpenClaw y WooCommerce La Directa, sin ejecutar API nueva ni writes. Separa Stock Sync frecuente con payload minimo (stock_quantity, stock_status, manage_stock) de Product Catalog Sync controlado, define CREATE conceptual para productos existentes en PostgreSQL/OpenClaw y ausentes en WooCommerce, DEACTIVATE futuro para estado DE BAJA, BLOCKED / MANUAL_REVIEW para productos existentes solo en WooCommerce y prohibe deletes automaticos. Estado: DISENO DOCUMENTAL / SIN API NUEVA / SIN WRITES.
  • PDF-009E define reglas comerciales y tecnicas pre-write candidate para WooCommerce La Directa: Category/SubCategoria -> product_cat como arbol padre/hijo con mapping aprobado, Marca como atributo visible inicial, ACTIVO como elegible pero no publish automatico, DE BAJA como status=draft, sin stock e imagen ausente como draft, sin precio como BLOCKED, PrecioListaFinal como regular_price candidate, sale_price protegido por guard de oferta, wc_product_id futuro en PostgreSQL/OpenClaw y productos solo en WooCommerce como BLOCKED / MANUAL_REVIEW. Estado: PUBLICADO EN origin/main / DESPLEGADO EN KNOWLEDGE PORTAL / DISENO DOCUMENTAL / DRY-RUN RULES / SIN API NUEVA / SIN WRITES.
  • PDF-009F documenta el payload final candidate dry-run para SOURCE-002 Productos -> WooCommerce La Directa: confirma safe point en a2ad77ad85049f091ea7cb41d4ea59cf6117b98f, ejecuta solo GET read-only de categorias, atributos y muestra por SKU, observa una unica categoria real Uncategorized (id=15) y 0 atributos, confirma matched_count=0 para los 10 SKUs previos, construye muestra representativa desde snapshot local SOURCE-002, arma payloads candidate CREATE, UPDATE_STOCK, UPDATE_CATALOG, DEACTIVATE y BLOCKED, y bloquea todo publish/write de catalogo hasta mapping real de categorias e imagen aprobada. Estado: PUBLICADO EN origin/main / DESPLEGADO EN KNOWLEDGE PORTAL / PAYLOAD FINAL CANDIDATE / DRY-RUN / READ-ONLY GET / SIN WRITES.
  • PDF-009G documenta el mapping candidate de categorias, imagenes y atributos para SOURCE-002 Productos -> WooCommerce La Directa: confirma WooCommerce read-only con unica categoria Uncategorized (id=15), 0 atributos y 0 productos; inventaria el snapshot SOURCE-002 de 314 productos, 21 pares Category/SubCategoria, 49 marcas, 0 columnas de imagen y 2 SKUs sin precio; deja todos los pares de categoria en NEEDS_CREATE_CATEGORY_GATE o BLOCKED, Marca en atributo visible candidate con eventual NEEDS_CREATE_ATTRIBUTE_GATE, e imagenes en DRAFT_BLOCKED hasta fuente o placeholder aprobado. Estado: MAPPING DOCUMENTAL / READ-ONLY DISCOVERY / SIN WRITES / CANDIDATE.
  • PDF-009H documenta el contrato frontend para filtros y datos visibles por producto: Articulo se renderiza como name y no es filtro; Marca se renderiza y debe ser filtro mediante atributo global/taxonomia optimizada; Unidades_x_Bulto y CantVtaMin se renderizan en card/listado y ficha, pero no son filtros ni taxonomias; Images se renderiza, no es filtro y queda como coleccion ordenada candidate Images jsonb en PostgreSQL/OpenClaw, con media_id, url, featured, orden, title/alt actual y esperado, y status; las imagenes no vienen desde SGC, se cargan manualmente desde WooCommerce Admin y pueden descubrirse read-only para normalizacion y reporte de cleanup. pgvector queda descartado para imagenes y tabla hija normalizada queda como alternativa futura si performance/volumen/auditoria lo exige. meta_data queda prohibida para filtros masivos y WooCommerce queda bajo regla permanente de maxima performance. Estado: FRONTEND DATA CONTRACT / DISENO DOCUMENTAL / SIN WRITES / CANDIDATE.
  • PDF-009I documenta la decision candidate de Marca como atributo global WooCommerce filtrable con slug sugerido pa_marca y el discovery read-only de Media Library: WooCommerce conserva 0 atributos, 1 categoria Uncategorized, 0 productos y 1 attachment visible por API; ese media item queda sin alt_text, sin SKU en title y unattached reciente. Confirma Images jsonb operativo con media_id, url, is_featured, sort_order, title/alt actual y esperado, y status. Estado: MARCA GLOBAL + MEDIA LIBRARY DISCOVERY / READ-ONLY GET / SIN WRITES / CANDIDATE.
  • PDF-009J documenta el primer write controlado minimo sobre WooCommerce La Directa: GET previo de atributos count=0, POST unico autorizado HTTP 201 para crear Marca (attribute_id=1, slug=pa_marca, type=select, order_by=name, has_archives=true) y GET posterior count=1. Estado: WRITE CONTROLADO MINIMO / ATRIBUTO GLOBAL MARCA CREADO / SIN PRODUCTOS.
  • PDF-009K documenta el write controlado de terminos de marca bajo Marca / pa_marca (attribute_id=1): GET previo de terminos count=0, 49 marcas detectadas desde SOURCE-002, NO APLICA bloqueada por revision manual, 48 terminos creados con HTTP 201 y GET posterior con 48 terminos count=0. Estado: WRITE CONTROLADO / TERMINOS MARCA CREADOS / SIN PRODUCTOS.
  • PDF-009L documenta el write controlado de categorias WooCommerce para SOURCE-002 Productos -> La Directa: GET previo de categorias con solo Uncategorized (id=15), 21 pares Category/SubCategoria, 6 pares VARIOS bloqueados como MANUAL_REVIEW, 12 categorias padre creadas y 15 categorias hijas creadas (27 categorias nuevas), con GET posterior HTTP 200 y todas las categorias count=0 porque no se tocaron productos. Estado: WRITE CONTROLADO / CATEGORIAS CREADAS / SIN PRODUCTOS.
  • IMPORT-RUNTIME-STANDARD-SAFE-BATCHED-IMPORTS queda como estandar obligatorio antes de recargas, importadores Python productivos, sync, scheduler, cron o pipelines sobre fuentes SGC. Documenta extraccion por lotes, snapshots fuera de Git, hash, timeouts, reintentos, throttling, idempotencia y compatibilidad con SQL Server 2012 legacy leido por vistas.
  • RAW prod 1886, CORE prod 1886, MART daily/seller/customer/sku 1/25/173/180, importe total 48087486.8300, CMV total 37881269.3025.
  • El target prod vacio que quedo dentro de staging queda LEGACY_EMPTY_TARGET / PENDING_CLEANUP.
  • Sync, scheduler, cron y pipelines siguen NO-GO.
  • El proximo gate recomendado es un gate separado de mapping real de categorias WooCommerce e imagenes, con IDs/slugs aprobados o bloqueos explicitos antes de cualquier write. Create/update/delete, sync/scheduler/cron/pipelines siguen NO-GO.